CoreJava和Web知识点复习

CoreJava和Web知识点复习

CoreJava

  1. Java中数据类型以及数据相加自动类型提升规则

    	byte 		1Byte 	-128127
    	short 		2B 		-3276832767
    	int 		4B 		-2^312^31-1
    	long 		8B 		-2^632^63-1
    	float 		4B 		单精度 支持科学计数法如1E29
    	double 		8B 		双精度
    	char 		2B
    	Boolean 	true 	false
            
    	a) 如果其中1个操作数是double类型,结果 会自动提升成double类型;
    	b) 如果其中1个操作数是float类型,结果 会自动提升成float类型;
    	c) 如果其中1个操作数是long类型,结果 会自动提升成long类型;
    	d) 除此以外,结果都自动提升成 int 类型。
    
  2. java数组能否自动扩容?

    	Java数组对象的大小是固定不变的,数组对象是不可扩容的。数组先开辟内存空间,而后再使用索引进行内
    容的设置,数组长度直接固定。
    	利用数组复制方法可以变通的实现数组扩容,System.arraycopy()可以复制数组。Arrays.copyOf()可
    以简便的创建数组副本。创建数组副本的同时将数组长度增加就变通的实现了数组的扩容。
    
  3. 方法重载和方法覆盖的区别

    	重载:方法名相同参数表不同 返回值无要求
    	覆盖:方法名,返回值 ,参数表 相同 修饰符 (系统更宽) 异常(父类异常要小)
    
  4. this和super的区别

    	This 引用, 代表当前对象(相当于“我”),this. 用于在构造方法或普通方法中,调用当前对象的属性
    或方法, this() 只能用在构造方法中,用于 调用该类中的其它构造方法。
    	Super 引用,代表 直接父类对象。Super.用在子类的构造方法或普通方法中,调用父类的属性或方法。
    Super()只能用在 子类的构造方法中, 用于 调用父类的构造方法
    
  5. abstract final static关键字的使用

    static
    	a) 属性:类属性 被所有对象共享(与对象无关),只初始化1次
    	b) 方法:static修饰的方法 称为类方法(静态方法)
    		静态方法的特点:
    		静态方法内部可以用什么:
    		1)静态方法内部只允许使用静态成员
    		2)静态方法内部 不可以使用thissuper关键字
    		静态方法关于重载和覆盖的语法:
    		1)静态方法可以被重载 符合方法重载的所有语法要求
    		2)静态方法可以被继承 也可以被覆盖 但是只能被static所修饰的方法覆盖
    		3)静态方法 不存在多态的情况 父类引用指向子类对象 子类中覆盖了父类中的静态方法,父类引用
    调用该方法时 依然是父类中未被覆盖的方法
    	c) 静态初始代码块, 被static 修饰的 初始代码块。用于在类加载时,和 初始化静态属性 按代码的
    先后顺序 进行初始化工作。
    final
    	final所修饰的变量只能被赋值一次
    	 a)局部变量
    		修饰八种基本数据类型的变量:值不可变
    		修饰引用类型的时候:地址不可变
    	 b)成员变量
    		修饰八种基本数据类型的变量:值不可变
    		修饰引用类型的时候:地址不可变
    	注意:
    		1)final修饰得的成员变量 没有默认值 必须保证在创建对象完成之前给其赋值(初始化阶段/构造方
    法)
    	 c)类变量
    		修饰八种基本数据类型的变量:值不可变
    		修饰引用类型的时候:地址不可变
    	 注意:
    		2)final修饰得的类变量 没有默认值 必须保证类变量在类加载结束前被赋值(类加载初始化阶段)
    	 d)如果两个变量都是final所修饰的 则二者进行运算时 a+b的结果会尽可能地转换成类型c 从而编译不会
    出错但当a+b的范围大于类型c时 编译出错
    		final 类型a a = 10final 类型b b = 20;
    		类型c c = a+b;
    		
    	修饰方法:
    		final修饰的方法 可以被重载且与final无关可以被继承 但不可以被覆盖
    	修饰类:
    		final修饰的类 被称为最终类 也叫做断子绝孙类
    abstract
    	a) 方法:abstract修饰的方法,称为 抽象方法。
    	注意:1) 抽象方法 没有方法体(连{}都没有 直接;结束);
    		 2) 抽象方法 必须定义在 抽象类中。
    	b):abstract修饰的类,称为 抽象类。
    	   注意:1)抽象类 不能 实例化; 可以声明引用;
    			2)子类 继承 抽象类时, 必须 实现/覆盖 抽象类中的所有抽象方法(除非该子类还是抽的);
    			3)抽象类中 既可以有抽象方法 也可以有 非抽象方法。
    			4)抽象类 的好处,强制 使用多态。
    
  6. 什么是类加载?什么情况会触发类加载

    a)类加载:JVM在第一次使用某个类时 会通过CLASSPATH所配的路径 将该类所对应的.class文件中类的相关
    信息(属性/方法/静态成员/父类信息...)读取到JVM的内存中,并保存起来。
    b)类加载的过程: 加载----链接(验证+准备+解析)-----初始化----使用----卸载
    	加载:将.class中的信息读取到内存
    	验证:验证该.class是否是合法的.class文件 验证相应的访问权限修饰符
    	准备:给类变量分配空间 给类变量赋默认值 重要
    	解析:引用替换
    	初始化:给类变量进行初始化 执行初始化代码或执行静态初始化代码块中的代码 重要
    	使用:在内存中使用类信息
    	卸载:将保存的类信息回收
    c)类加载(进行到初始化阶段的)触发的时机: 重点
    	1)第一次创建对象时
    	2)第一次通过类名.静态属性/方法()的形式 调用静态成员时
    	3)子类类加载时 其父类如果没有被加载 则也会进行类加载
    	4)备注:一般 称类加载的时机 就是进行到初始化阶段性的几种情况 因为类加载触发到初始化阶段之前的
    情况过于复杂 所以不讨论
    类加载做的两件事:给类变量进行空间分配赋默认值 给类变量进行初始化
    
    类加载时机:
    	1.当第一次创建本类对象时
    	2.第一次访问静态成员时(静态属性+静态方法)
    	3.当子类进行类加载时(当子类对象第一次被创建或子类静态成员第一次被访问) 父类会先进行类加载(也就
    只执行一次)
    	4.当第一次使用Class.forName()方法来获取一个类的类对象时
    
  7. 接口与抽象类的异同

    相同点:
    	a)在编译后都可以生成.class文件
    	b)可以被声明 但不可以实例化对象
    不同点:
    	a)接口没有构造方法
    	b)接口中所有的方法都是公开抽象方法 必须被publicabstract修饰 接口中方法默认的修饰符就
    是publicabstract
    	c)接口中所有的属性都是空开静态常量 必须被public static final修饰 接口中属性默认的修饰符
    就是public static final
    
  8. String、StringBuilder和StringBuilder的区别

    String是不可变的字符串 当String的内容发生变化时 会先创建原内容的副本 再进行改变并创建新对象
    StringBuffer或StringBuilder 是可变字符串 内容发生改变时在原对象里修改 并不创建新对象
    StringBuffer JDK1.0出现 线程安全 效率低
    StringBuilder JDK1.5出现 线程不安全 效率高
    
  9. == 与 equals的区别

    a) == 两端为基本数据类型比较数值  两端为引用数据类型比较内存地址
    b) equals 比较对象内容
    
  10. 简述泛型集合的作用

    统一集合中所存储的元素类型ArrayList<泛型> list = new ArrayList<泛型>();
    泛型填写了什么类型,那么这个集合就只能存放什么类型,如果想使用基本数据类型,则必须使用对应的包装类.
    
  11. List Set Map集合的各自特点

    
    
  12. 如何定义自定义异常类

    开发时项目中出现了异常情况 但这个异常情况在java中并不算 所以java并没有提供这样的异常类型 这
    时就需要我们自定义异常
    	1.自定义运行时异常
    	语法:
    		class 自定义异常名 extends RuntimeException{
    			public 自定义异常名(){
    				super();
    			}
    			public 自定义异常名(String s){
    				super(s);
    			}
    		}
    	2.自定义非运行时异常
    	语法:
    		class 自定义异常名 extends Exception{
    			public 自定义异常名(){
    				super();
    			}
    			public 自定义异常名(String s){
    				super(s);
    			}
    		}
    
  13. 简述final、finalize、finally的区别

    final:修饰符 可以修饰 类 变量 方法
    	类:断子绝孙
    	变量:被称为常量 只可被赋值一次 基本数据类型值不可变 引用类型地址不可变
    	常量必须在创建对象成功之前在初始化阶段或构造方法中被赋值 常量作为属性时没有默认值
    	方法:不可被覆盖 可以被重载
    finally:异常处理的关键字 后面的代码块是在catchtry执行完毕后 必须执行的
    finalize:Object中的方法 当一个垃圾对象被回收时 会被调用 该方法内部没有任何实现 只是标志该对象被
    回收
    
  14. throw 和 throws 的区别

    throw 主动抛出异常
    	语法:
    	throw new 异常类名(参数); 参数就是对异常的说明
    	在编译时 通过语法主动产生一个异常 这个异常以下的代码可能不会被执行
    	这个主动抛出异常的语句 会在运行时生成异常 终止程序
    	
    throws 消极异常处理
    	修饰符 返回值类型 方法名(参数)throws 异常名1,异常名2,异常名3....{
    	//会出现异常的代码
    	}
    	注意:
    	1.消极的处理 并不真正的解决异常 而是将异常抛给调用者
    	2.调用者所抛出的异常 必须等于或大于其调用的方法
    	3.被调用的方法 抛出的是运行时异常 则其调用者可以不处理
    
  15. 创建线程的几种方式

    开启线程的动作需要依附于主线程 所以创建线程开启线程的代码写在主函数中
    a)先创建任务 再将任务放置在线程对象中
    	先写任务类
    		class 任务类类名 implements Runnable{
    			public void run(){
    			//具体执行的任务
    			}
    		}
    		先创建任务对象
    		MyTask task = new MyTask();
    	在创建线程对象并把任务交给该线程
    	Thread th = new Thread(task);
    	开启线程
    	th.start();
    b)创建一个自带任务的线程
    	class 自带任务的线程名 extends Thread{
    		public void run(){
    		//具体执行的任务
    		}
    	}
    	//直接创建自带任务的线程对象
    	MyThread th = new MyThread();
    	开启线程
    	th.start();
    
  16. 什么是线程安全

    a)原子操作:不可分割的多步操作,被视为一个整体,其执行的顺序和步骤不可被打破
    b)临界资源:多线程并发时,共享的同一个对象。
    c)线程同步:多线程并发时,为了保证临界资源的正确性,而不能破坏程序中的原子操作。
    d)互斥锁标记:任何对象都具备的一个标记,可以分配给线程,只有获得该标记的线程进行操作,其他线程进入阻塞状态。
    e)死锁:两个线程相互占用着对方需要使用的互斥锁标记 从而相互等待 程序停滞
    
    synchronized 同步锁标记
    a)synchronized修饰代码块 同步代码块
    	synchronized(临界资源){
    	原子操作
    	}
    	如果一个线程 想执行原子操作 则必须先获取这个临界资源的互斥锁标记
    b)synchronized修饰方法 同步方法
    	当一个方法中所有的代码都为原子操作时 我们可以将该方法声明为 同步方法
    	public synchronized void add(String str){
    		arr[size] = str;
    		try {
    			Thread.sleep(100);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		size++;
    	}
    	相当于给当前对象进行加锁
    	public void add(String str){
            synchronized(this){
                arr[size] = str;
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                size++;
                }
    	}
    同步代码块: 一般写在线程或线程任务的 的run方法中
    同步方法:一般写在临界资源的方法中 一般一个同步代码块如果写在了临界资源中 则临界资源处用this
    
  17. 请写出线程的几种状态

    1.初始状态 New:当创建了一个线程时 会进入该状态
    2.就绪状态 Ready:当初始状态的线程调用了start()方法时会进入该状态
    3.运行状态 Running:当就绪状态的线程获得时间片时则进入该状态 如果该状态下时间片结束但线程没有执行
    完毕 则返回到 就绪状态
    4.终止状态 Terminated:当线程的run方法中的代码 或 主线程main方法的代码执行完毕时 该线程会进入终
    止状态
    5.有限期等待:Timed Waiting 放弃当前时间片 进入等待状态 当被设置等待时间到时 则回到 就绪状态 重
    新可以获得时间片
    6.无限期等待:Waiting 放弃当前时间片 进入等待状态 等到加队的线程执行完毕时 才会进入就绪状态
    7.阻塞状态:Blocked 当一个线程执行同步代码块 或 同步方法时 如果没有拿到该临界资源互斥锁标记 则会进
    入到阻塞状态
    
  18. sleep()和wait()的区别

    sleep(long类型的毫秒数); 当一个线程在运行时执行到了Thread.sleep(long类型的毫秒数);时 当前这个
    线程会进入有限期等待状态 等待时间为参数的毫秒 在等待期间 线程不会获得时间片 sleep会放弃时间片
    而不放弃互斥锁标记
    join(); 我们可以在一个线程1中 使用另一个线程2对象来调用join方法 线程则会加入到线程1中 直到线程2
    执行完毕
    线程1才会结束等待状态
    wait();//当临界资源调用wait()方法时 当前线程 放弃时间片 放弃互斥锁标记 进入等待区(进入阻塞状态)
    
  19. IO流的分类

    1.按照方向来分:
    	a)输入流:方向为向内存中输入
    	b)输出流:方向从内存中向外输出
    2.按照传输的数据来分:
    	a)字节流:传输时 以字节为基本单位 能传输所有文件
    	b)字符流:传输时 以字符为基本单位 只能传输文本文件---notepad++能开不是乱码都是文本文件
    3.按照功能来分:
    	a)节点流:提供了最基本的输入输出功能 基础枪械
    	b)过滤流:为节点流提供更多的功能拓展 枪械的配件
    
  20. 简述什么是对象序列化,以及序列化的要求。

    将对象放置在流中传输 被称为对象的序列化
    如果一个对象需要被序列化 则其对应的类需要实现Serializable接口 这个接口中没有方法 就是一个标识
    对象序列化通常要配合ObjectOutputStream/ObjectInputStream来使用
    writeObject(对象);序列化时使用
    
    对象的反序列化:将对象从存储设备中读取到内存中 生成一个对象
    readObject();对象反序列化时使用
    
    注意:
    	1.如果某个属性不参与序列化 则使用transient来修饰该属性
    	2.如果一个类中有引用类型 那么如果想让该类所创建的对象可以被序列化 那么必须保证属性的类型是可序列化的 是实现Serializable接口的
    	3.集合也可以被序列化 但是需要保证该集合中所有的元素都可以被序列化
    
  21. 获取类对象的方法有几种,并分别写出。

    1.使用该类所创建出的类的对象 通过getClass()来获取
    	Student stu = new Student();
    	Class c = stu.getClass();
    2.通过 类名.class 来获取一个类的 类对象
    	Class c = Student.class;
    3.通过 Class.forName("类的全类名/全限定名"); 类的全类名/全限定名:包名+类名
    	Class c = Class.forName("classes.Student");
    
  22. 什么是单例设计模式?写出不同的实现方式。

    单例模式(Singleton):是一种常见的设计模式,在Java应用中,单例对象必须保证一个JVM中,该对象只有一个实例存在。都要保证该类的构造方法是私有的。
    
    class Same{//饿汉式
    	public static final Same s = new Same();
    	//static m1();
    	//static m2();
    	//static m3();
    }
    单例的保证是通过类加载只进行一次来实现的
    优点:并发效率高
    缺点:资源浪费
    
    class Same2{
    	private static Same2 s;
    	public synchronized static Same2 getSame2(){
    		if(s==null){
    			s = new Same2();
    		}
    		return s;
    	}
    	//static m1();
    	//static m2();
    	//static m3();
    }
    单例的保证是通过加锁以及非空判断来实现的
    优点:资源占用率低
    缺点:并发效率低
    
    class Same3{
    	static class Inner{
    		static final Same3 s = new Same3();
    	}
    	public static Same3 getSame3(){
    		return Inner.s;
    	}
    }
    单例的保证是通过静态内部类的类加载来进行实现的
    优点:资源占用率低 并发效率高
    
  23. 包装类有几种。

    byte 		Byte
    short 		Short
    int 		Integer
    long 		Long
    float 		Float
    double	 	Double
    char 		Character
    boolean 	Boolean
    

