个人简介
本人,双非末流一本,大四,有欢聚时代-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并发
Synchronize和lock区别?
线程的几种状态
14个java并发容器
谈一谈AQS
ThreadLocal 类的底层实现是怎么实现的?
Java多线程几种实现方式
SimpleDateFormat是线程安全的吗?
谈一谈你知道的JUC
Synchronize可以用什么代替
生产者消费者阻塞队列版
生产者消费者传统版
阻塞队列知道吗
乐观锁/悲观锁
公平锁/非公平锁/可重入/递归锁
ArrayList是不安全的,请怎么做安全?
原子类Atomic的ABA问题谈谈?
CAS你知道吗
并发环境下单例模式的不安全性
谈一谈JMM(内存模型)
谈谈你对volatile的理解
Java基础+源码
用过哪些Map,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如hashcode,扩容等
异常框架
Optional类--判断null的新操作
关于String的几道判断题
JSON里面还有JSON字符串
类加载过程
concurrentHashMap存在什么问题
红黑树的特点
LinkedList源码
ArrayList源码
手写单例模式
重写equals为什么还要重写hashcode
ConcurrentHashMap源码
HashMap源码
抽象类和接口有什么不同
JVM
怎么打破双亲委派机制
OutOfMemory溢出
谈一谈GC
谈一谈Java内存管理(运行时数据区)
Minor GC/Major GC
怎么样判断一个对象会被回收
垃圾回收算法
垃圾回收器
高吞吐量用哪些GC算法
项目
RocketMQ之消息幂等
消息堆积排查和提高消费速度方案
Mysql有哪些引擎
Linux命令的学习
redis不同数据结构的应用
项目重构需要注意什么?
web踩坑记
JMeter做压力测试
likee架构
shiro你知道多少?
深入浅出SpringCloud
树形菜单的增删改查
遇到冲突的处理方式
“你还有什么要问我的吗”
最享受的工作内容
遭遇的失败
犯过的错误
遇到的最大的挑战
Linux
Linux命令的学习
Linux查看redis是否在运行的指令
在Linux上发布web项目
如何查看进程的内存占用
如何修改Linux的文件权限
Mysql
Mysql有哪些引擎
锁的类型、五类并发问题、三种封锁协议
count(*)和count(1)的区别
Mysql的锁机制
MySQL中SELECT+UPDATE并发更新问题
关于Mybatis中SQL语句的整理
深入浅出B+tree索引
MySQL 中 B 树叶子节点中存放的是什么?
如何优化查询
Mysql挂了会怎么样
如何防止sql注入
数据库有哪些索引
Redis
Java NIO结合Redis
Redis 在单线程下实现高并发的?核心的机制是什么?
缓存击穿
缓存雪崩
redis不同数据结构的应用
Redis数据结构之Hash
Redis数据结构之String
Redis 和 数据库是怎么保持一致性的?
Redis持久化原理
redis的更新策略(先操作数据库还是先操作缓存)
如何设置Redis的过期策略
Redis的淘汰策略有哪些
Spring和Mybatis
springboot常见的启动器
Mybatis常用的jdbcType类型
Mybatis的resultMap的使用
Spring加载过程
Mybatis的工作流程
权限控制大概怎么做
Spring 和 SpringBoot 的区别?
Maven的加载顺序
Spring BOOT @Bean解释一下
SpringIOC原理
SpringAOP原理
Mybatis的xml有哪些标签
Mybatis如何进行类型转换
SpringMVC工作流程
除了@ResponseBody,controller层如何标准返回给前端所要的数据类型?
操作系统
进程通信
线程通信
线程同步机制
进程和线程的区别
进程中什么数据可以给线程用?
线程start和run的区别
造成死锁的四个必要条件
场景题
一亿的数据,怎么样进行去重?对这些数据做排序?并取出TOP K?
用三个线程交替打印ABC
单点登录和多点登录
两次点击,怎么防止重复下单?
一亿个手机号码,判断重复
设计一个登陆系统
谈一谈token
假如说 Word 文件有 4 M ,内存只有 2 M,怎么处理这种情况 ?
给一组数排序你会怎么做?
需要排序的数据很大,比内存还大,这种情况该怎么处理?
购物车为什么不存在session里面?为什么都存在cookie里?
分布式和非分布式主键策略
分布式、中间件
缓存雪崩
Ngnix
分布式锁
分布式事务
分布式数据一致性
负载均衡器的几个功能
RocketMq设置CONSUME_FROM_LAST_OFFSET的问题
Kafka和RocketMQ的两个不同点
消息中间件要解决哪些问题?
Kafka:痛点、优势以及适用场景
消息队列的四大作用
RocketMQ生产者消费者介绍及相关配置参数
RocketMQ核心原理
RocketMq和Kafka对比
深入浅出RocketMQ
Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比
计算机网络
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
OKHttp分析
HTTP2YY整体框架
前后端分离项目如何解决登陆问题
既然说 HTTP 是无状态的,那服务器怎么记住上次请求的用户?
Session 和 Cookie 有什么关系?
从浏览器中输入网址到看到网页之间发生了什么?
get和post请求
HTTP状态码?301和302?
TCP和UDP的区别
TCP如何保证可靠
TCP四次挥手
B TCP三次握手
算法和数据结构
数组求幷集
单链表翻转
用栈实现队列
最长不重复字符串
字符串反转
矩阵搜索
TOP K问题
获取栈的最小值getMin方法
线程池
线程池用过吗?为什么用它?
线程池有几种创建方式?安全性问题?
有哪些线程池的类型
工作中用哪一个线程池
说说线程池底层的工作原理
线程池中的4种拒绝策略