你離拿高薪、進大廠就只差這一片面試題了!

前言

經歷了無數次的春招與秋招之後,我也積攢了一些面經,分享出來希望能對大家有所幫助。由於字數限制需要答案的朋友可以點一點下方鏈接免費領取

鏈接:1103806531暗號:CSDN

Java

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

Spring

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

MySQL

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

JVM

  1. 你知道哪些或者你們線上使⽤什麼GC策略? 它有什麼優勢,適⽤用於什麼場景?
  2. JAVA類加載器包括幾種?它們之間的父子關係是怎麼樣的?雙親委派機制是什麼意思?有什麼好處?
  3. 如何自定義一個類加載器?你使⽤過哪些或者你在什麼場景下需要⼀個⾃定義的類加載器嗎?
  4. 堆內存設置的參數是什麼?
  5. Perm Space中保存什麼數據? 會引起OutOfMemory嗎?
  6. 做gc時,⼀個對象在內存各個Space中被移動的順序是什麼?
  7. 你有沒有遇到過OutOfMemory問題?你是怎麼來處理這個問題的?處理過程中有哪些收穫?
  8. 1.8之後Perm Space有哪些變動? MetaSpace⼤小默認是無限的麼? 還是你們會通過什麼方式來指定⼤小?
  9. Jstack是幹什麼的? Jstat呢? 如果線上程序週期性地出現卡頓,你懷疑可能是gc導致的,你會怎麼來排查這個問題?線程日誌一般你會看其中的什麼部分?
  10. StackOverFlow異常有沒有遇到過?一般你猜測會在什麼情況下被觸發?如何指定一個線程的堆棧⼤小?一般你們寫多少?

Linux命令

  1. 日誌特別大隻想看最後100行怎麼弄? 如果想一直看日誌的持續輸出,⽤什麼命令?
  2. 如果日誌一邊輸出,一邊想實時看到有沒有某個關鍵字應該怎麼弄?
  3. grep如果忽略⼤小寫應該怎麼弄? 正則表達式呢?
  4. vim往下一行是什麼鍵?往下30⾏呢? 跳到⽂件末尾一⾏是什麼? 跳回來是什麼? 向後搜索是什麼?
  5. 如果有個文本文件,按空格作爲列的分隔符,如果想統計第三列⾥面的每個單詞的出現次數應該怎麼弄?
  6. 如果把上面的出現次數排個序應該怎麼弄? 想按照數字本身的順序⽽不是字符串的順序排列怎麼弄?
  7. Linux環境變量是以什麼作爲分隔符的?環境變量通過麼命令設置?
  8. 給某個文件權設置限比如設置爲64 是用什麼命令?這個6是什麼意思?
  9. Linux下⾯如果想看某個進程的資源佔⽤情況是怎麼看的?系統load大概指的什麼意思?你們線上系統load⼀般多少?如果⼀個4核機器,你認爲多少load是比較正常的? top命令⾥⾯按一下1會發⽣什麼?
  10. top命令⾥面,有時候所有進程的CPU使⽤率加起來超過100%是怎麼回事?

Redis

  1. 什麼是redis?

  2. Reids的特點

  3. 使用redis有哪些好處?

  4. redis相比memcached有哪些優勢?

  5. Memcache與Redis的區別都有哪些?

  6. redis常見性能問題和解決方案

  7. mySQL裏有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據

  8. 請用Redis和任意語言實現一段惡意登錄保護的代碼,限制1小時內每用戶Id最多隻能登錄5次。具體登錄函數或功能用空函數即可,不用詳細寫出。

  9. 爲什麼redis需要把所有數據放到內存中?

  10. Redis是單進程單線程的

  11. redis的併發競爭問題如何解決?

  12. redis事物的瞭解CAS(check-and-set 操作實現樂觀鎖 )?

  13. WATCH命令和基於CAS的樂觀鎖:

  14. redis持久化的幾種方式

  15. redis的緩存失效策略和主鍵失效機制

  16. redis 最適合的場景

  17. Redis集羣方案什麼情況下會導致整個集羣不可用?

  18. Redis支持的Java客戶端都有哪些?官方推薦用哪個?

  19. Redis和Redisson有什麼關係?

  20. Jedis與Redisson對比有什麼優缺點?

開發

  1. 緩存穿透可以介紹一下麼?你認爲應該如何解決這個問題
  2. 你是怎麼觸發緩存更新的? (比如設置超時時間(被動方式), ⽐如更新的時候主動update)?如果是被動的方式如何控制多個入⼝同時觸發某個緩存更新?
  3. 你們用Redis來做什麼?爲什麼不用其他的KV存儲例如Memcached,Cassandra等?
  4. 你們用什麼Redis客戶端? Redis高性能的原因大概可以講一些?
  5. 你熟悉哪些Redis的數據結構? zset是幹什麼的? 和set有什麼區別?
  6. Redis的hash, 存儲和獲取的具體命令叫什麼名字?
  7. LPOP和BLPOP的區別?
  8. Redis的有一些包含SCAN關鍵字的命令是幹嘛的? SCAN返回的數據量是固定的嗎?
  9. Redis中的Lua有沒有使⽤過? 可以用來做什麼? 爲什麼可以這麼⽤?
  10. Redis的Pipeline是⽤來⼲麼的?

最後

需要更多Java知識點和大廠面試題的朋友可以點一點下方鏈接免費領取

鏈接:1103806531暗號:CSDN

在這裏插入圖片描述
在這裏插入圖片描述