个人简介
本人,双非末流一本,大四,有欢聚时代-BIGO公司的实习经历
过程
这里就先不说春招的过程了,直接上秋招。
秋招投得晚,9月10号开始投的,特别懊悔!!在这里告诫要进大厂的童鞋们一定一定记得:
互联网大厂,金七银八!!!!!!
投提前批!提前批!提前批!!
几乎所有大厂都会在7月中下旬开始提前批,这个提前批一定一定不能错过,因为错过了你会发现后面的正式批你连被捞的机会都没了!!因为他们在提前批都招满了!!血的教训啊。
我是在实习成功通过BIGO转正面试,拿到BIGO意向书之后才离职,开始准备秋招的。
9月10号后投的腾讯,阿里,滴滴,高德,携程等大厂都是正式批,正式批就是笔试完直接进入备胎池,根本没机会被捞起来面试。
要知道互联网寒冬,供严重大于求,N多比你优秀的求职者都是早早准备好秋招,等着提前批就开冲的。金九银十的思想早已不适用大厂的招聘。但是!
金九银十适用于:银行,国企,学校的招聘会、宣讲会
这里也要强调一点就是,一定要对自己的实力有个准确的把控。想冲大厂,可以。但是金九银十的学校宣讲会一定不能错过,一定要多跑线下的宣讲会,要知道面试效果是:
现场面>视频面>电话面
说句玩笑话,有可能现场面的那人刚好是你未来的部门leader,他见你骨骼惊奇,谈吐幽默得体,特别聊得来,一眼万年。面试过程也就你聊聊人生就让你过了的,是相当有可能的。
结果
秋招凡是能让我进入面试环节的公司,除了字节跳动公司以外,其他都拿到了offer。(字节跳动那场面试的面试官感觉很疲惫,面试一点激情都没有,而且部门做的是CND方向,跟我的方向相差实在太大,二面完就没后续了)
最后是签了BIGO,老东家在听说美团给小sp价格之后毫不犹豫也给了个sp价,由于薪资待遇相差太大,最终是放弃了美团,选择了老东家BIGO,总包差不多比美团多出10w。
公司 结果
BIGO sp,offer。实习电话面三轮+最终转正现场面三轮+hr面
美团 小sp,offer。现场面,一二面同一天走完,隔天三面
字节跳动 二面挂。视频面
CVTE 算小sp?offer。实习电话一面视频二三面,校招是视频面三轮
通过学校校招渠道的:
白山云科技 白菜,offer。笔试+现场两轮技术+HR面,在厦门薪资给力
点触科技 白菜,offer。笔试+现场1v4技术面,965
美亚柏科 offer?hr后面就跟我失联了...
这里补充一点:有中大厂的实习经历基本可以在众多面试过程中秒杀面试官
干货
首先废话不多说,很多人因为简历筛选就挂了,这里附上我自己的春招和秋招的简历。(至少除了银行、国企和一些卡学历的公司以外的简历筛选都过了)
相信对比一下应该对大家是有所启发的。
分享干货之前,先分享一个陪伴我整个招聘过程的app:牛客,炒鸡棒的app!
所以,一定要刷牛客讨论帖! 一定要刷牛客讨论帖! 一定要刷牛客讨论帖!
其他app:
求职:牛客,boss直聘,实习僧,51Job
薪资对比,公司了解:OfferShow(妈妈再也不用担心别HR宰啦),看准,脉脉
学习:牛客,简书,掘金,慕课网,博客园,CSDN,w3c(看我排列顺序就懂我意思吧)
笔记、计划:oneNote,印象笔记,TO-DO
一般来说,很多公司对了解分布式的人是很感兴趣的,只要你的简历上写了了解分布式,一般都会问到。其实我会的分布式知识也就几个:分布式锁、分布式事务、Dubbo、Zookeeper。这些里面只要了解一些基本都算是加分项。在刚学的时候,觉得分布式只是很难,其实静下心来学,也没有那么难。差不多一个月左右可以基本掌握。
分布式锁:使用数据库怎么实现?
使用Redis怎么实现?
使用Zookeeper怎么实现?
各种实现有什么问题?
比如锁泄露、可重入这些问题。这里就不一一讲解了,因为网上一搜分布式锁,讲的都很详细。
分布式事务:二段提交、TCC、本地消息表。这三种会出现各种的优缺点?这里看下博客也就基本都没问题
Dubbo:学习Dubbo主要看官方文档,官方文档写的非常好,里面从Dubbo的基础再到实现细节。个人感觉最好的模块是Dubbo中文网站的源码导读模块。
这里静下心来看,很容易看懂,把大致思路看懂了,面试基本没什么问题。
Zookeeper:Zookeeper其实了解起来很简单。买本书来看一下,几天就会。
上面这些东西都学得差不多了,分布式知识的基础也就起来了。后面的消息队列什么的我也还没学,就不多说。学会这些的好处上面已经说了,面试官对分布式知识很感兴趣,基本你写就会被问到。
然后是项目,针对项目而言,一般来说简历上写两个项目左右就够了,大多数面试官一般会让你挑一个最好的项目来说。所以多写无意义(当然是针对我这种做的项目不太好的人而言)。所以尽可能的优化你的某一个项目,多使用一些能吹的技术。就比如我春招的时候就说我的项目里用到了多线程,定义不同的工作线程,解决了并发问题、用UDP实现了TCP、Mysql查询优化等等。
这些真的都是当时做项目过程做到的吗?并!没!有! 品,你们细品
这是为了让面试过程中,说话主动权能在我手中。也就是节奏可以把握在自己手上,一旦进入自己的节奏,那我就可以让面试官提问“我早已记得滚瓜乱熟的知识点”
举个例子,面试官问到多线程,会先让你说项目的多线程怎么运用的,然后他会问一些跟这个知识点相关的“套路题”,比如:线程池原理、操作流程、拒绝策略、为什么使用线程池(好处)、线程池种类(Fixed、Single、Cached....),这些不同种类的线程池具体怎么实现的?使用与什么场景?
基本上来说,面试官让你介绍项目的时候,主动权就在你这边,你需要将你项目使用的技术、优化点都说出来,然后引导面试官向某一个方向问问题。比如你提到了用了线程池,很多面试官也就会问你线程池的问题。
然后分享一下自己自我介绍的套路:一般来说,自我介绍先介绍名称、学校、专业,然后是自己做的方向(比如Java后端)。这些完了以后介绍自己学习的东西,比如java,从基本的语法到Jvm,java高并发(给面试官抛出一些可以问的东西),然后是框架、提一下项目.....
上面这些都挺套路的,套路完了,还是要看基本功。来了基本功!!!
对于Java开发来说,JVM是一个必备知识点。
一、JVM内存模型。
哪些是线程私有的?
虚拟机栈栈帧对应什么?
虚拟机栈中局部变量表、操作数栈、动态链接等都有什么作用?这里提一下,动态链接是相对于静态解析而言的,静态解析也就是在类加载阶段有一个解析阶段,是将符号引用转化为直接引用,但是在这个阶段不一定能完全解析方法地址,也就是在不能判断方法执行版本时,比如重载的方法时,就需要靠动态链接来找到对应方法。
堆的结构,如何划分?
Eden、To Survivor、From Survivor作用各是什么?
GC时这些部分有什么功能?比如一个面试官让你介绍GC,首先应该介绍什么样的对象会被GC,这里就要介绍引用计数法和可达性分析法。然后是GC算法,各个算法优缺点,然后是垃圾收集器,一般来说主要了解CMS和G1,当然其它能了解最好也要了解。然后就是JVM调优,jvm参数、调优命令:jstat、jmap、jstack、jps等等。最好自己用一下。后面的至于类加载机制、双亲委派模型都可以通过《深入理解Java虚拟机》这本书了解。
二、Java高并发
一般来说,很多时候面试官会让写单例模式,我自己写的一般都是volatile 双重检查加锁的形式。主要原因在于这里可以引入介绍volatile和synchronized。volatile保证有序性和可见性。有序性很简单,就是内存屏障,禁止指令重排序。可见性一般来说我会结合缓存一致性协议来说,MESI,具体深入对具体的处理器中的缓存条目进行操作,然后处理器和总线通信等等。这里可以参考《java多线程编程实战指南》,讲的很详细。然后是synchronized关键字的锁的实现,和Lock的区别,做出的优化:适应性自旋锁、偏向锁、轻量级锁,锁什么条件下回升级?这些说完,Lock的实现?AQS?可重入实现?读写锁实现?这些可以参考《java并发编程的艺术》这本书,讲的非常详细、基本从源码的角度来说。总之java并发可以问的问题很多,我个人主要就看了以上我提到的两本书,不会的地方上网查查就行。
三、Java集合
一般来说集合主要了解ArrayList、LinkedList,它们之间的区别。HashMap、Maps.synchronizedMap、ConcurrentHashMap。这里建议去了解一下java的十大并发容器。针对于HashMap,需要了解1.8优化使用了红黑树和尾插法。然后是需要详细介绍put get resize三个操作,难点在resize,比如当前节点在新的数组会映射到哪一个位置?怎么判断?然后是ConcurrentHashMap使用的分段锁,继承可重入锁实现,1.8使用synchronized关键字 CAS操作实现。上面这些最好都读源码。Set的话一般都是参考Map来实现的,也就是只使用Map的key来存取值。
HashMap,ConcurrentHashMap二者在1.6/1.7/1.8三个JDK版本中的源码一定要去阅读!!可以选择找个权威一点的博客,跟着博主一起阅读。
四、操作系统
进程线程、进程状态——用户态转内核态,为什么要转?虚拟内存?死锁?进程通信?页式段式段页式?
五、计网
IP头部,UDP和TCP头部?
TCP和UDP,主要了解三次握手四次挥手,为什么三次,为什么四次?为什么挥手后要等待2MSL才中断?什么是2MSL?
TCP快速重传、滑动窗口、流量控制、拥塞控制、慢启动机制等。一般来说面试官应该对拥塞控制和流量控制更感兴趣。
HTTP请求格式,请求行、请求头,请求方法?RESTFUL?请求状态码?HTTPS,对称加密和非对称加密?以非对称加密的方式传递对称加密的秘钥。
六、数据库
然后是Mysql,Mysql要求基本的增删改查语句都要会。
然后一般来说Mysql的调优(怎样排查执行慢的sql):慢查询日志、explain分析查看是否走索引,没有索引创建索引,有的话判断索引为什么失效?索引什么时候会失效?最左匹配原则、or条件两边有一边没有使用索引、字段类型隐式转换、like以%开头、表中数据较少导致全表比索引快,这些条件都会导致索引失效。
索引的底层实现?介绍B+ 树?这里主要先介绍BST二叉搜索树,然后从磁盘I/O的角度介绍B树。然后介绍B 树所做的优化,即非叶子节点值存储key,这样这些节点可以存储更多key,也就降低树高度,减少I/O次数;叶子节点以链表形式连接,方便范围搜索。
然后是聚簇索引和非聚簇索引。一般来说聚簇索引B+ 树的叶子节点存储的数据,非聚簇索引叶子节点存储指针,所以非聚簇索引要多一次I/O操作才能读取到数据。
最后就是Mysql的主从,主从原理和机制。Mysql我看的书是《Mysql技术内幕》,讲得很具体。
Redis,redis只用一本书就够了,《Redis的设计与实现》。拓展问题有缓存穿透和缓存雪崩?怎么解决?缓存穿透可以使用布隆过滤器、缓存雪崩可以设置随机过期时间。Redis还是有很多学问的,需要多看一些redis实战方面的使用技巧。
七、算法
了解数据结构以后就刷leetcode或者《剑指offer》吧。剑指offer是一定要在招聘会之前刷一遍的,如果你没有刷一遍,那么我建议你,不要找工作了,就那些个题你都不愿意啃,那咱们不合适。
我会的基本也就这些了。书的话推荐这些:《Thinking in Java》、《大话设计模式》、《深入理解Jvm》、《Java EE互联网轻量级框架整合开发— —SSM框架》、《java多线程编程实战指南》、《java并发编程的艺术》、《数据结构与算法》、《Redis设计与实现》、《鸟哥私房菜》、《剑指offer》、《ZooKeeper:分布式过程协同技术详解》、《MySQL技术内幕:InnoDB存储引擎(第2版)》、《java8实战》等等。我认为学习技术不能单了解别人所说的就可以了,最主要是要问为什么。还有就是要沉下心来学习,不断的向前行。
这里附上一些面经,我比较少记录面筋,因为讲道理,面经在牛客的讨论帖上面一找一大把。。。但是建议大家还是把每场的面筋和复习的每个知识点都记下来。至少在春招没找到工作的时候,秋招你还知道复习啥。
Java并发
Java基础+源码
用过哪些Map,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如hashcode,扩容等
JVM
项目
Linux
Mysql
Redis
Spring和Mybatis
除了@ResponseBody,controller层如何标准返回给前端所要的数据类型?
操作系统
场景题
一亿的数据,怎么样进行去重?对这些数据做排序?并取出TOP K?
假如说 Word 文件有 4 M ,内存只有 2 M,怎么处理这种情况 ?
购物车为什么不存在session里面?为什么都存在cookie里?
分布式、中间件
RocketMq设置CONSUME_FROM_LAST_OFFSET的问题
Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比
计算机网络
既然说 HTTP 是无状态的,那服务器怎么记住上次请求的用户?