个人介绍
某末流985本科,计科专业,Java后台岗位,今年三月份开始准备秋招,我的情况可能和大家比较类似就是到了春招的时候才决定去工作那种。所以找实习的时候被虐的比较惨,无项目无Java开发经验(只是在学校学习的时候大二写过一点Java),实习拿了华为武研所,但是做的也不是Java。所以秋招的时候就是无互联网大厂实习项目也只是demo级别。最终拿到Offer:字节(意向书),拼多多(意向书),OPPO(已拒),小米(谈完薪资),华为(OC)。还在面试流程的只剩阿里了,其余的面试都拒了。一路走来再牛客上看了很多的面经,之前也单独的发过想想还是对于秋招汇总一下。
学习情况
牛客网高级项目课+参加字节夏令营做的一个demo高并发秒杀+看面经汇总博客
下面的问题没有针对某一个公司的面试是我面了这么多觉得问的最多的或者我觉得可能会考的点
计算机网络
这些问题是最常见,感觉基本上也就会问这些。
OIS参考模型,每一层涉及到了哪些协议,每一层负责了什么?
最重要的就是传输层,这一块一定要好好看
TCP的特点是什么?什么是窗口滑动协议,什么是快速重传,什么是拥塞避免,什么是慢启动?怎么做到可靠数据传输?
TCP的流量控制是什么?如果RcvWindow=0应该怎么办?
有哪几种定时器?作用分别是什么?
TCP和UDP的区别?什么场景使用TCP,什么场景什么UDP?哪些应用层协议使用了TCP,哪些使用了UDP?UDP要实现可靠数据传输应该怎么做?
TCP的三次握手和四次挥手?为什么是三次,为什么是四次?为什么TCP采用随机初始序列号?客户端和服务器最多能发送和接收多少TCP连接数?(最后一个问的较少)
如果TCP连接的时候服务器发送的最后一个报文时,客户端挂了会怎样?那如果服务器宕机了,客户端怎么处理?
TIME_WAIT 和 CLOSE_WAIT 状态?TIME_WAIT 为什么需要保持 2MSL 这么长的时间?大量TIME_WAIT造成的影响?如何尽量处理 TIMEWAIT 过多?
TCP粘包(问的较少)
影响TCP 网络时延的因素
当你输入域名访问一个网站的时候,背后的过程是什么涉及到哪些协议?
什么是https协议?https协议用到了哪种密钥?
什么是有状态什么是无状态?
HTTP的八种请求?GET和POST的区别?
HTTP的一些常见的状态码要熟悉!重定向和转发的区别?
HTTP和HTTPS的区别?HTTP1.0和HTTP1.1的区别?
HTTPS的工作流程?
Cookie,Session,Token的区别
SSL加密的过程?延伸出对称加密和非对称加密的过程和区别
DNS协议!域名解析过程,递归查询和迭代查询的区别?
Ping命令的过程和ARP协议(这个做了解就好了)
操作系统
这个是我比较惨的,但是一般问的不深。
进程和线程的区别是什么?进程和线程占有的资源是哪些?
操作系统创建进程的过程?进程的状态和控制原语?Java的Runnable对应着哪些操作系统状态?还有哪些控制函数像sleep,notify这些改成成什么状态了?
进程间通信!为什么需要进程间通信?线程通信?
进程同步和进程互斥。实现临界区互斥的基本方法?
如何正确的停止一个线程!
中断和异常
进程隔离,虚拟内存,虚拟地址空间
多线程、多进程的区别及适用场景
什么是缓存?有哪些缓存的更新算法?
用过的Linux命令,常用:看被占用的端口的进程;查看一个进程的端口号;显示CPU的信息 ,查看CPU使用率;查看所有进程;查看进程的详细信息;查看内存使用情况等等
僵尸进程,孤儿进程以及守护进程?怎么创建一个守护线程?僵尸进程危害以及避免僵尸进程的方式!
进程调度算法以及死锁!产生死锁原因;产生死锁的条件;处理死锁的几种条件;银行家算法
操作系统的特征(这个最基本,但是一次面试我不知道)
数据库
这块我也不是很熟悉,只知道一些基本的,最后的两个选看我觉得,会更好,但是千万不能看了一点就说会,不然会给自己埋大坑。
数据库的事务,事物的特性,事务的隔离级别分别解决了哪些问题,理解什么是脏读,幻读! 事务的实现原理通过什么要保证的事务的特性?
什么是左连接,什么是右连接,什么是全连接,什么是内连接?
数据库的索引有什么作用?用什么来实现的?好处坏处是啥?
索引的种类,原理,索引存了哪些内容,什么时候索引会失效?唯一索引和主键索引的区别!单列和联合索引,最左匹配原则,什么时候该用联合索引?
怎么看这个表是否加了索引?
B树和B+树有什么区别?为什么索引不用B树?那B+树的叶子结点上存了哪些信息?
数据库的锁?乐观锁悲观锁,共享锁和排它锁。
MySql中主要使用的引擎,它们主要的区别是啥。
数据库范式
数据库五大约束?
数据库连接池:工作原理,参数,种类,会出现的问题
数据库的读写分离,数据切分(数据库分库分表,水平切分垂直切分啊)
数据库的主从:实现原理,mysql主从复制的方式,如何配置主从同步,主从同步会出现的问题
数据结构和算法
排序算法必会,然后是剑指Offer题,Leetcode hot100,Leetcode 字节跳动专题,刷的滚瓜烂熟才行。这一块我可能会好一点,我大二的时候入了ACM的坑,所以我秋招算法的这一块准备的比较少。
给大家分享一些我碰到的面试算法题以及我看过的面经涉及到的。剑指offer和字节跳动专题我写了,那个hot 100我没写。放下链接吧:
剑指offer:https://xiaorui2.github.io/2019/06/24/%E5%89%91%E6%8C%87Offer%E5%88%B7%E9%A2%98%EF%BC%88%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0%EF%BC%89/
Leetcode字节跳动专题:https://xiaorui2.github.io/2019/06/30/LeetCode%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E4%B8%93%E9%A2%98/
面试涉及到的一些算法题:https://xiaorui2.github.io/2019/07/27/%E9%9D%A2%E8%AF%95%E6%B6%89%E5%8F%8A%E5%88%B0%E7%9A%84%E4%B8%80%E4%BA%9B%E7%AE%97%E6%B3%95%E9%A2%98/
面试涉及到的一些机智题:https://xiaorui2.github.io/2019/08/13/%E9%9D%A2%E8%AF%95%E5%B8%B8%E8%A7%81%E7%9A%84%E6%9C%BA%E6%99%BA%E9%A2%98/
几大排序算法:
https://xiaorui2.github.io/2019/07/06/%E5%85%AB%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/
数据结构的话:B树,B+树,红黑树这些必知道,然后就是写二叉搜索啊,平衡二叉树啊这些知道是什么就行
Java知识
Java知识要准备的太多了,很多细节,我就捡着说一些都是我自己汇总的一些
Java 基础
Java和c++的区别(第一次被问我说的很糟),Java为什么跨平台?
Java语言的特点和特性(第一次我也回答的很糟),多态的底层原理?
抽象类和接口的区别?抽象类与普通类的区别?
Java访问修饰符有哪些?
this关键字和super关键字?
Object类下面的方法,尤其是hashCode方法和equals方法?
== 和 equals 的区别是什么?若对一个类不重写,它的equals()方法是如何比较的?int 和Integer的比较!
Java基本的数据类型?
String为什么不可变?好处在哪?String 常量池?String, Stringbuffer, StringBuilder 的区别。
static关键字(第一次问我忘了都不知道)和final关键字
ArrayList 和 LinkedList 区别?三种方式访问集合中的元素,ArrayList遍历删除会出的问题?Foreach原理以及Fail-fast机制!
Java泛型
Java反射:反射的好处;得到class的方式;反射的原理
Throwable、error、exception的区别?异常的种类!
Java创建线程的四种方式?线程实现callable接口和runnable接口的区别?线程中start和run的区别?
sleep(),wait(),yield()和join()方法?sleep()与wait()的区别?
Java是值传递还是引用传递
Java的null类型?java创建对象时,new 出一个对象 和 = null的区别?空串与null串?
Java中创建对象的5种方式?
为什么会出现 4.0-3.6=0.40000001 这种现象?
HashMap,HashTable,CourrentHashMap:
HashMap的底层实现,put,get过程;
如何解决Hash碰撞的;(延伸出Hash冲突的几种解决方法)
HashMap的初始化容量为什么为2的次幂?
为什么HashMap是非线程安全的?
HashMap和HashTable的区别?
为什么HashMap长度大于8才转换为红黑树,而不是6?
HashMap和TreeMap比较?
HashMap,HashTable,CourrentHashMap的key和value是否可为null?那为什么这么设计?
CourrentHashMap为什么是线程安全的?(引出Java线程安全,Volatile关键字,CAS这些)
并发编程的的三个概念(特性)?为什么会有Volatile关键字?volatile关键字的两层语义!!Volatile底层原理!!
什么是线程安全?产生线程不安全的原因是什么?Java线程安全的类?
Java线程安全的类:公平锁/非公平锁;可重入锁;独享锁/共享锁;乐观锁/悲观锁;自旋锁等等
synchronized关键字:三种应用方式;为什么能实现实现内存可见性;底层原理是啥?
ReentrantLock关键字:实现原理;CAS原理以及CSA的问题
synchronized和ReentrantLock的异同以及Synchronized修饰静态方法和成员方法的区别?
线程池:
线程池的好处?
基本组成部分?
Java中的ThreadPoolExecutor类!线程池涉及到的参数!
线程池的状态?
线程池任务执行流程!!
任务缓存队列及排队策略,如何自定义拒绝策略?
线程池的种类?
配置线程池大小,根据CPU密集和IO密集划分
阻塞队列以及生产者消费者的实现
内存泄漏和内存溢出,常见的内存泄露(介绍一下HashMap泄露的场景),避免内存泄漏的几点建议?如何定位找到内存泄漏!!
ThreadLocal介绍,实现原理!!ThreadLocal是如何做到为每一个线程维护变量的副本的呢?ThreadLocal和同步机制的区别。
设计模式的单例和工厂是面得最多的!单例的几种实现方式,一般写典型的双重检查锁定,因为会延伸出volatile,线程安全这些。
然后就是饿汉式,线程安全为什么不用这个方式呢,简单又线程安全?然后是抽象工厂模式和工厂方法模式区别?JDK或者Spring当中哪里用了设计模式?
JVM:
Java内存模型?JVM内存结构?内存模型和内存结构的联系?Java对象结构?
JAVA虚拟机内存划分?每个区域分别装着哪些东西
为什么要划分?
堆的划分,为什么要设置两个Survivor区?新生代 Survivor 空间不足怎么办?年轻代的几个参数?
一个对象从创建到销毁都是怎么在这些部分里存活和转移的?
Java中new对象干的几件事?
Java四种引用状态?
类加载的过程?类加载基于的机制?为什么要双亲委派?为什么需要破坏双亲委派?自己写个String能加载吗?类初始化时机?
对象的创建的过程?
GC算法与垃圾回收!为什么需要垃圾回收以及什么时候GC?GC涉及到的内存部分?对象存活判断的几种方式?
说一下你了解的几个垃圾收集器
JVM初始化步骤
JVM调优(这个比较少)
Java 虚拟机栈会出现的两种异常?
项目
项目这块我比较少,只有牛客网的高级项目课以及一个高并发秒杀的demo,这一块的话我的建议不管项目大不大你都要吃透,不然面试的场景设计以及面试官对你的项目提问的时候你会不知道怎么办,项目这一块的主要是Spring的问题,Redis,Kafka,这里就要吹一下牛客网了,这个项目课的确是小白专用,涉及到的知识点太多太多了。很值!
Redis:
Redis是什么,用在哪?Redis 的缺点?
Redis是单线程的为什么速度那么快?那它为什么弄成了单线程的?(这个背一下网上的答案是不够的的,我在面阿里三面的时候就被问了,答案的话我也只知道网上的,还需要自己去思考)
Redis和memcache有什么区别?Redis和MySql的区别?
Redis 支持的数据类型有哪些?用在什么场景?它的底层数据结构是啥?Zset底层为什么要用两个数据结构?
Redis的并发竞争问题如何解决?
Redis的缓存穿透,缓存雪崩,缓存击穿?怎么解决?
怎么保证缓存和数据库数据的一致性?
Redis有哪些数据淘汰策略
Redis持久化方式!!
Redis集群!集群是如何判断是否有某个节点挂掉?集群进入fail状态的必要条件?
Redis哨兵
Redis主从复制和一致性保证!
Redis热key问题
Spring:
这一块问的比较少其实,但是IOC和AOP问的很多
SpringBoot的启动和运行原
IOC和AOP原理?
Spring生成***对象
BeanFactory 和 FactoryBean 的区别
Spring各个注解的作用?注解的原理?
哪些bean会被扫描?Bean的生命周期!!
Spring 实例化 Bean 的过程。
Spring 直接注入和直接new一个对象有什么不同?
Spring事务管理:事务原理?事务管理接口?实现方式!
Spring解决对象相互依赖
Kafka:
优点和缺点?和传统的MQ对比有什么区别?
为什么 Kafka 吞吐量高
一些概念像broker,topic,partition这些
partition 删除策略
写入可靠性保障(分布式一致性问题)
两种消费模式
kafka消费者消费消息的流程
kafka 如何保证消息有序
消息丢失场景:如何防止数据丢失,消息重复解决方案
主节点选择方案
个人不同项目会问的:(高并发)
如何解决超卖少卖?
你自己重新设计一下,一个高并发,你要怎么应对
单用户订单存Hash,那一个用户下了很多单怎么办?
减库存然后下订单,但是服务器宕机?
负载均衡实现方式,策略?
限流主要的算法?令牌桶算法的缺点在哪?(导致不公平性)
终于写完了
写了三四个小时终于写完了,也算是对于秋招的一个总结吧,算是从一个小白到一个刚刚能走路的孩子的提升吧,其实这段经历对我来说真的很重要,过程真的很艰辛,头发都白了好多好嘛,也算是从一个几乎是0开发经验的人到现在拿了些offer的人的奖励吧,看到很多人还在为了秋招而努力,真的是很棒的而且我相信大家最后都能收获一个好的结果。当然我上面说的这些都是我面试或我准备的时候遇到的一些问题,有些点记不清可能说错了,请大家见谅。
再说一点面试经验的一些分享吧:
对于每一场面试都要复盘:哪里回答的不好,哪里还能回答的更细致一点,哪里是我不知道的。
对于基础你知道的就把你知道的都说出来,别等着面试官问,你不知道的别硬撑,直说不知道没什么关系
项目一定要有深度,深挖自己写过的东西,站在面试官的角度去想一些问题这样涉及系统设计题才不慌
算法你刷一下基本上问题不大
然后就是思考要怎么样去吸引到面试官,怎么让面试官觉得你是个勤学努力上进的人对知识充满着欲望,让他觉得你虽有点不够但还是让你过,怎么让自己的脸皮更厚,怎么在HR面把自己吹的天花乱坠感觉不要我就是你的损失,其实面试有很多的细节和技巧的,但是你一定要了解一下你面试的公司,不然那HR面问你我们公司是干啥的,比方说你面OPPO就说OPPO是做手机的,就呆了。都面到HR了,一定给HR个我想来你公司的意向了解面试的公司是必不可少的。
我差不多就到这了,拿了意向书歇了好几天了,要收拾一下自己好好准备下一阶段的事情啦。起床了,最后也祝大家秋招找到好工作,感谢一波牛客网
不对 我还要期待一些我能不能继续面一下阿里 我哭了 我的秋招还没结束。希望都能有个好结果好归属。