java技术分享_分享8月南京几家互联网公司的java技术面经(上)

背景和简介

先简单地做一下自我介绍,我是14年毕业,毕业于南京一个普通的本一学校,大学期间自学的java,大三去苏州做的实习,没有参加过专业的培训机构,到如今工作做好,算上如今的这一份工作,一共换过三家单位,都是南京的,今年7~8月我先先后后把南京基本上能叫的上号的互联网企业都面过了,现在跟大家分享一下面试经验,毕竟金九银十的招聘旺季到了,如果南京的IT开发小伙伴想换个工作的话,可以参考一下我刚刚出炉的面经,面试的公司有如下 苏宁,焦点科技,孩子王,小米有品,南京阿里巴巴,南京vivo,南京字节跳动

苏宁

e947a1826f632eba981a76cc1cdc35ab.png

我面试过苏宁很多次,16年的时候,当时我工作三年不到,面试过苏宁两个部门,面试都过了,不过当时薪资没有谈拢(我当时要15k),苏宁的人事说不到三年是不可能给这么多的,我也在想苏宁这个号称“南京第一互联网公司”的格局真的是太低,最后当然是不了了之。

时过境迁,今年7月我又开始面试苏宁,其实心里压根没打算去,所以第一家公司才面的苏宁,全当是练练手,找找面试感觉,我在Boss直聘上公开自己的简历,苏宁的IT工程师各种勾搭,也只有这样公司的面试门槛很低,想必其他的公开简历的小伙伴都会遇到同样的情况,约了一下面试时间,我就兴冲冲地去面试了,说实话,苏宁的面试总而言之还是很水的,就是一到两面,一开始需要写两个笔试题,一个是分布式事务的实现原理,还有一个是微信红包的实现算法,这两个问题想去苏宁的小伙伴可以提前准备一下,一面的面试官问了如下几个问题

1:java的类加载原理,java垃圾回收时用的回收算法,对象的生命周期

这种面试题面试的时候肯定需要准备,答案就不多说了,这种基础题,是不能答错的,如果连续答错基础题2题,估计就没戏了,任何公司都一样吧

2:ConCurrentHashMap线程安全的原理,在JDK1.7和1.8的区别

ConCurrentHashMap,CopyOnWriteArrayList HashMap,ArrayList也是面试官经常考的问题,AQS,java的JUC包那块知识点,小伙伴们也需要复习到,也是面试的高频区

3:redis的数据结构,redis的pipeline知道吗,redis的缓存无底洞是什么意思,怎么避免?

这个也是书里面经常写的,网上老钱等等大佬是文章都有介绍

4:一个实战问题,在苏宁易购APP中,用户选择了一些商品进去了商品详细页面,但并没有购买,怎么记录这部分用户行为数据,当交易量大的时候不能调用后台接口,防止与核心接口抢资源,怎么做?

我说把用户行为的数据结构化后批量保存到app的本地文件夹,作为本地文件,不实时上报到服务器端,等不是高峰期的时候,异步定时任务批量发送数据到后台,因为我不是做app开发的,所以也不知道说的对不对,面试官没说什么

5:elasticsearch的基本原理,为什么是近实时搜索,为什么不能实时,使用时应该注意什么,mapping怎么设置等等,你们公司什么业务什么场景用到的es

我也一一介绍了,因为我简历上写了用到elasticsearch了,所以面试官问了,也合情合理,elasticsearch我在平时工作中,主要做两个事情,一个是分表分库后的聚合分页查询,一个是做分词查询,原理我也看过,它的倒排索引,docValue,refresh,flush, 段合并,DSL语句,mapping,深度分页,聚合查询的一些知识都需要掌握,如果问的特别细,我也不会,例如lucene那一块的分词算法,原理等等,我也没有深究过,所以简历上写的是"掌握elasticsearch的使用",没写深度理解它的源码之类的

结果

