当前位置 博文首页 > 智欣约的博客:面试经验小点

    智欣约的博客:面试经验小点

    作者:[db:作者] 时间:2021-06-12 12:40

    作者:南极
    链接:https://www.zhihu.com/question/23858584/answer/150506189
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    注:适用于工作一到三年有一定经验的Java后端人员,我一共面试了五家公司,收到四个offer,每天跑来跑去也很累,最后的的offer很满意之后就把其他的面试和offer都推掉了。入职前把这段时间的一点经验写下来,希望能帮助到跟我境况差不多的兄弟姐妹。

    准备

    机会永远都是留给有准备的人

    当你决定离职之前,你就应该开始为下一份工作做准备了。 那么,该准备什么呢? 我建议是第一是跟语言无关的部分,也就是所谓的基本功。具体也就是我们大学本科里面最头疼的那些东西,数据结构算法,还有一些计算机网络的基本知识。 鉴于这个东西实在很枯燥,我不建议大家去看那些黑皮书,反正我是真的是看不下去啊。 那么问题来了,看什么? 书籍我推荐:大话数据结构。 视频我推荐:小甲鱼的的课程。网易云课堂:数据结构和算法

    首先,书里面的代码虽然是用C语言写的,但我相信语言大家都还是有一点c语言基础的,再者说语言里面很多东西都是通用的。而且正好可以尝试用java再写一遍,这样效果更好。如果不想买书的,可以上网找找pdf版本,找不到我这里也有,不过还是建议买一本。而视频为什么是这个呢?因为小甲鱼就是按照这个书来讲的,配合大话数据结构相得益彰,就是相当于教师加上教材。书里面看不懂的地方都可以好好再听一遍小甲鱼的讲解应该就差不多了。小甲鱼除了讲基本的数据结构,还穿插了很多的经典算法问题的解决方案,最棒的地方是都是c语言写的啊,我们想要现成的都没有,所以跟着看,自己写啦。

    学习完基本的数据结构,就Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的。结合api去看,很多你之前不懂得地方会恍然大悟。

    除了数据结构,需要长时间准备还应该有设计模式

    虽然说有23种设计模式,但是我觉得大家掌握最常用和经典的十个左右就差不多了。剩下的大概了解即可。

    书籍我推荐:head first 设计模式大话设计模式 两者随意选一本即可,或者两本对照着看也是可以的。 看的时候记住最重要的一点: 不要光顾着看!不要光顾着看!不要光顾着看!

    比如你学习完了观察者模式,已经大概了解了其实现原理。那么现在合上书本,仔细在你的项目中想一下,哪里是符合观察者模式的应用场景的你又是怎么实现的?如果要改应该怎么改呢? 如果你找到了符合的地方,那么你就把原来的设计用观察者模式重新写下来。 注意,不要随便用在生产上,你现在只是要充分理解这个模式,而和实际结合是最好的学习方式。而当你写完了到底要不要放在生产上,你可以先和你的技术组长说一下,设计模式切记不要生搬硬套

    如果你没有在你的项目中想到合适的应用场景,那么没关系,你就自己想一个区别于书上的例子,自己独立完成。

    每个模式都自己写一遍实现逻辑,估计当你写的时候肯定有不理解的地方,这时候就是你撕开的地方了,到底为什么这么写,这么写好在哪里,完成了时候就已经基本掌握这个模式了。然后还有最后一步,那就是写博客

    不知道大家有没有听过学习的金字塔简单来说,学习的方式不同最后能记住的东西差了很多。

    第一种,“听讲”,这种我们最常用的方式,学习效果最低的,内容只能留下5%。 第二种,通过“阅读”方式学到的内容,可以保留10%。 第三种,用“声音、图片”的方式学习,可以达到20%。 第四种,是“示范”,采用这种学习方式,可以记住30%。 第五种,“小组讨论”,可以记住50%的内容。 第六种,“做中学”或“实际演练”,可以达到75%。 最后一种在金字塔基座位置的学习方式,是“教别人”或者“马上应用”,可以记住90%的学习内容。

    看到这里明白了吧? 写博客就是把你的理解交给别人,是最好的学习方式,而且你把你的博客放在电子简历上,绝对是很棒的加分项。 我的面试官最后跟我说,录用我的原因也有一部分是看了我的博客,觉得我是一个爱好学习的人,在我技术和其他人差不多的情况下,更加愿意给我机会

    简历

    我一开始也忽略了简历的重要性。 随便花了十几分钟填了一个在线模板就开始投递了,结果是可以预料的。都石沉大海。 我们首先要知道一件事情,即使是一家小公司发布一个招聘的职位,那么收到的简历也可能几百个。HR会在这几百个甚至上千个里面选几个出来面试,所以哪怕你技术再好,如果简历不能体现出你的水平,连见到面试官的机会都没有,那怎么能找到理想的工作呢?

    那么问题来了,简历怎么写呢?

    我偷懒用的在线的模板,当然如果你的内容写的不错,问题还是不大的,但是建议还是不要用现成的模板,拉钩的就挺坑,最上面是一张大大的照片还有教育经历也占了很大地方,结果最重要的项目经验要到第二页才能看到。

    简历一般都有几个模块,工作经历,教育经历,项目经验,自我描述,技能评价等等。

    教育经历我就不说了,这个没什么技术含量。

    工作经历

    写上你的上一家公司,从事的职位(java后端开发),如果你在这三年的时间换了两家以上的公司,我建议你还不要都写上,HR是不喜欢那种经常跳槽的,在这个年限,一般最好是一家到两家。这些按照实际情况写就好了,都是死的东西,接下来就要写上你的职责了。

    有的人和我最开始写的一样

    java 后端开发,最多加上一句 负责接口的编写和实现

    这么写和没写一样这么写和没写一样这么写和没写一样

    那应该怎么写呢?

    1、根据业务需求调整数据模型,设计程序接口,实现接口业务逻辑,编写接口文档。 2、根据前端组html及css,编写jsp页面及js脚本。 3、日常版本的发布及紧急回退。 4、处理日常bug和在生产发生的紧急问题。 5、新同事及实习生的业务培训。 6、配合性能测试优化代码和sql。 7、参与新需求评审。

    上面是我后来修改的的,你觉得两者差了多少呢?

    一定要具体,并且分条陈述,作为一个技术岗位,要体现出你的专业素养

    项目经历

    这个千万要写,当然工作也这么久了都会有项目经历,但是也要有一个主次。

    第一个放你最熟悉的,最好是近期的,你从头开始做的项目,你能如数家珍侃侃而谈的哪种。这也是面试官面试的时候主要和你谈的地方,是除了技术问题之外最重要的一块。(后面写面试的时候我会详谈)

    那么项目怎么写呢? 我建议业务写一两句就好,如果你的项目介绍通篇都是满满的业务,那么几乎注定了你的简历不会进入被筛选的范围内。 你想一下,你自己应聘的是什么岗位? 技术岗! 那么你应该写什么? 简单的介绍项目的规模,有多少技术人员,是互联网项目还是企业软件,这些就可以了。 接下来你需要写关于项目技术的那部分。 项目用了什么框架?spring 还是struts2 ,持久化是用的是mybaits还是hibernate等等,有没有使用RPC框架(Dubbo /HSF)?数据库用的是什么?有没有用到Redis? 版本控制工具是svn还是Git,有没有前后端分离?有没有写js ,如果有,你都用到了哪些前端组件, 能写的都列出来,还有项目是这么分层的?有几个子模块,平时发布版本是用的自动化工具吗?(jennkins) ,项目管理用的是什么?(maven)等等,也就是说要让hr第一眼就能看到这是一个有经验的开发人员。 下面是我的一个项目,写的也不是很好,仅供参考。 - 基于阿里云平台和中间件技术研发,应用包括云服务器 ECS,云数据库 RDS,Redis,DRDS对象存储OSS,开放搜索(OpenSearch),企业级分布式应用服务 EDAS(HSF服务框架)等技术。 - 使用maven进行项目管理,根据业务分成多个web子模块,方便开发测试和部署。 - spring +mybaits 框架开发,MySQL分布式数据库。 - 基于OpenSearch 的全平台商品名称搜索,基于redis的商品类目存储。 - 使用cas实行单点登录,shiro 认证、授权、加密和会话管理。 - poi ,jxl 导入导出excel,itext 生成pdf,Zxing生成二维码。 - ajax 前后端交互,jQuery及多个前端组件包括layer,jquery validate,autocomplete,jdate,datatable分页等。 - 统一用jenkins发布,敏捷开发,jira 平台处理日常及生产问题。

    自我介绍

    这个模块就不要写什么工作努力了,与人和善,团队协作这样的空话了。 你可以写你在项目中的作用,你解决了什么样的问题?得到了客户怎样的认可?可以写写你经历过的加班,怎么努力的保证了项目上线,这些都能体现出你的价值,你的闪光点。 除了主语言,还会什么其他的语言/技术,或者喜欢逛技术论坛,最好附上自己的回答,写技术博客(放上你的博客地址),当然如果有GitHub 上的项目就再好不过了。

    好了,说了这么多,简历大概就是这个样子了。

    投递

    现在招聘网站很多,专注it的就有拉勾啊,100offer ,boss直聘,猎聘,智联招聘等等。 我建议不要太过广泛的投递,(我就吃到了这个苦头,最多一天收到十几个预约面试的电话)在投递前至少看一下公司的性质,是否和你的期望相符,还有公司的地址距离你是否太远,公司是否上市等等。

    至于具体选择哪家,各有千秋吧。

    非利益相关,我只说我用的,我最开始用的是拉勾网。但是反馈很少,我大概看了一下,很多其实都是要求3-5年的工作经验,是招聘中高级的程序员,而我勉强算三年的工作经验,所以只收到了一个面试的预约。

    后来,我就在智联招聘上开始投递,投递的范围也仅限于初中级的工作经验一到三年的,我还用了那个十五天的简历置顶,效果还是很明显的。我其余四家的面试都是智联招聘上找到我的。

    在这里我先说一下,投递的第一天可能没有人联系,那是很正常的。

    因为HR处理简历是有一个周期的,每天都有很多的简历,你的可能要过一两天才能被看到,但如果三天还没有人联系你,你就要思考下,是不是你的简历写的哪里有问题了。

    面试

    如果你收到了面试邀请,那么恭喜你,你已经成功了一小半。

    HR 一般会和你确定时间,并且给你发一封邮件,你需要收到后回复,并且查看一下面试的地点,同一天最多安排两家,并且查询好路线,因为都是第一次去,所有找路一定会花更多的时间,所以至少提前留出一个小时以上的时间。现在天气也已经很暖和了,在外面也不冷了,提前到达总比气喘吁吁的直接面试好很多。

    有的公司会有笔试,但是不用太介意,回答你会的就好,这个只是一个初步的筛选,无论笔试成绩怎么样,都会让你去面试的,面试才是最重要的地方。 技术面试针对我们这种有一定工作经验的,已经不会问你比如 java 有几种基本类型这样的问题了,主要集中在java的高级特性上面。一般分为两个阶段。

    第一个阶段是主语言本身以及它的高级特性,第二个阶段是讲述自己的项目,并在中间穿插着问题。

    主语言本身以及它的高级特性

    • Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的。(前期的准备)
    • Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包。(重中之重,一定要仔细看看)
    • IO包和NIO包中的内容。这部分里面NIO会是重点。(这个问的不是很多)
    • 设计模式 这个一般都会问,让你说说熟悉的设计模式。(前期的准备)
    • Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。

    项目

    业务上把你在项目中的责任着重体现出来,对项目的架构以及为什么这么设计要有认识。

    一定要斟酌你说出的技术,最后挑那些你确实用过的地方去说,这样才能防止你说出一个技术,面试官深入把你问倒的情况。但是如果真的有一两个地方不熟悉也不要紧,你可以及时打住,并且坦诚的承认自己在这块积累不够不要在一个问题上硬挺,不懂装懂。

    还有最重要的一点,一定要说出你的闪光点比如你解决了哪个很严重的生产问题,比如你应用了那些设计模式在你的项目里面,比如你有什么巧妙的解决一些棘手问题的技巧。

    相信我,你仔细回想,是一定可以找到至少这样一个闪光点的。

    哪怕你说我能加班,我997,我熬夜通宵也把任务完成了。这也是你的闪光点啊,说明你责任心强

    你不要等待面试官发问,很多问题你都可以引导面试到提问的。

    这里还有一点也是被问比较频繁的。

    就是项目中是怎么高并发访问的问题的?你是怎么去提高性能瓶颈的?常规的优化手段都有哪些?

    面试的时候并没有固定的套路,你要懂得随机应变,好的心理素质和知识储备是两大法宝,以不变应万变,但无论怎样,都要保持好的心态。

    失败是很正常的。

    但是你要相信,只要你没有虚度光阴,是一定能找到相对理想的工作的,每一次的失败中你都要冷静的想一下自己到底是哪里的储备不够,并且立刻去了解这部分知识,从失败中汲取经验,成功就不远了。

    offer

    最后,如果你收到了不止一个offer,尽快推掉不准备接受的其他的offer,这样不要耽误人家的招聘。记得要礼貌的拒绝,并表示歉意。

    预祝大家都能找到理想的工作

    最后贴一下其他人写的面试文章。 阿里面试回来,想和Java程序员谈一谈

    50道Java线程面试题