本人是新手,想用记录博客的方式给自己的学习之路做点笔记,若有不对还望指正!
面试的岗位是Java开发实习生,先将面试过程中被问到的几个问题做一个整理;
1.Spring容器是怎么配置(注入)的?
①属性注入(setter方法)
• 属性注入即通过setter 方法注入Bean的属性值或依赖的对象
• 属性注入使用 <property>元素, 使用 name 属性指定 Bean 的属性名称,value属性或者是
<value>子节点指定属性值
② 构造方法注入(需要写有参的构造函数)
• 通过构造方法注入bean的属性值或者依赖的对象,它保证了bean实例在实例化之后就可以被使用
• 构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性
③静态工场注入
• 调用静态工厂方法创建bean是将对象创建的过程封装到静态方法里面去,当客户端需要对象时,
只需要简单的调用静态方法,而不用关心创建对象的细节
• 要声明通过静态工场方法创建的bean,需要在bean的class属性里面指定拥有该工场的方法的类,
同时在factory-method属性里面指定工场方法的名称,最后使用<constructor-arg>元素
为该方法传递方法参数
④实例工场方法
• 将对象的创建过程封装到另外一个对象实例的方法里,当客户端需要请求对象时,只需要简单的调用该实例
方法而不用关心对象的创建细节
• 要声明通过实例工场方法创建bean
在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean
在 factory-method 属性里指定该工厂方法的名称
使用 construtor-arg 元素为工厂方法传递方法参数
⑤自动注入
通过bean里面的属性自动注入
byName:根据属性自动装配,beanFactory会查找容器中所有的bean,找出id属性与属性名同名的bean来完成注入。
如果没有找到匹配的bean,Spring则不会进行任何注入。
byType:根据属性类型自动装配,beanFactory会查找容器中所有的bean,如果一个正好与依赖属性类型相同的bean,
就会自动注入这个属性。
2.Spring的两大核心思想是什么?控制翻转(IOC)和面向切面编程(AOP)
3.面向切面编程具体是怎么实现的?
在运行时,动态的将代码切入到类的指定方法,指定位置上的编程思想,就是面向切面编程
在XML文件中声明切面
①编写一个原始类,该类中需要设置一个切点。在一个项目中,许多个切点构成了切面,这些切面实际上是为了某些共同的东西而成为一个面的
②编写一个切面类,代码中会有joinpoint.proceed(),这句话就是实际调用切点方法
③配置XML文件,声明一个切点(pointcut)
4.在SpringMVC中,单例模式和多例模式的区别,默认是哪种模式?
SpringMVC的controller默认是单例模式的,每一次不用重新new一个对象,可以提高系统的性能
单例模式(singleton):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。
多例模式(prototype):对这个bean的每次请求都会创建一个新的bean实例,类似于new
5.关于数组,ArrayList和LinkedList的区别是什么?
两者都继承了List接口,
ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除的时候非常麻烦,例如,删除一个元素,那么这个元素后面的数据都要向前移动一个空间单位。
LinkedList采用将对象存放在独立的空间中,而且每个空间中还保存下一个链接的索引,但是缺点就是查找非常麻烦,因为要移动指针
总结:对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针
对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据
6.tomcat的设计模式
工厂模式,单例模式,模板模式,命令模式
7.SpringMVC请求处理流程
1.DispatcherServlet前端控制器接收发过来的请求,交给handlerMapping处理器映射器
2.HandlerMapping处理器映射器根据请求路径找到相应的HandlerAdapter处理器适配器(拦截器或者Controller)
3.HandlerAdapter处理器适配器,处理一些功能请求,返回一个ModelAndView对象(包括模型数据,逻辑视图名)
4.ViewResolver视图解析器,先根据ModelAndView中设置的View解析具体视图
5.然后再讲Model模型中的数据渲染到View上