Java工作面试技巧分享
2022-10-18 17:37:38 0 举报
AI智能生成
Java工作面试技巧分享
作者其他创作
大纲/内容
数据库(MySQL)
MySQL中Btree和B+tree算法<br>
MySQL中in和exists应用场景<br>
MySQL索引使用的注意事项
SQL反模式
SQL优化
MySQL遇到的死锁问题
存储引擎的 InnoDB 与 MyISAM <br>
数据库索引的原理 <br>
为什么要用 B-tree
聚集索引与非聚集索引的区别
limit 20000 加载很慢怎么解决
ObjectId 规则
倒排索引
MongoDB/ElasticSearch使用场景 <br>
百度面试<br>
消息队列
消息队列使用场景
消息的重发补偿解决思路
消息的幂等性解决思路
消息的堆积解决思路
自己如何实现消息队列
如何保证消息的有序性
工程篇
需求分析
你如何对需求原型进行理解和拆分 <br>
说说你对功能性需求的理解 <br>
说说你对非功能性需求的理解 <br>
你针对产品提出哪些交互和改进意见 <br>
你如何理解用户痛点 <br>
设计能力
说说你在项目中使用过的 UML 图 <br>
你如何考虑组件化 <br>
你如何考虑服务化 <br>
你如何进行领域建模 <br>
你如何划分领域边界 <br>
说说你项目中的领域建模 <br>
说说概要设计 <br>
设计模式
你项目中有使用哪些设计模式 <br>
说说常用开源框架中设计模式使用分析 <br>
说说你对设计原则的理解 <br>
23种设计模式的设计理念 <br>
设计模式之间的异同,例如策略模式与状态模式的区别 <br>
设计模式之间的结合,例如策略模式+简单工厂模式的实践 <br>
设计模式的性能,例如单例模式哪种性能更好。 <br>
业务工程
你系统中的前后端分离是如何做的 <br>
说说你的开发流程 <br>
你和团队是如何沟通的 <br>
你如何进行代码评审 <br>
说说你对技术与业务的理解 <br>
说说你在项目中经常遇到的 Exception <br>
说说你在项目中遇到感觉最难Bug,怎么解决的 <br>
说说你在项目中遇到印象最深困难,怎么解决的 <br>
你觉得你们项目还有哪些不足的地方 <br>
你是否遇到过 CPU 100% ,如何排查与解决 <br>
你是否遇到过 内存 OOM ,如何排查与解决 <br>
说说你对敏捷开发的实践 <br>
说说你对开发运维的实践 <br>
介绍下工作中的一个对自己最有价值的项目,以及在这个过程中的角色 <br>
软实力
说说你的亮点 <br>
说说你最近在看什么书 <br>
说说你觉得最有意义的技术书籍 <br>
工作之余做什么事情 <br>
说说个人发展方向方面的思考 <br>
说说你认为的服务端开发工程师应该具备哪些能力 <br>
说说你认为的架构师是什么样的,架构师主要做什么 <br>
说说你所理解的技术专家 <br>
基础篇
面向对象的特征
final、finally、finalize的区别
int和Integer的区别
重载和重写的区别
抽象类和接口的区别
反射的用途及实现
jdbc流程
equals与==的区别,hashCode和equals的关系<br>
ArrayList与LinkedList、Vector的区别
HashMap、Hashtable的区别
HashMap、ConcurrentHashMap的工作原理及代码实现
数据结构:树、排序算法、查找算法<br>
ThreadLocal原理及内存泄漏<br>
创建线程的方式及实现
sleep()/yield()/join()的区别
CountDownLatch/CyclicBarrier/Semaphore/Exchanger原理
线程池的实现原理及创建线程池的几种方式
线程的生命周期及安全问题
volatile/synchronized实现原理
synchronized与lock的区别
CAS乐观锁,ABA问题
乐观锁的业务场景及实现方式
JVM内存模型
类加载机制
线上频繁full gc怎么办?CPU使用率过高怎么办?
web及framework
Http get和post请求的区别,http1/http2/https的区别<br>
session和cookie的区别
mvc设计思想
tcp三次握手、四次挥手过程
Spring
Spring事务传播特性及隔离机制<br>
BeanFactory 和 ApplicationContext的区别
Spring Bean的生命周期
Spring IOC、AOP原理
动态代理cglib与jdk
Spring事务实现方法及底层原理
SpringMVC运行流程、启动流程
Spring单例的实现原理
如何自定义注解实现功能
Netty
为什么选择Netty及业务中使用Netty的场景
API使用简单,开发门槛低
功能强大,预置多种编解码功能,支持多种主流协议
定制能力强,可通过ChannelHandler对通讯框架灵活扩展
性能高
成熟、稳定,修复了已经发现的所有JDK NIO BUG
原生的 NIO 在 JDK 1.7 版本存在 epoll bug
为什么会TCP拆包黏包及解决方法
原因
应用程序写入的字节大小大于或小于套接口发送缓冲区大小
进行MSS大小的TCP分段
以太网帧的payload大于MTU进行IP分段
解决方法
消息定长,如每个报文大小固定长度为200字节,不够补空格
包尾增加回车换行符进行分割,如FTP协议
将消息分为消息头和消息体,消息头包含表示消息(或消息体)总长度的字段,通常消息头的第一字段使用int32表示消息的总长度
更复杂的应用层协议
Netty线程模型
Netty的零拷贝
接收和发送ByteBuffer采用DDIRECT BUFFERS
实现CompositeByteBuf
文件传输
Netty内部执行流程及重连实现
缓存(redis)
redis使用场景,数据类型与内部结构
使用场景:缓存、排行榜系统、计数器应用、社交网络、消息队列系统
数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
redis为什么是单线程的
纯内存访问
非阻塞I/O,使用epoll作为I/O多路复用实现,再加上自身事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间<br>
单线程避免了线程切换和竞态产生的消耗
redis持久化机制及如何实现
RDB:把当前进程数据生成快照保存到硬盘的过程
触发机制
save命令:阻塞当前Redis服务器,直到完成为止,对内存较大的实例会造成长时间阻塞,线上不建议使用
bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束
(bgsave)流程说明
1.执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如果存在,bgsave命令直接返回<br>
2.父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞<br>
3.父进程fork完后,bgsave命令返回信息并不在阻塞父进程,可以继续响应其它命令
4.子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换
5.子进程发送信号给父进程表示完成,父进程更新统计信息
优缺点
1.RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间节点上的数据快照,适用于备份、全量复制等场景
2.Redis加载RDB恢复数据快于AOP方式
1.RDB方式数据没办法做到实时持久化/秒级持久化
2.RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,导致无法兼容
AOF:以独立日志方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的
redis集群方案及实现
Redis Cluster(3.0版本后官方提出)
穿透优化
缓存空对象
布隆过滤器拦截
缓存崩溃
1. 保证缓存层高可用
2. 依赖隔离组件为后端限流并降级
3. 提前演练
缓存降级
键过期策略
定时删除:设置键的过期时间的同时,创建一个定时器
定期删除:每隔一段时间对Redis进行一次检查
惰性删除:每次获取键时,检查取得的键是否过期
内存淘汰机制
noeviction(默认):当内存使用达到阈值时,所有引起申请内存的命令会报错
allkeys-lru:主键空间中,优先移除最近未使用的
allkeys-random:主键空间中,随机移除
volatile-lru:设置了过期时间的键空间中,优先移除最近未使用的
volatile-random:设置了过期时间的键空间中,随机移除
volatile-ttl:设置了过期时间的键空间中,优先移除过期时间更早的
zookeeper
选主过程
1.每个Server发出一个投票
2.每个服务器接收来自各方的投票,检查是否是本轮投票、是否来自LOOKING状态的服务器
3.处理投票
4.统计投票
5.改变服务器状态
集群间如何进行通讯
数据同步型
服务器初始化型
请求处理型
会话管理型
节点加密方式
分布式锁的实现过程
排它锁
共享锁
羊群效应
锁改进
微服务篇
微服务
前后端分离是如何做的 <br>
如何理解RPC框架及其实现原理
Dubbo的实现原理
怎么理解RESTful
如何设计一个良好的API
如何理解RESTful的幂等性
如何保证接口的幂等性
CAP定理、BASE理论
怎么考虑数据一致性问题
说说最终一致性的解决方案
怎么看待微服务、微服务与SOA的区别
如何拆分服务
微服务如何进行数据库管理
如何应对微服务链式调用异常
对于快速追踪与定位问题
微服务的安全
分布式
谈谈业务中使用分布式的场景
Session分布式解决方案
分布式锁的场景及实现
分布式事务
集群与负载均衡的算法与实现
分布式主键、数据存储方案
分库分表设计及带来的分布式困境与应对
安全问题
安全要素与 STRIDE 威胁 <br>
防范常见的 Web 攻击 <br>
服务端通信安全攻防 <br>
Https原理剖析、降级攻击
授权与认证 <br>
基于角色的访问控制
基于数据的访问控制
性能优化
性能指标有哪些
如何发现性能瓶颈
性能调优的常见手段
项目中如何进行调优的
0 条评论
下一页