1. 程式人生 > >十面阿裏面試筆記,屌絲程序員逆襲阿裏之路

十面阿裏面試筆記,屌絲程序員逆襲阿裏之路

Java 面試 阿裏巴巴 架構 JVM

雖然天貓,螞蟻金,菜鳥都歸屬阿裏旗下,但每個面試官問的問題都不一樣,相同點主要在流程方面。面試開始會讓自我介紹,主要業務架構和技術架構兩部分。業務架構一般不會深究,但要面試官聽明白,並且一般面試官會順著問是如何根據這些業務去設計技術架構的。

面試試題

其他

什麽是冪等?什麽情況下需要考慮冪等?你怎麽解決冪等的問題?

Java

  • 多個線程同時讀寫,讀線程的數量遠遠大於寫線程,你認為應該如何解決並發的問題?你會選擇加什麽樣的鎖?
  • JAVA的AQS是否了了解,它是幹嘛的?
  • 除了synchronized關鍵字之外,你是怎麽來保障線程安全的?
  • 什麽時候需要加volatile關鍵字?它能保證線程安全嗎?
  • 線程池內的線程如果全部忙,提交一個新的任務,會發生什什麽?隊列全部塞滿了之後,還是忙,再提交會發生什麽?
  • Tomcat本身的參數你?一般會怎麽調整?
  • synchronized關鍵字鎖住的是什麽東西?在字節碼中是怎麽表示的?在內存中的對象上表現為什麽?
  • wait/notify/notifyAll方法需不需要被包含在synchronized塊中?這是為什麽?
  • ExecutorService你一般是怎麽用的?是每個service放一個還是一個項目裏面放一個?有什麽好處?

Spring

  • 你有沒有?用過Spring的AOP? 是用來幹嘛的? 大概會怎麽使用?
  • 如果?一個接口有2個不同的實現, 那麽怎麽來Autowire一個指定的實現?
  • Spring的聲明式事務 @Transaction註解一般寫在什麽位置? 拋出了異常會自動回滾嗎?有沒有辦法控制不觸發回滾?
  • 如果想在某個Bean生成並裝配完畢後執行自己的邏輯,可以什麽方式實現?
  • SpringBoot沒有放到web容器裏為什麽能跑HTTP服務?
  • SpringBoot中如果你想使用自定義的配置文件而不僅僅是application.properties,應該怎麽弄?
  • SpringMVC中RequestMapping可以指定GET, POST方法麽?怎麽指定?
  • SpringMVC如果希望把輸出的Object(例如XXResult或者XXResponse)這種包裝為JSON輸出, 應該怎麽處理?
  • 怎樣攔截SpringMVC的異常,然後做自定義的處理,比如打日誌或者包裝成JSON

MySQL

  • 如果有很多數據插入MYSQL 你會選擇什麽方式?
  • 如果查詢很慢,你會想到的第一個方式是什麽?索引是幹嘛的?
  • 如果建了一個單列索引,查詢的時候查出2列,會用到這個單列索引嗎?
  • 如果建了一個包含多個列的索引,查詢的時候只用了第一列,能不能用上這個索引?查三列呢?
  • 接上題,如果where條件後面帶有一個 i + 5 < 100 會使用到這個索引嗎?
  • 怎麽看是否用到了了某個索引?
  • like %aaa%會使用索引嗎? like aaa%呢?
  • drop、truncate、delete的區別?
  • 平時你們是怎麽監控數據庫的? 慢SQL是怎麽排查的?
  • 你們數據庫是否支持emoji表情,如果不支持,如何操作?
  • 你們的數據庫單表數據量是多少?一般多大的時候開始出現查詢性能急劇下降?
  • 查詢死掉了,想要找出執行的查詢進程用什麽命令?找出來之後一般你會幹嘛?
  • 讀寫分離是怎麽做的?你認為中間件會怎麽來操作?這樣操作跟事務有什麽關系?
  • 分庫分表有沒有做過?線上的遷移過程是怎麽樣的?如何確定數據是正確的?

JVM

  • 你知道哪些或者你們線上使用什麽GC策略? 它有什麽優勢,適用於什麽場景?
  • JAVA類加載?包括幾種?它們之間的父子關系是怎麽樣的?雙親委派機制是什麽意思?有什麽好處?
  • 如何自定義一個類加載??你使用過哪些或者你在什麽場景下需要一個自定義的類加載?嗎?
  • 堆內存設置的參數是什麽?
  • Perm Space中保存什麽數據? 會引起OutOfMemory嗎?
  • 做gc時,一個對象在內存各個Space中被移動的順序是什麽?
  • 你有沒有遇到過OutOfMemory問題?你是怎麽來處理這個問題的?處理過程中有哪些收獲?
  • 1.8之後Perm Space有哪些變動? MetaSpace大小默認是無限的麽? 還是你們會通過什麽方式來指定大小?
  • Jstack是幹什麽的? Jstat呢? 如果線上程序周期性地出現卡頓,你懷疑可能是gc導致的,你會怎麽來排查這個問題?線程日誌一般你會看其中的什麽部分?
  • StackOverFlow異常有沒有遇到過?一般你猜測會在什麽情況下被觸發?如何指定一個線程的堆棧大小?一般你們寫多少?
  • 針對這些面試題的答案,我找了幾個一線互聯網資深架構師朋友把這些面試相關內容錄制成視頻放在群:725219329中分享給有需要的朋友免費獲取;不僅如此,還包括一些目前互聯網最主流的架構技術:分布式,微服務,等熱門話題的底層實現原理正在錄制中,感興趣的朋友可以進來看看。希望每一個進來的人都有收貨。

