1. 程式人生 > >JavaSE基礎總結(筆試面試題)

JavaSE基礎總結(筆試面試題)

目錄

JavaSE基礎

1.物件例項化

2.類的過載:

3.不定長引數,本質是一個數組形式,int...a

4.方法中使用全域性變數 this

5.形參列表中的變數是區域性變數

6.構造方法的作用:

7.父類和子類中,靜態程式碼塊、程式碼塊、構造方法、普通方法執行順序

8.修飾符修飾範圍

9.子類只能繼承父類非private的方法

10.instanceof

11.抽象方法不可以被private修飾

12.抽象類和介面的比較

13.匿名內部類常用於實現介面或抽象類

14.基本型別的包裝類

15.Integer.parseInt()和  Integer.valueOf()

16.Object類中的方法:

17.String,StringBuffer,StringBulider的區別

18.BigDemail用於精確計算

19.集合只能存放抽象資料型別

20.兩個物件相等,hashCode一定相同,但hashCode相同不一定是同一個物件

21.equals 方法被覆蓋之後,hashCode也一定會被覆蓋

22.ArrayList,Vector 使用陣列實現,LinkedList使用的是雙向連結串列

23.ArrayList常用方法:

24.解決ArrayList 執行緒不安全問題

25.解決HashMap執行緒不安全問題

26.堆和棧

25.集合原始碼分析

26.ArrayList和LinkedList區別

27.Deque 中的LinkedList 和 ArrayDeque的區別

29.final 、finally 、finalize

30.IO體系中存在的設計模式:

31.IO

32.windows 系統中使用"\"表示的路徑分隔符,但是 java 中"\"轉義字元 ,所以"\\" 表示路徑分割,或者"/"表示路徑的分割建議使用這種形式

33.集合和資料間的相互轉化

34.序列化和反序列化(物件流 ObjectInputStream和ObjectOutputStream)

35.什麼時候需要實現序列化,如何實現?

36.深克隆和淺克隆

37.標誌性介面:

38.程序和執行緒的區別

39.多執行緒作用:

40.多執行緒的實現方式

42.多執行緒中不要呼叫run()方法,不然多執行緒會失效

43.多執行緒的生命週期

44.sleep(),wait()方法的區別 

45.執行緒控制:加塞join()(插隊)

46.執行緒安全

47.synchronized 鎖物件的時候,可以使用任意的物件

48.volatile關鍵字

49.synchronized關鍵字

50.併發和並行

51.原子性問題解決方案

52.Lock鎖

53.Lock鎖和synchronized的區別

54.條件鎖 Condition  需要結合Lock鎖

54.執行緒池中的執行緒是由執行緒建立的,程式設計師只需要建立執行緒池就可以

55.執行緒池建立的四種方式

56.執行緒池的任務:Callable或者Runnable任務

57.四種執行緒池的底層:ThreaPoolExecutor

58.同步容器:synchronize修飾,產生效能影響

59.併發容器:jdk1.5提出,改善同步容器效能,專門為併發環境設計

60.HashMap、HashTable、ConcurrentHashMap的區別

61.Java中的Callable和Runnable有什麼區別

62.Volatile

63.如何在兩個執行緒間共享資料?

64.為什麼wait, notify 和 notifyAll這些方法不在thread類裡面

65.什麼是FutureTask

66.為什麼要使用執行緒池

67.死鎖現象

68.死鎖解決辦法

69.檢測一個執行緒是否有鎖

70. 有三個執行緒T1,T2,T3,怎麼確保它們按順序執行

71.泛型的作用

72.如不指定泛型:集合中存放的資料預設為Obiect型別的

補充

1.構造方法不能被重寫,但可以過載,宣告為 final 的方法不能被重寫,宣告為 static 的方法不能被重寫,但是能夠被再次宣告。

2.抽象的(abstract)方法是否可同時是靜態的(static), 是否可同時是本地方法(native),是否可同時被 synchronized

3.靜態變數、例項變數

4. == 和 equale()區別

5.switch 後型別

6.陣列中沒有length方法,但是有length屬性,字串有length方法,javaScript中字串長度使用length屬性

7.資料型別轉換

