Appearance
自我介绍
技术考查点:
- 沟通表达能力
- 项目经验总结能力
- 技术栈掌握情况
回答: 我是一名拥有3年Java开发经验的工程师,主要专注于分布式系统开发。在上一家公司,我负责了电商平台的后端架构设计和核心模块开发,使用Spring Cloud构建了微服务架构。我熟悉Java生态,包括Spring Boot、MyBatis等框架,并对Redis、Kafka等中间件有深入理解。
项目做了多久
项目上线了没
redis在项目怎么使用的
技术考查点:
- Redis应用场景理解
- 缓存设计能力
- 性能优化意识
回答: 在项目中,我们使用Redis作为缓存层,主要存储热点数据,如用户会话信息、商品详情等。通过设置合理的过期时间,既保证了数据的实时性,又减轻了数据库的压力。我们还使用Redis的发布订阅功能实现了消息通知系统。
项目中为什么使用redisson
技术考查点:
- 分布式锁的理解
- 并发控制能力
- 中间件选型能力
回答: 我们使用Redisson主要为了实现分布式锁功能,确保在高并发场景下数据的一致性。Redisson提供了丰富的分布式对象和服务,如分布式锁、分布式集合等,大大简化了我们的开发工作。
docker的部署
技术考查点:
- 容器化部署理解
- 持续集成能力
- 环境一致性维护
回答: 我们使用Docker进行容器化部署,通过Dockerfile定义应用环境,使用docker-compose编排多个服务。主要步骤包括:
- 编写Dockerfile定义基础镜像和依赖
- 使用docker-compose.yml定义服务依赖关系
- 配置CI/CD流水线自动构建镜像
- 使用Kubernetes进行容器编排和集群管理
项目中使用了几台服务器
技术考查点:
- 服务器架构设计
- 负载均衡能力
- 高可用性设计
回答: 项目采用分布式架构,共使用8台服务器:
- 2台Nginx负载均衡
- 2台应用服务器
- 2台Redis集群
- 2台MySQL主从 通过Keepalived实现Nginx高可用,使用Redis Sentinel实现Redis高可用。
xxl-job在项目中如何使用,具体怎么做的
技术考查点:
- 分布式任务调度理解
- 任务管理能力
- 故障处理机制
回答: 我们使用XXL-JOB进行分布式任务调度,主要功能包括:
- 定时任务调度
- 任务分片处理
- 失败重试机制
- 任务日志监控
java
// 示例代码
@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String param) {
// 业务逻辑
return ReturnT.SUCCESS;
}
MySQL在项目使用的什么版本
技术考查点:
- 数据库版本管理
- 新特性使用
- 兼容性考虑
回答: 项目使用MySQL 8.0版本,主要利用了以下特性:
- 窗口函数
- CTE(公用表表达式)
- JSON支持
- 性能优化器改进
框架与MySQL在项目中做结合,有什么难点
技术考查点:
- ORM框架使用
- 数据库连接管理
- 事务控制
回答: 主要难点包括:
- MyBatis与MySQL类型映射
- 连接池配置优化
- 分布式事务处理
- 慢查询优化
mongoDB在项目中用来干嘛的
技术考查点:
- NoSQL使用场景
- 数据模型设计
- 性能优化
回答: 我们使用MongoDB存储以下数据:
- 日志数据
- 用户行为数据
- 非结构化数据
- 大文件存储
kafka与rabbitmq的区别
技术考查点:
- 消息队列选型
- 性能对比
- 使用场景
回答: 主要区别:
- Kafka基于日志存储,RabbitMQ基于队列
- Kafka吞吐量更高
- RabbitMQ支持更多协议
- Kafka更适合大数据场景
spring boot与springcloud在项目中怎么结合使用的
技术考查点:
- 微服务架构
- 服务治理
- 配置管理
回答: 我们使用Spring Boot开发微服务,使用Spring Cloud实现:
- 服务注册发现(Eureka)
- 配置中心(Config)
- 网关(Gateway)
- 熔断限流(Hystrix)
使用了jmeter如何进行测试
技术考查点:
- 性能测试
- 压力测试
- 测试报告
回答: 使用JMeter进行:
- 接口性能测试
- 并发压力测试
- 生成测试报告
- 监控系统指标
总共做了三个项目还是有其他项目
技术考查点:
- 项目经验
- 技术广度
- 项目规模
回答: 我主要参与了三个大型项目:
- 电商平台
- 物流系统
- 金融风控
rabbitmq有什么重要组件
技术考查点:
- 消息队列架构
- 核心组件理解
- 功能模块
回答: RabbitMQ主要组件:
- Exchange
- Queue
- Binding
- Channel
- Virtual Host
rabbitmq是怎么使用的
技术考查点:
- 消息队列使用
- 消息可靠性
- 性能优化
回答: 我们使用RabbitMQ实现:
- 异步消息处理
- 消息确认机制
- 死信队列
- 延迟队列
redis的淘汰机制
技术考查点:
- 内存管理
- 缓存策略
- 性能优化
回答: Redis支持多种淘汰策略:
- LRU(最近最少使用)
- LFU(最不经常使用)
- Random(随机)
- TTL(过期时间)
wait与sleep区别
技术考查点:
- 线程控制
- 并发编程
- 资源管理
回答: 主要区别:
- wait释放锁,sleep不释放
- wait需要被唤醒
- sleep指定时间
- wait在Object类,sleep在Thread类
创建线程池有几种方式
技术考查点:
- 线程池使用
- 并发控制
- 资源管理
回答: 创建线程池方式:
- Executors.newFixedThreadPool
- Executors.newCachedThreadPool
- Executors.newSingleThreadExecutor
- ThreadPoolExecutor
什么是死锁
技术考查点:
- 并发问题
- 资源竞争
- 解决方案
回答: 死锁是指多个线程互相等待对方释放资源,导致程序无法继续执行。产生条件:
- 互斥条件
- 占有并等待
- 不可抢占
- 循环等待
迭代器
技术考查点:
- 集合遍历
- 设计模式
- 并发修改
回答: 迭代器用于遍历集合,主要方法:
- hasNext()
- next()
- remove()
java
// 示例代码
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
Java中的实例变量与局部变量的区别
技术考查点:
- 变量作用域
- 内存管理
- 生命周期
回答: 主要区别:
- 实例变量在类中声明,局部变量在方法中声明
- 实例变量有默认值,局部变量必须初始化
- 实例变量生命周期与对象相同,局部变量随方法结束
equals与==的区别
技术考查点:
- 对象比较
- 值比较
- 方法重写
回答: 主要区别:
- ==比较引用地址
- equals比较内容
- String等类重写了equals
jdk jvm与jre的区别
技术考查点:
- Java运行环境
- 开发工具
- 虚拟机
回答: 主要区别:
- JDK包含开发工具
- JRE是运行环境
- JVM是虚拟机
hashset与treeset的区别
技术考查点:
- 集合实现
- 性能对比
- 使用场景
回答: 主要区别:
- HashSet基于HashMap,TreeSet基于TreeMap
- HashSet无序,TreeSet有序
- HashSet性能更好
什么是反射
技术考查点:
- 动态编程
- 类加载
- 方法调用
回答: 反射机制允许程序在运行时获取类的信息并操作对象,主要功能:
- 获取类信息
- 创建对象
- 调用方法
- 访问字段
字符串有哪些类
技术考查点:
- 字符串处理
- 性能优化
- 编码解码
回答: 主要字符串类:
- String
- StringBuffer
- StringBuilder
- StringTokenizer