由于疫情严重现在都是远程面试,初试过了但说是后面还要现场面下。。。噗
玩吧据说福利还是很不错的,管早午饭,8点免费打车,周三是小周末可以6点下班
一共面了40多分钟,感觉还是挺有难度的
- 自我介绍
介绍了实习相关和工作相关
- 为什么看机会
- 线程池参数
public class ThreadPoolConfig {
/**
* 机器内核数
*/
private final static int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors() * 2;
/**
* 线程池创建
*/
private static ExecutorService THREADPOOL = new ThreadPoolExecutor(AVAILABLE_PROCESSORS, 50,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), new ThreadFactoryBuilder()
.setNameFormat("call-thread-pool-%d").build(), new ThreadPoolExecutor.AbortPolicy());
private ThreadPoolConfig() { }
/**
* 获取定长线程池
*
* @return
*/
public static ExecutorService getThreadPool() {
return THREADPOOL;
}
}
队列一般用有界队列,不然可能撑爆内存
一家餐厅
corePoolSize
可以理解成一般情况下餐厅招5个厨师,核心成员就5个,就可以完成对餐厅客人的供给
maximumPoolSize
当节假日,餐厅生意比较好,5个已经忙不过来了,就再招3个达到8个,考虑到成本的最大数量,当生意又恢复到平时,另外3个临时工再干掉
- 为什么阿里规范不让用executors
- 线程池空闲的线程怎么回收,怎么判断线程空闲
keepAliveTime when the number of threads is greater than * the core, this is the maximum time that excess idle threads * will wait for new tasks before terminating.
- HashMap扩容过程
double size 扩容
扩容因子 0.75 触发扩容
- HashMap size 16 扩 32 目的是什么 ?
比如到12触发扩容到32,但就算用到14,也还有10几个位置没用,为什么一定要扩到32
我回答的是 16 二进制是 1111 ,32 二进制是 11111
这样key的hash值和1111/11111与和时,不会让桶的大小影响映射的位置
面试官问还有呢?
突然想到之前看过一篇文章说是,扩容后需要rehash,rehash后的结点要么在原位置,要么在原位置 + 16
- 现在的cpu 求模和求与和效率上没什么差吧,那为什么源码用求与和,基于什么考虑
瞎球说的。。。
- HashMap链表、红黑树相关
链表法,在阀值下链表 -> 红黑树 , 红黑树 -> 链表
红黑树效率更高
- linux公司平时用什么
查日志 cat / tail 。。。
- shell 脚本替换文本中的内容
shell学过,没实践经验
- jstack 怎么用
- jstack线程状态有哪些
- mysql执行计划
explian
- 一个sql语句,where 后面有好几个查询条件,用执行计划得到的count 扫描行数是什么
我回答是最优计划扫描B+树的行数 ,答的不好
rows: MySQL估算的为了找到所需行而要检索的行数,作为优化器选择key的参考
- redis好在哪里
基于内存 单进程 多路复用 过期策略(优化版LRU)
- redis bgsave fork子进程后,还接收新的写请求嘛,会不会产生脏数据,redis怎么处理的
接收写请求,子进程不影响主进程
对rdb文件的影响答的不好
- 公司 redis 集群怎么样的
- tcp udp
- 冒泡排序
- 比较zab协议和raft协议
zab协议和raft协议都是基于拜占庭协议
zab协议是对zookeeper基于raft协议的改进版
zab协议包括消息广播,崩溃恢复
- 用户登陆后延迟一段时间发红包怎么做(新用户延时短,老用户延时长)
我说是通过mq 没到 延迟时间一直自消费,到时间再调发红包服务
面试官说我想复杂了,就用jdk的延迟队列即可
没有问Spring 和 Spring Boot 还有点不大习惯
说点什么
您将是第一位评论人!