⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 zhihu.com/question/31225105/answer/582508111 「三级狗」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的。

我一听 呀?那我这岂不是就不优秀了吗,于是毅然决然和女朋友分了手。

人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然是牛逼的公司。而这个时候勇敢跳槽的人,必然是牛逼的人。

于是2019年1月25日下午14:00,我开始了字节跳动的社招面试。

为了这天,我前一天排老长的队理了个利落的发型,胡子刮得一干二净。穿上崭新的新百伦999,连袜子都是崭新的NB,墨绿色工装裤配酒红色卫衣,外面再搭一件精致的黑色羽绒小坎肩,准时准点出现在电脑屏幕前,准备开始视频面试。

去面试头条,你最好有点心理准备。我面试过头条的好兄弟给了我一句忠告。不过邮件对考查内容写的一清二楚,所以一面,我并没有做太强的心理建设,事实证明我可能对通用型业务和软性技能的理解还不够透彻。

img

时间到了,画面里出现一个面积很小的房间,面试官坐在里面调节姿势和座椅靠背。这不是我第一次,但我却比第一次还要紧张。面试官跟我的一位闷骚朋友很像,长相、气质、说话声音如出一辙,我几乎差点问他这些年跟郑州那个女孩子还有没有联系,孩子到底是不是你的......

确认过眼神,我们在初次见面的紧张和局促中正式开始,前戏的部分大同小异,自我介绍,公司职能,项目简介。

小作坊走出来的小猿,项目经验并不出彩,没有高并发,没有分布式,前端后台服务器和数据库部署在同一台机器上。为了不显的太low又假装不经意提了提自己在GitHub上有自己的开源框架,但是他并不care。我的花样耍完了,就到了他肆意挥舞小皮鞭的环节。

“我看你项目上都是偏独立开发,或者你一个人在项目中承担了很大的比重。那你能不能说说你们的项目在部署的时候用的是怎样的架构?”

“主要就是Django部署那一套,nginx+uwsgi+Django+mysql。”

“那你详细说一下nginx在部署的时候有哪些必要的配置?”

“这个我在nginx里配置了端口的转发,对外监听80或443,然后转发到内部uwsgi的端口,由uwsgi来处理业务请求,部署Django项目。”显然我对nginx的认知仅仅局限在配置个端口反向代理,偷换概念企图蒙混过关。

“不是,我的意思是nginx当中不是有很多参数配置嘛,你在项目部署的时候那些参数是必要的配置,有哪些可以调优”

对方识破了我的小伎俩,并不给我蒙混过关的机会,无奈我只得低头认怂,表示并没有用过其他配置,出师未捷就挨了当头一棒。

“那你再说说uwsgi它的工作原理吧,它的底层是怎么工作的。”

因为紧张的缘故,原本不会的知识,一下子变得还是不会,囫囵吞枣地讲它代理一个服务端口,分配不同的线程处理客户端浏览器的请求。

“那他的底层是怎么实现的?看来我如果还没求饶,他就不打算放过我。

......(这里省略一些不清楚、不知道、忘记了之类的词藻,保留一丝尊严。)

接下来是关于redis哲学三连“是什么?为什么?怎么用?”

我把肚子里仅有的关于Redis的一滴墨水挤成了三滴,仍然没有给出他想要的。继续追问Redis的数据存储方式,操作方法,读写操作在底层都是如何实现。

啊~,好深。

除了低头委屈说不会,内心的我已经意识到了问题的严重性,平常面试你只要一喊不行,对方就会体贴地换一个方向继续深入,这次我都快被搞哭了,他居然换了个姿势继续往深怼,这谁顶得住啊……

到了这一步我的心理防线基本宣布告罄(qìng)。往后又问了关系型数据库表的存储结构,我隐约记得是毕加索还是毕加树来着,完后又追问到索引的实现原理,创建一个索引怎么它就能加快查询效率。

其实面试官的套路大多如此,每个技术都尽可能的深入,深到你不会为止,并不是非得要把你折磨的不能自理,而是为了考察你的技术水平到底如何。但是事到如今我的大脑已经无法给自己完成心理建设了,摧枯拉朽般智商情商性商逆商全线崩盘。

