前言
8月10日晚上8點,我進行了阿裡巴巴海外技術部的用戶端面試。
本來約了7點,結果面試官在開會,就延遲到了8點。
自我介紹
就進行自我介紹,講了一下研究所學生階段做的幾個項目。
1.澳洲網吧項目,負責桌面端和伺服器端的開發。
2.惠爾門店系統,負責部分伺服器的功能開發和資料庫的優化。
資料庫優化
Q:你剛才說到了資料庫的優化對吧,你是怎麼優化的呢?
A:三種優化手段。
首先建立索引,資料庫中有一張訂單表,他們查詢的時候主要是使用訂單類型、操作員ID、生成時間來進行查詢的,是以我就對這三個字段建立了聯合索引。
其次,我對一些SQL語句進行了優化,比如一些like查詢,把%寫在前面導緻全表查詢,但是也不是所有的優化都有效的,在訂單表中,公司的操作人員習慣于查詢訂單的中間幾位和最後幾位,是以導緻這個訂單編号的查詢無法進行優化。
最後,主要是對資料庫中的一些表進行了水準分割和垂直分割,一些資料量比較大的表按照主鍵ID的奇偶進行分割,存放在不同的表中。在訂單表中對一些獨有的字段進行了垂直分割,單獨拿出來做一張表,查詢的時候在join,由于join是按照小表查詢的,是以速度可能還會快一些。
網吧項目的安全性
Q:你們網吧項目用的是Http請求對吧,那如何保證其安全性呢?
A:主要通過Session認證權限,Session是通過Mac位址和一些操作員的資訊生成的,是以不是那麼容易自己冒充的。同時我們使用的是Https可以防止中間人攻擊,是以還是比較具有安全性的。
Q:你剛才說到了中間人攻擊對吧,你能不能說下什麼是中間人攻擊,如何防止中間人攻擊。
A:通過CA認證、把CA的公鑰儲存在作業系統中等等。
final
Q:說一下final關鍵字。
A:我就說了修飾方法、基本類型、對象時候的差別,然後說到了final可以禁止重排序。
Q:什麼是重排序?
A:JVM在執行的時候會對指令進行優化,在不改變執行結果的前提下,會改變指令執行的順序,使得執行效率提升。比如在建立對象的時候,對象的引用傳遞和對象的初始化可能就會交換,這樣就會引發一個多線程的問題。
然而他并沒有問我多線程的問題。
接口和抽象類
Q:接口和抽象類有什麼差別?
A:has-a,is-a,抽象方法和接口預設方法,舉了ArrayList的例子,它實作了一個随機通路的接口和抽象LIst的父類。
List的差別
Q:ArrayList和LinkedList的差別
A:數組和連結清單的差別,插入和查找的時間複雜度。
GC
Q:說一下GC。
A:講了一下GC,舉了G1和CMS作為例子。
快排的思想
Q:說一下快排的思想和時間複雜度。
A:說了下原理,時間複雜度,什麼時候會退化為o(n^2)。
程序、線程和協程
Q:說一下程序、線程和協程的差別。
A:程序和線程的差別,PCB塊、線程是CPU的執行者(其實這裡說的不太好,标準答案應該是程序是資源配置設定的最小機關,線程值cpu排程的最小機關),協程是M:N而線程是1:1。
智力題
紅眼病
一個島上有5個人的眼睛是紅色的,其他95個都是藍色的,當一個人知道自己的眼睛是紅色的之後就要自殺,但是這個島上的人都不能照鏡子。反正就是一個很典型的題目,問我當一個外島人說了一句你們之中有紅色眼睛之後,會發生什麼?
答:第五天的時候,五個人自殺。
他說,你看到過是吧?
我說,是的。
他說,那換一道。
已知一個家庭中有兩個孩子,一個是女孩,另外一個也是女孩的機率。
這道題我不知道因為是緊張還是什麼的,就沒答上來。
事後想想,其實答案是這樣。
一共2個孩子,四種情況。2男,1男1女,1女1男,2女。
已知有一個女孩,去掉2男的情況,還剩3中。
求2女的機率,1/3。
感覺有一些遺憾。
反問
我有什麼地方還需要提高?
你回去好好想想自己的亮點,有沒有什麼競賽論文專利,導師的項目和大廠實習還是不太一樣的。
感覺我被勸退了。
之後再好好想想網吧項目和惠爾項目怎麼重新設計架構怎麼看上去牛逼一點吧。
