杭州2024.08 Java开发岗面试题分类整理【附面试技巧】
文章目录
- [杭州2024.08 Java开发岗面试题分类整理【附面试技巧】](#杭州2024.08 Java开发岗面试题分类整理【附面试技巧】)
-
- 一、Java基础核心
-
- [1.1 集合框架](#1.1 集合框架)
- [1.2 并发编程](#1.2 并发编程)
- [1.3 类加载与JVM](#1.3 类加载与JVM)
- [1.4 基础语法与设计模式](#1.4 基础语法与设计模式)
- 二、数据库核心
-
- [2.1 SQL语法](#2.1 SQL语法)
- [2.2 索引与数据结构](#2.2 索引与数据结构)
- [2.3 事务与隔离级别](#2.3 事务与隔离级别)
- [2.4 数据库引擎与调优](#2.4 数据库引擎与调优)
- [2.5 分库分表与数据量问题](#2.5 分库分表与数据量问题)
- [2.6 数据库对比](#2.6 数据库对比)
- 三、缓存技术
-
- [3.1 Redis核心](#3.1 Redis核心)
- [3.2 缓存问题与解决方案](#3.2 缓存问题与解决方案)
- [3.3 多层缓存](#3.3 多层缓存)
- 四、分布式系统
-
- [4.1 分布式事务](#4.1 分布式事务)
- [4.2 服务注册与发现](#4.2 服务注册与发现)
- [4.3 消息中间件](#4.3 消息中间件)
- [4.4 限流、熔断与降级](#4.4 限流、熔断与降级)
- [4.5 分布式锁](#4.5 分布式锁)
- [4.6 分布式组件与架构](#4.6 分布式组件与架构)
- 五、框架与中间件
-
- [5.1 Spring体系](#5.1 Spring体系)
- [5.2 MyBatis](#5.2 MyBatis)
- [5.3 其他中间件](#5.3 其他中间件)
- 六、搜索引擎
- 七、物联网与网络
-
- [7.1 物联网协议](#7.1 物联网协议)
- [7.2 网络基础](#7.2 网络基础)
- [7.3 网关与硬件对接](#7.3 网关与硬件对接)
- 八、算法与数据结构
- 九、业务场景与项目经验
-
- [9.1 项目核心问题](#9.1 项目核心问题)
- [9.2 项目流程与设计](#9.2 项目流程与设计)
- [9.3 权限与安全](#9.3 权限与安全)
- [9.4 日志与监控](#9.4 日志与监控)
- [9.5 第三方对接与部署](#9.5 第三方对接与部署)
- 十、其他技术问题
- 十一、面试常见问题
- 面试技巧【重要】
一、Java基础核心
1.1 集合框架
-
jdk中涉及的集合用到哪些
-
ArrayList和LinkedList的区别,优缺点
-
HashSet适用场景
-
HashMap适用场景和底层数据结构
-
HashMap的key是实体,value为name判断是否重复
-
HashMap和ConcurrentHashMap的区别
-
ConCurrentHashMap怎么实现线程安全的
-
ConCurrentHashMap的CAS是怎么实现的
1.2 并发编程
-
synchronized和ReentrantLock的区别
-
锁升级有了解过吗,像synchronized
-
synchronized锁升级的过程,能不能降级
-
synchronized是属于什么乐观锁还是悲观锁
-
乐观锁和悲观锁的区别,优缺点
-
自旋锁的机制
-
多线程怎么防止死锁、阻塞;线程之间产生竞争
-
多线程操作链表怎么保证线程安全
-
锁链表中的某个节点后一个线程结束怎么唤醒另一个线程
-
怎么监控一个运行中的线程的动作,比如某个线程一直占用资源,但是没处理对应的业务逻辑,怎么中止这个线程
-
采用线程池怎么拿到线程的返回值
-
线程池关键参数
-
线程池参数配置的原则
-
service层没有HttpRequest怎么获取用户登录鉴权信息,即用户信息
-
TreadLocal获取线程变量,即用户登录鉴权信息
1.3 类加载与JVM
-
类加载机制,双亲委派机制
-
线上产生Full GC整个虚拟机在做什么事情呢
-
GC产生的时候应用服务还能对外提供服务吗
-
OOM怎么排查的,怎么定位和解决的
-
堆内存溢出的场景
-
jdk版本和垃圾收集器
-
jdk其它版本有了解过吗
-
Java的反射有了解过嘛,主要的业务场景
1.4 基础语法与设计模式
-
字符串链接普通、StringBuilder、StringBuffer区别
-
Java里面是值传递还是引用传递
-
Java里面的拆箱和装箱
-
常用设计模式有哪些
-
设计模式的基本原则
-
单例,策略,模版模式
-
工厂模式是单例的吗
-
策略模式实现不同类型工单的处理逻辑解耦讲一下具体流程
二、数据库核心
2.1 SQL语法
-
mysql数据库连接有几种
-
左连接和内连接区别
-
存在一张登录日志表user_login_log,字段user_id,username,login_time,求出昨天登录前10名的用户名
2.2 索引与数据结构
-
mysql常见的索引类型
-
MySQL的索引数据结构
-
mysql索引的建立有什么原则
-
聚簇索引和非聚簇索引的区别
-
主键索引和非主键索引的区别
-
InnoDB引擎下索引最大长度是多少
-
索引下推的原理、使用条件
-
B+Tree和B-Tree的区别
-
假设现在有100万条数据,B+Tree和B-Tree谁的树会更深点,谁的查询效率高点
-
存在表三个字段abc,a为主键,建立复合索引bc,where b,c和where c,b是否走索引
-
select * where b,c和select b,c where b,c分别走几次索引,加个字段d呢
-
什么是回表,怎么避免回表?
-
导致联合索引失效的场景一般如何排列字段顺序避免
-
两个联合索引AB和ABC,业务上拿AC查询会走索引吗
-
比如存在表test,id(自增主键)、name(单列索引)、age(单列索引),300-400百万条数据,部分name/age为null,select * from test where name = '张三';是否走索引?B+Tree索引空值怎么存储?索引列有空值会导致索引失效吗?
-
有的时候线上索引字段B+Tree索引在使用时会发生哪些变化,比如什么情况下从B+Tree索引转换成hash索引,或反之?
2.3 事务与隔离级别
-
数据库事务的特征ACID
-
数据库事务的隔离级别,产生的问题,每个问题表示的含义
-
数据库事务是通过什么维护的
-
spring事务什么情况下会失效
-
事务的默认隔离级别
-
事务的传播机制
-
mysql的事务隔离级别是可重复读,sql server、Oracle默认是读已提交,为什么有这样的区别,为啥不保持一致?
-
mysql的MVVC模型
2.4 数据库引擎与调优
-
mysql的默认存储引擎,InnoDB和MyISAM存储引擎的区别
-
MySQL的InnoDB存储引擎的存储是怎么样的
-
数据库优化实际场景接触
-
遇到一个慢mysql你怎么排查
-
怎么定位慢sql
-
怎么分析慢sql
-
慢sql优化怎么做
-
有没有explain查看sql的执行计划
-
sql调优的经验
-
对一个sql是否走索引的判断
-
索引失效的场景有哪些
-
select模糊查询导致索引失效怎么解决
-
具体数据库调优的场景
-
sql优化举例说明
2.5 分库分表与数据量问题
-
MySQL部署的节点,主从同步的实现机制
-
什么情况下做分库分表
-
线上有单表怎么无缝切到分库分表,应用层怎么做,需要停机吗还是怎么平滑切换?
-
分库分表怎么解决分布式id(UUID、统一ID序列表、雪花算法)
-
比如现在存在一个分库分表,没有带分库分表的键可以查询吗?例:学生表用班级分库分表,只带学生号可以查询吗?
-
如果不按id,而是按时间段查询分库分表的某条数据怎么处理?
-
采用分库分表你觉得会产生哪些问题
-
项目中单表最大数据量
-
一张300百万数据的表,select * from 表名,大概的响应时长
-
一张300百万数据的表对其批量更新,怎么确保查询ES的数据是更新之后的数据
-
一张300百万数据的表,查询id=100的数据,响应时间20s,查询期间有线程修改该条数据,导致死锁或锁表,怎么解决?
-
数据库单表数量较大,页码数较大的数据查询慢的问题如何解决?
-
100万个设备上报数据到服务器,需查询每个设备最近一条上报数据、某个设备近七天上报数据,怎么创建表和索引,查询语句是否走索引,MySQL执行过程?
-
查询某个设备近七天和历史七天上报数据效率对比,若近七天每天一条数据,效率谁高谁低?
2.6 数据库对比
-
pg和mysql的区别,pg的优势
-
oracle数据库有用过吗
-
mysql用的版本
-
NoSQL相关:为什么用neo4j不用MySQL,不用redis,neo4j底层存储的数据结构
三、缓存技术
3.1 Redis核心
-
redis在项目中主要用来干嘛
-
redis除了你在项目中用到的,你还了解它适合哪些场景
-
redis中一般存放什么数据
-
redis有哪些数据结构
-
redis的除了基本的数据类型,其它常见的数据类型有哪些
-
大屏告警存储redis的数据结构是啥?
-
zset数据结构使用的场景
-
redis和数据库怎么保证数据一致的?当对数据修改时,先删缓存还是先写数据库?两种方式的问题及解决方案
-
redis是怎么部署的,多少节点,redis有哪些集群方式?以及他们的特点
-
redis的set和get命令能实现分布式锁吗
-
redis锁机制是怎么实现,为什么能通过单线程来实现锁,锁是给redis的key加了个什么
-
怎么用redis实现分布式锁
-
有哪些场景会造成分布式锁的死锁
-
redis的分布式锁出现业务逻辑没有执行完成,但是锁已经释放的场景怎么解决?
-
通过Redisson实现数据的一致性,对应的业务场景是啥
-
讲一下怎么通过Redisson实现分布式锁确保高并发场景下工单数据一致性
-
redission的机制是啥,优势是啥
3.2 缓存问题与解决方案
-
缓存击穿的解决方案
-
缓存穿透的解决方案
-
缓存雪崩的解决方案
-
布隆过滤器的底层原理、缺点、用处、基本思想
3.3 多层缓存
- 构建基于本地缓存Caffeine+Redis+MySQL的多层缓存结构,提高热点数据查询效率760%,Caffeine这种内存级别的缓存的优势,为啥不创建java集合作缓存
四、分布式系统
4.1 分布式事务
-
项目中怎么保证分布式事务的
-
项目中分布式事务使用的业务场景
-
项目对接第三方项目怎么保证分布式事务
-
seata的落地方式有哪些
-
seata有几种模式,AT模式底层是怎么实现的,TCC模式和AT模式有啥区别?
-
AT模式怎么申请一个分布式事务的唯一xid
-
RM资源管理器在代码中怎么获取,RM资源管理器具体怎么操作
-
seata的undo_log具体怎么实现的,怎么操作的
-
除了seata还了解哪些事务的解决方案
-
项目中数据一致性的解决方案
-
怎么保证DB和Redis的数据一致性
-
怎么保证ES和数据库交互之后的数据是最新的
-
假设查询ES中某条数据的响应时间是1s,在这个1s中的过程中,有线程更新mysql中该条数据,这时候查询出来的数据是怎么样的,怎么保证查询出来的数据是数据库里最新的数据
-
告警持久化成功但是未投递成功,投递成功但是告警未持久化成功这种情况怎么处理?用分布式事务恰当嘛?
4.2 服务注册与发现
-
nacos的作用
-
nacos注册中心和配置中心,nacos用了几个节点
-
整个nacos是怎么实现服务发现和服务注册
-
ZK起初是用来做什么的,他是保证了AP还是CP
-
zookeeper怎么实现分布锁
-
Nacos和Feign是怎么做的服务远程通信的,你对rpc框架的理解是啥
4.3 消息中间件
-
消息队列怎么选择,怎么用的
-
消息队列中消费者配置了几个
-
消息中间件怎么保证顺序性,怎么保证消息不丢失,怎么保证消费者宕机后,后续新加新的消费者消息不丢失
-
消息中间件中如果消息消费失败怎么处理?重发多次还是失败?重发下游多个业务方不会影响其他业务方吗?
-
kafka有几个副本,消息推送怎么保证批量的量和推送频率的平衡
-
kafka用在项目中哪个业务场景
-
为什么选用kafka做消息中间件
-
基于kafka设计了流式数据架构保障数据的高效、稳定消费,并基于哈希桶实现短期高频的告警抑制怎么实现的
-
RocketMQ对订单超时未支付怎么解决
4.4 限流、熔断与降级
-
怎么通过桶令牌算法实现租户级别的限流
-
整个做集群的限流
-
sentinel怎么实现集群的限流,比如整个集群是200QPS,怎么去做的呢
-
sentinel限流的规则是存储的
-
接口做限流、降级、熔断
-
服务降级的概念及应用场景
-
把分布式锁的操作放到接口层,比如接口的限流,返回上一个还未处理完,等待中,怎么实现
4.5 分布式锁
-
分布式锁是为了保证什么
-
分布式锁的原理
-
分布式锁在项目的哪个处理场景中使用了
4.6 分布式组件与架构
-
项目中采用哪些分布式组件
-
对springcloud这个框架的理解,一个请求过来这个框架具体的处理流程
-
dobbo框架和fegin有什么区别
-
通过feign调用的分布式事务是怎么实现的
五、框架与中间件
5.1 Spring体系
-
spring的作用
-
spring怎么解决循环依赖的
-
为什么要三级缓存,二级行不行
-
三级缓存分别是什么含义
-
三级缓存存入和删除的时机是什么
-
spring中的bean是否线程安全
-
spring中bean默认是单例还是多例的
-
spring的自动装配原理,关键注解是什么,关键注解里面有哪些注解,通过哪些注解找到哪些配置,哪个文件获取配置
-
什么是SpringBoot的自动配置
-
SpringBoot的SPI有了解过嘛
-
springmvc,ioc,aop,自动装配等核心原理
-
AOP底层实现原理
-
动态代理两种实现方式和区别,默认是哪种
-
Java的AOP是怎么实现的,主要的业务场景
-
一个类里面有方法A和方法B,方法B上面存在事务注解,方法A上面不存在事务注解,方法A调用方法B事务是否会生效
-
SPI了解过吗,spring的SPI是什么,怎么实现?
5.2 MyBatis
-
mybatis的底层是怎么实现注入mapper去操作的,没有显示的实现类
-
mybatis的组件,比如存储是明文,存到数据库就是脱敏怎么使用组件实现
-
mybatis-plus带来哪些方便
-
mybatis-plus拦截一些sql封装构建怎么做的
-
mybatis标签resultType和resultMap的区别,以及其它标签
-
tx-mybatis有用到过吗
5.3 其他中间件
-
nignx的工作原理
-
nignx的负载均衡
-
负载均衡有了解过吗
-
项目中用nginx用来干嘛的
-
flowable底层是怎么实现的
-
k8s的理解
-
构建基于JWT的RBAC模型鉴权框架,具体流程是怎样的
六、搜索引擎
-
es用过哪些方面,es对数据去重,折叠查询
-
es支持哪些类型的query
-
历史告警用es存储?es存储历史数据并不是最合适的,为什么?
-
怎么保证ES和数据库交互之后的数据是最新的
七、物联网与网络
7.1 物联网协议
-
物联网的常用协议
-
其它物联网相关与硬件交互的协议
-
mqtt协议介绍
7.2 网络基础
-
七层网络模型和每个层级对应的协议
-
API的作用
-
http和https的区别
-
443端口的作用
-
TCP的某种状态代表什么意思
-
一个服务器接收了100个请求后未响应,来了第101个请求直接断连了,第101个请求是处于什么情况
-
Http协议不同版本的区别
-
对Restful API的理解,为什么采用这个
7.3 网关与硬件对接
-
新增不同厂商的网关怎么做到不修改代码符合当前系统
-
对接大华和海康的设备对应的网关服务怎么传输到内部服务的
-
设备上传数据的流程你有接入吗
-
了解哪些硬件对接的协议
-
物联网项目管理硬件设备采用的什么平台,只是接收设备那边提供的告警吗,还是说把日志拿过来自己做告警
八、算法与数据结构
-
算法判断链表中是否存在环
-
二叉树的中序遍历?
-
二分查找法?
-
一个数组,用二分法查找不同的数据需要查找几次
-
二叉树的特性
-
二叉树和链表的区别
-
完全二叉树和完备二叉树
-
算法按hashmap的value排序
-
编写代码:用3个线程,一个打印X,一个打印Y,一个打印Z,连续打印10个"XYZ",执行完成后打印Hello World
-
多线程对不同ip点击计数
九、业务场景与项目经验
9.1 项目核心问题
-
项目每日数据量多少
-
告警指标正常或异常的判断条件
-
怎么提高告警的准确率,减少假告警
-
此项目之前的机房接入哪个系统,用了现在我们这个系统有哪些优势和好处
-
衡量系统有效性的指标,平均故障恢复时间?故障发生率?故障解决率?
-
数据的存储、查询用了哪些框架或者中间件?
-
订单超时未支付怎么解决?(定时器、Redis、MQ方式)
-
怎么通过异步编排模式实现接口调优的
-
通过异步编排处理计算前的数据初始化和分批计算提高接口响应速度75%,具体实现
-
构建基于本地缓存Caffeine+Redis+MySQL的多层缓存结构,提高热点数据查询效率760%,具体实现
-
商品抢购的秒杀,设计方案,考虑哪些场景(高并发、防超卖、限流等)
-
怎么实现一次性导出一百万条数据
-
大文件或者音视频的导出怎么实现的,导出失败后续是重新导出还是接着导出,具体怎么实现
-
告警来了后马上在大屏上显示,怎么实现高实时性
-
怎么做的告警抑制
-
告警未恢复是指什么
-
用户操作的失败日志和系统的错误日志是怎么存储的,存储到es的日志怎么和前端保持一致
9.2 项目流程与设计
-
审批类项目,工单的处理流程,细节流程?
-
项目整体流程和自己负责的模块
-
项目历时,微服务做了多少,分布式组件用了哪些
-
系统用了多少微服务,包括哪些服务
-
每个服务部署了几个节点
-
代码怎么发布上线
-
审批类项目工单的具体状态
-
工单的处理的节点是精确到哪个维度的
-
项目中涉及到几张表
-
工单的数量量大小
-
某个岗位人特别多,查询该岗位的全量员工会遇到那种查询数据慢的问题吗
-
异步编排处理计算前的数据讲一下具体流程
-
讲一下怎么通过XXX-JOB和Redis实现报表功能的
-
简历中是否有从0到1项目
-
介绍简历中第二个项目技术架构、业务架构、自己做的工作
-
拆分了多少个微服务
-
物联网项目中用到的设备有哪些
-
物联网项目中有记录和监控如灭火器的位置、压力是否正常、是否过期这些数据吗
-
灭火器有对应传感器上报数据吗
-
工单这块是手动创建还是根据产生的告警自动创建
-
学校系统表设计E-R图
-
表设计的核心思路
-
项目中怎么画UML图的,怎么设计实体,实体属性和实体之间关系
-
生产者发送一个字段为String类型的数据,消费者接收,定义哪些实体,实体对应哪些属性和方法,具体怎么传输的
-
介绍自己从技术选型到开发完成的一个项目
-
假如再给你三个月时间,你会对你这个项目做什么优化或者迭代
9.3 权限与安全
-
权限这块用了哪个框架
-
项目中权限控制怎么做的
-
项目登录鉴权是怎么实现的
-
怎么开发登录鉴权模块
-
后续接口的用户信息是从哪里取的
-
拦截器里拿到用户登录鉴权信息,后续service想要拿用户登录信息怎么拿,内部是怎么存储的,一个线程一个线程过来token存在线程的哪里,线程变量有涉及过吗
-
项目中遇到加密算法吗,加密算法的使用场景
9.4 日志与监控
-
有没有接触过日志采集和分析
-
ELK日志采集和分析怎么做的
-
数据分析算法是怎么实现的
-
建设系统日志、异常监控、报警通知、服务限流熔断降级等基础能力都是你自己搭建的吗
-
异常监控是怎么实现的
-
系统日志是怎么搭建的,读取规则是怎么样的,怎么判断哪条日志正常、哪条日志异常,是根据日志框架的规则吗
9.5 第三方对接与部署
-
人脸识别有对接过第三方接口吗
-
平时有对接ChatGPT,或者谷歌一些API接口,等一些其他的AI相关的API
-
有接触过支付吗,对接过哪个第三方的支付接口
-
表格导入做过,导入数据进来是按列去分还是按模板来算,讲一下导入的流程
-
邮件发送有做过吗
-
有用过阿里云或华为云的服务器吗
-
类似小程序的项目有做过吗,小程序微信登录做过吗
-
有自己负责从0到1的项目吗,从开发到部署
-
服务部署的服务器采用第三方还是购买的硬件服务器,区别是啥
十、其他技术问题
-
接口优化有做过嘛
-
项目中某个服务CPU占用很高怎么排查
-
一个程序占用CPU100%怎么排查
-
压测是谁做的,用的什么工具
-
jmter并发不太强,如果压测那台机器核心不多,搞不了很高的并发量,怎么解决?
-
介绍下git里面有哪些比较好的开源项目
-
你怎么设计接口传输协议
-
项目具体业务场景
-
Saas系统有了解过,开发过吗
-
项目的后台管理怎么做的
-
会vue吗
-
会画原型吗
十一、面试常见问题
-
对自己现在是中级高级作的一个评级
-
自己对自己的定级
-
简历中空白期是在干嘛,离职的原因,是外包的原因还是没有产品的原因
-
上家公司离开的原因
-
上家工作年薪
-
当初来杭州的原因
-
在你朋友眼里,你觉得你是一个怎么样的人
-
业务爱好的频率
-
选择工作最看重哪块
-
对加班这个事情怎么看,最大的接受程度
-
对出差怎么看
-
有没有单独一个人一个项目
-
你在项目中的作为后端的开发地位是咋样的
-
你对你个人的项目质量的考核是怎样的
-
项目中代码的review是会在那个阶段做
-
你review一般关注看哪些地方
-
平时新需求接到的工作流程是啥
-
平时有处理过特别难排查的问题吗,怎么解决的
-
工作中遇到的比较困扰你的,逻辑复杂的功能模块,怎么解决的
-
站在你的角度,简历中的这些项目有没有让你印象深刻的问题,怎么解决的
-
你对自己项目做得好做得差的评价和一个衡量的标准是啥
-
当前工作没加班的话,薪资会降吗
-
市场都是在下行的,你觉得你的下份工作会比上份工作薪资高吗
-
平时是怎么学习新技术的,java这门编程语言是你自学还是怎么
面试技巧【重要】
-
简历上一些自己有信心的技术栈可以加粗显示
-
要有两个左右的技术栈深度,并将面试官往这深度上引导
-
面试官的问题不要想超过三秒以上,不知道的就说不知道,或者之前接触过但是忘记了
-
先面试不去的公司让自己进入面试的状态,再去自己心怡的公司面试
-
广度需要提升,深度选一个框架,一个数据库即可
-
每场面试都要录音,复盘
-
深入挖掘某个面试题,选GPT3.0或者国内的AI一直提问问到自己懂了为止