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 虚拟机栈会出现的两种异常?

 

项目这块我比较少,只有牛客网的高级项目课以及一个高并发秒杀的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,那一个用户下了很多单怎么办?
减库存然后下订单,但是服务器宕机?
负载均衡实现方式,策略?
限流主要的算法?令牌桶算法的缺点在哪?(导致不公平性)

 

腾讯:

一面:

  1. 讲一讲异常, throwable, exception, error
  2. try- catch
  3. 手写单例模式——很生疏,GG

背也要背下来怎么写

  1. volatile ,作用,底层, lock 前缀的指令, 多CPU的嗅探机制,多处理器下的缓存一致性协议
  2. synchronized
  3. JVM 内存划分, 堆内存分代
  4. redis, 源码,
  5. spring bean的实例化过程。 ——不熟悉的地方不要写上去。
  6. AOP
  7. 使用redis来实现单点登录,那么当单个redis节点内存不够的时候,怎么办? 集群化,redis-Cluster
  8. 比较偏底层

华为:

一面:

  1. 自我介绍
  2. 项目中的可用性,性能,扩展性 如何提升
  3. nginx是如何实现反向代理的,哪一层的方向代理? 应用层
  4. 如何向外提供HTTPS协议的服务, 在内网使用http协议, 通过nginx配置来进行实现
  5. 设计一个网络的时候,需要考虑的因素
  6. 虚拟网络

 

字节跳动

  1. 自我介绍
  2. 单点登录
  3. JVM内存划分, 堆内存为什么要进行分代回收, 生命周期不同
  4. redis,主从,哨兵,集群,分布式锁。
  5. redis的对象类型, 每种对象类型对应的底层的数据结构,参考redis设计与实现。
    1. string, list, hash, set, sortedset.
    2. 每种对象都至少有2中数据结构, SDS, linkedlist, ziplist, intset, ziplist, skiplist
  6. ISN, TCP协议为什么要随机初始化一个序列号——安全性, 防止和上一次会话滞留的报文冲突
  7.  

 

手撕算法:

  1. 把九亿三千零五万五千三百 转化为 对应的数字,
  2. 给了一个长度为n的 值的范围为0 到 n-1的数组,然后判断是否有重复的元素出现的问题。
  3. leetcode 42 雨水收集问题

 

 

拼多多:

一面:

  1. 自我介绍,redis,分布式锁, redlock算法,zookeeper分布式锁,分布式锁的问题
  2. 手写一个随机选择算法的变种

 

二面:

  1. 说明一下缺页中断, 虚拟内存
  2. JVM中的内存区域划分,堆的分代,为什么分代, 垃圾回收算法,垃圾回收器
  3. Linux进程间的通信方式, 管道,有名管道,socket,共享内存,消息队列
  4. 如何实现进程间特定场景下的高效通信, 问了存储相关的问题。
  5. MySQL索引类型, 底层的数据结构
  6. 手写一个双链表的插入和删除,查找方法

 

招银

电话简历面:

  1. 自我介绍
  2. 事务的特性 ACID , 数据库的死锁发生的情景

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

  1. 死锁的四个必要特性, 非共享, 持有并等待, 非抢占, 循环等待
  2. 死锁避免 死锁预防
  3. 线程的状态 , 新建,就绪,running, wait, blocked, terminated
  4. sleep 和 wait 的区别, 类的不同,是否会释放持有的锁,monitor
  5. JDK 可重入锁, 读写锁 , 底层 AQS,抽象队列同步器的机制
  6. 悲观锁和乐观锁, 概念上,JDK 中的类, CAS的缺点, 空转,ABA问题。使用pause指令, AtomicStampedReference
  7. 讲一讲Servlet, web.xml 配置路径到servlet的映射, init, service, destroy
  8. 可以看一看Tomcat容器的过程 ,Connector和 Context容器两大部分。 完成从socket到 request和Response对象的构造
  9. SpringMVC的 dispatcher-servlet的请求解析过程
  10. redis介绍, 系统中的角色,作为缓存, 分布式session服务器
  11. redis的 性能,可用性,主从复制+哨兵, redis缓存访问有网络上的消耗。
  12. redis事务, 分布式事务, 2PC, 本地消息表

阿里:

一面:

  1. 自我介绍, 项目
  2. 收获最大的一个项目, 着重介绍, 项目的演进过程, 从提高系统可用性的来进行演进,例如redis的可用性,
  3. 分布式锁(项目), redlock,持久化机制,主从复制过程, redis知道的都说出来
  4. redis解决分布式Session问题, 单点登录, Session一致性问题,描述,如何实现
  5. IOC 的实例化过程,原理,
  6. AOP, JDK代理, Proxy, InvocationHandler
  7. 一个循环链表进行是否为空判断
  8. 树的遍历, 层序,先、中、后的递归非递归实现
  9. 操作系统 P/V Semaphore类,
  10. CAS, AQS 实现
  11. 看哪些书, 论坛,如何学习Java
  12. 智力题 喝汽水问题, 2个空瓶换一瓶汽水,1元1瓶,可以买多少瓶汽水 问题,(刚好看过,通过借一瓶来最后再多喝一瓶)

二面:

  1. 自我介绍
  2. 在校,学习情况,参与项目(介绍一下业务方面,架构方面的过程)
  3. hosts文件
  4. 乐观锁, 悲观锁, 举例, 可以顺便说一下, CAS,volatile, synchronized
  5. 事务,分布式事务, 如何实现分布式事务, 两阶段提交,(过程)
  6. JVM堆划分,方法区,
  7. 执行了 system.gc()触发的GC机制,FGC, 如何进行回收的, 分代回收
  8. 系统周期性卡顿,如何定位问题,结合GC日志, YGC,FGC, 调整分代的大小, 减小FGC时间
  9. 产生FGC的原因

 

三面:

40+

  1. 自我介绍,学习过程,项目中的难点,如何解决,
  2. 如何去提升系统的可用性,性能,扩展性,伸缩性,等等, LVS,反向代理,集群,异步,缓存等等
  3. 开放性的系统设计,一个车票查询系统,对最短时间,最短开销进行求解,类似于12306的火车票购票系统,。
  4. 亿万流量网站架构和新技术, 这本书可以参考一下

 

四面:

  1. 自我介绍
  2. 学习过程, 难点——
  3. synchronized关键字作用与静态方法和普通方法的区别,通过不同的对象的监视器来进行并发控制,monitorenter, monitorexit
  4. 服务器CPU使用率很高,如何排查, top 定位进程, 如果是Java,通过jstack进行线程快照分析,jmap,jhat 等等,
  5. 智力题
  6. 红黑树的优缺点
  7. AOP 动态代理
  1. HR面:
  1. 自我介绍 学习过程
  2. 为什么选择转专业
  3. 项目中遇到的难点,
  4. 对部门的理解
  5. 个人的职业发展,城市的选择,职业方向,有没有其他公司的offer

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值