網際網路公司校招Java面試題總結及答案——阿里、騰訊
阿新 • • 發佈:2019-02-11
部分重複的我已經去掉了,所以顯得比較少,其他請參看我的系列文章:
---------------------------------------阿里--------------------------------------------------- 1.HashMap和HashTable的區別,及其實現原理。 HashTable底層是用HashMap實現的,與HashMap的區別是,HashTable是按存入順序排序的,而HashMap不是。HashMap的原理是有一個大的table陣列組成,每個陣列元素是一個Entry。為了處理衝突,通常會將Entry用連結串列實現。 ArrayList,LinkedList 和Vector的區別和實現原理。 ArrayList是基於陣列的可變長陣列,因為這個特性,所以它更適合實現get和set;LinkedList是基於雙向連結串列的,所以比較適合實現插入和刪除等操作;但以上兩個都是非執行緒安全的,Vector的實現和ArrayList差不多,改進的地方是使用synchronized實現了執行緒安全。 TreeMap和TreeSet區別和實現原理。 其中 TreeMap 是 Map 介面的常用實現類,而 TreeSet 是 Set 介面的常用實現類。TreeSet 底層是通過 TreeMap 來實現的- TreeMap和TreeSet都是有序的集合,也就是說他們儲存的值都是拍好序的。
- TreeMap和TreeSet都是非同步集合,因此他們不能在多執行緒之間共享,不過可以使用方法Collections.synchroinzedMap()來實現同步
- 執行速度都要比Hash集合慢,他們內部對元素的操作時間複雜度為O(logN),而HashMap/HashSet則為O(1)。
- 最主要的區別就是TreeSet和TreeMap非別實現Set和Map介面
- TreeSet只儲存一個物件,而TreeMap儲存兩個物件Key和Value(僅僅key物件有序)
- TreeSet中不能有重複物件,而TreeMap中可以存在
- TreeMap的底層採用紅黑樹的實現,完成資料有序的插入,排序。
3.瞭解的網路攻擊手段,可以怎麼預防 拒絕服務攻擊: (1)SYN拒絕服務攻擊:目標計算機如果接收到大量的TCP SYN報文,而沒有收到發起者的第三次ACK迴應,會一直等待,處於這樣尷尬狀態的半連線如果很多,則會把目標計算機的資源(TCB控制結構,TCB,一般情況下是有限的)耗盡,而不能響應正常的TCP連線請求。 (2)ICMP洪水:。這樣如果攻擊者向目標計算機發送大量的ICMP ECHO報文(產生ICMP洪水),則目標計算機會忙於處理這些ECHO報文,而無法繼續處理其它的網路資料報文,這也是一種拒絕服務攻擊(DOS)。 (3)UDP洪水; (4)死亡之PING:TCP/IP規範要求IP報文的長度在一定範圍內(比如,0-64K),但有的攻擊計算機可能向目標計算機發出大於64K長度的PING報文,導致目標計算機IP協議棧崩潰。 (5)IP地址欺騙:如果一個攻擊者向一臺目標計算機發出一個報文,而把報文的源地址填寫為第三方的一個IP地址,這樣這個報文在到達目標計算機後,目標計算機便可能向毫無知覺的第三方計算機迴應。這便是所謂的IP地址欺騙攻擊。 4.10億條簡訊,找出前一萬條重複率高的 (1)首先將文字匯入資料庫,再利用select語句某些方法得出前10條簡訊。(索引)但是這個時間效率很低; (2)使用hash計算並存儲次數,然後遍歷一次找出top10;
5.對一萬條資料排序,你認為最好的方式是什麼 申請長度為一千萬位的位向量bit[10000000],所有位設定為0,順序讀取待排序檔案,每讀入一個數i,便將bit[i]置為1。當所有資料讀入完成,便對bit做從頭到尾的遍歷,如果bit[i]=1,則輸出i到檔案,當遍歷完成,檔案則已排好序。本機執行耗時9秒49毫秒。 (這種方法要求陣列中的資料沒有重複,且都不超過最大值) 1、10w行資料,每行一個單詞,統計出現次數出現最多的前100個。 (1)可以使用小根堆; (2)在linux中實現:cat words.txt | sort | uniq -c | sort -k1,1nr | head -10 uniq -c: 顯示唯一的行,並在每行行首加上本行在檔案中出現的次數 sort -k1,1nr: 按照第一個欄位,數值排序,且為逆序 2、一個文字檔案,給你一個單詞,判斷單詞是否出現。 grep -wq "fail" 123.txt && echo "no"||echo "yes" 新手推薦看 http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf 進階推薦看 http://www.tldp.org/LDP/abs/abs-guide.pdf 3、兩個執行緒如何同時監聽一個埠。 多個執行緒可以監聽同一個埠,但我們通常不這樣做。 多個程序也可以同時監聽一個埠,比如nginx。