作者:鲁班大师
来源:cnblogs.com/zhuoqingsen/p/interview.html
文中的鲁班简称LB
据说,金三银四,截止今天为止面试黄金时间已经过去十之八九,而LB恰逢是这批面试大军其中的一名小兵,很不幸今年恰逢遇上了互联网寒冬(即各大公司都在裁员,对外提供岗位相对较少的,这意味着很多猿即将面临着更多的竞争对手和相对较少的岗位困境),LB求职过程种种被虐,尸体趟过召唤师峡谷每个角落,如今历历在目,终究,当初的一名无名小卒如今已是一名超级兵哈哈,但是从这个事情上却学到了不少的东西,LB不亏。
经验也总是用来交流用的,于是LB觉得有必要记录下来,也许对猿们会有一丝帮助。
首先,找工作得有一份体面的简历,这里就会衍生一个如何书写简历的问题,LB将从如下角度总结:
关于简历
如何书写简历
HR角度较为关注信息
个人信息(年龄,联系方式等)
求职意向(工作年限,工作地,岗位)
教育经历(专业,学校,毕业时间)
证书(如ACM,软证,外语水平)
面试官角度较为关注信息
1.专业技能
4-5项熟悉2-3项了解,建议层次分明,逻辑有序,建议别写精通,除非很NB,不然被问到不是很深的问题你答不出,面试官认为你不真实。
2.自我评价
是否有博客(文章数太少不写,减分),是否有GITHUB(提交数和STRA太少不写,减分),是否有积极学网课(如极客时间星球,虚假减分)。
队列和缓存高可用,分布式应用衍生问题解决方案,JVM的排查技能,数据库层面优化和分库分表等,这些东西都需要你嵌入到你的项目中。
那么什么是‘’优秀‘’的简历(网图)
看图
哈哈哈,大佬说,看到这种简历直接扔垃圾桶吧,原因很简单,你既然那么牛逼还特么需要自己投简历找工作么,早就被挖了,这种一看就是啥经验都没有培训生或者不懂行规的应届生简历写的东西,那么合格的简历刚刚上面已经说了,专业技能模块不能写太多,层次分明就可以,大概这样:
暂不评价技术如何,光从这个专业技能在简历的书写规则上是很符合层次分明的,而且一行代表一个领域,总体上来看就是一个标准的JAVA后台开发路线的技术栈,而且从内容上来看,也有一定的侧重点,这样给面试官的感觉就会比较友好,提问方便。与人方便自己方便。
如何投递简历
拉钩,公司官方网
这种看RP了,有时候投出去也大概率不会被看到,称之为海投,收到面试邀请不管怎么样,去了再说,毕竟是一种经历,总能学到东西的,但如果是你比较想去的公司,没有很大得取胜信心,建议别投先,毕竟如果被刷,那就得含泪在等一年了。
BOSS直聘,脉脉
搜索你想去的公司,然后加HR或者技术官后给他们发简历,本质和BOSS直聘差不多,他们看到你的简历,并且觉得OK,一般都非常愿意帮你内推的,因为内推录用了,是有推荐金的。
朋友内推,猎头内推
这种获得面试机会几率较高,因为是直推的。
关于面试
面试需要准备3个部分的东西
算法智力题笔试
项目技术面试
HR跪舔与防坑宝典
首先是算法编程题
这个没办法的,会就会不会的话,短时间之内也是做不出来的,有些公司硬性规定必须要你写出来,否则免谈,LB遇到个一个很奇葩的一次面试就是,笔试题出了编程题目,没想到一面后面完了,还让你去做一道编程题,二面也是,估计HR面也是。。无可厚非,因为他们认为动手能力才是最重要的,所以对于猿们唯一的办法就是提前刷题,如果不是面试对算法有较高要求的公司,一般的公司只要把LeetCode简单的题目刷了就能做出来大部分的题目,甚至会遇到一模一样的题目,连标点符号也一样哦。
然后就是智力题
其实也不是什么智力题,网上一搜程序员面试智力题一大推,看来看去也就是那几类问题,头脑比较聪明的猿基本不需要准备。
这里重点讲讲技术面
面试官:能写出一段能体现你水平的代码~
LB:好的~
几秒后~
while{
Scanner scan = new Scanner(System.in); String question = scan.nextLine(); String answer =question.replace ('你', '我'). replace ('吗', ' '). replace ('?', '!') );
Sysem.out.println (answer );
}
面试官:呀,这难道就是…..
LB:没错,是失传已久的Artificial Intelligence
面试官:你究竟是什么人?
LB:阁下莫问出处,这个程序我示范给您看下
面试官:好的
LB:在吗?
电脑:在!
LB:你可以人机对话吗?
电脑:我可以人机对话!
LB:你会自己思考吗?
电脑:我会自己思考!
面试官也跃跃欲试:你可以滚出去吗?
电脑:我可以滚出去!
寒冷的冬天,外出的农夫,看见一条冻僵的蛇,于是把蛇带回了家,解冻之后,泡进酒里,蛇终于醒了,看到如此场景,蛇说:我也是醉了。
emmm~
言归正传,技术面就是看你的技术栈,然后结合项目去提问,并根据项目遇到的问题,要求回答出解决方案,并且根据遇到的问题会继续问深一层或者变形,考察你是否真的对问题进行了仔细的思考和深入的研究,以及问题对应的技术功底是否深厚,所以这里提到的重点是项目结合技术栈,如果你的项目没有用到你写的技术,那么就是扯蛋,那么面试官就会认为这个候选人只是停留在理论基础或者是初学,并没有实践,如果是应届生还说的过去,否则多半会被PASS。
那什么基础功底
比如问你某些关键字的作用如static
如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,满意的原因是能看出你确实非常热衷研究技术。Static 关键字的 5 种用法,推荐你看下这篇。这比你在自我评价写一万句本人热爱研究技术,学习能力强之类的废话更有说服力。关注Java技术栈微信公众号,在后台回复:java,可以获取我整理的java系列教程,都是干货!
又如问你对锁部分的了解
1.一般人回答出Synchronized具有多线程的同步作用,能防止多个线性同时访问同一临界资源。面试常考:Synchronized 有几种用法?看下吧!
2.但是却很少人提到 Synchronized的局限性(无法解決业务层面并发)。
3.可以说明锁的用法,如可以创建 Reentrantlock类的可重入锁,而且可以通过其中的lock和unlock方法行加锁和解锁的操作。
4.说出可重入锁、公平锁和读写锁,如词锁的含义、公平数的含义,以及在创建 Reentrantlock和 Semaphore时如何通过参数强它是否是公平锁,也可以说明在读写锁中加读锁和写锁的条件,由此介绍通过读写线程吞吐量的做法。
5.在协调多个线程处理临界资源时,可以使用锁,但这不是唯一的解决方法,还可以用 Condition和 Semaphore管理多线程竟争的方法。首先,说明这两个类的基本用法如可以通过 Reentrantlock来创建 Condition,过 Condition的awat和 signal来实现类似加锁和解锁的功能,可以通过 Semaphore acquire和 release方法来申请和释放资源。Java中的锁原理、锁优化、CAS、AQS详解,推荐阅读。关注Java技术栈微信公众号,在后台回复:多线程,可以获取我整理的多线程系列教程,都是干货!
另外,说明用 Condition和 Semaphore的特点(在哪些场景下用它们比较合适)通过 Condition类的相关方法,可以在不同的线程中创建多个阻塞队列,从而能精准的控制唤醒某个阻塞队列的线程,而不是只唤醒默认的阻塞队列的线程,而 Semaphore可以用在多个线程竞争少量资源的场合中。如10张票,20个线程的抢购场景。
再如问你对框架里的了解
因为一般的候选人,大多仅仅是能“山寨”别人的代码,也就是说能在现有框架的基础上,照着别人写的流程,扩展出新的功能模块。比如要写个股票挂单的功能模块,是会模仿现有的下单流程,然后从前端到后端再到数据库,依样画葫芦写一遍,最多把功能相关的代码点改掉。其实我们每个人都这样过来的,但在面试时,如果你仅仅表现出这样的能力,就和大多数人的水平差不多了,在这点就没法体现出你的优势了。
我们知道,如果单纯使用SSM框架,大多数项目都会有痛点。比如数据库性能差,或者业务模块比较复杂,并发量比较高,用Spring MVC里的Controller无法满足跳转的需求。所以一般还会被问:你除了依照现有框架写业务代码时,还做了哪些改动?关注Java技术栈微信公众号,在后台回复:spring,可以获取我整理的spring系列教程,都是干货!
对于这个问题,不在乎听到什么回答,只关心回答符不符逻辑。一般只要答对,面试官就会给出“在框架层面有自己的体会,有一定的了解”,否则,就只会给出“只能在项目经理带领下编写框架代码,对框架本身了解不多”。
回答例如有:增加了Redis缓存,以避免频繁调用一些不变的数据。或者,在MyBitas的xml里,select语句where条件有isnull,即这个值有就增加一个where条件,对此,会对任何一个where增加一个不带isnull的查询条件,以免该语句当传入参数都是null时,做全表扫描。或者对返回信息做了压缩处理,以增加网络传输性能。
小结:
技术面试非常重要,这里说的重要不是说对于整个求职过程重要,因为在求职过程哪怕是HR面都有权利决定不要你,所以说没有重不重要的,这里说的重要的是指这是检验你自身水平的能力的考察,通过面试其实可以反映出你的自身很多问题,比如,知识面有了,但是不够全面,或者知识面全了但是不够深入,或者把需求转化为实际产品的能力不足等等,这些东西才是对于你来说是重要的,如果你的能力有了,还会害怕找不到工作吗?这里最怕的就是明知自己能力不足,又不愿意专研学习,还想着高新,只能说你不适合当一名程序员。
那么问题来了,我知道自己的情况,但是又不知道努力的方向,或者不知道怎么提升自己,怎么办?如果你能提出这样的问题,LB只能说,你独立解决问题能力确实也是挺差的,因为在我们开发当中,经常会遇到一些需求,都不知道怎么去做,或者用一些完全没接触过用的框架,如果团队中有人熟悉那还好,但是也别指望别人教你太多,所以这个时候就只能靠自己了,无它,需要你通过网上找教学资料(视频,博客,官方网)的方式快速学习,这些资料花几块钱随手可得,然后一步一个脚印慢慢的把产品做出来。
HR跪舔与防坑宝典(LB总结了一些)
自我介绍
您好,很荣幸有机会来参加公司的面试
1.个人经历(我是谁,我来自哪里,年龄,学历,从业经历)实习加上正职
2.公司为什么要选你(应聘岗位中最重要的3个技能点,说清楚相关经验)我能做好我要做的事情,我相信自己
3.你为什么要选这家公司(就公司的产品,文化,影响力等)着重说出你选择的理由如贵公司的高技术开发环境很吸引我,贵公司在近年来市场上很有竞争力,贵公司能够提供一个与众不同的发展道理
高频问题
1.上一家公司,你为什么会离职?
1.公司很好,但是公司调整了业务,接下来的发展路线和自己的目标不一致,所以要换工作
2.工作太清闲,学不到知识,我不怕累,就是想多锻炼自己,想找具有挑战力工作
3.公司的管理制度不也是很完善,没有晋升机会,我比较想进步,找一个更好的平台
4.我想去优秀的公司,让自己变得更好
2.为什么来我们这里?
1.对原单位充满感恩,这是我人生中非常重要的经历,我认同原单位领导和文化
2.两份工作的本质是一致的,行业和工作性质都有紧密联系
3.选择一份新的工作不代表背叛过去,发扬原公司魅力,同时为了寻求更大的成长和突破
4.不承诺一份工作干一辈子,保证在我的任期内尽职尽责
3.你怎么看待自己以后的职涯?(包括工作和家庭的分配,怎么平衡家庭和工作的关系、加班、选择一家公司时的考量、地点等)(离职稳定性)
我准备在技术领域有所作为,我希望在我3到5年内,具备什么样的素质,在行业内达到什么样的水平,产出什么样的工作成果,将规划量化,具体化
4.对薪资期望(不要直接说数,绝不能表现出没到多少钱或者什么层级我就不去)
薪资应该基于你求职行业的市场价格和自身的价值,例如目前这个岗位的平均工资是8K,虽然我刚毕业,但是在我工作期间已经有过两份的相关经验而且都是作为核心成员参与项目,因此可以很快上手这份工作,所以我希望能够在转正后的工资能达到10K等等
5.可以接受降薪吗?(先了解公司薪酬体系,根据行业和自身能力来定位)
如果候选人的调性符合(足够官方),可以这么回答:我也了解咋们公司现在的薪资架构,我相信公司会根据我的能力给出一个合理的薪水方案,我相信只要把事情做好,该有的一定会有的对于这样的部门,“ 毕竟贵公司在做一个从来没有人做的这么好的事情,所以肯定是有难度的,肯定是要付出大量努力的 ”
6.自己觉得自己工作上的短板/优点是什么?
不能避而不谈,
不能变相夸自己,
不能暴露重大缺陷,
可以将一些能接受能改进的缺点
综上:缺点加说明加改进
7.说说自己性格上的优缺点(描述一下自己的性格)
我不懂得如何拒绝他人,我拉不下面子去指出别人的问题,我做事的时候希望马上就能看到成效,有时候会比较贪心,想同时做好几项工作,我比较慢热,不善于和陌生人打交道,我有意识的让自己在改正,让自己更加有亲和力,我非常在意别人对自己的工作评价,得不到好评就会焦虑,其实我也在开导自己别太功利心了。沉着冷静,条例清楚,立场坚定,顽强向上,乐于助人和关心他人,适应能力等等
8.怎么看待加班(你能接受996、997、007吗)?
可以接受版本
如果候选人的调性符合(足够官方),可以这么回答:我觉得我们要实现梦想,一定是要付出比较多努力的,所以我已经做好了准备,也愿意和小伙伴们一起战斗我是可以加班的,我现在加班强度就是比较大的。因为我喜欢这个事情,我想把这个事情做好。项目忙的时候可能一个月都没有休息日,我觉得要应对这么忙的工作,光有心理准备其实还不够,还要有特别好的身体素质,所以我准备把健身的习惯一直坚持下去
不接受版本
加班是应该的,不加班也是应该的,没有把事情做完是不应该的,因为能力低完成工作慢造成的加班,并不是一件好事,不加班是能力,加班是态度,能力不够的情况下,态度去补。
9.你谈恋爱了没?(状态是否稳定,会不会因为感情影响工作,很快结婚,休婚假产假)
我还没有谈恋爱,目前不考虑恋爱问题,我希望自己变得更优秀以后,在谈一场稳定的恋爱,所以现在想把主要的精力放在工作上。
我已经有男朋友或女朋友,我们都在这个城市工作,目前准备先工作几年,有精力能力了在考虑结婚。
10.是否还面试其他公司(HR确认求职意向与诚信度)
实话实说,选择名声较大较好的公司来说,职位和现在的求职相思相近,表是自己求职意向专一,还在等候结果
11.项目中遇到的最大挑战是什么?怎么解决的?
因人而已,需要描述问题产生的原因,查找解决问题的方式,对比那种更加好,遇到什么问题,最终怎么一步一步解决的
12.最有成就感的事情是?
做有挑战性的事情,并且能够做好,或者是坚持一个习惯很久,如坚持写博客,坚持看书
13.你有什么问题想问的?
1.你作为一个资深的CODER,我想知道,你平时是怎么学习技术,有什么好的学习途径,怎么才能做到像你一样强呢?
2.公司的业务和技术栈是什么呢?
3.技术难点怎么解决,有什么技术支持
4.每天有多少时间花在写代码上
14.收到OFFER该问的5个问题
1.试用期工资和时间(正常来说合同是3年,试用期是3个月)
2.转正考核的方式,转正工资
3.工作时间以及加班计算(一周五天工作制,一天8小时)
4.培训晋升机制
5.福利情况(五险一金,餐补,其他补贴如电脑补贴)
关注Java技术栈微信公众号,在后台回复:面试,可以获取我整理的面试系列经验,都是干货!
推荐阅读:
Spring Cloud Alibaba 发布 GA 版本!
扫码关注,推送更多好玩的。
有收获转发,在看