面经分享:历时半个月,终于拿到了蚂蚁金服的offer!

 

在今天,我收到了蚂蚁金服A级的实习录用offer。

从开始面试到拿到口头offer(四面技术+一面HR)战线大约拉了半个月,

从拿到口头offer到收到正式录用邮件大概又是半个月。

思前想后,决定还是做一个整理与总结。

一方面是回顾并记录自己的努力过程,

一方面也是希望对后来者起到一些帮助。

前方高能预警,本篇文章万字有余,通读可能要很久。


以下内容普适于技术岗,非技术岗请部分参考。

 

目录

  • 如何进行知识积累

    • 如何把握实践与理论的天平

    • 我应该如何整理笔记

    • 怎么复习才不会忘

  • 面试前

    • 怎么写出让人眼前一亮的简历

    • 如何突击面试

    • 面试前焦虑该怎么办

  • 面试开始

    • 自我介绍到底要怎么说

  • 面试中

    • 技术面试的时候应该注意些什么

    • 面试尬场怎么办

    • 如何学会埋坑

  • 面试结束

    • 面试官:“你有什么想问我的吗”,该说什么?

    • 我怎样才能知道我是否通过了

  • 我两年半的技术人生

 

 

如何进行知识积累

    在讲面试技巧之前,显然知识积累是不可或缺的。不然即使面试侥幸通过,在之后的工作中也会体验极差。

1

如何把握实践与理论的天平

实践是什么?

比如你new Object()初始化了一个对象来使用;

比如你用HashMap结构作为容器存储了一些数据;

比如你拿SpringBoot搭建了一个web网站后台;

比如……

理论是什么?

初始化对象有什么代价?背后的底层实现逻辑是怎么样的?初始化太多对象可能导致什么问题?为什么我经常初始化对象,明明是空间消耗大,反而导致程序在运行时间上变得缓慢?

HashMap适合什么场景?我现在这个场景真的是用HashMap最合适吗?运用的时候有没有什么需要注意的?有时候遇到一些特殊需求,在HashMap基础上可以再优化性能吗?

天天用SpringBoot,IOC、AOP到底是什么概念,背后怎么实现的?它们适用场景如何,我的用法是最佳实践吗?会不会有什么弊端,导致在生产环境出现问题?

……

实践与理论的学习,到底应该侧重实践一些呢,还是侧重理论一些呢?

都说实践与理论要两相结合,缺一不可,在我看来这是一句废话。重点是如何权衡两者,并且在不同的发展阶段,两者的侧重比例是否又要发生变化呢?

在我看来,实践决定方向,理论填补细节

 

(1)首先要实践,然后填补理论


程序员首先要实践,才能够收获基本的技术视野和处理问题的能力,这两者都是不可或缺的。

有了基本的视野之后,就可以根据自己学习的方向,去填补你的细节,例如:

  1. 我学习了Java,会写一些应用程序了,也知道如何利用应用服务层的Java来对数据库层的数据做一些处理,那么接下来: 1. 对数据怎么处理会更快(这里可能就会引出多线程,然后就可能引出线程池,又引出JDK提供的线程池有什么并发问题,怎么解决,然后可能又引入并发包,一下子串出好多) 2. 各种优化(比如初始化太多对象导致频繁GC,全局变量太多导致占存一直很高blabla)

  2. 我学习了MySQL,会用SQL语句操作数据了,知道建索引可以加快访问速度了,那么接下来: 1. 在SQL语句上是不是也可以做一些优化来提升性能(比如很有名的延迟关联) 2. 索引到底应该怎么建才好(这就涉及到索引的很多知识,比如B+树,比如一些匹配原则例如最左适配原则等等)

这种细节的填补是有逻辑性的,从我上面举的两个例子就可以看得出来。这种逻辑性的存在会使你在学习的过程中不会感到虚浮,会发现这些理论都是切实有用且有价值的。

但这样的理论学习还不够,因为它不系统。充分的发散思维使你能够在实践之外追求到很多理论知识,但那些你发散不到的部分就接触不到了。这个时候你就需要系统性的学习,例如读书

当你第一次学会实践,就好像在自己的脑海中制作了一个知识星球。它里面几乎是空白的,但是球体本身存在,帮助你去界定、区分知识——借助这个球体的框架,当你在遇到一个新知识的时候,你会它有一个模糊的概念:这个知识到底是有用知识还是无用知识,它又在哪个范畴或层面里?

所以借助了一开始的实践,然后你再去逻辑地发散、或者系统地读书的时候, 就不会让新知识成为无根之萍,而是切实地进入你的知识星球中,成为你知识架构的一部分。

(2)理论再返回到实践中


知识架构建立起来了,但它没有经历实践的检验,就依然是不可用的。

一方面在于我们学习的理论知识可能是过时的,甚至是谬误的;另一方面我们可能以为自己懂了但其实没懂,这一点相信大家都能理解。

那么如何实践呢?有些理论可能是很难实践出来的,但是至少我们要对能实践的一部分去做一下尝试。就比如简单的JVM排查和调优,通过MySQL EXPLAIN去检查执行计划并实践优化等等。