Linux命令

  • 日誌特別大只想看最後100行怎麽弄弄? 如果想一直看日誌的持續輸出,用什麽命令?
  • 如果日誌一邊輸出,一邊想實時看到有沒有某個關鍵字應該怎麽弄?
  • grep如果忽略大小寫應該怎麽弄? 正則表達式呢?
  • vim往下一行是什麽鍵?往下30行呢? 跳到文件末尾一行是什麽? 跳回來是什麽? 向後搜索是什麽?
  • 如果有個文本文件,按空格作為列的分隔符,如果想統計第三列裏面的每個單詞的出現次數應該怎麽弄?
  • 如果把上面的出現次數排個序應該怎麽弄? 想按照數字本身的順序而不是字符串的順序排列怎麽弄?
  • Linux環境變量是以什麽作為分隔符的?環境變量通過什麽命令設置?
  • 給某個文件權設置限比如設置為64 是用什麽命令?這個6是什麽意思?
  • Linux下面如果想看某個進程的資源占用情況是怎麽看的?系統load大概指的什麽意思?你們線上系統load一般多少?如果一個4核機?,你認為多少load是比較正常的?top命令裏面按一下1會發生什麽?
  • top命令裏面,有時候所有進程的CPU使用率加起來超過100%是怎麽回事?
  • 還有哪些查看系統性能或者供你發現問題的命令?你一般是看哪個參數?
  • 想看某個進程打開了哪些網絡連接是什麽命令?裏面連接的狀態你比較關心哪幾種? -- 偏題
  • 有沒有做過Linux系統參數方面的優化,大概優化過什麽?
  • 系統參數裏面有個叫做backlog的可以用來幹什麽?
  • 查看網絡連接發現好多TIMEWAIT 可能是什麽原因?對你的應用會有什麽影響?你會選擇什麽樣的方式來減少這些TIMEWAIT
  • 可否介紹一下TCP三次握手的過程,如果現在有個網絡程序,你用第三方的library來發送數據,你懷疑這個library發送的數據有問題,那麽怎麽來驗證?tcpdump導出的文件你一般是怎麽分析的?
  • KeepAlive是用來幹什麽的?這樣的好處是什麽?

Redis -- 開發

  • 緩存穿透可以介紹一下麽?你認為應該如何解決這個問題
  • 你是怎麽觸發緩存更新的?(比如設置超時時間(被動方式), 比如更新的時候主動update)?如果是被動的方式如何控制多個入口同時觸發某個緩存更新?
  • 你們用Redis來做什麽?為什麽不用其他的KV存儲例例如Memcached,Cassandra等?
  • 你們用什麽Redis客戶端? Redis高性能的原因大概可以講一些?
  • 你熟悉哪些Redis的數據結構? zset是幹什麽的? 和set有什麽區別?
  • Redis的hash, 存儲和獲取的具體命令叫什麽名字?
  • LPOP和BLPOP的區別?
  • Redis的有一些包含SCAN關鍵字的命令是幹嘛的? SCAN返回的數據量是固定的嗎?
  • Redis中的Lua有沒有使用過? 可以用來做什麽? 為什麽可以這麽用?
  • Redis的Pipeline是用來幹什麽的? -- 運維
  • Redis持久化大概有幾種方式? aof和rdb的區別是什麽? AOF有什麽優缺點嗎?
  • Redis Replication的大致流程是什麽? bgsave這個命令的執行過程? -- 偏題
  • 如果有很多 KV數據要存儲到Redis, 但是內存不足, 通過什麽方式可以縮減內存? 為什麽這樣可以縮小內存?
  • Redis中List, HashTable都用到了ZipList, 為什麽會選擇它?

監控、穩定性

  • 業務日誌是通過什麽方式來收集的?
  • 線上機?如何監控?采用什麽開源產品或者自研的產品?它是分鐘級的還是秒級的?
  • 如果讓你來想辦法收集一個JAVA後端應用的性能數據,你會在意哪些方面? 你會選擇什麽樣的工具、思路來收集?
  • 一般你調用第三方的時候會不會監控調用情況?
  • 針對這些面試題的答案,我找了幾個一線互聯網資深架構師朋友把這些面試相關內容錄制成視頻放在群:725219329中分享給有需要的朋友免費獲取;不僅如此,還包括一些目前互聯網最主流的架構技術:分布式,微服務,等熱門話題的底層實現原理正在錄制中,感興趣的朋友可以進來看看。希望每一個進來的人都有收貨。

十面阿裏面試筆記,屌絲程序員逆襲阿裏之路