java崗,已拿 offer 做個記錄:線上筆試 + 4 面
筆試
三道筆試題,難度適中。
1. 打印質數
/**
* 打印質數
* @param n
*/
public static void printPrimeNumber(int n) {
if (n >= 2) {
System.out.println(2);
}
for (int i=3; i<=n; i+=2) { // 質數除了 2 其餘都是奇數,故從 3 開始,步長爲2
boolean isPrime = true;
for (int j=3; j<i; j++) {
if(i%j==0){
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
}
2. 將數組的 0 ~ k-1 位,與 k ~ n-1 換位置
/**
* 將數組的 0~k-1 位,與 k~n-1 換位置
* 這裏使用 三次反轉 可得到答案
*/
public static void transArray(int[] a, int k, int n) {
reverse(a, 0, k-1);
reverse(a, k, n-1);
reverse(a, 0, n-1);
}
public static void reverse(int[] a, int i, int j) {
int temp;
while (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
3. 場景題
/**
* 有個一維空間,x,y是點,操作序列(1,x,y)表示在x,y之間畫線,
* (2,x,y)表示在x,y之間擦除線,經過多個這樣的操作後,有多少條線
*/
class Line{
// 用成員數組來表示數軸
int[] arr;
// 操作
public void doLine(int type, int x, int y) {
if (y > arr.length) {
// 數組不夠長則擴容
arr = Arrays.copyOf(arr, y);
}
switch (type) {
case 1: paint(x, y);break;
case 2: erase(x, y);break;
default: break;
}
}
// 畫線
public void paint(int x, int y) {
while (x < y) {
arr[x] = 1;
x++;
}
}
// 擦線
public void erase(int x, int y) {
while (x < y) {
arr[x] = 0;
x++;
}
}
// 計算線段數
public int count() {
int sum = 0;
int flag = 0;
for (int i : arr) {
if (flag != i) {
if (i == 1) {
sum++;
}
flag = i;
}
}
return sum;
}
public static void main(String[] args) {
Line line = new Line();
line.doLine(1,1,8);
}
}
一面
面試是使用牛客的面試系統,面試完後當天或者隔天會給回覆(通常是晚上6點~9點),然後電話邀約下一場面試;
下一場面試會在隔週,等的時間有點長,但是都會有回覆(有回覆好評)
- 由項目入手,根據項目問實現細節
- 多態的理解,靜態多態和動態多態的字節碼層面的原理,調用類靜態方法在 jvm 層面的過程
- synchronized 與 aqs的區別
- mysql 索引 聯合索引 最左匹配
- 說一下聚集索引的實現,b+ 樹,一個結點的大小
- mysql 的 mvcc 隔離級別
- 有沒有看過 redis C語言的源碼?說一下 redis 十字鏈表 跳躍表
- 項目用什麼接口管理軟件?postman 是怎麼管理接口的?
- 項目如果要修改接口怎麼做?例如加一個參數,或者刪除一個參數
二面
- 項目中的數據是如何存儲的
- jvm 運行時期的內存結構
- 多線程統計 1w 個文件裏面單詞出現次數最多的那個
- 用數組實現棧,並且實現一個方法求棧中最大值,要求 O(1),且壓棧、出棧也是 O(1)
- 寫一個單例(我寫了靜態內部類那個)
- 模擬商品搶購,用基礎的線程模擬併發(線程安全問題)
三面(CTO)
CTO直接開問,和他聊天有點像和我實驗室導師聊天的感覺,和藹可親,一半技術一半學習態度吧,問得不是很深
- 說說《數據結構與算法》這門課,在項目中哪些地方使用到?(我答了常用的數組、鏈表、hashmap,和一些 jdk 源碼裏面用到的地方,故意提了一下紅黑樹,但是他沒細問下去)
- 覺得大學裏面學習的課程有沒有用?專業課程和非專業課程(非專業的我選了市場營銷的選修課舉例)
- 在學校裏面做過什麼學生幹部,對你的技術成長有幫助嗎?(懷疑 CTO 是不是大學老師?)
後面就是聊一些實驗室裏面的項目、成長、實驗室負責人的日常工作。
四面(HR)
三面完之後當天,晚上 7 點多 HR 打電話過來說開始最後一面,微信視頻面,hr 說電腦好像有什麼問題,然後添加微信進行面試。
- 簡單介紹大學生活
- 爲什麼應聘百奧
- 對遊戲行業的想法
- 對應聘的這個崗位,說說自己的三個優點
hr 面完後隔週有 oc,然後發 offer