面試崗位
Java開發工程師(校招)
筆試 (2021.1009)
算法題
說有一個數組
1,2,3,3,3,2,2
,他的數字最高出現頻率是,讓你找到他的子串中,數字最高出現頻率和他相等的最短子串。
答:統計每個數出現次數、最早出現時間以及最晚出現時間。然后再遍歷一遍即可。說有
n
塊積木,你需要把他們摞起來,摞起來的條件是上下兩塊相鄰的積木質量差不能超過x
,同時你還有k
塊任意重量的積木。問你最少摞成多少堆?
答:先排序,再把所有相鄰兩數差值存進優先隊列,每次彈出最小的,如果≤x
直接忽略,反之嘗試添加過渡積木。最后返回隊列剩余大小 +1 即可。
一面
基礎題
事務
ACID
是什么?
答:原子性,一致性,隔離性和持久性隔離性是什么?
答:事務的隔離性是指在并發環境中,并發的事務是相互隔離的,一個事務的執行不能被其他事務干擾事務的隔離級別有哪些?
答:①讀未提交,有臟讀;②讀已提交,不可重復讀;③可重復讀,有幻讀;④串行化。不可重復讀和幻讀區別?
答:不可重復讀是兩次讀取時數據變化,主要是update
和delete
,可以用行鎖解決;而幻讀更多的是insert
導致的,光用行鎖是解決不了的。通常采用MVCC
等方法來解決。聚簇索引和非聚簇索引有什么區別?
答:聚簇索引將索引和數據同時保存在葉子節點上,這樣每次搜索到對應節點,就可以直接拿到相應數據;非聚簇索引則是數據不直接存在節點上,而是僅主鍵值,查到該節點后,還需要去主鍵查詢一次。死鎖的四個條件
答:① 互斥條件; ② 請求與保持; ③不剝奪; ④ 循環等待條件銀行家算法?
答:試探分配,如果判斷空閑資源足以滿足某個進程所有需求,那就執行該進程,否則取消該次分配。ArrayList
和LinkedList
區別?
答:前者是動態數組,后者基于雙向鏈表。ArrayList
和LinkedList
二者哪個更占空間?
答:通常情況下后者更占空間,因為鏈表需要記錄前后節點指針,但是當ArrayList
恰好擴容時,由于需要擴容到倍,因此可能更占空間。
線程池了解嗎?有哪些主要參數?都大概起什么作用?
答:① 核心線程數;② 任務隊列; ③ 最大線程數; ④存活時間;⑤ 拒絕策略
首先啟動時開①個線程,然后任務放到②中等待執行,②滿后開啟至③個線程,如果有閑置非核心線程,④時間后銷毀,如果②又滿了,且已經開到③個線程,則執行⑤。JVM
結構描述一下,堆里面存什么
答:有共用的堆和方法區,然后有很多線程,線程中包含程序計數器 ,虛擬機棧和本地方法棧。堆里面存對象實例和數組。CMS
和G1
區別?
答:① 前者面向老年代,后者面向老年代和新生代;②G1
停頓時間可預測;③ 標記-清除和標記-整理; ④ 垃圾回收過程不同AOP
和IOC
是啥?
答: 面向切面編程,把一些和核心功能無關的又必不可少重復性高的工作,做成函數,放到核心功能前后,相當于把原有的功能做了一個包裝。
原先我們在某個類中需要另一個類的時候,需要手動new
一個新對象,而控制反轉則是通過Bean
的byType
和byName
之類的方式,將類之間的依賴關系交給Spring
來完成,由他來創造新的對象,并賦予對象之間相互關系。
算法題
沒有算法題
二面
問的全都是學習和項目相關的:
英語水平?
本科和研究生期間哪科成績最好,哪科成績最差?
什么是對抗攻擊?你畢設內容是什么?
項目里為什么引入了
Docker
,好處是啥?
感受
總體而言比較輕松,面試官都非常隨和,問的都不難,筆試也很容易。本來覺得是不是招聘末期刷一下 KPI
,結果頭兩天來了 offer call
。強哥這人行,能處。