2

我应该如何整理笔记

    首先要强调笔记是很重要的。至少我认识的那些能够面试进大厂的同学,每个人都会为自己做笔记。

    而至于到底应该如何整理笔记,我认为最重要的有两点:一是分门别类,二是控制粒度

 

(1)分门别类


我们一定要能够清晰地把我们要整理的知识模块化,比如说JVM基础,我们可以这样分模块:

  • 运行时数据区

  • 垃圾回收

  • 类加载

  • JMM

  • JVM调优

然后分别根据每一个小模块,单独整理一篇笔记。

并且在篇末,或者另开一篇笔记,专门记录针对这个模块的比较大而广的问题

例如运行时数据区,我们就可以记录这样一些问题:

  • 讲讲JVM运行时数据区的各个组成,是什么,有什么用

  • 讲讲对象。它是如何创建的,里面包含一些什么信息,如何定位到对象

记录这种大的问题,有助于我们进行自测。不要问自己太多细小的问题,除非你切实觉得它很重要。

什么叫细小的问题呢?比如:类里静态的基本数据类型存在方法区还是堆里?

这种问题枚举你是枚举不完的,它其实已经包含在了”讲讲JVM运行时数据区的各个组成,是什么,有什么用“这个问题里。

(2)控制粒度


    什么叫控制粒度?其实就是控制你笔记记录的详细程度。

    如果你笔记中对于知识点的描述非常简洁,带来的好处是阅读起来就会很快,坏处是可能在阅读时导致你忽略掉一些本不该忽略的细节,或者甚至是:”咦,我这记的是啥,我怎么看不懂了。“

    那如果记得太详细呢?很显然,就会导致阅读起来非常繁琐,可能达不到一个理想的迅速复习的效果。

    那到底应该控制在一个什么程度上呢?

    我认为一篇良好的笔记应该满足以下两个条件:

  • 这段笔记切实提到了所有应该提到的知识点,不需要我去联想;

  • 这段笔记对于这些知识点都有简单的描述性文字,并且能够言简意赅,尽可能以列表列举的形式,不要有叙述性的内容。

tips:什么叫叙述性内容?

举个例子,比如下面这是一段对于垃圾回收算法里的标记-清除算法的笔记:

标记-清除算法:

   标记出所有需要回收的对象,根据标记统一回收。

   问题:1. 低效率

        2. 产生大量不连续内存碎片

带有叙述性内容的写法是怎么样的呢:

标记-清除算法:

   它的基本原理是,标记出所有需要回收的对象,然后根据标记统一回收。

   它有两个问题,一是在于效率比较低,二是在于可能产生大量不连续的内存碎片。

非常显然,阅读前者的效率远高于后者。

整理笔记时,我们尽可能省去不必要的铺垫,例如”它的基本原理是“这句话就是完全不必要的。

我们也可以尽可能省去一些联结词,例如”首先“、”然后“、”最后“这种。以及对于一些枚举性内容,我们尽可能采取列表而非文字形式表达,会更加直观易懂易记。

3

怎么复习才不会忘

每天都反复复习当然可以保证你不会忘,但会非常疲惫而且费时。

严格遵守网上的某些号称贴合人类记忆曲线的复习方式,坚持起来压力很大,最终往往也很难达到自己理想的效果。

实际上这种所谓”曲线“是有一定道理的,但是也要结合我们每个人自身的特殊情况,去找到最适合自己的一种记忆方式。

我认为这样一种记忆法是比较有效的:

从第一次复习并记忆的时候开始算,隔比较短的一段时间再复习并记忆一次,隔不太短的一段时间再复习一次,然后坚持每隔较长的一段时间就复习一次。

那么这个”比较短的一段时间“、”不太短的一段时间“、“较长的一段时间”又分别是多久呢?我们可以自己来决定。但需要知道的是,我们的复习间隔时间应该是不断变长的,直到一个比较稳定的值。

比如我个人的话,就喜欢第一次记忆完后,两小时再复习一次,隔一天再复习一次,然后隔四五天复习一次,之后可能就一直是7-10天会复习一次。

无需刻意,比如我本来打算三天后复习一次,但是三天后突然有什么事耽搁了。所以我提前到前一天,或者滞后到后一天,又能怎么样呢?记忆是量变的过程,一天两天的偏移根本不会有什么质变可言。


但让记忆周期大抵符合一个慢慢变长的规律,我想是有必要的。而如果你觉得最后每隔7-10天复习一次都会压力很大,那你也可以半个月甚至二十天才看一次。不过这样的话,等面试要来临的时候,你可能就难免需要简单突击一下了。

面试前



1

怎么写出让人眼前一亮的简历

    按照一般流程来说,你的简历会先给懂一点技术/不懂技术的HR初审,然后再交给研发的同事过审,经过这两层都ok了,才会给你进面试的流程。

    也就是说,你的简历不仅要让专业人士看着厉害,还要让非专业人士看着也厉害。

    那么作为技术人员,简历到底应该怎么写呢?

 

 

