因为最近在主攻的面试方面的文章。
自己在网上翻阅了很多面经。
所以看了很多真实的、新鲜的面试题。
再结合下自己的面试经历、自己面别人的套路和之前朋友之间的面试交流。
我总结了下,提问方向基本上都是固定的。
让我们一起来看看吧~
项目
毋庸置疑,这玩意非常重要。
几乎所有的面试,面试官都会让你介绍自己的项目。
他会问你:
-
项目整体架构
-
共包含哪些服务
扫描二维码关注公众号,回复: 14273066 查看本文章 -
服务之间信息流是如何流转的
-
在项目中,有没有遇到什么难点
-
有没有排查过项目的线上问题
-
你觉得你现在的设计有什么问题么?
-
如果你负责的服务从100TPS变成1万TPS会有什么问题?怎么处理?
-
如果你负责的这个功能之后需要频繁变更,你怎么设计?
-
等等等
当然还有很多种问法,不过都会结合你当前的项目进行发问。
面试官想考察你:
-
这个项目是不是真的是你做的
-
是否对项目整体都有把控和关心
-
平日里是否有对项目进行总结性思考
-
是否有线上故障处理能力
-
是否有设计和架构思维
-
一些知识点是否能学以致用,比如线程池原理说的很溜,但是不知道在项目上怎么用。
所以要多多准备自己的项目,扒一扒你自己负责的模块。
多想想,如果产品要频繁变更需求的话,这里应该怎么设计。
如果公司今年发展的很迅速,客户量激增的话,你负责的服务会有什么问题?
需要怎么处理、怎么设计?
因为这非常容易被问到,如果你答的好。
那么不仅突出你这个人有点东西,还会体现出你平日里喜欢钻研和思考。
对了,跟面试官介绍项目的时候,不要一上来就深入细节
Java基础
这个也很重要。
HashMap呀、ConcurrentHashMap哟
Synchronized呀、Reentrantlock哟
volatile呀、threadlocal、线程池等多线程相关的。
JVM、GC。
这些问题还是很常见的,而且网上基本上都有,大多数同学称之为“八股文”。
百度百科:八股文(英译:Stereotyped Writing;Eight-Legged Essay),也称制义、制艺、时文、八比文,是明清科举考试的一种文体。八股文章就“四书五经”取题,内容必须用古人的语气,绝对不允许自由发挥,而句子的长短、字的繁简、声调高低等也都要相对成文,字数也有限制
不过,八股文也能看出深度的。
就拿 Synchronized 说,一般说个能自动解锁、可重入啥的,然后就锁升级一套combo。
好点的还能说说字节码层面,扯个 ObjectMonitor
如果你还熟悉 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 上面题目很多,但是常考的其实不外乎就那么几种。
最后
差不多了,提问基本上不会脱离这几个方向。
并且这几个方向也都有固定的问题,不会偏离很多。
所以针对性的准备准备,不打无准备之仗。
准备完毕之后,
那你就是面霸了。