目錄
- 技術一面(算法)
- 技術二面
- 技術三面
- JAVA開發技術面試中可能問到的問題
- 面試注意點
一、字節跳動技術一面(算法)
- Java 的 16 進制與字符串的相互轉換函數
- JAVA 時間格式化處理
- 將毫秒轉化爲日期
- 文本的倒序輸出
- 判斷一個數字是奇數還是偶數
- 用Hibernate 實現分頁
- 35 選 7 彩票程序
- 獲取 GMT8 時間
- 中文亂碼轉換
- 小標籤
- Big5 字與 Unicode 的互換
- 取得服務器當前的各種具體時間
- 用半角的特殊符號代替全角的特殊符號
- 數組和數組之間的轉換代碼
- 從資源文件裏讀取值的類
- 一個隨機類
- 計算傳入值是否星期六
- 轉換文件大小
- Java 日期格式化及其使用例子
- Java幾個常用方法
- 判斷字符是否屬於中文
- 去掉字符串中重複的子字符串
- 將指定 byte 數組以 16 進制的形式打印到控制檯
- 獲得任意一個整數的階乘,遞歸
- 拷貝一個目錄或者文件到指定路徑下
- 簡單的 txt 轉換 xml
- 字母排序(A-Z)(先大寫,後小寫)
- 列出某文件夾及其子文件夾下面的文件,並可根據擴展名過濾
- 字符串匹配的算法
二、字節跳動技術二面
- List和Set比較,各自的子類比較
- HashMap和ConcurrentHashMap的區別
- HashTable和ConcurrentHashMap的區別
- String,StringBuffer和StringBuilder的區別
- wait和sleep的區別
- JVM的內存結構
- 強引用,軟引用和弱引用的區別
- 數組在內存中如何分配
- Spring MVC的核心是什麼,請求的流程是怎麼處理的,控制反轉怎麼實現的
- Mybatis如何處理結果集
- Java的多態表現在哪裏
- 接口有什麼用
- 說說http,https協議
- 說說tcp/ip協議族
- tcp五層網絡協議
- TCP與UDP的區別
- cookie和session的區別,分佈式環境怎麼保存用戶狀態
- BIO、NIO和AIO的區別
- Java中常說的堆和棧,分別是什麼數據結構;另外,爲什麼要分爲堆和棧來存儲數據
- 爲什麼要用線程池
- MySQL優化經驗
- 悲觀鎖和樂觀鎖的區別,怎麼實現
- 什麼是線程死鎖?死鎖如何產生?如何避免線程死鎖?
- notify和notifyAll區別
- 談一談對MySQL InnoDB的認識
- 談一談數據庫事務的隔離級別?
- MySQL主備同步的基本原理
- 類在虛擬機中的加載過程
- 強引用、軟引用、弱引用、虛引用與GC的關係
- 請寫一段棧溢出、堆溢出的代碼
三、字節跳動技術三面
- 說一下spring中Bean的作用域
- 說一下spring中Bean的生命週期
- 對Spring中依賴注入兩種方式的認識
- Spring框架中都用到了哪些設計模式?
- BeanFactory 和ApplicationContext的區別
- 數據庫的三大範式
- TCP和UDP的區別及其適用場景
- 說一下Spring的核心模塊
- (轉發)forward與(重定向)redirect的區別
- redis常用的五種數據類型
- 內部類和靜態內部類的區別
- 非靜態內部類中的變量和方法不能聲明爲靜態的原因
- String,StringBuilder,StringBuffer的區別
- 集合和數組之間的相互轉換
- 面向對象的特徵有哪些方面?
- 概括的解釋下線程的幾種狀態
- Java集合類裏面基本的接口有哪些
- Iterator和ListIterator的區別
- Enumeration和Iterator的區別
- 介紹一下HTTP的響應結構
- final、finalize和finally各自的作用
- 說一下你瞭解的幾種進程間的通信方式
四、JAVA開發技術面試中可能問到的問題
1. 基礎知識
- 集合類:List和Set比較,各自的子類比較(ArrayList,Vector,LinkedList;HashSet,TreeSet);
- HashMap的底層實現,之後會問ConcurrentHashMap的底層實現;
- 如何實現HashMap順序存儲:可以參考LinkedHashMap的底層實現;
- HashTable和ConcurrentHashMap的區別;
- String,StringBuffer和StringBuilder的區別;
- Object的方法有哪些:比如有wait方法,爲什麼會有;
- wait和sleep的區別,必須理解;
- JVM的內存結構,JVM的算法;
- 強引用,軟引用和弱引用的區別;
- 數組在內存中如何分配;
- 用過哪些設計模式,手寫一個(除單例);
- springmvc的核心是什麼,請求的流程是怎麼處理的,控制反轉怎麼實現的;
- spring裏面的aop的原理是什麼;
- mybatis如何處理結果集:反射,建議看看源碼;
- java的多態表現在哪裏;
- 接口有什麼用;
- 說說http,https協議;
- tcp/ip協議簇;
- osi五層網絡協議;
- tcp,udp區別;
- 用過哪些加密算法:對稱加密,非對稱加密算法;
- 說說tcp三次握手,四次揮手;
- cookie和session的區別,分佈式環境怎麼保存用戶狀態;
- git,svn區別;
- 請寫一段棧溢出、堆溢出的代碼;
- ThreadLocal可以用來共享數據嗎;
2. IO
- bio,nio,aio的區別;
- nio框架:dubbo的實現原理;
- 京東內部的jsf是使用的什麼協議通訊:可參見dubbo的協議;
3. 算法
- java中常說的堆和棧,分別是什麼數據結構;另外,爲什麼要分爲堆和棧來存儲數據。
- TreeMap如何插入數據:二叉樹的左旋,右旋,雙旋;
- 一個排序之後的數組,插入數據,可以使用什麼方法?答:二分法;問:時間複雜度是多少?
- 平衡二叉樹的時間複雜度;
- Hash算法和二叉樹算法分別什麼時候用;
- 圖的廣度優先算法和深度優先算法:詳見jvm中垃圾回收實現;
4. 多線程
- 說說阻塞隊列的實現:可以參考ArrayBlockingQueue的底層實現(鎖和同步都行);
- 進程通訊的方式:消息隊列,共享內存,信號量,socket通訊等;
- 用過併發包的哪些類;
- 什麼地方用了多線程;
- Excutors可以產生哪些線程池;
- 爲什麼要用線程池;
- volatile關鍵字的用法:使多線程中的變量可見;
5. 數據庫相關(MySQL)
- MySQL優化經驗:
- MySQL的語句優化,使用什麼工具;
- MySQL的索引分類:B+,hash;什麼情況用什麼索引;
- MySQL的存儲引擎有哪些,區別是什麼;
- 說說事務的特性和隔離級別;
- 悲觀鎖和樂觀鎖的區別,怎麼實現;
6. Mq
- mq的原理是什麼:有點大。。都可以說;
- mq如何保證實時性;
- mq的持久化是怎麼做的;
7. Redis
- redis和memcache的區別;
- 用redis做過什麼;
- redis是如何持久化的:rdb和aof;
- redis集羣如何同步;
- redis的數據添加過程是怎樣的:哈希槽;
- redis的淘汰策略有哪些;
- redis有哪些數據結構;
8. Zookeeper
- zookeeper是什麼;
- zookeeper哪裏用到;
- zookeeper的選主過程;
- zookeeper集羣之間如何通訊;
- 你們的zookeeper的節點加密是用的什麼方式;
- 分佈式鎖的實現過程;
9. Linux
- linux常用的命令有哪些;
- 如何獲取java進程的pid;
- 如何獲取某個進程的網絡端口號;
- 如何實時打印日誌;
- 如何統計某個字符串行數;
五、面試注意點
- 至少定出2天的準備時間
- 一定得再次閱讀公司的職位要求
- 在刷題前,先準備項目描述的說辭
- 一定得準備項目描述裏提到的技術
- 一定得準備亮點話題,並想辦法往這方面繞,而且亮點話題多多益善
- 時間多,再去刷題
- 面試題,通過準備讓面試官感覺你軟實力也行
寫在最後:
冷靜的思維,點亮智慧的殿堂;
抽象的理念,交匯靈感的火花;
平凡的字符,串起別樣的精彩;
細膩的語言,盤活冰冷的程序;
非凡的才華,開啓幸福的天地。