4.5年常见面试题目3(极兔1/4)

1.说说对Spring框架的理解?
是个框架、是个容器、更是整个spring 生态圈的基石。我们常见的Springmvc、Springboot、SpringCloud都是基于Spring。Spring的一个最大的目的就是使JAVA EE开发更加容易。Spring之所以与Struts(基于MVC的框架)、Hibernate(封装JDBC的一个框架)等单层框架不同,是因为Spring致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务。
2.Ioc和Aop?
Aop实现原理:为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码。Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理
3.Aop使用时注意什么?(什么情况下会失效?)
不能被子类重写的方法(final 修饰的、static 修饰的 、private 修饰的和构造方法);调用与被调用的方法在同一个类中(有点像事务的特性);引用公共模块时,如果包路径不相同则会失效。
Aop的失效场景和原理,以及解决办法
4.Mysql接触的单表数据量最大是多少?中间有没有遇到什么问题?执行计划需要关注什么内容?sql优化?为什么or 的查询尽量用 union或者union all?
几万吧好像,(超过500万行就要考虑分表分库)
优化性能:explain:其中最重要的字段为:id、type(查询使用了哪种类型)、key(实际使用的索引)、rows(大致估算出找到所需的记录所需要读取的行数)explain 执行计划
优化:避免使用select *;or 的查询尽量用 union或者union all 代替(使用了or关键字索引会失效,在数据量较大的时候查找效率较低,因此可以使用union或union all代替。);多用limit;用连接查询代替子查询;join的表不宜过多;控制索引的数量;选择合理的字段类型;提升group by的效率;索引优化
5.项目中多线程使用?怎么使用?为什么用线程池?核心参数?线程池工作流程?
后台任务:项目中收租或者订阅发短信时使用;异步处理:记录日志。;
线程池创建,通过 Executor 框架的工具类 Executors 来实现。

降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

corePoolSize: 核心线程数为 5。
maximumPoolSize :最大线程数 10
keepAliveTime : 等待时间为 1L。
unit: 等待时间的单位为 TimeUnit.SECONDS。
workQueue:任务队列为 ArrayBlockingQueue,并且容量为 100;
handler:饱和策略为 CallerRunsPolicy。

线程在有任务的时候会创建核心的线程数corePoolSize
当线程满了(有任务但是线程被使用完)不会立即扩容,而是放到阻塞队列中,当阻塞队列满了之后才会继续创建线程。
如果队列满了,线程数达到最大线程数则会执行拒绝策略。
当线程数大于核心线程数事,超过KeepAliveTime(闲置时间),线程会被回收,最终会保持corePoolSize个线程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值