标签:阻塞队列 mysq 控制 提升 callable 检索 factory prototype cte
1、Spring中ioc的概念
提到ioc那就不得不提控制反转和依赖注入
控制反转:原本我们创建对象时需要调用对象的构造方法,手动进行对象创建,现在,我们将对象的创建销毁交由spring容器来做,它通过反射来创建对象,我们用完之后对对象进行销毁。
依赖注入:通常的业务模块都需要调用两个或两个以上的对象来完成业务逻辑,我们在完成我们的业务代码时,只需要通知spring在这里需要调用另一个对象的方法,spring就会像打针一样在这里注入依赖对象的实例,等待我们调用。对象注入的方式有三种:构造器注入,setter方法注入和接口注入
2、bena的默认作用范围
bean的作用范围取值有五种(scope属性控制):
singleton:单例,也是默认值
prototype: 多例,比如让Spring接管struts2的action的时候就必须配置此属性
request: 一次请求以及此次请求的转发
session: 作用范围是一次会话
globalsession: 作用范围是一次全局绘画,比如多台服务器之间需要共用同一个bean的时候就需要此属性。
默认是singleton,所以spring中对象默认是单例
3、索引的概念和作用,Mysql里主要的的索引结构,哈希索引和B+树索引比较
索引:是一个数据结构,用来快速访问数据库表格或者视图里的数据,需要存储空间。
作用:
①减少了数据检索的时间
②保证了数据的唯一性
③表与表之前的参照完整性
④减少了在分组、排序的检索时间
(1),INDEX(普通索引):ALTER TABLE ‘table_name‘ ADD INDEX index_name(‘col‘)
最基本的索引,没有任何限制
(2),UNIQUE(唯一索引):ALTER TABLE ‘table_name‘ ADD UNIQUE(‘col‘)
与“普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
(3),PRIMARY KEY(主键索引):ALTER TABLE ‘table_name‘ ADD PRIMARY KEY(‘col‘)
是一种特殊的唯一索引,不允许有空值。
(4),FULLTEXT(全文索引):ALTER TABLE ‘table_name‘ ADD FULLTEXT(‘col‘)
仅可用于MyISAM和InoDB,针对较大的数据,生成全文索引很耗时耗空间
组合索引:ALTER TABLE ‘table_name‘ ADD INDEX index_name(‘col1‘,‘col2‘,‘col3‘)
为了更多的提高mysql效率可建立组合索引,遵循“最左前缀”原则。创建复合索引应该将最常用(频率)做限制条件的列放在最左边,一次递减。组合索引最左字段用in是可以用到索引的。相当于建立了col1,col1col2,col1col2col3三个索引
建立索引之后查询会变快,对数据的增,删,改操作会变慢
hash索引:查询某一条记录时会很快,因为时hash结构散列分布,并且键-值对应。但是也应此它不用于范围查询和排序
B+树索引:B+Tree所有索引数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都有指向相邻叶子节点的指针。这样做是为了提高区间效率,例如查询key为从18到49的所有数据记录,当找到18后,只要顺着节点和指针顺序遍历就可以以此向访问到所有数据节点,极大提高了区间查询效率。
4、线程创建方式,线程框架,线程池概念,线程池有哪些?线程池工厂有哪些线程池类型?线程池参数
(1)、继承Thread类
(2)、实现Runnable接口
(3)、实现Callable接口通过FutureTask包装器来创建Thread线
(4)、使用ExecutorService、Callable、Future实现有返回结果的线程
多线程框架Executor,jdk1.5之后引入
线程池,是一种线程的使用模式,它为了降低线程使用中频繁的创建和销毁所带来的资源消耗与代价。
通过创建一定数量的线程,让他们时刻准备就绪等待新任务的到达,而任务执行结束之后再重新回来继续待命。
这就是线程池最核心的设计思路,「复用线程,平摊线程的创建与销毁的开销代价」。
相比于来一个任务创建一个线程的方式,使用线程池的优势体现在如下几点:
(1)、避免了线程的重复创建与开销带来的资源消耗代价
(2)、提升了任务响应速度,任务来了直接选一个线程执行而无需等待线程的创建
(3)、线程的统一分配和管理,也方便统一的监控和调优
线程池的实现天生就实现了异步任务接口,允许你提交多个任务到线程池,线程池负责选用线程执行任务调度。
Java通过Executors提供四种线程池,分别为:
[ newFixedThreadPool()方法 ]
该方法返回一个固定线程数量的线程池。该线程池中的线程数量始终不变,当有一个新的任务提交时,线程池中若有空闲线程,则立即处理。
若没有空闲线程,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。
[ newSingleThreadExecutor()方法 ]
该方法返回一个只有一个线程的线程池。
若多多余一个任务被提交到该线程池,任务会被保存在一个任务队列中,待线程空闲,按先入先出顺序执行任务。
[ newCachedThreadPool()方法 ]
该方法返回一个可具实际情况调整线程数量的线程池,线程池的线程数量不确定,但若有空闲线程可以复用,则会有优先使用而可以复用线程。若所有线程均在工作,又有新的任务提交,则会创建新的现场处理任务。所有线程在当前任务执行完毕后,将返回线程池进行复用。
[ newSingleThreadScheduledExecutor()方法 ]
该方法返回一个ScheduleExecutorService对象,线程池大小为1。
ScheduleExecutorService接口在ExecutorService接口之上扩张了在给定时间执行某任务的功能,如:在某个固定的延时之后执行,或者周期性执行某个任务。
[ newScheduleThreadPool()方法 ]
该方法返回一个ScheduleExecutorService对象,但该线程池可以指定线程数量。
int corePoolSize
核心线程数量,线程池将长期保证这些线程处于存活状态,即使线程已经处于闲置状态。除非配置了allowCoreThreadTimeOut将不会保证长期存活于线程池内,在闲置超过keepAliveTime后被销毁。
int maximumPoolSize
线程池内的最大数量,线程池内维护的线程不得超过该数量,大于核销线程数量小于最大线程数量的线程将在闲置超过keepAliveTime后被销毁。
long keepAliveTime
保证存活时间,若线程数超过了corePoolSize,线程闲置时间超过了保证存活时间,该线程将被销毁。另外unit指的是保活时间的单位。
BlockingQueue workQueue
阻塞队列,存放等待执行的任务,线程从workQueue中取任务,若无任务将阻塞等待。可以传入限制容量大小的队列或无限拓展队列。
ThreadFactory threadFactory
创建线程的工厂。
RejectedExecutionHandler handler
处理线程池及队列满载后的拒绝请求处理器。
标签:阻塞队列 mysq 控制 提升 callable 检索 factory prototype cte
原文地址:https://www.cnblogs.com/lm-book/p/11264770.html