(1)综述


我们不妨先概括后具体,先总体看一下简历应该写一些什么东西,写多长篇幅,排版成什么样子,然后再分析每个模块应该如何去写。

写什么东西

一个正常的简历应该有如下内容:

  • 基本信息及联系方式

  • 学习经历

  • 工作经历(或实习经历)

  • 项目经历

  • 专业技能

  • 自我评价(这个不一定要有,看前面篇幅)

写多长篇幅

作为技术人员,我觉得简历1-2页就好,3页未免太过冗长。

排版成什么样子

首先格式上来说,现在一般都是网申,也就是提交电子材料,所以HTML或者PDF格式为佳。

具体排版的话,尽可能简洁明了,不要花里胡哨。技术人,又不是去做UI设计,搞那么好看,人家也不会欣赏,反而觉得你不务正业。

我个人建议简历的好看程度,达到markdown能支持的极限就可以了,不要超过markdown的能力。

(2)基本信息及联系方式


可能会包括以下一些信息:

  • 姓名,电话,邮箱:这几个是必须的,不多说了。

  • 求职意向:单独列这条出来,我建议要写。不然你本来做后端的,人家给你安排到测试开发,你哭都来不及。

  • 个人网站/博客/GitHub:如果有厉害的一定要记得写,如果很水的话建议别写了。

(3)学习经历

 

可能会包括以下一些信息:

  • 学历(或者毕业年份)

  • 绩点:如果不好看,请不要写,不要写,不要写

  • 专业:如果不是计算机相关专业,请不要写,不要写,不要写

  • 奖项:尽可能多写,从高到低排。先写厉害的,最后写不厉害的。如果没什么拿的出手的奖项,建议干脆什么也不要写。不要孤零零写个什么XX大学优秀团员上去,还不如不写。

(4)工作经历(或实习经历)

这里就如实说就好,切记一定要准确,包括在职时间也写明白,一两个月的偏差也是在给自己埋炸弹。

应该包括以下信息:

  • 在职时间:例如2018.2~2019.3

  • 工作单位:如果不是大家熟知的大厂,最好附上行业

  • 部门:这个是可选项,不一定要写。

    如果是厉害的部门请记得写,比如腾讯微信

  • 岗位:建议具体。如果公司里岗位就叫“研发工程师”,

    你可以写成“JAVA研发工程师”或者“GO研发工程师”之类的。

(5)项目经历

这是第二重要的部分!!第一重要的部分是下面的专业能力。但这也是决定你是否能简历过审的很重要的一部分,并且是可能导致面试官疯狂追问你的来源。

一般写2-3个项目经历比较好,相对来说,要挑最厉害的、最对口的、最近的。

那么每个项目经历中,应该写一些什么呢?

  • 项目名称

  • 项目简介:1-2句话就好,让别人知道你这是个什么项目。

    比如是个后台管理系统?比如是个电商平台?之类的

  • 个人技术工作:请以列表形式列举自己的核心工作,

    不要大段叙述性文字!!

     

    后面是一些可选项,不一定要写:

  • 技术关键词:项目中涉及到的技术关键词

  • 项目中的收获

  • 项目成果:项目上线后有什么成果。

    比如抗住了多大的QPS,比如做到了多大的规模等等。

    请注意这两者是有区别的,前者可能更强调峰值,后者是长期的稳定性。

    当然还可以有其他的,但最好要有技术视角。

 

给一个优秀的范例(来自敖丙大大):

 

如果觉得这个有点太高大上了,再看一个普通一点的:

(6)专业技能

专业技能方面应该尽可能讲得全面,把自己确定会的一个都不要漏掉。

但是一定要和岗位对口。比如你投个Java后台,你非得写个摄影技能上去,反正我个人感觉不是很好。

如果你不知道怎么写,可以看一下岗位描述。一般投递简历前你看到的岗位描述上都会有对于技术要求的说明,比如:

=======我们的要求=======

  1. 全日制211本科以上学历,计算机相关专业,毕业时间2020.11-2021.10

  2. JAVA基础扎实,理解io、多线程、集合等基础框架,对JVM原理有一定的理解

  3. 熟悉分布式、缓存、消息、搜索、推荐等技术,并能合理应用,解决实际问题

  4. 学习能力强,对代码质量及系统性能具备精益求精的精神

  5. 良好的团队沟通协同能力,抗压能力,勇于接受挑战

  6. 有作品或者实习经验优先

我们可以根据岗位的要求,结合我们自身的优势,来写我们的专业技能。像这样:

2

如何突击面试

我个人觉得,突击面试是在面试前1-10天的这个阶段。

(1)笔试突击复习

 

这个是毋庸置疑的。之前在怎么复习才不会忘里说,最后坚持每7-10天复习一次。如果你坚持了这种频率,我觉得笔记突击复习对你来说几乎是不需要的。不过如果你觉得心有不安,可以在突击阶段每天复习一次。

切记一点,笔记突击复习时,请记得自己问自己问题,然后模拟一下在面试官面前你会怎么回答。别只是记忆,你还要学会如何表达。

 