当然这也不能全怪我,上来就是三个大闷棍,就是李云龙来也让旅长打成懵逼了,哪里还能腾出精力开意大利炮。

下一个节目到了数据结构,面试官稳准狠一步到位点到了我的敏感地带:堆。什么是最小堆?什么是最大堆?在堆中怎么插入一个元素?

这个问题上值得庆幸的是,我居然急中生智,鬼使神差地用了四种不同的方式表达我不会,每种方式都尴尬而不委婉,并且还不重样。好歹面试一波儿不能让人家觉得我一无是处,多少还算有点文笔....

其实我平时稍微多看哪怕一眼,知道堆的实现方式是平衡二叉树,这一连串的问题不至于答的这么惨,面试的时候脑子里记得看过栈和队列,完全不知道堆是怎么实现,下来才知道就是个平衡二叉树。

这个时候的我已经被折磨的身心俱疲了,面试已经持续了将近四十分钟,嘴开始打漂,情绪紧张思维也难以集中,回答中开始大量出现我感觉、我猜、可能、应该是等高危词汇。

死亡轰炸还没有结束,接着是MQ,我所使用的MQ的技术选型,为什么选它,项目中如何应用,最后无一例外,它底层是如何实现?怎么保证的稳定的消费者生产者队列?回答的中间穿插着我不自信的连接词“嗯~啊~哼~哦~”。每次我招架不住求饶喊着不要不要的时候,我都能看到面试官嘴角狡黠(xiá)的微笑,由内而外的快感浮现在脸上憋都憋不住。心里暗暗发誓迟早有一天,我也要在上面。

最后以一道算法编程题结束,如何给一个双向链表排序?我失去控制的舌头自作主张地把话锋导向了快速排序,那,你来写一个双向链表的快速排序吧,这个视频页面上旁边有一个编辑器,语言你随便,用c++或python都可以,大概10分钟的时间,可以吧。

“那,我用c++试一下吧”

我随即在编辑器里自信的def了一个quickSort函数,参数是一个int数组,还有两个int值代表low和high两个档位,函数末尾加上冒号,下一行开始缩进四个空格以示尊敬,当然代码段的区分花括号必须得有。

写完这几句,双手这才收到了大脑已经在十分钟前宕机的消息,于是两手一摊表示无能为力。时间才过去一分钟,剩下时间我开始拿纸笔低头写字,沉默的面试官抬头看到还以为我在纸上排演算法,可实际上我是在拼尽最后一丝脑力回顾刚才他问我的问题,倒不是为了面试后好好复习,主要是我一会儿要写知乎,哈哈,我可真是个小机灵鬼。

期间面试官也用自己的代码快速的敲击键盘,听声音猜大概是在吐槽HR,筛选简历的时候长点心,找来面试的这都什么玩意儿。

时间差不多了,再一次厚着脸皮主动承认自己写不出来。实际上,我哪怕正经用c++写一个数组的快速排序也算话,然而当时的我满身只剩下疲惫,痛苦和羞辱。

面试官终于放我走人,长达一个小时的激情视频聊天终于结束,关掉视频的一刹那,随着浑身一阵抽搐,整个人瘫软在椅子上。我是谁?我在哪儿?刚才发生了什么?

哦,刚才发生了那种事情。我之前对那种事情还挺向往的,内心对此充满了激情和憧憬,怎么现在,对这件事情一点兴趣也没了?现在只想这么瘫着什么也不想做。要不要点根烟抽抽?哦对了我不抽烟。原来贤者时间脑子里这么多想法……

飘飘忽忽浑浑噩噩,脑海里一直回荡着周董的音乐:这感觉已经不对我最后才了解,一页页不忍翻阅的情节我好累,你沉默看我掉过几次泪多憔悴,而我心碎你受罪你的offer,我不配~~~!

面试过程和提到的问题大致如此,为了阅读体验有部分艺术修饰,但是内容全部都是真实的。接下来咱们说点正经的。

