Appearance
自我介绍
建议准备3分钟版本,包含:技术栈、主导项目、核心技能。示例: "三年Java开发经验,擅长SpringCloud微服务架构,主导过电商订单系统重构,熟悉MySQL调优和分布式事务解决方案。"
项目介绍
采用STAR法则描述:
markdown
• 情境(Situation):日均百万订单的电商系统
• 任务(Task):订单超时自动取消功能改造
• 行动(Action):
1. 使用Redisson延迟队列实现
2. 通过Sentinel进行流量控制
3. 采用分库分表方案
• 结果(Result):QPS提升300%,99.9%订单在5秒内处理完毕
xxl-job
分布式任务调度框架
java
// 示例任务Handler
@XxlJob("demoJobHandler")
public void execute() {
XxlJobHelper.log("任务开始");
// 分片参数处理
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();
}
流程图:
mysql 优化
常见优化手段:
sql
-- 慢查询优化示例
EXPLAIN SELECT * FROM orders WHERE status = 'PAID' ORDER BY create_time DESC LIMIT 100;
/* 添加复合索引 */
ALTER TABLE orders ADD INDEX idx_status_createtime (status, create_time);
配置优化:
ini
[mysqld]
innodb_buffer_pool_size = 4G
query_cache_type = 0
max_connections = 800
sql优化 类加载器,如何让一个类加载两次 bean生命周期 spring循环依赖 七层网络模型 concurrentHashMap数据安全,底层原理
Redis aof持久化的rewrite模式
重写过程:
配置参数:
bash
# 自动触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
Canal 数据同步
阿里巴巴开源数据库增量日志解析方案:
Java客户端示例:
java
CanalConnector connector = CanalConnectors.newClusterConnector(
"127.0.0.1:2181",
"example",
"",
"");
connector.connect();
connector.subscribe(".*\\..*");
while (true) {
Message message = connector.getWithoutAck(100);
// 处理message...
}
Seata AT模式
分布式事务解决方案:
配置示例:
properties
# seata配置
seata.tx-service-group=my_test_tx_group
seata.service.vgroup-mapping.my_test_tx_group=default
# 数据源代理
seata.enable-auto-data-source-proxy=true
布隆过滤器
Redis实现方案:
java
// 初始化布隆过滤器
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("sample");
bloomFilter.tryInit(100000L, 0.03);
// 添加元素
bloomFilter.add("element1");
// 检查存在性
boolean exists = bloomFilter.contains("element1");
Nacos 集群部署
集群架构:
集群配置示例:
properties
# cluster.conf
192.168.0.1:8848
192.168.0.2:8848
192.168.0.3:8848
# application.properties
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8
索引失效场景
常见失效情况:
sql
-- 1. 隐式类型转换
SELECT * FROM users WHERE name = 123;
-- 2. 前导通配符查询
SELECT * FROM logs WHERE url LIKE '%/api%';
-- 3. 对索引列使用函数
SELECT * FROM orders WHERE YEAR(create_time) = 2023;
-- 4. OR条件混合使用
SELECT * FROM products WHERE category_id = 1 OR price > 100;
RabbitMQ消息模型
核心消息模式:
Java客户端示例:
java
// 工作队列模式
Channel channel = connection.createChannel();
channel.queueDeclare("task_queue", true, false, false, null);
channel.basicPublish("", "task_queue", MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
// 消费者
channel.basicConsume("task_queue", false, deliverCallback, consumerTag -> {});
消息可靠性保障
确保消息不丢失方案:
配置示例:
java
// 生产者确认模式
factory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
// 消费者手动确认
channel.basicConsume(queueName, false, deliverCallback, consumerTag -> {});
LinkedList vs ArrayList
核心差异对比:
java
// 插入性能测试
List<Integer> arrayList = new ArrayList<>();
long start = System.nanoTime();
arrayList.add(0, 100); // O(n)
List<Integer> linkedList = new LinkedList<>();
linkedList.addFirst(100); // O(1)
内存结构示意图:
联合索引优化
最左前缀原则示例:
sql
-- 创建联合索引
ALTER TABLE users ADD INDEX idx_lastname_firstname (last_name, first_name);
/* 有效查询 */
EXPLAIN SELECT * FROM users WHERE last_name = '张' AND first_name = '伟';
/* 失效查询 */
EXPLAIN SELECT * FROM users WHERE first_name = '伟';
Redis数据淘汰策略
8种策略对比:
配置示例:
bash
# redis.conf
maxmemory-policy allkeys-lru
maxmemory 2gb