前言
三年Java后端开发经验,面的目标岗位是20k-35k的高级后端Java开发。
第一场,基本裸面,关于曾经的项目部门答的不好,所以还是得好好准备。
某C轮在线旅游公司
笔试
先做半个小时的笔试题,一共六个题目,两道go语言的基础题,一道斐波那契相关,一道数据库行列转置,一道实现一个栈,还有一道是百万计的MySQL优化
笔者没有接触过go语言,第一,二题,猜了下答案,第三题过,第四题没写出,第五题漏了内部数组收缩的场景,第六题,简单的写了几点关于建表和使用索引相关
一面(技术+项目)
没有讨论笔试题,先自我介绍,然后从项目开始问起穿插一些基础知识点的面试,难度不大。
其中有个问题,你这个项目做了一年多,里面主要实现了哪些需求,这个回答的没有条理。暴露了平常没有总结的习惯,都是业务驱动着跑。
二面(架构师面)
架构师对两年前做的一个项目比较感兴趣,由于是裸面,做的时间也比较久了,答的不是很好,也是零零碎碎的打了一些,虽然架构师表示理解,但是我也基本断定出,挂在这里了。
经验总结
- 面试准备很重要,对于自己的项目经历,做了些什么重要的需求一定要能够有条理的说出来,包括难点以及这样设计的原因
- 项目的架构以及整体流程一定要清楚,一定要知道每一个细节点
某C轮AI公司
一面(电话面+基础技术面)
聊了下Java的基础知识,涉及的点包括:
- StringBuilder,String,StringBuffer的区别,使用场景
- String不可变的设计原理,以及这样设计的原因
- HashMap的实现原理,1.8之后对于碰撞怎么处理的,如果key没有实现compareable接口,红黑树根据什么插入?
- 聊了下jvm的内存结构,线程安全的部门,各个部门的职能?
- 说明下类的加载过程,类加载的双亲委派模型?
- 聊下Spring的架构
二面(项目面+技术面)
- 聊了下你最熟悉的项目,描述下难点
- 聊了下Java的内存模型,可见性;Java线程安全实现的几种机制;HashMap并发下的问题;ConcurrentHashMap的实现,1.7和1.8的区别;Java中的并发原语,synchronized和ReentrantLock的实现原理以及区别;
- 聊下Java的线程池,以及使用注意点
- 锁和cas的使用场景,他两的区别,有没有实际测试过各种场景的性能数据,都有怎么样的表现
- 离职的原因,对未来的规划
面试总结
- Java并发知识总结不够,对于AQS了解不深
- 介绍项目知识没有挖好坑,没有突出项目的难点,导致面试官认为项目简单
- 平时总结过少,对未来规划定位不清晰,离职的原因考虑不清楚(其中想离职的主要原因就是加班太多了,但是这个又不能放在明面上说,所以一定得找到合适的理由)
某C轮金融科技公司
一面(技术面)
- 重点聊了Java各种集合的实现原理,以及使用场景,主要包括不限于,ArrayList,LinkedList,HashMap,HashSet,TreeMap
- 线程池的实现原理,线程池中的等待任务只有一个队列,如果线程池中的线程比较多,竞争会比较大,怎么解决?
- Java中实现高并发的几种策略(COW, cas, 锁),各自的使用场景及区别?
- 简单的介绍下项目?
二面(项目+技术)
- 聊下项目中高并发,高可用的实现
- 负载均衡的几种算法
- 问了几个设计模式的实现
- 分布式系统中转账问题,如何保证分布式事务,项目中怎么处理这种情况?
- MySQL主从复制的实现
- jvm的内存模型,类加载机制,jvm gc实现原理,有没有jvm线上调优经验。如果遇到线上问题,一般通过哪些步骤定位,除了看日志和走读代码还有没有其他方法?
三面(项目经理面)
- 聊下项目内容,以及项目目前存在的问题,优化点
- 有没有带人的经验,怎么带一个新人?
- 离职的原因,对下一份工作的期望?
问了几个问题:
- 目前这边开展的是新业务,怎么让大家这群“新”人很好的配合起来
- 目前公司这块的业务在技术上的侧重是什么,会有哪些挑战点
四面(地区技术负责人面试)
- 聊了下项目
- 下一份工作,首先考虑的三个点按优先级排列是什么?
- 还有几个问题记不清了
某行业C轮互联网平台公司
一面(基础技术面)
- 聊了下Java的基础技术,高并发模型
- 聊了下项目,项目的性能数据
- 聊了下jvm 内存模型,类加载机制,有没有jvm调优经验
等待下一轮面试
平安系子公司
一面技术面
- 常规的Java基础技术问题,设计集合,并发,走马观花的都问了一轮但不深入
- 项目介绍
- 离职的原因,当前的薪资水平
领导面
- 自我介绍
- 介绍项目,因为有一个项目短暂的接触过支付场景的实现,这个领导估计有过支付相关的经历,开始追着问了,并分分钟要教我什么叫分布式系统设计,系统的交互中会存在哪些问题,并且非常强势的断言我项目中的方案设计很烂,我司的架构师水平很烂,聊的不爽,直接怼回去了。
- 还吹牛逼说要给马总到明年要招到2w人,无形装逼,最为致命。
- 面试结束,应该没有后续。非常不爽面试过程中面试官高高在上的态度,项目还没有讲完,只说了其中某个点的容错设计,就开始断言系统设计烂,进而说我司架构师烂。估计平时在工作中是个小领导,习惯了颐指气使,从此平安一生黑。
蓝绿厂
一面(技术面)
- 自我介绍+项目经历介绍
- 重点聊了下自己最熟悉的项目,架构,组网,性能,瓶颈
- Java常见集合的实现方式,说下常用的设计模式,并举例使用到的场景,手写懒加载线程安全的单例模式
- Redis中的常见数据结构类型,Redis实现持久化的方式,优缺点以及使用场景
- 大数据和高可用在项目中涉及的点
- MySQL主备同步的原理,怎么实现高可用?
- client调用A服务,A服务依赖于B服务,在不知道B是否高可用的情况下,怎么保证A的高可用?
- jvm的内存模型,jvm的运行时数据区,有没有jvm的线上调优经历?
- 回到项目的性能数据上,有没有仔细去调研过这个接口的时延的分布是怎么样的,按照28法则,肯定是某个方法耗时比较多,有没有针对这种场景的分析?
PS: 项目接口的性能时延是30+ms
二面(项目经理面+技术面)
PS:面试官会一直死死的盯着你,而且会不停的问你,还有没有更好的方式,还有没有?
- 有没有带人的经历,对于不上道的人,一般怎么带?
- 为什么你能胜任这份工作?
- 你说你优秀,你的优秀体现在项目的什么地方?
- 怎么在字符串池中查找给定的字符串?
- B树又没用了解?MySQL索引的数据结构是什么?MySQL的数据存储机制是什么?如何处理数据中的脏页?
- 解释下分布式系统中的cap理论,怎么保证ca?
面试总结
- 高可用,分布式是弱项,接触比较少,系统设计经验太少
- 带人的经验太少
- 混淆了B树和binary tree
- Redis了解不深入
总体总结
- 项目经历一定要准备好,目前市面上招聘基本上要求都是高并发,大数据,高可用。所以在你的项目中有哪些体现一定要提前准备好,并适当挖坑。也就是说目前还有哪些优化点可以做但是目前没有做。
- Java的基本功一定要扎实,不是说数据结构和算法要多么精通,但是至少Java中常见的集合的原理要知道,源码要过一遍,使用场景要了如指掌
- Java多线程,线程池的实现,并发包下面涉及到的经典工具,AQS,CAS,两种锁的实现,常用的并发工具,阻塞队列
- jvm的内存模型,HP原则,内存可见性;jvm类加载机制,类的加载过程;jvm的运行时数据区;Java gc的实现
- ssm框架的实现原理
- redis等中间件的数据结构,使用场景
- 高并发场景的常见处理手段
- 高可用系统的设计
- 分布式系统的设计,cap理论,分布式系统在实际场景中的运用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。