天天看點

京東android面試題2019,2019京東的面試題(牛客)

1、增量模型

把待開發的軟體系統子產品化,将每個子產品作為一個增量元件,進而分批次地分析、設計、編碼和測試這些增量元件

2、值類型和引用類型

值類型的變量指派隻是進行資料複制,建立一個同值的新對象,而引用類型變量指派,僅僅是把對象的引用的指針指派給變量,使它們共用一個記憶體位址。

3、如何在多線程中避免發生死鎖?

允許程序同時通路某些資源。

4、遞歸法

程式結構更簡潔

占用CPU的處理時間更多

要消耗大量的記憶體空間,程式執行慢,甚至無法執行

遞歸法比遞推法的執行效率低

5、字元串”ABCD”和字元串”DCBA”進行比較,如果讓比較的結果為真,應選用關系運算符

<

解釋:

按照編碼值進行比較。java文法上不允許

6、已知小頂堆:{51,32,73,23,42,62,99,14,24,3943,58,65,80,120},請問62對應節點的左子節點是

65

7、若串S=”UP!UP!JD”,則其子串的數目

一個八個字元串 公式n(n+1)/2 + 1 你可以把子串”bc”抽象為”a|bc|de”,這樣一來計算子串數目的問題其實就轉化成了計算字元串中放置邊界的問題,一個長度為n的字元串中可以放置n個邊界,放置第一個邊界後可以放置有n-1種選擇作為第二條邊界,這樣得到n(n-1)條子串,又因為兩條邊界順序互換子串不變,是以結果需要除以2,最後再加上字元串本身,得到n(n+1)/2 + 1。

是以8*9/2+1=37

8、一顆二叉樹的葉子節點有5個,出度為1的結點有3個,該二叉樹的結點總個數是?

葉子節點個數 = 5 ,因為葉子節點個數=度為2的結點個數加1,是以

度為2的結點個數=5-1=4,

度為1的結點個數 = 3,

是以總個數 = 5 + 4 + 3 = 12

9、一趟結束後能夠确定一個元素的最終位置的排序方法有

簡單選擇排序、快速排序、冒泡排序、堆排序

10、權值分别為9、3、2、8的結點,構造一棵哈夫曼樹,該樹的帶權路徑長度是?

一、對結點排序,為2,3,8,9

二、2和3的父節點為5(2+3的權值)

三、8大于2和3,8和5組成,父節點為13

四、9大于2、3、8,9和13組成,父節點為22

五、計算帶權路徑長度:結點的帶權路徑長度為從根結點到該結點之間的路徑長度與該結點的權的乘積。

32+33+28+19=40

11、後退N幀協定的發送視窗大小是(),接收視窗的大小是()?

滑動視窗協定有

1、停止等待協定,發送視窗=1,接受視窗=1;

2、退後N幀協定,發送>1,接收=1;

3、選擇重傳協定,發送>1,接收>1;

12、對于京東商城高流量通路,預防Ddos的方法可以有?

在三次握手過程中,伺服器發送SYN-ACK之後,收到用戶端的ACK之前的TCP連接配接稱為半連接配接(half-open connect)。此時伺服器處于SYN_RECV狀态。當收到ACK後,伺服器轉入ESTABLISHED狀态。

攻擊用戶端通過發包器,在短時間内僞造大量不存在的IP位址,向伺服器不斷地發送SYN包,伺服器回複确認包SYN/ACK,并等待客戶的确認,由于源位址是不存在的,伺服器需要不斷的重發SYN/ACK直至逾時,這些僞造的SYN包将長時間占用未連接配接隊列,正常的SYN請求被丢棄,目标系統運作緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。

SYN攻擊是一個典型的DDOS攻擊。檢測SYN攻擊非常的友善,當你在伺服器上看到大量的半連接配接狀态時,特别是源IP位址是随機的,基本上可以斷定這是一次SYN攻擊。

13、Ext3日志檔案系統的特點

1、高可用性:系統使用了ext3檔案系統後,即使在非正常關機後,系統也不需要檢查檔案系統。

2、資料的完整性:避免了意外當機對檔案系統的破壞。

3、檔案系統的速度:因為ext3的日志功能對磁盤的驅動器讀寫頭進行了優化。是以,檔案系統的讀寫性能較之Ext2檔案系統并來說,性能并沒有降低。

4、資料轉換 :“由ext2檔案系統轉換成ext3檔案系統非常容易。

5、多種日志模式

14、資料庫的範式

第一範式(1NF)

指資料庫表的每一列(即每個屬性)都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。簡而言之,第一範式就是無重複的列。

第二範式(2NF)

