秋招结束,已经获取京东,拼多多,OPPO,小米,华为,阿里Offer。这次不多说太多,分享下Java面试的一些高频问点面经,希望对还在找工作的朋友有所帮助!不要私藏哦,可以转发朋友圈让给身边的朋友参考参考哈哈哈哈!
计算机网络
这些问题是最常见,感觉基本上也就会问这些。
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主从复制的方式,如何配置主从同步,主从同步会出现的问题
数据结构和算法
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 虚拟机栈会出现的两种异常?
项目
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,那一个用户下了很多单怎么办?
减库存然后下订单,但是服务器宕机?
负载均衡实现方式,策略?
限流主要的算法?令牌桶算法的缺点在哪?(导致不公平性)
最后
以上面经解析整理
关注公众号:“程序员白楠楠”获取!