8.流的分類

9.volatile 和 synchronized 的區別

10.敘述對於執行緒池的理解

11.對Java反射的理解

12.談談JVM的記憶體結構和記憶體分配

13.Java中的引用型別

14.棧和堆的區別

15.類的初始化

16.垃圾回收演算法

17.垃圾收集演算法

18.JDBC連線資料庫的步驟

補充

1.什麼時候使用二叉樹

2.先序遍歷規則

4.三次握手和四次揮手  http://blog.51cto.com/jinlong/2065461

5.HTTP請求/響應步驟

6.折半查詢:最多次數  log(2n)+1


JavaSE基礎

 

1.物件例項化

    (1)Class.forName(“類的全名稱”);

    (2)Person person = new Person();

2.類的過載:

           類名相同,形參列表不同(型別,順載序,個數),system.out.println();也是方法重

3.不定長引數,本質是一個數組形式,int...a

  • 定義方法時不確定有幾個入參時使用
  •  一個方法中只能有一個,位於形參末尾

4.方法中使用全域性變數 this

  1. 全域性變數(成員變數/成員屬性):編寫在類中
  2. 區域性變數:宣告在方法或者程式碼塊中

5.形參列表中的變數是區域性變數

6.構造方法的作用:

     使用構造方法建立物件並且可以為類中的屬性賦值(例項化物件)

  • 構造方法在建立的時候就給物件初始化; 一個物件建立構造方法只能執行一次;
  • 一般方法是物件呼叫才執行,給物件新增物件具備的功能; 一般方法可以被物件多次呼叫;

注意:多型分類

執行時多型(重寫時多型)

     父類引用接收子類的物件

編譯時多型

    方法過載方法名相同形參列表不同

7.父類和子類中,靜態程式碼塊、程式碼塊、構造方法、普通方法執行順序

 父類中的靜態變數和靜態程式碼塊

 子類中的靜態變數和靜態程式碼塊

 父類中的普通變數和程式碼塊->構造方法

 子類中的普通變數和程式碼塊->構造方法

 變數和程式碼塊的執行與宣告順序有關,變數一般宣告在程式碼塊前

8.修飾符修飾範圍

            ​

9.子類只能繼承父類非private的方法

10.instanceof

       instanceof是一個二元操作符,用法是:boolean result = a instanceof ClassA,即判斷物件a是否是類Class A的例項,如果是的話,則返回true,否則返回false。向下轉型,需要先向上轉型,而且只能轉化為本類物件

                         ​

11.抽象方法不可以被private修飾

12.抽象類和介面的比較

 

抽象類

介面

構造方法

可以有

不可以有

方法

可以有抽象方法和普通方法

只能有抽象方法,但1.8版本之後可以有預設方法

實現

子類用extend來實現

用implments實現

修飾符

public、default、protected

預設public

變數

可以有常量也可以有變數

只能是靜態常量預設有public static final修飾

main方法

可以有

不可以有

多繼承

單繼承

實現多個介面

靜態方法

可以有

不可以

速度

比較快

比較慢

13.匿名內部類常用於實現介面或抽象類

14.基本型別的包裝類

        int - Interger        char - character

       在-128~127之間的Integer值,用的是原生資料型別int,會在記憶體裡供重用,也就是說這之間的Integer值進行==比較時只是進行int原生數 據型別的數值比較,而超出-128~127的範圍,進行==比較時是進行地址及數值比較。

                          ​

15.Integer.parseInt()和  Integer.valueOf()

     Integer.parseInt()返回值為基本資料型別

     Integer.valueOf()返回值為包裝型別

16.Object類中的方法:

    equals(),finalize(),clone(),getClass()(返回執行時的類,有且僅有一份,可用  物件.getClass()  或者  forName.getClass(),)wait(),notify(),notifyAll(),hashCode(),toString().

17.String,StringBuffer,StringBulider的區別

       String只讀字串,意味著其引用的字串內容不能發生改變

       StringBuffer/StringBuilder 表示的字串物件可以直接進行修改。

       StringBuilder 是 Jdk1.5 中引入的,它和 StringBuffer 的方法完全相同,區別在於它是在單執行緒環境下使用的,

    因為它的所有方法都沒有被 synchronized 修飾,因此它的效率理論上也比StringBuffer 要高。

