• 作者:老汪软件技巧
  • 发表时间:2024-09-16 21:02
  • 浏览量:

大家好,我是老三,好久没更新了,翻出之前的一篇旧稿,是一篇总纲性质的文章——如何准备一场技术面试。这篇文章原本的开头是写给金三银四的,转眼就“金九银十”了,每一年都是最差的一年,又是未来最好的一年,不知道大家今年的面试情况如何,希望这篇文章能对大家有所帮助。

1. 了解面试考点

就像我们大学考试之前,会尽量求老师划定考试的范围,面试也是一样,在面试准备之前要尽可能有效地了解意向公司和意向岗位的面试侧重点,和面试考点,在面试准备时做到有的放矢。

职位要求获取

那么我们可以通过哪些渠道获取这些信息呢?

部分公司的官网招聘入口:

公司名称官网招聘入口地址

阿里巴巴

/zhaopin/

腾讯

/

百度

/

字节跳动

美团

/social/

小米

/social

携程

/external/ct…

一些常用的面经获取网站:

网站名称网址特点

牛客网

面经内容最丰富,最完整,校招面经相对更多。

看准网

看面经模块提供了很多面经,社招面经居多。

知识星球

基本需要付费,一些大的知识星球,有一些不错的面经分享。

去年我准备面试的时候,当时整理了大量的面经,对我的帮助很大。

常见的算法题库网站:

网站名称地址特点

LeetCode

最大的算法题库,题目最完整。

LintCode

牛客网

CodeTop

/home

提供企业算法合集

面试考点分析

对于大部分面试,一般考察四部分内容:

不同层级

不同的年限,不同的层级,对开发人员的要求也不一样,准备的侧重点也不一样。

Boss直聘某实习生岗位JD

Boss直聘某3-5年后端工程师岗位JD

Boss直聘某Java专家岗位

实习生:

3-5年高级工程师:

5-10年资深/专家工程师:

不同公司

不同的公司,可能也有不同的面试倾向。

比如字节跳动特别看重基础和算法,准备字节的面试,计算机基础,算法之类的一定要着重准备,“接雨水”一定要接得明明白白。

比如阿里,比较看重项目和一些中间件的原理,在问项目的时候,经常要求对项目要有一些自己的思考,为什么、是什么、该怎么优化。

这一部分,可以从前人的面经中归纳整理。接下来我们看看,具体如何准备面试。

2. 复习技术知识

面试准备的第一部分就是技术知识,对于工程师,技术知识是基础,也是面试的重头戏。

技术知识考点

为了准备Java相关的技术面试,我们需要全面地掌握多个方面的知识,那技术知识会考哪些内容呢?根据我的总结,包括但不限于Java语言特性、常用框架、计算机基础、数据库、中间件、分布式微服务以及系统设计等。

Java语言特性

Java框架

计算机基础

数据库

中间件

分布式微服务

软件设计

系统设计

……

这一部分推荐我本人写的《面渣逆袭手册》,基本上涵盖了80%的面试考点,关注公众号三分恶,后台回复666无套路获取。

技术知识学习

对于技术的知识的学习,不太推荐临阵磨枪,单纯靠死记硬背,一定要去理解它,真正地消化吸收,并尝试用自己的语言去输出。毕竟面试现场,如果只是机械地背诵,那么给面试官的体验一定不会太好,甚至整个场面都很尴尬。

要想充分理解,系统化的学习是必不可少的。建议大家选择一些高质量的书籍和教程来学习,这里,我也给大家推荐一些。

Java语言特性

Java框架

计算机基础

数据库

中间件

分布式微服务

软件设计

系统设计

整理自己的知识库

准备面试,还有个非常重要的点,就是整理自己的面试知识库,尽管有很多非常优秀的面试知识库,但归根到底,最合适自己的还是要自己去整理。

通过借鉴别人的面经,以及从自己的面经出发,根据问题,去寻找答案,利用种种途径——教程、博客,包括现在流行的大模型,去回答面试的问题,梳理自己的答案。

这样一来,不仅能深化你对知识点的理解,也能加强你的表达能力,而且知识库的内容也更加贴合你的技术经历和知识体系,这样面试的时候才能更加如鱼得水,信手拈来。

比如我自己的《面渣逆袭手册》,就是我给自己整理的面试知识库,经历了不断的迭代和完善,每一次面试、每一次的迭代,都能提高我的面试水平。

3. 准备编程题

在现在的面试里,编程题基本上成为不可或缺的一个环节,编程题以算法为主,那么编程题如何准备呢?

按照我的经验,可以将备战过程分为三个阶段:

系统刷题:建议投入至少六个月的时间,系统地刷题。这一阶段的重点在于理解并掌握常见的算法类型及其解题策略。推荐代码随想录的教程:/。因为仅仅记忆解题步骤是不够的,更重要的是理解背后的逻辑。很多时候,面试官不仅关心你能否解答题目,还会询问你的解题思路及是否有更优的解决方案。所以,全面的基础还是非常有必要的。

刷高频题:接下来的三个月时间,应该专注于刷那些在面试中频繁出现的题目。毕竟从面试官的角度出发,他也不可能把所有的题都刷完,一般人的策略也是出自己熟悉的题目。LeetCode上的高频题库以及Codetop提供的高频题库都是不错的选择。对于这些高频题,至少需要刷两到三遍,推荐CodeTop,或者自己建知识库,记录自己的掌握程度,直到这些题目能够在没有任何提示的情况下手写出来。

冲刺刷题:在面试前的一个月内,应该集中精力刷那些已经进入面试环节的公司的题目。比如字节,什么接雨水、全排列之类要刷熟;比如美团,牛客的剑指Offer要多刷。这段时间的冲刺,是尽可能保证自己在面试高压的情况下,能迅速、准确地解答一些可能会出现的题目。

_面试的技术_面试准备技术有哪些

算法刷多少道才够呢?有人说300道,有人说100道……我觉得还是根据个人的情况来定,如果有条件,尽可能多刷。坦白说,我觉得算法在工作中基本上用不到——刷了四百道算法题,我在项目里用过几道呢?,但是没办法,现在这个内卷的环境下,算法是个一键Pass的考点。而且相比较其他难以量化的东西,算法算是相对公平的评估方式了,卷了是一定能出结果的。

4. 准备项目

面试的第三个重要部分,就是你的项目经历了,问项目的目的,是想看到候选人落地实践的能力和解决问题的能力。

项目选择

准备项目的第一步,是选择项目,面试官的精力有限,一般一份简历上,放两个项目足够。不管你是应届生,还是老鸟,正确的项目选择,都能让你在面试里更好地展示自己。

面向岗位:

项目整理

怎么整理项目呢?我觉得其实就像在公司里给老板做汇报,他对你的项目可能一无所知,你要通过你的汇报,让他理解这个项目,了解你再项目里做了什么,并让他认可你做的东西的价值。

建议大家可以对自己的项目建一个文档,或者你要想卷的话,也可以做个PPT。那么如何整理你做的项目呢?可以通过这几步:

明确项目背景:描述项目的背景、目的以及它所解决的问题。描述你的角色:说明你在项目中的职责是什么,担任了什么样的角色,比如项目经理、核心开发者等。技术栈选择:列出项目使用的主要技术栈,并解释为什么选择它们。比如为何选择Spring Boot而非其他框架,MySQL数据库的优势在哪里等。面临的挑战与解决方案:详述项目过程中遇到的技术难题或其他障碍,以及你是如何解决这些问题的。例如,如何处理高并发下的事务一致性问题,或者如何优化支付系统的延迟。项目成果:总结项目最终的成果,比如提高了多少交易处理速度,增加了哪些新的功能,用户体验有何改善等。反思总结:分享从项目中学到的经验教训,项目里存在的问题,以及未来如何改进。

这里可以拿一个电商的支付系统来举例:

项目背景

你的角色

技术栈选择

面临的挑战与解决方案

项目成果

反思与学习

项目常见问题

这里也给大家整理一些,关于项目的常问的问题。之前有一场面试,我问候选人,“你的项目的亮点是什么?”他说不知道怎么回答这个问题。项目整理做好了,这一部分基本对答如流。

5. 提高软技能

在面试里,我们常常说,和面试官要有“面缘”,“面缘”是什么呢?其实就是和面试官气场相合,沟通流畅。“面试不是打打杀杀,也是人情世故”,在面试前提高软技能,特别是沟通能力,也是非常重要的,在基础的要求满足下,面试官肯定更倾向于和自己有“面缘”的。

那么看不见摸不着的软技能,该怎么提升呢?大概可以从这些方面去练习:

合作双赢心态:面试不仅是面试官评估候选人的过程,也是一个双向选择的机会。可以看看面了三十个人,说说我的真实感受,面试官和你都有自己的目标:面试官希望招到合适的人选,而你希望找到理想的工作。你和面试官不是对手,而是合作共赢的关系。如果你顺利通过面试,未来的面试官可能成为你的同事或上司;即使没有通过,也不必感到沮丧,毕竟你们只是彼此生命中的过客。持有这种双赢的心态,可以让你面试更加放松,表现得更好。准备自我介绍:认真准备一段自我介绍,大约3至5分钟,概述你的工作经验、优势以及为何适合这份工作。这段介绍不仅展示了你的专业素养,还决定了面试官对你的初步印象。尽可能让你的自我介绍自然流畅,详略得当。可以反复练习,听着录音或者看着录像去调整。

