Skip to content

自我介绍

建议准备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