秋招java研发七连跪面经
秋招投了快三十家内推,也算是陆陆续续收到几家面试通知,每一次面完都怀疑了一下自己的水平,不过面完之后总结了一下没答出来的地方,回去学习了之后也算是对自己有所提高,而且上一次不会的问题下一次很有可能再次问到,所以大家还是一定要好好总结。PS:项目相关的问题就不写了。
金山云(8.9)
一面40min:
1.画一下集合类的框架,讲一下内部的区别
2.Redis的几种数据类型,说一下用过哪些,讲一下原理
3.spring用过哪些bean
4.线程池讲一下那四种的区别
5.拦截器讲一下
6.手写快排
7.synchronized和ReentranLock的区别
8.gc分代
9.用过哪些设计模式(答:单例,工厂。。。)
会写几种单例(答:双重判断,内部静态类)
让我手写了内部静态类。
二面40min:
1.讲一下spring的启动流程
2.Tomcat同时部署多个的时候端口怎么配置
3.TCP、UDP在那一层,又问了点协议的问题
4.最近在看什么书,都怎么学习的,将来的规划
5.代码都部署在哪,会写git么
6.最近做的项目是哪个,讲一下设计
7.NIO讲一下
8.TCP三次握手
9.问了我几个工具,我都没听过,也不记得了,然后就开始和我谈别的了
10.三面今天参加个什么会议去了,今天应该回不来了,你等消息把。然后HR和我说有下一轮的话三到五天内会通知,然后已经过了一周了,被花式劝退。。。
金山云感觉问的水平不是很高,都没有深入问,有时候想多讲一下就直接被问下一个了,二面答的不太好,第一次现场面试,还是发挥的不太好,被劝退感觉还是挺正常的
二战金山云(这次换了个部门投校招,直接第二天打电话让我去面试了)
一面(40min,面试官前半段一直在问一些基础的不行的问题,一副生无可恋的样子,我也不知道回答过多少次这些问题了。。。)
1.自我介绍,然后讲了下项目的难点,项目里消息队列持久化的设置
2.hashmap,直接和hashtable、CHM一起讲,然后问我CHM的锁机制
3.synchronized和reetrantlock,讲了公平锁、非公平锁,锁优化一大堆,知道的全说了
4.类加载机制,然后问我一个系统里调用了两个不同包里的同名类,会加载哪个类
5.线程池相关
6.10G URL文件,限定40m内存,如何取出出现次数最大的十个URL。。。开始说先用过滤器计数,再堆排,他说极端情况内存肯定不够,当时也没答出分片,然后就不问了
二面(20min)
就两道代码题
1.一个普通的二叉树,给一个数,求这个数字在第几层
我就分层遍历,然后查找,再注意几种极端情况就好了
2.一个数组,求第K大的数字,不能修改数组,辅助空间为O(1)
就设置了两个数字,求最大,第二大。。。第K大,不断更新,然后有重复的数字就计数,再更新
然后让我等人力通知,也没直接带我见HR,不过感觉金山云还是挺水的,不知道这次是不是花式劝退
京东(8.14)
京东是很早之前就投了的,然后突然打电话给我,自报家门之后问我现在可以电话面试么,我赶紧说可以(估计是被捞起来了,随便面一下)
一面 电话30min
1.讲一下集合类(从Collection开始讲了一遍)
2.如何用两个栈实现一个对列
3.hashmap底层实现(答:用hashtable和concurrenhashmap对比着讲了一下)
4.AOP和IOC讲一下
5.JVM的内存区域
6.innodb和MyISAM的区别
7.项目里的异步队列怎么实现的
8.线程有几种状态
如何改变状态
9.等消息
老虎证券(8.15)
一面 90min
1.讲一下这个项目的技术原理图,说一下设计
2.JVM内存区域和gc分代机制
full gc的发生有哪几种情况(答:老年代空间不足,minor gc进入老年代的对象大于剩余空间;
另外几种当时没上来,其实想一想应该是知道的,大对象直接进入老年代时老年代空间不足;
统计得到的Minor GC晋升对象的平均大小大于老年代的剩余空间,老年代无法担保;System.gc()等)
你项目用的是哪种垃圾收集器
3.手写一个链表翻转
4.手撕代码
给一个字符串和一个char数组,找字符串中头尾都是char数组中元素的最短子串
栗子:“ascjkjsdf”,{c,f}
return “cjkjsdf”;
然后我写了个复杂度O(n*m)的,他觉得我复杂度有点太高,我也一下子没想到怎么优化到n+m
这题应该是把char数组里东西存到hashmap里,直接用contain比较就是O(1)了,总复杂度就是O(N)
5.线程池中几个参数的意义
newFixThreadPool里面参数配置,里面用是哪种阻塞队列 (答:LinkedBlockingQueue)
那如果添加的海量的任务LinkedBlockingQueue会满么
6.redis集成(答:不会。。。)
7.automatic怎么实现的(答:通过CAS操作进行比较然后交换)
那CAS再往下一层是怎么实现的呢(答:CAS是通常jni调C 实现的,再底层就是CPU层面了)
他说中间还有一部分(当时没答上来,应该是问我unsafe的原理)
8.ReentranLock和synchronized的区别(我重点讲了下synchronized,然后讲了下锁优化)
偏向锁和轻型锁是怎么上锁和释放的
9.手写一个阻塞队列的订阅和出版模式
如果队列满了怎么办(答:让线程sleep一段时间,面试官觉得sleep时间不好设置;
我又说建一个等待队列,面试官那等待队列也满了呢;
我说那就用wait和notify,面试官说这个还行,就不问了,但后来想想应该是想让我用Semaphore来控制任务的提交把
)
)
10.ThreadLocal底层实现(答:底层就是个Map结构)
那这个map属于哪个类
11.innodb和MyISAM的对比
引擎都用什么索引(B+tree,hash)
这两个都是用B+tree,但是他们的B+tree有什么区别
12.volatile的用处(答:保证可见性,禁止重排序)
字节码重排序讲一下
13.拦截器讲一下
14.jstat、jstack了解么
15.之前有实习经验么(答:没有,感觉被嫌弃了,可能创业公司比较重视有经验的把)
然后回去等消息,一天没消息就是拒了,一天过去了,猝。。。
美团(8.22)
总感觉我面了个假美团,和别人的面经完全不一样
一面(40min)
全程怼项目,你这里考虑到什么什么了么,你这里考虑什么什么了么,你这只是用了一下啊,有了解底层么,我是是是我回去研究,还被嘲讽没实习,自己做的项目和业界相差很多。
基础部分就问了个int和Integer的区别,然后又问了句hashmap、hashtable,StringBuilde、StringBuffer的区别,我说了线程安全和非线程安全,他就自己接了句太基础了,这些都没什么好问的。
二面(40min)
1.springboot里controller里都用了哪些注解,Dao层用了哪些注解,mybatis$和#什么区别
2.集合类用了哪些,讲一下ArrayList和linkedlist的区别
3.hashmap的put操作怎么实现的,和hashtable,chm一起讲了一下,讲了多线程并发map会怎么样
4.线程池,***和fix的参数如何设置,大量任务并发提交会怎么样,如何保证同步
5.手写sql语句
6.shell语句,删除文件夹内全部文件怎么写,一个字符串去掉第一个字符怎么写
7.volatile怎么用的,如何实现的
8.500错误和404错误什么意思
9.垃圾回收讲一下,如何判断对象已死
10.线程T1,T2让T1执行完之后再执行T2怎么实现,我先说用volatile设置一个判断符,T1执行完后改变状态,T2再执行;然后又说用信号量,设为1,T1先acquire;接着问,我就说用wait和notify;还不是他想要的答案,我就说设一个obj,用synchronized锁住对象,设两个同步块,让他们轮流执行,他看我想不出来了,就不问了,我也不知道到底想要那种办法。
11.开始吹逼,最近看什么书,系统出现错误都怎么解决的,如果领导给的方案你觉得有更好的解决办***怎么办巴拉巴拉,顺势疯狂跪舔了一波美团,等消息。(让我等消息的从来没有给过我消息,基本凉凉)
360(8.23)
选了个儿童事业部,看到有java岗,觉得这是个新部门HC会比较多,结果过去了发现他们后台是PHP和go,业务是儿童智能手表,基本都是IOT,和java没啥关系,商业欺骗啊!
一面(30min)(PS:这个面试官说自己也是java出身的,来这转的PHP,倒是问了一些java)
1.线程和进程的区别
2.进程之间的通信
3.TCP、UDP的区别
4.顺势问了三次握手
5.GC
6.类加载机制
7.手写快排
8.HTTPS
9.redis都用了哪些数据结构,都用什么场景
二面(30min)
1.斐波那契数列,求f(n)
这里自己蠢了,写了个dp数组,被怼了n太大内存溢出,唉,直接写两个指针就完事
2.问了一堆网络,没怎么答上来,具体也忘了
3.安卓里面的内存泄漏,我说没做过app(简历里写了个安卓加固)
4.然后就不问技术了,开始谈平时怎么学习什么什么的
5.diss我基础不好,把我挂了。。。
(以后一定要先看看事业群的业务,网络这块确实基础不好,主要准备java这边的基础了,虽然最大的原因还是自己水平不行,还是多准备准备再去面下一家把)
keep(8.30)
一面(40min)
1.手写代码,n个数中找到长度为m的和值最大的子串
2.讲下快排思想,归并思想,为什么复杂度是O(NlogN)
3.https原理
4.微博里的用户表应该怎么设计
5.n个ip地址,如何判断另外m个ip地址是否在其中
6.cookie是做什么用的
7.一个用户数组,根据性别进行排序,未知、男、女,如何实现,手写函数
二面(40min)
全程项目,问了一下线程池 ,项目被指出好多问题,然后猝
猫眼娱乐
一面 40分钟
1.hashmap、hashtable原理,1.7,1.8的区别
2.重入锁和synchronized的区别
3.cas
4.jvm内存分区,CMS垃圾收集器
5.volatitle、happen-before
6.线程池
7.类加载机制和双亲委派模型
8.@SpringBootApplication
9.redis是单线程还是多线程,分布式锁
10.不用乘法实现乘法
11.数组的最大连续子串和(这题我用的剑指offer的第一个解法,结果这个面试官非说我这么直接遍历一遍不对,最后临走和我说让我回去再看看,我还中间特地再看了一眼剑指offer,明明就是没有问题)
二面 40分钟(中间还等了半小时,等二面开会)
1.上来问我Linux了解么,我说一般本地写完了放在上面部署,不是特别了解,然后怼了一堆Linux操作系统,没答上几个
2.http发送的包里面有什么,TCP/IP五层结构,如果网络情况不好,三次握手怎么保证认证
网络不好这个第二次被问了,自己记一下找到的答案(CS通信,阻塞的时间很长,超出了咱们设定超时重发时间,那么C就会认为这个消息丢失了,然后重新发送。当C和S通信完成后,这个之前被C认为”失效的消息“到达了S,而对于S而言,以为这是一个新的请求连接消息,就向C发了一次ack(表示S又收到了一次的确认消息了),而对于C而言,他认为他没有给S再次的发消息(因为上次的通话已经结束了),所以C不会理睬这条确认,所以S只有收到C的第三次握手才会建立链接,如果没有收到C端的ack,Linux下默认会进行5次重发SYN-ACK包,失败则关闭链接,不再占用资源,也可修改重发次数,不重发直接发送RST报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。)
3.一个字符串找里面是否有重复的字符
4.快排的思想,为什么是O(N),每次的基准选择哪个
5.java的线程和操作系统的线程什么关系
6.优先级队列,如何处理
7.一个西瓜切九刀最多切多少块。。。答案是130,有个公式,反正我当时没答出来
8.having和where的区别
9.写了个分层打印二叉树,用队列实现,写的有几个小bug,提醒了就修改了
然后问我有什么问题,我说我操作系统是不是不太好,他说别问面试的东西,问我们公司相关的,我就象征性的问了几个问题,他说就这么多么,我说没有问题了,然后就问我赶时间么,我说不赶,他说那你等一会,我还以为是去找三面了,然后过了五分钟回来和我说今天就先面到这里,送我出去的路上还问我最近面试多么,我说还好,就投了几个比较想去的公司,然后他说多面面???你挂我一开始直接让我走不就好了,还演了我半天,好气啊!!!
PS:这个公司好看的小姐姐好多
其实除了金山云是第一次去面秋招表现不太好之外,而且回来之后也重点补了一下没回答好的线程池和spring的问题,剩下两个基本都答出来80%以上的问题,但是深度方面还是有些欠缺,而且一问到分布式集群就懵逼,毕竟自己也本科不是科班出身(啥都学的信息学院,面试的时候一直疯狂和计算机套关系),本科也没好好学,这一年研究生才开始认真开始学编程,自己给导师干了一个Python的flask框架的小网站之后就自己去学java了,后面每天处于自学和给导师打杂的生活之后,大家还是要多重视基础,每个面试官都和我说对应届生最看重的是基础,祝大家都能找到满意的工作