1.面向对象与面向过程的有哪些区别?
面向过程:比如洗衣服我们需要:打开洗衣机—》放衣服-》放洗衣粉-》清洗-》烘干
面向对象:需要拆出人和洗衣机两个对象
人:打开洗衣机 放衣服 放洗衣粉
洗衣机:清洗 烘干
面向对象
封装:把不想让外部调用的属性封装起来
继承:用于父子类中,子类可以继承父类的方法
多态:基与对象所属性的不同,外部对同一方法的调用,事假执行的逻辑不同
2.JDK、JR、JVM区别和联系
JDK:
JRE:
JVM:
3.==和equals的区别
==:对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址。
equals:比较的是内容
4.Spring、SpringBuffer、SpringBuilder的区别
Spring:spring是final修饰的,长度不可变。
SpringBuffer:SpringBuffer是线程安全的
SpringBuider:SpringBuider是线程不安全的
性能:SpringBuider > springbuffer > sprling
场景:经常需要改变字符串内容时,优先使用SpringBuilder,多线程使用共性变量时使用SpringBuffer。
5.重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于父类。
6.接口和抽象类
- 抽象类可以存在普通成员函数,而接口只能存在 public abstract方法。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
- 抽象类只能继承一个,几口可以实现多个。
7.list和set
list:有序,可重复,允许多个null元素对象
set:无序,不可重复,最对允许一个null元素对象
8.hashcode和equals
hashcode:哈希码,能根据“键”快速的检索出对应得“值”
- 如果两个对象相等,这hashcode一定是相同的。
- 两个对象相等,两个对象分别调用equals方法都返回true
- 俩个对象有相同的hashcode值,他们也不一定是相等的
- 因此,equals方法被覆盖国,则hashcode方法也必须被覆盖过
- hashcode()的默认行为是对堆上的对象产生独特值。如果没有重写hashcode(),则该class的个对象无论如何都不会相等(即使这两个对象指向相同的数据)
9.ArrayList和LinkedLIst区别
ArrayList:基于动态数组,连续内存存储,适合下标访问,随机访问。扩容机制:因为数组长度固定,超出长度存数据是需要新建数组,然后将老数组的数据拷贝到新数组,如果 不是尾部插入数据还会涉及到袁术的移动(往后复制一份,插入元素),使用尾插法并指定初始容量可以极大提升性能、甚至超过linkedList(需要创建大量的node对象)。
LinkedList:基于链表,可以存储在分散的内存中,适合做数据插入及删除操作,不适合查询。需要逐一遍历。遍历LinkedList必须使用iterator不能使用for循环,因为每次for循环体内通过get(i)去的某一元素时都需要对list从新进行遍历,新能消耗极大。
另外不要试图使用indexof等返回元素索引,并利用其进行遍历,使用indexlof对list进行遍历,当结果为空会遍历整个列表。
10.HashMap和HashTable的区别?及底层实现是什么?
区别:
- HashMap:方法没有synchronized修饰,线程不安全,HashTable:线程安全。
- HashMap允许key和value为空,而HashTable不允许。
底层实现:数组+链表实现
jdk8开始链表高度到8、数组长度超过64,链表转变为红黑树,元素以内部类Node节点存在。
- 计算key的hash值,二次hash然后对数组长度取模,对应到数组下标。
- 如果没有产生hash冲突(下标位置没有元素),则直接创建Node存入数组。
- 如果产生hash冲突,先进行equal比较,相同则取代该元素,不同,则判断链表高度插入链表,链表高度达到8,并且数组长度到64则转变为红黑树,长度低于6则将红黑树转回链表。
- key为null,存在下标0的位置。
11. java中的异常体系
java中的所有异常都来自顶级父类Throwable。
Throwable下有凉的之类Exception和Error。
Error是程序无法处理的错误,一旦出现这个错误,这程序被迫停止运行。
Exception不会导致程序停止,粪污两个部分RunTimeException运行时异常和CheckedException检查异常。
RunTimeException常常发生在程序运行过程中,会导致程序当前线程执行失败,CheckedException常常发生在程序编译过程中,会导致程序编译不通过。
12.线程的生命周期及状态
线程中通常的五种状态:创建、就绪、运行、阻塞、死亡。
13.spring是什么?
轻量级的开源的框架。他是一个容器框架哟经来装Javabean(java对象),中间层框架(万能胶)可以起一个链接作用,比如说把Struts和hibernate沾合在一起运用,可以让我们的企业开发更快、更简洁。
14.谈谈你对AOP的理解?
AOP:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进行增强,比如对象中的方法进行增强,可以在执行摸个方法之前额外的做一些事情,债摸个方法执行之后额外的做一些事情。
15.谈谈你对IOC的理解?
容器概念:控制反转、依赖注入
IOC容器:实际上就是map(key,value),里面存的是各种对象,在项目启动的时候会读取配置文件里面的bean节点,根据全限定类名使用反射创建对象放到map里,扫描到打上描述的注解的类还是通过反射创建队形放到map里。
这时候map里就有各种对象了,接下来我们在代码里需要用到里面的对象时,在通过DI注入。
控制反转:全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心。
16.Spring、SpringBoot、SpringMVC有什么区别?
- spring是一个IOC容器,用来管理bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题,更方便将不同方法中的共同处理抽取成切面、制动注入给方法执行,比如日志,异常等。
- SpringMVC是spring对web框架的一个解决方案,提供了一个总的前端控制器service,用来接收请求,然后定义了一套路由策略及配置执行handle,两handle结果使用试图解析技术生成视图展现给前端。
- SpringBoot是Spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发Spring +SpringMVC应用,简化了配置,整合了一些列的解决方案、redis、MongoDB、es、可以开箱即用。
17.springMVC工作流程
- 客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配前端控制器(或分发器/DispatcherServlet)的请求映射路径,web容器将请求转交给DispatcherServlet(前端控制器).
- DipatcherServlet(前端控制器)接收到这个请求之后将根据请求的信息以及处理器映射器(HandlerMapping)的配置找到处理请求的处理器(Handler)。
- 由具体的处理器适配器(HandlerAdapter)对Handler进行具体的调用。
- Handler对数据处理完成以后将返回一个ModelAndView()对象给 DispatcherServlet。
- DispatcherSevlet通过视图解析器(ViewResolver)将ModelAndView()转 化为真正的视图View。
- Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。
18.什么是Mybatis?
Mybatis是一个半制动化的ORM框架,底层封装了JDBC,简化对数据库的增删改查操作。
19.Mybatis的优缺点?
1.优点:
- 基于sql语句编程,相当灵活,不会对硬功程序或者数据库的现有设计造成任何影响,sql写在xml文件中,解除sql与程序代码的耦合,便于统一管理;
- 与JDBC 相比,减少了50%上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
- 很好的与各种数数据库兼容。
- 能够与spring很好的集成;
- 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
2.缺点:
- sql语句的编写工作量较大,尤其当字段多、关联表多时对开发人员编写sql语句的功底有一定要求;
- sql语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。