在中国,只要你能在阿里工作,基本就算是拿到了互联网行业的Pass卡,各家公司都会给你机会。
不全是因为阿里牌子大,更是因为阿里这种段位的公司,一定有自己完善的用人系统,能被选中就是优秀的证明,在这个体系中生存就是锻炼。
这就跟肯德基、麦当劳肯定要在有对方的地方开店一样,前期市场调查对面都做过了,我跟着走就好,还特立独行个什么劲?
如果能混到阿里P7、M2这个段位,国内互联网公司完全可以横着走,只有工作找你,没有你找工作。稍微透露一点想跳槽的欲望,第二天你的电话就会被猎头打爆。
阿里P7是业内的硬通货。
如果是电商和云计算领域,不用问,不开出双倍工资那都是诚意不够,因为国内经历过如此大规模从0到1的电商和云计算的公司,只有阿里。
你嫌贵,拼多多和华为可不嫌贵。
当然,双倍工资也有大量的阿里员工不肯走,“阿里的员工最难挖”这是猎头的共识。
这种堪称硬通货的声名甚至远播海外。“硅谷做云的、做底层架构的华人工程师,如果要考虑加入国内公司,首选阿里”。
年初入选全球顶级开源社区CNCF技术监督委员会的李响,从卡纳基大学硕士毕业后曾一度进入硅谷公司CoreOS,但阿里的崛起震动了硅谷,这让他看到了另一种选择,他回到国内,入职阿里云。
加入阿里云后,李响负责大规模集群调度与管理系统,利用云原生技术升级阿里巴巴的基础架构,提升硬件利用率与开发、部署效率。成为阿里最年轻的几个P9之一。
对了,他是90后。
而且阿里有个特点,就是COO天下无敌,国内500家互联网企业,阿里出身的高管要占三分之一。
比如滴滴创始人兼CEO程维、美团的前COO干嘉伟、前大众点评COO吕广渝、前赶集网COO陈国环、去哪儿网COO张强。全都是阿里出身。
一毕业就进阿里,这样的人,你们可能不明白这是什么概念,我们一般会用两个字形容这种人:学怪!
知道学怪和学神什么区别么?面对学神,你会感觉无能为力,面对学怪,你只会大骂这个人一定开挂了。
当然,挂也有大挂、小挂、定制挂之分,而说到定制挂就不能不提道哥 :“刺总”吴翰清。但刺总这样的大佬只是少数,但也可以看出阿里的人才储备多么恐怖。
每年源源不断的优秀应届生是阿里“良将如云”的保障。今年阿里放宽了限制,增加了30%的基础技术研发岗,还开放了量子计算、人工智能、芯片研发、数据库研究等高端职位。但这些岗位对于庞大的毕业生队伍来说还是狼多肉少。
想进阿里,就得靠实力来拼。
阿里是最尊重实力的,而这种尊重也会为阿里带来好结果。
当年有一个名叫程立的年轻人,读博的时候偶尔给淘宝做些兼职。
在兼职过程中,支付宝的技术大牛苗人凤发现这个年轻人有非同一般的潜力,于是向他发出邀请,程立放弃博士学位,决定加入阿里,岗位级别是P4——阿里最低级的技术岗。
但是这个P4非同凡响,刚刚入职,程立就被指定负责支付宝第一代交易系统的自主设计开发。支付宝内部对此有句评语:“支付宝有多心大,P4就有多大”。
万万没想到,四年后,程立“单骑救主”,在支付宝最危险的17个小时里拯救了世界。
2008年,在一次关键的技术升级“账务三期”中,支付宝数据出现了错误。
对一个和钱有关的软件来说,数据上的错误足够彻底抹杀支付宝在中国刚刚打下的家底。
预计的停机时间8小时过去了,没能解决问题,不得不再延长7小时。
网上开始出现流言,说支付宝团队已经卷款跑路了,吓得公关部门急忙澄清。
就在这时,程立出手了。
从下午3点到下午5点,两个小时里,他安静的敲击键盘,并最终找到了数据无法配平的原因。
这一战奠定了程立的地位,也向世界证明,尊重实力,真的会有回报。
哦,程立就是鲁肃,蚂蚁金服CTO。
和很多喜欢大量招应届生的公司不一样,阿里对于校招的态度讲究的是宁缺毋滥。
这个宁缺毋滥还不仅仅是指能力,能力只是阿里考量的一部分,更重要的是潜力和价值观。
别家招聘像是吃东西,不管有没有用先吃下去,有用的消化了,没用的排出去。
阿里的招聘像是输血,从第一次见面就要你型号能对上,型号不对,不管是多优质的人才都只能讲拜拜。
要知道阿里的校招少,就是因为阿里重视校招,每一个阿里自己培养起来的人,都是未来高管的苗子。
把你招进来都是小事,但是十年二十年后,企业文化能不能传承,企业运作会不会僵化,员工能不能独当一面,内部会不会出现小团体……这都要看你的思路和性格来决定。
至于技术,阿里大神那么多,只要你悟性够,后面都可以慢慢学。
在阿里有一项传统制度叫“师兄制”,这是一项帮助新人快速落地和融入文化的制度,每一个新入职的员工都将有一对一的师兄作为导师。
阿里巴巴CTO行癫曾这么跟工程师交流:“如果是下一个技术突破点,不做的话会给我们带来什么样的影响;如果去做了,可能对我们现有或后续的业务带来怎样的帮助。“这些技术大牛鼓励工程师自我思考,每个人理性的思考和规划就是对公司的未来负责。
对校招的重视还体现在“阿里星”计划上。
“阿里星”是阿里巴巴从2011年开始施行的技术人才校招策略。业内讲,能拿到阿里星的offer,就能去全世界的任何一家科技公司。
但阿里星的要求极其严苛,面试要经过层层筛选,据说曾有人面试了13轮。每年的阿里星都会筛掉一大批高学历者,有位拿过7次ACM亚洲奖项的面试者都被阿里星打了枪,只能拿到稍次一点的offer。
相比厚厚的论文成果,阿里更看重在校期间学术研究和商业化之间的技术联系。
2018年阿里星陈谦,27岁中科大博士毕业,个人研发的AI技术,在国际大赛中击败IBM等公司,连拿两个世界第一,更是把人机对话准确率的世界纪录提升到94.1%。
联立是2019年的阿里星,博士期间研究的是可回收火箭发射技术。现在人在菜鸟。阿里巴巴的野心,你懂。
23岁的胡晋,14岁考上北京交大,19岁浙大免试读博,现在在阿里研究无人车。
所以虽然阿里星有各种各样的好处:上不封顶的年薪、顶尖大牛亲自带技术、最高管理亲自教格局。却不是一般人可以奢望的,只有应届生中的最强者才有这样的资格。
阿里不存在放置实习生,让实习生习惯工作流程的过程。当年炎轩进阿里实习,还没喘过气,直接被扔进了618活动的小组。哪有什么习惯环境,哪有什么适应期,上来就是最重要的工作。
炎轩能够突破这近乎不可能的实习期,才能在后面担负起双十一晚会“卢靖姗到你家”项目的策划,展示自己在AR技术上的统治力。
撑得起这样的责任,才能留在阿里。阿里作为中国头目的公司,给的是最头目的待遇,用的自然是最头目的人。
我劝现在的大学生好好做点事,别把大把时间浪费在游戏和泡妞上,不要辜负了自己考上名校的智商,也别辜负了自己未来的人生。多参加一些社会活动,多尝试一些创业、试错,为以后积累一点资本。人生的竞争不止一次,但总有一次机会你不小心落后了,就再也追不上去。
正好前段时间阿里校招,采访了几位在校招中拿到阿里offer的童鞋。给亲做个参考:
第一位:技术体验部前端工程师 源介
“在真正面试前,我已经准备很久了”
进入顶级的技术团队工作,是我最大的梦想。
从研一开始,我阅读了各类前端书籍,犀牛书、红宝书、蝴蝶书、CSS权威指南,一方面在实验室的项目中尝试前沿的前端技术,比如当时还处于0.12版本的Vue,node。
研二时,自己开始完成一些开源项目,自己给自己提需求,在实践中挖掘可以深入的点。
应聘前,有目的地准备前端面试:前端基础、前端框架、网络、安全、前端性能、浏览器原理、工程化、node相关、数据库、操作系统等,并以周为维度逐一复习和总结。算法对于前端同学也非常重要,我在leetcode上刷了200多题,学习算法和数据结构。
实习生面试则较看重编程语言及相关工具的掌握,对数据结构、算法等计算机学科要点的理解要扎实。
往届同学的面试经验是很重要的信息来源,同学们在面试前一定要多查阅,并参照着进行个人知识的完善。学弟学妹们还要注意知识面覆盖的完备性,尽量避免有知识空白的出现,比如一些前端同学在网络(比如http/https/http2/tcp/udp等)和安全等领域知识的缺失就会影响自己的面试表现。
面试时一定要调整好心态,即使被面到不会的问题,也要保持冷静、快速思考,尝试逐步分解问题,并一步步建立自己的思考逻辑,吐露自己的每一个想法,保持一种努力解决问题的姿态,而不是简单的“我不会”就放弃,这样即使给出的方案不好、甚至有错误,面试官也能了解你的构思过程和考虑边界。
面试后一定要立即做认真的记录,记下自己认为没有答好的点,然后做全面的查阅、理解,确保后续再问到类似问题时,能给到面试官最全面、准确的回答。
第二位 技术风险部高级开发工程师 孝泰
“第一份工作期待一个更高的平台”
在校招中拿到蚂蚁金服的offer非常有成就感,需要也值得为之付出大量努力。
对于校招的新人,扎实的基本功一定是面试官首要关心的,这方面的准备尤为重要。
关于知识点的准备可分为三层:第一层是能解释概念,第二层是能说明原理,第三层是了解实际应用的场景。
例如在面试中问到了java的volatile关键词的问题,能说出是保证多线程访问变量的可见性,并解释什么是可见性可以得1分;如果能更进一步从CPU缓存角度讲清楚volatile关键字的实现原理,可以再得1分;由于这个关键词平时用得比较少,可能没有什么直接使用过的经验,但如果能答到Java的AtomicInteger类中为什么会用到volatile,解决什么实际的问题,又可以再得1分。
个人觉得能从这三个方面解释清楚一个知识点,就算是对这个知识点掌握得比较扎实了。
还有比较重要的是要有一个比较清晰的职业规划,目标越明确就越能有针对性地提高。
面试心态一定要自信。应届生在项目经验上可能相对较少,所以有时候会感觉说话没底气,甚至有遇到过同学在面试一开始就说觉得自己技术不太行。虽然感觉上是挺坦诚的,但其实已经给面试官留下了很不自信的印象了。其实你行不行,项目有没有挑战是面试官需要去判断的,你需要的只是清晰的有条理的把自己的理解说出来就可以了。
在面试策略上,无论你准备得多么充分,一开始也一定会紧张,所以要多参加一些面试,不要只准备想去公司的面试。很多企业都会把最优秀的员工投入到招聘中,参加面试对自己没什么损失,和优秀的面试官交流,面试能力也会大大提高。
如果能在面试你心仪的公司前就收割大量offer,也有助于公司认同你的价值。
总之无论现实如何,内心始终要坚信付出一定会有收获,你现在的付出将来一定会以各种形式回馈到你身上。
第三位 平台数据技术事业群中间件开发工程师 无暮
“想要变强,首先要站在强者中间”
【复习】复习大学课程学到的计算机基础知识,包括数据结构、算法、操作系统和网络相关知识。复习不仅是为了面试,也能让自己整理归纳所学,达到连点成线、织线成网的效果。
很喜欢左耳朵耗子的一句话“基础技术总是枯燥和有价值的。数学、算法、网络、存储等基础技术吃得越透,越容易服务上层的各种衍生技术或产品"。等实践多了,就会发现很多项目中用到的技术和基础技术里面的思路很相似。学好基础技术走遍天下都不怕。
【应试】对于应届生来说,其实考点还挺清晰的,网上已经有很多总结,也有很多面经:
数据结构:常见数据结构List、Map和Set的实现原理和应用场景,稍微上升一点,java.util.*里面数据结构的源码分析;算法:几种排序算法的实现、复杂度和应用场景,稍微上升一点,当处理内存放不下的海量数据的TOP K问题、排序问题等等;操作系统:内存分配寻址、线程调度和磁盘访问;网络:七层四层协议、TCP/IP握手挥手和拥塞控制;数据库:基本的SQL、数据库引擎的区别和索引的类型和原理。掌握了上述的这些,个人觉得作为应届毕业生已经合格了。前提是真正的掌握,要“由表及里,知其所以然”。最好是自己模拟问自己,能经受得住3轮以上的提问。
【成长】成长主要来自于书籍的阅读和探索。建议读《Thinking In Java》、《Effective Java》、《Java Concurrency in Practice》、《深入理解Java虚拟机》和《Netty In Action》等书籍。养成习惯采取三步法去了解一项技术:外在行为/表现是怎么样的;怎么实现/原理是什么;为什么要选择这样做,目的是什么,优劣是什么。看书不仅能让自己系统掌握一项技术,技术书籍中还会留下一些进阶知识的引子。
下方云栖君再给大家分享一些阿里面试宝典,技术类的资深终面官永叔给大家送上实用的面试秘籍,希望对各位想进阿里工作的童鞋有所帮助:
Q:面试官看简历,最关注哪些部分?
A:导师和实验室、研究方向都会关注,还有他的论文,我们都会提前去下载来看,并提前准备问题。其他信息我们会也看看有没有加分项。细节上,邮箱的名字能看出来有些同学很重视细节。TIPS:简历第一页一定要把最关键的信息写上,简历篇幅不要太长。
Q:面试过这么多同学,您对同学们有什么面试忠告?
A:面试的基本要点很多,很多同学容易犯的一些小问题,我总结几个点分享给大家:
1、一定不要迟到,这是起码的尊重。对面试官也是这样的要求。
2、对简历内容要有准备。对自己的优点,包括技术/个性上的亮点,要练习表达,避免临时组织语言。
3、尊重事实,如实回答。每个同学擅长点不同,面试官风格也不同,问到自己不清楚的地方,请不要试图去强掰,实事求是回答就好。
4、心态放平。碰到压力面试的时候,不要试图去挑起PK的氛围。在面试过程中,面试官的最终目标是希望帮助面试同学,找到问题最优解。做好自己,平时多加练习。
Q:面试到底面哪些维度?同学们需要怎么准备?
A:阿里的用人理念是非凡人、平常心、做非凡事。我们期待的人员特质是聪明、乐观、皮实、自省。下面用技术类的同学举个例子:
计算机类的同学,我们更关注基础。公司有一套完整的流程体系去培养一个工程师,面试更多是基础素质的考察,比如概率、矩阵等。不用特意准备,但基础的知识还是需要去复习的。
此外,我们更多看的是你思考的路径,思考的工具和方法,你应对问题的反应如何,过程中融入一些软技能的考察。当然,我们还会考察学生的潜力。自己的项目经历,论文等,这一块的考察我们首先会确认真实性,更多的会关注细节。千万不要把别人的项目写到自己的项目里面,一旦发现后果很严重。
另外,Coding能力是必须的,建议一定要练习,并且我们有速度要求。面试官面试过程中会要求在线写代码,实时同步过程。主要考察编码风格、准确性、熟练程度。毕竟没有哪个面试官会用一个在工作技能上无法和团队合作开展工作的人。
Q:学历是不是招聘的门槛?
A: 我们只以能力论英雄,不唯学历论。这几年的面试过程中,我们发现一个现象:很多优秀的同学,在日常学习中会主动去了解、重视企业需要的能力项,并不断通过自学习去拉近自己与目标值的距离。这个是非常好的趋势。
Q:哪些因素会导致同学面试不通过?
A: 我们不会因为学生某个能力不足就PASS掉。面试是一个逐步肯定的过程,不是一个否定的过程。
一般面试官最后都会问,你有什么问题要问我的吗?其实面试官希望知道的是同学对职位/部门/公司是否有了解,基于你了解的信息你有什么样的问题,如何在这个环节提出高质量的问题,也反映出来你对这个面试是否重视。但很遗憾,这个环节能回答好的同学并不多。最后这个提问机会是给到他展示自己综合能力的机会,但很多人却把这当做面试结果“comfirm”的环节。还有同学拿问题去考面试官,或者纠结于某个问题应该怎么去回答,完全忘记了面试是展示自己,不是学习交流,也不是PK。
Q:如果碰到特殊情况,同学该怎么做?
A:整个面试的节奏是面试官和同学共同营造的。如果自己对面试官提出的某个问题确实没有想法,或者觉得题意不清晰,你可以表明自己的态度,或者请面试官更加清晰地描述下问题。现场状态不OK的情况下,一定要说NO,不用去迎合面试官。我们要的是展示自己,面试官做的是协助同学展示最好的自己。
Q:说说您面试过哪个同学,让您印象最深刻?
A:2018年,我面试过一个同学,目前他已经入职我的团队,面试的时候他提到自己的生活习惯,对管理自己的时间还是很有想法的,自律程度让人吃惊。入职之后,这个同学他也是这么做的,每天早上6-9点是他的学习时间。每天早上6点钟-8点在家看书,8点到公司后,继续再看1个小时的书,风雨无阻。他学习结束,其他人才刚到公司。工作之余,他还投入在工作论文的发表上,刚投出去2篇。业务上,他现在是我们团队的骨干力量。从对他的观察里面,不难发现,优秀的同学基本都来自于高度的自律。
Q:如何避免面试中的“雷区”?
A:我曾经面试过一类候选人,2分钟的自我介绍候选人滔滔不绝,没有重点,所有问题都会发散,整个面试的过程一直在show off自己,但没有get到问题的关键点。这样的面试体验是不好的。
Q:很多学生困惑于该怎么选择岗位,您有什么建议呢?
A:尽可能了解这个岗位未来的职业发展是什么样的,是否具备岗位的敲门砖。阿里不同部门内推信息网上有很多,可以找相关的师兄去问。同时,可以去做一些测评,看看自己是否对自我有足够的认知。
不论你的学历好还是不好,看看这篇经验,对你拿到互联网一线公司的offer绝对有帮助,不论你是想深入学习,还是想快速突击拿到面试offer,那么本篇对你绝对有帮助.
0. 写在之前
首先呢牛人的面试经历和一些面霸和收割机的大神相比绝不算丰富,但牛人的经历应该能代表很大一部分人的心路历程:
从无忧无虑也无知的状态,然后遭遇挫败,跌入低谷,连续数天的黑暗,慢慢调整,逼着自己不能松懈,看到改变,收获肯定,分享经历。
最直观的感受:
offer = 心态 * (实力 + 面试技巧) + 缘分运气
就从左到右说起吧。
对了,以下经验是长期积淀的过程,如果你想快速突击,那么这个github可以看看,github.com/gzc426/Java-Interview这个github仓库,内容很丰富,面试的时候帮助很大,很用心很有帮助了。
1. 心态
其实每个阶段的改变,也都是心态转变的过程,所以首先要说的一点,就是心态。在上面这种公式里,心态作为一个因子存在。没错,心态可以影响你面试的准备,笔试的状态,实力的发挥,可以影响一个面试过程的方方面面。心态崩了,就只剩运气了,offer估计也就走远了。
那怎么调整自己的心态呢?
首先是要正视自己的能力。不轻视,不高估。不轻视指的是我们都要对自己有信心,毕竟选了这个行业和方向,说句不好听的话,机会那么多,就算你不怎么努力也会有个差不多的offer不是么?千千万万的初中创公司,各种拥有垂直领域稳定份额的二三线公司甚至有些已经上市,除此之外还有银行,投资,金融的IT岗,还有各行各业为了互联网+的策略而扩展的互联网分支(当然像链家这种已经算互联网+传统行业的典范了,我前些天还瞅到了像万达德勤一类的各行业巨头也在招程序开发...)所以啊,要对自己有信心,在这个行业十分缺人的年代里(当然各个层次的公司缺人的标准是不一样的),总不至于会失业吧。
不高估就是要清楚自己的能力范围,不是说期望过高不好,但过高的期望会让你的心理变得脆弱,稍有不顺心态就有崩掉的趋势。因为面试毕竟有太大的偶然性,就算你达到了一定的水平,相应水平的岗位也不是百发百中的,更不要说身边有那么多大神和收割机,天天拿offer拒offer,对心理都是不小的冲击。
不要总给自己消极的暗示,心态差了积极调整。大多数的人,总暗示自己说什么时间不多了,怎么每天过这么快效率怎么这么低。到笔试了,跟自己说这个算法太难了,肯定做不出来;临到面试了,跟自己说千万别问我linux内核,别问我分布式,问我肯定完;面试过之后,没有结果,就天天想肯定又挂了,唉我怎么这么菜。
如果这一系列的表现形成习惯,那心态这个系数最多0.5,能发挥出来的东西也都打了一半的折扣。凡事都不要太悲观,一个offer没拿到,正常情况是这个失败的经历产生的经验和总结是会让下一次的成功率提高的,千万别因为这些消极的暗示,反而让该有的提高都没有了。
心态差的时候反而要停下你重复而没有效率的工作,去调整一下,可以出去玩一玩,吃吃喝喝,不要把这几个月看得有多么不一样,好像耽搁两小时就要来生再见一样。
对于身边的同学,多交流,不比较。有一些一起准备的好伙伴是件非常好的事情,不仅可以互相督促,而且可以在交流和分享的过程中取长补短。(哪怕是偶尔一起吐吐槽发泄一下也比一个人崩溃要好得多)。但对于每一次面试,只跟自己比就行了,面试的整个过程都是最怕比较的,偶然性大,而且每个人适合的方向和技术栈都不一样,结果不能说明一切问题。如果身边有些收割机,那更不要太在意这些天天拿offer的(尤其是拿一个就跑过来讲一句的,他们也许没有恶意,但他们可能真的想不到这种方式会对别人产生怎样的冲击)。
对自己的水平有个很清楚的认识,并选择自己合适的公司,好好准备自己的笔试、面试,不怕失败,但保证每次面试都有收获和提高,那满意的offer早晚会来。
2. 实力
这里说的实力指的是硬实力,也就是技术上的真实积累(当然产品岗的就是对于产品相关知识的积累),而其实呢软实力在面试过程中也尤为重要(有时候真的要更重要),主要是指和面试官的沟通,对一个问题的阐述方式和表达方式,逻辑思维能力以及的价值观和为人等。
然后关于这个软实力我想放到下面的技巧中去说。
如果你平时有些项目积累,不擅长也从来没有怎么系统地总结过;如果你学习呢不算那么认真刻苦,研究搞得也不算出众,但是你该努力的时候也会努力,可以为了一个好的工作逼自己一把。
那也许下面说的实力和技巧都可以在一定程度上帮到你。(因为我就是这样的情况)
实力怎么能体现出来这么说是因为很多人其实在这些年的项目或是学习中有一些积累,但是在刚开始面试的时候完全感觉使不出力,就是有种你问的我都能讲上一点,但根本说不清楚的感觉。(往深了问自然是完蛋)
知识面或者或者说技术栈都是有宽度和深度的,我们要做的就是在短时间内提升宽度,抓住以往本身就熟悉或是感兴趣的几个点去深入。
我是认为知识的宽度可以很大程度上决定你能不能通过面试(这里说的宽度并不是简历上了解、知道或者你都没往简历上写,仅仅是听说过的层面修饰的方面,而是写熟悉的那种,通俗地说是可以讲清原理,不涉及横向对比和优化的方面)
一两个点的深度呢在保证你能通过面试的同时(尤其是你的点正好cover了对方部门的技术栈),并且还是影响offer等级的关键因素。(达到足够的深度,不只能说出原理,还能进行横向技术对比,纵向的延伸技术,优劣点及优化,或者在这个点写了几篇很透彻的博文,更厉害的同学甚至有相关的开源项目的参与与贡献)
关于怎么提升宽度和深度可以看下面的积累(其实说真的短期内宽度是好补的,深度确实要看个人,是代价较高,性价比不一定高的一方面,看自己的决定吧)
所以我的建议是,先把宽度提上来,把你能cover的知识点及原理搞懂是第一步。建议对自己之前的项目和技术积累做一个总结和分类(可以参考下面的技术路线),然后对已经了解的方面尽可能延伸,对盲区或是薄弱的地方进行针对性的学习和练习。
当你的知识面覆盖到一定程度的时候,你自然会把他们的联系搞明白,慢慢理解这整个技术体系,在面试的过程中结合表达技巧可以关联起来说各个方面,也就可以很大程度上展现自己的真实实力.
实力包含哪些方面基础知识:算法和数据结构数组、链表、二叉树、队列、栈的各种操作(性能,场景)二分查找和各种变种的二分查找各类排序算法以及复杂度分析(快排、归并、堆)各类算法题(手写)理解并可以分析时间和空间复杂度。动态规划(笔试回回有。。)、贪心。红黑树、AVL树、Hash树、Tire树、B树、B+树。图算法(比较少,也就两个最短路径算法理解吧)计算机网络OSI7层模型(TCP4层)每层的协议url到页面的过程HTTPhttp/https 1.0、1.1、2.0get/post 以及幂等性http 协议头相关网络攻击(CSRF、XSS)TCP/IP三次握手、四次挥手拥塞控制(过程、阈值)流量控制与滑动窗口TCP与UDP比较子网划分(一般只有笔试有)DDos攻击(B)IO/NIO/AIO三者原理,各个语言是怎么实现的NettyLinux内核select poll epoll数据库(最多的还是mysql,Nosql有redis)索引(包括分类及优化方式,失效条件,底层结构)sql语法(join,union,子查询,having,group by)引擎对比(InnoDB,MyISAM)数据库的锁(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁,以及加锁的select sql方式)隔离级别,依次解决的问题(脏读、不可重复读、幻读)事务的ACIDB树、B+树优化(explain,慢查询,show profile)数据库的范式。分库分表,主从复制,读写分离。Nosql相关(redis和memcached区别之类的,如果你熟悉redis,redis还有一堆要问的)操作系统:进程通信IPC(几种方式),与线程区别OS的几种策略(页面置换,进程调度等,每个里面有几种算法)互斥与死锁相关的linux常用命令(问的时候都会给具体某一个场景)Linux内核相关(select、poll、epoll)编程语言(这里只说Java):把我之后的面经过一遍,Java感觉覆盖的就差不多了,不过下面还是分个类。Java基础(面向对象、四个特性、重载重写、static和final等等很多东西)集合(HashMap、ConcurrentHashMap、各种List,最好结合源码看)并发和多线程(线程池、SYNC和Lock锁机制、线程通信、volatile、ThreadLocal、CyclicBarrier、Atom包、CountDownLatch、AQS、CAS原理等等)JVM(内存模型、GC垃圾回收,包括分代,GC算法,收集器、类加载和双亲委派、JVM调优,内存泄漏和内存溢出)IO/NIO相关反射和代理、异常、Java8相关、序列化设计模式(常用的,jdk中有的)Web相关(servlet、cookie/session、Spring<AOP、IOC、MVC、事务、动态代理>、Mybatis、Tomcat、Hibernate等)看jdk源码如果你对以上的知识点想要一份知识点的详细总结和常见面试题和答案,那么这里刚好有一份Java面试突击手册,有常见面试题和答案。1.数据结构与算法篇
你是java开发你就用java代码去实现,是C++开发就用C++去实现。
书籍参考:
(0)《图解算法》入门
(1)《剑指offer》 剑指Offer_编程题_牛客网
(2)《程序员代码面试指南 IT名企算法与数据结构题目最优解》参考左神视频
(3)leetcode LeetCode - The World’s Leading Online Programming Learning Platform
leedcode注意去英文官网,别去中国区,中国区讨论区讨论的少。
leedcode 注意一个tag一个tag的刷,例如动态规划,就把动态规划下的题目都刷了,基本刷个10多道,其它也基本有思路了,而且动态规划的题目笔试面试也常出。其次就是二叉树,链表,数组,回溯的题目。
(4)数据结构(严蔚敏)/大话数据结构 //如果觉得教材无聊就可以看大话系列
需要掌握的知识点:
数组、链表、二叉树、队列、栈的各种操作(性能,场景)
二分查找和各种变种的二分查找(循环有序数组找最大值最小值找n,有序数组找最左下标,最右下标)
各类排序算法以及复杂度分析(快排、归并、堆、冒泡、直接选择、插入排序)
各类算法题(手写)
理解并可以分析时间和空间复杂度。
动态规划(笔试回回有。。)、贪心。
红黑树、AVL树、Hash树、Tire树、B树、B+ 树(除了红黑树,其它要会插入删除查找,红黑树如果会更好,也算一个亮点)。
图算法(克鲁斯卡尔算法、普林母算法、迪克拉斯算法)
树的前序后序中序遍历的递归非递归实现,层次遍历,深度优先遍历,广度优先遍历递归与非递归实现
2.海量数据篇
教你如何迅速秒杀掉:99%的海量数据处理面试题 - WantFlyDaCheng的博客 - CSDN博客
blog.csdn.net
3.计算机网络篇
参考书籍:《图解http》《图解TCP/IP》《TCP/IP详解卷1》《计算机网络(谢希仁)》
知识点:
4.数据库篇
参考书籍:《高性能MySQL》 《MySQL技术内幕:InnoDB存储引擎(第2版)》
5.操作系统篇
参考书籍:
知识点:《操作系统精髓与设计原理(原书第6版)》
LRU会手写一个LRU的set与get的时间复杂度是o(1)的代码
6.Linux命令篇
参考书籍:《linux 鸟哥的私房菜》
7.安全加密
8.重头戏java篇
基础篇:
推荐书籍:《Java程序员面试笔试宝典-何昊》突击java面试的好书啊!!!
《写给大忙人看的JavaSE8》 《深入理解Java虚拟机:JVM高级特性与最佳实践》
《JAVA并发编程实战》《Java多线程编程核心技术》《java核心技术卷1》
1.基础篇:
2.集合篇:
3.锁
4.多线程
多看看《Java多线程编程核心技术》这块就没问题
5.jdk中的concurrent 俗称juc包
都要搞懂底层原理!!!
都要搞懂底层原理!!!
都要搞懂底层原理!!!
6.java虚拟机
主要看《深入理解java虚拟机》
7.设计模式
参考书籍:《大话设计模式》
知道每种设计模式是啥意思,可以手写一个单例模式,手写适配器模式,工厂模式,观察者模式,装饰器模式
知识点:
---------------------
8。框架知识
项目经历这个每个人的项目不同,覆盖的技术也不一样,所以不能统一去说。这里的技巧呢,在下面也会详细说明。无非是找到自己项目中的亮点,简历上叙述的简练并且吸引眼球,同时自己要很熟悉这个点(毕竟可以提前准备)最好自己多练,就像有个剧本或者稿子一样,保证面试中可以很熟练通俗地讲出,并且让人听着很舒服。实习经历这个很抱歉,因为我是找实习的经历,所以也没有实习经历的讲述经验。但我想如果你有实习经历,那面试过程的重点也会在实习做了什么上面,所以大家最好对实习所做的工作做一个总结,并且同样抓出亮点,搞懂内部原理,提前锻炼讲述的过程。其他扩展技能(这个方方面面太多了,全部掌握基本上不可能,只是作为大家其他时间扩充技能的参考)分布式架构:(了解原理就行,如果真的有实践经验更好)CAP原理和BASE理论。Nosql与KV存储(redis,hbase,mongodb,memcached等)服务化理论(包括服务发现、治理等,zookeeper、etcd、springcloud微服务、)负载均衡(原理、cdn、一致性hash)RPC框架(包括整体的一些框架理论,通信的netty,序列化协议thrift,protobuff等)消息队列(原理、kafka,activeMQ,rocketMQ)分布式存储系统(GFS、HDFS、fastDFS)、存储模型(skipList、LSM等)分布式事务、分布式锁等脚本语言:(只是作为横向扩充,一般问到linux也会问问shell脚本)pythonphpshellgolang...大数据与数据分析:hadoop生态圈(hive、hbase、hdfs、zookeeper、storm、kafka)spark体系语言:python、R、scala搜索引擎与技术机器学习算法:模型和算法很多。不细说了,如果很熟练就去投算法,国内很多公司都算法岗都很稀缺,其他岗可以大概了解下理论。其他工具的理论和使用:这个更多了,问的多的比如git、docker、maven/gradle、Jenkins等等,自己需要的话选择性地去学。实力要怎么积累积累实力最好的方式就是平时在项目中或是学习中,多学多问,多思考多钻研。这里就说说短期内学习的一些方法和路径:
总结下来,一方面是通过看书、看视频、看面经来不断扩展自己的知识面,一方面是通过不断的面试积累经验和知识盲区,在每次总结的过程中积累实力。
先说说看书学习这一点这里应该是有个推荐书籍的环节,这几个月确实看了不少书,但是并不是所有都有很高的性价比,在这边大概列一下,前后顺序也一定程度上代表了我认为的重要度先后,'/'做分割的是一类的书籍,一般来说看一个就够了:
书单: 算法与数据结构: 数据结构(严蔚敏)/大话数据结构 //如果觉得教材无聊就可以看大话系列,印象中里面还有很多诗 剑指Offer/程序员面试金典/编程珠玑/编程之美/牛客网+leetcode 程序员笔试面试最优解(左程云)/不如直接看左神的笔试面试指南视频 Java的版本(不是很推荐): 数据结构与算法经典问题解析(Java语言描述) 图解数据结构(使用Java) 计算机网络: 计算机网络(谢希仁) TCP/IP 详解 HTTP权威指南 图解TCP/IP 图解HTTP 数据库://数据库主要是多用,书上主要看索引和性能的部分 高性能MySQL/深入浅出MySQL 操作系统: OS原理:操作系统(课本,黑色的那个) Linux: Linux私房菜 //鸟哥写的,很全,包括bash部分 跟阿铭学Linux //主要偏重于命令和操作,比较浅显 java: Java疯狂讲义/Java编程思想/Java核心技术 卷1 深入理解Java虚拟机 并发编程的艺术/多线程编程核心技术 Effective Java Java程序员面试笔试宝典 //何昊的那本,个人感觉是突击知识点的神器 Java程序性能优化 实战Java高并发程序设计 Java Web: Spring实战/轻量级JavaEE 企业应用(红皮,讲SSH的) //主要看最后一部分Spring的就可以 深入JavaWeb技术内幕(阿里 许令波)//这个讲的还是比较深的 SpringBoot实战/深入实践SpringBoot 设计模式: 大话设计模式 //通俗易懂 各类博客的总结 分布式与大数据: 分布式服务框架原理与实践 大型网站技术架构 Hadoop实战(hadoop体系包括得很全) //还有一本我暂时想不起来名字了 其他: Git: Git权威指南 Git官方讲解视频(牛客网有带字幕的) Redis: Redis实战 还买了docker、springCloud等等一些工具书,因为太小众就不列举了除了上面说的书和视频,最有用的还是大家分享的各种面经。
我当时是每天晚上在床上看几篇面经,然后把存疑的问题copy到记事本中,第二天找个固定的时间短查询解决和总结。长期下来会养成一个很好的习惯,你的知识点会不断地扩充。
在一次次面试中提高这一点其实跟刚刚看面经的那个很类似(那个我不是叫做模拟面试了吗),每次面试完,一定要把自己不会的东西尽快记下来(当然你如果有记面经的习惯就更好了,还能再分享出去),然后找时间弄懂和总结。
除了知识点,每次面试(跟模拟面试不同的地方)还要总结的是哪里发挥得不好,哪里有可以提升的地方,下次一定要注意之类的。(就是有关面试技巧的东西,比如这次语速太快,导致面试官反馈了,又比如这次发现对方让你在纸上画个项目逻辑图突然一时脑梗,那回去就好好在本上画一遍)
3. 技巧
一些自身的软实力软实力这个东西与面试的准备关系不大,基本上是长期形成的。
包括和面试官的沟通(有的时候也会成为聊天瞎扯的能力);对一个问题的表达方式,逻辑思维(像有些人的发言就让人听上去很有层次感,很舒服,这方面欠缺的可以推荐玩玩狼人杀);除此之外对方也会很在意你的价值观和为人(这个是我进了公司发现的,很多公司在内部的面试细则上面都会注明这一点,如果价值观或是人品问题会直接否决。)想想也是有道理的,因为这个是入职之后能不能好好相处的关键,设想如果你是一个面试官,面对一个有实力但是说话太有棱角聊不太来的和一个不算出众但基础不错很听话可以培养的,你会选哪一个?(如果你因为生活太平淡了想选第一个,那这一条当我没说。。)
这些软实力其实要在生活中慢慢锻炼,比如多参加些活动,多和别人沟通,发表意见前好好组织自己的语言等等。(每个人都有每个人的性格,这些都因人而异,但有一点我们要记住的是在面试中,不论什么情况,都要保持冷静和清晰的头脑,和一个谦卑的态度,交流要坦诚<尤其作为应届生>,这样起码印象会好很多,要知道虽然面试有各种各样花式的打分项,但是印象好往往是隐藏的决定性因素)
关于面试的准备和技巧面试的技巧首先就是刚刚说到的态度。 一个谦卑(注意不是自卑,也不是把自己放的很低的样子)和礼貌的态度和表达方式往往可以让面试官的印象分提高很多,印象分很像之后要考察的实力分的系数。留个好印象,面试就成功了一半。(当然你一定也听过那种聊得很嗨,或者偶遇校友之类的,毛都没问就聊通过了的场景。这种情况还是不算在技巧中了吧,应该属于运气和缘分的范畴。而大多时候聊得开心和舒服会让你感觉到通过率会比较高,这一点很多人还是深有体会的)
然后说一下面试之前可以做足的准备。首先从简历开始说,简历怎么调格式,做几页,排版啥的就不想多说了,感觉很多文章都分享过。我只说说技术方面的内容怎么写。
专业技能的描述谓词无非就那么几种:精通、熟练、熟悉、了解。(还有一级叫听说过,这个级别的可千万别往上写啊兄弟)
精通感觉一般还是不要写,除非你在某个技术点上真的有足够的把握,比如源码看的很透彻的同时还能深刻理解原理并能灵活处理各种case场景,如果还有相关的开源贡献,那就自信地写精通吧。
我们把自己掌握的大多数技术点叫做熟练掌握,这个需要我们在之前对各个技术点进行横向纵向的复习和总结,并不只是用的多有经验就行,有的时候我们觉得熟,但真让你说的时候却不知道从何说起。
至于熟悉和了解,可以写一些自己理解原理但是不常用的技术点,尤其是比较流行的,各大公司都在用的技术(比如MQ,分布式缓存等等),这些你在学校不一定用过,但是你可以通过看博客,写demo去理解他的设计和原理,面试的时候可以讲得清楚。
这里还有个技巧,更细心的同学可以针对每个公司岗位的job detail不同,熟悉和了解这块就针对jd中cover的技术点去写。这个做法是很聪明的,毕竟熟悉和了解这个层面是可以提前学习和准备的,有针对性的去写对方需要的,是提升通过率很好的一种方式。(如果嫌麻烦就算了,比如我就是)
下面再说说项目经历这块:叙述一定要精炼到位,细化到每一个亮点上。我现在再看我二三月份的简历简直是有种想撕了的冲动,当时就是项目描述两三行,然后概括下我大概做了哪几个模块。完了。
事实上,不能讲得这么泛泛,就从中找2-3个亮点,一句话高度概括,突出亮点。
比如后来我就把我一个普通的web项目挖出来三个点(爬虫,通信控制方面,安全加密方面),分别用一句话叙述,这一句话最好包括这个技术点的思路,解决了什么,有没有做什么优化。比如一个爬虫工具可以写成这样:
我负责这个系统中爬虫的开发,终端控制管理,店铺管理。。。。
是的,上面这个爬虫就占用了五个字,等于没说,面试官看到压根不知道怎么去问。这里还可以这样写:
负责系统中爬虫模块的开发,用于爬取影片的各种信息,包括年份,介绍,主演信息等。
这个起码告诉面试官爬虫做了什么,但是你并不能保证他会问,因为你的叙述不一定能引起他的兴趣。那还可以这么写:
独立开发多线程影片信息爬虫工具, 并针对线程池性能、网络异常以及反爬虫措施进行多次优化,容错性良好并达到并发请求30+的QPS。
你觉得面试官看到这句话,他不想问点什么吗(除非他真的就不想要你)。
所以说,其实面试官呢都是希望在面试的过程中发现我们的亮点和优势,从而展开更深层次的交流,但是往往在简历中没有一个让他询问的入口,这样就可能导致他会随意问(比如你了解什么什么吗?一般情况下都不太乐观),或者就说那你来讲讲吧(这种问法其实已经表达出他不知道怎么问的情况了,你在讲的时候一定要突出重点,否则会让人感觉没什么亮点,普普通通的项目而已(当然就算是普通的项目,我们也要挖掘它的价值和自己的价值不是))
我们在面试的过程中最重要的是自己掌握主动权,如果面试官问的都是我们熟悉的范围和准备过的领域那我们答起来也会更加得心应手。而让面试官随着我们简历中埋下的这些亮点(他就算知道你有意想说这一点,往往也会去问,因为他就是想在短时间的面试中了解你处理问题的能力),去进行更深层次的交流,而这个更深层次的交流,还需要我们针对简历上的每一句话,都准备多个层次和维度的扩展。
比如还是这个爬虫,你可以充分扩展线程池的相关优化(有可能项目中没有怎么优化甚至就是个单线程,但是在准备面试的过程中还是可以专门去做一些code重构的),优化网络的NIO相关扩展,以及反爬虫的各种各样的措施,以及爬虫方分别如何应对。这里只要你去想,能准备的东西太多了,面试多了自然也就越来越熟,好像项目就是做得这么完美一样。
这里我就不怎么扩展去说了,再讲下去这篇文章就写不完了。。。
最后是面试中的技巧和经验。
好好对着自己写的简历一行一行看一遍,这都是你挖的坑,是准备给面试官作为切入点交流的,并不是自己往里跳的。(对每一行都要有足够了解和把握)面试过程不要紧张,尤其是前几次,建议先从小公司入手锻炼下面试经验(参考我之后自身的反面教材面试方式不同,侧重点不同(无非是电话、视频、现场三种)。电话面试建议找个人少安静的地方坐着回答,并且建议拿纸笔多做记录多画多写。(当然如果你觉得身边很多朋友可以让你越聊越嗨那也可以,坐着是让你整个节奏慢下来,说话明显更加沉稳,亲身体会过站着走来走去和坐着的区别)视频面试其实和电话类似,只是可以实时写代码,面试官能看到你的表情。这里还是要放松,如果你比较紧张,可以不直视镜头,好好想问题就是了,因为很多面试官你答得好也会面无表情(因为他们也不常视频,表情都很尴尬),然后你看到他们没表情的表情肯定会受影响。现场面呢,最重要的是和面试官互动了,说几个点:语气要轻松点,多点肢体动作有助表达,多笑;不太好说清的就用笔在纸上画,一遍画一边讲,面试官也会更容易和你交流;如果你可以时不时幽默一下开开玩笑是更好了;见面和离开记得礼貌地握个手说声谢谢。学会平等交流,别把自己身段放的太低。其实有一点你要清楚,面试是个双选的过程,他可以拒绝你,你也可以拒绝他。千万不要太上赶着,反而会影响自己正常的表达和逻辑。(就跟你见了喜欢的姑娘就不会说话了一个道理)回答问题的时候不要一口气把知道的全部说完,然后还毫无条理。学会一个知识点由浅入深讲解给面试官,并且留有余地给他进一步去问。举个例子:就说最简单和普遍的HashMap,让你讲讲,你就可以先说说hashMap的设计原理,底层结构(链表+数组)扩容方式等,从这你就可以说说这种设计好在哪里(比如讲一讲put是如何做hash的),这时候你可以说这种hash可能会有冲突,hashMap也是做了相应设计的。然后面试官会问题你怎么解决冲突?你可以再给他讲讲解决hash冲突的三种通常方式,而hashMap用的是链式法,然后可以说到这样会有隐患就是hash链过长。面试官再问,你会给他讲解决复杂度高的长链用了红黑树的结构,这里还可以延伸到红黑树的特点或者jdk7和jdk8的不同实现,这时候你可以说解决hash冲突,但hashMap还会有并发和同步的问题。面试官会让你再讲讲,你可以说说hashtable是线程安全的,怎么实现的(sync函数),并不好,从而引出更好的juc包,说说concurrentHashMap,之后又可以说道锁分段原理,弱一致性迭代器,concurrentHashMap的锁粒度(java7和java8不同),同包的CopyOnWriteArray等等。你还可以延伸说到锁(重量、轻量、悲观乐观各自实现、底层源码等等)、缓存(因为很多时候Map的结构可以作为缓存,从而可以说到缓存系统的设计,kv原理,分布式缓存redis、memcashed等等)举这个例子就是想说,一个简单的基础问题可以一步一步有条理有层次的回答,每一层表达完抛个引子,让面试官可以继续问下去,从而让面试官真正了解你的掌握的深度。如果真的不巧聊到不擅长的地方,学会转移话题,从一个点中聊自己感兴趣或是有把握的方面(比如你对消息队列不太熟但是redis用的熟,你就可以在问到消息队列的时候说,因为之前都是自己做的项目嘛,性能方面没有考虑到最优,一些异步的方式还是靠redis list去实现的,虽然redis的消息机制并不常见,但当时还是满足了需求,之后可以考虑性能方面的提升和技术评估;又比如问你http请求细节,rest的设计实现细节,你可以说http restapi服务接口性能的一些不足,后来使用了rpc的方式,当然你这么说一定是要对rpc很了解)其实有的时候面试官是知道你是有意转移的,但是往往他们也不会抓着你不会的去问,非让你自己承认自己的盲区,他们也许根本不在意这些。如果真的被问到不会的,就直接说你不会(说你不会、说你不会,我再补充两遍),或者礼貌地说这方面可能我还要多学习。(对一个拿不准的问题千万不要猜,即使是二选一的那种问题,猜错了直接完蛋,猜对了被人看出来,再往深问还是完蛋)另外,像可能,大概是,我觉得这种表达最好不要,一听就是对一个点没把握,有可能会让面试官觉得学习太浮躁不喜欢寻求原理。那对于自己知道原理(确实是理解了的)但是没用过的东西,就讲讲原理,并承认自己实践不足,表现出好学的态度。面试一定要真诚。问到有什么offer就直接说,不要藏着掖着,也不要把更好的offer(比如bat的)讲的非常诱人,一副bat我都拿到了的样子(面试官会心想,那你还来面试我们干什么)。再强调面试过程一定要真诚。除了直接说,诚实点之外,也要真的做些思考:对方公司跟之前的offer比优势在哪,比如平台更大?专业技能栈更match?工作更有挑战力?地点更合适?有机会留用?随便一条符合的都可以讲出来,起码让对方觉得你想来面是有原因的并且真的有可能加入。(如果你还提前了解对方公司的文化,可以讲出这个文化自己很认同那就更可以了)4. 缘分和运气
关于这一点只有一句:平时多做好事,热爱生活。
其实都知道面试要讲缘分,讲运气,但人往往可以在很顺利地通过面试之后说句运气好运气好,却很难在努力准备却失败的经历之后保持平静。
但不管能不能转运是不是本命年有没有缘分,努力和收获的关系总是多年不变的真理。
所以,讲心态,讲实力,讲方法。足矣。