整个面试过程还是比较流畅的,估计不到1一个小时,没有什么特别的问题,苏宁的面试本来就不难,不过薪资想要很高也不是很可能,大概过了一周,我记得是周六,苏宁的人事给我打电话,发来了口头offer,23k,我说26k(我一开始的薪水是20k+)然后人事说这个他做不了主,我跟他电话都心有灵犀的一笑,在南京的小伙伴估计都知道原因,苏宁就这个制度没有办法,他能做主的最多24k,叫我如果同意周一给他回复,工作5年最多24k,我本来就是练手,一面就结束了,我并没有回复电话。

焦点科技

7月份的南京,整个低迷的招聘市场,机会并不是非常多,因为还是想接着找状态,接着练练手,虽然知道自己不会去位于桥北的焦点科技,因为离家太远,但还是坚持去了,坐了一个半小时的地铁,发现现在桥北发展的还是很快的,几年前去的桥北地铁刚刚通车,现在江北新区成立了,交通,大楼,小区都是焕然一新,言归正传,到达星火路地铁站后估计有500米才到了公司大厦,面试我的听说是焦点科技一个做底层研发的(后来是我根据他的工牌的名字,跟我一个在焦点的同学打听到的),技术面就一面,估计面了2个多小时

1:RPC整个调用过程,Netty的通信模型,参数配置,用什么序列化的,怎么压测性能的,怎么设置熔断超时的,业务线程是怎么工作的

因为我的简历上写了“熟练掌握RPC及其原理“),因为我之前真的认认真真地抄过一遍别人大牛实现的RPC,后来因为运气好,简化改造过,并在公司实战运用过,这些问题都答上来了,面试官还是比较满意的,以后的文章应该会从头到尾的实现一遍RPC吧,这边就不多说了

2:java的自定义线程池的参数和执行流程,拒绝策略重写过吗,它的阻塞队列是Arrayblockqueue还是LinkedBlockingQueue区别是什么,需要注意点是什么

这个也是经典的面试题,小伙伴们如果不会可以百度学习一下,高频面试题

3:java的ThreadLocal和netty的FastThreadLocal的源代码理解,Netty的为什么快

如果你的简历中写到了Netty,这个面试题也是比较容易问到的,也要认真准备

4:mysql的默认隔离级别,索引怎么优化,还给了一个具体场景要求写出SQL

我只记SQL得要groupby having还要left join,反正是基本功,只要平时认真写过SQL问题都不大

5:用过哪些设计模式,可以手写两个设计模式吗?

这个我就当场跪了,倒不是说我真的不会,什么单例模式,责任链模式,工厂模式,命令模式,桥接模式等等都我都用过,但是叫我手写2个,我就写了两种单例,一大半的责任链,面试官笑了笑,说我这块有所欠缺,融会贯通的设计模式还是会的少了一点,其实我去面试的时候,焦点的同学就提醒我要准备设计模式的面试,我没有当回事,后来才知道焦点很注重这个.全公司貌似都挺在乎代码质量和设计模式

结果

面试官问我要多少钱,我听同学说焦点的薪资待遇在市面上没有一点竞争力,但是福利待遇好,工作也相对轻松,我就说25k,后来来了一个大佬说,25k是我的底线吗,不能低一点了吗,我说不能再低了,20%的涨幅 ,属于良心报价

结果就不用说了,自然就GG了,我同学说我梦没有做醒,5年工作经验焦点能给你20k就非常了不起的,对了,听说焦点听说是给股票的,家在江北的同学可以试试

再说说感受,整体感受面试质量水平高于苏宁,虽然走了很远,不过也算不虚此行,RPC整个描述我自己还是比较满意的,有些模糊的地方我回去自己还可以补一补

小米有品

f770699edad418a4318f9e58bf9b547e.png

位于核心新城科技综合体大厦,我记得那天天气特别热,我是下午1点开始面试的,面到下午6点半,这是我经历的最长一个面试,5个半小时的面试,期间面试官给我拿来了2瓶饮料~还是很nice的

一共三面

一面

1:spring refresh方法核心实现,基本的源码描述,流程,aop在这个过程中怎么实现的

