去哪儿Java一二三面超完整的面经+已OC

一面9.24下午3.40--全程38分钟
1.自我介绍以及问项目,主要问我挑战杯的项目,终端/服务端/客户端,以及之间的通信,拿到一个专利....。
2.项目中用到了数据库吗?用到了什么数据库?用到了,就简单用到了MySQL。
3.MySQL中InnoDB的采用的索引结构是什么?B+树,并且底层叶子节点是一个双向链表。面试接着问那么为什么要设计成双向链表?我说的是其实不太知道具体的,我知道的大概只有,它可以向两边找,面试官给我补充,确实是这样,排序的时候需要用到两边去找。
4.MySQL中如何查看执行计划?就使用explain+SQL语句就行,可以看到使用的索引以及使用到的索引的长度这些的。
5.MySQL的组合索引在什么时候会结束?(不太会,也不太懂这个问题)
6.Java中JUC包下面你知道哪些常用组件?CountDownLatch/CyclicBarrier/Semaphore/ThreadPoolExecutor/FutureTask等
7.一个ThreadPoolExecutor怎么设计可以让只能有K个任务执行,只要更多的线程来了就拒绝呢?(撕代码)我其实不太知道,我说的是corePoolSize=maximumPoolSize=K,BlockingQueue为一个长度为0的队列。
8.那么如果不使用长度为0的BlockingQueue呢?应该怎么做,你了解过Java中的BlockingQueue的很多实现吗(除了Linked和Array)?我确实不太了解,然后面试官说我可以去看一下这方面的源码。
9.你知道ForkJoinPool这个线程池吗?我说我只知道在CompletableFuture进行异步编排的时候有使用,ForkJoin的Fork和Join的意思。然后面试官给我说让我去看一下这块的源码,响应式编程用的比较多,现在大厂里面也用的比较多。在Java9之后也新增了相关的响应式编程的实现。
10.那你知道Java中synchronized锁升级过程吗?我只从HotSpot的JVM源码实现中讲了偏向锁和轻量级锁(为什么要有偏向锁和轻量级锁这类的),并且说重量级锁的升级比较复杂源码那块还没深入。
11.你还看过JVM源码?我说看过一点点,不过忙着秋招就没深入去看很多,比如锁膨胀的过程中的源码有一个膨胀那个函数没怎么深入,也看过一些其它的,这个函数我源码里写过注释一定会看的,以后会抽时间去看吧,并且看更多相关的源码。
12.那你知道JIT吗?本身Java是解释型语言,为了提高性能的话,后面提出了JIT即时编译器的概念,引入了JIT到Hotspot VM中,对热点代码进行编译成为二进制代码去进行执行,并且Hotspot本身就是热点的意思嘛。
13.那你知道JIT对热点代码进行编译的条件吗?我说应该是根据代码的执行次数吧,毕竟是热点代码嘛。面试官给我补充说确实是基于执行次数去实现的,其实还有一个条件就是基本单位,不可能对某一行代码进行编译吧。(事后自学补充:JIT有两种统计方式,分别叫做方法调用计数器/回边计数器,方法调用计数器用来统计方法的执行次数,回边计数器统计for循环的执行次数,当执行次数达到10000(client模式下是1500)时就会触发JIT及时编译,JIT编译器包括C1/C2以及jdk10中引入的Graal编译器)
14.除了JIT技术之外,你知道AOT的概念吗?(事后自学补充:Ahead Of Time,AOT,也就是在编译阶段就直接把代码翻译成为二进制可执行文件,而不是.class字节码文件,可以提高效率,但是这样java语言就无法做到跨平台了,因为不同平台的可执行文件类型不一样,在jdk1.9中已经提供了AOT的相关工具jatoc)
15.你说说SpringIOC吧?IOC,Inversion Of Control,控制反转,正转就是自己new对象去进行使用,随处都得依赖别的对象,这样的代价就是耦合度高,使用IOC或者说叫DI依赖注入也就是将组件(对象)交给Spring容器管理,需要组件时直接就从Spring的IOC容器中拿,这样就可以很大程度上去降低耦合度。
16.你知道Spring Framework和SpringBoot的区别吗,我说的是Spring Framework主要就是提供IOC和AOP等这些基础功能的,而Spring Boot其实就是整合了Spring Framework和Spring MVC,还有一个嵌入式的Tomcat/Undertow/Netty这些jar包的Web容器相关组件,并且写了一些场景启动器去做自动装配。
17.SpringBoot其实也就是对有限的组件进行穷举和实现对吧?对,SpringBoot其实确实也就是定义了一些比较常见的场景,然后针对场景写了场景启动器而已。
18.那你知道SpringBoot如何自定义场景启动器吗?这个我知道,我自己有做过,就是分两个模块,一个模块xxx-starter中主要就是引入另一个模块的jar包(XXX-autoconfigure),xxx-starter中主要就是定义一些版权信息之类的,没啥其它的,主要就是引入jar包,主要逻辑都在xxx-autoconfigure中。xxx-autoconfigure模块中主要定义一个XXXProperties的组件去绑定application.yaml/application.properities等配置文件中的中的某个前缀作为Bean,然后利用各种ConditionOnXXX去按照条件去给容器中导入组件,然后在META-INF目录下建立一个spring.factories,并且配置要往容器中导入的组件(XXXEnableAutoConfiguration类)。
19.SpringBoot中其实主要就是定义了一堆条件装配的注解对吧?对,主要就是提供了一些ConditionOnMissingBean/ConditionOnMissingClass之类的注解。
20.Spring就是通过SPI机制加载的这些组件,那么你了解Spring 的SPI规范吗?我知道Spring中确实是用到了SPI机制,至于规范是什么确实不知道。(事后补充:应该是在resources/META-INF/services/目录下创建一个以接口的全类名作为文件名,文件中放入要导入的实现类的全类名,然后使用java.util.ServiceLoader类的load去完成Service的实现类的加载,不过我感觉这个应该不叫Spring的SPI规范吧?我也不清楚,这个貌似就是普通java的SPI机制,其实它主要在Jdbc Driver/Spring MVC中都有进行应用,在Spring Boot中的话主要就是在META-INF/下创建一个spring.factories文件,在里面放入要导入的相关组件的全类名信息,然后SpringBoot启动时就能获取到相应的组件,其实很多地方都有使用到SPI机制,比如在Dubbo中也有使用到SPI机制)
21.你知道SpringMVC如何自定义序列化协议吗?这个我做过,就是配置内容协商管理器(英文名记不住了,单词不熟)和消息转换器(MessageConventer),先配置内容协商管理器,默认是支持json/xml的(需要导入jackson对应的jar包),我们需要自定义需要一般不会替换掉原来的默认的,因此我们可以先把这SpringMVC中这两个默认的放进去,然后再添加我们自定义的,不然会丢失默认的xml/json的解析方式。然后就是编写MessageConventer,它有canWrite/canRead方法用来判断它是否可写/读,以及write/read方法,如果你canXXX方法return true,那么就得在实现对应的XXX方法。
22.你知道Spring中如何定义一个异步的Controller吗?没接触过,不了解。
23.Spring的webflux你了解吗?我只是知道这个模块,对响应式编程提供支持的。面试官说现在webflux响应式编程用的比较多,Netty结合Reactor现在大厂用的很多,Spring其实只是对底层的封装而已,让我去学习学习相关的响应式编程的支持。
24.你了解云原生吗?我只知道docker和k8s那些,但是我自己确实没用过,我自己机器也确实跑不动。面试官说,你可以考虑使用云厂商,然后自己搭建一下,现在这些在大厂里面都是用的很多的。(学到了学到了)
25.你笔试题前两个都AC了,第三个为什么没做出来,是不会还是什么原因呢?我说是因为当时在遍历的时候,把e写成str了,笔试的时候没注意到。面试官说那你是思路完全没问题的对吧,只是写的时候写错了,我说对的,就lambda表达式里把e写成str了,其它没什么问题,我还自己测试过几组数据是能过的。
26.你还有什么问题吗?(没什么问题) 然后面试官说我马上给你转到另外一个面试官去。(然后立马收到了二面的短信和邮件,效率真高)

