本文是minus同窗投稿的面试经验分享
java
在此感谢minus同窗分享本身的面经供广大同窗参考mysql
本文是楼主前两个月 N 家公司的面试经历,总结复盘了面试现场,我的认为干货仍是很多,在此和你们分享。面试
ps:至于标题所说的薪资,是面试过程当中一个有意思的小插曲,可是确有其事,不是标题党。。。这里先卖个关子,请各位看官日后看!^_^redis
先作个自我介绍,楼主坐标帝都,5年经验,跳槽以前在一家传统小公司,年薪21万。算法
此次面试前先后后大概两个月的时间,面试了大概 6 家公司,命中 4 家,最终去了一家估值 70 亿美金的生鲜电商独角兽,年薪42万,恰好翻倍。spring
话很少说,直接进入面试现场!sql
好将来shell
开始面试第一天上午投递好将来,下午3点面试,一共面试了3轮,问的问题比较多。数据库
第一轮编程
面试官看了个人简历,首先让我画出eureka的执行流程,这块在以前的准备过程当中有深刻看过,所以比较流畅的画出来并配合解释说明
以后问到项目中使用分布式锁解决缓存重建并发的问题,并要求画出实际的执行流程,数据库也问的比较多,像事务的隔离级别,MySQL实现可重复读的原理,索引等
面试官给出了一个场景,在数据库主从同步的状况下,若是从库同步主库的数据延迟比较高,怎么才能在写到主库后马上可以读取到数据。
我解释了主从同步的原理,并以此说明主库到从库的复制必定是有延迟的,所以要保证当写到主库的时候马上能读到数据,要么就直接配置那个接口读数据的话直接走主库,由于这种写完主库马上要读取数据的场景比较少,能够作些特殊配置。
另外一种方案就是在往主库写数据的时候,能够直接往内存缓存中写一份,设置一个较短的过时时间,后面能够直接从缓存中读到数据。我说完以后,面试官也没给出评价,就这么过去了
此外,还问到一些基础性的问题,比较印象深入的是:在加锁的时候,用什么锁对象是内存占用最小的,我说是Object对象,面试官说不对,我一时没想出来,面试结束后和朋友探讨,以为应该是长度为 0 的 byte 数组
其余还问到了Collections.sort()使用的排序算法,aqs,线程池,ThreadLocal等等问题,主要都是一些考察基本功的问题,一轮面试就这么过去了!
第二轮
面试官更关注对一些技术的理解,问到了ElasticSearch的一些基础以及它和mysql的区别在哪里;eureka 和 zookeeper 作服务发现的区别在哪里;
还问了分布式限流有哪些方案,以及用线程池进行限流的缺陷是什么,项目中系统日志的处理;还有 JVM 模型,JMM 模型,垃圾回收机制,垃圾收集器等问题。
以后聊了一些设计模式的使用,在项目中使用了哪些设计模式,对设计模式的几个原则的理解。
第二轮结束后,因为第三轮的面试官在开会,因此等了一段时间,等面试官来了以后,只聊了很短期,面试官就说还有别的事,今天先到这里了。
主要问到了上家公司的加班状况,对加班的认识,职业规划,也问了几个技术问题,像tomcat的优化这块,自我感受答的不是很好。
整个面试从3点到7点,有点有始无终的感受,结束后也没有消息了
58 到家
面试一共三轮,上午10点过去,两轮技术面,下午两点过去,等了一会,而后跟hr聊了有半个多小时,HR说明在一周以内会有结果
第一轮
第一轮面试官的问题主要集中在基础上,我大概罗列了问到的一些问题,不一样的简历不一样人确定问的也不太同样,有兴趣的同窗能够参考看看。
主要是 jvm 模型,锁的原理,synchronized 和 reentrantlock的区别,偏向锁/轻量级锁/重量级锁的原理,可否从偏向锁直接升级成重量级锁。
java并发包里有哪些类,如何使用,线程池原理和参数配置,jvm调优,堆大小的设置,多线程的线程数的设置,volatile原理,threadlocal原理和使用。
redis和zookeeper如何实现分布式锁,redis的数据类型,一些具体命令,好比要获取一个有序列表的前10个元素应该用什么命令。
数据库索引的使用,聚簇索引和非聚簇索引,没有主键的话数据如何组织。
B+ 树的原理,Innodb 引擎和 myisam 引擎的区别和使用场景,数据库隔离级别和原理,MySQL的分库分表,mq的可靠性和顺序性,es插入数据的原理等。
第二轮
第二轮是部门leader来面试,这轮面试主要集中在框架源码上,我画出了源码的执行流程,以后面试官在一些点深问,由于这块我看的比较全面,问的问题基本都答出来了
而后这里面试官还问了在源码中我有学到什么东西,我讲了使用配置类代替 properties 文件,volatile 在单例模式中的使用,内存的多级缓存机制,线程池的各类不一样应用场景,MeasureRate统计一分钟心里跳次数,批处理机制等。
这里个人回答主要集中在代码编写层面,也能够从架构层面说下学到了哪些,我以为后者更有高度。
最后我向面试官咨询了这个岗位具体作的事情,部门是基础服务部,面试官画图给我说明了部门内部一些项目划分,技术栈的使用,后续的规划等内容,并约我下午继续跟hr聊
hr面
下午跟hr的面试,hr顺着简历上的公司一个个聊,问了离职缘由,公司状况,如何向上司提出离职的,团队规模,是否带团队。
还问了上午面试的岗位知不知道具体要作什么,以后hr说了下公司的一些状况,上班时间,福利,加班状况,问了我如今的薪资状况,指望薪资,我问了下出结果的时间,hr说一周以内。
第二周的周五下午六七点的时候,这家公司hr给我打电话,告诉我面试经过了,以后提到了给个人薪资,算下来居然只给了我一个5%的涨幅。
hr给出的解释是,由于我前家公司上一年只发了12薪,而他们有12薪和两个多月的绩效,用14个月的薪水除以12,算下来平均到每月也能达到我指望薪资的水平。
这个计算方法实在是膈应人,虽然hr后来表示能够跟CEO申请提升每个月的base(大概提升到10%的水平吧),不过当时我已经有较为满意的offer了,仍是决定不去这家了
某生鲜电商独角兽
因为前面说了薪资,就不说具体公司名字了。这家公司我面试了两天,一共三面,第一天笔试加初面,而后次日有两轮复试。
第一轮
一面主要仍是基础,集中在IO / 并发 / 缓存 / redis / zookeeper / 分布式 / JVM / 数据库等。
其中问到 redis 的单线程模型的时候,我这块了解的不是很清楚,只是知道使用NIO的方式,而后以本身的理解去说了,面试官表示这多是我看过别的框架的模式,跟redis搞混了,不过也算是答上来一些了。
以后聊了一些项目的状况,好比每日的访问量有多少,qps多少,订单量多少等数据,据此得出数据库的访问压力如何。另外也深刻问了使用分布式事务的一些问题,还有分布式事务在时间上的性能。
因此这里给各位兄弟强调一下,对本身的项目必定要很是熟悉,各个点都要考虑到。
一面跟面试官聊的还挺好,面试官也表示个人基础还不错,问我是否是平时都有学习,以后就是约二面了,因为当时已经下午1点了,后面的面试官也在中午休息,而我下午也还有别的面试,所以hr跟我约次日来复试
第二轮
二面的面试官也聊了基础和一些设计上的问题,好比同时访问三个有相同功能的api,要求将执行最快的结果返回,有哪些方式,这块主要仍是考察对并发编程,并发控制的理解和掌握,有一些并发控制的类可以作到;
其余的还问到了,要开发一个新的api,须要考虑哪些方面,把全部要考虑的地方都说出来,你们能够说下边界处理,高可用,并发问题,可扩展性,幂等性,重试机制等等,能够说的很是多
整体问了有6块内容吧,面试官一边问也一边在记录,一些基础的问题这里就再也不多说了
第三轮
三面的面试官问的要更底层一些,Java线程与内核线程的关系,与进程的关系;关于并发我所了解的方方面面。
对于这个,我从为何有并发,并发问题产生的根源,解决并发问题的一些理论,Java中解决并发问题的方式,不一样方式的适用场景和对比等方面进行了回答
另外还问到redis的几种数据类型,以及每种数据类型的底层实现,跳表这种数据结构如何插入数据, hash如何扩容。
这块我跟面试官说具体扩容规则不太了解,而后向面试官说了我了解的Java中的HashMap 的扩容规则和具体实现。
以后又问了一些小的知识点,有的也没答好,像 copyOnWrite 就不知道用来作什么,而后就是一些为何离职之类的问题,对将来职业发展的考虑等。
以后面试官问我有什么想了解的,也问了个人指望薪资,我说了具体的数,也表示没想要太多,更看重平台的发展,最后面试官说明天hr会打电话给我
HR面
最后就是跟hr的沟通了,次日hr打来电话告知面试经过,而后问了我指望薪资,沟通入职时间,以后加微信,按照hr的要求提供了一些材料,次日就收到offer了
ps:最终楼主选择了这家公司,除了颇有竞争力的薪资以外,我还很看重这家公司的发展平台,由于他们有很是大的用户量,会遇到各类技术挑战,是很好的提高锻炼的机会。
而后这里有一个开篇提到的小插曲:当时HR电话问我指望薪资的时候,我说25K。
结果后续加微信聊天时,HR告诉我技术面试的反馈很好,决定给我28K,一个月还有2500的补助,算下来一个月有30K,发14个月。这种HR主动加薪的事情我仍是第一次见,意外之喜,哈哈!
玩吧
这家公司的职位是去作app后台的,用户量也不错,面试一共两轮技术面,最后是hr面。
第一轮
一面的时候,网络这块问的比较多,三次握手,四次挥手什么的,还有整个网络请求的执行流程,数据包的大小,对长链接的理解等。
而后数据库这块也问了一些,提供了一个场景,假如要实现一个最简单的朋友圈,用户能够看到朋友的朋友圈动态,朋友也能够看到用户发的动态,而后问表的设计。
我说了本身的实现,像用户表,好友表。面试官问有没有更好的方式,我没答上来,面试官表示这个轻易可能想不到,就问别的问题了,别的也没什么特殊的问题,都是一些基础的东西,大概聊了一个小时吧,就到了第二面了
第二轮
二面是技术总监面的,总体没怎么聊技术,就是一些我的素质上的考察。好比:
为何会选择作开发,没作别的
用三个短语来描述本身的优势
说说本身的缺点
如今公司有系统稳定运行着,若是你发现了有新的技术可以改善现有系统,你会不会引进,会考虑哪些方面
平常学习的方式,看过哪些书
有没有带团队,描述下团队成员的优缺点,有没有改善
有没有面试过别人,会从哪些方面考察
职业规划是怎样的,想作技术管理仍是技术专家
对shell熟不熟悉,写个word-count用到哪些命令
最后还聊了下公司的氛围,项目的状况等。而后也没啥特殊的,就过了。
HR面
最后跟hr聊,主要仍是说了下公司的福利待遇,公司的氛围,也问了我如今有没有offer,对他们的感受怎么样。
而后问了以前公司的薪资和如今的指望薪资,最后加了微信,告诉我两天内给结果。最后也是成功经过了面试并拿到了offer
友信金服-人人贷
这家公司面试有三轮,大同小异,这里简短的说一下
第一轮
一面仍然是基础的考察,像CAS的理解,和它存在的问题,ConcurrentHashMap的锁机制,ElasticSearch倒排索引,eureka的底层源码,还有服务访问的重试机制等等
第二轮
二面上来问了垃圾回收的问题,相似下面的代码:
问a和b可否被垃圾回收?
这里主要考察jvm如何判断一个对象是否能够被回收,是经过引用计数仍是可达性分析,引用计数的方式会产生像上面代码同样的循环引用的问题,因此jvm没有采用这种方式。
第二个问题是,若是有个跟java中原生的String一摸同样的类,包括包名,类名都是同样的,方法也是同样的,惟独比原生的String的方法多个打印输出语句。
而后把它放进项目的依赖中,在写程序的时候,导入String类,问到底执行的是Java原生的String的方法仍是本身写的String方法。
对于这个问题,能够考虑下Java中类加载的双亲委派模型。
而后就聊了项目的一些架构,问的比较细,要求我对每块都详细画图解释。
最后就是让画一个spring cloud技术栈全部框架的总体执行流程图,并对hystrix的限流熔断机制作了解释说明,别的好像也没什么了
这以后二面算是结束了,面试官和我说了下本身团队的状况,人员状况,要作的项目的状况等。
第三轮
最后一面是业务总监面的,面试官让我说了下本身在公司作了哪些事情,我挑其中一个项目作了仔细说明,而后说了下职业规划,对行业的见解等等
最后hr和我加了微信,一样说是两天内给结果,不过次日他们就给出经过的结果了,而后发了offer
某实时数据分析服务公司
这是一家作体育赛事的实时数据分析展现的公司,公司不大,去年拿了A轮融资,看网上总体评价还不错,就去试了试。
面试总共有技术两轮,hr一轮。去的时候首先是写笔试题。作完以后进入面试。
第一轮面试官没有聊过久,问的问题也比较偏基础,就是一些面试常问的问题,而后说了eureka的执行原理,说完以后,面试官就去叫技术总监了
第二轮面试是技术总监面的,技术点没问太多,主要集中在以前的笔试题上,笔试题包括sql的考察,还有几道算法题:找出有序数组中指定元素出现的次数;二叉查找树从小到大排序。由于时间的问题,我主要写了实现思路;
还有一题是,有16瓶水,其中一瓶有毒,小白鼠喝一滴有毒的水一小时后会死,要在一小时找出来哪瓶水有毒最少须要几只小白鼠
在sql的考察这块,面试官看完个人答案后,又改了其中的需求,要求给出sql的实现,另外也问到了sql的执行效率。
这里给你们强调一下,我面的基本上每家公司面试都会问到数据库,因此这块仍是挺重要的,须要重点去看
而后关于找出有序数组中指定元素出现次数的问题,原来要求的时间复杂度是O(lgn),后来面试官说不要求任什么时候间空间复杂度,如何简单的实现,我给出的方案是用HashMap,相同的key每出现一次,value加1
而后是小白鼠问题,说了解题思路,主要就是用位的思想,对16瓶水编码,实际只须要4个位就能够
以后面试官还现场出了别的算法题,我基本都给出告终果,整体而言面试还比较顺畅,以后聊了下职业规划,技术发展,学习新技术的方法,面试官也聊了以后他们准备作的事情,并给我现场演示了他们的项目
最后到了hr面,主要聊了下上家公司离职的缘由,公司福利,上下班时间,个人指望薪水,还问到以前有没有带团队的经历等
最终他们在第二周的周四才给出面试经过的结果并表示正在走offer流程,因为CEO不在,在薪资上还没最终肯定,我由于有了更满意的offer,所以婉拒了
总结一下,这两个月的面试,我以为最重要的就是基础和项目这两块,基础必定要扎实,不然第一轮面试可能都过不了。
jvm,并发是很是高频被问到的地方,在开始面试以前必定要好好准备,另外也须要有本身很是熟悉的领域,在这个领域里面试官的一切问题你均可以hold住,我以为,对于这种基础好,并且有本身长处的面试者,面试官没有理由不喜欢。
还有项目这块,对项目的细节必定要清楚,各类方案的设计思路,实现细节等等都要了如指掌,这样在面试官对各类细节的追问下不至于手忙脚乱。
END
我的公众号:石杉的架构笔记(ID:shishan100)
欢迎长按下图关注公众号:石杉的架构笔记!
公众号后台回复资料,获取做者独家秘制学习资料
石杉的架构笔记,BAT架构经验倾囊相授