spring的知识点,ioc和aop,还有事务的一些传播属性问题,大家也要了然于胸,这个不仅面试会遇到,在平时的开发实战用也遇到过,这个必须掌握,不仅仅是为了面试

2:mybatis如何防注入,#号和$号的区别

3:http 300段错误码代码的含义

这个问题我没有回答上来,因为平时我一般是后端开发,很少与app直接对接,算了,笔者我就不找理由,这的确是我的欠缺的地方,不过这个问题好像惹怒了面试官,这个问题是送分题,态度开始变得不是很友好,也可能为后来的面试埋下伏笔

4:volatile关键字,java锁的膨胀 AQS的实现,内存模型

这几个都答上来了,估计面试官觉得我比较菜,问几个面试经常问的问题,看看我是不是真的比较水,如果这几个致命问题挂一道题目,估计也就没有后来的二面三面了

5:更新数据的时候,是先更新缓存还是先更新数据库

6:redis的几个指令,我记得有一个没有回答上来,是有序集合的一个指令,用的不多,我没有回答上来,自己也没有什么嘀咕的,正常

7:算法,二叉树的中序非递归实现

幸亏把这个写出来了,否则二面的面试机会都没有那个面试官说的,因为他对我不知道http 300段的错误耿耿于怀,关于算法,其实我大概看了三个月,想去我最终想去的公司——南京的字节跳动,这个后面再聊

二面

1:面试官写了一个SQL select * from A where b = xx and c = dd,b字段和c字段都是单独索引,没有联合索引,问这个SQL是怎么执行的,怎么用到的索引?

我当时记得当时,我说应该b和c字段哪个区分度高的就走哪个索引,然后再通过另一个索引,过滤,其实我这边也不是特别清楚,如果有明确答案的小伙伴留言一下,可以帮我科普知识

2:手写SQL,题目记得不是很清楚,我记得有一个子查询,也要groupby,最后写出来了,不过面试官问能不能有更好的SQL,我没有答上来,他又接着问,如果我的这个SQL索引怎么建立

3: 什么是cap,zookeeper满足的是cap的哪两个,etcd满足的是哪两个,paxos协议的原理简单讲解一下

我说我不会paxos协议,我说我会raft协议的基本原理,然后就絮絮叨叨的稍微描述了一遍,看面试官表情貌似没有接触过raft协议,也不知道我说的对不对,这个问题就不了了之了

4:平时用过分表分库吗,怎么做的,分表分库需要注意什么,一般会遇到什么问题

我说用过(我第一家公司是途牛),当时数据量还是比较大的,所以用到了分表分库,基本原理是有一个mybatis的拦截器,通过参数改变schema和表名,遇到的问题是如果后来要给所有分的表加字段,一定要先把索引先删了,否则这个DDL会执行的很慢,面试官听了貌似他也遇到同样的问题,感同身受的点点头,我心里就知道我这面过了,后来我也说分表分库还要解决数据聚合的问题,我说我们是用elasticsearch解决的

5:面试官很开心,跟我描述他们的项目,噼里啪啦说了一大堆,这个花了很长时间,画了一些基本架构图,时不时补充说明,这个不像一问一答面试,更像是在交流经验

6:算法面试,实现手写一个最大堆

这个我也是轻松搞定,就是这些简单的算法面试题为我后面的字节跳动的面试埋下了一个很大的隐患,后面接着说

三面(跨部门交叉面)

1: spring mvc整体请求流程

经典的请求流程图,我就不赘述了,大家自己找答案

2:spring boot的条件加载类的原理跟普通的spring 项目启动的区别是什么,tomcat内嵌容器是怎么执行启动的

这个我之前复习到过,基本也记得个大概,零零碎碎的回答了一点,面试官也勉强点头了,叫我回去再看看源码

3:mysql死锁遇到过吗,为什么会死锁,怎么解决,如果死锁mysql会怎么处理