Web

  1. Oracle中主键的自增策略是什么?如何创建?使用?

    序列 sequence:Oracle提供用于产生一系列唯一数字的数据库对象。
    	1.创建
    		create sequence seq_user start with 1 increment by 1 maxvalue 10 minvalue1;
    	注意: 创建序列 叫什么 从 1 开始 每次增加 1 (不写默认增加1)
    	
        其他约束:
    		maxvalue //最大值
    		minvalue //最小值
    		cycle/nocycle //默认不循环 从最小到最大之后是否回归
    		nocache/cache //值得缓存 默认20 (预先生成)
    	2.使用 sequence
    		序列名.nextval
    		insert into t_order values(序列名.nextval ,'123',4);
    		
    		序列名.currval // 获取当前序列的数值 前提序列必须先执行过一次
    		select 序列名.currval from dual;
    			注意:序列一旦被创建可以在任意表中使用,值一旦产生不能重复获取。
    3.删除 sequence
    		drop sequence 序列名;
    
  2. 什么是视图,并简述作用

        视图 view
        概念: 是一种虚表(相对而言,视图所依赖的表叫做基表)
        本质上视图不是一张表,只是单纯的逻辑定义,每次执行的时候都要重新执行SQL语句。
        create view 视图名 as (select语句) 视图本身没有任何效率上的提升
    
        1.使用各种不同的方式将基表的数据展现在用户面前,简化用户的数据查询和处理。
        2.屏蔽数据库的复杂性,用户不必了解数据库的复杂,简化查询语法。
        3.只授予用户使用视图的权限,简化了用户权限的定义,敏感数据的屏蔽。
        4.某些查询必须借助视图的帮助才能完成. 比如, 有些查询需要连接一个分组统计后的表和另一表。
    
  3. 什么是索引,并简述原理及作用

    概念:索引是一种供服务器在表中快速查找一个行的数据库结构,合理使用索引能够大大提高数据库的运行效率。
    	1.索引类似于字典目录,用于提高查询效率。
    	2.索引并不是越多越好。(索引会占用存储空间,增删改操作的同时数据库需要维护索引列,消耗时间、内存以及CPU资源)
    	3.表中的主键以及唯一列,Oracle会为其自动添加索引。
    
  4. 什么是事务?简述事务的特点ACID

    事务:保证业务操作完整性的一种数据库机制。
    	1 提交DML语句操作,撤销DML语句操作
    		commit: 将回滚段中的数据,提交到数据库的问件系统中进行存储。
    		rollback:将回滚段中的数据,撤销清空。
    	2 可以控制一组SQL语句,要不一起成功,要不一起失败,
    		从而保证业务操作(一个业务对应多个DML操作,转账)的完整性。
    		
    	1.原子性Atomic 	事务必须是原子工作单元(不可分割);
    					  对于其数据修改,要么全都执行,要么全都不执行。
    	2.一致性Consistent 操作前的数据,操作后的数据保持一致。
    	3.隔离性Insulation 保证多用户并发访问的数据安全性,
    					  并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
    	4.持久性Duration 事务操作的数据 持久化到数据库当中,对于系统的影响是永久性的。
    
  5. 什么是JDBC,简述作用?

    应用Java程序访问和操作数据库的底层代码,SUN公司提出的一组规范(接口)1.1 接口规范:多种数据库产品,Sun公司只是制定程序开发规则。
    		接口类型 : 屏蔽底层的代码实现差异 (访问不同的数据库)
    	1.2 实现在哪:驱动Jar(由数据库厂商提供)
    		JDBC = SUN公司提出的一组规范(接口) + 驱动Jar
    
  6. 使用JDBC技术完成数据库User表中所有数据的查询

  7. JDBC中Threadlocal的作用

    保证通过线程绑定的对象,一个线程中获得的是相同的对象,不同的线程中获得不同的对象。
    针对Service层和DAO层可以获取同一个Connection连接对象,从而进行手动的事务控制。
    
  8. JavaWeb中的跳转方式有什么?区别是?

    跳转方式		请求次数						数据的传递
    forward跳转	一次请求,地址栏路径不发生改变		使用request作用域传递数据
    redirect跳转	两次请求,地址栏路径发生改变		 一般不用于数据的传递
    
  9. Servlet中的三大作用域对象是什么?及各自的作用范围?

    request
    	一次请求有效
    	请求变了(地址栏,表单,超链接,重定向),request作用域就发生改变。
    session
    	一次会话有效
    	如果浏览器不发生改变,永远可以去获取到Session值。
    ServletContext
    	服务器启动创建,服务器关闭销毁
    	整个Web应用不发生改变,ServletContext不变
    
  10. session和cookie的共同点?不同点?及之间的联系?

    Cookie、Session都是用来解决用户的会话跟踪问题:通过记录用户相关的状态、操作信息 , 可以更好的完善
    应用,增加用户体验。让网站(web应用)系统能够识别用户,识别用户的操作。
    	1 cookie 技术: 客户端浏览器上的解决方案。
    	2 session技术: web服务器上的解决方案。
    
    什么是Cookie:是由服务器颁发给客户端浏览器的一小段字符串信息,
    	是以 name --- value形式进行保存在操作系统中。网站只识别自己发放的Cookie
    什么是Session:Session对象代表了一次会话,保持用户状态的核心重点。
    	tomcat会在服务器端创建只属于某一个client的Session,存储只属于这个client的数据。
    
    Session的底层是cookie实现。
    	Client第一次请求服务器会接受请求,
    		request.getSession(true),判断Client是否有session,没有则创建session,并分配唯一的sessionId(3216进制数)处理请求,把处理的结果和sessionId一起响应到Client,同时,把sessionId以cookie的形式存在client(键名:JSESSIIONID,值:sessionId)同时设置cookie的失效时间为负数,表示与浏览器绑定。
    
    	Client之后的多次请求
    		先从cookie中读取到cookie的sessionId,读到后sessionId和请求一起发送到服务器中,如果在服务器中能搜索到sessionId,则认为该请求曾经访问过。如果Cookie被禁用:JAVAEE采用"会话跟踪机制"response.encodeURL("/webapps_name/url-partten");
    
  11. filter和servlet在生命周期上的区别?

    1、Filter的创建
    	Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,
    	从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。
    	通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
    	Filter的销毁
    	Web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。
    	在destroy方法中,可以释放过滤器使用的资源。
    
    2.servlet创建
    	取决于Client的第一次请求或者web.xml中<load-on-startup>1</load-on-startup>的配置servlet的销毁
    	服务器关闭时,destroy方法的调用。
    
  12. jsp的9个隐含对象?

    1 request 2 response 3 session 4 application 5 (out)
    6 (config) 7 (exception) 8 page 9 pageContext
    
  13. JSP中如何获取client的请求数据,使用脚本的写法?不使用脚本的写法?

    脚本:
    	<%
    		String name = request.getParameter("name");//用request得到
    	%>
    
    EL:${param.name}
    
  14. 表单提交的2种方式?及区别?

    Get方式
    	get传递数据的方式:通过地址栏传递,明文传递数据,不安全,传递的数据量少。
    Post方式
    	post传递数据的方式:通过请求体传递数据,密文传递数据,安全,传递的数量大。
    
  15. HTML和JSP页面中乱码分别如何解决?

    html:<meta http-equiv="content-type" content="text/html;charset=utf-8">
    
    jsp:contentType="text/html;charset=utf-8"; //必须设置的 返回的页面格式设置
    相当于response.setContentType("text/html;charset=utf-8");
    
  16. 获取client请求数据出现的乱码如何解决?

    Servlet
    	请求乱码处理:
    		1. post请求方式 request.setCharacterEncoding(“utf-8);
    		2. get请求方式 server.xml配置文件中处理
    			<Connector port="9999" protocol="HTTP/1.1"
    				connectionTimeout="20000" redirectPort="8443"
    				URIEncoding="utf-8"/>
    	响应乱码处理:
    		服务器返回给客户端的数据:响应乱码处理
    		response.setContentType("text/html;charset=utf-8");
    
  17. servlet运行是单例 or 多例?需要注意什么?

    单例
    	Servlet是单例的,如果在Servlet中定义了实例变量(实例变量存储在堆空间),
    	那么就会存在多用户并发访问时线程安全(保证数据一致):
    
    	a、对临界资源加Synchronized的关键字(加锁,不建议,效率低)
    	b、尽量避免在Servlet中定义成员变量。
    
  18. 请写出Struts2核心过滤器的配置片段 ,核心过滤器所在包为org.apache.strtus2.dispatcher.ng.filter

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.
    		StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  19. 请写出标签type属性的四个值,分别代表什么跳转方式?

    forward跳转
    	dispatcher 		action跳jsp
    	chian 			action跳action
    
    redirect跳转
    	redirect 		action跳jsp
    	redirectAction 	action跳action
    
  20. 假设LoginAction成功返回“success”后会重定向到ShowAllPersonAction,
    ShowAllPersonAction成功后forward到index.jsp,请补全下面 struts.xml
    中的片段配置:

    <package name="p1" extends=__struts-default_ namespace="/p1">
    	<action name="LoginAction" class=....>
    		<result name="success" type=___redirectAction__>
    			<param name=__namespace__>__p2__</param>
    			<param name=___actionName__>__ShowAllPersonAction__</param>
    		</result>
    	</action>
    </package>
    <package name="p2" extends=___struts-default___ namespace="/p2">
    	<action name="ShowAllPersonAction" class=...>
    		<result name="success">/index.jsp</result>
    	</action>
    </package>
    
  21. 简述Action程序成员变量的作用(四个方面)?

    1. 接收前台提交数据
    2. 替换request作用域
    3. 读取xml中的配置信息
    4. 设置xml中的数据数值
    
  22. 已知开发有一个Action类如下:
    class MyAction extends ActionSupport{
    public String ma(){ return “ma”; }
    public String mb(){ return “mb”; }
    }
    问题:请按要求给出下面需求的配置文件(只写action标签即可)

    1. 采用DMI方式配置,ma方法成功后forward跳转到a.jsp
    2. mb方法redirect跳转到b.jsp
    3. 采用DMI方式配置 ma方法,redirect跳转到mb方法
  23. 简述自定义拦截器的开发步骤(文字说明)

    1) 实现拦截器 : implements Interceptor接口 // 实现 intercept方法
    	extends MethodFilterInterceptor // 实现 doIntercept方法 方法拦截器
    2) 编写 struts.xml
    	1. 声明拦截器的配置
    	2. 定义拦截器栈
    		注意: 要手动引入系统默认拦截器栈 defaultStack
    	3. 使用拦截器配置
    		第一种方式: 在指定action配置标签里引入拦截器栈
    		第二种方式: 通过 <default-interceptor-ref> 定义默认引用的拦截器/拦截器栈
    
  24. mybatis中取 $和# 取值方式区别是什么?(自己查)

    $ 取值 值 直接拼接到sql语句中 值没有任何修饰 存在sql注入风险
    # 取值 值 以问号形式站位 为?号赋值 "值" 不存在sql注入风险
    
    sql注入: 客户端在提交参数时 出现恶意工具的字符串 "-- or 1=1", 服务器将参数直接拼接到sql语句中,导致sql语句执行时产生查询所有数据 导致不安全情况
    
    	如何避免sql注入:
    		项目中持久层技术是什么?
    			jdbc: 建议开发时多用pstm 少用statement
    			mybatis: 多用#号取值 少用$取值
    
  25. 请给出如下方法对应的mybatis实现片段
    public void insertStudent(Student stu);
    public List queryAll();
    提示:student类有属性(id,name,age),其中id属相需要数据库生成生成主键的序列名student_seq

  26. 当实体类中的属性名和查询结果集中的字段名不一样时 ,如何处理?

    使用resultMap 结果 映射
    
  27. 写出resultMap中封装关系属性的两个标签以及其各属性含义:关系属性是java对象用哪个标签,关系属性是list集合用哪个标签?

    一对一 <association property="维护关系属性名" javaType="维护关系属性类型" >
    一对多 <collection property="关系属性名" javaType="关系属性集合类型" ofType="集合中泛型类型" >
    
  28. 简单描述数据何时进入缓存?缓存中的数据何时清空?

    查询的sqlSession在关闭的时候才会将数据放入缓存中。
    
    脏数据 --- 缓存数据和DB中不一致(DML操作)
    执行Commit操作的时候会自动清空缓存,查询必须重新执行SQL语句。
    
  29. js 中如何创建一个对象(JSON格式) 如何创建一个数组

    var student = {"id":"21"} ; //对象
    var strs = ["小黑",1,'小明',1.5,true];
    
  30. js中"" 和 "=" 区别?

    == 单纯比较数值
    === 比较数据数值以及类型
    
  31. js中DOM和BOM如何理解

    DOM:document Object Model 文档对象模型
    	html网页在浏览器内存中生成一个文档树 js中一个内置对象 document 父节点可以对子节点增删改查
    
    BOM:Browser Object Model 浏览器对象模型
    	浏览器窗口 window.document.getElementById("") alert
    
  32. js中事件模型三要素,列举几个常见的事件

    事件源: 发生动作的事物 通常指html标签
    事件: 发生的动作 单击 双击 鼠标移入
    监听器(处理程序): 事件函数
    
    事件省略....
    
  33. Jquery中 $(function(){}) 代表含义是什么?

    $(function(){}) =====> window.onload 页面加载完成之后执行
    
  34. Jquery中选择器有哪些?

    id # class . 标签选择 后代选择器 兄弟选择器 属性过滤选择器 。。。。。。
    
  35. DOM对象如何转为jQuery对象

    $("#btn").click(function(){
    	this;//DOM对象 $(this) jQuery对象
    })
    
    $(dom对象)
    
  36. jquery中append 方法与appendTo区别?

    a.append(b)		 b往a内部追加
    a.appendTo(b)	 a往b内部追加
    
  37. jquery中 html() text() val() 方法?

    html() 	获取 设置 解析html代码 <a>小黑</a> <div>小黑</div>
    text() 	不能解析html代码 <div><a>小黑</a></div>
    		既可以获取标签标签中的文本内容 设置标签的文本内容
    val() 	用来获取标签对象value属性值 同时也可以设置标签的value属性值
    
  38. 如何通过jQuery修改一个标签对象的样式?

    attr() prop() 获取|修改属性的值
    css() 修改样式方式
    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值