标签 : 面试前端
[TOC]java
2017 年互联网校招已近尾声,做为一个非 CS 专业的应届生,零 ACM 经验、零期刊论文发表,我经过本身的努力和准备,从找实习到校招一路运气不错,面试所有经过,谨以此文记录个人校招感悟。git
写做动机github
你能够从这篇文章获取哪些信息面试
这篇文章不能带给你什么算法
春招找实习,投了三家(阿里,腾讯,美团),所有拿到实习 Offer,去了阿里。spring
秋招为了稳妥地转正,拿一个好的评级,在专心准备转正面试,错过了提早批,正式批投了五家,面了三家(阿里,腾讯,网易),基本都是 special offer:数据库
招聘,对公司而言,是寻找劳动力;对员工而言,是寻找将来的同事。因此考核的东西确定有以下几点:编程
因此不少人挂的缘由就很明显了:技术能力不佳,挂;看不到学习的悟性,只会已有技能,挂;聊天思路不清晰,沟通障碍,挂…………设计模式
固然,招聘原本就是一个双向选择的过程,公司在选择你的同时,你也在选择公司,好比工做要拼仍是要 balance,这种事见仁见智。
虽然面试考核的东西不少,但技术面试最主要的仍是考核技术能力,记得学长告诉过我:“技术基础和项目经历,至少得有一个拿得出手”,因此下面谈谈所谓的“技术基础”。
我投的全部岗位都是 Java 研发,因此就以 Java 研发为例,以文字的形式写出大体的知识图谱/思惟导图。不少我就只点到为止,不可能面面俱到。
算法和数据结构基础
Java 基础
Java Web
数据库(主要是 MySQL)
计算机网络
操做系统
1.这么多东西,从哪学起呢?
我本身的学习路线规划:技能的主线是 Java 语言基础 -> Spring 框架开发业务 -> 分布式系统解决高并发,基础方面 算法,网络协议,操做系统 带着学
2.学到什么程度呢?
以上四种程度逐层加深,固然越深越好,一般前两种程度只能称之为“了解”;而写上简历迎接考核的,至少须要掌握到「原理」的程度。
好比,Java 你至少得看过经常使用类的 JDK 源码;数据库只会增删改查确定不够,起码得把底层索引结构讲清楚;常见算法起码能讲清楚关键步骤,分析时间空间复杂度,而且 bug free 地写出来。
技术储备是一切的基础,若是基础都不会,那后面的简历撰写,临场引导面试官等技巧根本无从下手,只有被虐的份
“冰冻三尺非一日之寒”,功夫在平时,与其背面经寄但愿于碰原题,不如扎实学习,以不变应万变。
能够经过 看书+记笔记 的形式来学习,书上的代码能够对着敲一敲,学习笔记和代码能够发到 GitHub 上,用来展现本身的学习热情。
下面是我这一年多来看过的书,每一本我读以前都作了充分的调研和筛选,豆瓣评分通常都在 7~9 分:
少看了一本《深刻理解计算机系统》,因此被问到系统相关问题就很虚。
附上买书的截图
我整理了一些学习笔记和源码:
首先 最重要的就是写简历,找工做就像相亲,简历就是颜值,在这个看脸的社会,只有长得过关,别人才愿意深刻发掘你。从我面试的感觉来讲,经过与否,简历能够占到 50% 以上。
建议尽早的开始准备简历,由于写简历时才会发现本身的简历没什么东西可写,才会有一种危机感。若是等到校招才开始写,就晚了。
怎么写一个好的简历网上不少帖子,就不赘述了,这里简单说几点:
项目经历的提炼能够从如下几个方面着手准备,这些问题均可以事先想好,多口述演练,以避免临场紧张出错
基本问题
开放问题
没有项目经历能够本身找找开源的项目作,或者找一些本身感兴趣的方向作一些玩具项目,世上无难事,只怕有心人。
面试本质是信息沟通,是你向面试官展现你能胜任这个岗位,而不是一问一答。你应该尽可能主导面试,引导面试官,而不是被动答题。即使同一个众人皆知的问题,也不该止步于答出来便可,要争取尽可能回答的和别人不同,展示出本身独到的研究和体会。
因此不少人疑惑:为何我每一问都答上来了,为啥还挂了?多半就是自我感受良好,其实答的不咋样,或者就是被面试官牵着鼻子走,给人一种是在背面经的感受。其实不少问题没有标准答案,面试官看的是你解决问题的思路,思考问题的方式,而不是这个问题答案是什么
我从本身被问过的问题和反思中简单说几点:
好比最经典一个问题:输入一个网址到看到页面,经历了哪些过程。若是只是回答 DNS,OSI 的几层协议,那格局未免过小,同时会把面试官引导往网络协议提问,接踵而至的可能就是 TCP/IP(三次握手,TIME_WAIT,滑动窗口),HTTP(keep-alive,HTTPS)等一系列协议细节,就把本身的展现机会限制在很小的范围了。
而这个问题其实能够从网站架构的层面先宏观描述,如 DNS,负载均衡,静态页面/动态页面,数据库访问,缓存,甚至前端的浏览器渲染等等,这样你能够聊得东西就不少,同时证实你有实际的项目经验,知道业界是如何作的,而后再回头把网络层面的东西简单提一提。
再好比被问到有哪些 hash 方法?由于通常都是问哈希冲突解决方法,不少人会说开放地址法,链表法等等。至于 hash 方法,真的有点懵逼,凭下意识说了一个取模(取余数),答到这确定不够,因而我把 Java 几个基本类型的包装类 Integer, Boolean, String 的 hashcode
方法的实现说了一遍,一方面做为例子填充回答,另外一方面,表示我研究过 JDK 源码
譬如,被问到 AOP,IoC 这些概念时,不要官方的解释背一遍,最好结合本身的使用经验,把使用场景和感觉到的好处说一下,会比较生动。
以前被问到“倒排索引”的问题时,我只是举了个例子把这个概念讲清楚了,后来以为并非太好,只是停留在解释的层面,若是能首先提纲挈领的来一句“通常的索引,是文档到单词的映射;而倒排索引,是单词到文档的映射”,整个回答的高度就不同了。
再好比“二叉树搜索和哈希查找的区别”,若是能答出搜索二叉树是基于比较的排序,因此时间复杂度为 O(log n)
,哈希查找是一个函数映射,因此能作到 O(1)
,说明你不是背面经的。
面试中不免会遇到不会的,这时千万不要不懂装懂,若是以为有想法、能说一点,能够先坦诚认可本身不会,希望意尝试回答一下,这样即便说错了,也不会被怼,由于你已经把场子捡开了。
好比当问到“JVM 如何标记要回收的内存”,我其实记不得了,就说不清楚,但标记无非就那么几种方法,因此提了两种:要么在每块内存留一点标识位(好比一个字节)来标识,要么另外用一个调度表之类的存储结构来统一记录和管理。这样还能够和面试官进一步交流学习。
每一场面完都要反思总结,看看哪里答得很差。若是是知识性的缺陷,就赶快补起来;知道答案但答得很差的,就从新组织措辞和表达方式;即便是回答上来的,也能够反思一下如何答得更好。
固然,全部技巧的前提,是认真踏实的基础准备
我以为不少公司的笔试是过场,主要仍是根据简历刷人。由于我笔试历来没所有 AC 过,但都经过笔试了,认识的一些朋友三题 AC,却没过笔试。
有的大公司会全程电话面试(如阿里),有的是先电话面试筛选简历,而后通知现场面(如网易)。电话面试的好处就是不用手写代码,缺点就是语言不少时候传递的信息是不够的,不少面部反馈、手势和图例都没法展现。
大多数公司仍是会安排现场面试,要么安排你去公司面试(大公司会报销路费),要么安排公司员工到你学校来,一般就是 2 面技术面+1 面 HR 面 。每一个公司风格不一样,好比腾讯通常是一天一面,战线有三天,而网易是一天面完。
另外,其实校招的战线已经从每一年的 9 月份提早到了 3 月份,尤为是阿里,实习生留用会占很大一个比例。因此但愿认清紧迫的形式,越早准备越好。3 月能不能找到一个好的实习,对找工做影响仍是挺大的,毕竟,若是没实习经历,那面试只能全程怼基础了,而基础是个无底洞。并且,手里是否有一个保底的转正 offer,你面试的心态是不同的。
最后祝各位找工做顺利,这篇文章主要是写给学弟学妹的,但愿尽早重视起来,开始准备。若是读完以为有收获的话,欢迎给我打赏(http://brianway.github.io/about/)