咳咳,两周的杭州JAVA面试总结来了

题主正儿八经算4年开发经验,技术能力一般般,目前投递了30+公司,有反馈的就在下面列出来,重点聊下这两周的面试情况给在杭州准备找JAVA面试的一点参考。先说结论,现在真的是卷炸了。6月gap到现在10月了,本着再gap下去可能有求职风险的情况下,想开始正儿八经找工作了… 简直一片惨淡,在职的别走了吧,就是再恶心也呆着吧… 不过我也享受这段gap的时间,焦虑还是不焦虑,就是没想到市场这么惨淡…总结总结… 从享受gap到被迫gap了大概是…

外包: 工行、招行、泰隆、乌鸫、浩鲸云计算、中华保险

投递和反馈约电话面试和线下面试的都很快,一般2-3天就快速结束了,乌鸫和浩鲸云计算会久一点,1-2周,基本上面试是个正常开发都能过,水的很。薪资15-22不等,上面的基本上都是已offer。 这些个外包就没啥含金量了,练练嘴感可以,基本上就是让你自我介绍下 讲下项目的痛点难点。然后稍微带点八股文,你给他聊深了他还不愿意听呢…

自研:新华三、大华、(A轮的几家100-500人的公司就不列了)
新华三外包?是和紫光云数的offer降薪,大华待一面,A轮的过了两家也是降薪+大小周。

内推的暂无消息:菜鸟、飞猪、政采云
简历投的暂无消息:圆通、百世、顺网

简历已挂:酷家乐、网易、滴滴

这些就有的聊了…
涉及的内容挺多,会让你参杂项目讲,但是重点考察你对原理和业务的结合,大概的分享下面经吧… 现在一个18k左右的岗位都已经卷炸了真的…

206 个赞

JUC线程相关的:
简单讲下你在并发条件下怎么保证线程安全的?你刚刚也说了,我们并发条件下其实要处理的就两个问题,一个竞态条件一个内存可见性,我们也不聊八股文,就先简单聊下具体的使用和我们生产里面会遇到的问题。为什么你不建议用ReentrantLock?你能给我讲讲平常开发中你都是怎么用synchronze的吗?你们业务上是怎么处理有竞态条件的多线程业务的?你刚刚提到两种方式保证线程安全对吧,那你分别给我讲下cas和锁具体是怎么保证线程安全的? 你刚刚提到了cas其实是一种常用的解决方案对吧,你也说了copyonwritearraylist的实现也是它,那类似这种ABA问题在业务中有遇到过吗咋解决的说说看?那你平常并发条件下会用这个集合类吗有其他方式吗?ok,你刚刚提到的,其实我们如果只是使用synchronze是不能有效控制细粒度的竞态问题的对吧,只能控制阻塞中断和唤醒是吧,那你给我讲下await / signal和wait/notify的区别呢?那区别不大你在什么情况下会考虑分别用他们?好的那延迟唤醒线程的手段有其他方式啊,为什么考虑用阻塞队列来控制并发任务不使用消息队列异步重新投递或者spring自带的bus方式回调的方式呢?你说的这种情况在线程池里面也会用到对吧,就是配置阻塞队列,那为什么不自己去实现这个异步回调呢?有总结过吗?你刚刚提到上下文切换,只有上下文切换造成的开销吗?你有了解过线程的生命周期吗?好的那假设我现在有ABC三个对象,其中A对象的实例方法给它加了synchronze,然后在A对象里面去创建BC对象,在BC对象的实例方法里面我用了ReentrantLock创建的lock对象去加锁做业务解锁,就这样的一个简单的流程如果是你来写,这样会有什么问题吗?全部换成synchronze不会有性能问题吗?你刚刚提到在同步代码块里面加锁,那我如果不给这个synchronze传当前对象会怎样?好的就按你说的全都换成了synchronze了,那这样的业务流程就能正常执行不会有问题吗?那应该怎么做才能保证我这个业务流程正常执行呢?ok就按你说的那现在假设我的代码顺序都调整了,BC之间也不会有互相调用和争抢的情况,在这个条件下还会出现你说的部分线程永远等待的问题吗?那现在交给你改,有什么想法?那假设就按你说的已经全部用ReentrantLock也用了trylock了,那这个问题解决了吗?阻塞队列就不会造成任务堆积了吗?那怎么优化呢?好的了解,讲下锁吧,你刚刚提到解决线程安全的方式有两种,cas和加锁对吧,那你简单给我讲下reentrantlock和synchronze的区别吧。好的,你刚刚提到reentrantlock的底层是基于aqs实现的对吧。你给我简单讲下synchronze的底层实现是什么?ok,那都是基于aqs实现的有什么区别吗?你刚刚提到悲观锁和乐观锁还有公平锁非公平锁,实际使用中那种用的多?为什么分段锁就能提升并发性能呢?reentrantlock一定是非公平锁吗?你刚刚提到哪怕trylock的方法设置为false也是非公平的,为什么呢?那除了reentrantlock之外JUC里面你还用过哪些包吗?你提到的像futuretask这种异步方法回调还有forkjoin这些任务,你讲一下你具体实际是怎么用的?好的你刚刚也提到了forkjoin的底层用了线程池对吧,那你给我简单讲下线程池的特性吧,你在项目中有配置过线程池吗?好的那你给我简单讲下使用线程池创建使用和销毁的过程吧,你也聊了它的配置属性,那你是怎么去考虑线程池的瓶颈在哪呢 或者说遇到瓶颈你怎么去合理的配置这个线程池参数呢?就比如最大线程数和初始化线程数好了 这两个参数你是依据什么来配置的?线程在线程池里的复用过程可以讲一下吗?
好的,那还是刚刚的业务场景,我在A对象外面去嵌套一个固定大小的线程池,就是在调用A对象的在最外层去用线程池定时执行A对象的实例方法去执行业务,假设我的并发就10,你给我简单描述下这个线程执行的流程。

