一直都说字节跳动有点难,这次体会了,而且被怼得体无完肤了~

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

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

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

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

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

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

时间到了,画面里出现一个面积很小的房间,面试官坐在里面调节姿势和座椅靠背。

这不是我第一次,但我却比第一次还紧张。面试官跟我的一位闷骚朋友很像,长相、气质、说话声音如出一辙…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

啊~,好深。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后小编为了再战字节特地整理了这份**【Java Github 超硬核面试 “备战” 手册】!**除了Java各种技术专题知识、大厂面试真题,我也会分享一些近些年自己开发和工作过程中的一些感悟、心得和无奈。

仓库大部分内容来自我近几年的收集和整理,整体文章思路也是围绕着【面试备战计划】来进行整理的,主体内容包含:职业规划篇,跳槽篇,实操篇,一线大厂面试题篇,以及高频面试必备综合篇等知识内容。需要的关注公众号:“程序员白楠楠”获取

一线大厂面试题篇(350+题)

JVM面试题汇总(100+题)

Mysql面试题汇总(一)

Java高频核心面试题库(1000+题)

需要的关注公众号:“程序员白楠楠”获取