1. 程式人生 > >百度,阿里,搜狐公司社招面試題及總結

百度,阿里,搜狐公司社招面試題及總結

從別人那裡找來的他被問到的問題,在這裡做整理總結。

一、面試遇到的問題        

1.百度  

面試官自帶電腦,整個面試過程都在記錄,首先詳細詢問了最近一份工作專案的架構和工作內容,

面試主要圍繞工作中用到的元件和中介軟體技術來擴充套件,考察掌握程度。

http://blog.csdn.net/happy_wu/article/details/78736196

http://blog.csdn.net/happy_wu/article/details/78736510

http://blog.csdn.net/poisions/article/details/51538551

http://blog.csdn.net/happy_wu/article/details/78736641

https://www.cnblogs.com/martinzhang/p/3415204.html

http://blog.csdn.net/hsuxu/article/details/8985931

http://blog.csdn.net/heyutao007/article/details/49738887

Spring AOP與IOC的實現(回答原始碼即可)

為什麼CGlib方式可以對介面實現代理?

  JDK實現動態代理需要實現類通過介面定義業務方法,對於沒有介面的類,如何實現動態代理呢,這就需要CGLib了。CGLib採用了非常底層的位元組碼技術,其原理是通過位元組碼技術為一個類建立子類,並在子類中採用方法攔截的技術攔截所有父類方法的呼叫,順勢織入橫切邏輯。JDK動態代理與CGLib動態代理均是實現Spring AOP的基礎。

JDK動態代理的原理是根據定義好的規則,用傳入的介面建立一個新類,這就是為什麼採用動態代理時為什麼只能用介面引用指向代理,而不能用傳入的類引用執行動態類。

   CGLib採用的是用建立一個繼承實現類的子類,用asm庫動態修改子類的程式碼來實現的,所以可以用傳入的類引用執行代理類

    CGLib建立的動態代理物件效能比JDK建立的動態代理物件的效能高不少,但是CGLib在建立代理物件時所花費的時間卻比JDK多得多,所以對於單例的物件,因為無需頻繁建立物件,用CGLib合適,反之,使用JDK方式要更為合適一些。同時,由於CGLib由於是採用動態建立子類的方法,對於final方法,無法進行代理



Dubbo的底層實現原理和機制,

演算法方面考察了一個簡單的陣列就地去重問題,用丟棄陣列尾部元素的方式實現了。

百度金融的面試安排在了週六,最近應該在各種擴張,各個招聘網站隨處可見招聘啟事。

面試官很贊,態度認真,有些問題沒有思路會給你提示,交流的不錯

面試中的問題:

分散式系統怎麼做服務治理11111 22222222

介面的冪等性的概念1111 2222

JVM垃圾回收機制,何時觸發MinorGC等操作

堆記憶體分為 年輕代 老年代 和持久代
年輕代 又分為 eden 區和 survivor 區

這兩個區如果滿了 觸發的就是 minor gc
新生代和老生代的記憶體回收策略

類別 synchronized Lock
存在層次 Java的關鍵字,在jvm層面上 是一個類
鎖的釋放 1、以獲取鎖的執行緒執行完同步程式碼,釋放鎖 2、執行緒執行發生異常,jvm會讓執行緒釋放鎖 在finally中必須釋放鎖,不然容易造成執行緒死鎖
鎖的獲取 假設A執行緒獲得鎖,B執行緒等待。如果A執行緒阻塞,B執行緒會一直等待 分情況而定,Lock有多個鎖獲取的方式,具體下面會說道,大致就是可以嘗試獲得鎖,執行緒可以不用一直等待
鎖狀態 無法判斷 可以判斷
鎖型別 可重入 不可中斷 非公平 可重入 可判斷 可公平(兩者皆可)
效能 少量同步 大量同步

兩次面試,感覺百度的流程比較嚴格,面試官挺不錯的,簡單可信賴,雖然工作中一般都用谷歌,

想起一個段子,哈哈。

有次面百度,我提到了一個比賽,面試官很感興趣,想搜一下,

於是先用百度搜了一下關鍵字,首屏沒有找到,面試官面不改色,熟練的打開了谷歌輸入關鍵字,發現第一個就是官方網站。


2.阿里巴巴

內推收到了阿里菜鳥和阿里雲安全部門的面試,後來參加了阿里雲的面試。
阿里的面試安排的很快,幾輪面試都是電面。聽朋友說阿里五輪面試,四輪技術一輪HR,技術面試是部門的幾個同事交叉面試,也有了瞭解。

一面總體上還是圍繞專案架構、Java基礎、JVM、併發程式設計、資料庫操作、中介軟體技術和Dubbo服務治理框架等展開,
可能因為是雲安全部門,有一半時間在考察JVM,還提問了一些編譯優化的知識,

一面結束後很快安排了二面,相對一面,二面的問題更深入,問題比較刨根問底,更加註重對一些技術細節的理解和把握。

一些值得記錄的問題:

JVM記憶體分代,

深入分析了Classloader,雙親委派機制

JVM的編譯優化
對Java記憶體模型的理解,以及其在併發中的應用
指令重排序,記憶體柵欄等

HashMap的併發問題

瞭解LinkedHashMap的應用嗎
在工作中遇到過哪些設計模式,是如何應用的

兩次面試,阿里給我留下的印象很好,面試官都是大牛,阿里的崗位大都在杭州,面試結束特意關注了一下那邊的生活成本,

如果拿到阿里和網易等幾家網際網路公司的高薪,買房和生活的確比北京要輕鬆很多 。

3.優酷土豆

