大厂面试准备【java】

大厂面试的基本流程

以下是一些大厂面试的基本流程,大家可以参考下:

字节跳动

字节被称为宇宙条,源于面试难度变态。

招聘分五轮: 笔试 + 三轮专业面 + 一轮 HR 面

笔试:纯算法题,3-5 个,一般完成 1-2 个过

一面:基础面,计算机专业基础,一般根据简历上信息问(项目)+ 算法

二面:项目经历+岗位方向基础+算法

三面:还是项目经历(发现了什么)+ 专业知识

四面: HR 面,HR 面都差不多,主要关心为什么来、 职业规划、兴趣爱好、个人管理等等

总结

字节面试官一般很有耐心(时长 1 小时+),问的也会很细(比如 C++ sort 函数怎么实现 的),

十分考验专业功底。

算法要求不高,剑指 offer 难度。但一定要会,不会的一般都挂了。

字节的面试效率很高,一般第二天就会下一面,有时候直接下一面(不给太多时间准备)。

阿里

笔试 + 三技术面 + HR 面

笔试: 算法 + 其他, 难度较大

一面: 基础

二面: 项目

三面: 项目

HR 面

总结

  1. 阿里的整理难度偏大,无论是笔试还是面试

  2. 面试不一定有算法题

  3. 反馈周期, 2 - 7 天

腾讯

流程:笔试 + 三技术面 + HR 面

笔试:(不一定有)

一面: 计算机基础 + 算法

二面: 项目 + 技术 + 算法

三面: 项目深入

HR 面

总结:

腾讯的池子可以让人面上十来回。一般某一次挂了,可能过段时间又被其他部门捞起来,继续安排

面试,甚至面的岗位不是你投的(论简历的特效) ;

一般 2-5 天一轮,线下的话当天或隔天 ;

每轮面试大概一个小时左右,每轮有 2-3 个算法 ;

网易游戏

流程:笔试 + 两轮面试

笔试: 算法题,互娱的难度不大,雷火稍大

一面: 基础 + 算法

二面: 综合面,项目、情景题、基础

总结:

一面是远程,二面线下(也可能远程,概率小)

面试前需要准备:

  1. **Java 八股文:**了解常考的题型和回答思路;

  2. 算法:刷 100-200 道题,记住刷题最重要的是要理解其思想,不要死记硬背,碰上原题很难,但

大多数的解题思路是相通的。

  1. **项目:**主要准备最近一家公司所负责的业务和项目:

    项目的背景,为啥要做这个项目;

    系统的演进之路,有哪几个阶段,每个阶段主要做了什么;

    项目中的技术选型,在项目中使用一些工具和框架时的调研,为啥选这个;

    项目的亮点:就是你在项目中做过最牛逼的事,复杂的需求方案设计、性能优化、线上问题处

    理、项目重构等等;

  2. **架构设计:**主要是平台化的一些思想、DDD 领域驱动设计思想,随着经验的增加,这块会越来越

重要。

  1. **项目管理:**主要是在主导跨团队的项目时,如何高效的协调好各个团队的工作,使用哪些方法来

保障项目的按时交付。在项目遇到困难时,作为项目负责人如何应对等等。跟架构设计一样,这

块也是随着经验的增加越来越重要。

  1. **通用问题:**几个比较容易被问到的问题是:1)为什么离职;2)在上家公司哪些能力得到了成

长;3)平时怎么学习的?

  1. **问面试官:**每次面试最后面试官一般会问有没有什么想问的,如果不知道问什么,可以问下团队

当前负责的业务是什么?主要面临的挑战是什么?

自我介绍

自我介绍时,立即全面抛出技术栈和亮点

在面试的开始阶段,面试官大概率会让候选人自我介绍,这部分别的不用说,就直接根据上文给出的

简历上列出的总纲性要点介绍自己,如下给出范例说辞。

先说技能和 JD 的匹配度。

我叫张三,今年 25 岁,18 年从交大大学毕业,计算机系,目前有 3 年 Java 开发经验(这个是 jd 上

的要求),有 Oracle,MySQL 的开发经验,有 xx 等技术经验(这些经验也是 jd 上的要求)。

再说自己的亮点。

在项目里,我用过用索引和执行计划等进行数据库调优经验,有 JVM 方面排查 OOM 的经验,大数据

方面,用过 Spark 等框架,分布式组件方面,用过 Redis 和 Dubbo 等,有在 linux 上看日志然后排

查线上问题的经验。

其实天地良心,上述提到的亮点,除了大数据 spark 以外,其它技能亮点初级开发应该都会,哪怕不

会也能轻易学会。但就这样,很多候选人不会说,不过反过来,你说了就比别人强。然后立即引申出

最近的项目,因为大多数公司会衡量 jd 技术是否在最近项目里用过。

在最近的项目里,我用到了 Spring Boot 框架,具体用到了 JPA 组件,数据库用 Oracle,最近的项目

