Java 题目
2018.8.1
- 通过HttpServletRequest.getParameter获取的参数由客户端浏览器和Web容器配置共同决定编码
- 方法的重写两同两小一大原则:
- 方法名相同,参数类型相同
- 子类返回类型小于等于父类方法返回类型
- 子类抛出异常小于等于父类方法抛出异常
- 子类访问权限大于等于父类方法访问权限
2018.8.2
ArrayList 的构造函数总共有三个:
- ArrayList() 构造一个初始容量为10的空列表
- ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排
- ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。
DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。DBMS对数据库的保护通过4个方面来实现:
- 数据库的恢复
- 数据库的并发控制
- 数据库的完整性控制
- 数据库的安全性控制
DBMS中实现事务持久性的子系统是恢复管理子系统。可以这么理解:要想事务具有持久性,就得在事务出错时及时恢复
包装类的 “==” 运算在不遇到算术运算的情况下不会自动拆箱
包装类的 equals() 方法不处理数据转型
Servlet的生命周期一般可以用三个方法来表示:
- init():仅执行一次,负责在装载Servlet时初始化Servlet对象
- service() :核心方法,一般HttpServlet中会有get,post两种处理方式。在调用doGet和doPost方法时会构造servletRequest和servletResponse请求和响应对象作为参数。
- destory():在停止并且卸载Servlet时执行,负责释放资源
初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。所以选ACD。B是在调用service方法时才构造的
2018.8.3
1
2
3
4
5
6
7byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2); /*语句1*/
b6=b4+b5; /*语句2*/
b8=(b1+b4); /*语句3*/
b7=(b2+b5); /*语句4*/
System.out.println(b3+b6);————知识点————
Java表达式转型规则由低到高转换:
1、所有的byte,short,char型的值将被提升为int型;
2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
————–解析————–
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。
2018.8.4
接口 只能用 public 和 abstract 修饰。only public & abstract are permitted 。
内部接口 only public, protected, private, abstract & static are permitted
full GC触发的条件
除直接调用System.gc外,触发Full GC执行的情况有如下四种。- 旧生代空间不足
旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:
java.lang.OutOfMemoryError: Java heap space
为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。 - Permanet Generation空间满
PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,在未配置为采用CMS GC的情况下会执行Full GC。如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息:
java.lang.OutOfMemoryError: PermGen space
为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。 - CMS GC时出现promotion failed和concurrent mode failure
对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当这两种状况出现时可能会触发Full GC。
promotionfailed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。
应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。 - 统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间
这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。
例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次Minor GC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行Full GC。
当新生代采用PSGC时,方式稍有不同,PS GC是在Minor GC后也会检查,例如上面的例子中第一次Minor GC后,PS GC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。
除了以上4种状况外,对于使用RMI来进行RPC或管理的Sun JDK应用而言,默认情况下会一小时执行一次Full GC。可通过在启动时通过- java-Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC执行的间隔时间或通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。
- 旧生代空间不足

都是Throwable的子类:
1.Exception(异常):是程序本身可以处理的异常。
2.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。
3.检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。
2018.8.6
几种数组复制的方法:(1)for循环逐一复制;(2)System.arraycopy ;(3)Array.copyOf;(4)使用clone方法
效率对比:System.arraycopy > Array.copyOf > 使用 clone 方法 > for 循环逐一复制
- System.arraycopy 方法调用的是本地native方法,效率最高
- Array.copyOf 源码中调用的是 System.arraycopy 方法,自然效率低于前者
2018.8.7
finally 语句的有关说法
- 不管 catch 是否异常,finally 语句块都是要被执行的
- 在 try 语句块或 catch 语句块中执行到 System.exit(0) 直接退出程序
- finally 块中的 return 语句会覆盖 try 块中的 return 返回
- finally 语句块在 catch 语句块的 return 语句之前执行
下面程序的运行结果
1
2
3
4
5
6
7
8
9
10
11
12
13public static void main(String args[]) {
Thread t=new Thread(){
public void run(){
dianping();
}
};
t.run();
System.out.print("dazhong");
}
static void dianping(){
System.out.print("dianping");
}运行结果为:dianpingdazhong
因为现在只是创建了线程并没有调用 start( ) ,只是声明了线程,所以说是按照顺序执行
2018.8.10
- 关于类的一些叙述
- 类不可以多继承但是可以多实现
- 抽象类和接口都不可以定义成员变量,但是他们可以定义静态成员变量,接口的静态成员变量需要用 public static final 进行修饰
- 抽象类和接口都不能被实例化
- Java 异常处理的叙述
- final 可以用来声明属性和方法,分别表示属性的不可变和方法的不可重写
- throws 是用来声明一个成员方法可能抛出的各种非运行异常情况
- throw 是用来明确地抛出一个异常情况
2018.8.13
JSP 内置对象及方法
- request对象: 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
- response对象:response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
- session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
- out对象:out对象是JspWriter类的实例,是向客户端输出内容常用的对象
- page对象:page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
- application对象:application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
- exception对象:exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
- pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
- config对象:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
关于JDK中的一些工具
- javac.exe 是编译 .java 文件
- java.exe 是执行编译好的 .class 文件
- javadoc.exe 是生成 java 说明文档
- jdb.exe 是 java 调试器
- javaprof.exe 是剖析工具
关于计算机的编码
2018.8.14
Java 提供的事件处理模型是一种人机交互模型,它有三个基本要素:
- 事件源:即事件发生的场所,就是指各个组件,如按钮等,点击按钮就是组件上发生的一个事件;
- 事件:事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;
- 事件监听器:负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件
会话跟踪技术描述:
- Cookie 是 Web 服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端
- 关闭浏览器意味着临时会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期
- 在禁用cookie时可以使用URL重写技术跟踪会话
- 隐藏域在页面中对于用户(浏览器)是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。
2018.8.19
- 方法重载和重写的描述
- 方法重载:1、必须是同一个类;2、方法名一样;3、参数类型不一样或参数数量不一样
- 方法重写:1、方法名相同,参数类型相同;2、子类返回类型小于等于父类方法返回类型;3、子类抛出异常小于等于父类方法抛出的异常;4、子类访问权限大于等于父类方法访问权限
2018.8.31
- 对 final 关键字的说法
- final 是 java 中的修饰符,可以修饰类、方法和属性,但不能修饰接口和抽象类,因为抽象类和接口一般都是要被继承的,被final修饰后就不能被继承了
- 被 final 修饰的方法不能被重写,但是可以被重载
- final 修饰的类不能被继承
- final 修饰的变量就是一个常量了,因此不能修改常量的值
- java 中的package
- 定义在一个package中的类可以不经过import而直接相互引用
- 为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。Java中的包一般均包含相关的类,java是跨平台的,所以java中的包和操作系统没有任何关系,java的包是用来组织文件的一种虚拟文件系统