总结:全文下来都是让我学习响应式编程的,这块我确实不了解。。。。Emm,以后有时间一定学!

二面9.24下午5点05-全长22分钟
1.自我介绍
2.说项目,看到挑战杯是C#做的就让我讲另外一个,问项目的技术点(SpringBoot+SpringSecurity)、表是什么设计的、插入一条数据你会怎么做?
3.你学java的你知道JMM内存模型吧,你讲一下吧?一个线程执行时会将数据拷贝到自己的工作内存中执行,如果数据产生修改,那么它只会更新自己的工作内存中的数据,不会通知别的线程,如果需要通知别的线程就要用到volatile,让缓存失效,重新从主内存中加载数据。
4.这个过程中会有重排序/可见性的问题,如果解决?volatile。
5.那你知道JMM内存模型的先行发生原则吗?我说我知道这个happens-before,但是我感觉那些都没什么说的,很常识。面试官说就感觉那些很废话对吧,我说是哈哈哈哈(笑了)。面试官补充说了一些在多线程下面的知识。
6.你看过Spring源码?你看过哪些Spring源码?我说IOC/AOP这些核心的都看过也比较熟悉,其它的扩展的就不太记得细节了,就只知道一些大概逻辑。
7.那你说说你看过的源码吧?我说范围太广了!然后面试官说你很了解的一部分就行了!我主要说了容器启动有十二大步,主要步骤的话就主要是invokeBeanFactoryPostProcessors还有初始化单实例bean经过的getBean/doGetBean/createBean/doCreateBean这串逻辑,然后就是执行生命周期回调函数initMethod和PostContruct注解标注的方法以及执行BeanPostProcessor,SpringAOP的AOP动态代理就是在BeanPostProcessor中去做的。
8.手撕算法:二叉树的层序遍历,直接赛码平台手撕,这个Easy嘛,就是一个队列维护当前层次中的元素,访问的过程中加入left/right嘛。(写完之后问面试官需要运行吗,面试官说不用)。
9.你讲讲你实现的这个代码的思路吧,就Queue<TreeNode>,访问节点之前记录size因为过程中size会变因此要先记录下来再遍历,访问元素的过程中把val加入list中,如果左子树/右子树不为空,那么就把它压入到队列中。
10.反问(没什么问得),然后面试官说马上给我转交给下一个面试官,然后收到了三面的短信和邮件。


