Java中级面试题及答案整理,mybatis运行原理总结面试

6、Spring的声明式事务管理力度是什么级别?


Struts2是类级别的,Spring是方法级别的

spring事务可以分为编程式事务和声明式事务

7、spring MVC与struts2的区别:


参考:  http://blog.csdn.net/chenleixing/article/details/44570681

① Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截

② SpringMVC的方法之间基本上独立的,独享request response数据

③ 由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的

④ 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式

⑤ SpringMVC的入口是servlet,而Struts2是filter

⑥ SpringMVC集成了Ajax

⑦ SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱

⑧ Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高

⑨ Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展

⑩ SpringMVC开发效率和性能高于Struts2

8、Spring框架中的核心思想包括什么?


主要思想是IOC控制反转,DI依赖注入,AOP面向切面

9、ArrayList和LinkedList的大致区别如下:


1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

10、ArrayList,Vector主要区别为以下几点:


(1):Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是。导致Vector效率无法和ArrayList相比;

(2):ArrayList和Vector都采用线性连续存储空间,当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍;

11、HashSet与HashMap的区别:


12、HashMap和Hashtable的区别:


HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。

  1. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。

  2. HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享Hash

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

Map的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。

  1. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

  2. 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。

  3. HashMap不能保证随着时间的推移Map中的元素次序是不变的。

13、线程安全是什么?线程不安全是什么?


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

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

14、线程和进程的区别?


进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同;

(1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元

(2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。

(3)进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束

(4)线程是轻两级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的

(5)线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源

(6)线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志

15、黑盒测试、灰盒测试、白盒测试、单元测试有什么区别?


黑盒测试关注程序的功能是否正确,面向实际用户;

白盒测试关注程序源代码的内部逻辑结构是否正确,面向编程人员;

灰盒测试是介于白盒测试与黑盒测试之间的一种测试。

单元测试(Unit Testing)是对软件基本组成单元进行的测试,如函数或是一个类的方法。这里的单元,就是软件设计的最小单位。

16、怎么对数据库百万级数据进行优化?


使用读写分离技术(

让主数据库(master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作

17、Spring Bean的生命周期:


  • Bean的建立, 由BeanFactory读取Bean定义文件,并生成各个实例

  • Setter注入,执行Bean的属性依赖注入

  • BeanNameAware的setBeanName(), 如果实现该接口,则执行其setBeanName方法

  • BeanFactoryAware的setBeanFactory(),如果实现该接口,则执行其setBeanFactory方法

  • BeanPostProcessor的processBeforeInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processBeforeInitialization()方法

  • InitializingBean的afterPropertiesSet(),如果实现了该接口,则执行其afterPropertiesSet()方法

  • Bean定义文件中定义init-method

  • BeanPostProcessors的processAfterInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processAfterInitialization()方法

  • DisposableBean的destroy(),在容器关闭时,如果Bean类实现了该接口,则执行它的destroy()方法

  • Bean定义文件中定义destroy-method,在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

简单回答springbean生命周期:

(1)实例化(必须的)构造函数构造对象

(2)装配(可选的)为属性赋值

(3)回调(可选的)(容器-控制类和组件-回调类)

(4)初始化(init-method=" ")

(5)就绪

(6)销毁(destroy-method=" ")

18、springmvc生命周期:


1A)客户端发出http请求,只要请求形式符合web.xml

文件中配置的*.action的话,就由DispatcherServlet

来处理。

1B)DispatcherServlet再将http请求委托给映射器

的对象来将http请求交给对应的Action来处理

2)映射器根据客户的http请求,再对比<bean name="/hello.action

如果匹配正确,再将http请求交给程序员写的Action

3)执行Action中的业务方法,最终返回一个名叫ModelAndView

的对象,其中封装了向视图发送的数据和视图的逻辑名

4)ModelAndView对象随着响应到到DispatcherServlet中了

5)这时DispatcherServlet收到了ModelAndView对象,

它也不知道视图逻辑名是何意,又得委托一个名叫

视图解析器的对象去具体解析ModelAndView对象

中的内容

6)将视图解析器解析后的内容,再次交由DispatcherServlet

核心控制器,这时核心控制器再将请求转发到具体的

视图页面,取出数据,再显示给用户

19、servlet生命周期?


Servlet 通过调用 init () 方法进行初始化。

Servlet 调用 service() 方法来处理客户端的请求。

Servlet 通过调用 destroy() 方法终止(结束)。

最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

20、ajax怎么解决跨域?


参考:http://blog.csdn.net/u014727260/article/details/72793459

① 代理(通过后台操作)

② JSONP(添加响应头,允许跨域 )

addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问

addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式

③ 在ajax的dataType方式改为“jsonp”

21、Mysql数据类型:


① 普通索引

② 唯一索引

③ 主键索引

④ 组合索引

⑤ 全文索引

参考:https://www.cnblogs.com/luyucheng/p/6289714.html

22、Eureka和zookeeper的区别?


① 做分布式下的服务发现还是使用eureka更好,也就是AP特性的分布式协调工具(zookeeper因为网络故障就无法返回可用的主机)

② zookeeper技术更加成熟,资料更多
ess-Control-Allow-Method:POST,GET’);//允许访问的方式

③ 在ajax的dataType方式改为“jsonp”

21、Mysql数据类型:


① 普通索引

② 唯一索引

③ 主键索引

④ 组合索引

⑤ 全文索引

参考:https://www.cnblogs.com/luyucheng/p/6289714.html

22、Eureka和zookeeper的区别?


① 做分布式下的服务发现还是使用eureka更好,也就是AP特性的分布式协调工具(zookeeper因为网络故障就无法返回可用的主机)

② zookeeper技术更加成熟,资料更多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值