腾讯云智后台开发实习一面

腾讯云智后台开发一面

  1. 自我介绍

  2. 介绍项目

  3. 项目使用redis做什么,原理

  4. 项目使用rabbitmq,具体流程是什么

  5. 项目过程中遇到问题怎么排查

  6. 怎么发现和解决缓存失效等问题

  7. MySQL索引失效的场景

导致索引失效的情况:

  • 对于组合索引,不是使用组合索引最左边的字段,则不会使用索引
  • 以%开头的like查询如%abc,无法使用索引;非%开头的like查询如abc%,相当于范围查询,会使用索引
  • 查询条件中列类型是字符串,没有使用引号,可能会因为类型不同发生隐式转换,使索引失效
  • 判断索引列是否不等于某个值时
  • 对索引列进行运算
  • 查询条件使用or连接,也会导致索引失效
  1. 场景题:要实现三个功能,A->B->C,其中一个错误,依次回退之前所有操作,你会怎么设计。

​ 使用栈!

  1. 线程池7大参数

ThreadPoolExecutor 的通用构造函数:

1
2
3
4
5
6
7
8
9
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler
);

1、corePoolSize:当有新任务时,如果线程池中线程数没有达到线程池的基本大小,则会创建新的线程执行任务,否则将任务放入阻塞队列。当线程池中存活的线程数总是大于 corePoolSize 时,应该考虑调大 corePoolSize。

2、maximumPoolSize:当阻塞队列填满时,如果线程池中线程数没有超过最大线程数,则会创建新的线程运行任务。否则根据拒绝策略处理新任务。非核心线程类似于临时借来的资源,这些线程在空闲时间超过 keepAliveTime 之后,就应该退出,避免资源浪费。

3、BlockingQueue:存储等待运行的任务。

4、keepAliveTime非核心线程空闲后,保持存活的时间,此参数只对非核心线程有效。设置为0,表示多余的空闲线程会被立即终止。

5、TimeUnit:时间单位

1
2
3
4
5
6
7
TimeUnit.DAYS
TimeUnit.HOURS
TimeUnit.MINUTES
TimeUnit.SECONDS
TimeUnit.MILLISECONDS
TimeUnit.MICROSECONDS
TimeUnit.NANOSECONDS

6、ThreadFactory:每当线程池创建一个新的线程时,都是通过线程工厂方法来完成的。在 ThreadFactory 中只定义了一个方法 newThread,每当线程池需要创建新线程就会调用它。

1
2
3
4
5
6
7
8
9
10
11
public class MyThreadFactory implements ThreadFactory {
private final String poolName;

public MyThreadFactory(String poolName) {
this.poolName = poolName;
}

public Thread newThread(Runnable runnable) {
return new MyAppThread(runnable, poolName);//将线程池名字传递给构造函数,用于区分不同线程池的线程
}
}

7、RejectedExecutionHandler:当队列和线程池都满了的时候,根据拒绝策略处理新任务。

1
2
3
4
AbortPolicy:默认的策略,直接抛出RejectedExecutionException
DiscardPolicy:不处理,直接丢弃
DiscardOldestPolicy:将等待队列队首的任务丢弃,并执行当前任务
CallerRunsPolicy:由调用线程处理该任务
  1. 平时看哪些书籍,喜欢记笔记吗?

总结:

  • 语速放慢,不要紧张,思路理清楚再回答。
  • 问题可能面试完就想起来了,一问就蒙,这就是记的不够彻底,还得继续加深学习!
  • 提前准备好面试环境!
  • 继续努力,继续加油!

腾讯云智后台开发实习一面
https://zty-f.github.io/2022/05/20/腾讯云智后台开发实习一面/
作者
ZTY
发布于
2022年5月20日
更新于
2025年1月2日
许可协议