前言
我覺得有一個能夠找一份大廠的 offer的想法,這是很正常的,這並不是我們的飯後談資而是每個技術人的追求。像阿里、騰訊、美團、字節跳動、京東等等的技術氛圍與技術規範度還是要明顯優於一些創業型公司 / 小公司,如果說能夠在這樣的公司鍛鍊幾年,相信對自己能力的提升還是非常大的。不論是校招還是社招都避免不了各種面試、筆試,如何去準備這些東西就顯得格外重要。不論是筆試還是面試都是有章可循的。
因為大廠面試一般都有專業團隊負責,某個知識點你到底是掌握了還是單純背下來,面試官一問就可以看出來(PS:真正到面試特別是你覺得準備面試的時間不夠的時候,你可以多挑一些面試常問的問題來看,注意理解,一定不要死記硬背)。一定不要過分寄希望於各種面經,試著去提高自己的綜合能力。
“ 80% 的 offer 掌握在 20% 的人手 ” 中這句話也不是不無道理的。決定你面試能否成功的因素中實力固然佔有很大一部分比例,但是如果你的心態或者說運氣不好的話,依然無法拿到滿意的 offer。運氣暫且不談,就拿心態來說,千萬不要因為面試失敗而氣餒或者說懷疑自己的能力,面試失敗之後多總結一下失敗的原因,後面你就會發現自己會越來越強大。
從大廠實際招聘要求來看到底青睞什麼樣的人?
首先要明確的一點是:985/211 的學歷的確會為你加分很多。
另外,再強調的一點是不要天天把自己的學校是雙非學校這個接口當做你無法進入大廠的原因。只要你的能力足夠,大廠的大門就會為你打開。也有著很多雙非學校甚至是三本的同學就拿到像阿里、騰訊這樣的大公司的 offer。
從阿里、騰訊等大廠招聘官網對於 Java 後端方向/後端方向的要求,我們大概可以總結看出大廠對招聘者的能力要求。
下面以阿里巴巴為例子,看看大廠的實際要求
進入正文
多年大廠面試題總結
Redis
- 什麼是Redis?
- Redis相比memcached有哪些優勢?
- Redis支持哪幾種數據類型?
- Redis主要消耗什麼物理資源?
- Redis的全稱是什麼?
- Redis有哪幾種數據淘汰策略?
- Redis官方為什麼不提供Windows版本?
- 一個字符串類型的值能存儲最大容量是多少?
- 為什麼Redis需要把所有數據放到內存中?
- Redis集群方案應該怎麼做?都有哪些方案?
- Redis集群方案什麼情況下會導致整個集群不可用?
- MySQL裡有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?
- Redis有哪些適合的場景?
- Redis支持的Java客戶端都有哪些?官方推薦用哪個?
- Redis和Redisson有什麼關係?
- Jedis與Redisson對比有什麼優缺點?
- Redis如何設置密碼及驗證密碼?
- 說說Redis哈希槽的概念?
- Redis集群的主從複製模型是怎樣的?
- Redis集群會有寫操作丟失嗎?為什麼?
- Redis集群之間是如何複製的?
- Redis集群最大節點個數是多少?
- Redis集群如何選擇數據庫?
- 怎麼測試Redis的連通性?
- Redis中的管道有什麼用?
- 怎麼理解Redis事務?
- Redis事務相關的命令有哪幾個?
- Redis如何做內存優化?
- Redis回收進程如何工作的?
- Redis回收使用的是什麼算法?
- Redis如何做大量數據插入?
- 為什麼要做Redis分區?
- 你知道有哪些Redis分區實現方案?
- Redis分區有什麼缺點?
- Redis持久化數據和緩存怎麼做擴容?
- 分佈式Redis是前期做還是後期規模上來了再做好?為什麼?
- Twemproxy是什麼?
- 支持一致性哈希的客戶端有哪些?
- Redis與其他key-value存儲有什麼不同?
- Redis的內存佔用情況怎麼樣?
- 都有哪些辦法可以降低Redis的內存使用情況呢?
- 一個Redis實例最多能存放多少的keys?
- Redis常見性能問題和解決方案?
- Redis提供了哪幾種持久化方式?
- 如何選擇合適的持久化方式?
- 修改配置不重啟Redis會實時生效嗎?
多線程
- 併發編程三要素?
- 實現可見性的方法有哪些?
- 多線程的價值?
- 創建線程的有哪些方式?
- 創建線程的三種方式的對比?
- 線程的狀態流轉圖
- Java線程具有五中基本狀態
- 什麼是線程池?有哪幾種創建方式?
- 四種線程池的創建
- 線程池的優點?
- 常用的併發工具類有哪些?
- CyclicBarrier和CountDownLatch的區別
- synchronized的作用?
- volatile關鍵字的作用
- 什麼是CAS
- CAS的問題
- 什麼是Future?
- 什麼是AQS?
- AQS支持兩種同步方式
- ReadWriteLock是什麼?
- FutureTask是什麼?
- synchronized和ReentrantLock的區別?
- 什麼是樂觀鎖和悲觀鎖
- 線程B怎麼知道線程A修改了變量
- synchronized、volatile、CAS比較
- sleep方法和wait方法有什麼區別?
- ThreadLocal是什麼?有什麼用?
- 為什麼wait()方法和notify()/notifyAll()方法要在同步塊中被調用
- 多線程同步有哪幾種方法?
- 線程的調度策略
- ConcurrentHashMap的併發度是什麼?
- Linux環境下如何查找哪個線程使用CPU最長
- Java死鎖以及如何避免?
- 死鎖的原因
- 怎麼喚醒一個阻塞的線程
- 不可變對象對多線程有什麼幫助
- 什麼是多線程的上下文切換
- 如果你提交任務時,線程池隊列已滿,這時會發生什麼
- Java中用到的線程調度算法是什麼
- 什麼是線程調度器(Thread Scheduler)和時間分片(Time Slicing)?
- 什麼是自旋
- Java Concurrency API中的Lock接口(Lock interface)是什麼?對比同步它有什麼優勢?
- 單例模式的線程安全性
- Semaphore有什麼作用
- Executors類是什麼?
- 線程類的構造方法、靜態塊是被哪個線程調用的
- 同步方法和同步塊,哪個是更好的選擇?
- Java線程數過多會造成什麼異常?
更多面試專題答案、實戰學習文檔,需要獲取的朋友們可以轉發分享此文,關注小編後臺私信:“面試資料”即可一併獲取。
美團面試
- 瞭解SOA,微服務嗎?
- 分佈式系統如何負載均衡?如何確定訪問的資源在哪個服務器上?
- 設計一個分佈式負載均衡緩衝系統,如何快速定位到是那個服務器?
- 如何保證緩衝區和數據庫之間的強一致性?
- HashMap高併發情況下會出現什麼問題?
- 說一說在瀏覽器中輸入一個url後,直到瀏覽器顯示頁面的過程中發生了什麼?
- 字符串中句子的反轉(比如ABC DEF,輸出DEF ABC)
- 給任意二叉樹的所有結點加next指針
- 用過反向代理嗎?
- 進程間共享內存的方式有哪些?
- linux下如何查看網絡端口狀態,如何查看內存使用情況?
- ConcurrentHashMap如何擴容?
- 知道java的異常嗎?
- 運行時異常如果不處理會怎麼樣?應該怎麼處理運行時異常?
- 寫代碼:給你5000萬個int,求出前1000個最大的數,有2G內存。
- 給你n個不重複的整數,隨機找出m個不重複的整數,要求時間和空間複雜度都是O(m)。
- 對於SQL慢查詢的優化?
- 用過哪些容器?
- 用過動態代理嗎?
- 說說深入理解JVM中印象最深刻的章節
- 堆和棧中存的是什麼?static修飾的遍歷存在哪裡?
- 說說《Effective Java》中你印象最深的三條和你的理解
- 你覺得你哪一塊只是最熟悉
- 那你說說HashMap的內部實現;
- HashMap是線程安全的嗎?
- 那ConcurrentHashMap內部是如何實現的?每個segment是個什麼數據結構?
- 你的項目中用到哪些技術?
- 說說你用了它的什麼?
- Spring的優點?Spring AOP的原理?Spring如何實現解耦合?
- 對鏈表瞭解嗎?說說他們的區別?
- 會做鏈表兩個結點的交換嗎?
- 再寫一個,給你一個鏈表和一個整數k
- 說說mybatis配置了xml過後是如何完成數據庫操作的?
Spring
- 不同版本的 Spring Framework 有哪些主要功能?
- 什麼是 Spring Framework?
- 列舉 Spring Framework 的優點。
- Spring Framework 有哪些不同的功能?
- Spring Framework 中有多少個模塊,它們分別是什麼?
- 什麼是 Spring 配置文件?
- Spring 應用程序有哪些不同組件?
- 使用 Spring 有哪些方式?
- 什麼是 Spring IOC 容器?
- 什麼是依賴注入?
- spring 中有多少種 IOC 容器?
- 什麼是 spring bean?
- spring 提供了哪些配置方式?
- spring 支持集中 bean scope?
- spring bean 容器的生命週期是什麼樣的?
- 什麼是 spring 的內部 bean?
- 什麼是基於註解的容器配置?
- 如何在 spring 中啟動註解裝配?
- spring DAO 有什麼用?
- spring JDBC API 中存在哪些類?
- 列舉 spring 支持的事務管理類型
- 什麼是 AOP?
- 什麼是 Aspect?
- AOP 有哪些實現方式?
- Spring AOP and AspectJ AOP 有什麼區別?
阿里巴巴
- HashMap&ConcurrentHashMap
- 再談談一致hash算法?
- 樂觀鎖&悲觀鎖?
- 可重入鎖&Synchronize?
- 事務四大特性?
- 事務的二段提交機制?
- 聚簇索引&非聚簇索引?
- 用自己的實踐經歷說一下索引的使用場景(說一個就要舉一個例子)?
- 當前讀&快照讀?
- 類加載過程?
- 雙親委派機制及使用原因?
- 說說GC算法?
- Http&Https的區別
- Https的加密方式
- 線程池的核心參數和基本原理
- 線程池的調優策略
- 說說自己參與的項目,技術難度在哪裡?
- Collections.sort底層排序方式?
- 排序穩定性?
- 具體場景的排序策略?
- Http請求過程,DNS解析過程
- 三次握手四次揮手
- 簡述線程池和併發工具的使用?
- 數據庫索引原理
- 頻繁老年代回收怎麼分析解決
- Spring IOC、AOP?
- 講講SpringBoot/SpringCloud的一些應用?
- 阻塞隊列不用java提供的自己怎麼實現,condition和wait不能用
- 擁塞窗口講一講,為什麼要用慢啟動算法
- 負載均衡的原理?
- Redis的數據一致性問題(分佈式多節點環境 & 單機環境)?
- 講講docker容器?
- 如何實現何高併發下的削峰,限流?
- 項目中用的中間件的理解(Dubbo、MQ、Redis、kafka、zk)
- 服務器雪崩是怎麼造成的?之前有這樣的經歷嗎?怎麼防備?
- 高併發架構的設計思路
- 以前項目中遇到的最大問題和解決策略
- 生活中遇到的最大的挫折
- 生活中遇到的最大的令你最有成就感的事情
更多面試專題答案、實戰學習文檔,需要獲取的朋友們可以轉發分享此文,關注小編後臺私信:“面試資料”即可一併獲取。
閱讀更多 Java高級架構師 的文章