各位牛客网的同学们大家好,我是字节跳动Android面试官——英短侠;
在字节跳动抖音电商部门担任Android的一面和二面面试官已经3年了,
期间面试过几百个校招实习生或者应届生,多多少少总结出了一套校招面试经验;
现在我年纪也不小了,希望我的这些经验和知识可以帮助到全国各地的应届毕业生找到工作,
也算是自己为社会和公司作出的一点小小的贡献吧;
Android面试的知识点非常宽泛,
包括【 计算机基础、网络基础、数据库基础、编程语言基础、算法基础 】共计5个方面;
因此仅靠一篇文章就把上述话题的知识点讲清楚是不可能的,
所以我准备持续花费自己连续几个月的时间,下班以后开始一篇一篇地写Android校招面试宝典;
大家也可以添加我的【微信:yingduanxia】,了解更多的面试知识或者投递简历;
也可以关注我们团队的【微信公众号:喵喵客户端内推】,关注我们团队的最新信息;
第一集:计算机基础知识(1)
无论从事哪一种IT工程师,计算机基础都是一面的必问知识,
他就好像切菜和洗锅一样,是厨师行业的最基本的必备技能;
计算机基础问题往往是我在进行一面的时候问的第一道题,
根据面试者回答的这第一道题的答案,面试官就能大概知道面试者的计算机水平高低如何;
计算机基础知识主要包含以下方面:
(1)计算机的硬件组成,以及各部件的工作职责;
(2)计算机的软件组成,以及各种软件的主要功能;
(3)任务并发与各种锁;
我们分成3集介绍以上三个话题的知识要点;
(1)计算机的硬件组成,以及各部件的工作职责;
字节跳动的面试会考察面试者的综合水平,而不仅仅是对知识点死记硬背的能力,
所以我们面试官在面试的时候很喜欢结合理论和活用能力,问一些很开放性的题目,以考察面试者是否真正掌握了知识;
关于计算机的硬件组成问题,我喜欢这么问:
1问:一台电脑需要哪些硬件组成?
冯·诺依曼模型:运算器、控制器、存储器、输入设备、输出设备;
你也可以从生活认知角度回答这个问题,电脑 = 主板+电源+CPU+内存+硬盘+显卡+显示器、键盘、鼠标等输入输出设备;
无论是家用台式机或者笔记本,还是Android手机或者苹果手机,其本质上就是都是一台计算机;
手机也是计算机,只是手机的电子器件集成密度比家用台式机或者笔记本更高,单位造价也更贵,
所以手机也一样有CPU、内存、硬盘、IO设备;
2问:内存和硬盘有哪些区别?内存溢出和内存泄漏分别是什么?计算机只有硬盘没有内存会怎么样?
功能性质不同,内存是CPU的工作场所,缩写是RAM;硬盘是暂时不用的文件信息的储存场所,缩写是ROM;
材质性能不同,内存是造价更贵的半导体材料,读写速度很快;硬盘是磁性材料制造,读写速度一般;
储存容量不同,内存的空间一般只有8G或16G,但是硬盘则可以达到1T;
内存溢出:out of memory或OOM,是指程序在申请内存时,没有足够的内存空间供其使用;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出;
内存泄***>:memory leak,是指程序在申请内存后,无法释放已申请的内存空间;单次内存泄露危害可以忽略,但内存泄露堆积后果很严重,因为无论多少内存,一旦内存泄漏时空,内存空间迟早会被耗光;memory leak最终会导致out of memory;
有关内存溢出和内存泄漏的知识:https://blog.csdn.net/buutterfly/article/details/6617375
计算机没有内存的话,理论上也可以运行;
内存的职能是在CPU工作的时候为CPU提供数据快速读写的场所,如果CPU在工作的时候没有内存,那么数据就要写入到硬盘当中,而硬盘的读写效率不高,因此导致CPU的工作效率降低;但是理论上失去了内存的CPU也是可以用硬盘代替的;
眼界更加开阔的面试生,还可以从计算机行业发展的角度回答这个开放性问题,
比如如果一个没有内存硬件的计算机世界,电脑的造价会大大下降、硬盘的读写速度性能会被迫提高、CPU的更新换代发展会因为失去了内存的高效辅助而发展迟缓......
我们喜欢有理有据的天马行空的答案,因为只有真正掌握知识的面试者才能回答出眼界开阔的答案;
3问:CPU越多越好吗?进程和线程是什么关系?线程状态之间如何转换?
CPU是不是越多越好,要根据实际使用场景来辩证地回答,
面试官问这道题的原因是考察面试者是否真正掌握了CPU的功能作用知识;
如果CPU核数越多,那么处理多进程多线程的并发能力就越强,同时耗能也越高,因为CPU是最耗电的部件;
而如果电脑只有少数几个线程在运作,不存在明显的并发压力,那么多CPU就没什么好处,只会耗电更多;
CPU的核心数数量选择问题可以参考:https://www.sohu.com/a/253603646_505888
进程是资源分配的最小单位,线程是CPU调度的最小单位;
但是面试者需要对上述抽象的表述展开解释,以展现自己真的了解了进程和线程之间的关系,
有一篇文章很真实和生动地描述了两者的关系:https://www.zhihu.com/question/25532384
线程状态包括:初始/运行/阻塞/等待/超时等待/终止 六种状态;
面试官希望考察面试者对线程知识的掌握程度,是否明白线程状态切换的目的和时机;
这篇文章很详细地介绍了线程状态的有关知识:https://blog.csdn.net/pange1991/article/details/53860651
以上就是我在面试过程中经常发问的第一道题目,有理论概念的介绍,也有开放性题目;
考察的是面试者的计算机基础能力,也是考察面试者基础知识扎不扎实的一道很基础的题目;
下一集我们会讲(2)计算机的软件组成,以及各种软件的主要功能 的内容,欢迎期待;
欢迎加我的【微信:yingduanxia】,或者关注我们【微信公众号:喵喵客户端内推】,
我会不断地更新帮助校招同学面试的知识文章,大家也可以在我这投递简历内推;
目前我们抖音电商团队正在大举招聘校招实习生和应届生;
欢迎加微信发简历进一步了解;
文章版权所有,复制盗版必究;
全部评论
(4) 回帖