讲真的现在的我只想把头插到土里再也不出来,之前写过超级浓的鸡汤,讲学习方法,被技术号拿去直接顶置到现在;写过高赞,讲连连看的外挂,到现在还有人私信问我能不能做外挂的私活儿,一天上千的利润;作为培训讲师讲培训机构内幕,有上海北京的培训机构给到一小时1k了我不想去,想趁年轻进大厂做技术。在大家一顿商业吹捧之下就真的以为自己是个大佬了。

有极少数的人在评论区怼我说花拳绣腿,说我二本渣渣热衷于误人子弟,我都不以为然,心里想着等我有一天拿着大厂的offer回来证明自己!到今天总算知道他们说的是对的,打嘴炮和真有能耐是不一样的。之所以一直没有大佬来怼,可能是因为大佬不刷知乎。

今天这轮面试,算是被扒了个体无完肤,可以说是程序员面试的反面典型,当然我也不怕说出来,菜就是菜,吹水就是吹水,努力把吹过的水早日兑现,迟早有一天能成真正的大佬!

这次作为loser再说说在求职前期准备过程中暴露出的问题,望大家引以为戒。

1、尽量早早做好准备

面试不应该是准备好了才去,而是时刻都准备好了。如果非要说从什么时候开始准备离职跳槽,我的建议是半年。别像我一样,面试了才开始看算法和数据结构。

2、先找小公司面几次进入状态,再投大公司一举拿下。

我蠢到一开始就动用了我所有的人脉,投了bat及其他二线大厂所有的内推。算上字节跳动已经是我黄掉的第三个响当当大厂了,踩着大厂当垫脚石攒面试经,除了觉得自己蠢,我还觉得自己真特么牛逼。

3、你的简历,就是复习大纲

总有人拿网上找到的拿了bat offer的人提供的复习大纲复习,结果发现并没啥卵用。我这次字节的面试,他提出的所有的问题全部是基于我简历中的技能清单。

我认为很多人但凡能做到简历中技能清单描述的样子,就已经算了不起了。如果简历中感觉无料可写?我推荐一个好办法:

  1. 听说过名字,就写了解;

  2. 跟着帖子写过demo,就写熟悉;

  3. 项目当中用过,就写熟练掌握;

  4. 项目当中经常用,就写精通;

我就是这么写的,结果很显然,出来混,总是要还的,敢装逼,就活该被人凌辱。

4、警惕舒适区

不得不承认我在现公司呆的真的非常舒服,领导非常器重,项目和授课两不耽误,去大学实训总是受到学生的追捧,手里时不时还能接到价格公道的私活儿。

之所以想走,一方面是因为心中对大厂和技术的执念,另一方面是因为现在已经到了给自己规划的时间,碰巧赶上互联网寒冬是没有办法的事,但是我仍然坚信真正牛逼的人是不会被寒冬所阻拦。

最近的几波儿面试直接把我打到怀疑人生了,面试完后双目无神的望着天花板不知道该如何评价自己。授课到现在带过的学生虽然不多,但是送进一二线大厂的没有二十个也有十几个了(我们机构不造假学历,都是实习生进的),怎么我这个老师找个工作这么费劲?是道德的沦丧还是人性人扭曲?是大厂真的飘了还是我确实拿不动刀了?

“如果程序员对职场感到迷茫,对眼下的舒适感到不安,我建议他出去面试,不见得要走,但是你要出去,听听市场对自己的评价。

这句话是在一个求职公 众 号里看到的,我觉得不光程序员,任何职场人都该深以为然。我对职场虽不迷茫,但是面试一波儿就发现,我在毫无意识的情况下,在工作三年这个节点成长上已经被人甩下一大截,更要命的是对基础知识的掌握程度完全比不上应届毕业的实习生。

往后日子里赶紧老老实实看书,踏踏实实做事儿,早日兑现自己曾经吹过的牛逼。

文章目录
  1. 1. 1、尽量早早做好准备
  2. 2. 2、先找小公司面几次进入状态,再投大公司一举拿下。
  3. 3. 3、你的简历,就是复习大纲
  4. 4. 4、警惕舒适区