java中级程序员面试可能遇到的问题

 

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.乐观锁和悲观锁;

悲观锁总假设最坏的情况,每次拿数据的时候都认为会修改,所以就会上锁, 这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),像 synchronizedReentrantLock等独占锁就是悲观锁思想;

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现; 乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁

14.线程安全和线程不安全;

线程安全就是多线程访问时,采用了 synchronized加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染;

线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据;

15.servlet线程不安全?;

解决办法:

1.同步对共享数据的操作

使用synchronized关键字来保障一次只有一个线程可以去访问被保护的区域

2.避免使用实例变量

线程安全问题还有些是由于实例变量造成的,只要在servlet里面的任何地方都不去使用实例变量,

那么该Servlet就可以保证线程安全。

 

16.hashMap和concurrentHashmap的区别;

hashMap基于数组和链表,线程不安全,key和value可以为空;concurrentHashmap也基于数组和链表,它分为多个segmentsegment 通过继承 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则是不可靠信道

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值