<mark>1.spring是什么?</mark>:

spring是由Rod Johnson一帮团队开发的是一个开源框架,主要是为了解决企业应用开发的复杂性创造的。框架的优势就是分层架构,spring使用基本的Javabean来完成以前复杂的EJB完成的事情。是一个分层的轻量级的开源框架,spring有两个最终要的核心,一个是IOC容器,一个是AOP。

<mark>spring的特点(有什么好处)</mark>:

  1. 方便解耦,简化开发,提供了IOC容器。
  2. 可以面向切面编程(AOP)。
  3. 声明式的事务支持
  4. 程序的测试变得简单化。
  5. 方便集成各种优秀的框架进行开发

<mark>谈谈IOC容器的理解</mark>:

它是spring的核心功能之一,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系的描述,由IOC容器负责类之间的创建、拼接、管理获取等工作。IOC(控制反转),什么是控制反转呢,控制什么,反转是什么,这里的控制是一种权利,即创建类实体对象的一种权利,之前没有用spring框架时,创建类的对象,需要的时候我们通常采用的用“new”关键字去创建,每次都是new一个对象,而使用了spring框架,这个时候控制权在开发人员在程序中掌控的,而使用spring后,相当于spring夺取了控制权,反转给了IOC容器,这个时候你再需要什么对象不是通过new的方式了,而是去IOC容器里去获取,就好像IOC容器有创建类对象的权利一样,其实这里实现依赖于依赖注入的方法,依赖什么,注入什么?这个方法实现遵循了面向对象的六大原则中的依赖倒置原则,抽象不应依赖具体实现,具体实现应依赖于抽象的的思想,这里的依赖是依赖于某个方法,对象,接口等,而注入则是在spring绒容器里注入对象的声明,也是注入类的对象bean,这里注入方式又有三种注入方式,通过构造函数注入,通过setter/getter方法注入,通过接口注入。

<mark>面向对象的六大原则</mark>:

  1. 单一职责原则:说白了一个类只负责一件事,这样设计使逻辑简单,降低类的复杂度。
  2. 开闭原则:说白了就是对扩展开放,对修改关闭。当增加新的功能,不是去修改原有的代码,而是去在原来的代码基础上去扩展功能。
  3. 里式替换原则:说白了就是所有引用基类的地方都必须透明的使用其子类的对象,换句话说,子类可以去扩展父类的功能,但不能改变父类原有的功能。
  4. 接口隔离原则:说白就是客户端不应该依赖于它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。
  5. 依赖倒置原则:说白了就是高层模快不应依赖于底层模块,抽象不应依赖于具体实现,具体实现应依赖于接口
  6. 迪米特原则:说白就是一个对象对其他对象应保持最少的了解,

<mark>谈谈什么是AOP(AOP的了解)</mark>:

AOP其实是一种编程思想,一种面向切面编程的思想,它解决了oop的一些弊端,例如,假如我们需要对多个没有继承关系的类引入一个公共行为,比如说日志权限等,如果不采用Aop编程思想,那么可能是重复的向这些类添加同样的代码,这样就会产生大量的重复的代码,并且需要修改时,将在每个类中去进行修改,不便于维护,降低了代码的质量,而采用Aop编程思想,其功能可以为每个需要的类加入共同的行为,修改一处等于多处,便于维护,传统的书写代码时从上往下,而AOP的重点关注的将纵向的变成了横向的。那么它是怎么实现的呢?其实它是采用动态代理的方式实现的,一种是jdk动态代理,一种是cglib动态代理,使用jdk动态代理则是使用反射来接收被代理的类,但是被代理的类必须实现接口,而cglib动态代理则一般是没有实现接口的类,它是一个代码生成库,可以在运行时动态生成某个类的子类,所以cglib是使用继承的方式做的动态代理,如果某个类被标记为final,它是无法使用cglib做动态代理的。

<mark>过滤器、***、***的区别作用</mark>:

首先它们的在一个项目中的顺序是先***,然后过滤器,最后***,
***:它是servlet的一个规范组件,它实现了ServletContextListener接口的服务端程序,它伴随着web应用的启动而启动,但它只初始化一次,随着web应用的停止而销毁,主要是做一些初始化添加工作,设置一些基本内容。
过滤器:它也是servlet的一个规范组价,它实现了Filter接口的服务端程序,主要用途过滤一些字符编码,做一些业务逻辑判断等。
***:它是额外的框架组件,是面向切面编程用到的,是基于java反射机制。

<mark>MVC模式的优缺点</mark>:

优点:耦合性地,部署快成本低,可维护性高
缺点:

  1. 调试困难,由于模型与视图的严格分离,使调试有一定的困难,所以,每个构件在使用之前要进行彻底的调试。
  2. 不适合小型、中等规模的应用程序开发,在中小型应用程序中,强制使用MVC进行开发,往往会花费大量时间,反而使开发变得繁琐。
  3. 增加了系统结构和实现的复杂性。