29 个赞

华为od呢?应该有20多k吧

4 个赞

感谢分享大佬厉害啊

7 个赞

麻了

9 个赞

这么多??


2 个赞

看到我司了 :upside_down_face:

6 个赞

强啊大佬 !

2 个赞

接着更新咯,哎,没啥意思说真的,我已经彻底废了,现在的面试官感觉被市场都卷坏了,更的都是真实面试PK,设计业务和项目的锤的太深了不太好梳理,就先把简单的八股文pk梳理出来大家看看吧…

Redis:
简单讲下为什么redis的查询速度快吧。那为什么mysql连接不使用nio的方式呢?有哪几种io了解吗?为什么nio的性能就快呢?redis你们平常都是怎么用的?那除了这些(分布式锁、热点数据布隆过滤器、消息队列发布订阅)还有吗?你们的用户鉴权是怎么做的?为什么考虑使用redis来做session存储不用spring自带的上下文对象缓存呢?那redis就不会丢失了吗?好的哪你给我讲下aof和rdb的区别是什么?aof的性能差有什么解决办法吗或者说你平常一般是怎么调整参数配置的?简单讲下分布式锁你们是怎么用的,你也提到了redissonclient它实现了写锁,那你在用的时候会遇到什么问题吗?那如果我设置的超时时间很长会怎样?

mysql:
问几个简单的问题吧,mysql的查询性能受什么影响有总结过吗?好的,我想了解的是实际应用中mysql的查询性能会受到什么影响,不是它的数据结构逻辑结构物理结构这些,我需要的是你对这个原理的业务应用的了解,我换个问法,就是除了我们常说的索引优化,分区分表,优化索引规则什么下推覆盖最左原则查看执行器计划之外的,也不需要你从原理出发给我讲它的物理结构逻辑结构这些,就是除了这些之外,你还做过什么事情或者说做了什么配置什么规范去提升你的查询性能?就是真实从你的原理出发你在业务上的应用给我讲讲。好的,你刚刚讲的列存储溢出和压缩行以及保证顺序插入尽量让索引有序对吧,就按你说的逻辑,那我在多个单点区间范围下我去插入数据会发生什么情况?或者说为什么在多个单点区间范围之间插入数据就会发生像你说的页分裂又或者插入数据大导致列溢出之类的然后导致性能受损呢?好的,那业务是不可控的对吧,这种问题肯定会发生,那你是怎么解决的呢? 好的那我假设这张是表是比较重要的业务表,不允许改变行格式呢,同时这行数据的某个列是text或者varchar类型的大字段,你会怎么考虑?那我现在也不允许你做水平拆表垂直拆库,业务不变的情况下,你有什么简单一点的想法吗?那为什么加了索引就可以提高查询效率呢?除了这个(索引结构在B+树下的页结构和检索包括回表和索引下推覆盖这些我讲了一半就被他打断了 意思就是不听原理)呢?-- 经过提示他想我回答的其实就是最直观的怎么提升查询效率 最后我给出的答案是唯一索引降低表中重复数据 用联合索引和唯一索引搭配使用降低页分裂和回表遍历以及调整cachebuffpoll和logbuffpoll避免flush链表因为buffpoll设置超过50%就开始刷盘之类的 然后他才结束 然而我现在回想起来 我也不是很明白他到底想问我什么…

