CoreJava和Web知识点复习
CoreJava
-
Java中数据类型以及数据相加自动类型提升规则
byte 1Byte -128到127 short 2B -32768到32767 int 4B -2^31到2^31-1 long 8B -2^63到2^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 类型。
-
java数组能否自动扩容?
Java数组对象的大小是固定不变的,数组对象是不可扩容的。数组先开辟内存空间,而后再使用索引进行内 容的设置,数组长度直接固定。 利用数组复制方法可以变通的实现数组扩容,System.arraycopy()可以复制数组。Arrays.copyOf()可 以简便的创建数组副本。创建数组副本的同时将数组长度增加就变通的实现了数组的扩容。
-
方法重载和方法覆盖的区别
重载:方法名相同参数表不同 返回值无要求 覆盖:方法名,返回值 ,参数表 相同 修饰符 (系统更宽) 异常(父类异常要小)
-
this和super的区别
This 引用, 代表当前对象(相当于“我”),this. 用于在构造方法或普通方法中,调用当前对象的属性 或方法, this() 只能用在构造方法中,用于 调用该类中的其它构造方法。 Super 引用,代表 直接父类对象。Super.用在子类的构造方法或普通方法中,调用父类的属性或方法。 Super()只能用在 子类的构造方法中, 用于 调用父类的构造方法
-
abstract final static关键字的使用
static a) 属性:类属性 被所有对象共享(与对象无关),只初始化1次 b) 方法: 被static修饰的方法 称为类方法(静态方法) 静态方法的特点: 静态方法内部可以用什么: 1)静态方法内部只允许使用静态成员 2)静态方法内部 不可以使用this与super关键字 静态方法关于重载和覆盖的语法: 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 = 10; final 类型b b = 20; 类型c c = a+b; 修饰方法: final修饰的方法 可以被重载且与final无关可以被继承 但不可以被覆盖 修饰类: final修饰的类 被称为最终类 也叫做断子绝孙类 abstract a) 方法:被abstract修饰的方法,称为 抽象方法。 注意:1) 抽象方法 没有方法体(连{}都没有 直接;结束); 2) 抽象方法 必须定义在 抽象类中。 b) 类:被abstract修饰的类,称为 抽象类。 注意:1)抽象类 不能 实例化; 可以声明引用; 2)子类 继承 抽象类时, 必须 实现/覆盖 抽象类中的所有抽象方法(除非该子类还是抽的); 3)抽象类中 既可以有抽象方法 也可以有 非抽象方法。 4)抽象类 的好处,强制 使用多态。
-
什么是类加载?什么情况会触发类加载
a)类加载:JVM在第一次使用某个类时 会通过CLASSPATH所配的路径 将该类所对应的.class文件中类的相关 信息(属性/方法/静态成员/父类信息...)读取到JVM的内存中,并保存起来。 b)类加载的过程: 加载----链接(验证+准备+解析)-----初始化----使用----卸载 加载:将.class中的信息读取到内存 验证:验证该.class是否是合法的.class文件 验证相应的访问权限修饰符 准备:给类变量分配空间 给类变量赋默认值 重要 解析:引用替换 初始化:给类变量进行初始化 执行初始化代码或执行静态初始化代码块中的代码 重要 使用:在内存中使用类信息 卸载:将保存的类信息回收 c)类加载(进行到初始化阶段的)触发的时机: 重点 1)第一次创建对象时 2)第一次通过类名.静态属性/方法()的形式 调用静态成员时 3)子类类加载时 其父类如果没有被加载 则也会进行类加载 4)备注:一般 称类加载的时机 就是进行到初始化阶段性的几种情况 因为类加载触发到初始化阶段之前的 情况过于复杂 所以不讨论 类加载做的两件事:给类变量进行空间分配赋默认值 给类变量进行初始化 类加载时机: 1.当第一次创建本类对象时 2.第一次访问静态成员时(静态属性+静态方法) 3.当子类进行类加载时(当子类对象第一次被创建或子类静态成员第一次被访问) 父类会先进行类加载(也就 只执行一次) 4.当第一次使用Class.forName()方法来获取一个类的类对象时
-
接口与抽象类的异同
相同点: a)在编译后都可以生成.class文件 b)可以被声明 但不可以实例化对象 不同点: a)接口没有构造方法 b)接口中所有的方法都是公开抽象方法 必须被public 与 abstract修饰 接口中方法默认的修饰符就 是public 与 abstract c)接口中所有的属性都是空开静态常量 必须被public static final修饰 接口中属性默认的修饰符 就是public static final
-
String、StringBuilder和StringBuilder的区别
String是不可变的字符串 当String的内容发生变化时 会先创建原内容的副本 再进行改变并创建新对象 StringBuffer或StringBuilder 是可变字符串 内容发生改变时在原对象里修改 并不创建新对象 StringBuffer JDK1.0出现 线程安全 效率低 StringBuilder JDK1.5出现 线程不安全 效率高
-
== 与 equals的区别
a) == 两端为基本数据类型比较数值 两端为引用数据类型比较内存地址 b) equals 比较对象内容
-
简述泛型集合的作用
统一集合中所存储的元素类型ArrayList<泛型> list = new ArrayList<泛型>(); 泛型填写了什么类型,那么这个集合就只能存放什么类型,如果想使用基本数据类型,则必须使用对应的包装类.
-
List Set Map集合的各自特点
-
如何定义自定义异常类
开发时项目中出现了异常情况 但这个异常情况在java中并不算 所以java并没有提供这样的异常类型 这 时就需要我们自定义异常 1.自定义运行时异常 语法: class 自定义异常名 extends RuntimeException{ public 自定义异常名(){ super(); } public 自定义异常名(String s){ super(s); } } 2.自定义非运行时异常 语法: class 自定义异常名 extends Exception{ public 自定义异常名(){ super(); } public 自定义异常名(String s){ super(s); } }
-
简述final、finalize、finally的区别
final:修饰符 可以修饰 类 变量 方法 类:断子绝孙 变量:被称为常量 只可被赋值一次 基本数据类型值不可变 引用类型地址不可变 常量必须在创建对象成功之前在初始化阶段或构造方法中被赋值 常量作为属性时没有默认值 方法:不可被覆盖 可以被重载 finally:异常处理的关键字 后面的代码块是在catch或try执行完毕后 必须执行的 finalize:Object中的方法 当一个垃圾对象被回收时 会被调用 该方法内部没有任何实现 只是标志该对象被 回收
-
throw 和 throws 的区别
throw 主动抛出异常 语法: throw new 异常类名(参数); 参数就是对异常的说明 在编译时 通过语法主动产生一个异常 这个异常以下的代码可能不会被执行 这个主动抛出异常的语句 会在运行时生成异常 终止程序 throws 消极异常处理 修饰符 返回值类型 方法名(参数)throws 异常名1,异常名2,异常名3....{ //会出现异常的代码 } 注意: 1.消极的处理 并不真正的解决异常 而是将异常抛给调用者 2.调用者所抛出的异常 必须等于或大于其调用的方法 3.被调用的方法 抛出的是运行时异常 则其调用者可以不处理
-
创建线程的几种方式
开启线程的动作需要依附于主线程 所以创建线程开启线程的代码写在主函数中 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();
-
什么是线程安全
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
-
请写出线程的几种状态
1.初始状态 New:当创建了一个线程时 会进入该状态 2.就绪状态 Ready:当初始状态的线程调用了start()方法时会进入该状态 3.运行状态 Running:当就绪状态的线程获得时间片时则进入该状态 如果该状态下时间片结束但线程没有执行 完毕 则返回到 就绪状态 4.终止状态 Terminated:当线程的run方法中的代码 或 主线程main方法的代码执行完毕时 该线程会进入终 止状态 5.有限期等待:Timed Waiting 放弃当前时间片 进入等待状态 当被设置等待时间到时 则回到 就绪状态 重 新可以获得时间片 6.无限期等待:Waiting 放弃当前时间片 进入等待状态 等到加队的线程执行完毕时 才会进入就绪状态 7.阻塞状态:Blocked 当一个线程执行同步代码块 或 同步方法时 如果没有拿到该临界资源互斥锁标记 则会进 入到阻塞状态
-
sleep()和wait()的区别
sleep(long类型的毫秒数); 当一个线程在运行时执行到了Thread.sleep(long类型的毫秒数);时 当前这个 线程会进入有限期等待状态 等待时间为参数的毫秒 在等待期间 线程不会获得时间片 sleep会放弃时间片 而不放弃互斥锁标记 join(); 我们可以在一个线程1中 使用另一个线程2对象来调用join方法 线程则会加入到线程1中 直到线程2 执行完毕 线程1才会结束等待状态 wait();//当临界资源调用wait()方法时 当前线程 放弃时间片 放弃互斥锁标记 进入等待区(进入阻塞状态)
-
IO流的分类
1.按照方向来分: a)输入流:方向为向内存中输入 b)输出流:方向从内存中向外输出 2.按照传输的数据来分: a)字节流:传输时 以字节为基本单位 能传输所有文件 b)字符流:传输时 以字符为基本单位 只能传输文本文件---notepad++能开不是乱码都是文本文件 3.按照功能来分: a)节点流:提供了最基本的输入输出功能 基础枪械 b)过滤流:为节点流提供更多的功能拓展 枪械的配件
-
简述什么是对象序列化,以及序列化的要求。
将对象放置在流中传输 被称为对象的序列化 如果一个对象需要被序列化 则其对应的类需要实现Serializable接口 这个接口中没有方法 就是一个标识 对象序列化通常要配合ObjectOutputStream/ObjectInputStream来使用 writeObject(对象);序列化时使用 对象的反序列化:将对象从存储设备中读取到内存中 生成一个对象 readObject();对象反序列化时使用 注意: 1.如果某个属性不参与序列化 则使用transient来修饰该属性 2.如果一个类中有引用类型 那么如果想让该类所创建的对象可以被序列化 那么必须保证属性的类型是可序列化的 是实现Serializable接口的 3.集合也可以被序列化 但是需要保证该集合中所有的元素都可以被序列化
-
获取类对象的方法有几种,并分别写出。
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");
-
什么是单例设计模式?写出不同的实现方式。
单例模式(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; } } 单例的保证是通过静态内部类的类加载来进行实现的 优点:资源占用率低 并发效率高
-
包装类有几种。
byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
Web
-
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 序列名;
-
什么是视图,并简述作用
视图 view 概念: 是一种虚表(相对而言,视图所依赖的表叫做基表) 本质上视图不是一张表,只是单纯的逻辑定义,每次执行的时候都要重新执行SQL语句。 create view 视图名 as (select语句) 视图本身没有任何效率上的提升 1.使用各种不同的方式将基表的数据展现在用户面前,简化用户的数据查询和处理。 2.屏蔽数据库的复杂性,用户不必了解数据库的复杂,简化查询语法。 3.只授予用户使用视图的权限,简化了用户权限的定义,敏感数据的屏蔽。 4.某些查询必须借助视图的帮助才能完成. 比如, 有些查询需要连接一个分组统计后的表和另一表。
-
什么是索引,并简述原理及作用
概念:索引是一种供服务器在表中快速查找一个行的数据库结构,合理使用索引能够大大提高数据库的运行效率。 1.索引类似于字典目录,用于提高查询效率。 2.索引并不是越多越好。(索引会占用存储空间,增删改操作的同时数据库需要维护索引列,消耗时间、内存以及CPU资源) 3.表中的主键以及唯一列,Oracle会为其自动添加索引。
-
什么是事务?简述事务的特点ACID
事务:保证业务操作完整性的一种数据库机制。 1 提交DML语句操作,撤销DML语句操作 commit: 将回滚段中的数据,提交到数据库的问件系统中进行存储。 rollback:将回滚段中的数据,撤销清空。 2 可以控制一组SQL语句,要不一起成功,要不一起失败, 从而保证业务操作(一个业务对应多个DML操作,转账)的完整性。 1.原子性Atomic 事务必须是原子工作单元(不可分割); 对于其数据修改,要么全都执行,要么全都不执行。 2.一致性Consistent 操作前的数据,操作后的数据保持一致。 3.隔离性Insulation 保证多用户并发访问的数据安全性, 并发事务所作的修改必须与任何其它并发事务所作的修改隔离。 4.持久性Duration 事务操作的数据 持久化到数据库当中,对于系统的影响是永久性的。
-
什么是JDBC,简述作用?
应用Java程序访问和操作数据库的底层代码,SUN公司提出的一组规范(接口) 。 1.1 接口规范:多种数据库产品,Sun公司只是制定程序开发规则。 接口类型 : 屏蔽底层的代码实现差异 (访问不同的数据库) 1.2 实现在哪:驱动Jar(由数据库厂商提供) JDBC = SUN公司提出的一组规范(接口) + 驱动Jar
-
使用JDBC技术完成数据库User表中所有数据的查询
-
JDBC中Threadlocal的作用
保证通过线程绑定的对象,一个线程中获得的是相同的对象,不同的线程中获得不同的对象。 针对Service层和DAO层可以获取同一个Connection连接对象,从而进行手动的事务控制。
-
JavaWeb中的跳转方式有什么?区别是?
跳转方式 请求次数 数据的传递 forward跳转 一次请求,地址栏路径不发生改变 使用request作用域传递数据 redirect跳转 两次请求,地址栏路径发生改变 一般不用于数据的传递
-
Servlet中的三大作用域对象是什么?及各自的作用范围?
request 一次请求有效 请求变了(地址栏,表单,超链接,重定向),request作用域就发生改变。 session 一次会话有效 如果浏览器不发生改变,永远可以去获取到Session值。 ServletContext 服务器启动创建,服务器关闭销毁 整个Web应用不发生改变,ServletContext不变
-
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(32位16进制数)处理请求,把处理的结果和sessionId一起响应到Client,同时,把sessionId以cookie的形式存在client(键名:JSESSIIONID,值:sessionId)同时设置cookie的失效时间为负数,表示与浏览器绑定。 Client之后的多次请求 先从cookie中读取到cookie的sessionId,读到后sessionId和请求一起发送到服务器中,如果在服务器中能搜索到sessionId,则认为该请求曾经访问过。如果Cookie被禁用:JAVAEE采用"会话跟踪机制"response.encodeURL("/webapps_name/url-partten");
-
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方法的调用。
-
jsp的9个隐含对象?
1 request 2 response 3 session 4 application 5 (out) 6 (config) 7 (exception) 8 page 9 pageContext
-
JSP中如何获取client的请求数据,使用脚本的写法?不使用脚本的写法?
脚本: <% String name = request.getParameter("name");//用request得到 %> EL:${param.name}
-
表单提交的2种方式?及区别?
Get方式 get传递数据的方式:通过地址栏传递,明文传递数据,不安全,传递的数据量少。 Post方式 post传递数据的方式:通过请求体传递数据,密文传递数据,安全,传递的数量大。
-
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");
-
获取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");
-
servlet运行是单例 or 多例?需要注意什么?
单例 Servlet是单例的,如果在Servlet中定义了实例变量(实例变量存储在堆空间), 那么就会存在多用户并发访问时线程安全(保证数据一致): a、对临界资源加Synchronized的关键字(加锁,不建议,效率低) b、尽量避免在Servlet中定义成员变量。
-
请写出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>
-
请写出标签type属性的四个值,分别代表什么跳转方式?
forward跳转 dispatcher action跳jsp chian action跳action redirect跳转 redirect action跳jsp redirectAction action跳action
-
假设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>
-
简述Action程序成员变量的作用(四个方面)?
1. 接收前台提交数据 2. 替换request作用域 3. 读取xml中的配置信息 4. 设置xml中的数据数值
-
已知开发有一个Action类如下:
class MyAction extends ActionSupport{
public String ma(){ return “ma”; }
public String mb(){ return “mb”; }
}
问题:请按要求给出下面需求的配置文件(只写action标签即可)- 采用DMI方式配置,ma方法成功后forward跳转到a.jsp
- mb方法redirect跳转到b.jsp
- 采用DMI方式配置 ma方法,redirect跳转到mb方法
-
简述自定义拦截器的开发步骤(文字说明)
1) 实现拦截器 : implements Interceptor接口 // 实现 intercept方法 extends MethodFilterInterceptor // 实现 doIntercept方法 方法拦截器 2) 编写 struts.xml 1. 声明拦截器的配置 2. 定义拦截器栈 注意: 要手动引入系统默认拦截器栈 defaultStack 3. 使用拦截器配置 第一种方式: 在指定action配置标签里引入拦截器栈 第二种方式: 通过 <default-interceptor-ref> 定义默认引用的拦截器/拦截器栈
-
mybatis中取 $和# 取值方式区别是什么?(自己查)
$ 取值 值 直接拼接到sql语句中 值没有任何修饰 存在sql注入风险 # 取值 值 以问号形式站位 为?号赋值 "值" 不存在sql注入风险 sql注入: 客户端在提交参数时 出现恶意工具的字符串 "-- or 1=1", 服务器将参数直接拼接到sql语句中,导致sql语句执行时产生查询所有数据 导致不安全情况 如何避免sql注入: 项目中持久层技术是什么? jdbc: 建议开发时多用pstm 少用statement mybatis: 多用#号取值 少用$取值
-
请给出如下方法对应的mybatis实现片段
public void insertStudent(Student stu);
public List queryAll();
提示:student类有属性(id,name,age),其中id属相需要数据库生成生成主键的序列名student_seq -
当实体类中的属性名和查询结果集中的字段名不一样时 ,如何处理?
使用resultMap 结果 映射
-
写出resultMap中封装关系属性的两个标签以及其各属性含义:关系属性是java对象用哪个标签,关系属性是list集合用哪个标签?
一对一 <association property="维护关系属性名" javaType="维护关系属性类型" > 一对多 <collection property="关系属性名" javaType="关系属性集合类型" ofType="集合中泛型类型" >
-
简单描述数据何时进入缓存?缓存中的数据何时清空?
查询的sqlSession在关闭的时候才会将数据放入缓存中。 脏数据 --- 缓存数据和DB中不一致(DML操作) 执行Commit操作的时候会自动清空缓存,查询必须重新执行SQL语句。
-
js 中如何创建一个对象(JSON格式) 如何创建一个数组
var student = {"id":"21"} ; //对象 var strs = ["小黑",1,'小明',1.5,true];
-
js中"" 和 "=" 区别?
== 单纯比较数值 === 比较数据数值以及类型
-
js中DOM和BOM如何理解
DOM:document Object Model 文档对象模型 html网页在浏览器内存中生成一个文档树 js中一个内置对象 document 父节点可以对子节点增删改查 BOM:Browser Object Model 浏览器对象模型 浏览器窗口 window.document.getElementById("") alert
-
js中事件模型三要素,列举几个常见的事件
事件源: 发生动作的事物 通常指html标签 事件: 发生的动作 单击 双击 鼠标移入 监听器(处理程序): 事件函数 事件省略....
-
Jquery中 $(function(){}) 代表含义是什么?
$(function(){}) =====> window.onload 页面加载完成之后执行
-
Jquery中选择器有哪些?
id # class . 标签选择 后代选择器 兄弟选择器 属性过滤选择器 。。。。。。
-
DOM对象如何转为jQuery对象
$("#btn").click(function(){ this;//DOM对象 $(this) jQuery对象 }) $(dom对象)
-
jquery中append 方法与appendTo区别?
a.append(b) b往a内部追加 a.appendTo(b) a往b内部追加
-
jquery中 html() text() val() 方法?
html() 获取 设置 解析html代码 <a>小黑</a> <div>小黑</div> text() 不能解析html代码 <div><a>小黑</a></div> 既可以获取标签标签中的文本内容 设置标签的文本内容 val() 用来获取标签对象value属性值 同时也可以设置标签的value属性值
-
如何通过jQuery修改一个标签对象的样式?
attr() prop() 获取|修改属性的值 css() 修改样式方式