本文观点整理自 GitHub advanced-java[1] 项目 issues[2] 讨论区,欢迎对项目保持关注。
以下是 GitHub 用户一些精彩的分享,感谢!
我个人平时会负责一些技术面试。面试过程中,经常碰到那些针对面试精心准备的人,比如,消息队列方面,候选人差不多都能答上这些标准答案。
但是,这些答案不是我想听到的,我甚至曾经告诉面试者:我不想听你看来的这些东西,我想听你思考的东西。你们具体在什么场景下用的 MQ,如果不用 MQ,你的项目又怎么设计?你思考一下你的 XX 项目,中间还有没有哪一块功能可以用上 MQ ?为什么?如果用了,你猜一下生产上可能出现什么故障?怎么解决?既然你知道他的作用是“解耦、消峰、异步”,那么在你简历中提到的 XXX 技术中(比如 Nginx,或者任何知识点),分别可以通过什么手段去做这三个目的?你在 Java/Android/IOS 中还见过类似的组件或者机制吗?他们怎么做的?为什么?你怎么看如何解决 MQ 中消息重复的问题?有必要对所有的消费者都做幂等吗?为什么?幂等在你们 xx 项目中,具体怎么实现。还有哪些情况你碰到过“消息重复”类似的问题?BASE 理论里,如果涉及到 MQ 的场景,怎么设计?除了你说的这种设计,还有哪种设计?在你的 xxx 项目中应该怎么设计?为什么?
前面说了一大段,其实我想说的是,最好加上一个章节,告诉这些来取面经的人:哪怕你看完了这上面的内容,你仍然需要在工作中时时刻刻去思考和印证。
这些面经可以是你学习的目录,但是不是你学习的终点,对于优秀的公司和面试官来说,仅限于这些内容,收效甚微。
我也很想在工作有跟多的自己的思考,但是实际工作中很难是这样的,会很多很多各种问题,而且现在的社会每个人压力都这么大,烦躁的事情各种各样......
哪有那么多机会给人去历练,多少人都是运气好站在了时代的浪潮之巅,你并不比别人聪明多少,你只是机会好,其他剩下 90% 的人还不是只能靠 10% 的那些人总结的经验来背诵面试题。
能答上来起码看过了......起码看过了有了基础你才知道怎么去思考,要是没看过连思考的方向都没有..所以我觉得掌握这些理论知识还是很有必要啊,理论做基础,实践中求证,进步才快。事实上如果不看这些东西工作中大部分知识你都了解不到啊...起码对我一个初级研发人员来说是这样。
神乎其神,过度面试,夸大需求。
我面试很简单,就看沟通是否顺畅,是否好学上进,相关经验不能作假夸大,主动性强有思路更好,足够了,事实上都干得挺好。
就这个 mq 吧,搞成解耦削峰异步的“标准答案”,别到头来都忘记了你是要干什么,业务实现才是你要干的事。
处理来不及不够快嘛,所以才堆积排队;处理时间太长嘛,所以就拆分,能异步的就异步;数据量太大嘛,所以分区分片;单机承载有限嘛,所以要集群要分布式;分步分机了嘛,落地存盘是必须的,多台更保险。一步一步这样走下去,各种关键问题就会出来,然后各种第三方软件中间件等也就出来了,都是各自解决各自关心的问题。
然后嘛,不能把中间件的使用当高科技,说白了就像是看文档调 api。到底,实际上都很基础,计算机原理之类。比如,磁盘顺序读写速度最快,所以 kafka 就这么干,也就成了。
不是针对楼主,说的是现状。技术这东西大多数并不需要多么高的技术,也不是真有多么高的专业壁垒,再难也不需要你学一年半载还不会,若真还不会那必须改行。外行不懂只会崇拜,内行的不必太较真,像这 kafka 就是再熟,没准也会忘了怎么拼写。但,忘了就忘了,这其实也真不算事。
不是针对楼主,说的是现状。技术这东西大多数并不需要多么高的技术,也不是真有多么高的专业壁垒,再难也不需要你学一年半载还不会,若真还不会那必须改行。外行不懂只会崇拜,内行的不必太较真,像这 kafka 就是再熟,没准也会忘了怎么拼写。但,忘了就忘了,这其实也真不算事。
技术这东西,对于绝大部分人来说,没有高深不高深的,只有先知和后知。被问到的点刚好做过,属于有经验;被问到的点,做过类似的,能类比着说出来,属于有较强学习能力。但思考不一样,无论自己做过什么,思考过的人,和没有思考过的人,通过他的回答可以很快看出来。
经验、学习能力、思考能力,我们底层码农都希望自己的战友具有这些能力。我面进来的人是要和我一起加班熬通宵的,减少我的加班时间的,早点下班回家,有助于我早日冲上王者段位。我不太愿意招一个人天天我带着他学。他教教我,我教教他,切磋交流肯定可以。
关于技术面试,欢迎来分享你的看法。
[1]
advanced-java: https://github.com/doocs/advanced-java[2]
issues: https://github.com/doocs/advanced-java/issues/9[3]
blackdog1987: https://github.com/blackdog1987[4]
ysh3940: https://github.com/ysh3940[5]
xiaokek: https://github.com/xiaokek[6]
SunStriderxxx: https://github.com/SunStriderxxx[7]
gotoeasy: https://github.com/gotoeasy[8]
blackdog1987: https://github.com/blackdog1987
长按识别下图二维码,关注公众号「Doocs开源社区」,第一时间跟你们分享实用技术文章与业内最新资讯。