(2)针对性复习

 

针对性复习包含两方面:把握公司面试特点+刷特定面经

首先是把握公司特点。打个比方,如果你去面试字节跳动,可能就需要多准备一点算法、网络,他们很喜欢问这些。如果你去面试美团,你可能就更需要准备一些JUC并发包、框架。

把握公司特点很重要,你会发现即使同样是面试JAVA岗位,不同公司的面试内容差别也会很大。

甚至不只是公司。到部门层面,差别也会很大。某公司A部门的JAVA岗,和该公司B部门的JAVA岗,就是要求不一样的。也许一个更注重并发能力,一个更注重排查调优能力等等。这一点你可以从岗位要求里去了解,或者问部门里相关的人员。

 

其次是刷特定的面经。现在网上有很多人分享面经。可能不一定能直接找到你现在面试的部门的面经,但你至少可以找到同一家公司下、业务类型相近的面经。把他们题目拿过来,给自己模拟面试一遍。和前面说笔记突击复习一样,模拟你的表达,别只是心里想一想答案就过去了。

 

(3)每日一道算法

 

如果你面试中可能会出现算法题,建议你在突击阶段每天一道LeetCode以保持手感。不过这因人而异,有些人即使很久不做算法,临阵磨枪也不虚。

 

3

面试前焦虑该怎么办

什么深吸一口气?站在阳台看看窗外?我觉得效果不是很大。

深呼吸在面试前半小时是有效的,它可以缓解你面试前过分紧张的情绪。但它是缓解紧张的,无法缓解焦虑。

焦虑的源头在于:害怕意外的发生。我觉得缓解焦虑最有效的方式就是,为自己规划好一切

在突击面试之前,时间尚早,相信你也不会有太多焦虑。当突击面试阶段开始,你就要开始学会为自己规划。让一切有条不紊地进行,你会发现你不再会为面试和其结果感到焦虑,因为你知道你自己做到了最好。

那如何规划呢?

不妨给个例子:

比如我在下周六(2020-04/18)是阿里的一面。而今天是周日(2020-04-12),接下来我怎么安排呢?

2020-04-12 周日

复习单线程容器、JUC包,整理出相关的大而广的面试问题,进行自测。

2020-04-13 周一

复习网络、操作系统

2020-04-14 周二

复习JAVA常见面试题、JVM

2020-04-15 周三

复习MySQL和Redis

2020-04-16 周四

复习Spring、IO、设计模式

2020-04-17 周五

网上查阅面经自测,做两道算法恢复一下手感

2020-04-18 周六

盯着自己准备好的各种大而广的问题反复车轮式复习,直到面试前半小时。

半小时里再背一遍自我介绍,复习一下简历里的项目。

迎接面试。

如果这样规划以后,依然让你感到十分焦虑,很简单:把规划再细化

你会发现,当规划的细致程度达到某种阶段以后,你的焦虑会转化成压力和动力,不会再让你手足无措。

 

最后说一个小tip。其实让你面试前不焦虑还有一个非常简单的办法,就是多投递简历,多面试,面多了你就会感到麻木,不会焦虑了。

面试开始

1

自我介绍到底要怎么说


 如果是一面/二面,一般是纯技术面,这个时候我建议可以遵照这样一种自我介绍模板:

  • 自报家门

  • 介绍自己的技术方向和技术能力

    • 我主攻的方向是XX,从技术上来说,我对于XX、XX(枚举一些技术点)比较熟悉(以引导面试官问你熟悉的内容)

  • 介绍项目经历(什么项目,在里面做什么事情,有什么难点,怎么克服的,有什么收获)

    • 我在之前XX(读大学?在XX工作?之类的)的时候,很喜欢并善于研究 / 做过一些有价值的项目,比如blabla。期间遇到过一个问题至今印象深刻,blabla。经过这个项目,我吸收了一些blabla的知识。

    • tips:在介绍项目经历的阶段中,“在里面做什么事情”是最重要的模块,一定要讲清楚,做什么事情决定你在面试官第一印象中的高度。而“有什么难点,怎么克服的”是给你一个埋坑的机会,让面试官更有可能在这个点上去追问你。

  • 收尾

    • 希望在未来,可以把这些知识(之前项目中提到的知识)运用在工作中。

    • 也希望在本次面试中,可以得到面试官的一些建议和指导。

 

    如果是三面/四面/HR面,并且你切实觉得可能不再那么纯技术了,你的自我介绍可以向软实力角度偏移,这里拿我的自我介绍给个例子:

    tips:整理你自己的自我介绍的时候,请切记不要太书面语,背起来不舒服不说,真正到自我介绍的时候也会显得生硬。

   您好,我是来自XX大学XX专业的XX。

   我想从技术理论、项目实践、工作能力上来简单介绍一下自己。

   首先是技术理论。我主攻的方向是Java后台。技术上来说,我对于Java基础、JVM、并发容器、线程池等等还是比较熟悉的,另外在框架方面用SpringBoot比较多,读过Spring的源码。而数据库层面的话,磁盘数据库中我对于MySQL尤其是InnoDB引擎比较熟悉,内存数据库中对于Redis比较熟悉。

   而在项目实践方面,我对于理论和实践的结合一直是比较看重的。从大一入学两个月我就有带领大一的学生队伍参加院里的项目比赛,之后陆陆续续到今天累计也做了不下十几个项目了。而在这些项目中,在综合方面我主要担任的也都是一个负责人的角色,而在技术方面我主要做的则都是Java后台的部分。我开过会议,出过文档,写过代码,也参加过有好几百人作为听众的大型答辩,应该说不管在硬实力还是软实力上,都得到了很不错的锻炼。

   最后是我的工作能力。我现今任我们专业XX班的班长,已经历时一年半,对于组织工作应该说是非常熟悉了。另外,我也有参与学校里一个较大型的信息技术工作室,出任其中的技术部负责人,偶尔会带领学弟学妹们进行一些项目实践,以及参与引导部门及工作室的规划安排。事务很多很杂,也培养了我强大的规划力和执行力,相信这也能够使我在未来的工作中得心应手。

   