三面9.24下午6点07-全长12分钟
1.你在平时的过程中写代码遇到bug怎么解决?我说我直接debug源码,跟着源码一步步慢慢走就可以看出来是哪的问题了。
2.你会将自己遇到的问题和别人分享吗?我说会,遇到一些别人没遇到的问题的时候自己就需要把问题记录到简书。技术本身就是个"人人为我,我为人人"这样的。我肯定也得把自己能解决的问题解决方案分享给别人。
3.那你的文章有人点赞评论吗,你会收到点赞评论吗,你会和他们讨论吗?我说会的,....。
4.你有面过哪些公司,它们公司都怎么样?我说面过用友等一些公司,其实这些公司它们都挺好的,企业文化和技术栈也都挺符合的。
5.那你对技术栈有什么特别的要求吗?我说没有,只要是java和Spring相关的就行。HR说那你能接受的范围还挺广的,我哈哈哈哈哈(笑了)并回答对的。
6.你拿到了哪些Offer?我说用友已经拿到了,转转还没拿到Offer但是即将HR面。
7.那么如果你有很多Offer了,你会怎么选择?我说优先看技术栈和企业文化,其它的其实没太大要求(特别举例多益...这种垃圾)。
8.那技术栈和企业文化都符合你的要求了你会怎么选择呢?我说那就主要看薪资。
9.反问那你是只考虑薪资吗?我说那不是,其实这个得综合考虑很多的,只是薪资确实是占比很高也确实很重要。
10.你目前拿到了哪些Offer?目前的话主要是用友。
11.用友base地是在哪?给你谈薪资了吗?我说在北京海淀,还没谈薪资,说是在10月份国庆之后才谈。
12.你实习过吗?没有(惭愧,双非本还没实习)。
13.那你感觉互联网这么高强度工作能接受吗?我说其实基本可以接受,然后HR给我说去哪大概是早上10点上班,晚上7点下班,有些部门有可能加班得加到8-9点(还好)。
14.你能接受的薪资在多少?(回复16K)
15.反问:去哪儿的企业文化是怎么样的?HR说去哪其实挺好的,内部没有您啊这类的说法,比较平等,没有等级划分。然后就是内部鼓励分享技术,就是技术可以互相交流,在内网进行讨论如果比较好的文章的话公司也会有相应的奖励啊什么的。
16.HR补充,offer相关的校招组的会在9月末或者国庆之后的第一个周给你谈,你只需要等着就行。



