2023/1/18 中科软 Boss视频一面
年前投了一周了,想着没啥面试机会。第一面经练手还得是外包
步入正题:
1.spring事务的传播性,spring事务的注解讲一讲(忘得一干二净)
所谓的事务传播性是指:当多个含有事务方法嵌套调用时,这些方法处理事务的规则
spring中共有7个事务传播属性,自行查阅学习资料把。
@Transactional(属性,失效场景)
2.Synchroinzed 与lock 锁的区别
- lock是一个接口,而synchronized是java的一个关键字。
- synchronized在发生异常时会自动释放占有的锁,因此不会出现死锁;而lock发生异常时,不会主动释放占有的锁,必须手动来释放锁,可能引起死锁的发生。
3.索引有那些,什么字段要创建索引(回答了部分)
从功能逻辑上说,索引主要有4类,分别是普通索引、唯一索引、主键索引、全文索引。
按照物理实现方式,索引可以分为2种:聚簇索引和非聚簇索引。
按照作用字段个数进行划分,分成单列索引和联合索引。
- 表的主键,外键
- 针对数据量大,且查询比较频繁的表建立索引
- 针对常作为查询条件(where),排序(order by),分组(group by)操作的字段建立索引
- 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高
- 如果是字符串类型的字段,字段的长度较长,可以针对字符串的特点,建立前缀索引
- 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以索引覆盖,避免回表,提高查询效率
- 要控制索引的数量,索引过多,维护索引结构的代价很大,会影响增删改的效率
- 经常与其他表进行连表查询,在连接字段上可以建立索引
- 索引应该建立在小字段上,对于大的文本字段不要建立索引
- 如果索引列不能存储null值,则在建表时加入not null约束。当优化器知道每列是否包含null值时,它可以更好地确定哪个索 引最有效地用于查询
4.有哪些集合
(网上找个图)
5.线程池的工作原理以及核心参数,拒绝策略
线程池就相当于一个工厂,核心线程相当于里面的长期员工,最大线程为长期员工+临时工.工作队列就相当于所有的任务.当长期员工无法处理太多的任务时,计算机就会帮我找一些临时工,临时工最多数量为最大线程数-核心线程数,当任务慢慢被处理的差不多的时候,工厂就会将临时工遣散。而长期员工不受影响。当任务长期员工与临时工都做不完,或者任务数量超出了任务队列的长度时,就是每天所有人只能做200个任务,任务却有300个的时候。工厂就会拒绝一部分订单,即线城池的拒绝策略。(参考贴子)
- corePoolSize:核心线程数
- maximumPoolSize 最大线程数
- keepAliveTime 空闲线程存活时间
- TimeUnit 单位:时间单位
- workQueue: 工作队列
- threadFactory 线程工厂
- hander:处理程序.拒绝策略
- AbortPolicy - 抛出异常,中止任务。抛出拒绝执行 RejectedExecutionException 异常信息。线程池默认的拒绝策略。必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行
- CallerRunsPolicy - 使用调用线程执行任务。当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。一般并发比较小,性能要求不高,不允许失败。但是,由于调用者自己运行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大
- DiscardPolicy - 直接丢弃,其他啥都没有
- DiscardOldestPolicy - 丢弃队列最老任务,添加新任务。当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue 中最老的一个任务,并将新任务加入
jdk默认提供了四种拒绝策略:
6.spring常用的那些注解,跟你们公司的框架的注解有那些区别?
巴拉巴拉说了几个,有什么区别(这可真难到我了,简单无脑嘎嘎香?)
7.问了下项目的具体实现,负责那些模块
仍然是巴拉巴拉说了一堆。
还有一些问题记不得了。。。
最后 老样子反问环节,8讲了。