面经
最近很多学弟学妹私戳我,想让我分享一下一些互联网行业的面试经验,所以打算写下这么一篇文章,算是乐于助人吧,当然本文主要的对象是技术岗,非技术岗也可以勉强凑合看看-_-。
一:招聘时间
对于一些大型的互联网公司,招聘一般分为三个时间段:春招(主要是暑假实习生招聘和少量补招),秋招(正式招聘),以及日常实习(顾名思义)。
春招:由于阿里开了个一个不太好的头,春招的实习一再提前,今年过春节之前就已经开始,一般持续到5~6月,春招招聘的实习生由于实习转正的机会会很大,而且是作为一种互联网企业宣传自身的一个渠道,难度相对较大。但好处在于如果顺利转正就可以拥有一个美滋滋的大四生活,就可以浪里格浪了。而且实习经历作为去往大型互联网企业的金钥匙,如果想要找到一份满意的工作的话,实习经历必须受到重视。就互联网行业而言,如果到了秋招这个时间段还没有实习经历,除非你特别优秀,否则很难找到一份很满意的工作。
秋招:这也是收获的季节(8月末到11月),基本在这个阶段,有意向从事互联网行业的应届生都会确认自己的最终去向,面试难度稍大于春招,优点在于不需要实习就可以直接拿到offer。
日常实习:主要面向的是非应届。优点在于难度远低于春招秋招,缺点在于要求实习时间较长,至少半年,而且大部分无法转正。
二:招聘流程
现在大型互联网公司面试一般分为两个类型:内推和正式招聘。
内推和正式招聘最大的区别是内推不需要笔试,但由于现今内推泛滥,导致不少互联网公司内推也需要笔试,比如网易,京东...。这无形中也弱化了内推的意义,事实上真正的内推不是指单纯把你的简历扔到内推系统里,而是,自己在各种渠道找到适合自己的某个公司的具体团队,然后想办法把自己的简历直接扔给这个团队的leader,这样得到offer的概率会高很多,从而极大程度降低运气在offer获取的作用(特别是腾讯,阿里,对于实力中等偏上的童鞋,能否拿到offer,运气占了很大比例)。
一般而言,正式招聘流程为: 笔试,初试,复试,HR面试(可能会有加面)。当然这也不是绝对的,就我所知,有人面试阿里云,前前后后面了8面。
三:如何写出一份让人眼前一亮的简历
首先,简历在求职过程,是求职者的门面,一份优质的简历意味着你能更大概率的拿到面试资格,并且能得到更高的印象分。然而,最近帮很多人内推,就简历而言,优秀的简历非常优秀,但是部分简历确实糟糕透了。优秀的简历都是各不相同的,糟糕的简历确实惊人的相似,总结了一下一份糟糕的简历有哪些特点:
1:内容干瘪,没有任何实在内容,更别说有什么亮点了。通篇讲述自己会什么,但是却没有实例去证明自己是真的会这项技能的。比如说自己擅长JAVA,但是在实践经历中,没有任何和Java开发相关的内容。这是绝大部分糟糕简历最相似的一点。
2:内容主题不明确,面试计算机技术相关岗位,却把大部分笔墨放在学校的社团活动,对于技术岗而言,这些社团活动一笔带过就好。
3:内容不在多,而在精。看过几份技术岗的简历,居然把计算机二级也写了上去,然而这并不是加分项,而是减分项,一份优秀的简历,必须有自己的逼格,不是什么都往上写的
所以呢,怎么写好一份合格的简历呢!真要细细道来的话,可以独立成一篇文章,由于篇幅原因,就简述一下:
1:一份合格的简历应该是有骨也有肉的,你会什么,掌握了什么技能 就是一份简历的骨骼,实际例子来证明你掌握这项技能就是简历的肉。骨肉相连,气血才能畅通。有人会说,我没有例子可以证明我掌握这项技能,那你可以反思一下自己,你真的掌握了这项技能吗?
2:一份优秀的简历,可以让面试官看到你简历的第一眼,就明白你想讲述什么,你的擅长点是什么。举个例子,我帮某个学弟改简历,跟他说,你的优势是有比较好的ACM经历,对安全感兴趣,并有一定的基础,并由较好的自学能力。你的简历只要从头到尾把这个思路贯彻到底,就基本没什么问题。把一些乱七八糟的东西全部去掉,一定要让面试官看到你简历的第一眼,脑子自然而然的就把你想表达写出来。最后的结果是,内推系统的内推理由就是:比较好的ACM经历,对安全感兴趣,并有一定的基础。这样的一份简历就是一份成功的简历。
3:一定要有亮点,其实面试官呢都是希望在面试的过程中发现我们的亮点和优势,从而展开更深层次的交流,但是往往在简历中没有一个让他询问的入口,这样就可能导致他会随意问。随意问的结果是容易遇到自己不擅长的地方,那么GG了。对于亮点,也要多做准备,思考面试官会从哪点切入,并提前做好准备。
最后补充一句,简历请自动转化为pdf格式!!!真的没人会为了打开你的简历专门下载某个阅读软件。
四:如何准备面试笔试:
最好的准备就是:时刻准备着!这不是抖机灵,而是事实!!除非特别天资聪颖的万分之一,绝大多数人的智力都是一般的,对于某项技能的掌握程度往往和花费的实践成正比。在平时就需要有意识的规划自己的未来,并为之锻炼自己的能力。所有的临场准备都是基于自己的硬实力而言的。当然,这些并不属于本章的主要内容,本章的主要内容是如何在几个月中提高自己的面试能力,顺利拿到offer。
首先,你需要知道一家成熟的互联网公司究竟需要什么样的应届生:
1:优秀的人(当然这是废话):具有较多较好的实践经历,或者各种高质量的比赛大奖拿到手软。比如:ACM,CTF
2:有潜力的人(基础功扎实,自学能留极强)。
根据自己的特点,有意识的在面试过程中体现出来,那么你的面试就是成功的。当然,怎么体现,这也是个大学问,
1:这里就会提到:面经。先推荐一个网站 www.nowcoder.com(牛客网),这里面有丰富的面经和足量的实时信息,建议有意进入互联网行业的童鞋有事没事多看看。里面基本囊括了面试过程中的所有基础知识。以及很多有价值的面试技巧总结。在翻看面经的时候,完全可以根据面经自己模拟面试一遍,查漏补缺,而不是简单的一扫而过,就这样,在一次次模拟面试中,可以快速的提高自己的面试能力(注意,是面试能力,而不是实际能力)。
2:深度和广度并行,广度基本确定了你是否能够通过初试,深度确定了自己能否通过复试。对于广度而言,只要多看面经,多模拟,多查漏补缺,基本问题不大,而深度就是靠自己的亮点去发散了,这要做到你对你的亮点的知识点理解的很深,这块也可以有针对性的恶补。
最后抄一下对于之前别人总结的对于硬实力的描述,个人认为总结的非常到位,可以针对性的恶补一下,
当然找工作是应试,要确定目标,找准重点。如果面试总是失败,那原因一般都是目标定高了。准备实习不要用很厚很厚的手册书,除非你之前已经通读过一遍,这点很重要,否则你将会浪费大量时间。别人经验贴里所列参考书籍绝不是短短一两个月看完的,如果以前没看过,请不要盲从。:
- 基础知识:
- 算法和数据结构
- 数组、链表、二叉树、队列、栈的各种操作(性能,场景)
- 二分查找和各种变种的二分查找
- 各类排序算法以及复杂度分析(快排、归并、堆)
- 各类算法题(手写)
- 理解并可以分析时间和空间复杂度。
- 动态规划(笔试回回有。。)、贪心。
- 红黑树、AVL树、Hash树、Tire树、B树、B+树。
- 图算法(比较少,也就两个最短路径算法理解吧)
- 计算机网络
- OSI7层模型(TCP4层)
- 每层的协议
- url到页面的过程
- HTTP
- http/https 1.0、1.1、2.0
- get/post 以及幂等性
- http 协议头相关
- 网络攻击(CSRF、XSS)
- TCP/IP
- 三次握手、四次挥手
- 拥塞控制(过程、阈值)
- 流量控制与滑动窗口
- TCP与UDP比较
- 子网划分(一般只有笔试有)
- DDos攻击
- (B)IO/NIO/AIO
- 三者原理,各个语言是怎么实现的
- Netty
- Linux内核select poll epoll
- OSI7层模型(TCP4层)
- 数据库(最多的还是mysql,Nosql有redis)
- 索引(包括分类及优化方式,失效条件,底层结构)
- sql语法(join,union,子查询,having,group by)
- 引擎对比(InnoDB,MyISAM)
- 数据库的锁(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁,以及加锁的select sql方式)
- 隔离级别,依次解决的问题(脏读、不可重复读、幻读)
- 事务的ACID
- B树、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源码
- 算法和数据结构
- 项目经历
- 这个每个人的项目不同,覆盖的技术也不一样,所以不能统一去说。
- 这里的技巧呢,在下面也会详细说明。
- 无非是找到自己项目中的亮点,简历上叙述的简练并且吸引眼球,同时自己要很熟悉这个点(毕竟可以提前准备)
- 最好自己多练,就像有个剧本或者稿子一样,保证面试中可以很熟练通俗地讲出,并且让人听着很舒服。
- 实习经历
- 这个很抱歉,因为我是找实习的经历,所以也没有实习经历的讲述经验。
- 但我想如果你有实习经历,那面试过程的重点也会在实习做了什么上面,所以大家最好对实习所做的工作做一个总结,并且同样抓出亮点,搞懂内部原理,提前锻炼讲述的过程。
-
其他扩展技能(这个方方面面太多了,全部掌握基本上不可能,只是作为大家其他时间扩充技能的参考)
- 分布式架构:(了解原理就行,如果真的有实践经验更好)
- 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脚本)
- python
- php
- shell
- golang
- ...
- 大数据与数据分析:
- hadoop生态圈(hive、hbase、hdfs、zookeeper、storm、kafka)
- spark体系
- 语言:python、R、scala
- 搜索引擎与技术
- 机器学习算法:
- 模型和算法很多。不细说了,如果很熟练就去投算法,国内很多公司都算法岗都很稀缺,其他岗可以大概了解下理论。
- 其他工具的理论和使用:
- 这个更多了,问的多的比如git、docker、maven/gradle、Jenkins等等,自己需要的话选择性地去学。
- 分布式架构:(了解原理就行,如果真的有实践经验更好)
五:面试技巧:
第四章主要讲的是一些硬实力,而在本章主要讲的是一些软实力。也就是面试的一些套路:
1:回答问题不要简单的对和不对,给自己留点余地也给面试官留点余地是吧!
例:京东hr面(虽然没面到这一面):如果这是你同时有阿里和京东offer,你会选择哪家?
耿直的说:“肯定阿里呀!”。你这样回答估计hr的评价高不到哪里去。
答:"我觉得!不像应届生,更多的是要去创造价值。就实习生而言,更多的是学习,哪里和自己的方向更契合,哪里能学到更多东西就去哪里吧”
例:华为hr面:你怎么认为加班的?
耿直的回答:“不喜欢加班”。讲真的,虽然你只是想把华为当备胎,这么回华为还真不给你进备胎池的机会
答:“对自己热爱的行业,没什么加班不加班直说吧!就好像,一个人喜欢打游戏,不能说他工作努力吧”
2:千万不要踩雷区,什么都不要过得太过了
可以适当的开点小玩笑,活跃一下气氛,技术面虽说是技术面,但给评价的终究是面试官,一个愉快的交流能你加分不少,但是千万别给面试官留下嬉皮笑脸,不学无术的印象(特别hr),那你真的悲剧了。可以适当美化自己写的 东 西,但是不要无中生有,终究只有从头到尾自己写的心里才有底,如果被揭穿了,那是真的悲剧了。雷区的话,这个真的只有自己把握。面试多了自然就有感觉了,虽然我面的也不多
3:转话题
遇到不会的,有意识的把话题扯到自己擅长的上面,不要耿直的一直聊下去,因为面试官会无意识的把话题扯到他自己擅长的领域,而如果你不擅长那评价真是悲剧了。面试官一般也想找到你的闪光点,而不是使劲的怼你。所以呢,学会转移话题还是挺重要的
4:抓住每个加分点
一般来说,面试最后一个问题都是:“我这边问完了,你有什么问题吗?”这个时候,问一些没营养的问题真没要的,总得问一些稍微有营养的问题吧
例:腾讯终面:“这次面试中,请问一下我有什么不足需要在未来填补和提高的吗?”
好处:“好为人师”是人的通病嘛!面试官说的愉快,自己过得概率也大,而且还能表现出自己比较好学。当然,还可以从他的对话中,探探口风,看过没过。一举两得呀
5...
所谓的面试技巧太多了,具体的还是需要在实践过程多体会,多面试,面试也是一个提高的过程,面试过程中最容易发现自己的不足,从而查漏补缺,所以,建议每次面试都录好音,然后面试之后多听几遍,多总结多思考,这样才能快速提高。
六:总结
其它内容想到再说