是 xx 系统,用到了敏捷开发模式,在这个项目里,我除了做 coding 外,还做过单元测试,讨论需求

和详细设计等工作,并且最近的项目进度比较紧,我自己感觉还能主动加班,一起和同事们保质保量

地完成项目。

内存调优

用实例说明你在内存调优方面的经验

当你介绍好基于 Spring Boot 的技术基本面以后,你还可以进一步说明诸多亮点,这里就先给出结合

项目展示内存调优方面说辞的范例。

(之前是介绍项目技术基本面,比如 Spring Boot)在本项目里,我会非常注意内存的使用性能,并

在项目里有过排查分析 OOM 的项目经验,我在编码的时候,也会非常注意内存性能,同时我也了解

过 JVM 内存结构以及 GC 算法。

不管怎么组织语言,这方面你需要突出四点:

第一强调你有内存调优意识,

第二说明你有排查 OOM 的经验,

第三说明你写代码的时候也会注意内存性能,

第四说明你还了解 JVM 结构和 GC 流程的知识。

但这里依然要强调,你尚在项目介绍阶段,你说明要点即可,别展开,如果这里你展开说明内存调优

的做法,面试官会认为你思路不清晰,不过既然你提到了,面试官可能立即就打断你介绍让你详细说

明,或者你介绍完项目后会继续问,总之你是有机会详细展示内存调优亮点技能了。

如果面试官事后详细问你排查 OOM 经验细节时,你可以这样回答。

在测试环境,我们经常会收到内存使用率高于 70%的告警,(至于怎么告警的相关设置,你可以看下

new relic,如果你是初级开发,甚至不需要掌握相关经验),收到告警后,我第一通过 dump 命令观

察当前内存镜像(你得熟悉下 dump 命令以及 dump 文件的打开方式和 dump 文件的内容),第二

通过日志观察是哪个方法抛出的,最后发现是因为在订单模块(或其它模块)一个 JDBC 连接对象没

关闭(或一个大的 Hashmap 对象用好没 clear),所以导致了内存无法回收,发现问题后对应回收掉

即可。

这里你结合的业务(比如订单模块)来说明,然后面试官再问 dump 细节时,你再说下 dump 文件的

结构,这就行了。

如果面试官再问你如何在代码里注意内存性能,你可以这样说:

在写代码时,我会非常注意,在 try…catch…finally 从句里关闭或释放 Connection 和大的集合,一些

大的对象用好以后,我会及时把它们设置成 null,以此提升它们的回收时间,在 for 等循环里,我不

会频繁地操作 String 对象,因为会产生大量内存碎片。同时,我会非常谨慎地使用 finalize 方法(事

先看下),因为这可能会导致对象无法回收。

其实说上这四点就够了, 如果你自己感觉有本事,可以在了解强引用、弱引用和软引用的前提下在说

如下的点,这很值钱。

在数据同步的业务场景里,我用到了弱引用(或软引用),以此提升数据对象的回收时间。

如果面试官问你 JVM 内存结构及 GC(垃圾回收)流程,这其实是理论问题,网上资料太多,靠背就

行了,所以这里就不再详细说了。但话说回来,GC 流程以及 JVM 体系结构这方面的理论知识,这属

于面试常用考点,你准备下不吃亏。

数据库调优

数据库调优方面

很多候选人其实不会在面试中展示内存调优方面的经验,而你如果按照上述说辞,一方面在介绍项目

经验时引出要点,另一方面在后继交流中很好地说明细节,那么可以这样说,你就超越了很多竞争

者,甚至说句不该说的话,一些初级开发甚至还能以此充实自己的项目经验。

在介绍项目经验时,如果单纯展示内存调优方面的经验,可能说服力不强,这里再给出用实际说明数

据库调优技能的范例。首先你可以在介绍项目时,适当地通过如下的说辞来引入要点。

在本项目里,我参与过数据表设计,所以会考虑用反范式来避免因大表关联而导致的性能损耗,同时

我们会合理地设置索引以提升数据库的访问性能,并且我还有过用执行计划优化语句的经验,同时在

使用事务的时候,我会非常注意配置事务隔离级别和事务传播机制,以免造成锁表。

同样,在项目介绍阶段,数据库调优方面的说辞不需要展开,给出点即可,由于你提到了,所以面试

官在后面大概率会问到。

不过你在面试前,需要准备如下的技能(其实这些技能属于数据库基本点,你不准备反而会有问

题)。

1 你去看下索引的数据结构(比如 B+树),建索引的语句,索引的种类,尤其是复合索引以及对应的

回表和最左匹配原则。

2 事先看下索引的正确用法,以及哪些情况下用不到索引,比如 where a != 'xx’可能就用不到。

3 索引的代价(会占硬盘,以及大批量读写时会重建索引,所以性能慢),以及在小表里,无需建索

引。

