1.Java创建对象有哪四种方式?
1、使用关键字new即可
Student student = new Student();
2、使用clone
- 实体类实现Cloneable接口
public class Student implements Cloneable{
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
- 测试类要先使用new创建一个对象,然后使用该对象去调用clone()方法即可
class Test{
public static void main(String[] args) throws CloneNotSupportedException {
Student student = new Student();
Student cloneStudent = (Student) student.clone();
cloneStudent.setId(001);
cloneStudent.setName("张三");
System.out.println(cloneStudent);
}
}
3、使用反射
Class c = Class.forName("org.westos.demo02.Student");
Student student2 = (Student) c.newInstance();
4、序列化
//序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.txt"));
out.writeObject(student);
//反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.txt"));
Student student3 = (Student) in.readObject();
2.什么是maven?maven的核心功能有哪些?
maven是一个项目管理工具软件,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
maven四大核心功能: 依赖管理、模块管理、部署管理、插件管理。
3.什么是MVC?说说分层的好处。
M(Model)模型–V(View)视图–C(Controller)控制器,是一种开发模式,他的好处是可以将业务逻辑和界面分离。
Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。
View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在View视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理。
Controller(控制器),Controller是用来处理用户输入数据,已经更新业务模型的部分。控制器中接收了用户与界面交互时传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态。
优点:
1.各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。即降低了耦合。
2.有利于开发中的分工
在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3.有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。
4.Spring的两大核心技术是什么?
IOC: 将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合
控制反转:将对象的控制权从代码(new)交给xml
AOP: 将安全,事务等于程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,
面向切面:在不影响原有代码基础上,植入功能,例如:打印日志
5.什么是IOC/DI?
IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。
DI(依赖注入):全称为Dependency Injection。意思自身对象中的内置对象是通过注入的方式进行创建。
6.谈谈面向对象编程与面向接口编程的区别。
1.面向接口编程:
手段:通过接口规约对象的属性和方法,是面向对象一部分。
目的:统一标准问题,让大家不至于各行其事而对代码的可读性造成影响(公用部分行为)。
例如,我们设计一个USB接口,USB接口不仅可以插入U盘,还可以插入移动硬盘,那么我们应该在接口中涉及两个方法。
public interface UsbInterface {
//usb接口主要实现读写的功能
public void read();
public void write(String content);
}
U盘的实现类
public class Udisk implements UsbInterface {
@Override
public void read() {
System.out.println("U盘进行读...");
}
@Override
public void write(String content) {
System.out.println("U盘进行写入操作...");
}
}
移动硬盘的实现类
public class MoveDisk implements UsbInterface {
@Override
public void read() {
System.out.println("移动硬盘进行读...");
}
@Override
public void write(String content) {
System.out.println("移动硬盘进行写入操作...");
}
}
USB接口要依托于电子设备例如计算机使用
public class Computer {
//读操作
public void readUDevice(UsbInterface device){
device.read();
}
//写操作
public void writeDevice(UsbInterface device,String content){
device.write(content);
}
}
2.面向对象编程:
手段:通过封装、继承、多态等更加有效的组织程序。
目的:解决的是复用问题(让代码可以复用,而不是重复造轮子)。
功能实现类
public class Utest {
public static void main(String[] args) {
//创建电脑
Computer computer = new Computer();
//创建U盘
Udisk udisk = new Udisk();
//创建移动硬盘
MoveDisk moveDisk = new MoveDisk();
//计算机读设备
computer.readUDevice(udisk);
computer.readUDevice(moveDisk);
//计算机给设备写入内容
computer.writeDevice(udisk,"HelloWorld");
computer.writeDevice(moveDisk,"HelloWorld");
}
}
7.什么是反射?说说反射是如何应用到spring框架上。
反射java语言中的一种机制,通过机制可以动态的实例化对象,读写属性、调用方法。这样在配置文件XML里设定了类名,对象属性,然后通过Java反射机制实现创建新的对象。Spring的IOC依赖反转就是这样实现的。一个对象依赖于另一个对象,被依赖的对象现在可以写在配置文件里,如果需要改变该被依赖对象,就可以直接通过容器生成该对象。
8.说说java 解析xml有哪些技术?
1.DOM方式解析XML
Dom解析是将xml文件全部载入到内存,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,与平台无关,java提供的一种基础的解析XML文件的API,理解较简单,但是由于整个文档都需要载入内存,不适用于文档较大时。
2.SAX方式解析XML
基于事件驱动,逐条解析,适用于只处理xml数据,不易编码,而且很难同时访问同一个文档中的多处不同数据
3.JDOM方式解析XML
简化与XML的交互并且比使用DOM实现更快,仅使用具体类而不使用接口因此简化了API,并且易于使用
4.DOM4j方式解析XML
JDOM的一种智能分支,功能较强大,建议熟练使用
9、抽象类与接口的区别
抽象类
- 只需声明方法而不用去实现。
- 不能创建abstract类的实例,然而可以创建一个类型是抽象类的变量,并让它指向具体子类的实例。
- 不能有抽象构造函数或抽象静态方法。
- Abstract类的子类必须实现父类中的所有抽象方法,否则它们也必须称为抽象类。
- 接口是特殊的抽象类。
接口
- 在接口中,所有方法都必须是抽象的。
- 多继承性可通过实现这样的接口而获得。
- 接口只可以定义static final成员变量。
- 不能创建接口的实例,然而可以创建一个类型是接口的变量,并让它指向实现类的实例
10.谈谈表单的同步提交与异步提交的区别。
- 表单具有默认的提交行为,默认是同步的,同步表单提交,浏览器会锁死等待服务端的响应结果。表单的同步提交之后,无论服务端响应的是什么,都会直接把响应的结果覆盖掉当前页面。(服务器重定向只针对同步提交有效)
- 异步主要使用ajax,在进行表单异步提交时,服务器重定向是无效的。这时,需要在客户端进行路由跳转。