广州百田 百奥面经

2020届春招百奥面经

  • 笔试
    • 1. 打印质数
    • 2. 将数组的 0 ~ k-1 位,与 k ~ n-1 换位置
    • 3. 场景题
  • 一面
  • 二面
  • 三面(CTO)
  • 四面(HR)

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

你可能感兴趣的:(面经,java,面试,百奥)