廣州百田 百奧面經

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章