我记得mysql有个参数,也会有个死锁超时时间,避免大事务等等,说的估计他只有50%的满意度吧,其实在真是的开发中,我就遇到过两次死锁,都是比较常见的死锁,并发请求时,聚簇索引和非聚簇索性的冲突死锁,单位查询更新的时候死锁,这边没有深入研究过,回答的也不是很好,当时就想回去要把mysql的锁的知识好好复习一下

4:redis有序集合的时间复杂度,跳跃表的基本实现,为啥不用红黑树来实现

前两个问题都比较简单,准备过的都会,我也在纸上大体的画了画,我又说红黑树又叫2-3树,实现比较复杂,左旋右旋变色的源码不容易让人懂(其实是我自己不懂,我看了几遍,当时都记住了,也理解了,不过工作中用的不多,时间一长我就忘记了)估计作者不想这么复杂,面试官笑了笑

最后6点多,正好是吃饭的时间,就没有让我写算法,面试结束,叫我回去等北京的HR面试

结果

说好的HR面试一直没来,也不知道是忘记了,还是根本就没有HC,后来找面试官问,对方的答复说不清楚,可能北京那边拒绝了,或者有更加合适的,呵呵,我就不知道是我要的高了点(27k,毕竟是小米呀,应该不差钱吧),还是一面的大佬后来深思熟悉觉得我是真的菜,想想就不给offer了,具体的缘由我也不得而知了,不过也还好,把spring boot的源码又看了看,mysql的一些知识点补一补,再出发,本来心仪的公司也不是小米

孩子王

91fc5b577fd254bd4c519b67ca975b51.png

孩子王的新公司地址在运粮河东路那边,下马坊地铁站下车之后还要打车去,我是晚上去面试的,到的时候已经快7点半了,面试就两个人一起面的

1:JVM的一些参数代表的意思,怎么优化老年代的GC,老年代的一些GC参数,老年代GC的时候是CMS垃圾回收器,会有什么问题,配置什么参数可以解决这些问题

2: hashmap的实现,并发会出现什么问题,循环链表,还是丢数据,什么情况会出现,具体说明

3:MQ的死信队列是什么机制, rabbitmq用过吗?

我没有用过rabbitmq,用过rocketmq,问题尴尬结束,死信队列能回答上来

4:redis的五种数据结构,bitmap ,布隆过滤器的原理

5:spring boot的启动过程简单描述,spring boot比通用的spring 项目有什么好处,你们公司的配置中心用的是什么,平时接口是怎么熔断降级的

6:docker的基本实现原理是什么,CICD了解吗,你们公司怎么做的?

最后时间比较晚了,所有的问题我基本上答了80%,两个年轻的面试小伙叫我回去等通知,薪资和HR聊,我心想领导是不是已经下班了,我也没说啥,就回去了,打车不报销,孩子王的面试成本比较高,到家快11点了

结果

孩子王的回馈速度还是比较快的,第二天就收到了HR通知,说最多23k,公司有规定,而且项目比较紧,如果同意的话本周内回复,我当然是没去了,公司的确偏了一点,麒麟那边,薪资也没有竞争力,给我面试的感觉也不是特别的专业,或者说难度特别大

T3和运满满

不好意思,这两家公司我没有面试,因为所在的公司有离职的在这两个公司做领导,我也是私下面试的,不想走漏风声,这两家公司的HC一直有,面试的难度应该也不大,我是听我小伙伴说的,T3现在在秣周东路,桥北仙林的小伙伴就算了,离家太远了不合适,运满满现在目前人员也是比较饱和,听说还要军训什么的,不过两家公司的薪资也算是不错,大家有需求的还是可以多试试,也可以做磨刀石,毕竟现在这2家目前在南京都算不错,特别是T3,目前整个南京都可以看到T3出行的车,而且T3的背景也不错,可以尝试一下,这样也算是一份不错的练习,如果过了,可以去看看

南京阿里巴巴

abb1b54dc9103dd601ad4d8e427f3e54.png

