天天看點

刷題筆記 | 京東2018秋招Android工程師筆試題

題目來自牛客網真題 傳送門

1.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:Java隻能直接繼承自一個父類,即隻支援單重繼承,而可以實作多個接口。

2.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:

  • Java建立線程有三種方式:

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

    2.實作 Runable 接口,重寫 run() 方法;

    3.使用Callable和Future接口建立線程。

    參考:

    java 多線程總結(一) 建立線程的幾種方法及對終止線程運作的讨論
  • 線程間通信所使用的方法wait , notify , notifyAll 是Object類提供的方法:
    1. wait(): 将目前線程加入到等待隊列中,等待其他線程調用notify或者notifyAll來喚醒。
    2. notify(): 喚醒在等待隊列中等待的單個線程. 如果多個線程都是在等待隊列中等待, 則随機喚醒一個.
    3. notifyAll(): 喚醒所有在等待隊列中等待的所有線程。

關于第二個選項後續補充

3.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:onSaveInstanceState()方法隻有在activity異常終止(如:螢幕旋轉)時才會調用。當Activity異常終止時,系統會調用onSaveInstanceState()方法來儲存目前Activity的狀态(調用發生在onStop() 之前);當Activity被重建之後,系統調用onRestoreInstanceState()方法來恢複Activity的狀态(調用發生在onStart()之後)。

4.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:Activity被強制關閉(即異常情況下),系統會自動調用onSaveInstanceState()方法和onRestoreInstanceState()方法,儲存和恢複UI狀态。

5.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:程序死鎖:如果多個程序同時占有對方需要的資源而同時請求對方的資源,而它們在得到請求之前不會釋放所占有的資源,那麼就會導緻死鎖的發生,也就是程序不能實作同步。

題目分析:要保證無論如何都不發生死鎖,就要從極端情況考慮:當四個并發程序都占有了4個資源時,再加上一個資源,就能保證至少有一個程序可以獲得5個資源,進而保證不會發生死鎖。即:4*4+1=17個。

6.

刷題筆記 | 京東2018秋招Android工程師筆試題

參考部落格:

tcp關閉狀态詳解
刷題筆記 | 京東2018秋招Android工程師筆試題

盜了一張圖

7.

刷題筆記 | 京東2018秋招Android工程師筆試題

題目分析:正常思路分析的話,可以從最後一個入棧元素入手,分以下情況讨論:

  1. 4××× 若最後一個元素第一個出棧,說明前面入棧的元素都沒有出棧,是以隻有一種出棧序列:4321。
  2. ×4×× 若最後一個元素第二個出棧,說明前面入棧的元素有兩個沒有出棧,并且其出棧順序固定,是以有三種出棧序列:1432,2431,3421。
  3. ××4× 若最後一個元素第三個出棧,則其前面出棧的兩個元素順序不定,是以有6種出棧序列:1243,2143,1342,3142,2341,3241。
  4. ×××4 若最後一個元素最後出棧,即最後一個元素對前三個元素的入棧和出棧沒有任何影響,那麼就可以用這個思路對 123 這個序列進行分析,将3作為最後一個入棧的元素,依次類推。有三種出棧序列:3214,2314,1234,2134。

特别說明:題目滿足

卡特蘭數

,可用公式

刷題筆記 | 京東2018秋招Android工程師筆試題

計算。即

刷題筆記 | 京東2018秋招Android工程師筆試題

=

刷題筆記 | 京東2018秋招Android工程師筆試題

= 14。

8.

刷題筆記 | 京東2018秋招Android工程師筆試題

答案有争論,後續整理更新

9.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:^ 會比對行或者字元串的起始位置;[^] 表示不接受該字元集合;

    + 表示重複1次及以上(1~n);

    * 表示重複0次及以上(0~n);

    ? 表示重複0次或1次;

題目分析:^d表示以 d 開頭,d+ 表示d重複至少一次,[^d] +表示任意不含d的字元串。

10.

刷題筆記 | 京東2018秋招Android工程師筆試題

題目分析:第一次查找 (0+10)/2 = 5 下标為5的數:50<90;

     第二次查找(6+10)/2=8 下标為8的數:90 。

11.

刷題筆記 | 京東2018秋招Android工程師筆試題

題目分析:根據前序周遊(中左右)序列可知,A為根節點,接下來看中序周遊(左中右)序列,則DBGE為左子樹,CHF為右子書;接下來,看左子樹的前序周遊序列:BDEG,是以左子樹的根節點為B,那麼左子樹的左孩子和右子樹分别為D和GE;接着看右子書的前序周遊序列:CFH,是以右子書的根節點為C,那麼右子樹的右子樹為FH;以此類推即可得該二叉樹。

12.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:FileInputStream和FileOutputStream可以對檔案進行讀寫;BufferReader和BufferWriter帶緩存,也可以對檔案進行讀寫。

13.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:Last-Modified 标示這個響應資源的最後修改時間。

    Etag web伺服器響應請求時,告訴浏覽器目前資源在伺服器的唯一辨別。

14.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點: between 關鍵字是一個閉區間。

&lt; <
&lt;= <=
&gt >
&gt;= >=

15.

刷題筆記 | 京東2018秋招Android工程師筆試題
刷題筆記 | 京東2018秋招Android工程師筆試題

16.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:shell函數在調用時直接寫函數名,不帶括号。

shell中函數的定義和使用

17.

刷題筆記 | 京東2018秋招Android工程師筆試題

awk用法:awk 'BEGIN{執行前語句}{每一行執行的語句}END{所有行執行完後執行的語句}'

執行個體:累加每行第一列數字

awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'

也可以省略BEGIN

awk '{sum+=$1}END{print sum}'

18.

刷題筆記 | 京東2018秋招Android工程師筆試題
  1. GET請求送出參數有長度限制,而POST沒有長度限制;
  2. POST方式比GET安全,因為GET方式所發送的資料是URL的一部分,而POST參數不會被儲存在浏覽器曆史或web伺服器日志中。

19.

刷題筆記 | 京東2018秋招Android工程師筆試題
Android事件攔截機制

20.

刷題筆記 | 京東2018秋招Android工程師筆試題

知識點:常用的布局優化方式有:

  1. 使用include标簽實作布局重用,例如自定義的ToolBar;
  2. 使用merge标簽減少不必要的嵌套,用于除去沒有background等屬性的外層FrameLayout;
  3. ViewStub标簽實作延遲加載。

推薦一篇部落格:

一些你需要知道的布局優化技巧

21.

刷題筆記 | 京東2018秋招Android工程師筆試題
ANR問題總結

22.

刷題筆記 | 京東2018秋招Android工程師筆試題
  1. TCP是面向連接配接的,而UDP是無連接配接的;
  2. TCP提供可靠的服務,UDP盡最大努力傳遞,即不保證可靠傳遞;
  3. TCP隻支援點對點,UDP支援一對一、一對多、多對多的互動通信;

23.

刷題筆記 | 京東2018秋招Android工程師筆試題
刷題筆記 | 京東2018秋招Android工程師筆試題

24.

刷題筆記 | 京東2018秋招Android工程師筆試題

題目分析:

  1. C選項表示從表中查找有課程成績大于80的學生姓名(不是所有課程成績大于80);
  2. D選項表示查找最低分數大于80的學科(将 sub_name 改為 stu_name 即為正确)。

25.

刷題筆記 | 京東2018秋招Android工程師筆試題
刷題筆記 | 京東2018秋招Android工程師筆試題

題目分析:對于這個題,隻需要知道靜态塊最先執行就可以得出答案。

測試部落格:

特地寫了兩個簡單的類進行了測試

繼續閱讀