javaweb问题研究(二)

1.Java创建对象有哪四种方式?
有以下四种方式

package com.xbky.zhoudan;
import java.io.*;
import java.lang.reflect.Constructor;

public class main {
    public static void main(String[] args) {
        //创建对象一:new Student()
        Student s1 = new Student("张三",11);
        System.out.println(s1);
        //创建对象二:clone
        //先实现cloneable接口,重写方法 再修改方法的权限
      /*  try {
            Student s2 = (Student) s1.clone();
            System.out.println(s1==s2); //false
            System.out.println(s2);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }*/
        //创建方式三:反射
        Class aClass = s1.getClass();
        try {
            Constructor constructor = aClass.getConstructor(String.class,int.class);
            Student s3 = (Student) constructor.newInstance(new Object[]{"lisi", 22});
            System.out.println(s3==s1);
            System.out.println(s3);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //创建方式四:对象反序列化 ,必须实现序列化的接口 先建立输出流将对象写入,再读出来
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("a.txt")));
            oos.writeObject(new Student("haha",22));
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("a.txt")));
            System.out.println(ois.readObject());
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

Student类:

package com.xbky.zhoudan;

import java.io.Serializable;

public class Student implements Cloneable,Serializable {
    private String name;
    private int age;
    public Student(){}

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2.什么是maven?maven的核心功能有哪些?

作为 Apache 组织中的一个颇为成功的开源项目, Maven 主要服务于基于 java 平台的项目构建, 依赖管理和项目信息管理。无论是小型的开源类库项目, 还是大型的企业级应用; 无论是传统的瀑布式开发, 还是流行的敏捷开发, Maven 都能大显身手。
Maven有依赖管理、模块管理、插件管理和部署管理四大核心功能。
maven也有生命周期:clean,default,site

3.什么是MVC?说说分层的好处。
Model view Controller 模型、视图、控制器

Model:

  • 业务处理 :业务逻辑(Service)
  • 数据持久层:CRUD (Dao)

View:

  • 展示数据
  • 提供链接发起Servlet请求 (a,form,img…)

Controller(Servlet)

  • 接收用户的请求 :(req:请求参数、Session信息….)
  • 交给业务层处理对应的代码
  • 控制视图的跳转

登录—>接收用户的登录请求—>处理用户的请求(获取用户登录的参数,username,password)---->交给业务层处理登录业务(判断用户名密码是否正确:事务)—>Dao层查询用户名和密码是否正确–>数据库

在这里插入图片描述
4.Spring的两大核心技术是什么?

IOC Inverse of Controller,控制反转, 将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合
控制反转:将对象的控制权从代码(new)交给xml

AOP 将安全,事务等于程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,
面向切面:在不影响原有代码基础上,植入功能,例如:打印日志

5.什么是IOC/DI?

nverse of Controller,控制反转。
Dependency Inject ,依赖注入。
两个是一回事。

 //使用了spring ioc 容器注入了一个对象。没有使用new.内部也是通过反射+xml文档的解析来实现的。
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Students s1 = (Students) context.getBean("s2");
        System.out.println(s1);
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--定义了一个学生对象-->
    <bean id="s1" class="com.xbky.domain.Students">
        <property name="sid" value="200"/>
        <property name="sname" value="张三丰"/>
        <property name="gender" value="" />
        <property name="birthday" value="1998-10-10"/>
        <property name="major" value="太极拳" />
    </bean>

    <bean id="s2" class="com.xbky.domain.Students">
        <property name="sid" value="300"/>
        <property name="sname" value="郭靖"/>
        <property name="gender" value="" />
        <property name="birthday" value="1999-10-10"/>
        <property name="major" value="九阴真经" />
    </bean>
</beans>

6.谈谈面向对象编程与面向接口编程的区别。

1、面向对象编程:
首先java就是面向对象编程,所谓在java中万事万物皆对象,这是因为java中所有类的调用都是new出来的,其次面向对象用到三大特性,即封装、多态、继承。
2、面向接口编程:
一个接口可以从三方面去考察:制定者(或者叫协调者)、实现者(或者叫生产者)、调用者(或者叫消费者),接口本质上就是由制定者来协调实现者和调用者之间的关系。
所以通常说的"面向接口编程"可以理解为:只有实现者和调用者都遵循"面向接口编程"这个准则,制定者的协调目的才能达到。

7.什么是反射?说说反射是如何应用到spring框架上。
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

举例:①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;②Spring框架也用到很多反射机制,最经典的就是xml的配置模式。Spring 通过 XML 配置模式装载 Bean 的过程:1) 将程序内所有 XML 或 Properties 配置文件加载入内存中; 2)Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息; 3)使用反射机制,根据这个字符串获得某个类的Class实例; 4)动态配置实例的属性。

8.说说java 解析xml有哪些技术?
DOM

DOM 是 W3C 处理 XML 的标准 API,它是许多其它与 XML 处理相关的标准的基础,不仅是 Java,其它诸如Javascript,PHP,MS .NET 等等语言都实现了该标准, 成为了应用最为广泛的 XML 处理方式。 DOM 解析耗费时间。

SAX

SAX 使用了最少的系统资源和最快速的解析方式对 XML 处理提供了支持。 但随之而来繁琐的查找方式也给广大程序员带来许多困扰,常常令人头痛不已,但同时它对 XPath 查询功能的支持,令人们对它又爱又恨。SAX解析过于繁琐。

Digester

由于前面两种各有缺点,大家想到需要用与 XML 结构相对应的JavaBean 来装载这些信息,由此 Digester 应运而生。它的出现为XML 转换为 JavaBean 对象的需求带来了方便的操作接口,使得更多的类似需求得到了比较完美的解决方法,不再需要程序员自己实现此类繁琐的解析程序了。

9.抽象类与接口的区别。

含有abstract修饰符的class即为抽象类,abstract类不能创建实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。

10.谈谈表单的同步提交与异步提交的区别。
区别:

Form表单提交:一般都会进行页面跳转;
Ajax异步提交:可以不进行页面跳转;
具体可以看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值