字节跳动面试官揪着源码一直问,然后......

最近,我的一位朋友在找工作,已经拿到了美团、快手等公司的Offer,准备选择其中一家入职了。
后来他又接到了字节跳动的电话,通知他去参加三面。从二面到三面之间隔了挺久的,他以为都没戏了,结果就收到了通知。
由于已经拿到了很多大厂的Offer,他对这次面试还是挺有信心的。但是回来之后,表现的特别沮丧。

一问之下,原来是面试官问的一些问题他回答的不好,他说面试官揪着源码一直问,但是自己并没有深入看太多的源码,所以回答的不是太好。
他给我总结了一下面试官关于源码部分的问题,主要题目如下:
1、你看过那些源码吗?
2、那你能讲讲 HashMap的实现原理吗?
3、HashMap什么时候会进行 rehash?
4、结合源码说说 HashMap在高并发场景中为什么会出现死循环?
5、JDK1.8中对 HashMap做了哪些性能优化?
6、HashMap和 HashTable有何不同?
7、HashMap 和 ConcurrentHashMap 的区别?
8、 ConcurrentHashMap和LinkedHashMap有什么区别?
9、为什么ConcurrentHashMap中的链表转红黑树的阀值是8?
10、还看过其他的源码吗?Spring的源码有了解吗?
11、SpringBoot的源码呢?知道starter是怎么实现的吗?
以上,就是我这位朋友被面试官血虐的过程。全程围绕源码展开。
那么,为什么面试官这么喜欢问源码?作为面试者你又为什么需要看源码呢?

难道是为了面试吗?我觉得不是!我觉得看源码有以下几个好处:
1)可以从源码中学习
比如我们看JDK的源码,其中会有很多关于性能优化、防并发的例子,还有很多地方用了设计模式,这些都是很好的可以用来学习的代码。
对于初学者来说,很多代码格式、命名等都是需要学习的,最好的办法就是通过开源代码来学习。
2)深入源码才能懂得原理
有的时候,我们使用的第三方的框架,中间件等,我们要想了解他们的原理,最有效的办法就是直接看源码。源码是不会骗人的。
3)更好的解决问题
只要是人写的代码,就可能存在bug,别人的开源代码也一样,通过阅读源代码可以更好的定位和解决问题。
4)为了找工作
为什么面试官喜欢问源码,因为这能提现一个面试者是否爱钻研,是否愿意深入原理。而企业需要的恰恰是这样的人!
那么如何学习源码呢?有几点建议:
1)先从全局出发
不要一上来就直接进入到细节,先通过文档、代码结构、架构分层等方面入手,大概了解一些各个模块的代码都是什么功能。这样在后续深入学习的时候可以刚加便于理解和查找响应代码。
2)从问题出发
深入学习之前,最好带着一个问题,比如学习HashMap的源码时候,你带着问题『什么时候会进行rehash』,这样你就可以围绕自己的问题逐渐的深入展开。从点到面,逐步扩展。
3)面向debug学习
在源码学习过程中,也可以通过调试的方式学习,这样可以更好的查看代码调用过程,执行情况,运行时变量等。更加方面理解。
4)做记录
最后,要勤于记录,把自己遇到的问题和思考记录下来,方面后面再次复习和查看。
好了,希望大家都养成阅读源码的好习惯,也希望大家遇到所有源码类面试题都可以轻松搞定。

最后,在这里分享一些框架源码学习路线,有了路线,也许可以在前期降低一点门槛。

原文地址:https://blog.51cto.com/14442094/2422886

时间: 2024-11-05 17:34:20

字节跳动面试官揪着源码一直问,然后......的相关文章

面试必备:ArrayList源码解析(JDK8)

面试必备:ArrayList源码解析(JDK8) https://blog.csdn.net/zxt0601/article/details/77281231 概述很久没有写博客了,准确的说17年以来写博客的频率降低到一个不忍直视的水平.这个真不怪我,给大家解释一下. 一是自从做了leader,整天各种事,开会,过需求,无限循环.心很累,时间也被无线压榨 二 我本身也在学习一些其他的技术,比如ReactNative,也看了半天的kotlin,撸了几个groovy脚本.gradle插件. 三 是打

