【演算法】2015-2016 阿里、百度、360、豌豆莢、搜狗面試題部分集錦
已經工作3個多月了,整理以前資料的時候,順手翻到了之前實驗室小夥伴們面試的記錄,索性就分享出來了,需要的人可以參考一下
360(c++)
1面
1、堆排序
2、kmp
3、虛擬函式的作用
4、top k
5、int 範圍的很多的數,排序
2面
1、從左上角走到右下角一共多少種走法(用組合數學來說)
2、從左上角走到右下角對角線不能走
3、前序中序求後續
4、如何找出分析出一個使用者的年紀,用機器學習的方法
5、說說你學習的機器模型(不懂)
3面
1、為什麼沒有機器學習的知識來報我們部門
2、證明你的學習能力強
3、有啥問題
阿里(一面)c++
1.使用cmd進入命令列模式,鍵盤上單擊任意字元,相應字元會出現在介面上,這個過程發生了什麼?
我答得是:儲存當前狀態棧,進行IO中斷處理,處理完後繼續進行當前任務。(面試官說要微觀的過程,不理解)
2. 進入命令列模式,游標一直在閃動,這裡又發生了什麼過程?(難道不是等待輸入,不理解想要問什麼微觀過程)
3. 如果讓你設計memcpy(des,src,size)函式,若是不知道所傳引數型別,怎麼知道des的大小和size關係?
4. 同樣的問題,對於strcpy(des,src)函式,如何知道des的大小(面試官說的是,如果你先給des malloc一段空間,當時你是知道該des指標的大小的,但是他作為引數傳輸strcpy函式中,如何獲取它的大小呢)
5. 說幾個常見的設計模式理解。
6. 若想盡量防止記憶體洩露,應該怎麼辦?
剛開始說的是new和delete要成對出現,被他鄙視一通,然後想起了智慧指標說了一下。
阿里(一面)android
activity生命週期
開屏和關屏後activity的生命週期
java記憶體模型
設計一個android的登入系統
http狀態碼 post get區別
推送機制(xmpp協議)
介紹一下專案
專案中的問題和解決方案
資料庫優化select語句
氣泡排序
3升的杯子和5升的杯子量出4升的水
優缺點
工作地點選擇
阿里(一面)c++
問了在建構函式括號體內初始化和成員列表初始化有什麼不同?
成員列表的初始化順序
拷貝建構函式都在什麼情況下會被呼叫?
如何防止拷貝建構函式被呼叫?
預設的拷貝建構函式是怎麼實現的?(還有淺拷貝的問題)
虛擬函式的作用?
Public,protected,private關鍵字的作用?這
說一下紅黑樹
用過哪些STL的容器?說說各種容器的作用
說一下專案的東西
職業規劃是什麼?
豌豆莢 c++
一面:都是手寫程式碼1.反轉連結串列
2.全排列
3.編輯距離
4.寫生產者消費者+阻塞通知是如何實現的
二面:繼續寫程式碼
1.簡單自我介紹
2.大資料問題
3.中序前序輸出樹
4.多執行緒問題
5.總結下了我的問題,還是很NICE的一個人
三面:至今不知道這人是會技術還是真不會
1.裝傻,我不知道網路程式設計,你給我講講
2.繼續裝,這個我也不知道你給我講講(J2EE)
3.我們來寫個程式碼吧 上樓問題
搜狗 c++
1、問了專案,特別細節
2、合併n個數組,lc上題
3、找出
4、返回vector引用
5、紅黑樹咋實現的。。。(居然問這個)不懂
6、C++寫一下單例(static的,不滿意)
二面
問了一個,如何找統一詞庫(給你一坨網頁,給你一坨query)
如何建立一個搜尋推薦詞庫(類似百度搜索下面有一條的)
三面
自我介紹
然後給一個數組如何壓縮(沒想到好方法)
1億多個字串檔案,找出中位數
然後簡述一下你對cache失效時間的做法。
百度 c++
1、tcp和udp區別2、tcp怎麼保證到達順序有序
3、說說擁塞控制
4、說說虛地址
5、講一下你對hadoop生態系統的理解
6、求樹中,兩個節點之間的最長距離,距離定義為經過節點數。
7、翻轉連結串列
百度 c++
1. 自我介紹
2. 介紹專案---介紹印象最深的(影響最大)---為啥印象最深(收穫最大)
3. 演算法
a) 給定N個數,找第二大的數(O(n)),依次隱身找第K大的數(最小最大堆)
b) N!尾部0的個數,比如5!=120那個返回1,具體解法見程式設計之美
c) 類似3 Sum這樣的題目,具體解法就是排序之後,用前後兩個指標掃描,由此降低一維複雜度。詳情請分析下leetcode之3 Sum
4. 大資料-推薦看csdn july秒殺大資料那節
5. 和經理瞎扯
騰訊地圖 c++
一面:
1. 談專案(20分鐘)
2. 演算法(手寫,2題)
Ø 題目1:給定一個有序陣列,如[1,2,3,4,5,7,9,10],將陣列後半段置前,即迴圈右移若干位,變成如[7,9,10,1,2,3,4,5],如何在變化後的陣列中快速找到給定目標;
參考連結:http://www.cnblogs.com/davidluo/articles/1837561.html
(ps:不要試圖去查詢右移位數或嘗試將陣列分成兩個有序段然後再做二分)。
Ø 題目2:給定一個數組,陣列任意相鄰的兩個數的絕對值差的大小為1,給定一個目標t,如何快速找到他的位置。
二面
Ø 自我介紹(別再重複簡歷了,會被直接打斷的。。。)
Ø 專案簡單介紹(比較短)
Ø 我說的是C++/C,問了幾個問題:
A. C和C++區別
B. C++多型、虛擬函式和麵向物件的理解
C. C和C++能否相互呼叫,extern關鍵字的理解
D. C++編譯器核心(完全不懂。。。)
E. 問了一個基類指標問題,實際上問的是基類和派生類記憶體分配問題(答得很亂。。。)
Ø 問了一個開放性問題,時間比較長:有這樣一個系統,能反映實時路段的擁堵情況,即輸入一個路段,系統返回一個該路段當前的擁堵狀況資訊。實現這樣一個系統需要完成哪些功能模組,某一模組的具體實現(流程,非演算法),問了好久,實在問不下去了,就說這題就到這裡吧。
Ø 因為我簡歷寫了實驗室定位的專案,而且部門又是騰訊地圖,所以問了一個問題:當前定位的主流方法有哪些,瞭解定位的趨勢(說了百度、高德等等,忘了說騰訊,⊙﹏⊙b汗)
美團/藍汛或者其它(記不清了)
問答題:
- Socket中三次握手的實現
- socket連線過程
- 阻塞與非阻塞、同步和非同步
- select與epoll、epoll是如何實現的(非同步)
- 編譯、連結的整個過程
預編譯,編譯,連線(動態連結、靜態連結)
- 對於以下程式,C編譯器和C++編譯器的區別(C++編譯器編譯後加上輸入輸出引數資訊,名字不同)
Int f(int a){return 0;}
- 記憶體佈局(程式段、堆、棧、.bss、.data…)
- 為什麼要有條件編譯
- 核心申請記憶體的方法(kmalloc…很多)
- ARP解析的全過程
- 什麼是虛擬記憶體(磁碟上)
- 什麼是原子操作,舉例說明原子操作
- 多型
- Static的作用(函式內,全域性變數)
- 程序棧和執行緒棧的區別
- 執行緒排程所涉及到的系統資源具體包括什麼
- Inode結構體的作用
- 搶佔式作業系統的缺點,如何改善(低優先順序永遠無法執行,長時間不執行的低優先順序把優先順序調高)
- 為什麼程序排程比執行緒排程更消耗cpu(多執行緒共用程式段,不需要進行程式的各種裝載,程序排程需要裝載各種程式段(我是這麼說的))
演算法:
- 兩個有序陣列,組成一個排好序的陣列(原陣列有重複,新的陣列不可重複)
- 連結串列是否有環
- 判斷IP是否有效
- 大數加法
- 包含二維座標中三個點的最小園
- 兩個檔案10G,100G的交集(long型別),交集輸出到檔案C
- 二叉搜尋樹到雙向連結串列
- “abcd…”字串中第M個出現N次的字元
- 1~1億中所有的質數
- 字串匹配、KMP、亂序的匹配
系統設計:
100張票,很多個人去搶這些票(例如12306)設計一個系統處理這個問題
智力題:
1、100的階乘
2、一個村子生男則停止,生女則直到生男才停止,問最後男女比例
3、100個囚犯的問題(經典問題)