你好, 我是 yes。
因为最近在主攻的面试方面的文章。
自己在网上翻阅了很多面经,也建立了面试题交流群。
所以看了很多真实的、新鲜的面试题。
再结合下自己的面试经历、自己面别人的套路和之前朋友之间的面试交流。
我总结了下,提问方向基本上都是固定的,是有迹可循的。
让我们一起来看看吧~
项目
毋庸置疑,这玩意非常重要。
几乎所有的面试,面试官都会让你介绍自己的项目。
他会问你:
- 项目整体架构
- 共包含哪些服务
- 服务之间信息流是如何流转的
- 在项目中,有没有遇到什么难点
- 有没有排查过项目的线上问题
- 你觉得你现在的设计有什么问题么?
- 如果你负责的服务从100TPS变成1万TPS会有什么问题?怎么处理?
- 如果你负责的这个功能之后需要频繁变更,你怎么设计?
- 等等等
当然还有很多种问法,不过都会结合你当前的项目进行发问。
面试官想考察你:
- 这个项目是不是真的是你做的
- 是否对项目整体都有把控和关心
- 平日里是否有对项目进行总结性思考
- 是否有线上故障处理能力
- 是否有设计和架构思维
- 一些知识点是否能学以致用,比如线程池原理说的很溜,但是不知道在项目上怎么用。
所以要多多准备自己的项目,扒一扒你自己负责的模块。
多想想,如果产品要频繁变更需求的话,这里应该怎么设计。
如果公司今年发展的很迅速,客户量激增的话,你负责的服务会有什么问题?
需要怎么处理、怎么设计?
因为这非常容易被问到,如果你答的好。
那么不仅突出你这个人有点东西,还会体现出你平日里喜欢钻研和思考。
对了,跟面试官介绍项目的时候,不要一上来就深入细节
在下面这篇文章中,我说的很清楚了,可以看看。
Java基础
这个也很重要。
HashMap呀、ConcurrentHashMap哟
Synchronized呀、Reentrantlock哟
volatile呀、threadlocal、线程池等多线程相关的。
JVM、GC。
这些问题还是很常见的,而且网上基本上都有,大多数同学称之为“八股文”。
百度百科:八股文(英译:Stereotyped Writing;Eight-Legged Essay),也称制义、制艺、时文、八比文,是明清科举考试的一种文体。八股文章就“四书五经”取题,内容必须用古人的语气,绝对不允许自由发挥,而句子的长短、字的繁简、声调高低等也都要相对成文,字数也有限制
不过,八股文也能看出深度的。
就拿 Synchronized 说,一般说个能自动解锁、可重入啥的,然后就锁升级一套combo。
好点的还能说说字节码层面,扯个 ObjectMonitor
再好点那就是我这篇了,嘿嘿。深入JVM来理解Synchronized
如果你还熟悉 AQS 的话,你会发现好像机制是一样的呀。
都有一个同步队列,还有条件等待队列,然后唤醒 CAS 抢锁。
所以当面试官问你 Synchronized ,你把 JVM 的实现跟他一说,再给他延伸一下 AQS ,怎么说?
这波,有点秀。
面试官对你的印象,肯定很深,那你这几率不就大大的?
所以有点追求,你稍微深入点,你就比大部分人都牛。
对了,Java 基础面试题我可是已经整理了 52 题了,答案也写了,还不知道的去我公众号翻翻吧。
中间件
一般你的简历肯定会写 Redis、Memcache、Kafka、RocketMQ、RabbitMQ、Dubbo、Spring Cloud 之类的。
你写啥基本上会问啥。
我拿 Redis 举个例子:
- 你的项目为什么会选择用Redis而不是Memcache(技术选型)
- 你项目中一般怎么用 Redis 的
- 线上遇到 Redis 的相关问题没
- 你对 Redis 了解有多深?源码看过吗
- 说说 Redis rehash
- Redis 集群了解么?
- Redis 分布式锁怎么用?有什么问题?
当然,还有很多问题,比如什么过期策略啊,AOF 之类的,我就不一一列举了。
总之,这些问题想要得到的反馈是:
- 项目上真正的使用,使用到哪个程度
- 看看你是否有选型能力,还是只是个不会思考的工具人
- 看看你对一个东西钻研有多深
- 是否有中间件相关排查和处理问题的经历
中间件的问法基本上就是这么个套路。
我号上也写了很多相关的了,比如 Kakfa 和RocketMQ 的对比呀之类的。
所以,打有准备的仗。
如果你觉得时间来不及,你可以挑一个重点攻克一下,和面试官说我xxx比较熟,这样也是 ok 的。
毕竟,没有人是全能的。
数据库
这个也是必问的,一般都是 MySQL。
会问一些:
- 项目上如何设计索引的呀
- 写 SQL 有哪些需要注意的
- 分库分表相关
- 数据太多怎么查询
- 常问索引结构,为什么要这样设计?
- 能说说索引查找的流程么?了解多少说多少
- 如何优化 SQL
- 隔离级别、MVCC
- MySQL 的锁机制
- redo log 、undo log 之类的
基本上就是这么些个问题,这么一列其实也就这样。
从中看看:
- 是否有 SQL 调优能力
- 是否有数据库设计能力
- 对数据库原理了解多少,即深度
嘿嘿,等着我的 MySQL 系列吧~
设计、场景、架构类
比如:
- 一个短链服务如何设计
- 排行榜如何设计
- 查找附近的人,如何设计
- 等等
这类就是看看你个人的设计能力了。
包括条理是否清晰、考虑是否全面、表述是否通顺等等。
然后会和你互动,会问如果要这样的话怎么设计呀,如果要那样的话呢?
你说我扩容,我说不许扩容。
你说我限流,我说不许限流。
所以,这个还是得看看你的应变能力和平日的积累了。
其他
社招的话主要就这几方面,不过不排除一些其他问题。
这个其他,指代的东西其实很多、很广。
比如,网络相关的 TCP、UDP、HTTP、HTTPS。
操作系统相关的用户态、内核态、零拷贝、内存分页等等。
这种会有,不过出现频率不会那么高。
社招基本上围绕项目来展开的,以上的问题,校招多些。
对了, Spring 、设计模式之类的,其实也比较常问,就划到其他这个类目吧。
上机
大厂逃不过笔试。
- 手写个LRU
- 反转链表
- 生产者消费者
- 多线程顺序打印
- 二叉树之类的
反正一般不会太难,最多中等难度。
这个平时日得多练练,注意是不要在 idea 里面写。
在 LeetCode 上直接写好,毕竟到时候没有联想功能。
靠日积月累的刷题了,每天一题刷刷更健康!
也可以针对性的练习,比如把多线程专题一次性都刷完,然后再刷刷链表的啥的。
反正就是靠练,几乎需要形成肌肉记忆。
虽说 LeetCode 上面题目很多,但是常考的其实不外乎就那么几种。
最后
差不多了,提问基本上不会脱离这几个方向。
并且这几个方向也都有固定的问题,不会偏离很多。
所以针对性的准备准备,不打无准备之仗。
准备完毕之后,
那你就是面霸了。