4 执行计划的概念,以及通过执行计划排查慢 sql 时该注意的点(避免全表扫描,设置合理的关联表

方式等)。

5 三范式和反范式相关概念,因为你提到了。

6 事务隔离级别里的脏读等概念,以及事务传播机制,尤其地,你要具体说出你项目里用的是哪个。

总结前文说辞

这里根据上文给出的要点,整理下介绍项目经验的说辞。

(介绍项目背景)我最近的项目是在 xx 公司做的 xx 社区爱心超市项目(项目别说太大),客户方是 xx

公司,项目组里是 6 个人,开发了八个月,最近还在开发,在其中我做了删除和更新订单模块的业务

(如果是在校阶段做的项目需要再加上如下的话),这个项目是我从大三开始,外面找 xx 公司做的兼

职项目,做项目的时候我每月还能拿到钱。

(介绍项目技术,JD 上列的尽量说全)这个项目用到了 Spring Boot 框架,数据库是 Oracle,用

JPA 连接 Oracle(或 MySQL 等)数据库,在控制层里用到了@RequestMapping 注解来编写业务处

理方法。在业务代码里,是用@Autowired 注解来以 IOC 的方式引入类,还用到了@Service 和

@Component 注解。当我们从数据库里拿到数据后,会用包含@Entity 和@Table 注解的模型类来

映射数据。在这个项目里,我们还用到了@Transactional 注解来定义事务,这个注解是作用在

Service 层上的,在这个项目里,我们还用到多个 Java 集合类和异常处理类。

**(介绍项目管理工具)**这个项目用到了敏捷开发模式,用 Maven 框架,用 sonar 管理质量,用 git 管

理项目版本,用 jenkins 发布,用 logback 打日志, 我在这个项目里,除了写代码外,还有用 Junit

进行单元测试的经验。我们还用 sonar 来统计代码的测试覆盖度,我们项目经理要求,只有当“行覆

盖率高于 80%”,代码才能提交。

**(最后抛出亮点)**在这个项目里,我用到了单例和工厂设计模式,在这个项目里,我做过 JVM 调优和

数据库调优的的事情,在做项目时为了加深理解,我还看了 ArrayList 快速失效的底层代码,也看过

26HashMap 关于 HashCode 以及 put 和 get 部分的底层源码。这个项目后期进度比较紧,我也能通过

加班等手段保证项目能正常上线,而且一旦遇到线上问题,我也会尽量参与并解决。

大家在面试前,可以根据上述范例合理地准备说辞,次序和内容上可以做调整,但包含的几个要素尽

量都说全。如果可以,事先要多练习几遍,确保能足量地抛出你的相关技能和亮点。

不过千万注意,在介绍项目时,对具体的点,比如内存调优,你点到为止,别展开,否则的话,面试

官一定会认为里思路不清晰。总之在介绍项目时,需要遵循的要点是:第一要尽可能全面地说明你用

过 JD 上的技能,第二要抛出亮点话题,等待面试官提问

根据上文给出的项目介绍说辞,你提到了敏捷开发,Spring Boot 框架,数据库调优,内存调优,设

计模式,junit 以及项目管理软件,java 集合以及底层源码等话题,在前文里也给出了一些面试官可能

问到的问题以及对应的准备要点,除此之外,大家还可以做如下的准备。

理解单例模式,尤其是双重检查的单例模式,要会写代码,并给出一个项目使用场景,比如某工

具类需要用单例的方式创建。同样地,对于工厂模式也准备一个使用场景,这更好办,比如 xml

解析器类,是用 Factory 模式创建的。

在理解的基础上,背诵并会默写 ArrayList 快速失效的底层代码,面试时,当面试官顺着你给出

的言辞继续提问时,你可以边写边说,同时也可以准备 HashMap 以及 Hashcode 的底层源码。

去看下 JVM 内存调优和垃圾回收相关理论,最好再看下强引用,弱引用和软引用理论。

这里请注意,你在自我介绍和项目介绍时,可以通过抛出亮点来引导面试官提问,但同时,你更需要

准备其它常见问题,因为有些面试官依然会问其它问题。对此大家可以在 Spring Boot 框架,数据库

和 Java 核心开发这三个方面多刷些面试题,甚至可以多准备些笔试题。那么这样一说,你抛出亮点有

什么好处呢?

第一,真有些面试官在顺着你言辞提问后,发现你回答很好(因为你事先准备过,想不好回答都

难),然后他们就不再提问了。

第二,面试官多少会问及些你提到的亮点,这样你就能最大程度避免面试官问及你不熟悉的点。

第三,其实大多数初级开发在项目中只是做增删改查,但一方面你根据上文描述准备了若干常稳点,

另一方面你能很好证明你熟悉设计模式,有 JVM 和数据库调优经验,那么你就有可能在面试中表现比

其它人强。

总之,你在准备项目经验的前提下准备些基础和亮点技术点,准不会吃亏。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值