日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2018年面试题大全

發布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018年面试题大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JAVA?基礎知識

什么是?Java?虛擬機?為什么?Java?被稱作是?“?平臺無關的編程語言?”??

? ???Java?虛擬機是一個可以執行?Java?字節碼的虛擬機進程。?Java?源文件被編譯成能被?Java?虛擬機執行的字節碼文件。?

? ? ?Java?被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。?

? ? ?Java?被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。?

? ? Java?虛擬機讓這個變為可能,因為它知道底層硬件平臺的指令長度和其他特性。

簡述JAVA類加載機制?

? ? ?虛擬機把描述類的數據從?Class?文件加載到內存,并對數據進行校驗,解析和初始化,最終形成可以被虛擬機直接使用的?java?類型。

Java中常用的類,包,接口,請各舉5個

常用類:java.lang.Object、java.lang.String、java.lang.StringBuffer、java.lang.Math、java.lang.System,java.util.Vector,java.util.Date,java.text.DecimalFormate

常用包:java.lang,java.io,java.util,java.util.zip,java.net java.lang.reflect,java.awt.image,java.wat.peer ,java.aplet ,?java.corba,java.corba.orb,java..awt.datatransfer,java.awt,java.awt.event,java.sql

常用接口:Comparable ,Collection,set,Map,List,Runnable

請說一下final,finally和finalize的區別?

? ???final?用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

? ? ?finally是異常處理語句結構的一部分,表示總是執行。

? ? ?finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等

數組有沒有length()方法,String有沒有length屬性?

? ? 數組有length屬性,String有length方法

String s = new String("xyz"),創建了幾個對象。

? ? ?創建了兩個對象,一個是靜態區的。

”static”關鍵字是什么意思?Java中是否可以覆蓋一個private或者是static的方法?

? ? 如果一個類的變量或者方法前面有static修飾,那么表明這個方法或者變量屬于這個類,也就是說可以在不創建對象的情況下直接使用
? ? 當父類的方法被private修飾時,表明該方法為父類私有,對其他任何類都是不可見的,因此如果子類定了一個與父類一樣的方法,這對于子類來說相當于是一個新的私有方法,且如果要進行向上轉型,然后去調用該“覆蓋方法”,會產生編譯錯誤

?

class Parent { private fun() { ... } } class Child extends Parent { private fun() { ... } } class Test { public static void main(String[] args) { Parent c = new Child(); c.fun(); //編譯出錯 } }

static方法時編譯時靜態綁定的,屬于類,而覆蓋是運行時動態綁定的(動態綁定的多態),因此不能覆蓋.

?

Java支持的基本數據類型有哪些?

? ? java支持的基本數據類型有以下9種:byte,shot,int,long,float,double,char,boolean,void.

? ?自動拆裝箱是java從jdk1.5引用,目的是將原始類型自動的裝換為相對應的對象,也可以逆向進行,即拆箱。這也體現java中一切皆對象的宗旨。
? ?所謂自動裝箱就是將原始類型自動的轉換為對應的對象,而拆箱就是將對象類型轉換為基本類型。java中的自動拆裝箱通常發生在變量賦值的過程中,如:

Integer object = 3; //自動裝箱 int o = object; //拆箱

在java中,應該注意自動拆裝箱,因為有時可能因為java自動裝箱機制,而導致創建了許多對象,對于內存小的平臺會造成壓力。

?

Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?

? ? ? ?Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回與參數 最接近的長整數,參數加 1/2 后求其 floor.

String, StringBuffer StringBuilder的區別。

String 的長度是不可變的;

StringBuffer的長度是可變的,如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用 StringBuffer,如果最后需要 >String,那么使用 StringBuffer 的 toString() 方法;線程安全;

StringBuilder 是從 JDK 5 開始,為StringBuffer該類補充了一個單個線程使用的等價類;通常應該優先使用 StringBuilder 類,因>為它支持所有相同的操作,但由于它不執行同步,所以速度更快。?
使用字符串的時候要特別小心,如果對一個字符串要經常改變的話,就一定不要用String,否則會創建許多無用的對象出來.?
來看一下比較

String s = "hello"+"world"+"i love you";

StringBuffer Sb = new StringBuilder("hello").append("world").append("i love you");

這個時候s有多個字符串進行拼接,按理來說會有多個對象產生,但是jvm會對此進行一個優化,也就是說只創建了一個對象,此時它的執行速度要比StringBuffer拼接快.再看下面這個:

String s2 = "hello";

String s3 = "world";

String s4 = "i love you";

String s1 = s2 + s3 + s4

上面這種情況,就會多創建出來三個對象,造成了內存空間的浪費

equals()和hashCode()區別?