18.BigDemail用於精確計算

           ​

19.集合只能存放抽象資料型別

20.兩個物件相等,hashCode一定相同,但hashCode相同不一定是同一個物件

21.equals 方法被覆蓋之後,hashCode也一定會被覆蓋

22.ArrayList,Vector 使用陣列實現,LinkedList使用的是雙向連結串列

23.ArrayList常用方法:

 set(),get(),size(); HashMap常用方法:put():新增物件:get():獲得物件的值;

 size():檢視集合中的資料有多少個 

迭代方式

  1. for迴圈
  2. foreach
  3. 迭代器(collection介面下的集合都可使用)

                   ​

4.jdk1.8中出現了stream流

                ​

   Map迭代  (1)將Map轉化為Set集合,使用keySet

                  Set<String> keySet = mapkeySet();

                       (2)1.8新特性

                          map.forEach((k,v)->{

                                 system.out.println(k+"="+v);

                             });

24.解決ArrayList 執行緒不安全問題

    (1)轉化為執行緒安全的類

             ArrayList = Collection.synchronizedList(arrayList);

       (2)併發環境下可以使用CopyOnWriterList

25.解決HashMap執行緒不安全問題

   (1)轉化為執行緒安全類

         map = Collection.synchronizedMap(map);

       (2)併發環境下可以使用CurrentHashMap

26.堆和棧

   堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。

   {堆是指程式執行是申請的動態記憶體,而棧只是指一種使用堆的方法(即先進後出)。}棧是先進後出的,但是於堆而言卻沒有這個特性,兩者都是存放臨時資料的地方。

    佇列:先進先出,棧:先進後出  

25.集合原始碼分析

  (1)ArrayList  

       List介面可變陣列非同步實現,每次擴容擴為原來的1.5倍,執行緒不安全

  (2)Vector

       API與ArrayList相同,基於陣列實現,可擴容,有synchronize修飾,執行緒安全 

  (3)LinkedList

       底層是雙向連結串列,非同步,同時實現List和Deque,可以當佇列使用,執行緒不安全

  (4)ArrayDeque

       使用陣列實現的雙端佇列

  (5)HashSet

       底層使用雜湊表實現(陣列+連結串列),實際是由一個HashMap的例項支援的,允許使用NULL值

          使用該方法時,需要重寫equals和hashCode方法。

  (6)LinkedHashSet

       雜湊表+雙向連結串列實現

  (7)HashMap

       底層使用雜湊表(雜湊連結串列/陣列+連結串列)實現,陣列中每一項是個單向連結串列,即陣列和連結串列的結合體,可以儲存NUll值,1.8之後採用

          雜湊列表+紅黑樹的方式,執行緒不安全

  (8)HashTable

       底層使用陣列實現,陣列中每一項是個單鏈表,即陣列和連結串列的結合體,key和value不能為NUll

26.ArrayList和LinkedList區別

  ArrayList底層是用陣列實現的順序表,是隨機存取型別,可自動擴增,並且在初始化時,陣列的長度是0,只有在增加元素時,長度才會增加,預設是10,不能無限擴增,有上限,在查詢操作的時候效能更好

  LinkedList底層是用連結串列來實現的,是一個雙向連結串列,注意這裡不是雙向迴圈連結串列,順序存取型別。在原始碼中,似乎沒有元素個數的限制。應該能無限增加下去,直到記憶體滿了在進行刪除,增加操作時效能更好。      

27.Deque 中的LinkedList 和 ArrayDeque的區別

        LinkedListDeque使用的是連結串列實現的雙端佇列

        ArrayDeque 使用的是陣列實現雙端佇列

28.catch 可以出現多次,首先捕獲小異常,然後捕獲大異常

29.final 、finally 、finalize

   final 用於宣告變數,方法,類,表示變數不可改變(引用不能改變,只可以改變),方法不能重寫,類不可以被繼承

   finally 用於異常處理中,表示,必須要執行的程式碼塊,除非java虛擬機器停止工作,否則一定會執行

   finalize() 是Object類中的一個方法,用於java虛擬機器的垃圾回收