面试中



1

技术面试的时候应该注意什么

要从表达内容两方面来讲。

(1)表达

 

表达切记一定要口齿清楚逻辑清晰

口齿清楚

口齿清楚这一点相信大家都能领会。但是也不排除有些小朋友一紧张口齿就不利索,这个一定要注意。

更有甚者有时候遇到不太确定的问题,想要以口齿不清来蒙混过关,这种更不可取,基本是搬石砸脚。

逻辑清晰

如何保证这一点呢?有时候当遇到一个措手不及的问题,很难保证我们的逻辑又快又清晰。

所以最简单的方式,就是用速度的牺牲来换取逻辑的明了。甚至有时候你可以短暂地沉默一会儿,好好整理一下思路,千万别张口就来,导致说得乱七八糟不成体系。

 

(2)内容

对于一些切入点非常小的问题,直接回答就可以。比如说:

Q:对象的锁信息是存在哪里的?

A:在对象头MarkWord里

 

但是对于一些切入点比较大的问题。例如:

Q:讲讲垃圾回收?

Q:集合里ArrayList和LinkedList有什么区别?

回答的内容切记不可过于简短,但也不能胡乱堆砌。最好的方式是水平扩展或者垂直扩展

不妨就拿上面的一个问题来举个例子。比如说讲讲垃圾回收。

水平扩展的话,应该怎么讲呢?

A:

有关垃圾回收,我们首先要考虑两个问题。一是如何判断对象可回收,二是用什么样的方式来回收。

首先对于前者,有引用计数法和可达性分析两种方法,它们分别……(讲讲它们的含义,优缺点)

而对于后者,市面上主要有标记-清除,标记-整理,复制三种回收算法,它们分别……(讲讲含义,优缺点)

结合这些算法,市面上就出现了很多垃圾收集器,例如Serial,ParNew,CMS,G1……(顺便讲讲它们的回收逻辑,优缺点)

面试官:(暗自点头)

水平扩展也就是从一个问题出发,把与它相关的整棵知识树或者整颗知识树的一部分(如果树太大的话)讲出来,体现你的知识是有架构有体系的。

 

垂直扩展的话,又应该怎么讲呢?

A:

垃圾回收的话,自JDK1.8后,市面上就非常流行G1垃圾回收器了。它是不分新生代和老年代的,基本原理是……(讲讲含义,优点)

但是垃圾的频繁回收势必会导致用户体验的下降,虽然G1已经很优秀了,作为开发者我们还是需要关注JVM的优化(话锋一转,开始走向深度)

(讲一些具体的优化策略)

面试官:(暗自点头)

垂直扩展主要是需要自行找到一个切入点。或者面试官已经把切入点给到你了,那么接下来你要引入自己的思考,按照一个没有漏洞的逻辑走向深度,体现你是勤于思考并且善于发现并解决问题的人。

 



2

面试尬场怎么办

首先如果是因为你答不上来而尬场,你就乖乖说你不会,千万别强撑。

如果不是这个情况,是面试官一时沉默的话:

有时候面试官可能很忙,他可能都没来得及看完你的简历就来给你面试。换言之,他并没有做太多的准备。所以临时尬场也是非常正常的。

所以现在你要做的就是:让面试官不要尬场。

打个比方:

Q:你说你熟悉线程池,那你说说看线程池都有些什么重要的参数?

A:比如有核心线程数、最大线程数、允许存活时间、阻塞队列等等(顺便简单说一下这几个参数都是什么含义)

Q:嗯不错……(开始沉默)

一般面试官的沉默可能是你回答完这一个问题之后,他一时间想不到问什么。这个时候你可以继续沿着这个问题扩展下去:

A:关于线程池还有一些需要注意的地方。比如当一个任务添加进来的时候……(讲一下任务添加到线程池的流程)

A:考虑到这样一个流程,所以我们在控制最大线程数、阻塞队列的时候是需要注意的。如果最大线程数设置过大,或者阻塞队列设置上限过长,可能导致OOM(又联系回前面参数的问题)