字节跳动面试总结(2019年8月)

个人简介 本人坐标南京,16年毕业,在某一传统行业从事JavaWeb后端开发,三年工作经验.出于技术焦虑.能力成长陷入瓶颈.对体制内的文化和氛围无法适应等原因,决心换个环境和工作,进入互联网行业,继续自己的技术追求之路.19年8月应聘字节跳动公司的后端研发工程师岗位,现对经历的4轮技术面和1轮HR面做个总结. 面试经历 每轮技术面时长40min-1h不等,可能一次一轮面试,也可能两轮连续进行.每轮先以简单的自我介绍开场,然后面试官根据个人的工作经历和技术能力进行提问,最后预留20min~30mi

腾讯、网易云、字节跳动面试点总结—AMS在Android起到什么作用?

本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: AMS在Android起到什么作用,简单的分析下Android的源码 心理分析:这道题在发生在大多数场景下.面对这道题 很多求职很茫然,不知道该如何说起.AMS本身比较复杂难以理解.工作多年也很难弄清AMS的作用,其实我们大可从以下几点入手组件启动.进程切换.Crash异常入手 求职者:AMS难以表述 我们就从最熟知 的Activity启动入手,逐步深入和分析,用定力告诉面试官,我层深入研究过.接下来我们从五条

android-从官网下拉源码(ubuntu)

今天终于成功的从谷歌官网上下载了android 源码.中间折腾了好久,最终总算有所收获 1.下载repo curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 如果你ubuntu下还没有安装curl,你可以使用如下命令下载 sudo apt-get install curl 然后给repo设置可执行权限 chmod a+x ~/bin/repo 2.repo init 到你存放源码的路径 参考网上的资料,

面试必备:HashMap源码解析(JDK8)

1 概述 本文将从几个常用方法下手,来阅读HashMap的源码. 按照从构造方法->常用API(增.删.改.查)的顺序来阅读源码,并会讲解阅读方法中涉及的一些变量的意义.了解HashMap的特点.适用场景. 如果本文中有不正确的结论.说法,请大家提出和我讨论,共同进步,谢谢. 2 概要 概括的说,HashMap 是一个关联数组.哈希表,它是线程不安全的,允许key为null,value为null.遍历时无序. 其底层数据结构是数组称之为哈希桶,每个桶里面放的是链表,链表中的每个节点,就是哈希表中

java官网门户源码 SSM框架 自适应-响应式 freemarker 静态模版引擎

来源:http://www.fhadmin.org/webnewsdetail3.html 前台:支持(5+1[时尚单页风格])六套模版,可以在后台切换 官网:www.fhadmin.org 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +sp

2019字节跳动面试时手撕代码题(持续更新~)

1. N 阶乘末尾0的个数. 输入描述: 输入为一行,n(1 ≤ n ≤ 1000) 输出描述: 输出一个整数,即题目所求解法:要判断末尾有几个0就是判断可以整除几次10.10的因子有5和2,而在0~9之间5的倍数只有一个,2的倍数相对较多,所以本题也就转换成了求N阶乘中有几个5的倍数.也就是每多出来一个5,阶乘末尾就会多出来一个0,这样n / 5就能统计完第一层5的个数,依次处理,就能统计出来所有5的个数.同一个思想两种写法. 题解: 要判断末尾有几个0就是判断可以整除几次10.10的因子有5

mysql官网下载源码安装包

redis相关原理及面试官由浅到深必问的15大问题(高级)

1.redis是什么? redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中) 使用java对redis进行操作类似jdbc接口标准对mysql,有各类实现他的实现类,我们常用的是druid 其中对redis,我们通常用Jedis(也为我们提供了连接池JedisPool) 在redis中,key就是byte redis的数据结构(value): String,list,set,orderset,hash 每种数据结构对应不同的命令语句~ 2.redis