你好, 我是 yes。java
由于最近在主攻的面试方面的文章。面试
本身在网上翻阅了不少面经,也创建了面试题交流群。数据库
因此看了不少真实的、新鲜的面试题。设计模式
再结合下本身的面试经历、本身面别人的套路和以前朋友之间的面试交流。微信
我总结了下,提问方向基本上都是固定的。网络
让咱们一块儿来看看吧~多线程
项目
毋庸置疑,这玩意很是重要。架构
几乎全部的面试,面试官都会让你介绍本身的项目。数据库设计
他会问你:分布式
-
项目总体架构
-
共包含哪些服务
-
服务之间信息流是如何流转的
-
在项目中,有没有遇到什么难点
-
有没有排查过项目的线上问题
-
你以为你如今的设计有什么问题么?
-
若是你负责的服务从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 上面题目不少,可是常考的其实不外乎就那么几种。
最后
差很少了,提问基本上不会脱离这几个方向。
而且这几个方向也都有固定的问题,不会偏离不少。
因此针对性的准备准备,不打无准备之仗。
准备完毕以后,
那你就是面霸了。
欢迎关注个人公众号【yes的练级攻略】,更多硬核文章等你来阅,关注也可拉你800多人的面试交流群。
我是yes,咱们下篇见。
本文分享自微信公众号 - yes的练级攻略(yes_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。