  • equals()相等的兩個對象,hashcode()一定相等,equals()不相等的兩個對象,卻并不能證明他們的hashcode()不相等。換句話說,equals()方法不相等的兩個對象,hashCode()有可能相等。(我的理解是由于哈希碼在生成的時候產生沖突造成的)

  • 反過來:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。在object類中,hashcode()方法是本地方法,返回的是對象的地址值,而object類中的equals()方法比較的也是兩個對象的地址值,如果equals()相等,說明兩個對象地址值也相等,當然hashcode() 也就相等了;

  • ?

    什么時候該使用什么樣的集合
    ? ? ? ?Collection
    ? ? ? ?我們需要保存若干個對象的時候使用集合。
    ? ? ? ?List
    ? ? ? ?如果我們需要保留存儲順序,?并且保留重復元素,?使用List.
    ? ? ? ?如果查詢較多,?那么使用ArrayList
    ? ? ? ?如果存取較多,?那么使用LinkedList
    ? ? ? ?如果需要線程安全,?那么使用Vector
    ? ? ? Set
    ? ? ? 如果我們不需要保留存儲順序,?并且需要去掉重復元素,?使用Set.
    ? ? ? 如果我們需要將元素排序,?那么使用TreeSet
    ? ? ? 如果我們不需要排序,?使用HashSet,?HashSet比
    ? ? ? TreeSet效率高.
    ? ? ? 如果我們需要保留存儲順序,?又要過濾重復元素,?那么使用LinkedHashSet

    Array?和?ArrayList?有何區別?什么時候更適合用?Array??

    ? ? ? ?1.????Array?可以容納基本類型和對象,而?ArrayList?只能容納對象。

    ?

    ? ? ? ? ? ? ?2.????Array?是指定大小的,而?ArrayList?大小是固定的

    ArrayList 和LinkedList 的優缺點? ? ? ? ?

    ? ? ? ? ArrayList是基于數組實現的,而LinkedList是基于鏈表實現的;如果應用需要快速訪問數據,很少或不插入和刪除元素,就應該用數組,也就是ArrayList;如果應用需要經常插入和刪除元素你就需要用鏈表數據結構了,也就是LinkedList。

    HashMap的工作原理

    一,存儲方式: Java中的HashMap是以鍵值對(key-value)的形式存儲元素的。
    二,調用原理: HashMap需要一個hash函數,它使用hashCode()和equals()方法來向集合/從集合添加和檢索元素。當調用put()方法的時候,HashMap會計算key的hash值,然后把鍵值對存儲在集合中合適的索引上。如果key已經存在了,value會被更新成新值。
    三,其他熱性: HashMap的一些重要的特性是它的容量(capacity),負載因子(load factor)和擴容極限(threshold resizing)。

    HashMap和HashTable的區別

    ? ? ? ? ?HashMap是非線程同步的,HashTable是線程同步的。

    ? ? ? ? HashMap允許null作為鍵或者值,HashTable不允許
    ? ? ? ? HashTable中有個一個contains方法,HashMap去掉了此方法效率上來講,HashMap因為是非線程安全的,因此效率比HashTable高

    set接口特點如下:

  • 不允許出現重復元素;
  • 集合中的元素位置無順序;
  • 有且只有一個值為null的元素。因為java中的set接口模仿了數學上的set抽象,所以,對應的數學上set的特性為:
  • 互異性:一個集合中,任何兩個元素都認為是不相同的,即每個元素只能出現一次。
  • 無序性:一個集合中,每個元素的地位都是相同的,元素之間是無序的。集合上可以定義序關系,定義了序關系后,元素之間就可以按照序關系排序。但就集合本身的特性而言,元素之間沒有必然的序。
  • 空集的性質:空集是一切集合的子集。
  • override重寫,overloadding重載

    ? ? 重寫是子類重新定義了父類的方法,重寫必有相同的方法名,參數列表和返回值類型。

    ? ? 重載是發生在同一個類里面的兩個或多個方法名相同,但參數不同的情況

    ?

    Iterator,ListIterator

    Iterator可以遍歷set和list集合,但是ListInterator只能用來遍歷List

    Itertator只能向前遍歷,ListIterator既可以向前也可以向后,

    ListIterator實現了Iterator接口。

    線程相關:

    關鍵字synchronized 、static、abstract、final

    • synchronized:用于方法或代碼塊前,使此方法或者代碼塊編程同步的。
    • static:用于聲明靜態變量,static關鍵字可以修飾變量,方法,靜態代碼塊。

    ? ? ? ? ? ? ? ? ? ? ? ? ??靜態變量:由static修飾的變量稱為靜態變量

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 靜態變量屬于類,而不屬于某個對象

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??靜態變量它的副本只有一個(靜態變量在類中只加載一)

    ? ? ? ? ? ? ? ? ? ? ? ? ?靜態方法:? 在靜態方法中只能調用靜態變量和靜態方法

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在非靜態方法中,可以調用靜態方法或者變量。

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??在靜態方法中不能使用this和super關鍵字。

    ? ? ? ? ? ? ? ? ? ? ? ? 靜態代碼塊

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??作用:用來給靜態成員變量初始化

    • abstract:用于定義抽象類或者方法
    • final:用于聲明常量,即只能賦一次值
    • volatile:用來確保將變量的跟新操作通知到其他線程,當把變量聲明為volatile類型后,編譯器與運行時都會注意到這個變量是共享的,因此不會將該變量上的操作與其他內存操作一起重排序。然而,在訪問volatile變量時不會執行加鎖操作,因此也就不會使執行線程阻塞,因此volatile變量是一種比?synchronized關鍵字更輕量級的同步機制。
    • serialize:Java 對象序列化為二進制文件

    JAVA中如何實現序列化以及實現序列化的意義

    實現Serializable接口

    意義:可以將硫化后的對象進行讀寫操作,也可用于網絡之間對象傳輸,序列化是為了解決對象流讀寫坐? ? ?坐時引發的問題。

    ?

    ArrayList 和 HashMap 的默認大小是多數?

    List?元素是有序的、可重復
    ArrayList、Vector默認初始容量為10
    Vector:線程安全,但速度慢
        底層數據結構是數組結構
        加載因子為1:即當 元素個數 超過 容量長度 時,進行擴容
        擴容增量:原容量的 1倍
          如?Vector的容量為10,一次擴容后是容量為20
    ArrayList:線程不安全,查詢速度快
        底層數據結構是數組結構
        擴容增量:原容量的 0.5倍+1
          如 ArrayList的容量為10,一次擴容后是容量為16
    ?
    Set(集)?元素無序的、不可重復。
    HashSet:線程不安全,存取速度快
         底層實現是一個HashMap(保存數據),實現Set接口
         默認初始容量為16(為何是16,見下方對HashMap的描述)
         加載因子為0.75:即當 元素個數 超過 容量長度的0.75倍 時,進行擴容
         擴容增量:原容量的 1 倍
          如 HashSet的容量為16,一次擴容后是容量為32
    ?
    Map是一個雙列集合
    HashMap:默認初始容量為16
         (為何是16:16是2^4,可以提高查詢效率,另外,32=16<<1 ? ? ??-->至于詳細的原因可另行分析,或分析源代碼)
         加載因子為0.75:即當 元素個數 超過 容量長度的0.75倍 時,進行擴容
         擴容增量:原容量的 1 倍

