正式加入字节跳动。工号超级幸运,尾数四个六。然后办公环境也很好,这里的建筑都是办公区。公司配有各种小吃、饮料和免费咖啡。15楼有健身房。而且公司有三餐。下午三点半左右会有大妈推着车给大家送下午茶。听说入职后容易长胖。但是,如果你想健身,公司二楼还提供专门的健身餐。也可以预约周二周四的专业按摩服务,有效调节颈椎和腰椎。生活服务这么贴心,感觉只需要在这里努力就可以了,哈哈
其实我很早就跟朋友说要写一篇采访心得。包括我为什么要跳槽,为跳槽做了哪些准备,面试过程的一些分享。但是前段时间因为住院做了小手术,耽误了。今天刚刚好,现在处于熟悉期。晚上,我趁机完成了这篇文章,顺便也趁机完成了我们组新手村的任务。亲爱的有兴趣来字节跳动的朋友,请把你的简历发到我的邮箱里,我会帮你推进去。
你为什么想去字节跳动
其实这个跳槽不在我的计划中。只是在4月份,我无意中得知字节跳动上海要搬到合川路地铁站附近,心里突然一动。为什么?因为我家离合川路地铁站只有十分钟的路程。宇宙本身就有很高的声望,也就是说只要我能来到这里,我就能在不可能的三位一体中得到两个,在那里我的生活是最幸福的。于是5月,我开始悄悄准备采访头条。为了早上八点半起床,然后慢慢走到公司不迟到(可能是早来的那种)。
当然,这也是我想去字节跳动的原因。转换成自己的时候,也要想想为什么要跳槽去某个公司。为了工资?环境?平台?还是大公司的称号?记住,不管是为了什么,都是可以的。谈钱不伤感情。只有目标明确,心态坚定,才能围绕这个目标做好一系列的准备。面试的时候,每次面试官问我为什么要来字节跳动,我总是直接说离家近,如果这次不能见面,我会做好准备,以后再面试。反正你公司就在我家隔壁,你可能跑不了三五年,哈哈。
因为这种心态,我觉得我在面试的时候可以打得更好。这是一个相互选择的过程,在这个过程中,公司是相对固定的,因为它的招聘标准不太可能有太大的变化。举个我经常用来杀人的例子:我经常告诉别人,英语对于技术发展很重要。最新的技术文档需要英文阅读,有些翻译不准确,可能需要看原文才能明白是什么意思。当时会有人对我说,唉,我英语不是很好。我会在这个时候回来。没事的。你现在英语不好不是你的错,但是如果一年后,甚至两三年后我问你英语怎么样,如果你还跟我说你英语不好,那你就要自己检查自己的问题了。你根本不想学英语。英语怎么才能好?
以此类推,如果你根本就不想去这家公司,你怎么会来这家公司?如果你真的想去一家公司,这个时候你可能不符合要求,但是没关系,只要知道别人要求什么,就好好学习,做好准备,一年后,两年后,甚至三年五年后再去面试。人们最怕的不是达不到目标,而是没有真正的目标。所以,在跳槽之前,你要想清楚为什么,提前开始准备。
我准备了什么?
其实我已经很久没有正式面试了。三年前从舒云换到GIO的时候,因为简历上的相关技术太匹配,基本上都是和CTO聊天决定通过;后来我回舒云,和导演喝完咖啡回来。也就是五年左右,没有正式面试过。所以在准备投字节跳动之前,我投了几家公司做一些热身活动。记住,这个时候不需要任何心理负担。因为面试成功的可能性比较低,能面试的合适人选愿意看一下,万一你真的想跳槽,但是你喜欢的公司不喜欢,热身公司得到了录用,你也可以考虑看一下。而且这个时候你没有任何心理负担,因为反正你是来面试的,所以面试的时候表现可能会更好,所以可能最后得到的报价会比你想去的最后一个好?
当然不包括我。刚面试的时候被血虐,t-t,参加中间件大赛的时候和netty认识的。个人感觉对netty有所了解。结果面试官让我直接写netty的源代码结构,包括哪些大类,名字,以及它们之间的关系...我用卡夫卡作为消息队列来缓冲流量,保护系统。因此,我直接描述了卡夫卡的存储结构...比赛期间,我用了各种手段让程序免GC。因此,我不得不直接讲述各种GC算法的原理和应用场景...我们在……PolarDB比赛中写过KV,目标是RocksDB。因此,让我来描述一下RocksDB的索引结构...
当然,虽然他问的我基本都知道,知道应用场景在哪里,但是说到细节,就有点圈出来了。虽然我确定只要稍微看一眼就能搞定每一个细节,但是我受不了面试的时候不开口是不行的。这时候感觉自己好像成了年轻时的杨过。突然,一个金轮法王出现在我身边,对我说:“杨大哥,你的武功秘籍很多,不过我要说,向别人学习是很奇妙的,但是不能不杂。你最擅长哪种功夫?对付郭靖夫妇该用什么武功?”。是的,我知识面很广,可能听说过各种应用框架和新技术,但是我最擅长哪一个呢?虽然我深深知道斯卡拉、阿卡、Play、拉戈姆等。是我最好的技能,我忍不住,但没有人会问T-T。
覆水难收。虽然我和杨过一样帅,但是我得考虑整理一下生活中学到的东西,找出优缺点,然后针对面试。所以第一次热身面试后一周,我基本上梳理好了自己的知识结构。我大致按照以下结构做了一个思维导图:
JVM相关 运行时结构 GC算法 JVM调优编程语言 Scala Java数据结构与算法 表、栈、队列 树 散列 优先队列 排序 高级数据结构并发编程 Java内存模型 基本工具 无锁并发 反应式工具微服务 微服务设计 服务治理中间件 分布式缓存 消息队列 RPC数据库 关系型数据库 NoSQL NewSQL机器学习算法 推荐算法其中,JVM、Scala相关、并发编程、消息队列等。,我已经认真写好了;如果Java语言太简单的话,我是看不懂的。稍微看了一下数据结构,感觉脑子里尘封已久的记忆突然被唤醒了,就没做笔记。相关的微服务太熟悉拿不到,推荐算法太难拿不到。;与数据库相关的内容太多。但总的来说,指数结构在这里。拿到xmind后,可以根据自己的知识结构体系来完成或者修改,然后从中学习。甚至在面试之前,可以稍微看一下,加深记忆。(想得到我的索引笔记,关注我的微信官方账号,后台回复“知识索引”。)
之后又进行了复试。其实复试中技术相关的问题都不算太大。对我来说主要考验的是和说话技巧有关的东西。我有毛病。想的太多,想做的太多。其实问题不大,但是我喜欢跟人聊我不确定的事情,不管什么场合都跟人聊。比如我在和中间件团队打交道,但是最后面试的时候说因为之前的推荐算法对深度学习感兴趣,今年想考个在职研究生学习深度学习。但其实我这个时候为什么要这么说呢?你的头有点肿吗?而且他问了我一个手写代码的问题,我很久都没有想到。问题是如何计算根数2的值。我第一反应就是快,牛顿迭代法!但是当他让我把代码写在纸上的时候,我一直在努力回忆牛顿迭代法是什么,应该怎么用它来计算根数2。然后我一直在纸上推导导数。什么鬼东西...直到他提醒我这不是数学问题,二分搜索法是可以计算的,我才勉强开始写二分搜索法(内心OS:牛顿迭代法肯定比二分搜索法好!为什么不给我时间回忆牛顿迭代!)。这次给我暴露了另一个问题。好久没有手写代码了。没有IDE的时候,我基本什么都不是...写了半天,勉强弄了个版本,估计不是bug免费。所以,最后这家公司没有拿到报价。我已经很努力的给我推荐了。
之后我才意识到我面试的几个缺点。首先是说话要得体,不要谈与面试无关的话题;其次,我要练习我的手写代码。
在字节跳动的面试经历
其实我面试了两个职位。第一个位置感觉挺好的,面试官很友好,问的问题也挺到位,然后留给我的戏空挺大,顺利通过。见面的时候不能说话,越说越觉得位置不合适。所以朋友帮我推了一个新职位,就是我现在所在的数据平台部。一边的面试官年轻高挑帅气,基本都是问我简历的问题。当然,第一个问题让我说阿卡的时候,我真的惊呆了。完全不按套路出牌!我从没见过有人会问我阿卡!!!为什么会有人问我阿卡!!!心里一阵狂喜和激动之后,我先清理了一下心情,慢慢整理了一下脑海中的阿卡特征,不停地跳着,抬手喊着“说说我吧”。于是我们从线程模型入手,讲了它的M:N本质,Actor模型所依赖的消息传递模式,层级结构划分的监管责任,使其崩溃的故障处理,Akka集群支持的横向扩展等等。然后问了一些关于Akka的小问题,基本顺利通过。后来问了一下缓存相关的内容,提到了一个缓存雪崩的问题,一时没反应。问题其实很简单,就是突然有一堆请求访问同一个密钥,但是缓存里没有这个密钥。因此,所有请求将同时访问数据库,然后同时更新缓存。如何解决这种缓存雪崩效应?这个问题听起来似曾相识,似曾相识,但是我脑袋短路的时候没有想到。后来我才想起来Akka-Http-cache(以前叫Spray-cache)就是专门针对这种情况的。老外的论点是,这种问题叫恐慌效应,就是在第一个请求完成之前就提出了很多请求。一起转到同一个键(这种方法的优点是解决了父亲的问题,即许多对部分缓存键的请求(例如,资源URI)在第一个请求完成之前就到达了。)。文档中的这种方法意味着在缓存时,不要缓存一个值,而是一个未来。这样,对值的第一个请求被缓存。后续请求将访问这个未来,然后您可以向它注册一个回调,并等待缓存操作完成后再完成回调。当然,这个问题回答的不太好也没关系。后来你问了我一些关于JVM的问题,最后手写了一个算法问题。然后顺利通过。
之后的双面话基本都是围绕我的简历问的。我讲了当时做的推荐算法的原理和Spark的基本原理。然后最后做了一道算法题,顺利通过了(其实还有一些其他的题,只是忘了问的是什么……)。当然这个算法的实现也不是最好的。题目内容是十六进制的加法,实际涉及到单个字符的加减进位处理。这样很多事情都需要详细处理,出错的可能性很大。所以,我拿了个巧合。我先把所有的字符和数字转换成整数,然后加减整数得到结果,再把结果转换成十六进制的字符。虽然结果不是最优的,但是数量多了会溢出。但至少做到了,所以双方都很顺利。
三面,我也是先围绕我的项目问了一些相关的问题,所以回答比较平淡,但是还可以。然后他问我怎么做流量控制。问我流量控制!!!然后,我强迫自己压抑内心的喜悦,讲解了《反应式设计模式》第十六章流程控制的内容。可能是给了我这样的空房间,所以顺利通过了第三面。HR面试没多久就谈了一些技术以外的问题。
我马上到HR,当时面试后感觉还算稳定,但是等了很久也没有和我沟通关于录用的事情,有点不舒服...之后HR联系我说给我面试,说组长要见我。本来3+1字节面试还可以,然后突然加面试让我觉得有点不安,所以后面面试不如前面。其实后来回想起来可能会觉得之前的面试表现不好,无法确认报价,所以后面会有更多的面试。所以我当时心态不好,感觉没有以前果断了。后来第五次面试后,组长还是不确定,想加个交叉面试。这时候,我豁出去了。没关系,不涨也没关系。反正字节跳动就在我家旁边,只要庙不动,我就能进去。所以最后一次和隔壁领导聊的时候,还是比较好的。问题没有问什么特别的,只是仔细问了我最近的一个项目,优缺点和难点在哪里。然后沿着难点展开,为什么难,怎么解决,有什么解决方法,有什么优缺点。还好工作中还在思考,终于得到了一个很好的答案。所以终于在6月10号左右到了,我和HR决定发一个报价。
总结经验
在整个面试过程中,如果加上之前不合适的职位,总共有8次面试,前后跨度超过一个月。然后,今天,终于成功入职了。还是有点长。如果加上之前的两次热身赛,跨度可能接近两个月。说实话,我不是那种别人一眼就很喜欢的工程师。因为一直在小公司做小架构,主要编程语言比较偏,所以职位范围比较窄。其实我今天看了两个和工作相关的项目,一个围棋,一个python。我的scala技能以后可能会浪费很长时间...不过没关系,呆在离家近的地方就好,跳出舒适区看看别的风景对我来说也是好事。
最后,我总结了为什么我能在字节跳动成功。首先,我的基础其实还可以。虽然复试的面试官觉得我基础不好,但其实我深入的时候会把思路、结构、来龙去脉融入整体。明明就算忘了,也能很快插上系统,彻底重新理解;其次,我有自己的拳头产品,就不要求面试了。当被问到斯卡拉、阿卡、Play、Lagom或者反应式建筑的时候,只要嘉禾品神不在这条街上,我就是这条街上最美的孩子!!!终于知道为什么要去这家公司了,就算不去也不会损失太多,所以面试的时候可以谦虚冷静,这样才能玩的好。再说,反正公司就在我家旁边。这次,没事了。回头见。
这些经历转换到你这边:如果你说你现在基础不好,我会说没关系;但是如果你告诉我,一年两三年后你的基础不好,你要反省自己吗?如果你说你现在没有拳头产品,我会说没关系;如果一年两三年了还是没有拳头产品,看我的文章有什么用?那么心态的问题可能需要自己调整。只要你有基础,有高水平,然后心平气和的来面试,相信你一定能面试成功。
●数字202,直接输入该条的数字
●输入m获取文章目录
推荐↓ⅵ
程序员求职面试
1.《字节跳动面试 面试字节跳动的一点小经验》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《字节跳动面试 面试字节跳动的一点小经验》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guoji/710241.html