今天面試一個三年的java開發工程師,問工作原理他答不上來。這是當時的面試過程:
問: spring mvc在開發中常用吧?
答:常用。
問:那你能講講它的工作原理嗎?
答:會用就行,瞭解原理幹啥。
微微一笑,再問:那你能說說平時使用了它的哪些註解呢?
答:用的時候百度一下,誰記這個呀。
此時心裏有無數個…
不過對於這段面試體驗,有應聘者覺得現在的面試官特別浮躁,張嘴原理閉嘴高併發,又是大數據又是AI,彷彿不懂就是另類人一般,多問問基礎,招過來是幹活的,不是畫餅的,我就招到過這樣的麪霸,問什麼都對答如流,入職後,發現真沒辦法做業務。
現在很多公司都這樣,只喜歡會吹牛的,口才好的,能說會道的,如果你性格內向不善言辭,就算技術再牛,也會被面試官在嘲笑中pass掉。
但是一個常用的東西都不記得,那說明能力是有夠差的,而且基本原理不清楚,說明平時不注重技術的深度,只是滿足業務的開發,這種人慎用。來看看程序員同行怎麼說:
1,主要要看你招進這個人是要幹嘛?並且現在你是否缺人幹活。如果主要是幹項目,那有大的項目經驗很重要,你招他又不是研究中間件或者什麼高深的算法,一羣人來面試,很理解面試官抱着選擇優秀員工的想法,但最後終歸是要落地的,面試官也應該多方面去看待和思考。
2,面試造火箭,工作擰螺絲調侃一下就行了,真的瞧不起原理就過分了。
瞭解原理只是第一步,有三個好處,1.匹配框架規則,避免低性能代碼。2.排查bug。3.讀懂設計思想,爲架構做積累。
例如讀懂kafka原理,學到用多分區思想提高吞吐量,讀懂mq原理,學到用確認機制保證可靠性。我認爲一個架構師,設計架構不應該是幾個主流框架的排列組合,而是框架設計思維的組合,這是真正的精髓。
但是,我也理解平時的時候,程序員都比較忙,沒什麼時間去進行完整的學習,所以,我在這裏也給大家整理了一份文檔,大家來看一下
目錄:
這個PDF的內容涵蓋:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技術棧,文末獲取免費領取方式
JVM
- 線程
- JVM內存區域
- JVM運行時內存
- 垃圾回收與算法
- JAVA 四種引用類型
- GC分代收集算法 VS 分區收集算法
- GC垃圾收集器
- JAVA IO/NIO
- JVM 類加載機制
JAVA集合
- 接口繼承關係和實現
- List
- ArrayList(數組)
- Vector(數組實現、線程同步)
- LinkList(鏈表)
- Set
- HashSet(Hash表)
- TreeSet(二叉樹)
JAVA多線程併發
- JAVA併發知識庫
- JAVA線程實現/創建方式
- 4種線程池
- 線程生命週期(狀態)
- 終止線程4種方式
- sleep與wait 區別
- start與run區別
- JAVA後臺線程
- JAVA鎖
- 線程基本方法4.1.11. 線程上下文切換
- 同步鎖與死鎖
- 線程池原理
- JAVA阻塞隊列原理
- CyclicBarrier、CountDownLatch、Semaphore的用法
- volatile關鍵字的作用(變量可見性、禁止重排序)
- 如何在兩個線程之間共享數據
JAVA基礎
- JAVA異常分類及處理
- JAVA反射
- JAVA註解
- JAVA內部類
- JAVA泛型
- JAVA序列化(創建可複用的Java對象)
- JAVA複製
Spring 原理
- Spring 特點
- Spring 核心組件
- Spring 常用模塊
- Spring 主要包
- Spring 常用註解
- Spring第三方結合
- Spring IOC原理
- Spring APO原理
- Spring MVC原理
- Spring Boot原理
- JPA原理
- Mybatis緩存
- Tomcat架構
微服務
- 服務註冊發現
- API 網關
- 配置中心
- 事件調度(kafka)
- 服務跟蹤(starter-sleuth)
- 服務熔斷(Hystrix)
- Hystrix斷路器機制
- API管理
Netty 與RPC
- Netty 原理
- Netty 高性能
- Netty RPC實現
- 關鍵技術
- 核心流程
- 消息編解碼
- 通訊過程
- RMI實現方式
分佈式緩存
- 緩存雪崩
- 緩存穿透
- 緩存預熱
- 緩存更新
- 緩存降級
Zookeeper
- Zookeeper概念
- Zookeeper角色
- Zookeeper工作原理(原子廣播)
- Znode有四種形式的目錄節點
Kafka
- Kafka概念
- Kafka數據存儲設計
- partition的數據文件(offset,MessageSize,data)
- 數據文件分段segment(順序讀寫、分段命令、二分查找)
- 數據文件索引(分段索引、稀疏存儲)
- 生產者設計
- 負載均衡(partition會均衡分佈到不同broker上)
- 批量發送
- 壓縮(GZIP或Snappy)
- 消費者設計
RabbitMQ
- RabbitMQ概念
- RabbitMQ架構
- Exchange 類型
算法
- 一致性算法
- Java算法
- 數據結構
- 加密算法
看完上面的內容,相信大家已經有了清晰的目標與方向,接下來就是查找學習資料了,我們爲大家準備了一套體系化的架構師學習資料包以及BAT面試資料,供大家參考,學習資料包內容及領取方法如下
部分資料展示:
需要這份資料的,點贊+關注
關注公衆號:Java架構師聯盟,每日更新技術好文,謝謝