30.IO體系中存在的設計模式:

  裝飾模式 - 用於動態的給物件新增一些功能,類似於繼承,但是比繼承更加靈活

31.IO

  BIO 傳統IO,阻塞並同步    NIO,同步非阻塞   AIO 非同步非阻塞

32.windows 系統中使用"\"表示的路徑分隔符,但是 java 中"\"轉義字元 ,所以"\\" 表示路徑分割,或者"/"表示路徑的分割建議使用這種形式

33.集合和資料間的相互轉化

 (1)集合轉陣列

           List list = new ArrayList();

           String [] arr = list.toArray(new arr[list.size()]);

 (2)陣列轉集合

           String [] arr;

            List list = Array.asLast(arr);

34.序列化和反序列化(物件流 ObjectInputStream和ObjectOutputStream)

    物件序列化:將物件以二進位制的形式儲存到硬碟上

    物件反序列化:將硬碟上的二進位制檔案轉化為物件輸出      

35.什麼時候需要實現序列化,如何實現?

    把一個物件寫入資料來源或者將物件從資料來源讀出來,序列化物件要實現serializable介面(標誌性介面,方法為空)      

36.深克隆和淺克隆

  淺克隆:物件需要Cloneable 並重寫 clone() 方法  

   深克隆:物件要實現Cloneable,Serialzable介面,引用要實現Serialzable介面,先將物件以流的方式寫入,然後讀出,完成深克隆

37.標誌性介面:

   介面中的內容為空,如Cloneable和Serialzable

38.程序和執行緒的區別

   程序指得是作業系統對於某一事件的程式例項

   執行緒是微觀的程序,程序有一個或者以上的執行緒組成

39.多執行緒作用:

   降低開發和維護開銷,並提高複雜應用的效能,提高資源利用率和吞吐量

40.多執行緒的實現方式

    (1)繼承Thread類並重寫run()方法;

       (2)實現Runnable介面並重寫run方法;

       (3)實現Callable介面由FeatureTask建立

       (4)通過執行緒池建立 如ExecutorService

42.多執行緒中不要呼叫run()方法,不然多執行緒會失效

43.多執行緒的生命週期

       新建:當通過new操作符建立一個執行緒時,處於新建狀態

       就緒:使用start()方法之後處於就緒狀態

       執行:真正執行run()方法

       阻塞:執行了sleep()、wait() 方法後

       死亡:當執行緒執行完或者因為異常退出run()方法後

44.sleep(),wait()方法的區別 

   sleep() 屬於Thread類,wait() 屬於Object類

   sleep()執行後不會釋放物件鎖,wait()會釋放物件鎖,重新進入就緒狀態需要notify()或者notifyAll方法

45.執行緒控制:加塞join()(插隊)

             睡眠sleep()沒有放棄CPU的執行權

                      讓步yield()放棄CPU的執行權

46.執行緒安全

   指的是多執行緒訪問同一個方法、物件或程式碼時不會產生不確定的結果  

  引起執行緒安全的原因:存在多條執行緒共同操作的共享資料

47.synchronized 鎖物件的時候,可以使用任意的物件

48.volatile關鍵字

      使用該關鍵字修飾變數  表示變數是多執行緒可見的。每一個執行緒在執行的時候自己的執行緒記憶體,執行緒記憶體中存放的是主記憶體的資料的拷貝。如果使用volatile關鍵字修飾變數,執行緒在使用變數的時候不是從執行緒記憶體中獲取,而是從主記憶體中獲得資料。

49.synchronized關鍵字

   當synchronized修飾靜態方法時,修飾的是當前類的class物件鎖

   當synchronized修飾例項方法時,修飾的時物件中的例項方法

50.併發和並行

   併發:一個處理器同時處理多個任務

   並行:多個處理器處理不同的任務

51.原子性問題解決方案

  (1)使用同步程式碼塊或同步方法  

  (2)使用原子性操作的類 java.util.concurrent.atomic  底層使用CAS實現 (CompareAndSwap)

