你好,我是 yes。
最近不是跳槽季嘛,今兒我就來分享一道我之前遇到的筆試題(上機寫**,這裡統稱筆試),這道題遇到的機率還是比較高的。
很多人可能準備去一波阿里或者其他大廠,而這些大廠面試過程一般都會有筆試。
不過有很多人可能沒經歷過筆試,所以我先分享一下我之前面螞蟻金服時候的筆試經歷。
一般沒特意去練練是真的不習慣的。
當時我在經歷了 1 個多小時的 bb 之後,面試官就讓我開啟郵箱,會有這麼一條郵件。
當然現在截圖上是沒題目的,但真正面試的時候介面上就能看到面試官已經給你準備好的題目。
我當時的題目是實現個 lru,面試官給了介面的定義,然後一些使用方法,以及一些注釋說明。
一般而言,看個注釋和使用方式就可以得知要實現什麼東西了。
這裡要注意,不理解題目的要問清楚,不要自己瞎理解,不然咱就漸行漸遠了。。
還有一點要注意,這裡寫**是不會聯想的,是不會聯想的,是不會聯想的。
因此所有的類名、方法名都得你乙個字母乙個字母的敲。
這對於習慣用 ide 的我們來說,是個致命打擊。
你可以試試看看優先佇列、鎖這些類名能不能敲出來。
其實這些名字還好,打個**不離十也差不多了,就是一些方法名想不起來就很蛋疼,所以一些常用的還是得注意一下。
如果你實在敲不出來,次一級做法就是和面試官說你得在 idea 裡面打。我之前問過一位在螞蟻的小姐姐,她說最好是在網頁上敲了,網頁上敲的話基本上只會看邏輯,不會執行,也不會扣的太細。
如果你拷到 idea 上寫的話,那面試官估計得把你**要拷下來運一運,而且可能會問的比較細。
畢竟網頁上寫**,面試官是能實時看到的,idea 可看不到。
基本上就是這個樣子了,我當時在網頁上寫的,面試官順著邏輯看一遍就 ok 了。
再說下筆試的小技巧。
我推薦先和面試官說我能在紙上畫畫嗎?答案肯定是能。
然後在紙上畫畫圖,理一理思路,然後把思路講出來給面試官聽,得到一些反饋。
畢竟面試是要交流的。
思路得到認可了,那就大膽的寫唄,就怕一開始思路就是錯的,然後埋頭寫。
或者沒一點思路,埋著頭,像執行緒被阻塞一樣。
要注意交流。
至於題目的話,推薦自頂向下的寫。
舉個經典的例子:排序裡面陣列交換資料。
int temp = array[j]
array[j] = array[j + 1]
array[j + 1] = temp
這種一般都會封裝成 swap 方法
書寫的時候就直接先寫個 swap 方法,當做已經實現了邏輯,然後之後再補上實現。
這樣思路先沿著主線執行完,然後再去完成支線,在面試場景尤為重要,畢竟那時候是緊張的。
這個 swap 可能太簡單的感受不到,看看下面的題就能感受到了。
回到我之前的那個筆試題,lru。
至於 lru 是什麼我就不提了,不明白的同學自行查閱下,我們直接看題目。
public class lrucache
public v get(k k)
public void put(k k, v v)
}
當時面試官給的就這麼個類,幾個未實現的方法,還有個 main 方法我就沒寫了,就是使用例子。
現在你可以停下,思考下,你看看這樣你能寫的出來不?
好了,我貼下答案,這題 leetcode 上也有的,第 146 題,可以去練練。
public class lrucache
public node(k key, v value)
}private int capacity;
private hashmapmap;
private nodehead;
private nodetail;
public lrucache(int capacity)
public v get(k key)
movenodetohead(node);
return node.value;
}public void put(k key, v value)
nodenewnode = new node<>(key, value);
map.put(key, newnode);
addtohead(newnode);
} else
}private void addtohead(nodenewnode)
private void movenodetohead(nodenode)
private void removenode(nodenode)
private void removetailnode()
public static void main(string args)
}
這個題目就適合我上面說的自頂向下了。
addtohead
、movenodetohead
、removenode
這幾個我建議在主流程寫完之前不要實現,把 get、put 寫完之後,再實現邏輯,這樣比較清晰,也不會亂。
這種,我稱之為自頂向下或者 bfs 寫法。
lru還有一種取巧的實現,就是利用linkedhashmap
,繼承實現removeeldestentry
方法,這種很簡單,不過面試官不會讓你用這種的,因為我當時提了哈哈哈。
鍊錶類題目或者二叉樹之類的在紙上畫畫,還是比較容易的。
題目就分享到這兒了。
一道筆試題
看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...
一道筆試題
上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...
一道筆試題
題目是這樣的 判斷乙個小於1000的正整數是否為素數。素數的定義就不說了,以下直接分析解法,畢竟是在寫與專業相關的東西,是給本專業的人看得,所以看的人應該有點基礎吧?求素數的問題是乙個數學上的難題,這是常識,但是本題目限制了最大範圍是在1000以內,所以就可以嘗試找出乙個足夠好的解了。首先給出乙個最...