美团优选Java一二面(已OC)
一面
自我介绍
熟悉Java...项目...
####项目
- 项目都有哪些模块
- 如何分工
- 数据库表是如何设计的
- 各个模块之间如何交互
JUC
- Java都有那些锁,是如何实现的
- syntronized和ReentrantLock的区别
数据库
- 为什么使用B+树
- 为什么使用主从读写分离
redis
- 为什么使用redis而不是用本机内存
- 用redis做了哪些功能
网络
- TCP为什么需要四次挥手
操作系统
- 进程和线程的区别
- 内核态和用户态的区别
- 线程和进程的切换过程
JVM
- 类加载过程
- 双亲委派
算法题
- 树的节点间最大距离
- 逻辑题:岛上有100个人,95个蓝眼人,5个红眼人,这些人都很聪明,有两个规定
- 每个人不能通过任何方式看自己的眼睛的颜色,不能讨论眼睛的颜色
- 如果一个人知道自己是红眼人,就会在当晚自杀
一天一群游客来到岛上,走时告诉他们他们中有红颜人,接下来会发生什么
二面
自我介绍
进程与线程
- 为什么要有线程
- 每种cpu都能使用多线程吗(大概?有点记不清他怎么问了)
并发
- 讲一下AQS
- AQS时如何进行线程同步的
- UNSAFE类又是如何实现同步的
- 线程池涉及哪些类
- 为什么要使用线程池
- 提交一个任务的过程
- 为什么要等阻塞队列满了才去创建额外线程
- 有自己根据AQS实现过并发类吗
项目
- 简单描述一下项目
- 项目是如何分层的
- 数据库表是如何设计的
- 进度如何,用到哪些技术
- 准备如何扩展
数据结构
- 说一下树和栈的区别
- 两者的应用场景
做题
- 用数组实现栈
其他
- 怎么学习的
- 为什么不考研
反问
- 有哪里需要提升
- 几个技术面