         如?HashSet的容量為16,一次擴容后是容量為32

    ?

    SpringMVC的生命周期??(執行流程)

    ? ? ? ?第一步:用戶發起請求到前端控制器(DispatcherServlet)
    ? ? ? ?第二步:前端控制器請求處理器映射器(HandlerMappering)去查找處理器(Handle):通過xml配置或者注解進行查找
    ? ? ? ?第三步:找到以后處理器映射器(HandlerMappering)像前端控制器返回執行鏈(HandlerExecutionChain)
    ? ? ? ?第四步:前端控制器(DispatcherServlet)調用處理器適配器(HandlerAdapter)去執行處理器(Handler)
    ? ? ? ?第五步:處理器適配器去執行Handler
    ? ? ? ?第六步:Handler執行完給處理器適配器返回ModelAndView
    ? ? ? ?第七步:處理器適配器向前端控制器返回ModelAndView(ModelAndView是springmvc框架的一個底層對象,包括?Model和view)
    ? ? ? ?第八步:前端控制器請求視圖解析器(ViewResolver)去進行視圖解析根據邏輯視圖名解析成真正的視圖(jsp)
    ? ? ? ?第九步:視圖解析器像前端控制器返回View
    ? ? ? ?第十步:前端控制器對視圖進行渲染視圖渲染將模型數據(在ModelAndView對象中)填充到request域

    ? ? ? ?第十一步:前端控制器向用戶響應結果?

    ?

    ?Hibernate中提供了兩級緩存,一級緩存是Session級別的緩存,它屬于事務范圍的緩存,該級緩存由hibernate管理,應用程序無需干預;二級緩存是SessionFactory級別的緩存,該級緩存可以進行配置和更改,并且可以動態加載和卸載,hibernate還為查詢結果提供了一個查詢緩存,它依賴于二級緩存;

    Struts2是單列還是多列?

    struts 2的Action是多實例的并非單例,也就是每次請求產生一個Action的對象。原因是:struts 2的Action中包含數據,例如你在頁面填寫的數據就會包含在Action的成員變量里面。如果Action是單實例的話,這些數據在多線程的環境下就會相互影響,例如造成別人填寫的數據被你看到了。
    而struts 1的Action是單實例的,因為它的數據保存在Form類中,多線程環境下,Action只負責處理一些邏輯,并沒有數據,也就是大家把它當做一個工具使用。同樣servlet也是單實例的。

    Struts2框架執行流程步驟如下:

    ? ? ? ? 1、 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求

    ? ? ? ? ?2、 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)?

    ? ? ? ?3、 接著FilterDispatcher(現已過時)被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action?

    ? ? ? ? 4、 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy?

    ? ? ? ? 5、 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類?

    ? ? ? ? 6、 ActionProxy創建一個ActionInvocation的實例。

    ? ? ? ?7、 ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。?

    ? ? ? ?8、 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper

    說說Cookie和Session的區別?
    ???
    ?? 1、Cookie和Session都是會話技術,Cookie是運行在客戶端,Session是運行在服務器端。
    ?
    ?? 2、session中保存的是對象,cookie中保存的是字符串。

    ?? 3、Cookie有大小限制以及瀏覽器在存cookie的個數也有限制,Session是沒有大小限制和服務器的內存大小有關。

    ?? 4、Cookie有安全隱患,通過攔截或本地文件找得到你的cookie后可以進行攻擊。

    ? 5、Session是保存在服務器端上會存在一段時間才會消失,如果session過多會增加服務器的壓力。

    ?友友們如果那里寫的不對請留言交流,希望能幫到友友們!

    ?

    總結

    以上是生活随笔為你收集整理的2018年面试题大全的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。