文章目录
1. Java创建对象有哪四种方式?
- new
Students s1 = new Students()
- clone
Students s2 = (Students) s1.clone();
- 反射
Class clazz = s1.getClass();
Constructor constructor = clazz.getConstructor();
Students s2 = (Students) constructor.newInstance();
- 对象反序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(s1); //把s1对象写入到文件中。
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
Students s2 = (Students) in.readObject();
2. 什么是maven?maven的核心功能有哪些?
定义:
- maven是一种项目架构管理工具,用来方便导入jar包的,它的核心思想是:约定大于配置。
核心功能:
- 依赖管理
举例:依赖service
<dependencies>
<dependency>
<groupId>com.shsxt</groupId>
<artifactId>wc-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
groupId:项目隶属的实际项目-公司名称
artifactId:模块-项目名
version:项目当前所处的版本
平常需要的库,查找网站:http://mvnrepository.com/
然后复制到pom.xml文件中,记得写在project便签和dependencies中,保存就依赖了。
- 模块管理
在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。在该 POM 中可以使用 标签来定义一组子模块。 parent POM 不会有什么实际构建产出。 而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module。
例如子模块的pom.xml配置如下:
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hbgc</groupId>
<artifactId>base</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父模块的pom.xml位置-->
<relativePath>../base/pom.xml</relativePath>
</parent>
<groupId>com.hbgc</groupId>
<artifactId>springbootdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootdemo</name>
<description>Demo project for Spring Boot</description>
- 插件管理
添加插件,类似于添加依赖, 通过 GAV 来指定插件, 其中对于maven官方插件, 可以省略 GroupId。
举例:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
- 部署管理
在idea中,我们可以打开maven project视图。在maven的生命周期列表中进行测试、打包和安装。
此外,maven有三套生命周期:clean、default(最核心)、site
3. 什么是MVC?说说分层的好处。
MVC是一个架构,或者说是一个设计模式,它就是强制性使应用程序的输入,处理和输出分开。将一个应用程序分为三个部分:Model,View,Controller 即模型、视图、控制器。
Model:
- 业务处理 :业务逻辑(Service)
- 数据持久层:CRUD (Dao)
View:
- 展示数据
- 提供链接发起Servlet请求 (a,form,img…)
Controller (Servlet):
- 接收用户的请求 :(req:请求参数、Session信息….)
- 交给业务层处理对应的代码
- 控制视图的跳转
分层是体现了MVC的设计模式。
分层的好处就是解耦,做到高内聚,低耦合。
4. Spring的两大核心技术是什么?
(1) IOC(DI):Inverse of Controller,控制反转
Dependency Inject ,依赖注入。
两个是一回事,就是把猫叫了个咪。
如何理解依赖注入呢?
①创建对象永远不是new
②面向接口的编程
(2)AOP:面向切面编码
5. 什么是IOC/DI?
IOC:即控制反转,最基础的调用对象是通过new一个对象出来,例如:People p=new People(),我们Spring框架中的IOC即改变这种方式的调用,将后面“new People”转换为xml文件去调用,即使用第三者调用。
DI:即依赖注入,是具体的实现技术,是指由第三方组件负责将实例变量(实现类)传入到对象(调用类)中去。
6. 谈谈面向对象编程与面向接口编程的区别。
- 首先,面向接口编程是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。
- 面向对象编程:java就是面向对象编程,所谓在java中万事万物皆对象,这是因为java中所有类的调用都是new出来的,其次面向对象用到三大特性,即封装、多态、继承。
- 面向接口编程:在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务,而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。这样做对系统灵活性大有好处,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。
- 总之:面向对象编程就是一堆对象,通过封装、继承、多态等更加有效的组织程序;面向接口编程就是一堆接口,通过接口规约对象的属性和方法,是面向对象一部分。
7. 什么是反射?说说反射是如何应用到spring框架上。
- 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
- 通过解析xml文件,获取到id属性和class属性里面的内容,利用反射原理获取到配置里面类的实例对象,存入到Spring的bean容器中。
8. 说说java 解析xml有哪些技术?
(1)DOM
优点:
- 形成树结构,直观好理解,代码更容易编写
- 解析过程中树结构保留在内存中,方便修改
缺点:
- 当xml 文件较大时,对内存耗费比较大,容易影响解析性能并造成内存溢出
(2) SAX
优点:
- 采用事件驱动模式,对内存耗费比较小
- 适用于只需要处理xml中数据时
缺点:
- 不易编码
- 很难同时访问同一个xml中的多处不同数据
(3) JDOM
- 仅使用具体类而不使用接口
- API大量使用了Collections类
(4) DOM4J
- JDOM的一种智能分支,它合并了许多超出基本xml文档表示的功能
- 使用接口和抽象基本类方法,是一个优秀的Java XML API
- 具有性能优异、灵活性好、功能强大和极端易用使用的特点
- 是一个开放源代码的软件
DOM4J和JDOM在实际开发用的比较多,第三方的解析技术。
9. 抽象类与接口的区别。
使用抽象类是为了代码的复用,而使用接口是为了实现多态性,具体有如下区别:
(1)成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
(2) 关系区别
类与类:
继承,单继承
类与接口:
实现,单实现,多实现
接口与接口:
继承,单继承,多继承
(3)设计理念区别
抽象类: 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。
接口: 被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。
比如:保温杯是水杯,具有保温功能。保温杯 extends 水杯 implements 保温,水杯是抽象类,保温是接口。
10. 谈谈表单的同步提交与异步提交的区别。
- 表单的同步提交:表单默认的提交行为是同步提交,浏览器会锁死等待服务端的响应结果。
无论服务端响应的是什么,都会直接把响应的结果覆盖掉当前页面。(服务器重定向只针对同步提交有效) - 表单的异步提交:form标签内部不再编写action和method,而是通过ajax的url和method选项去实现提交,提交的表单内容不会发生锁死,浏览器任然可以干别的事情。
- 目前企业项目,大多数使用异步提交方式,很少使用同步提交。