面试总结:我感觉去哪儿就挺好的!其实本来我都以为去哪笔试挂了,别人都面试完好久了,我这应该挂了。没想到9.23收到了面试邀请,然后今天一次性三轮面试。不知道过没过,HR说会给我谈offer的事,不会反手就给我挂了吧!或者是进池子等着了....面试总结就是以后要花时间看看响应式编程相关的,我还记得我哪个朋友给我说过现在响应式编程还没成为主流来着,有时间一定好好学习这方面的。(人刚从深圳回广州,3点半到宿舍,3点40分的一面,人都有点懵,反问都不知道问啥了,祈祷一下去哪儿给个Offer呀!)


更新:9.29下午5.06收到意向书!感谢去哪儿能给我Offer!效率超高,据说是面试完没感谢信就稳了不会进行排序!

更新:10.27早上11点多收到HR的Offer Call。去哪开的比较高,自己双非本还没什么offer,all in去哪儿网了,也是很幸运吧,感谢去哪儿网能给这个机会,没有offer的菜狗差点得去准备春招了!

#去哪网##面经##秋招##Java##去哪儿#
全部评论
建了个去哪儿秋招群,群号:946422336 
点赞
送花
回复
分享
发布于 2021-09-24 23:47
hr说三面之后 会根据三面的反馈做综合排序
点赞
送花
回复
分享
发布于 2021-09-25 01:13
滴滴
校招火热招聘中
官网直投
稳不稳主要看池子深不深。对了,楼主是北京人嘛
点赞
送花
回复
分享
发布于 2021-09-25 16:00
楼主强啊,问这么多源码,我也是三面过了,担心泡池子,所以选择去同程了
点赞
送花
回复
分享
发布于 2021-09-29 14:06
27号面完就没有消息了😭😭😭是不是进池子了😭😭😭
点赞
送花
回复
分享
发布于 2021-09-30 14:41
5.MySQL的组合索引在什么时候会结束? 说一下我的看法,我觉得应该是想考察你索引失效的情况 idx(a,b,c) 当使用不满足最左匹配、 not in 或者 范围查询的时候会导致索引失效。
点赞
送花
回复
分享
发布于 2021-10-18 15:28
请问三面后进度状态什么时候变呢?
点赞
送花
回复
分享
发布于 2021-10-18 18:02
老哥谈薪资了吗,学校三方马上要下来了,有些公司要开始逼签了,去哪儿还没谈薪资,也不知道今年能开多少
点赞
送花
回复
分享
发布于 2021-10-19 19:42

相关推荐

11 75 评论
分享
牛客网
牛客企业服务