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

 

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

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

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

思前想后,决定仍是作一个整理与总结。
程序员

一方面是回顾并记录本身的努力过程,
web

一方面也是但愿对后来者起到一些帮助。
面试

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


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

 

目录
数据库

  • 如何进行知识积累编程

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

    • 我应该如何整理笔记

    • 怎么复习才不会忘

  • 面试前

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

    • 如何突击面试

    • 面试前焦虑该怎么办

  • 面试开始

    • 自我介绍到底要怎么说

  • 面试中

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

    • 面试尬场怎么办

    • 如何学会埋坑

  • 面试结束

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

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

  • 我两年半的技术人生

 

 

如何进行知识积累

    在讲面试技巧以前,显然知识积累是不可或缺的。否则即便面试侥幸经过,在以后的工做中也会体验极差。

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,面试官让我回去等通知!

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

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