常规面试题(java)
1. 直接继承自Collection的接口有什么?
list,set,queue
2. final 作用
final: 修饰的类不能继承,方法不能被重写, 变量不能改变
3 重写的概念和遵循的原则(与重载的区别)
重写(Override):父子类中,方法名相同,参数列表相同(方法名称+参数列表=方法的签名),运行期绑定
1.发生在父子类中,方法名称相同,参数列表相同(方法名称+参数列表=方法的签名)方法体不同
2.重写遵循两同两小一大
1)两同:方法名相同,参数列表相同
2)两小:A.子类方法的返回值小于等于父类方法的返回值
a.void/基本类型返回值必须相同
b.引用类型的返回值小于等于父类的返回值
B.子类方法抛出的异常小于或等于超类的方法抛出的异常
3)一大:子类方法的访问权限大于或等于父类方法的
重载(Overload):同一个类中,方法名相同,参数列表不同(参数的类型,个数,顺序不同) ,编译期绑定
00. public,private,protected 和默认default 区别
?????????
4. 接口与抽象类的区别
1)抽象类是由abstract class修饰的,接口是由interface修饰的
2)抽象类中可以有成员变量,也可以有常量,接口中都是常量
3)抽象类中可以有普通方法也可以有抽象方法,接口中都是抽象方法(Java8以后可以有普通方法,但是普通方法必须由static或default修饰的)
4)抽象类中可以定义构造方法,接口中不能定义构造方法,但是都没有意思,因为不能被实例化
5)抽象类中任何访问控制修饰符都可以,接口中访问控制修饰符只能为public
6. 关于lombok面试题
5 SpringMVC流程
***5.1 Servlet机制
***************
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
总结: Servlet是JAVA实现前后端数据交互的一种机制
5.2 核心对象
Request对象
Response对象
5.3 SpringMVC调用流程图
5.3.1 重要的组件
前端控制器 DispatcherServlet 实现请求的流转
处理器映射器 实现了请求路径与方法之间的映射.
处理器适配器 处理器的管理器 内部有N个处理器. 针对不同的用户请求 调用不同的处理器完成任务
视图解析器 直线页面路径的拼接
5.3.2 SpringMVC程序启动前状态说明
父子容器概念:
1.Spring容器(内存中的一大块空间)由于IOC/DI的机制,可以作为第三方的管理者 所以作为父级.
2.SpringMVC容器,其中只负责Controller层的相关的对象的管理.
说明: 当SpringMVC容器启动时,提前将SpringMVC中的所有请求路径方法方法完成映射.
5.3.3 SpringMVC运行流程
用户发起请求时,第一步经过前端控制器,
但是前端控制器 只负责请求的转发和响应.不做任何业务处理.将请求转发给处理器映射器.
处理器映射器接收到前端控制器的请求之后,查询自己维护的服务列表信息.
如果服务列表中没有这个URL的key. 该程序不能处理用户的请求,则返回特定数据,前端控制器接收之后响应用户404.
如果服务列表中有该URL key 则说明请求可以正常执行. 将该方法的对象返回给前端控制器.
前端控制器将返回的方法进行接收,但是由于前端控制器只负责转发和响应,不能直接执行该方法.所以交给处理器适配器执行.
处理器适配器根据方法的类型(xml配置文件/注解/其他方法),处理器适配器在自己的处理器库中挑选一个最为合适的处理器去执行该方法. 当处理器执行该方法时标识业务开始. 将最终的处理的结果通过ModelAndView对象进行包裹,返回给前端控制器.
ModelAndView: Model: 代表服务器返回的业务数据 View: 服务器端返回的页面的名称
视图解析器 将View中的数据进行解析 拼接一个完整的页面路径 前缀/hello后缀
视图渲染: 将数据与页面进行绑定. 这样用户就可以在页面中看到具体的数据.
由于现在流行前后端分离. 所以SpringMVC省略了视图解析和视图渲染.只有前5步. 核心注解: @ResponseBody 省略6-7步
6 JAVA规范中的三大组件
--------------------------- 总复习----------------------
1. 成员变量的显示初始化与构造代码块的代码是按照当前代码的顺序执行的。
但是构造方法总是在最后执行
[成员变量与构造方法看顺序 最后执行构造方法jvm]
2.hashmap 支持的类型 (k,v)
key,value k,null null,null null,value
不能使用get key 方法判断是否存在某个值
使用containsKey()方法去判断
注意: hashtable只能是key,value形式
注意二: 如果使用多线程的hashmap ---> 变成ConcurrentHashMap(分段锁,效率高于hashtable)
hashmap默认初始化容量大小 16 扩容是*2 =32
hashtable 11 扩容是*2+1 是 23
3. iterator 与 listIterator 的区别
迭代器: add方法 无 有
next() 只能顺序 双向都可以 hasPrevious() previous()
都可以实现删除 不可以修改对象 可以修改对象 set()
4. BIO NIO AIO/NIO2 ???
5. 静态方法上的锁与普通方法上的锁有什么区别
静态方法上的锁 线程调用方法的时候回new对象 而 静态方法只有一个
这时候数据无法共享 象不同
6.spring实现依赖注入三种方式
1. @Component +@Bean+@value Autowired
2. 接口注入 @Autowired itemservice
3. setter 方法 调用set方法 实现基于setter的依赖注入
7. 懒加载
由于组织单元间存在着上下级关系,那么组织单元的排列就可以当作一棵树来处理。在显示数据时只显示父节点,点击父节点时,就能显示父节点下的子节点。
用户要选择某个组织单元,只需点击该组织单元的父亲节点就能找到该组织单元。
可以看出,懒加载节省了系统响应时间,提升了系统性能,非常具有利用价值。
8. Spring三种实现自动代理
1.基于bean配置名规则的自动代理创建器:允许为一组特定配置名的bean自动创建代理实例的代理创建器,实现类为:BeanNameAutoProxyCreator
2.基于Advisor匹配机制的自动代理创建器,实现类为:DefaultAdvisorAutoProxyCreator
3.基于bean中的AspectJ注解标签的自动代理创建器
9. ORM 关系映射
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。
10.