1.BeanFactory 和FactoryBean区别;
BeanFactory为IOC的一个接口或者对象工厂, 创建、实例化、定位、配置应用程序中的对象及建立这些对象间的依赖;
FactoryBean也是接口 , 是一种工厂bean,可以返回bean的实例,我们可以通过实现该接口对bean进行额外的操作,例如根据不同的配置类型返回不同类型的bean,简化xml配置等;
2.AOP原理及其运用;
3.事务的隔离级别,事务是什么;
四种隔离级别,读写未提交,读写提交,可重复度,串行化;事务4种特性,原子性,一致性,持久性,隔离性,既ACID
4.set不重复存储的原理(equals()和hashcode()方法来实现)
5.@Autoriwed和@Resource注解的区别;
@Autowired只按照byType 注入(加@Qualifier使用和 @Resource一样);@Resource默认按byName自动注入,也提供按照byType 注入;
6.RequestMapping的path 加不加/的区别;
带上/是绝对路径,不带是相对,规范应该带,虽然带不带都能正确访问到后台
7.myBatis和hibernate的区别;
8.IO和NIO的原理;
9.spring反射机制;
反射就是把实例化的对象放入spring容器
10.MongoDB和关系型数据库定型区别;
MongoDB是基于对象的存储,改变对象字段比较容易;
关系型数据基于表,表之间的联系拓展性较高,
11.for循环中删除ArrayList的问题;(不能删除,因为list会减少;用foreach会报下标越界异常,迭代器iterator可以)
12.dubbo原理,zookeeper原理,redis原理;
13.乐观锁和悲观锁;
悲观锁总假设最坏的情况,每次拿数据的时候都认为会修改,所以就会上锁, 这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),像 synchronized和ReentrantLock等独占锁就是悲观锁思想;
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现; 乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁
14.线程安全和线程不安全;
线程安全就是多线程访问时,采用了 synchronized加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染;
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据;
15.servlet线程不安全?;
解决办法:
1.同步对共享数据的操作
使用synchronized关键字来保障一次只有一个线程可以去访问被保护的区域
2.避免使用实例变量
线程安全问题还有些是由于实例变量造成的,只要在servlet里面的任何地方都不去使用实例变量,
那么该Servlet就可以保证线程安全。
16.hashMap和concurrentHashmap的区别;
hashMap基于数组和链表,线程不安全,key和value可以为空;concurrentHashmap也基于数组和链表,它分为多个segment,segment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。
17.多线程使用及其线程池;
多线程用继承Thread类,实现Runnable接口,四种线程池,常用的ArrayBlockingQueue,和LinkedBlockingQueue区别
18说一下Spring的核心模块
- Spring Core【核心容器】:核心容器提供了Spring的基本功能。核心容器的核心功能是用IOC容器来管理类的依赖关系。
- Spring AOP【面向切面】:Spring的AOP模块提供了面向切面编程的支持。SpringAOP采用的是纯Java实现,采用基于代理的AOP实现方案,AOP代理由IOC容器负责生成、管理,依赖关系也一并由IOC容器管理。
- Spring ORM【对象实体映射】:提供了与多个第三方持久层框架的良好整合。
- Spring DAO【持久层模块】: Spring进一步简化DAO开发步骤,能以一致的方式使用数据库访问技术,用统一的方式调用事务管理,避免具体的实现侵入业务逻辑层的代码中。
- Spring Context【应用上下文】:它是一个配置文件,为Spring提供上下文信息,提供了框架式的对象访问方法。
- Spring Web【Web模块】:提供了基础的针对Web开发的集成特性。
- Spring MVC【MVC模块】:提供了Web应用的MVC实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型。
19.说一下spring中Bean的作用域
singleton:
Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域。
prototype:
每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,而singleton全局只有一个对象。
request:
在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
session:
在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。
global Session:
在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。
20.短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
21.
http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的
22.MyBatis和Jdbc区别,及其持久化。
MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集,用SqlSessionFactory和
SqlSession来完成数据持久化
23.synchronized和volatile的区别
1.volatile轻量级,只能修饰变量。synchronized重量级,还可修饰方法;
2. 仅仅使用volatile并不能保证线程安全性。而synchronized则可实现线程的安全性;
3. synchronized不仅保证可见性,而且还保证原子性; volatile只能保证数据的可见性,不能用来同步,不保证原子性
24.mybatis一级缓存和二级缓存的区别
一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的;
二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
UserMapper有一个二级缓存区域(按namespace分),其它mapper也有自己的二级缓存区域(按namespace分)。每一个namespace的mapper都有一个二级缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。
25.线程池中,阻塞队列的作用(用来保存等待执行的任务);submit()和execute()的区别:execute方法用于提交不需要返回值,无法得知是否正常执行,sumbit提交任务会有返回值(Future),;来判断是否执行成功; shutdown()只是中断没有正在执行的任务;shutdownNow()会中断所有正在执行或者暂停的任务。
26.spring cloud eureka 和zookeeper区别
eureka的CAP 理论C(Consistency):数据一致性。大家都知道,分布式系统中,数据会有副本。由于网络或者机器故障等因素,可能有些副本数据写入正确,有些却写入错误或者失败,这样就导致了数据的不一致了。而满足数据一致性规则,就是保证所有数据都要同步。
A(Availability):可用性。我们需要获取什么数据时,都能够正常的获取到想要的数据(当然,允许可接受范围内的网络延迟),也就是说,要保证任何时候请求数据都能够正常响应。
P(Partition Tolerance):分区容错性。当网络通信发生故障时,集群仍然可用,不会因为某个节点挂了或者存在问题,而影响整个系统的正常运作。
Ap原则
。Eureka 各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka 的客户端在向某个 Eureka 注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台 Eureka 还在,就能保证注册服务可用(即保证A原则),只不过查到的信息可能不是最新的(不保证B原则)。
zookeeper 的CP原则
zookeeper 同步数据sync,也有个缺陷,刚刚提到了 leader 节点,当 master 节点因为网络故障与其他节点失去联系时,剩余节点会重新进行 leader 选举。问题在于,选举 leader 的时间太长,30 ~ 120s, 且选举期间整个 zookeeper 集群都是不可用的,这就导致在选举期间注册服务瘫痪。
27.Elastic-job simple和dataflow 区别
simple 简单的就是调用1次然后执行1次,dataflow用来处理数据流,其中抓取(fetchData)和处理(processData)数据,流式处理数据只有fetchdata方法返回值为null或者集合长度为空时,作业才会停止抓取,否则作业将一直执行下去。
28.TCP与UDP区别
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道