1. 程式人生 > 其它 >MySQL千萬資料量深分頁優化,Java演算法基礎面試題

MySQL千萬資料量深分頁優化,Java演算法基礎面試題

三面頭條

面試崗位是後臺研發工程師,地點選擇了上海,通過大佬內推,跳過死亡筆試,加上疫情期間,所以直接視訊面,從3點開始,斷斷續續到晚上8點結束。

一共三輪技術面試,每一輪都要寫程式碼,也喜歡問一些底層知識,讓我有點懵逼。

一面:

  1. 寫一個題,找一個無序陣列的中位數
  2. 寫了個快排,然後讓我找到無序陣列第k大的一個數,我說先排序再找,實際上可以用快排的partition函式。
  3. 快排的時間複雜度,最壞情況呢,最好情況呢,堆排序的時間複雜度呢,建堆的複雜度是多少。
  4. 作業系統瞭解麼,Linux和windows
  5. 說說Linux的磁碟管理,一臉懵逼
  6. Linux有哪些程序通訊方式,五大件
  7. Linux的共享記憶體如何實現,大概說了一下。
  8. 共享記憶體實現的具體步驟,我說沒用過
  9. socket網路程式設計,說一下TCP的三次握手和四次揮手。
  10. 跳過網路,問了專案的一些東西
  11. 問我如何把docker講很清楚,我從物理機,虛擬機器到容器具體實現稍微說了下。
  12. 問我cgroup在linux的具體實現,不會。
  13. 多執行緒用過哪些,chm和countdownlatch在實習用過

二面:

  1. 自我介紹Java的集合類哪些是執行緒安全
  2. 分別說說這些集合類,hashmap怎麼實現的,扯了很多
  3. MySQL索引的實現,innodb的索引,b+tree索引是怎麼實現的,為什麼用b+tree做索引節點,一個節點存了多少資料,怎麼規定大小,與磁碟頁對應。
  4. MySQL的事務隔離級別,分別解決什麼問題。
  5. Redis瞭解麼,如果Redis有1億個key,使用keys命令是否會影響線上服務,我說會,因為是單執行緒模型,可以部署多個節點。
  6. 問我知不知道有一條命令可以實現上面這個功能。不知道
  7. Redis的持久化方式,aod和rdb,具體怎麼實現,追加日誌和備份檔案,底層實現原理的話知道麼,不清楚。
  8. Redis的list是怎麼實現的,我說用ziplist+quicklist實現的,ziplist壓縮空間,quicklist實現連結串列。
  9. sortedset怎麼實現的,使用dict+skiplist實現的,問我skiplist的資料結構,大概說了下是個實現簡單的快速查詢結構。
  10. 瞭解什麼訊息佇列,rmq和kafka,沒細問
  11. 寫題時間到。第一題:寫一個程式遍歷。第二題:寫一個插入樹節點到一顆排序樹的插入方法,使用遞迴方式找到插入位置即可。第三題:一個有向圖用鄰接矩陣表示,並且是有權圖,現在問怎麼判斷圖中有沒有環。第四題:一個二叉樹,找到二叉樹中最長的一條路徑。

三面:

  1. 三面的面試官真的高冷啊,不苟言笑就算了,我問他他都不愛搭理的,搞得我內心慌得一比,感覺涼涼。
  2. 介紹一下專案
  3. 你談到的併發技術,chm和countdownlatch怎麼使用的
  4. 為什麼要這麼處理,使用執行緒池是不是也可以。我說也可以
  5. 作業系統的程序通訊方式,殭屍程序和孤兒程序是什麼,如何避免殭屍程序,我說讓父程序顯示通知,那父程序怎麼知道子程序結束了,答不會。
  6. 計算機網路TCP和UDP有什麼區別,為什麼迅雷下載是基於UDP的,我說FTP是基於TCP,而迅雷是p2p不需要TCP那麼可靠的傳輸保證,他說不對。
  7. 我說是不是因為要建立連線,開銷比較大,他說不對。
  8. 我說p2p的傳送節點很多,所以不是那麼需要各種傳輸保證,他說不對。
  9. 我說TCP會自動分包而TCP可以自己定義資料長度。。他還是說不對。
  10. 最後他說算了。我們問下一個吧。作業系統的死鎖必要條件,如何避免死鎖。寫一個LRU的快取,需要完成超時淘汰和LRU淘汰。我說用lhm行不行,他說用linkedlist和hashmap可以。於是我就寫了put和get函式,進行了隊頭隊尾操作。他說get複雜度會不會太高,我瞎掰了半天沒找到辦法,他說那就這樣吧,今天面試到這。
  11. 過期淘汰的處理我還沒寫呢,你就說結束了,感覺涼了啊,我說我要不要把剩下邏輯說完,他說不用,心涼了一大截~

然後就是HR小姐姐讓我等結果了。感覺不對,應該是涼涼~~~

四面阿里

有了前邊頭條面試的經歷,自己也惡補了一些面試常見問題,這次決定試試阿里,畢竟面試不通過不虧,僥倖通過血賺啊。

面試崗位是研發工程師,直接找螞蟻金服的大佬進行內推,參與了阿里巴巴中介軟體部門的提前批面試,一共經歷了四次面試,拿到了口頭offer。

一面:

  1. 自我介紹。
  2. 專案中做了什麼,覺得難點在哪裡。
  3. Java的執行緒池說一下,各個引數的作用,如何進行的。
  4. Redis講一下
  5. 分散式系統的全域性id如何實現。用zookeeper如何實現的呢,機器號+時間戳即可。
  6. 分散式鎖的方案,redis和zookeeper哪個好,如果是叢集部署,高併發情況下哪個效能更好。
  7. kafka瞭解麼,瞭解哪些訊息佇列。
  8. 想做業務還是研究。
  9. 然後出了一道題,linux的訪問許可權是rwx格式的。使用一個類支援訪問許可權的增刪改查,並且注意使用的資料格式以及方法效率,規範。給了一個多小時寫題。耗時將近30分鐘。

二面:

  1. 介紹你做的專案和其中的難點。
  2. 上次面試官問的問題,反射的作用是什麼。
  3. 資料倉庫,多執行緒和併發工具等。
  4. 私有云,docker和k8s等。
  5. 瞭解哪些中介軟體,dubbo,rocketmq,mycat等。
  6. dubbo中的rpc如何實現。自己實現rpc應該怎麼做dubbo的服務註冊與發現。
  7. 問了些排序演算法耗時將近30分鐘。

三面:

三面不是面試,而是筆試,耗時三個小時,考的是Java核心的基礎。但是好像不能透題,就不說了。都挺有難度的。

大概說一下就是有幾個考點,Java併發的知識點,集合類,執行緒池,多執行緒、高併發之間的通訊等。

HR面:

聊人生談理想,HR小姐姐非常溫柔,交流十分愉快。30分鐘。

最後

面試題文件來啦,內容很多,485頁!

由於筆記的內容太多,沒辦法全部展示出來,下面只擷取部分內容展示。

1111道Java工程師必問面試題

MyBatis 27題 + ZooKeeper 25題 + Dubbo 30題:

Elasticsearch 24 題 +Memcached +?Redis 40題:

Spring 26 題+ 微服務 27題+ Linux 45題:

Java面試題合集:

本文已被CODING開源專案:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊+實戰專案原始碼】收錄