目前經歷了小米的三輪面試,都是技術面試。
每次的面試形式都是先進行電話溝通,問一些項目相關的東西,還有基礎知識,然后再線上寫代碼。三面,我一共做了6道編程題。
下面統一做下整理:
一面:
(1)電話溝通:
1.主要是圍繞着簡歷上自己寫的項目來提問。感覺小米面試官水平比較高,因為不像hujiang的java面試官一樣,問一個學計算機的什么是遞歸。
2.給你兩張表,變換各種場景,寫不同的sql。主要是考察各種關鍵字的使用,distinct,group,order by,offset
3.用shell命令對一個文件進行各種處理
4.http協議狀態碼的考察
5.關於接口的並發訪問,多線程等問題
(2)在線編程:
1.寫一個簡單的單例模式代碼
2.接觸過哪些設計模式?
3.鏈表a->b->c->d 反轉成a<-b<-c<-d 。反轉鏈表,定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉后鏈表的頭結點,鏈表定義如下:
struct ListNode { int pKey; ListNode* pNext; };
4.判斷一個數組是否是二叉排序樹的后續遍歷,寫一個方法,輸入值為一個整數數組,輸出為True 或False。(暫且假設輸入的整數數組里任意兩個整數都互不相同)這道題目可以用Java來寫嗎?有什么思路可以寫一下
二面:
(1)電話溝通:
1.依然是先聊一下簡歷上項目的問題;
2.多態
3.輸入url后面發生了什么
(2)在線編程:
1. 有這么一種鏈表,它的每個結點除了包含指向下一個節點的指針,還包含一個指向該鏈接中任意一個節點的指針。現需要實現此類鏈表的克隆算法。
請完成clone的代碼實現(C++或Java或其他語言),盡量少使用輔助空間。
C++:
struct Node { Node* next; Node* random_node; } Node* clone(Node* head) { … }
Java: class Node { Node next; Node random_node; } Node clone(Node head) { … }
2. 使用shell從一個日志文件中找出出現頻率最高的前十個關鍵詞以及次數。如日志文件每行為 2015-09-10
3.面板:
1 2 3
4 5 6
7 8 9
0 <-
顯示屏:
123
一百二十三
當面板中按順序點擊1,2,3時,顯示屏對應顯示兩行,123和一百二十三,<-是回退鍵,如此時點擊回退鍵,則顯示屏顯示12和十二。
寫個程序實現這個功能,面板點擊可以認為是標准輸入,顯示屏輸出可以認為是標准輸出。
三面:
(1)電話溝通:
1.覺得前面兩輪面試怎么樣?
2.覺得你做得最有底氣的項目是什么?介紹一下
3.根據上面說的,面試官說了一種類似的場景,怎么進行處理
4.給出一種檢測內存泄露的方案
5.一個搜索引擎,目前有兩種搜索算法,給出一個方案,量化評估兩種算法的優劣。
1》評估標准需要自己想辦法量化;
2》怎么准備數據;
3》具體的實施方案……
(2)在線編程:
代碼的注釋有/* */ 和 // 兩種,給你一段代碼,把代碼中的注釋去掉之后,輸出去掉注釋后的代碼