52.Lock鎖

   實現類為ReentrantLock   Lock lock = new ReentrantLock();

                                               lock.lock();

53.Lock鎖和synchronized的區別

   Lock產生異常時不會自動釋放鎖  所以要在finally中釋放鎖(lock.unlock();)

   synchronized修飾的鎖產生異常時會自動釋放

54.條件鎖 Condition  需要結合Lock鎖

54.執行緒池中的執行緒是由執行緒建立的,程式設計師只需要建立執行緒池就可以

55.執行緒池建立的四種方式

ExecutorService executor1 = executors.newSingleThreadExecutor();//建立只有一個執行緒的執行緒池

ExecutorService executor2 = executors.newFixedThreadPool(10);//建立一個固定數量執行緒的執行緒池

ExecutorService executor3 = executors.newCachedThreadPool();//建立一個可拓展的執行緒池,沒有上限

ExecutorService executor4 = executors.newScheduledThreadPool();//建立一個可以輪序執行的

56.執行緒池的任務:Callable或者Runnable任務

57.四種執行緒池的底層:ThreaPoolExecutor

58.同步容器:synchronize修飾,產生效能影響

59.併發容器:jdk1.5提出,改善同步容器效能,專門為併發環境設計

   (1)HashMap(執行緒不安全)、HashTable(執行緒安全)  可以用  ConcurrentHashMap代替

   (2)ArrayList、vector 可以使用 CopyOnWriteArrayList

   (3)set 可以使用CopyOnWriteArraySet

   (4)Queue 可以使用 ConcurrentLinkedQueue(高效能佇列) 或linedBlokingQueue(阻塞佇列)

              

相關推薦

JavaSE基礎總結筆試試題

目錄 JavaSE基礎 1.物件例項化 2.類的過載: 3.不定長引數,本質是一個數組形式,int...a 4.方法中使用全域性變數 this 5.形參列表中的變數是區域性變數 6.構造方法的作用: 7.父類和子類中,靜態程式碼塊、程式碼塊、構造方法、普通方法執行順序

MyBatis總結試題

目錄 Mybatis 1.談談MyBatis 2.Mybatis分為三層 3.Mybatis和jdbc的區別  4.對映檔案 5.模糊查詢:LIKE 6.$和#的區別 7.主鍵自增 8.API 9.SqlSession不是執行緒安全的 10.呼叫

Spring框架總結試題

目錄   Spring 1.談談Spring 2.Spring包含JavaEE中三層每一層的解決方案 3.Spring 框架的優點 4.首先需要匯入的4個包 5.IOC:控制反轉,將原本在程式中手動建立物件的控制權交給了Spring框架來管理。 6.DI:依

javase基礎總結總結

忙忙碌碌,時間過得很快,已經一個月零4天了,每次新開課程的時候就覺得自己有些頭大,總覺得很多人能夠直接理解或者記憶的東西,我需要更多的時間去學習和記憶,每次都需要時間去消化,上這麼久課了,很少有能夠讓我覺得直接可以會,可以直接消化,需要更多的時間精力去接受,可能天賦不夠 ,只能勤奮來湊,也給自己

今日頭條Java工程師崗面試分享,我總結的失敗原因試題

  面試崗位: 後端研發工程師 找牛客大佬要了白金碼,跳過死亡筆試,直接視訊面,從3點開始,到晚上8點結束。

Google試題有四個線程1、2、3、4同步寫入數據……C++11實現