是不是联系回去不要紧,但是只要你依然在讲这个问题相关的知识树里的东西,就可以有效地缓解尬场,还会让面试官觉得:

面试官:(嗯这小伙基础还挺扎实)

   


3

如何学会埋坑

埋坑是非常重要的一个技巧。

什么叫埋坑?就是在回答前一个问题的时候,适当地对面试官进行引导,让他能够问你想让他的问题。

面试前是最容易埋坑的。一是简历里的项目经历,专业技能;二是自我介绍阶段,讲一些自己擅长的技术点等等,引导面试官去问你。

而在面试的过程中,应该如何埋坑呢?

打个简单的比方。

比如现在面试官问你:”ArrayList和LinkedList有什么区别?“

你先中规中矩地回答。回答完之后,我们可以根据我们的擅长点做一些不同的策略:

如果你比较擅长并发容器,你可以说:

ArrayList和LinkedList都属于单线程框架,是并发不安全的。如果要并发安全的话,需要使用CopyOnWriteArrayList或者ConcurrentLinkedQueue

 

如果你比较擅长线程池,你可以说:

ArrayList和LinkedList分别是对数组和链表的封装。JAVA中比较重要的对于数组、链表的封装集合类还有线程池中的阻塞队列,例如ArrayBlockingQeque和LinkedBlockingQueue

 

当然了,埋坑只能启到一定的导向作用,最终决定权还是在面试官手上。不要太刻意,不然会适得其反。

面试结束



1

面试官:“你有什么想问我的吗”该说什么?

这个问题可以给几个例子:

  1. 您对我有什么建议吗?

  2. 您平时工作中主要做些什么呢?

  3. 如果我有幸能够被录取的话,主要会做一些什么样的工作呢?

2

我怎样才能知道我是否通过了

我个人不建议在面试完后直接问面试官:”我通过了吗?“

而且面试本来就是双向选择,你是在众多offer中挑一个最喜欢的,人家也是在众多面试者中挑最好的那一批。

所以如果你想要知道自己是否通过了,最好的方式是从面试官对你的态度中窥探。

比如你最后问:”您平时工作中主要都做些什么呢?“

他给你回答得非常详细,而且还会主动跟你聊一点别的,比如告诉你进来以后会做什么之类的,那说明他还是很认可你的。

如果他只是简单说一下,有点敷衍的样子,不排除只是他工作忙的可能,但你最好也可以考虑一下,找找其他出路了。

另外,等面试结束后,如果你有推荐你去面试的推荐人或者HR的联系方式,你也可以直接问他们面试的结果。

 

我两年半的技术人生

    最后附上我两年半的技术生涯,中间不免有些弯路,但总体还是令我满意的。

希望给有需要的人以参考。

  

1