優酷的面試都是二對一,每輪面試兩個面試官,
一面比較順利,主要是Java基礎,Spring原理,Java NIO,併發和集合框架等,
可能是因為視訊網站,優酷考察網路原理的知識多,比如TCP/IP協議、長連線與短連線等。

一面提到了自己可能會在下半年學習大資料與機器學習相關的知識,二面就問了很多海量資料的問題。

TCP/IP協議
長連線與短連線
mapreduce過程
多路歸併的時間複雜度
海量url去重類問題
Java NIO使用
倒排索引的原理
對分詞技術的瞭解

面試中給了一個具體場景,考察對MapReduce過程的理解,比如Map階段和Reduce階段是如何進行的等,

Reduce階段面試官希望分析給出一個多路歸併的時間複雜度,用外排序的知識簡單分析了一下,回答的不太好。

回來以後搜尋了勝者樹和敗者樹的優化,發現這裡面的內容還挺多,深刻體會到有些知識點如果平時掌握的不夠全面深刻,很難信手拈來

4.搜狐新聞

搜狐最近應該是沒有招聘計劃,面試等待時間比較長。
做了筆試題,一面是個和我年紀相仿的面試官,針對筆試和簡歷提問了一些基礎問題,聊得挺投機,
二面技術經理就比較偏架構和中介軟體的應用,提問了專案,主要考察了服務治理和訊息佇列等中介軟體使用的問題,

訊息中介軟體如何解決訊息丟失問題
Dubbo的服務請求失敗怎麼處理
重連機制會不會造成錯誤
對分散式事務的理解
深入分析幾個設計模式

面試最後提問了一個不定長字串轉為定長字串的問題,
剛剛面過優酷,這個簡單的問題被我想複雜了,沒有Get到面試官的點,考慮了唯一性,效能等,扯了一大堆。

醒一下大家,面試過程中要保持清醒,不要有思維定式,除非是底層研發崗位,社招對演算法的考察不會特別難,用正常的思路去解決就可以

5.58趕集

58總部在798附近,全天有班車可以過去。總體上,感覺面試官的問題非常接地氣,

三輪技術面,大部分是實際場景的演算法和系統設計類問題。

HTTP請求的報文格式
Spring的事務實現原理

實際場景問題,大量使用者資料如何在記憶體中排序和去重
快取機器增刪如何對系統影響最小,一致性雜湊的實現
Redis持久化的幾種方式
Redis的快取失效策略
實際場景問題解決,典型的TOP K問題

實際場景問題,海量登入日誌如何排序和處理
SQL操作,主要是索引和聚合函式的應用

三面面試官提問了一些優點和缺點的自我評價類問題,簡單交流以後對我給出了一些中肯的建議,非常感謝。

6.國美線上

國美線上面試最開始是部門經理溝通,後來做了一份筆試題,
題目質量不錯,主要考察Java基礎,資料庫,設計模式以及資料結構,要求寫出B-Tree的節點結構,

演算法題目是一道等概率抽獎的題目,用蓄水池抽樣演算法解決了。

SQL語句編寫
MySQL的幾種優化
Spring行級鎖
Spring衍生的相關其他元件整理
RMI的幾種協議和實現框架
BTree相關的操作
資料庫鎖表的相關處理
考察跳臺階問題

和麵試官的交流比較輕鬆,面試官提示我要加強資料庫操作的掌握,另外面試過程中詢問了一些工作中用到框架和元件的版本等細節問題,平時沒太關注,

後來思考了一下,對開源元件的應用,版本的管理很重要,不注意可能會發生一些詭異的問題。

7.去哪兒網,口袋購物等公司

除了上面的公司,還參加過去哪兒網,口袋購物,鏈家等幾家公司的面試。

去哪兒網中規中矩,口袋購物的工作環境非常不錯。鏈家網最近有新浪的鳥哥加入任技術總監,在IT圈子裡挺火,面試了鏈家旗下的兩個租房部門,技術氛圍不錯,前景看好,很值得去的一家公司。

幾家公司的模式和問題都類似,注重對基礎和程式設計能力的考察,以及對分散式系統設計和架構的理解

值得一提的是一家創業公司的面試,過程十分簡單粗暴。
沒有自我介紹,面試官看完簡歷就在白板上提了一個多執行緒排程問題,遞過來MAC就開始敲程式碼+_+
寫完以後我表示這題目意義不大,問了Redis,要求十五分鐘實現一個LRUCache,再次現場寫程式碼。
寫到一半面試官看沒問題就打斷了,問對公司有什麼想了解的,等了一會讓我回去了,就這麼被Pass,創業公司效率果然高(此處/dog臉)。

面試中要保持清醒比如被問到十萬個ip段查詢這個問題,首先是一個典型的查詢問題
明確了這個,就可以針對性的選擇相關的演算法實現,如二分查詢、二叉查詢樹等。

推薦畫圖表達的方式。

做過的專案架構,各種框架和中介軟體的設計實現,通過畫圖的方式都可以很好的闡述,
可以隨身帶著紙和筆,面試本來就是一次很好的學習過程,一些問題也可以記錄下來。

一般來說,面試過程類似一個尋路演算法,交流過程中如果提到了面試官感興趣的某一點,
就會就這個點展開,然後一直提出問題到你不能回答為止,或者你特別牛在這個領域直接秒殺面試官,這樣一條路線走通,再換下一條路線。

二、程式設計師如何用正確的姿勢提高技術水平   

相比程式設計師,我更喜歡攻城獅這個名字,

程式設計師在不瞭解這個行業的人眼裡已經被貼上了各種標籤,諸如各種宅,不修邊幅,