blog image more http auto 最終 進行 .get fall 最近在學習多線程,題目源自 MoreWindows先生的 《秒殺多線程第一篇》(http://blog.csdn.net/morewindows/article/details/739274

what's the python之可叠代對象、叠代器與生成器試題

urn for循環 生成器 出現 擁有 移動 iterable 文本 協議 可叠代對象 字符串、列表、元祖、集合、字典都是可叠代的,數字是不可叠代的。(可以用for循環遍歷取出內部元素的就是可叠代的) 如何查看一個變量是否為可叠代: from collections im

一年iOS工作經驗,如何拿下百度、美團、快手等Offer試題

前言:先簡單說說我最近的面試經歷吧。面試的公司很多,大部分最後都能得到令人滿意的結果,我將這些體會記錄下來,面了這麼多公司,如果不留下什麼,那豈不是太浪費了。對於我來說,這也是一次自我檢查,在這次面試中總結經驗,認清自己,同時希望這些對即將換工作或者打算看看其他機會的你有一些

聊聊java中的繼承試題

首先了解下為什麼要有繼承 舉個例子,我們要定義幾個類,學生類,老師類,清潔工類,在他們裡面都要定義一個吃飯的方法,那麼,每個類裡面都定義是不是有些麻煩,於是出現了繼承,想想,學生老師清潔工都是人,這個時候我們可以定義一個人類,裡面定義一個吃飯的方法,然後這幾個類再繼承人類,

TCP擁塞控制機制試題

產生的原因 ∑對資源的需求>可用資源∑對資源的需求>可用資源 注意 單純的增加網路資源無法解決問題 例如:把結點的儲存空間擴大,更換更高速率的鏈路,提高結點處理機的運算速度,不僅不能解決問題,而且可能使網路效能更壞。 原因

機器學習工程師|資料科學家面試流程介紹試題

問題導讀1.機器學習工程師面試的流程是什麼?2.本文典型的第一輪面試由哪三部分組成?3.對於基本

一份來自一月寒冬互聯網一線的試題

white col 排序 簡單 請求 走了 才會 www. 朋友 1.背景: 因為公司變動,lz不得不出來看看機會, 面試的崗位主要是後端,歷經三周,面了北京大大小小的幾家公司,最後收獲了滿意的offer。 自己也成長收獲了不少, 謹以筆記,自己可以日後回憶,也希望能幫助到

利用原型對原始物件的方法進行擴充套件javascript試題

來源: 這是一個很常見的javascript面試題目。 通常喜歡出的題目是: 對String物件定義一個重複n次數的方法。或者是對Array物件擴充套件一個求和的方法。 下面我就以擴充套件Array的求和方法作為例子。有興趣的同學可以自己寫寫第一個題目。

將兩個已排序的連結串列歸併成一個連結串列C++試題

題目: 將兩個已經排好序的連結串列組合成一個排序的連結串列。 /* 歸併排序的思想 時間:2015年4月8日 19:59:02 */ #include <iostream> #include <cstdlib> using namespace

JAVASE基礎-day20IO(位元組流)

20.01_IO流(IO流概述及其分類) 1.概念 IO流用來處理裝置之間的資料傳輸 Java對資料的操作是通過流的方式 Java用於操作流的類都在IO包中 流按流向分為兩種:輸入流,輸出流。 流按操作型別分為兩種: 位元組流 : 位元組流可以操作任何資

【ForOffer】試題基礎總結3

介面是不能例項化的,但是可以例項化介面的類的物件。比如 Map m = new hashMap()。 什麼是執行緒?與程序有什麼區別?為什麼要使用多執行緒? 執行緒是一個程度執行過程中,能夠執行程式程式碼的一個執行單元。有四種狀態:執行,掛起,就緒,結

C++概念總結筆試試題總結

1. C 和 C++ 的區別 a. C 是面向過程、結構化的語言; C++ 是面向物件、模組化的語言,主要特點是封裝、繼承、多型。 b. 動態管理記憶體的方法不同,C 中用 malloc / free 分配、釋放記憶體; C++中還有 new / delete。 c. C++ 中有引用,

leetcode 騰訊筆試試題之連結串列題目總結持續更新。。。

一、合併兩個有序連結串列(簡單) 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。  示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3-&

STL筆試試題總結乾貨

STL筆試面試題總結 一.STL有哪些元件? STL提供六大元件彼此此可以組合套用: 1、容器 容器就是各種資料結構,我就不多說,看看下面這張圖回憶一下就好了,從實現角度看,STL容器是一種class template。 2、演算法 各種常見演算法,如sort,s

筆試試題總結--- 軟體開發

1.Huffman編碼中的貪心策略,該部分所需要的計算時間。 首先,要理解Huffman編碼中那部分用到了貪心演算法,貪心的策略,這樣才能求所需的計算時間。 哈夫曼編碼演算法:每次將集合中兩個權值最小