eg:一段自我介绍的示例

面试官您好,我是XXX,很高兴有机会参加今天的面试!

我毕业于XX大学,之前在XX公司担任过支付系统开发工程师的角色,期间主要负责电商支付平台的核心模块开发工作,包括支付渠道的选择与路由、支付收银台界面设计以及支付风险控制系统的搭建。在此过程中,我积累了对接和维护支付宝、微信支付及银联支付等多种支付接口的经验,并对常见的支付逻辑和系统解决方案有了深入理解。

在技术栈方面,我对Java语言有较深的认识,掌握其核心特性和并发编程模型,并具备JVM调优的实际经验。此外,我也熟练使用Spring、SpringBoot和MyBatis等主流框架,能够快速搭建稳定的服务端应用。数据库方面,我熟悉MySQL数据库的设计与优化;而对于分布式系统中的数据缓存和消息队列,我也有一定的实战经验,尤其是RocketMQ和Redis的应用。

我对当前的技术趋势保持着高度的关注,并积极学习最新的技术动态。近期,我对大模型的研究产生了浓厚的兴趣,并尝试将其应用于实际项目中,以提升系统的智能化水平。

在团队协作上,我认为沟通至关重要。曾负责多个跨部门项目的推进,深知团队内部及跨团队有效沟通的重要性。通过良好的沟通机制,不仅能够确保项目顺利进行,还能促进团队成员间的相互理解和信任。

面对技术挑战时,我喜欢从不同的角度审视问题,并寻找最优解。例如,在应对支付高峰期带来的系统压力时,我引入了异步处理机制,成功缓解了服务器负载,保证了支付流程的顺畅。

我非常希望能够加入贵公司,因为贵公司在支付领域的深厚积淀和技术实力给我留下了深刻的印象,我相信在这里可以更好地发挥我的专业技能,并与团队共同成长。

这就是我的自我介绍,谢谢!

保持友好态度:无论面对什么态度的面试官,始终保持友好之上的态度。人们的态度可以分为五个层次:从最差的恶毒到最好的热情,依次是冷淡、礼貌、友好。尽量保持比面试官略好的态度,这样的态度恰到好处。友好的态度除了语言,也要通过眼神、表情、姿态来传递。

练习回答技巧:面试中的问答环节应当是有效而且是目的导向的。为了使回答有条理、简洁明了,可以借鉴麦肯锡思考工具里的“5W1H”框架,Who(何人)、What(何事)、When(何时)、Where(何地)、Why(何因)和How(何法)。这样既能保持沟通表达的完整,也能避免太臃肿。倾听和反馈:面试不仅仅是表达自己,也要注意聆听面试官的问题和他们的需求。展现你是一个好的倾听者,通过适时的点头或简短回应来表示你在听。此外,针对对方的观点给出适当的反馈,表明你理解并尊重他们的意见。必要的时候,也要对对方提出疑问,有来有回。另外,一个小技巧,在面试的最后,要表达你对这场面试的认可,你从这场面试里学到了一些东西。持续改进:保持开放的心态,持续学习,面试过程可以录音或者录屏,面试之后要及时地去复盘,分析哪些对方做的好,哪些地方还需要改进,这样每次面试之后,你都会越来越游刃有余。6. 准备简历

简历是一个求职者的门面,很多时候决定了候选人能不能得到一个面试机会。

简历样式

撰写简历,要做到内容精简,并且突出亮点。校招简历建议控制在2页以内,社招简历建议控制在3页以内。当然,如果内容是必要而且丰富的,也没有必要非要强行压缩。

简历的样式,不用刻意追求特别繁杂的设计,结构清晰,易于阅读即可。随手搜的一些简历模板:

如果有条件,可以制作一份在线的简历,能给你大大增分。

注意:一定要使用 PDF 格式投递,不要使用 Word 或者其他格式投递,不然格式可能会错乱!

简历内容

个人信息⭐⭐⭐求职意向⭐

应聘岗位,期望工作地点。

教育经历⭐⭐

要简洁明了地列出学历、专业、毕业院校及时间。

例如:

专业技能⭐⭐

结合自己会什么,以及目标公司会什么,筛选关键词,列出一份和岗位相关的专业技能。同时也要注意了解、掌握、熟悉、精通程度的描述,尽量客观。

