金九银十面试了 3 家大厂 Java 岗,我得到的知识总结
前言
先给大家看看我所面试的这几家大厂的任职要求:
字节跳动高级工程师:
1、计算机相关专业统招本科及以上学历,3 年以上云服务开发经验;
2、扎实的编程基础,精通 Java 开发语言,熟悉 JVM,web 开发、缓存、消息中间件等核心技术;3、具备大型分布式,高并发高可用系统的设计和优化经验;
4、精通 Java 相关的主流开源框架,能了解到它的原理和机制;
5、具备产品意识,思路清晰,良好的沟通能力和技术学习能力
研发架构师:
1、扎实的 java 基础,精通 Java EE、数据库、缓存、消息队列、索引等技术;
2、精通分布式架构,熟悉主流的微服务框架,如 Spring Cloud、Dubbo、Zookeeper 等,并精通其原理;
3、精通 linux 常用命令,网络协议,jvm、tomcat、nginx 等调优;
4、具备较强的推进能力和责任心,优秀的沟通能力和团队精神,热爱技术工作;
5、有高并发、高性能、高可用大型网站构建经验者优先;
6、有企业运营管理类 ERP 复杂业务系统搭建经验者优先。
高级工程师:
1、6 年以上工作经验,作为核心成员参加过大中型互联网 Web 应用开发,有互联网金融相关的贷款、支付、清结算方面开发经验优先;
2、JAVA 基础扎实,理解 io、多线程、集合等基础框架,对 JVM 原理有一定的了解;
3、熟练掌握 Oracle 数据库,掌握 SQL 性能调优,熟悉数据库原理,有读写分离、分库分表经验;
4、对各种开源的框架如 Spring,spring mvc,mybatis ,spring boot 等有深入的了解(框架提供的特性及其实现原理,看过源码);
5、熟悉分布式系统及常用组件:Dubbo,Zookeeper,MQ,FastDFS,Redis、ELK 等,理解 RPC 底层实现原理。
有人会问,经验要求有悬殊,怎么都可以去面试?
其实,做咱们这一行的都懂,很多简历上的工作经验都要靠点包装,1 年到头谁没个 3/5 个月加班的?要想简历上好看,包装一下都是正常的,谁认真谁就输了!
说白了我到现在工作差不多 4 年多点,要我去面试 6/7 年的岗位,我还真不虚。
好了,下面来说正事。
简历
网上找的简历,截了一张图
简历这一块我倒是觉得没什么难度,改包装的包装一下,自己做过什么项目就都写上(小声的说下,其实你有关系比较密切的同事或朋友参加的项目,你也能写上,很多细节问都问得来。当然,如果你有较为丰富的项目经验,可以不这样做),总而言之,项目经验这一块是要比较丰富的,总结得也要好!
关于熟悉、精通的技术这块,最简单不过了,人家岗位需求什么你就写什么呗!只是写的时候自己稍微总结一下,外加自己的一些擅长的技术点缀,看起来就不会像是在抄招聘信息了。
其他地方就可以言简意赅了,注意:工作经历这一块不要显得你跳槽特别平凡,意思你懂的!
说明:这里不是叫大家怎么去撒谎,距自己和面试公司的情况而定!出去以后不要说是为师教的!!!
项目经验介绍
简历中提到了项目经验,这里就多说一些。
项目经验丰不丰富,体现的是你技术的运用程度,参与的项目越多,就表明你能力越强。(这里指的是真正在做项目的人,划水的除外)
还有一点就是,你关于每一次项目的总结,这里要体现你的责任心,就是你对于项目的预期、计划、你付诸的行动及达成的结果。这一地就是马上讲到的,在面试中介绍项目经验的 STAR 法则。
STAR 法则
背景,设计,行动,还有结果。
一般面试官在面试我们的时候都会问一个问题,请你挑一个你认为做得好的项目,来给我讲解一下,这个时候,我们一般挑的一个我们最近做过的对我们的这个业务,对我们技术的指标有比较明显提升的一个项目。
第一就是背景。我们在讲解这个项目之前呢,首先要跟面试官去讲解我们为什么要做这个项目,做这个项目的背景是什么。比如说,我们的业务需要去提升用户的留存,然后去提升我们整体的用户体验等等,以及我们的系统在哪里遇到了瓶颈,如果不做可能会对我们的业务产生什么影响。这是我们为什么要去做这个项目。而不要跟面试官聊说,因为公司安排我做这个,我就做这个。
第二就是设计。我们在项目的过程中需要去根据我们业务的特点,我们用户的特点,比如说我们用户的各种特征,来去设计我们的这个项目,然后去达成我们的业务目标,在技术指标上面,我们需要去考虑我们整体系统的访问量,我们的 QPS,我们的承载量,我们的这个底级底层存储的容量,以及我们后续未来半年到一年的时间,我们系统容量成长程度是不是需要提前准备扩容等等。
第三就是行动。行动就是在整个项目过程中,我们是如何去推进的,保证我们项目的顺利进行。在这里面是要去体现我们整体的项目管理推动能力,以及我们的解决问题的能力。
最后是我们项目的结果。有很多小伙伴其实对我们项目的结果并不怎么关注,其实这是一个错误的想法,首先我们在跟面试官去讲解我们项目结果的时候,不能以这种比较笼统的概念,比如说,我的这个用户的留存提升了,我的系统响应变快了等等。我们需要给出一些比较具体的指标,比如说,我的这个用户留存从 40%提升到了 45%,我的系统响应时间从一秒降低到了几百毫秒,以及我的这个系统从原来的稳定性从 99.9%提升到了 99.99%等等,在这里是要去体现出来我们对于我们整个项目结果的关注度以及我们对于业务的关注度。
技术问题
一般情况下,面试的技术问题有三个来源:
1、你所做项目中应用到的技术;
2、你简历职业技能中体现的技术;
3、公司任职要求中的技术。
↑↑↑做好笔记没???↑↑↑
这下知道怎么做准备了吧?
看看最前面的任职需求,其实很多常用前沿的技术都是重复的,大多数公司要考察的也无非是这些了:
具体技术问题有 Mysql、Redis、MQ、分布式、Nginx 等等,比如说像 Mysql 的索引、聚簇索引、非聚簇索引、回表查询、MVCC、分布式事务事务等等一些的原理,比如说 Redis 的主从同步、集群、哨兵等等这一些,MQ 的方案选型,还有 Nginx 的日志如何排查...
说在最后
我这里刚好有一套热门技术点的技术面试题,需要的话可以点击这里即可获取到文章中的文档,资料!
微服务
Dubbo
springboot
springcloud
性能优化
Nginx
ActiveMQ
RabbitMQ
Kafka
Memcached
Redis
开源框架
Spring
SpringMVC
MyBatis
如果这篇文章能够帮助到你,希望您能点赞转发加个关注,支持一下小编!
需要的话可以点击这里即可获取到文章中的文档,资料!
评论