面试小总结:

1.多线程的几种实现方式,继承Thread类,实现Runnoble接口。
2.同步的实现方式:分别是synchronized,wait与notify、
3.线程的状态、分为哪几个状态?
第一:新生状态,第二:可运行状态,
第三,阻塞状态,第四:死亡状态。
4.什么是线程池:线程池其实就是容纳多个线程的容器,其中的线程可以反复使用,可以省去创建线程的对象的操作,不需要反复创建现场而消耗过多的资源。
5.如何创建线程:都是通过线程池工厂创建,再调用线程池中的方法获取线程,最后在通过线程执行任务方法。
6.线程间的通讯?wait挂起当前线程,并释放当前资源锁,notify随机选择一个解除阻塞,notifyAll一次性解除全部阻塞
7.java的反射原理:就是jvm通过字节码class文件,生成相应的对象,就像正常生成一个对象一样,其实这些都是源于字节码class文件
8. ioc 控制反转,也叫依赖注入: 就是一般来说吧,dao接口的实现不再是逻辑层调用工厂类了,而是通过那个Spring容器来自动为我们业务类设置dao的实现类,这样的话刚好这个过程就反过来了,以前是怎么做的呐,以前是我们业务层主动获取dao, 而现在是dao曾主动被设置到业务逻辑层中了,这个就是控制反转的由来,通过ioc可以无缝的实现数据库的迁移。
9. 控制反转:就是Dao接口的实现不再是通过业务逻辑层调用工厂类去获取,而是通过容器来自动的为我们的业务层设置Dao的实现类,这样这个过程就反过来,以前是我们业务层主动获取DAO,但是现在却是DAO被主动设置到业务逻辑层中来了,这就是控制反转的由来。
10. 还有一个AOP面向切面编程:最主要的应用与日志记录,性能统计,安全控制,事务处理等方面 。
11. list和set的区别:其实最简单,本质的区别是:list可以允许重复的对象,可以有null的元素,以及保证了没个元素插入的顺序,当然了输出的顺序就是插入时的顺序。而set就刚好相反,set不允许重复的对象,只允许一个null元素,而且无法保证插入的顺序
12. 可能面试官也会问了:什么场景下会使用:list,set,和map , 如果是经常使用索引来对容器进行访问的话 ,那么我们肯定是需要使用list的,如果你已经知道索引的话,那么list的实现类Arraylist是不二的选择,可以更快速的访问,如果需要经常删除元素的话,linklist是首选,如果你想容器中的元素能够按照他们的次序进行有序存储,那么还是list因为list是一个有序容器,可以按照插入顺序进行存储,如果想保证元素的插入的唯一性,肯定是set下的实现类,比如Hashset了,linkset了,Treeset了,都遵循了统一约束,如果是需要键和值的存储方式,那么map是不错的选择,可以根据需要选择,hashmap,hashTable , Trermap 进行选择。
13. 以及数据库优化方面的:关于查询的问题,我们知道查询表只会有一条结果。在这种情况下,我们不妨加上LIMIT 1,这样可以增加性能。MySQL数据库引擎会在找到一条数据后停止搜索,而不是占据cpu继续往下查直到查询表中的最后一条数据为止。索引的话还是建立在搜索字断上,并不是非要建立在主键了,或是唯一字断了,如果是某个字段经常要用来做搜索,那么请为其建立索引,还有一个优化查询的方式,可以通过查询缓存来优化查询:当mysql开启缓存模式之后,mysql会把查询结果和查询语句存放在一张hash表中,下次可以用同样的sql语句查询是,mysql会先从这张表中获取数据,如果缓存没有找到,则解析sql语句,按照正常流程走,查询数据库,当缓存达到最大值后,会把现在新的数据写入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值