20220331 | 美团 | 后端研发

面试官很有礼貌,面试体验极佳,上来先做了自我介绍,美团优选上海部门,主要做的是营销活动、小游戏的开发

自我介绍

Java

  1. ArrayList和LinkedList区别?

  2. 实现 subList(startIdx, endIdx) 的思路?

  1. arrayCopy将原数组复制到新的数组中
  2. 面试结束后反馈:应该用offset
  1. concurrentHashMap中put具体流程?

分段锁

  1. 红黑树的优势?

  2. concurrentHashMap扩容流程?

  3. AtomInteger如何实现线程安全?

CAS + 版本号

  1. CAS在OS层的实现?

CPU中的一条原子指令:X86下对应的是CMPXCHG汇编指令

  1. synchronized如何在OS层实现?锁优化过程?如何实现可重入?标记重入次数的信息保存位置?

javac在编译成字节码时,会生成对应的monitorenter和monitorexit指令分别对应synchronized同步块的进入和退出 每次进入都需要将计数器+1,退出-1,直到计数器归零表明释放锁 https://blog.csdn.net/javazejian/article/details/72828483

  1. volatile功能?如何实现可见性?

可见性+有序性 可见性:修改后写回主内存,在汇编层面加Lock,使用缓存一致性协议(MESI)解决并发可见性 有序性:内存屏障,在指令间插入一条内存屏障并禁止cpu对Volatile修饰的变量进行重排序 不能保证原子性!

  1. Java线程有哪些状态?
  1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
  2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
  3. 阻塞(BLOCKED):表示线程阻塞于锁。
  4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
  5. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
  6. 终止(TERMINATED):表示该线程已经执行完毕。
  1. 线程池参数?

  2. 工作队列类型?

线程安全

  1. 🚀 Java线程种类?启动后是否可以改成守护线程?

用户线程: 守护线程:

数据库

  1. B+树

  2. 更新时一致性

  3. 缓存雪崩

网络

  1. TCP链接可靠性

  2. OSI七层模型

  3. 网络层 传输层?

  4. HTTP1.0 1.1 2.0 之间的区别?

算法题

  1. 快排找到最大的第K个数

反问

代码有bug,这么简单的题debug半小时都没过,应该是挂了😅

面试结束后看了眼代码,循环里面有个大于号写反了,无语,与美团无缘了,有时候人生就是这么奇妙

全部评论
老哥你收到二面通知了嘛
点赞 回复
分享
发布于 2022-04-01 08:18

相关推荐

点赞 评论 收藏
转发
1 5 评论
分享
牛客网
牛客企业服务