简单给我介绍下mysql的特性吧,在实际生产中遇到过死锁的问题吗?怎么排查的?你简单给我讲下这几种锁有什么区别 然后它在什么地方发挥作用的 对应的给我讲下。 好的你刚刚也聊到了MVCC的版本链和undolog结合然后实现回滚对吧,那你就按你说的这个原理给我描述一下,假设一个事务A开始执行,有select forupdate和insert一个区间范围的数据的事务,然后事务B去查询这个区间范围的事务,会发生什么事情?好的 那我现在假设事务A它不回滚,就正常执行的情况下,会怎么样? 那有什么办法去解决这个事务B的阻塞问题吗?隔离级别你在生产上会改吗不能改的情况下你怎么处理?那假设我A事务的时间也不能改呢?好的调整顺序是一个手段,那除了调整顺序之外还有什么方式可以解决这种锁竞争导致我无法执行的问题呢?好的锁等待时间的配置你是怎么去权衡它的瓶颈的呢?

13 个赞

感觉大佬的分享!!!

3 个赞

感谢佬友分享,最近也在准备,来学习一下

4 个赞

下个月准备裸辞了, good luck

4 个赞

好牛!!!

3 个赞

恐怖如斯,啥也不会

4 个赞

感谢分享,支持一下 :raised_hands:

2 个赞

4年?可能只有4-5年的问的比较深,你要说你工作8-10年,我感觉没人和你谈八股文,有也是提一嘴,估计都是互相瞧不起,讲道理技术不是特别差,如果没合适offer大概率还是运气也比较差

8 个赞

建议没事别裸辞… 我就是个例子 … 不过我倒不后悔,毕竟之前的环境实在是太恶心了… 顶不住… 友佬做好判断 行情不好是真的 真切的感受到了。 下午线下面试小公司 五六十个人抢2个研发的位置 我瞬间就不想面了… 最后还是面完了 说是明天给我结果…

5 个赞

感谢分享。L站有你分享更精彩。

3 个赞

老哥别闹,我虽然很菜… 但是云原生这一套我还是挺熟的…至少玩得转的…
而且上面的这些问的也不算深吧,其实你看看上面的这些问题,大部分都是实际应用会遇到的,没有很深的刨根问底了,面的某厂的才叫深,一个spring就和我聊了快一个小时,就是一个IOC都pk了快三十分钟,你会不会很好奇为什么IOC能问三十分钟??无非就是DI的过程啊生命周期啊创建bean的流程啊还有增强器这些对吧,但是他在给我从xml开始一直聊到整个创建bean还有三级缓存的具体的实现方法以及spring版本迭代的区别,是个spring狂热粉吗… 重点是实现方法的流程… 虽然是大概的,但就是你让我照着这个spring源码给你一个一个讲我都讲不太清楚说真的,不过面试的时候他也是用spring来侧重的问这里面夹杂着设计模式和一些承接的实现,可能是用spring来看整体的OOP和抽象能力吧… 差不多都占了一半的时间… 我是很早之前做架构设计的时候为了说服公司老顽固的时候刻意背过参考过,就这样和他pk了三十来分钟,突然让我想起我老东家的老顽固… 后面是没什么时间了才没讲编程式事务入侵发布广播这些的源码,我感觉我就像是在背源码说真的… 可能也是因为学历问题不想要我然后就刻意问的吧… 就是猛锤,面的兴趣都没有了… … 确实卷的不行。这是实话。

8 个赞

面试讲究眼缘,技术只能占据5成,如果你算法题和学历都是高段位的那就另说

4 个赞