前言
两个月面了美团、滴滴、360、新浪网、完美世界、搜狐六家公司,其中两个公司面的都是Java研发,美团三面面试官说是做外卖机器人(类似无人驾驶车),个人比较感兴趣,如果发offer,就签约美团了。找工作这几个月,自己也看了很多的面经,收藏了一系列的面试资料,为了回馈帮助过或给我带来信心和失落时鼓励的你们,特将美团、滴滴、360、新浪网、完美世界、搜狐的面试经历记录一下。希望取之以桃,报之以李吧。另外有需要面试资料的小伙伴们,也可以在文末领取一下!
美团
一面
1.自我介绍和项目。
2.项目里面的数据库如何设计的?
3.varchar的最大长度,超过了用什么?
4.多列索引怎么用?并解释底层原理。
5.左连接、右连接、内连接。
6.说出几种保证线程安全的方法。
7.说出几种保证线程同步的方法。
二面
1.自我介绍和项目。
2.五层网络协议和osi七层网络协议。
3.tcp3次握手和4次挥手,并解释如果3次握手改成两次行不行?
4.编程题,判断链表是否有环,除了快慢指针还有其它做法嘛?
5.编程题:找到链表的中间节点。
6.编程题:给出一个char数组 比如a,b,c每个字符出现的概率给出,如10%,20%,70,写一个算法保证打印10000次字符,这三个字符的出现频率是给出的频率,而且每个字符都是随机打印的,不能连续打印。
7.Mysql的存储引擎。
8.事务的隔离级别,并回答幻读是出现在一次事务操作还是两次?
9.说下你了解的设计模式,并说下单例中的饿汉式和懒汉式的区别和各自的优缺点。
10.场景设计,商品表,一共100件商品,如何保障多用户购买商品时,商品数量不会出现负数,并且保证效率最高。
三面
1.cap了解么?分别指什么?
2.网络编程nio和netty相关,netty的线程模型,零拷贝实现。
3.Redis是单线程还是多线程?Redis的分布式集群怎么做?
4.分布式消息队列有哪些(Kafka等)?有使用过哪些?具体应用在什么场景?
5.负载均衡怎么做的呢,为什么这么做,了解过集群雪崩么?
6.谈谈高并发场景下削峰,限流的实现?
四面
HR面,聊优缺点,聊人生规划,聊学习技巧,聊各种有的没有,问Offer状况。
滴滴
一面
1.自我介绍,讲自己的实习经历和做的项目。
2.写道题,判断一个字符串是否为回文字符串(送分题)。
3.给出一张表,对应该表,问了两个问题,写sql语句(一个学生表,一个成绩表,查询某人的总成绩,更改某人成绩)。
4.写出你Linux常用的一些命令,然后问给一个文件,统计包含a,b,c的文件行数,如何查询扩展名为.abc的所有文件?
5.场景设计题,滴滴打车发红包,许多用户抢,如何保证一个红包被一个用户抢到后不被其他用户抢?
6.给你一支圆珠笔,测试它是否符合生产条件?
7.用没用过redis,说下redis的好处和数据类型?
8.设计模式了解嘛,说下单例模式,并手写一个线程安全的单例。
9.重载和重写的区别。
10.java的多态体现在哪里?
二面
1.自我介绍和项目,对应项目问了n元文法模型,然后手写公式。
2.Redis的持久化操作。
3.如何利用redis处理热点数据?
4.TCP三次握手的过程,如果没有第三次握手有什么问题。
5.分布式锁怎么实现?
6.说下常用的排序算法,写下归并排序。
7.手推归并排序的时间复杂度。
8.说下java的反射机制,并解释为什么java有反射而c++没有,还有反射的应用场景。
9.为什么要双机房容灾备份,什么时候会整个集群都挂掉?
10.Kafka 用吗,你们用kafka来干嘛的,kafka怎么保证消息不丢失的?
11.如果10倍流量来了,你们redis扛得住吗?
12.为什么要双机房?
13.死锁遇到过吗,讲一下?
14.多线程了解吗, 说一下synchronized跟reentrentLock的区别?
15.写消费者生产者模型。
三面
1.什么时候多线程会发生死锁,写一个例子?
2.说一说jdk1.8中,对hashMap的优化,对concurrentHashMap的优化?
3.如何解决hash冲突的,以及如果冲突了,怎么在hash表中找到目标值?
4.有1000个数据存在hashmap中,实际的数量是多少,考虑负载因子和扩容?
5.常见的RPC有哪些?对应的区别和性能比较?
6.操作系统的用户态和核心态切换条件以及为什么要切换?
7.线程间的通信方式,异步队列,消息延迟获取?
8.Tcp知道不?
9.Http的header有哪些?
10.浮点数求立方根。
四面
HR谈人生理想和讲滴滴的业务。
360
一面
差不多三十五分钟左右吧
1.介绍你做过的项目。
2.手写单例模式。
3.布局优化。
4.有没有用过什么开源框架?
5.ImagLoader的实现原理。
6.OnTouchEvent事件中 down事件 和up事件的传递。
7.hashMap的实现原理。
8.LinkedHashMap的实现原理。
9.内存管理及优化。
10.点九图。
二面
一面过了十多分钟以后,接着就进行二面,都是视频面试,差不多二十分钟左右
1.AsyncTak的原理及常用方法。
2.APK从安装到启动的过程。
3.平时是怎样学习的?
4.学习和实习是在怎样协调的?
5.有360手机助手有什么想了解的吗?
题外话
感觉个人太紧张了,有好多原理性的东西讲着讲着就忘记讲了,面试的时候真的是太紧张了,发挥不太好,平时一定要多总结,不然面试的时候一下子总结地不太好,发挥不出应有的水平。
新浪
一面
1.先问自我介绍,说一下你认为的团队合作?
2.用过Linux系统吗?常用指令(我说不太了解,就没问)
3.说一下虚拟内存?
4.介绍一下hashmap?
5.hashmap和hashtable的区别?
6.算法题:10万行数据,每一行都是一个int类型的数,按数字出现的频次取出现次数最高的10个数
7.输入是一个整形数组,输出:数字+频次
8.思路:可以自己定义一个类,里面key为出现的数字,value为出现的频次
9.然后新建一个容量为10的小顶堆,按照value进行排序。
10.我是用hashmap统计的,然后再对value用小顶堆(priorityqueue)排序,需要把value和key绑定。如果下一个的value小于堆顶则丢弃,大于堆顶则插入。
二面
1.自我介绍;
2.介绍项目;
3.KVM和XEN虚拟化的区别
4.如何用JAVA生成永远的ID:UUID(Universally Unique Identifier)
5.树的遍历,并非二叉树的遍历
6.堆排序的问题
7.多线程轮流执行用什么锁??
8.AOP的底层原理(动态代理,GClib)
9.Object类的方法
10.循环依赖如何解决,自己设计几种算法
11.快速排序原理,随机快排口述
12.iptable实现反向代理
三面
1.首先问了我发表的论文具体的内容是什么?
2.虚拟内存知道么?什么时候使用虚拟内存?虚拟内存除了扩大内存还有什么用?
3.Spring的上下文切换,如何优化上下文优化来做到减少系统资源消耗?
4.函数调用约定了解么?Function calling convention。
5.进程线程的区别,除了包含关系之外的一些区别,底层详细信息。
6.TCP/UDP 全部内容:三次握手、四次挥手、为什么不能两次,为什么三次,TCP的可靠是怎么实现的,滑动窗口,为什么是2MSL?
7.边缘网关协议了解么?简单描述一下
8.Docker容器相关。
9.高并发接触过么(没有,都是用户量小,业务驱动技术,并不是产品驱动技术)
10.最后一个就是sql语句的考察,然后各种变换情况,表连接什么的,我以为写错了,结果面试官说都对~
完美世界
一面
1.自我介绍。
2.讲一下HashMap,HashMap和Concurrent HashMap有什么区别,HashMap的Key可以为Null吗?Concurrent HashMap呢?
3.知道异常吗,将你知道的异常写出来(这个我把异常的整个体系画出来了,然后我自觉的将Error和Exception区别讲了一下),说说常见的Runtime Exception。
4.了解并发编程是吧(因为我简历上写了了解Java并发编程),讲讲Synchronized和Lock(这个我就将用法和注意事项和性能的区别一一讲述),Synchronized修饰普通方法和修饰静态方法有什么区别,然后面试官给我写了两个情景让我讲程序运行情况。
5.讲讲GC机制,知道担保机制吗?
6.Java中阻塞线程的方法有哪些?(刚开始紧张说成中断有哪几种了,然后面试官提醒我说他没问这个)
7.平时数据库用的是什么?讲讲Mysql的存储引擎。写几个SQL语句。
二面
1.会用线程池吗?知道数据库连接池吗?如果让你写一个你怎么写?(现场写喔,但是我当时不知道怎么想的,以为面试官让我写线程池,我就写了半天线程池,然后面试官等不及了就看我写的我还一本正经的给讲线程池,然后就很尴尬的进入下一题了哈哈哈哈)
2.知道Https吗?写一下详细连接过程。
HR面
主要是问如何做的项目和平时生活学习状态,讲了一下薪酬和培训机制,感觉完美的人都蛮好的~
总裁面
总裁很有气场!进去就直接问项目里的东西,讲了一些项目里用到的技术,问平时怎么学习,看什么书,在项目里都干了什么。然后就差不多了,感觉总裁特别特别忙,问我有什么问题,我就说没有了,然后就结束啦。
搜狐
一面
1.自我介绍。
2.你用到了LDA,那么请讲一下LDA的原理是什么?我简单说了一下LDA生成文档的过程,但是根据什么生成没答上来2333(LDA是我的痛,看了几遍没看懂)
3.也就是说你的计算是现场算的么?是的,我知道这样效率有问题,我的系统中没有解决,但是可以先对新闻进行聚类,然后对每个簇提出一个模型,先匹配簇在选择新闻(SCENE 论文中的方法)
4.你的数据量有多大?3万多条新闻,100个用户吧。
5.你的用户较少,那么在推荐的时候矩阵一定是稀疏的,对于这个稀疏矩阵应该如何处理?可以用PCA或者SVD进行矩阵分解
6.你的关键字是如何从文档中提取出来的?使用了中科院的NLPIR+TF-IDF算法。
7.讲一讲tf-idf是什么意思,TF就是表示词频,IDF是逆文档频率的意思计算方法为log(N/n),N新闻集的大小,n为包含这个词的新闻的数量。
8.你系统使用什么语言实现的?
9.你的新闻的备选集如何获取?选取当天新闻,挨个算一遍。
二面
1.你的项目部署在哪里?
2.讲一下项目
3.把项目中的主要数据库表怎么设计的写一下它的结构
4.用户表密码是怎么存储的?(回答MD5)你知道还有别的加密方式吗?
5.写SQL,根据设计的表进行多表查询(写了一个嵌套查询,又让写join查询)
6.索引该怎么建?针对你设计的表每个字段,需不需要建立索引?
7.建索引的原则是什么?
8.你主要用了SpringBoot的哪些功能?
三面
1.你做的项目,哪些是对你来说无论是技术成长还是难度上是比较挑战,你项目遇到什么挑战怎么解决的?
2.你的项目具备什么样的能力,主要是解决什么样的问题?
3.项目的一些问题,做了多久?你每天都会做吗,还是会做一些学习上的事情?
4.做完之后有请周围的人或者朋友来感受一下吗?
5.算法题:
输入一个整数,判断是否是自除数
输入一个字符串,只考虑数字和字母,忽略字母大小写,验证是否为回文串?
6.代码中为什么用StringBuilder,不用StringBuffer?
7.你有看过Java怎么实现equals和hashcode吗?
8.好了,那么你觉着你自己都有哪些优点呢?
最后
所有的面试题目都不是一成不变的,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。