贝壳秋招面经(完结)


贝壳秋招面经(完结)
同学 1
一面 14:37(34min)
详细答案:https://mp.weixin.qq.com/s/aQyflChyLH72o_6XzduwPg
• 自我介绍
• 项目
• ThreadLocal,使用场景,原理
• ArrayList,讲讲其他的 List
• ArrayList 线程安全版本的容器
• HashMap 原理
• ConcurrentHashMap 原理
• Spring 用了什么设计模式
• bean 生命周期
• bean 是单例还是多例的,具体怎么修改
• 为什么用 b+树不用 b 树
• 联合索引 (a, b),where a = 1 和 where b = 1,效果是一样的吗
• 事务 ACID
• 慢查询怎么分析
• explain 分析后, type 的执行效率等级,达到什么级别比较合适
• 设计一个秒杀场景
• 消息队列
• 手撕:3 个线程交替打印 1-100(伪代码就可以)
– 怎么让 main 线程等待这 3 个线程执行完再执行
答案
可以使用 synchronized 和 wait/notify 来控制线程交替执行。同时,可以使用
Thread.join() 方法来让 main 线程等待这 3 个线程完成。
三个线程交替打印:
PrintTask 实现了 Runnable 接口,定义了线程执行的任务逻辑。
每个线程有一个唯一的 threadId,用来控制轮次(0、1、2)。
通过 number % 3 == threadId 判断是否是当前线程的轮次。如果是,则打印并递增
number,然后调用 notifyAll() 唤醒其他线程。
如果不是当前线程的轮次,调用 wait() 进入等待状态,等待其他线程唤醒。
让 main 线程等待 3 个线程完成:使用 Thread.join() 方法让 main 线程等待 t1、t2 和 t3 执
行完毕后再继续执行。
• go 在什么场景下使用
• 反问
一面比较基础,面完 10 分钟发了二面邮件。
二面 15:49(28min)
• 自我介绍
• 实习项目
• NIO
• select、poll、epoll
• SpringBoot 和 Spring 区别
• AOP 实现方式
• JDK 动态代理,不实现接口就不能做代理了吗,为什么
• bean 生命周期
• 看过 Spring 和 SpringBoot 的源码吗
• Spring 循环依赖
• MyBatis 传参有哪几种方式,有什么区别
• 手撕:单例模式
• 设计原则
• Java 为什么不可以多继承
• MySQL 表里有 5 亿的数据,分页查询怎么实现
• 在地图上有一些点,我想用一个圆框柱这些点,怎么让这个圆 圈住更多的点?
• 微服务优缺点
• 你现在有面试其他公司吗?面到第几轮?
• csdn 的文章都是自己写的吗
• 反问
二面问的比较有深度,面完 5 分钟发了 HR 面邮件。
HR 面 16:44(13min)
• 自我介绍
• 上一段实习主语言是 go,为什么不投我们这边 go 的岗位
• 对互联网岗位的意向,原因
• 职业规划
• 期望工作城市
• 和一二面面试官聊的怎么样
• 对贝壳了解吗
• 可以提前实习吗
• 之前实习加班多吗
• 别的公司面试情况怎么样
• 选择 offer 会看哪几方面