南京阿里跟小米有品在一起,隔壁楼的关系,也在新城科技综合楼那边,紧靠河西,晚上看公司的logo还是很不错的,我2年半前曾经面试过杭州阿里,过了当时不足3年工作经验,低P6,估计薪资也是P6入门级的,后来因为家庭也没有去,毕竟当时很多程序员心中的殿堂就是阿里巴巴了,现在这种想法依旧在,不过却成熟了一点,毕竟有了家庭,在南京定居了,身边也有很多同事去了杭州,很多不到一年的时间,因为各种原因都陆陆续续地回了南京,也算是镀金归来,在这里还是劝很多想去阿里的同学赶紧加油,在定居之前就去,不要犹犹豫豫,越到后面顾虑就越大,废话不多说,说一下南京阿里的面试经历

一面

一面是电话面试,面试的时间大概50分钟,阿里的面试套路,还是很清晰的,简历上写什么就问什么,简历上不写的,肯定不问:

1:简述一下RPC的基本思想,设计原理,编码实现的时候一些关键点,同步调用,异步调用,failfast,failover等等的一些概念,超时怎么实现,熔断,SPI等等这些经典的RPC都问了,包括RPC自定义的通信协议,序列化方式

这个问题我也比较高兴,算是命中下怀,准备的比较充分,在焦点科技的洗礼之下,这一问顺利通过,面试官也是比较满意

2:RPC中以前的调用中Netty返回结果是异步是在channel中得到返回的,服务调用者端是怎么同步get到结果的

以前是countdownlatch的方式,现在是completableFuture,这个在sofa-bolt中可以有所体现

3:java中Future接口的几个重要方法,Netty在客户端的使用中,如何正确的获取到一个Channel,Netty的心跳,还是Netty的ChannelPipleline模型给我描述一下

因为简历中写到了Netty,所以面试官问的这么细也是无可厚非,Netty的源码我研究过,我也一一做了回答,Future的几个核心方法,get,cancel,isDone我还是比较有印象的,Netty的ChannelPipeline一个双向链表结构,我也基本上回答的不错

4: Mysql的explain的几个重要参数和指标,平时sql是怎么优化的,你们线上数据库的内存是多大,Mysql的默认存储引擎是什么,myISAM存储引擎有哪些特性

mysql的执行计划,sql的优化,最左匹配,覆盖索引,Innodb存储引擎等等这些也要烂熟于心

5:最后也问了一些java基础,跟前面几家公司问的大同小异,这边就不列举了

二面

不知道我和别人是否一样,二面依旧是电话面,我听网上说的有去现场面的,面试时间依旧是1个小时多一点

1.JVM调优,线上发生过OOM吗,如果发生OOM了,怎么定位问题,怎么解决

这个问题,书上是没有正确答案的,要结合平时的案例,工作5年,前前后后遇到线上OOM就4~5次,这个时候要去看堆栈日志了啊,用一些命令啊,例如jstack jmap ,常用的工具,什么场景会OOM,希望小伙伴们,也要做好这个平时工作的积累

2:spring的DefaultListableBeanFactory的refresh方法描述一下,核心组件的加载顺序,例如BeanFactoryPostProcessor,BeanPostProcessor的加载顺序,这些接口的有哪些子类

说实话,也只有阿里巴巴会问这么精细的问题,不过这些只要看过源码的同学都能够答上来,所以,好好做面试准备是必要的,所有面阿里巴巴的小伙伴,不管是谁,除非你是某个领域的专家,或者是超牛,大佬级别的,面P6,P6+,P7的都要好好准备,否则你就浪费了很好的机会

3:redis的key的数据结构,如果你说hashtable,他就接着问,如何扩容的,如果内存慢了,redis怎么做处理,redis的key失效了,redis是怎么查找的

依旧是redis的常见问题,好好去看基本redis的书还是非常有必要的

4:rocketMQ的源代码看过吗,可以跟我简单地描述一下rocketmq的架构图吗,它的broker为什么能够有这么高的吞吐量,mmap,filechannel知道吗?rocketmq丢消息吗,会重复消费吗?