<mark>谈谈springmvc(了解下)</mark>:

springmvc采用的是一种松耦合可插拔式组件结构,比其他的mvc框架更具有灵活性和扩展性,springmvc通过使用一套注解,使Java类成为前端控制器,不需要任何接口,并且springmvc支持rest风格,springmvc围绕DispatcherServlet前端控制器为中心展开的,它负责从视图获取用户请求并且分配给处理器,并决定用哪个视图把数据呈现给用户。

<mark>springmvc有哪些特点</mark>:

  1. 它可以让我非常简单的设计出干净的web层,进行更简洁的web层开发
  2. 天然与上spring框架集成(如IOC容器,AOP等)
  3. 提供强大的约定大于配置的契约式的编程支持。
  4. 对静态资源的支持,支持RESTful风格。

<mark>mybatis与Hibernate的区别</mark>:

  1. mybatis它是一个不完全的ORM框架,因为它需要程序员自己编写SQL语句。
  2. mybatis直接编写原生态SQL,可以严格控制SQL执行性能,灵活性高,非常适合对关系数据模型要求不高的软件开发,因为类软件需求变化频繁,而mybatis的灵活性高的前提是mybatis无法做到与数据库的无关性。
  3. Hibernate对象关系映射能力强,数据库无关性好,使用Hibernate开发,可以节省很多代码,提高效率。

<mark>什么是事务</mark>:

事务是应用程序中一系列严密的操作,所有的操作必须完成,否则在每个操作中所做的修改都会被撤销,也就是事务具有原子性,一个事务的一系列操作,简答的说,要么做,要么不做。
事务的结束有两种,一种是当事务的所有操作成功执行完,提交事务,如果其中某一个步骤失败,将发生回滚操作,撤销事务之前所有的修改到事务之前开始的位置。

<mark>mysql的四种隔离级别</mark>:

SQL定义的四种隔离级别,用来限定事务内外哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销,
四种隔离级别:
读取未提交内容:该隔离级别性能不比其他级别好多少,该级别下,所有事务都可以看成未提交的事务执行结果。
读取提交内容:这是大多是数据库系统默认的级别(但不是mysql默认的),就是一个事务只能看见已经提交事务所做的改变,支持不可重复读。
可重读:这是mysql默认的事务隔离级别,它确保同一事务的多个实例并发读取数据时,会看到同样的数据行。
可串行化:这是最高级别的,它通过强制事务排序,使之不可能相互冲突,从而解决了“幻读”,其实它是在每个读的数据行都加了共享锁,这个级别,可能导致大量的超时现象和锁竞争。

<mark>私有地址(Private address)属于非注册地址,专门为组织机构内部使用。</mark>

以下表列出留用的内部寻址地址

A类 10.0.0.0 --10.255.255.255

B类 172.16.0.0–172.31.255.255

C类 192.168.0.0–192.168.255.255

  1. A类地址

⑴ A类地址第1字节为网络地址,其它3个字节为主机地址。另外第1个字节的最高位固定为0。

⑵ A类地址范围:1.0.0.1到126.255.255.254。

⑶ A类地址中的私有地址和保留地址:

①10.0.0.0到10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。

② 127.0.0.0到127.255.255.255是保留地址,用做循环测试用的。

  1. B类地址

⑴ B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。另外第1个字节的前两位固定为10。

⑵ B类地址范围:128.0.0.1到191.255.255.254。

⑶ B类地址的私有地址和保留地址

① 172.16.0.0到172.31.255.255是私有地址

②169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器,这时你将会从169.254.0.0到169.254.255.255中临得获得一个IP地址。

  1. C类地址

⑴C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。

⑵ C类地址范围:192.0.0.1到223.255.255.254。

⑶ C类地址中的私有地址:192.168.0.0到192.168.255.255是私有地址。

<mark>linux文件权限一共10位长度,分成四段</mark>:

Linux用户分为:拥有者、组群(Group)、其他(other)
linux中的文件属性过分四段,如 -rwzrwz—
第一段 - 是指文件类型 表示这是个普通文件
文件类型部分
-为:表示文件
d为:表示文件夹
l为:表示链接文件,可以理解为 windows中的快捷方式(link file)
b为:表示里面可以供存储周边设备
c为:表示里面为一次性读取装置

第二段 rwz 是指拥有者具有可读可写可执行的权限
类似于windows中的所有者权限比如 administrator 对文件具有 修改、读取和执行权限

第三段 rwz 是指所属于这个组的成员对于这个文件具有,可读可写可执行的权限
类似于windows中的组权限比如administrators组,属于这个组的成员对于文件的都有 可读可写可执行权限

第四段 — 是指其他人对于这个文件没有任何权限
类似于windows中的 anyone 一样就是说所有人对着个文件都会有一个怎样的权限.