爲什麼要跳槽爲什麼要跳槽,這個問題一定要思考清楚,因爲跳槽的成本其實是挺大的,在一家公司積累的不僅僅是人脈還有對當前行業以及業務的熟悉度,新進入一家公司,一切需要從頭再來,需要快速的證明自己,尤其是技術人員,還有就是對新環境和代碼的熟悉,這些都是成本,所以在跳槽前,一定要想好,爲什麼要跳槽。其實馬爸爸有一句經典的話“要麼錢沒給到位,要麼心委屈了”,說的很形象,我這裏再細說一下:
錢沒給到位,其實所有的人對自己的評價都是比自己真實的水平要高一些,這就導致,大部分人認爲自己現在貢獻很大,老闆應該加薪,尤其是看到一些同事做的不如自己(可能是自己認爲),工資拿的和自己一樣,甚至比自己高,那就更加有錢給的少了的感覺。
做的事情是否有價值或者說是否有持續盈利的趨勢,這個很重要,一個公司的產品不盈利沒前景,就算給你開不錯的工資,作爲一個不想混喫等死的人來說,都不想繼續再待下去。
機會,作爲一個已經有3年工作經驗的人來說,這個時候更加需要的是一個機會,能夠證明自己,給公司帶來更大的價值,完成進一步的突破,如果當前的公司並不能給你這個機會,那麼你就需要考慮跳槽了。
那麼跳槽的核心就是利益最大化,當然這裏說的利益,不僅僅是薪資福利,還有自己的職業規劃。
職業規劃
作爲技術人員,我大概總結了下面三個方向,其實哪個方向都是大有可爲,關鍵還是要看自己。
- 技術經理
- 架構師
- 專項領域的專家
薪資福利
作爲一個不再年輕的程序員來說,已經不能忽略薪資和福利,不再像剛畢業的同學,只要能成長、只要平臺好,薪資什麼的不重要。其實每個階段都有自己的側重點,我大概對薪資、平臺、成長排了個序(自己的觀點)
1~3年,平臺>=成長>薪資
3~5年,平臺>=薪資>=成長
5~10年,平臺=薪資>成長(這個階段也可叫做規劃)
上面是自己不成熟的看法,從自身的一些經驗出發的,僅供參考。
話不多少,先上面試題,其他的後面再說:
基礎篇
基本功
- 面向對象的特徵
- final, finally, finalize 的區別
- int 和 Integer 有什麼區別
- 重載和重寫的區別
- 抽象類和接口有什麼區別
- 說說反射的用途及實現
- 說說自定義註解的場景及實現
- HTTP 請求的 GET 與 POST 方式的區別
- session 與 cookie 區別
- session 分佈式處理
- JDBC 流程
- MVC 設計思想
- equals 與 == 的區別
集合
- List 和 Set 區別
- List 和 Map 區別
- Arraylist 與 LinkedList 區別
- ArrayList 與 Vector 區別
- HashMap 和 Hashtable 的區別
- HashSet 和 HashMap 區別
- HashMap 和 ConcurrentHashMap 的區別
- HashMap 的工作原理及代碼實現
- ConcurrentHashMap 的工作原理及代碼實現
線程
- 創建線程的方式及實現
- sleep() 、join()、yield()有什麼區別
- 說說 CountDownLatch 原理
- 說說 CyclicBarrier 原理
- 說說 Semaphore 原理
- 說說 Exchanger 原理
- 說說 CountDownLatch 與 CyclicBarrier 區別
- ThreadLocal 原理分析
- 講講線程池的實現原理
- 線程池的幾種方式
- 線程的生命週期
- 鎖機制
- 說說線程安全問題
- volatile 實現原理
- synchronize 實現原理
- synchronized 與 lock 的區別
- CAS 樂觀鎖
- ABA 問題
- 樂觀鎖的業務場景及實現方式
核心篇
數據存儲
- MySQL 索引使用的注意事項
- 說說反模式設計
- 說說分庫與分表設計
- 分庫與分錶帶來的分佈式困境與應對之策
- 說說 SQL 優化之道
- MySQL 遇到的死鎖問題
- 存儲引擎的 InnoDB 與 MyISAM
- 數據庫索引的原理
- 爲什麼要用 B-tree
- 聚集索引與非聚集索引的區別
- limit 20000 加載很慢怎麼解決
- 選擇合適的分佈式主鍵方案
- 選擇合適的數據存儲方案
- ObjectId 規則
- 聊聊 MongoDB 使用場景
- 倒排索引
- 聊聊 ElasticSearch 使用場景
緩存使用
- Redis 有哪些類型
- Redis 內部結構
- 聊聊 Redis 使用場景
- Redis 持久化機制
- Redis 如何實現持久化
- Redis 集羣方案與實現
- Redis 爲什麼是單線程的
- 緩存奔潰
- 緩存降級
- 使用緩存的合理性問題
消息隊列
- 消息隊列的使用場景
- 消息的重發補償解決思路
- 消息的冪等性解決思路
- 消息的堆積解決思路
- 自己如何實現消息隊列
- 如何保證消息的有序性
框架篇
Spring
- BeanFactory 和 ApplicationContext 有什麼區別
- Spring Bean 的生命週期
- Spring IOC 如何實現
- 說說 Spring AOP
- Spring AOP 實現原理
- 動態代理(cglib 與 JDK)
- Spring 事務實現方式
- Spring 事務底層原理
- 如何自定義註解實現功能
- Spring MVC 運行流程
- Spring MVC 啓動流程
- Spring 的單例實現原理
- Spring 框架中用到了哪些設計模式
- Spring 其他產品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)
Netty
- 爲什麼選擇 Netty
- 說說業務中,Netty 的使用場景
- 原生的 NIO 在 JDK 1.7 版本存在 epoll bug
- 什麼是TCP 粘包/拆包
- TCP粘包/拆包的解決辦法
- Netty 線程模型
- 說說 Netty 的零拷貝
- Netty 內部執行流程
- Netty 重連實現
微服務篇
微服務
- 前後端分離是如何做的
- 微服務哪些框架
- 你怎麼理解 RPC 框架
- 說說 RPC 的實現原理
- 說說 Dubbo 的實現原理
- 你怎麼理解 RESTful
- 說說如何設計一個良好的 API
- 如何理解 RESTful API 的冪等性
- 如何保證接口的冪等性
- 說說 CAP 定理、 BASE 理論
- 怎麼考慮數據一致性問題
- 說說最終一致性的實現方案
- 你怎麼看待微服務
- 微服務與 SOA 的區別
- 如何拆分服務
- 微服務如何進行數據庫管理
- 如何應對微服務的鏈式調用異常
- 對於快速追蹤與定位問題
- 微服務的安全
分佈式
- 談談業務中使用分佈式的場景
- Session 分佈式方案
- 分佈式鎖的場景
- 分佈是鎖的實現方案
- 分佈式事務
- 集羣與負載均衡的算法與實現
- 說說分庫與分表設計
- 分庫與分錶帶來的分佈式困境與應對之策
安全問題
- 安全要素與 STRIDE 威脅
- 防範常見的 Web 攻擊
- 服務端通信安全攻防
- HTTPS 原理剖析
- HTTPS 降級攻擊
- 授權與認證
- 基於角色的訪問控制
- 基於數據的訪問控制
性能優化
- 性能指標有哪些
- 如何發現性能瓶頸
- 性能調優的常見手段
- 說說你在項目中如何進行性能調優
工程篇
需求分析
- 你如何對需求原型進行理解和拆分
- 說說你對功能性需求的理解
- 說說你對非功能性需求的理解
- 你針對產品提出哪些交互和改進意見
- 你如何理解用戶痛點
設計能力
- 說說你在項目中使用過的 UML 圖
- 你如何考慮組件化
- 你如何考慮服務化
- 你如何進行領域建模
- 你如何劃分領域邊界
- 說說你項目中的領域建模
- 說說概要設計
設計模式
- 你項目中有使用哪些設計模式
- 說說常用開源框架中設計模式使用分析
- 說說你對設計原則的理解
- 23種設計模式的設計理念
- 設計模式之間的異同,例如策略模式與狀態模式的區別
- 設計模式之間的結合,例如策略模式+簡單工廠模式的實踐
- 設計模式的性能,例如單例模式哪種性能更好。
業務工程
- 你係統中的前後端分離是如何做的
- 說說你的開發流程
- 你和團隊是如何溝通的
- 你如何進行代碼評審
- 說說你對技術與業務的理解
- 說說你在項目中經常遇到的 Exception
- 說說你在項目中遇到感覺最難Bug,怎麼解決的
- 說說你在項目中遇到印象最深困難,怎麼解決的
- 你覺得你們項目還有哪些不足的地方
- 你是否遇到過 CPU 100% ,如何排查與解決
- 你是否遇到過 內存 OOM ,如何排查與解決
- 說說你對敏捷開發的實踐
- 說說你對開發運維的實踐
- 介紹下工作中的一個對自己最有價值的項目,以及在這個過程中的角色
軟實力
- 說說你的亮點
- 說說你最近在看什麼書
- 說說你覺得最有意義的技術書籍
- 工作之餘做什麼事情
- 說說個人發展方向方面的思考
- 說說你認爲的服務端開發工程師應該具備哪些能力
- 說說你認爲的架構師是什麼樣的,架構師主要做什麼
- 說說你所理解的技術專家
以上就是在面試中經常遇到的一些面試題
在面試之前我做了很多準備,先把基礎的知識都掃了好幾遍,然後對於面試常問的spring、JVM、數據庫等等內容都好好看了一下,簡歷也是認真的修改過(一定不要造假!!!)