2017(入学

7-8月

参加社会上的Java语言基础培训课程,学习Java,基本上到可以简单使用Swing的程度,对于反射泛型等中高级知识一窍不通;

10月

拉了五个也是大一的小伙伴参加学院的创新创业比赛,基于Java Swing写了一个井字策略游戏,拿到学院的优胜奖;

11月

机缘巧合认识了一位研二的研究生,经他推荐进入一位教授的实验室做商业网站;

12月

在研究生的带领下认识SpringBoot和Mybatis,原理一窍不通,但是可以写一点CRUD;

总结
  • Java语言最基础内容的使用比较熟练了

  • 有了可怜到几乎可以忽略不计的web后台开发经验

  • 当时学院算法学习氛围比较好,到年末我大概相当于共计刷了一百道LeetCode中等题

2

2018(大一~大二)

1-3月寒假

进入培训机构学习web前端,了解了html-css-js,学会ajax;

4-6月

划水度过,我不知道我在干嘛,就好好上课;

7-8月暑假

做一些基于SpingBoot的简单实践,初步学习Unity游戏引擎;

9-10月

划水;

11-12月

学校各种创新比赛启动,我都参加了,最后同时启动了大约6-7个校园小项目;

总结
  • 这是我多角度尝试的一年(比如web前端、游戏开发),因为我还并没有决定以后从事什么方向。大约在暑假后(9月),我才觉得自己未来应该会做Java后台;

  • 在后台技术上提高不多,只是熟练了那么一丢丢;

  • 项目启动很多,那个时候觉得项目很重要很能锻炼人,后来觉得其实做那么多差不多级别的项目并不是很有意义。

4

2019(大二~大三)

1-2月寒假

我启动了太多项目,CRUD崽忙不过来了!!

3-6月

各种项目比赛遍地开花的几个月:

  • 3月:两个创新培育项目,一个国创一个市创评级

  • 4月:上海市计算机应用能力大赛二等奖

  • 6月:校大夏杯创业大赛铜奖

但只有我自己心里清楚,奖是拿得很不错,但是技术上其实都是一样的东西,而且非常简单非常基础。全是传统的小型单体web项目,业务驱动。

还是3-6月

比我大两级的拿到蚂蚁金服正式offer的学长来讲了Java面经,我终于意识到自己太菜了。但是跟着大三春招的洪流,我也没忍住投了几个简历试试:

  • 携程:一站式面试,我不知道一站式是什么意思,去面了一面自我感觉良好,就直接走了!走了!没在那等着继续面下去,就没了。

  • 字节跳动 · 北京:视频面试,在第二面挂了,评价是”相对大二学生来说比较优秀,但是暂时还没达到实习岗位的要求“

7月

买了一堆蚂蚁学长推荐的书籍,例如《高性能MySQL》、《深入理解Java虚拟机》、《Java并发编程实践》、《图解HTTP》等,开始有计划地阅读起来;

8月

去安徽会场参加全国大学生计算机设计大赛的答辩,荣获一等奖。还是那句话,真没啥技术含量。但是提升了我答辩的能力和吹嘘的水平;

9-12月

继续读书。

总结
  • 这是我从实践逐步转战理论学习的一年。之前的我太过于知其然而不知其所以然了,写项目都是不考虑原理的。自蚂蚁学长分享了Java面经之后,为我指出了方向。

  • 这一年我仔细阅读了《高性能MySQL》前七章,《深入理解Java虚拟机》近整本,也买了《MySQL技术内幕 InnoDB存储引擎》看完了一整本,做了很多笔记。

  • 我还买了很多其他杂七杂八的书,例如《轻量级微服务架构》、《图解TCP/IP》、《大型网站架构》等等,有些是几乎读不懂,有些是没怎么读,大抵算是这一年走的弯路。

5

2020(大三)

1月

疯狂整理、复习,中旬参加了携程的日常实习面试,通过了,年前进入携程实习;

2月

过年几天还带了两本书回老家,但是真的学不进去。回来后因为疫情远程办公,同时不断进行复习与整理,准备春招;

3月

开始进入春招面试阶段。只投了字节和阿里,都通过了;

4月

一直到今天4.11,一直是静待offer。没有什么事情,就不疾不徐地学一学SpringCloudAlibaba,平时就谈谈恋爱,打打游戏,看看电影。

    我两年半的技术生涯,主要走的是 实践学习 → 理论学习 → 实践理论相结合 这样一条路线。

    一开始的实践学习就像是培训班生活,只不过是自我培训;

    然后到理论学习层面,有幸听到蚂蚁学长的面经讲座,加上有之前的实践基础,让我的理论学习有方向感且不会太虚浮;

    最后是实践理论相结合层面,主要就是把我一些新学习的没实践过的理论付诸实践。就比如学习了JVM调优和问题排查,就自己写一个死锁程序或者OOM程序然后用排查工具来排查一下问题。

    最后祝认真阅读到这里的你,一定会拿到心仪中的offer!

END

史上最全的延迟任务实现方式汇总!附代码(强烈推荐)

因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!

有人说:轻量级锁一定比重量级锁快!我忍不住笑了

关注公众号发送”进群“,老王拉你进读者群。

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bat批处理脚本获取window系统所有用户名并设置密码,禁用Guest账户

net user可以获取系统用户名,如下: 可以编写代码,bat批处理脚本获取window系统所有用户名并设置密码,如下,如果bat文件有中文,在cmd中执行会出现乱码,解决方法是用记事本打开bat文件&#xff0…

Spring IoC?看这篇文章就够了...

前言刚开始听到 IoC,会觉得特别高大上,但其实明白原理了很简单。跟着我的脚步,一文带你吃透 IoC 原理。本文围绕 是何、为何、如何 来谈:是何上一篇文章有同学问我在官网该看哪些内容,怎么找的,那今天的截图…

交换机arp转ip-mac绑定命令工具-免费版

一、简介 为了防止ARP攻击,我们经常需要在三层交换机上做IP地址与MAC地址的绑定操作。 先要进入System-View系统视图模式,输入"sys"即可。 system-view: [huawei]arp static 192.168.60.58 7813-3a79-d0aa在交换机上使用dis arp命令可以查看…

html 链接 id属性_HTML id属性

html 链接 id属性The id attribute is used to specify a unique id for an element in HTML. This id cannot be used for multiple elements in HTML. You can add the id to any HTML element. id属性用于为HTML中的元素指定唯一的ID 。 该ID不能用于HTML中的多个元素。 您可…

老大说:谁要再用double定义商品金额,就自己收拾东西走

先看现象涉及诸如float或者double这两种浮点型数据的处理时,偶尔总会有一些怪怪的现象,不知道大家注意过没,举几个常见的栗子:典型现象(一):条件判断超预期System.out.println( 1f 0.9999999f …

图片一键调整工具V1.0-免费版

一、工具介绍 这是博主自己开发的图片一键调整工具V1.0,它可以调整图片宽度和高度、压缩图片大小、改变图片背景、转换图片格式和图片透明化,都是很常用的功能。操作起来简单方便。 二、工具操作 1.调整图片背景 首先,把该工具软件和图片放到同一文件…

一口气说出 9种 分布式ID生成方式,面试官有点懵了

写在前边前两天公众号有个粉丝给我留言吐槽最近面试:“年前我在公司受点委屈一冲动就裸辞了,然后现在疫情严重两个多月还没找到工作,接了几个视频面试也都没下文。好多面试官问完一个问题,紧接着说还会其他解决方法吗?…

PHP_正则_获取图片所有属性

2019独角兽企业重金招聘Python工程师标准>>> <?php /*PHP正则提取图片img标记中的任意属性*/ $str <center><img src"/uploads/images/20100516000.jpg" height"120" width"120"><br />PHP正则提取或更改图片…

matlab拔河比赛_拔河比赛

matlab拔河比赛Description: 描述&#xff1a; This is a standard interview problem to divide a set of number to two different set where both the subset contains same number of element and have a minimum difference of sum between them using backtracking. 这是…

一款开源免费的SSH/SFTP客户端Electerm,同时支持Linux、MacOS、Windows

简介&#xff1a; Electerm是一个跨平台的Terminal/SSH/SFTP客户端工具&#xff0c;同时支持Linux、MacOS、Windows&#xff0c;基于electron/ssh2/node-pty/xterm/antd/useProxy等开源组件。 下载地址&#xff1a; 官网下载&#xff1a;https://electerm.html5beta.com/ Git…

用了自定义Banner后,SpringBoot瞬间变的高大上了...

Spring Boot 在启动的时候&#xff0c;我们或许想要把自己公司的 logo&#xff0c;或者是项目的 logo 放上去&#xff0c;我们可以试试本文的这些方法&#xff0c;可以让你快速制作一些 Spring Boot 项目启动时的彩蛋&#xff0c;以提高项目的辨识度&#xff0c;或者是纯碎为了…

如何生成高性能的短链接?

前言今天&#xff0c;我们来谈谈如何设计一个高性能短链系统&#xff0c;短链系统设计看起来很简单&#xff0c;但每个点都能展开很多知识点&#xff0c;也是在面试中非常适合考察侯选人的一道设计题&#xff0c;本文将会结合我们生产上稳定运行两年之久的高性能短链系统给大家…

iOS 技术官方 QA

2019独角兽企业重金招聘Python工程师标准>>> Q: 在静态库中使用catagory分类运行时提示"selector not recognized" A: 需要配置下project/target属性 Q: 在iOS7以后怎么截图 A: iOS7 提供了相关API实现截图功能&#xff0c;如:-drawViewHierarchyInRect:a…

IPsec IKEv2(HCIP)

目录 一、IKE介绍 1、IKE介绍 2、IKE的主要作用 3、IKE与IPsec关系 二、IKE基础内容 1、IEK的身份认证方法 数据源认证 预共享密钥PSK 数字证书 数字信封 EAP(IKEv2支持) 数字证书CA如何实现身份认证? 2、IKEv1介绍 IKEv1介绍 IKEv1第一阶段介绍 IKEv1第二阶段…

9个小技巧让你的 if else看起来更优雅

if else 是我们写代码时&#xff0c;使用频率最高的关键词之一&#xff0c;然而有时过多的 if else 会让我们感到脑壳疼&#xff0c;例如下面这个伪代码&#xff1a; 是不是很奔溃&#xff1f;虽然他是伪代码&#xff0c;并且看起来也很夸张&#xff0c;但在现实中&#xff0c;…

poj 3254 状压dp

E -Corn FieldsTime Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u SubmitStatus Practice POJ 3254Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels…

第一弹!安利10个让你爽到爆的IDEA必备插件!

大家好&#xff0c;此篇文章中我会介绍10个非常不错的IDEA插件以及它们常见功能的使用方法。这一期内容搞 Gif 动态图花了很久&#xff0c;很多Gif图片上传到微信还提示过大&#xff0c;所以很多地方重新又录制了一遍Gif图。概览&#xff1a;IDE Features Trainer—IDEA交互式教…

String性能提升10倍的几个方法!(源码+原理分析)

这是我的第 54 篇原创文章。String 类型是我们使用最频繁的数据类型&#xff0c;没有之一。那么提高 String 的运行效率&#xff0c;无疑是提升程序性能的最佳手段。我们本文将从 String 的源码入手&#xff0c;一步步带你实现字符串优化的小目标。不但教你如何有效的使用字符串…

制作openstack-centos镜像

一、准备工作我在计算节点上面制作镜像&#xff0c;计算节点为centos6.3 64位系统1.安装底层支持包yum groupinstall Virtualization "Virtualization Client"yum install libvirt2.下载或从本地上传进去一个完整的系统镜像mkdir /openstack-p_w_picpathcd /openstac…

一文彻底搞懂Java中的值传递和引用传递!

关于Java中方法间的参数传递到底是怎样的、为什么很多人说Java只有值传递等问题&#xff0c;一直困惑着很多人&#xff0c;甚至我在面试的时候问过很多有丰富经验的开发者&#xff0c;他们也很难解释的很清楚。我很久也写过一篇文章&#xff0c;我当时认为我把这件事说清楚了&a…