第二範式(2NF)要求資料庫表中的每個執行個體或行必須可以被唯一地區分。

第二範式(2NF)要求實體的屬性完全依賴于主關鍵字。

所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。

簡而言之,第二範式就是非主屬性依賴于主關鍵字。

第三範式(3NF)

在滿足第二範式的基礎上,切不存在傳遞函數依賴,那麼就是第三範式。

簡而言之,第三範式就是屬性不依賴于其它非主屬性。

15、判斷有沒有使用索引

索引的最左比對特性

​ 當b+樹的資料項是複合的資料結構,比如(name,age,sex)的時候

b+數是按照從左到右的順序來建立搜尋樹的,

比如當(張三,20,F)這樣的資料來檢索的時候,

b+樹會優先比較name來确定下一步的所搜方向,如果name相同再依次比較age和sex,最後得到檢索的資料;

但當(20,F)這樣的沒有name的資料來的時候,b+樹就不知道下一步該查哪個節點

總之,判斷有沒有使用索引:

​ (使用到索引)==(條件中出現聯合索引最左字首字段)

16、truncate 、delete删除表資料的差別

同:

truncate table與delete都是删除表資料,保留表結構

truncate table 在功能上與不帶 WHERE 子句的 delete語句相同:二者均删除表中的全部行。

不同:

truncate 比 delete(一行一行的删)速度快,且使用的系統和事務日志資源少。

truncate 操作後的表比Delete操作後的表要快得多。如果有ROLLBACK指令Delete将被撤銷,而 truncate 則不會被撤銷。

truncate當表被清空後表和表的索引重新設定成初始大小,而delete則不能。

如果删除表結構及其資料,用 drop table 語句。

執行速度,一般來說: drop> truncate > delete。

17、類初始化的編譯期常量

1、如果一個 static final 變量是**“編譯期常量”**,就像 *public static final String a = “JD”;*那樣,那麼這個值不需要對 Test2 類進行初始化就可以讀取。

2、但是,如果隻是将一個變量的域設定為 static 和 final 的,那不足以確定這種行為。例如,對 *public static final String a = new String(“JD”);*的通路将強制對 Test2 類進行初始化,因為它不是一個"編譯期常量"。

3、如果一個 static 變量域不是 final,那麼在對它進行通路時,總是要求在它被讀取之前,要先進行連結 (為這個域配置設定存儲空間) 和初始化 (初始化該存儲空間) 就像 public static String a = “JD”;。

18、用ClassLoader加載類,是不會導緻類的初始化(也就是說不會執行方法).Class.forName(…)加載類,不但會将類加載,還會執行會執行類的初始化方法.

19、關于線程池

Java線程中的Thread.yield( )方法,譯為線程讓步。顧名思義,就是說當一個線程使用了這個方法之後,它就會把自己CPU執行的時間讓掉,

讓自己或者其它的線程運作,注意是讓自己或者其他線程運作,并不是單純的讓給其他線程。

​ yield()的作用是讓步。它能讓目前線程由“運作狀态”進入到“就緒狀态”,進而讓其它具有相同優先級的等待線程擷取執行權;但是,并不能保

證在目前線程調用yield()之後,其它具有相同優先級的線程就一定能獲得執行權;也有可能是目前線程又進入到“運作狀态”繼續運作!

​ 舉個例子:一幫朋友在排隊上公共汽車,輪到Yield的時候,他突然說:我不想先上去了,咱們大家來競賽上公共汽車。然後所有人就一塊沖向公共汽車,

有可能是其他人先上車了,也有可能是Yield先上車了。

​ 但是線程是有優先級的,優先級越高的人,就一定能第一個上車嗎?這是不一定的,優先級高的人僅僅隻是第一個上車的機率大了一點而已,

最終第一個上車的,也有可能是優先級最低的人。并且所謂的優先級執行,是在大量執行次數中才能展現出來的。

20、關于Linux的權限

chmod :

a :代表所有人 u :使用者 g :組 o :代表其他使用者

read = 4 write = 2 execute = 1

21、shell程式設計中的關系運算符的表示

EQ 就是 EQUAL等于

NE就是 NOT EQUAL不等于

GT 就是 GREATER THAN大于

LT 就是 LESS THAN小于

GE 就是 GREATER THAN OR EQUAL 大于等于

LE 就是 LESS THAN OR EQUAL 小于等于

22、Linux中的執行檔案

點斜杠,點空格斜杠,兩者都可以執行腳本,但是:

第一種方式是在子程序中運作腳本,第二種方式是在目前程序中執行腳本。

非目前程序是看不到aa變量的