杭州2023 - Java开发 - 面试复盘 2

公司概况:已上市·1000-9999人·计算机软件

一面

1 项目

1. 你在项目里主要做什么?

    项目二期,迭代开发,主要做的方向是信息安全管控。

    主要包括XXXX、XXXX、XXXX。

2. XXXX是干什么的?

    把业务讲清楚。

3. XXXX涉及到分库分表,你们是怎么做的?

    把设计方案讲清楚。

4. 穿插在业务中,问了一些数据库优化的问题。

1) 为什么你们很少做多表联查?

    互联网公司一般都采用 单表查询+代码层组装 的方式。

     ● 单表查询SQL的复用率较高,缓存利用率也较高;

     ● 联表查询情况下,表结构变动导致查询SQL需要同步修改的可能性更高;

     ● 两个大表联查的效率可能很低。

2) 有什么其他的调优方式?

    使用索引,不使用 * 通配符;

    反范式设计;

    数据库隔离级别选读已提交;

    冷热分离:把大表拆分成一张主表和一张扩展表,把不常修改的信息存储到扩展表当中;

    使用JSON格式存储可变表单的数据;

    一次最多修改200条数据。

3) 为什么你们用MySQL不用其他数据库?

    大部分互联网公司以MySQL为主。

     ● 免费;

     ● 可以满足需要。

5. 处理过什么线上问题?

    先讲了一个,面试官觉得是业务层面的问题,问有没有技术层面的,于是又讲了一个。

2 JVM

1. 你知道哪些垃圾收集器?

    ParNew - CMS:新生代采取标记-复制算法,老年代采取标记-清除算法。

    G1(单独使用):面向局部收集、基于Region,采取标记-复制算法。

2. 讲下G1收集器的工作原理。

3. 哪些对象可以被回收?

    可达性分析。

    GC Roots。

3 Spring

1. 你了解AOP吗?知道什么说什么。

    对标OOP,Aspect对标Class,Advice对标Method,Pointcut对标引用。

    织入器Weaver将Aspect织入系统的连接点Joinpoint。

    动态代理。

2. 你们系统中用AOP实现了哪些功能?

    日志。

3. Spring配置为什么写在XML文件里?

    统一写在XML文件里的可读性比较好(面试官的看法)。

    也可以做全注解开发。

4 多线程

1. 讲一下线程池的工作原理。

    围绕线程池的7个参数讲清楚。

2. 线程池的核心线程数和最大线程数是怎么设置的?

    CPU密集型:N+1;

    IO密集型:2N。

5 算法

1. 讲一下快速排序。

    从数列中挑出一个元素,称为 "基准"(pivot);

    重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

    递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

6 总结

大约四分之三的时间都在讲项目。吸取了上次面试的教训,项目讲得还算可以。

整体感觉挺顺利的。

二面

1 工作经历

离职原因。

2 项目经历

1. 简历上时间最早的项目。

1) 项目是干什么的?你在其中是干什么的?

2) 系统有哪些页面?系统是怎么运转的?

    应该是确认下这个项目是不是编造的。

2. 简历上时间第二早的项目。

    项目是干什么的?你在其中是干什么的?

3. 简历上最新的项目(我简历上一共3个项目)。

    项目是干什么的?你在其中是干什么的?

3 性格测评

1. 说出自己的三个缺点。

    最终抓住了我领导力比较差的缺点。

2. 你不能带团队,那你有什么价值?

    (答得不好,复盘一下)

    一个成熟的团队中既要有PL也要有SE,SE主要负责技术方面的指导工作。

    程序员可以根据自己的性格,选择一条适合自己的发展路线,我的努力方向就是偏技术一些。

    团队负责人也应该明白,并不是每一个人都适合做管理。

3. 听起来你只是比新人更熟练而已。

1) 事实上,经验本身就是有价值的。

    在编程上有什么问题是真的难以解决的呢?就只是闻道有先后,术业有专攻而已。那些解决不了的问题,都在实验室里。

    新人和老兵的区别就在于经验,觉得我比新人更熟练,就是肯定了我是不能被新人替代的。

    冷知识:一个月薪5w的程序员的工作,交给10个月薪5k的程序员是完不成的。

2) 我的成长并不完全是由工作带来的。

    如果随便谁做个三五年都能与我的技术水平相当,那么我的学习就没有任何意义。

3) 新人的成长是有代价的(杀手锏)。

    每个新人在成长起来之前,写出来的糟糕代码,对系统是有伤害的。

    所以比较新人和老兵的代码,不是一个写得一般、一个写得好的区别,而是一个谁写得危害极大、一个写得危害轻微的问题。

4. 你说你更懂产品,证据呢?

    那我肯定是没产品经理懂了,但是这个问题是拿我和新人比,不在话下。

    经常参加需求评审、跟业务方讨论需求、实现功能,总是会对产品的好坏有一些直觉上的判断,如果有个从来没有做过这些事情的新人天生拥有这些直觉,那我觉得输给天才也不丢人。

4 总结

前边聊工作经历和项目经历还好,后面面试官开始盯着他发现的我的缺点下手,就把我完全压制了。

这方面的准备确实不足,我需要整理一套自己的价值观,去和面试官碰撞,不能只是被动地接收面试官的想法。

不要附和,如果碰撞以后发现有无法调节的矛盾,那么这个岗位就不是你应该呆的地方。

你可能感兴趣的:(项目实战,java,求职招聘)