jdk自带的线程池
newFixedThreadPool 固定大小线程池
同时可运行的线程数量是固定的。当提交新任务时,如果线程池中已有线程正在执行任务且数量达到上限,则新任务将被放入队列中等待,直到有线程空闲出来。适用于处理长期存在且可以并行执行的任务,有助于防止资源过度消耗。
newCachedThreadPool 缓存线程池
线程池的大小不固定,可根据需要自动调整。当提交新任务时,若线程池中没有空闲线程,则会创建新的线程来执行任务。同时,对于空闲线程,线程池会根据其空闲时间进行回收以避免资源浪费。适用于处理大量短生命周期的异步任务,任务的并发度可能会动态变化。
newSingleThreadExecutor 单线程线程池
线程池只有一个工作线程,所有任务按顺序(通常为FIFO)执行
newScheduledTheadPool 定时/周期性任务线程池
除了具备基本的线程池功能外,还支持定时执行任务一次(延时执行)或定期重复执行任务(周期执行)。线程池大小可以自定义,但通常保持相对固定。适用于需要调度定时任务或周期性任务的场景。
阿里巴巴不让使用JDK自带的线程池
资源耗尽
newCachedThreadPool 由于没有预设最大线程数限制,当任务量过大时,可能导致线程数无限制增长,从而耗尽系统资源宕机
队列容量
FixedThreadPool
和SingleThreadPool
所使用的阻塞队列长度为21亿。这意味着当任务提交速率远大于处理速率时,大量任务会堆积在队列中,可能导致内存溢出
线程池的核心参数有那些
线程池大小、最大线程数、任务队列最大数
项目中有没有用过调度器
- Redis 定期检查key 的数量
- 消息队列 Rabbit MQ 定期检查队列信息
- 蚂蚁组队 定期检查超出时间的出行单
Spring 自带的tack与xxl-Job的区别
分布式,将项目发布到多态服务器上时,Spring Task不能保证在同一时刻只有一台服务器的任务在执行。而xxl-job可以通过调度器实现同一时刻只有一台服务器的任务在运行
MongoDB 与MySQL的区别?优势?
MySQL关系模型数据库,使用表格(tables)来组织数据 MongoDB 非关系型数据库文档采用类似JSON的BSON格式
Mongodb在哪些场景应用
灵活多变的数据(广告,推荐),日志,小程序、公众号的数据
ES是什么?分词器?
Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。Elasticsearch 可以处理大量数据,并且具备横向扩展能力,能够通过增加更多的硬件资源来应对数据和查询量的增长。
ik_smart 尽量进行较少的、更有意义的拆分,减少无意义的子词组合,提高搜索准确率,降低误报率
ik_max_word 最大化地拆分文本,即尽可能多地生成可能的词语组合,包括单字、双字直至整个短语
什么是MDC,原理
在日志记录领域,尤其是使用如log4j、logback等日志框架时,MDC是一种辅助多线程环境下日志追踪和关联的技术。
其原理是在每个线程的上下文中维护一个键值对映射表,用于存储与该线程执行上下文相关的特定信息(如用户ID、事务ID、请求ID等)。当线程在执行过程中生成日志时,MDC中的信息可以自动附加到日志条目中,无需在代码中手动传递这些上下文信息。