我简历上写了我熟练使用RocketMQ,所以面的也不算出格,这个我答上来了,因为我们公司使用的就是rocketmq,并且rocketmq现在也是被apache列为了顶级项目,所以我闲暇时间看过rocketMQ的源代码,也看到源码讲解的电子书,还看了几节钉钉rocketmq群的几节公开课,这些问题依旧侥幸通过

5:kubernetes的网络原理,简单描述一下calico和flannel的区别,flannel网络实现的几种方式

这个问题我是基本炸裂,我只是自己搭建过kubernetes的集群,然后做了几个demo项目,跑通过dubbo的整个链路调用,然后前前后后看过几篇kubernetes的文章,并且知道他的几个核心组件,然后我就得意洋洋在简历写了"掌握kubernetes的基本使用",换来的就是无情的吊打,我把我仅能掌握的一点知识说了一下,基本上是答非所问,不过依旧是过了这轮面试,所以大家一定要以我为教训,不要为了简历亮点,写一些自己不是核心掌握的知识点

三面,现场面

赶到新城大厦的时候也是很晚了,估计7点吧

1:分布式锁的实现方案,会有什么坑,怎么释放,自旋分布式锁和尝试锁使用的场景

这个平时工作中用到过,面试起来也不是很有压力,什么trylock,lock啊,自旋锁会持续只有jedis的连接啊,lua脚本事务性释放啊,redis不能集群啊等等,回答的算是比较妥当

2:分布式雪花算法,给我讲讲实现,分布式事务的基本解决思想

雪花算法,41位时间戳,机器码之类的,也做了画图描述,分布式事务我就把tcc和seata的基本思想说了一下,面试官也没有深究,就让我把整个调用图简单的画一下

3:你们公司的整个研发架构图,网关设计啊,熔断降级,接口安全等等问题

这个基本就是看视野了,我要求面的是P7,这边我回答的不是非常好,接口安全的问题,我基本就是零经验,只知道加验签,怎么防攻击之类的,没有任何经验,这块回答的面试官不是很满意,整个公司的架构图还是比较清晰的画出来了

4:手写一下归并排序,怎么求根号三的值,两个实现一个,15分钟,我就是手写了归并排序,根号三我说了一下用二分查找

也不知道是不是面试官一时兴起,我简历上就写了掌握基本的数据结构和算法,我第一次知道阿里巴巴也要手写算法,好在不难,我也顺利过了,基本排序的什么的,还是可以的

5:在工作中有哪些成就感的事情,解决过什么比较难的问题,平时喜欢看源码吗,对网络了解吗

这几个比较有发散的问题,打得我措手不及,前三个问题回答的还行,但是网络我这块是真的不行,除了会背几个tcp握手的面试题,知道一些交换机,路由器的知识,还有5层网络之外,其他的网络协议栈具体实现也是不会,面试官还是语重心长的说,网络是短板,叫我回去好好学习,积累深度

结果

过了2天,跟我电话约了HR面试的时间,HR面试的东西没有技术,就问了为什么离职,上一家公司是做什么的,如果来阿里巴巴了,能够给阿里巴巴带来什么,你5年就要换3家单位了,这个你是怎么想的,我可以认为你忠诚度不高吗? 这些问题有些是压力面,有些就是背景调查,我也就一一做了回答,这个回答仁者见仁智者见智了

结局就是顺利拿到offer,27k*16,不过不是P7,给的P6+,我其实也知道最后一面的时候,面试官说网络的时候,我就知道悬了,我考虑再三也没有去,因为南京的阿里听说是客服部门,属于边缘部门,没啥意思,而且交通也不是很方便,主要是离我家太远,还是再准备准备,有机会面试一下杭州的蚂蚁金服

后来我还面试了南京的vivo和字节跳动,明天继续,争取全部讲完,帮助小伙伴们更快的找到你们自己心仪的工作

方便交流的点一个关注,一起学习,互动,生活~感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值