例如:

Java语言

框架

数据库

中间件

计算机基础

设计

业务

大家可以以适当地精简,一个简历专业技能写法的技巧,是引导式写法,也就是面向面试问题的写法,比如:熟悉TCP三次握手,引导面试官去问自己会的问题,大家适当参考。

实习经历/工作经历⭐⭐⭐

工作经历针对社招,实习经历针对校招。

工作经历建议采用时间倒序的方式来介绍。实习经历和工作经历都需要简单突出介绍自己在职期间主要做了什么,结果是什么。

示例:

XXX 公司 (201X 年 X 月 ~ 201X 年 X 月 )

项目经历⭐⭐⭐

项目经历是社招的重点,内容要做到清晰有亮点,让面试官对你的项目有东西,你有东西可答。写项目经历有这么几个建议:

例如:

2019-05 ~ 2023-06 淘X 高级 Java 后端开发工程师

个人评价⭐

个人评价非必需,但是写的时候要注意,一定要用简洁的语言来突出自己的特点和优势,而且切记不要太空洞和宽泛,要和专业能力有关,而且要有事实佐证。

关于个人评价,可以从这几方面入手:

例如:

良好的解决问题能力:面对技术难题,能够快速定位问题根源,并提出有效的解决方案。曾在项目中成功解决数据库性能瓶颈问题,提升了系统响应速度30%以上。

两个法则

简历的编写,可以借助两种非常实用的法则来提升简历的质量:STAR 法则和 FAB 法则。

STAR 法则(Situation Task Action Result)

STAR 法则是简历撰写和面试沟通中常用的技巧,STAR 法则:

FAB 法则(Feature Advantage Benefit)

FAB 法则通常用于销售领域,但在简历中也可以拿来借鉴, FAB法则:

定制化

这里格外强调一点,很多时候,我们是没法“一份简历包打天下”的,在投递简历的时候,尽可能做到面向JD写简历,针对不同的岗位,对简历进行定制,以便更好地匹配这个职位。

针对对应的JD,可以按照这么几个思路来定制自己的简历:

以这个字节的后端开发工程师岗位为例,我们面向JD来定制简历:

系统设计能力:

数据库、缓存和消息队列:

责任心与团队协作:

高可用系统经验:

行业经验:

示例简历片段:

教育背景

专业技能

工作经验

项目经历

自我评价

7. 简历投递

写好了简历之后,接下来就是投递简历,选择正确的渠道和正确的策略非常重要,决定了会不会有面试的机会。

投递渠道

简历投递的渠道有很多,给大家聊聊我常用的渠道。

公司官网:大型公司一般都有自己的招聘官网,放出的岗位一般都是有效的,缺点是信息比较散。

内推:最有效的投递途径一定是内推,但是要注意,内推也有区别,如果是内部员工通过内推系统,其实和自己投递没什么太大差异。但是如果是组内直推,简历能直接给到内推人熟悉的主管,那么优势就是非常大了。

投递策略

对于简历的投递策略,用个不恰当的比喻,既要当“渣男”,也要当“舔狗”,意思是既要广泛撒网,又要重点跟进。

持续跟进

在简历的投递过程中,一定要保持积极主动的习惯。当你提交了简历或者初步联系了招聘方后,如果一段时间内没有得到回复,一定要主动去跟进。

建议采取三五法则,初次联系后的三到五天进行一次跟进,可以通过邮件、信息的方式来咨询对方。

例如Boss直聘上,对方已读不回,这是一个示例话术:

您好!我是xxx,几天前我向您表达了加入贵司担任[职位名称]的兴趣。看到您已经查阅了我的资料,但至今尚未收到回复。我对这个职位非常感兴趣,而且我国网的经历和这个岗位也比较匹配,相信我的经验和技能能够为贵司带来价值。

请问是否需要我提供更多相关信息?或者能否告知我申请的进展情况?期待能有加入贵司的机会,希望尽快得到您的反馈。

作为工程师,可能很多人都有点社恐,对方不回复,或者不联系,就不太好意思继续问,要克服这种情绪,多问几句,最差不过是像现在这样已读不回。再好一点是对方回复为什么觉得你不合适这个岗位,可以尝试挽回,或者根据对方的反馈继续优化自己的简历。最好就是对方被打动,初筛通过。那为什么不主动跟进一下呢?

8. 模拟面试

在现在这个环境下,每一个面试的机会都是宝贵的,为了尽可能提高正式面试的通过率,建议在正式面试前,进行一些模拟面试,找到面试的感觉。

利用在线资源:

通过备选职位练习:

自我模拟练习: