小编现今五年开发经验,前前后后为了进字节跳动面试八次(字节跳动旗下—抖音,头条的offer都被hr因学历而被拒,最后的火山面幸运的被录用,拿到offer,真正的“八面”字节!)
本文前半部分主要分享面试总结,后半部分分享程序员我个人架构开发之路的学习经验,文末有惊喜哦。
大型互联网公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导。虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法。但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求。如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余。
一般来说,字节跳动的面试会有两轮的技术电面,分别交叉检验你的技术基础。后面还有两轮的现场技术面试,主要检验你的项目经验。但从知识体系的角度来看,字节跳动面试对于知识的考核可以分为三个层次:对于基础知识的考核、对于项目经验的考核、对于项目深度的考核。
基础知识考核
在这个层次上,主要考核你对 Java 语言本身原理的理解以及各种框架的原理理解。对于 Java 开发岗位上来说,这些知识点包括但不限于:
集合 HashMap 的原理,与 Hashtable、ConcurrentHashMap 的区别?
Java 线程池的核心属性以及处理流程
Java 并发包原理、Synchronized关键字、锁
线程的生命周期
JVM类加载机制
JVM内存模型
JVM分代以及垃圾回收机制
Spring Bean 容器生命周期
Spring AOP 原理
Dubbo 请求流程以及原理
数据库 SQL 优化、数据库索引、索引原理
看到这么多的知识点,我一下子就懵逼了,这么多得看到什么时候才看得完啊?但后面我想明白了,其实你不需要全部都懂,但需要了解大部分知识点,并且在这大部分知识点中,还需要有部分是了解得非常深入的。如果达到这个水平,基本上都能通过考核。
对于基础知识的考核多出现在阿里的前两轮电话面试上。对于这块,你事前把网上常见的面试题目看一遍,多面试几次基本上都没有问题。
项目经验的考核
当你成功通过基础知识的考核之后,你会进入下一关的考验:项目的理解程度。
面试官首先会让你选择一个你最拿手的项目,画出架构图,之后的一切问题都从这个架构图触发。当你画出架构图之后,你肯定需要解释清楚每个模块的作用,每个框架的原理以及与其他框架的区别。
例如我就用我做过的一个搜索项目作为经典项目,与面试官探讨。
项目中用到了 Kafka 这个框架,那么面试官就会问 Kafka 和 RocketMQ 之间的区别是什么,它们两个有什么不同?
项目中还用到了 Canal 这个阿里巴巴开源的框架,那么面试官自然会问这个东西是干嘛的,原理是怎样的?
项目中还用到了 Zookeeper 作为协调者,那么 Zookeeper 在这个项目中的作用是什么,扮演了什么角色?
对于「项目理解程度」的考核会发生在技术面试的三四轮。在这个层次上,你必须要有一个拿得出手的项目,并且对其中的所有框架以及原理都了如指掌,否则你会被虐惨。
项目深度的考核
通过上一轮对于「项目理解程度」的考核后,基本上你对整个项目都会有一个全面的认识,应用层面上的问题基本上不会难倒你了。但在「项目思考深度」的考核上,就不仅仅只是考核应用层面上的问题了。
还是用我做过的一个搜索项目作为例子,其中 Canal 这个开源框架暂时是没有实现集群这个功能的,那么面试官就问了:
你如何去改造这个项目,从而实现 Canal 的集群功能?
这个时候,你会发现你懵逼了,因为你从来没有去思考过这个问题。你所有的工作内容都是在想如何使用开源框架,而没有进一步思考这些开源框架好不好,有什么可以改进的地方。
所以,在这一个层次上考核的是你对开源框架的思考深度,这些框架到底好不好,好在哪里,不好在哪里,有什么可以改进的地方。
对于「项目思考深度」的考核同样发生在技术面试的三四轮。在这个层次上,你不仅要对项目本身理解足够深刻,还要跳出项目本身,去思考开源框架本身的问题。
总结
当我们回过头来总结,你会发现这三个层次都是层层递进的,而且逐步深入。虽然这是面试中总结出来的经验,但是这却是一个很好的学习指引。读者可以自己自查,看看自己现在是处于哪个层次,这样在工作中也可以不断地向更高层次迈进。
对于我来说,我缺乏的是对于项目的思考深度,很多时候都是业界觉得好,那我就用了。但是作为一个高级开发,甚至是一个即将成为架构师的高级开发来说,你必须知道为什么要用这些框架?它有什么问题,我们能不能做得更好?只有这样,我们才能有所成长。
一、阅读源码
阅读、分析源码是程序员最基本的码代码能力也是码农的根本所在,学习经典源码中所用到的经典设计思想及常用设计模式,能够帮你了解大牛是如何写代码的,从而吸收大牛的代码功力。在字节跳动面试中,MyBatis,Spring等框架的底层原理是经常会被问到的
二、分布式架构
字节跳动有很多大团队,这种大团队里有很多小团队,到小团队之后,做的业务都不相同,如果想立足成为一线互联网公司中的万能选手,最主流的分布式架构中有很多知识都是必须要去了解与学习的。并且在阿里面试过程中,面试官会问到实际应用场景的问题:比如微服务化、用户量、并发量、业务复杂度以及可扩展程度等,这里不多赘述。本人提供一个分布式架构的学习思路也是自己目前还在学习中的体系:
三、微服务架构
微服务是现在互联网架构技术中最火热的话题之一,也是本人目前正在学习研究的方向。在字节跳动面试过程中,面试官很少会问到关于微服务相关的问题。但作为一名开发者,一名有技术梦想的程序员微服务架构是现在必须要去了解的主流技术,小编给自己制定了一个微服务技术的学习计划:
四、并发编程
并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。目前网上没有系统的全面的并发编程学习大纲,我搜集了很多资料总结出来一个最全面的学习大纲:
五、性能优化
性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,特别是阿里巴巴这样的一线互联网公司最为注重,因此想进入阿里,性能优化一定是要去深入学习与理解的一环,本人在性能优化这一块虽然不能算专家,也可以自信的说是精通了(注意:自己的简历上一定不要写精通xxxx,要不然面试官会怼死你。好在本人这一块还算自信)
一名开发人员必须有适合自己的兵器,也就是工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。下列是我自己常用的开发工具:
- Maven的,项目管理
- 詹金斯,持续集成
- 声纳,代码质量管理
- Git的,版本管理
最后也是小编这么多年来一直在学习视频资料和文档资料分享给大家
虽然没有走进阿里,但字节跳动也不错啊,压力会比阿里小一点。
Java架构师对应学习资料免费领取—阿里P7级
全套Java架构师进阶视频教程、阿里巴巴出版全套架构学习文档
JAVA高级架构师包含:微服务架构,亿级高并发,分布式架构,源码剖析系列,项目实战,设计模式实战,数据结构与算法,消息中间件,并发编程多线程,服务器系列,数据库,分布式事务,主流框架,单点登录,日志分析,全文检索,任务调度,权限管理,性能优化,集群,团队协作,负载均衡,安全架构,分布式事务解决方案,健康项目实战,秒杀系统实战,微服务电商项目实战,在线教育项目实战,P2P金融项目实战,集群高可用,图形数据库,虚拟机原理,缓存架构实战,脚本编程,系统架构设计,SpringBoot,SpringCloud,Nosql,Mybatis,RabbitMQ,RocketMQ,ActiveMQ,Kafka,Git,Elasticsearch,Docker,K8S,Dubbo,Nginx,Tomcat,Maven,Solr,Jenkins,Springmvc,CAS,ElasticSearch,Ehcache,SSO,SpringSecurity,SpringData,Activiti,Quartz,Mysql,Redis,MongoDB,Zookeeper,Mycat,Oracle,VueJS,RectJS,AngularJS,NodeJS,Hadoop,Hbase,Spark,HttpClient,Json大型分布式综合电商项目实战等视频教程
对于上面对应P7架构学习资料感兴趣的工程师朋友们可以转发此文关注我私信回复【资料】即可免费获取
对应阿里P7技术栈—Java核心知识体系文档
Java核心知识体系把每个知识点解析的很深,Java程序员需要学习的知识在这边文档里面都有概括到如:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Hetty与PC、网络、日志、Zookeeper、Kafks、Rabbi tMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARIN、机器学习、云计算。
阿里巴巴整理架构PPT、PDF学习文档免费分享
对应阿里P7架构视频全套视频
对于上面对应P7架构学习资料感兴趣的工程师朋友们可以转发此文关注我私信回复【资料】即可免费获取