前言
两个月面了美团、滴滴、360、新浪网、完美世界、搜狐六家公司,其中两个公司面的都是Java研发,美团三面面试官说是做外卖机器人(类似无人驾驶车),个人比较感兴趣,如果发offer,就签约美团了。找工作这几个月,自己也看了很多的面经,收藏了一系列的面试资料,为了回馈帮助过或给我带来信心和失落时鼓励的你们,特将美团、滴滴、360、新浪网、完美世界、搜狐的面试经历记录一下。希望取之以桃,报之以李吧。
美团
一面
- hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
- Linux的共享内存如何实现,大概说了一下。
- socket网络编程,说一下TCP的三次握手和四次挥手
- 同步IO和异步IO的区别?
- Java GC机制?GC Roots有哪些?
- 红黑树讲一下,五个特性,插入删除操作,时间复杂度?
- 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
二面
- 自我介绍,主要讲讲做了什么和擅长什么
- 设计模式了解哪些?
- AtomicInteger怎么实现原子修改的?
- ConcurrentHashMap 在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap?
- redis数据结构?
- redis数据淘汰机制?
三面
- mysql实现事务的原理(MVCC)
- MySQL数据主从同步是如何实现的?
- MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
- 如果Redis有1亿个key,使用keys命令是否会影响线上服务?
- Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?
四面
- 遇到最大困难是什么?怎么克服?
- 未来的规划是什么?
- 你想问我什么?
HR面,聊优缺点,聊人生规划,聊学习技巧,聊各种有的没有,问Offer状况。
一面
- 自我介绍
- 介绍一下mysql索引?为什么用B+树?
- 网络IO模型?什么是多路复用IO?select和epoll的差别?select具体过程?
- java类加载机制?双亲委派模型的好处?
- 进程和线程的区别?线程是不是越多越好,为什么?操作系统怎么调度的,调度算法?java中cpu调度是线程还是进程?
- 数据库事务?隔离级别?
- java线程变量怎么实现的?内存模型?
- 手撕代码
- 用数组模拟循环链表
- 堆排序实现
- JAVA并发包组件了解多少
- 线程的一个状态转换图
- HashMap和HashTable以及CocurrentHashMap详细说明
- SpringMVC的整个执行流程
二面
- 自我介绍
- 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?怎么解决分库分表?
- 数据库事务特点?事务隔离级别?项目中的事务实现?脏读、不可重复读、幻读各举个例子?
- Spring bean的生命周期?默认创建的模式是什么?不想单例怎么办?
- 谈谈Kafka和ZooKeeper了解情况?
- 设计模式,单例模式,怎么保证线程安全?锁效率太低,怎么提高效率?CAS?CAS本质是什么?什么是原子性?Compare and Swap,为什么能保证原子性(涉及到CPU指令)?分布式锁?
- 还有什么设计模式?工厂模式有几种,都讲讲?
- 数据库表怎么设计的?数据库范式?设计的过程中需要注意什么?enum类型的值一般怎么存?如果有一个十几位的小数为了不丢失精度怎么存?tinyint几个字节,int几个字节?
三面
- 项目介绍
- Redis简要介绍下,有哪些常用的数据结构?
- Redis是单线程的?Redis为什么查询数据这么快?
- Redis并发竞争key如何来解决?
- 有接触过哪些消息队列中间件?如何来选型?
- 谈谈你的SOA以及微服务的理解?
- 具体谈谈Spring Cloud服务和注册?
- 分布式场景面临的最大挑战是什么?
- 分布式场景数据同步如何来解决?
四面
HR谈人生理想和讲滴滴的业务。
360
一面
差不多三十五分钟左右吧
- 简短自我介绍
- 事务的ACID,其中把事务的隔离性详细解释一遍
- 脏读、幻影读、不可重复读
- 红黑树、二叉树的算法
- 平常用到哪些集合类?ArrayList和LinkedList区别?HashMap内部数据结构?ConcurrentHashMap分段锁?
- jdk1.8中,对hashMap和concurrentHashMap做了哪些优化
- 如何解决hash冲突的,以及如果冲突了,怎么在hash表中找到目标值
- synchronized 和 ReentranLock的区别?
- ThreadLocal?应用场景?
- Java GC机制?GC Roots有哪些?
- MySQL行锁是否会有死锁的情况?
二面
一面过了十多分钟以后,接着就进行二面,都是视频面试,差不多二十分钟左右
- 乐观锁和悲观锁了解吗?JDK中涉及到乐观锁和悲观锁的内容?
- Nginx负载均衡策略?
- Nginx和其他负载均衡框架对比过吗?
- Redis是单线程?
- Redis高并发快的原因?
- 如何利用Redis处理热点数据
- 谈谈Redis哨兵、复制、集群
- 工作中技术优化过哪些?JVM、MySQL、代码等都谈谈
题外话
感觉个人太紧张了,有好多原理性的东西讲着讲着就忘记讲了,面试的时候真的是太紧张了,发挥不太好,平时一定要多总结,不然面试的时候一下子总结地不太好,发挥不出应有的水平。
最后
对于现在流行的一些技术框架,我又掌握得如何了呢?实际上,我是有一个记录学习心得,做学习笔记的习惯,所以我对一些技术也有自己的总结和经验。
(4)面的是什么部门?面试的时候喜欢问什么?
在面试前,事先要清楚自己面试的是什么部门,要做好功课。比如,支付宝、蚂蚁金服这类的事业部,项目多与金融相关,淘宝、拼多多则是电商,这些区别也会影响面试的侧重点。
至于面试官喜欢问什么,则需要依靠平时的刷题来积累了,刷刷题,做到举一反三,对面试还是有很大的帮助的。
写在文末的箴言
读万卷书,行万里路。作为程序员,都说职业生涯到35岁就结束了,实际上大可不必相信这种年龄焦虑,35岁上的程序员也有不少,要不想被市场淘汰,首先你的有价值,你没有了价值,无论是什么职业都被社会淘汰的。
学习,永远不会辜负你,靠学习得到的,永远是你最宝贵的财富。