Title | Content |
---|---|
時間 | 2017-07-31 10:00 |
地點 | 北京市朝陽區東四環中路56号樓遠洋國際中心26層 |
部門 | 海外購 |
崗位 | 全棧開發 |
性質 | 暑期實習,可轉正 |
前言
本來是通過師兄走秋招内推,該部門多出兩個暑期intern,是以幫忙推了下。
面試當天,照常跑步,到8:20左右從宿舍出發,特别怕遲到,一路上很趕,最後提前30分鐘到達。
後來被HR帶到10層去面試。
第一輪
Title | Content |
---|---|
時間 | 10:00-11:00 |
面試官 | 男性 |
Q1
問題 | 實作LRU,即實作緩存 |
---|
面試官先講了緩存的概念
緩存處理主要是新的替換舊的
我設計了類的資料定義和接口
面試官讓我隻實作添加和傳回緩存執行個體的接口
添加是給定key-value
傳回執行個體是給key
我的做法是通過HashMap緩存資料,再維護一個List維護資料的進入時
間。大體沒問題,一些細節、異常處理疏忽了,他說其實這些地方才是經常
考核的。
Q2
問題 | 講一個你的項目 |
---|
講了自己的一個偏向背景架構設計的項目,講到一些架構的時候,會問為什
麼用它不用别的,分析下就好。
這一部門基本上是我自己講,面試官的回報挺少的
第二輪
Title | Content |
---|---|
時間 | 11:00-12:00 |
面試官 | 男性 |
Q1
問題 | 将二叉搜尋樹變成雙向連結清單,不需要額外空間,改變指針就好 |
---|
這題我的思路從inorder周遊出發,在面試官的提示下寫了遞歸法,原理
沒想清楚,但是似乎是對的,但是處理出來的是單連結清單,之後需要周遊一遍
改成雙向就好
思路:
(1)定義函數helper,含義是傳回包含node的雙向連結清單
(2)每次遞歸,求得node的左右兩邊子樹得到的雙向連結清單,并傳回左右子樹的雙向連結清單的尾部節點
(3)分左右子樹為空、不空各種情況下,将左邊、parent、右邊組合成新的雙向連結清單的政策進行組合
class Node{
public int val;
public int left=null;
public int right=null;
public Node(int val){
this.val = val;
}
}
public class Sollution{
void sove(Node root){
}
Node helper(Node node){
if(node==null)
return null;
Node leftEnd = helper(node.left);
Node rightEnd = helper(node.right);
if(leftEnd==null && rightEnd==null){
node.right=node;
return node;
}
if(leftEnd==null && rightEnd!=null){
Node rightStart = rightEnd.right;
node.right=rightStart;
right.left=node;
rightEnd.right=node;
return rightEnd;
}
if(leftEnd!=null && rightEnd==null){
Node leftStart = leftEnd.right;
leftEnd.right = node;
node.left=leftEnd;
node.right=leftStart;
return node;
}
if(leftEnd!=null && rightEnd!=null){
Node leftStart = leftEnd.right;
Node rightStart = rightEnd.right;
node.left=leftEnd;
node.right=rightStart;
leftEnd.right=node;
rightStart.left=node;
rightEnd.right=leftStart;
return rightEnd;
}
}
}
Q2
問題 | 将阿拉伯數字轉換成中文讀法,例如“12”,轉換成“十二” |
---|
我隻考慮了不含0的,億以下的轉換。經過面試官提點才發現這個問題。這
就是我失敗的地方。
面試回報
Failed
總結
其實面試官出的題都挺簡單的,但是就是在那種封閉、時間限制的環境中,很多細節覺得沒必要(其實往往是考核的,也是你比别人更優秀的地方,簡單的大家都會做,做好細節才能突出自己)。同時思維比較局限,有遺漏case的情況,這是緻命的。
下此面試一定要注意細節!!!