Java開發 2019秋招 面經整理
阿新 • • 發佈:2018-12-04
從7月底開始,到10月中旬獲得offer
進入面試流程的包括位元組跳動、招銀科技、百度、Keep、華為、花旗、京東、有贊、去哪兒、拼多多、okcoin,收到的offer有華為、招銀、有贊、去哪兒,其他有一面涼、二面涼以及HR面涼等等。
面試中遇到的問題整理如下,僅供參考
計算機網路
- TCP、UDP在哪一層?它們之間有什麼差別,哪一個傳輸效率更高,為什麼?分別用於什麼場景?
- HTTP和HTTPS的差別,在哪一層?HTTPS怎麼保證安全,伺服器怎麼把證書給客戶端?
- 計算機網路五層結構每層做什麼,分別介紹一下
- IPV4和IPV6區別
- 網路層資料包的頭部有哪些
- TCP中的timewait
- TCP三次握手,四次揮手流程,其中的狀態
- TCP過期時間
- TCP頭部有哪些
- IP報文頭部資訊
- HTTPS的證書在哪裡下載
- 在瀏覽器中輸入www.xxx.com的過程
- POST和GET的區別
- HTTP狀態碼500的含義,其他狀態碼瞭解麼
- HTTP怎麼建立長連線
- TCP read函式
- 怎麼建立程序
- TCP包大小
- UDP,1兆大小的資料可以直接傳輸麼
- IP包大小
- HTTP1.1和HTTP2的特點
- TCP怎麼保持可靠的
作業系統
- 程序和執行緒的差別
- 執行緒可以用到程序的哪些資源
- 程序的哪些資源可以被執行緒共享
- 作業系統會分配給程序哪些資源
- 死鎖產生的原因,怎麼預防
- 程序的幾個狀態
- Linux中程序間通訊的機制,更詳細說明一下
- 作業系統用於解決什麼問題
資料庫
- 聚簇索引和非聚簇索引
- MySQL的索引原理
- B+樹和B樹的區別
- B樹在什麼場景下用
- 內連線和外連線的區別
- 資料庫建立索引在哪些欄位建立
- 事務的基本特性,詳細解釋一下
- 介紹一下索引,索引的優點缺點,為什麼加了索引之後新增、更新、刪除會變慢?如果更新非索引欄位,速度會受到影響麼?
- MySQL主從複製怎麼做的
Java基礎
- HashMap和HashTable的區別
- HashMap是怎麼實現的
- HashTable底層是怎麼實現執行緒安全的
- Java中的型別轉換,什麼情況顯示轉換,什麼情況隱式轉換
- 泛型的好處
- 建立執行緒的幾種方式,常用哪種
- 執行緒的幾個狀態,什麼情況下會到那些狀態
- run()和start()的區別
- sleep()和wait()的區別
- 垃圾回收的機制,優缺點分析
- Java中的基本型別和引用型別,基本型別和引用型別在記憶體分配中的區別
- ==和equals()的區別
- StringBuilder和StringBuffer的區別
- Synchronized和Lock那個快
- Java基本型別,基本資料結構
- String和StringBuilder
- Session和Cookie的區別
- 多執行緒訪問會產生的問題
- 樂觀鎖和悲觀鎖的實現機制
- Java的GC機制,停止複製演算法用在什麼場景下
- Java中的閉包什麼意思
- 怎麼把byte轉string
- 怎麼加鎖
- volatile關鍵字解釋一下
- int轉byte詳細說明
- 跨平臺怎麼轉
- 原子性操作
- 32為虛擬機器和64位虛擬機器中int的範圍有什麼不同
- 兩個物件不同,有沒有可能有相同的hashcode,兩個物件相同,會不會有不同的hashcode
- a=a+b和a+=b的區別
- i++會不會有執行緒安全問題
- int+float最後什麼型別
- 3*0.1==0.3成立麼,為什麼
- public、protected和private的區別
- Java中有哪些異常型別
- final 修飾方法的含義
- try catch return finally的執行順序
- Set中的內容可以重複麼
- 怎麼跳出while迴圈
- Java的類載入器
- 類載入器載入一個類的過程有哪些
- 新建一個物件時怎麼分配記憶體
- HashMap為什麼在資料較多時用紅黑樹而不是連結串列
- 快排和堆排序,什麼情況下用快排,陣列比較有序的情況下用什麼排序
- 程式執行慢,怎麼排查
- 紅黑樹的特點
- 陣列和連結串列的區別,刪除陣列的最後一位和刪除連結串列的最後一位哪個更快,為什麼?
- Synchronized是怎麼實現的
- 餓漢單例模式是執行緒安全的麼,怎麼實現的
- HashMap的key要求,類可以作為key麼
- Java怎麼儲存小數點後1000位的小數
- 怎麼實現快取,應該使用什麼資料結構
- 為什麼有自旋鎖
- 執行緒越多越好麼,為什麼
- IO多路複用
- HashMap內部某個位置節點數目多了為什麼用紅黑樹,為什麼不用二叉搜尋樹
Python
- 生成器和迭代器
- Python的程序、執行緒、協程
Redis
- MySQL和redis的區別
- Redis的持久化
- RDB怎麼不影響主程序的
- Redis和MongoDB的區別
- 瞭解Redis的儲存機制麼
軟體工程
- 軟體工程的幾個階段
- 面向物件特徵,分別解釋,重點是多型性
- 介面和類的區別
- 構造方法和一般方法的區別
手寫程式碼
- 兩個連結串列求交叉節點
- 給定長度為n的陣列,給定k,求出其中出現次數大於n/k的
- 手寫兩個執行緒,一個傳送訊息,一個接收訊息
- 給定字串,找出第一個只出現一次的字元
- 手寫單例模式
- 傳入一個數組,把陣列中的元素轉為單鏈表
- 反轉單鏈表
- 傳入一個數組,如果一個元素為0,則對應行和列都置位0
- 最大連續子陣列和
- 找出出現次數大於陣列長度一半的數字
- m行n列,從左上角到右下角有多少種走法
- 求兩個字串的最長公共子字串
- 氣泡排序以及斐波那契的遞迴版本
- 快排
- 實現一個棧,有push和pop方法,還有可以獲取最小值O(1)
-
兩個字串a 和 b ,判斷下b 是不是 a 打亂順序後的結果。比如 a 是 113 ,b是 311 ,那麼b是a打亂後的結果。寫個方法,引數是2個字串,如果滿足條件返回ture,否則返回false
手寫SQL語句:
-
表 名: t ,欄位 :姓名 課程 分數 。寫sql 語句,找出平均分大於80分的課程。
場景
- 分散式資料庫,需要從多個數據庫讀取資料並整合,怎麼實現
- 100G的一個檔案,每一行都是Long型別的資料,然後系統記憶體1G,怎麼進行排序,需要多少次IO操作,怎麼可以減少IO操作次數
其他
- js和C#、Java這些語言的區別
- C#和Java的區別
- C#、Java和C、C++的區別
- C# 和Java中的值傳遞和引用傳遞的區別
- C# 索引器
- C#委託
- 怎麼儲存使用者狀態
- c#中的垃圾回收和java的垃圾回收
- 前端怎麼跨域
- 前端行縮排怎麼做,怎麼獲取另一個函式中的區域性變數,閉包用於那些情況
- 快排最壞情況複雜度
- 堆排序 調整堆的複雜度
- HTML5瞭解哪些
- JQuery中的Ajax內部怎麼實現的
- Ajax跨域怎麼做
- 講一下線性迴歸
- CNN是用於做什麼的
- 你看了哪些書
- 深度學習瞭解哪些,跟上面那個問題相關
Linux這塊也需要了解,但是我自己瞭解的比較少,emmmmm