1.collection接口
2.在构造方法中调用方法A,若方法A被子类重写,则会先调用子类的方法A。举例如下题:
此时会输出null,调用顺序为:子类初始化,但是子类实现了Base,会先执行Base的构造方法,构造方法调用callName,callName被子类实现,先调用子类callName,子类callName中的变量baseName还没有被初始化(未赋值),故输出null。
3.java体系结构包含:java编程语言、java类文件格式、java API、JVM
4.匿名内部类不可以定义构造器:构造器需要与类名一致,匿名内部类没有类名,则没有构造器。
5.try中包含有return语句后,那么finally在return之前执行。
6.引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用JVM来实现。
7.ThreadLocal主要的作用是Thread的副本,限制数据共享,保证线程安全。其没有继承Thread和Runable类。
8.获取cookie的方式包括如下几种:getHeader(),getCookies()
9.static静态方法的补充:静态方法只在类加载时进入一次。
10.java中不允许多继承,java中解决hash冲突的一般有:开放定址法、链地址法。
11.Web容器会将http请求转换为HttpServletRequest对象
12.存在子类继承父类A,子类默认会调用父类的无参构造方法,也可以通过super调用父类的其他构造方法
13.LinkedBlockingQueue、ConcurrentQueue、PriorityQueue;前两个都不允许存储null值,都符合的FIFO(先进先出)原则,且都是安全队列。PriorityQueue是不安全的队列,且不允许存储null值,不遵循先进先出原则。
14.详细讲述一下servlet请求的过程
(1)web客户端想Servlet容器发起请求
(2)Servlet容器处理web客户端请求,创建一个HttpServletRequest对象,封装请求信息
(3)Servlet容器创建HttpServletResponse对象
(4)Servlet容器调用service方法,根据方法的类型来判断调用doget还是dopost,将HttpServletRequest和HttpServletResponse
(5)HttpServlet调用HttpServletRequest的相关方法,获取到HTTP请求信息
(6)HttpServlet调用HttpServletResponse的相关方法,生成响应数据
(7)Servlet容器将HttpServlet生成的响应数据发送给web客户端
15.题目讲解String
public static void main(String[] args) {
String a = new String(“myString”);
String b = “myString”;
String c = “my” + “String”;
String d = c;
System.out.print(a == b); //false
System.out.print(a == c); //false
System.out.print(b == c); //true
System.out.print(b == d); //true
}
原因在于:通过new出来的string对象分部在堆中,而b、c、d是常量,机制包含常量优化机制,对于c和d会优先去找常量池中是否存在对应数据,由于b已经存在于常量池,故c、d会指引到b的地址。还需要注意的是假设存在,String e = “helll”+a,则e存在堆中。
16.题目讲解<? extends ?>。
这里附上改题目下的讲解内容,因为篇幅的原因,自己就不多加总结了,只对上述的F选项进行讲解,List< object>表示的一个点,按照道理说应该是对的,仔细看F的描述是any list reference 所以这里的list表示的应该也是点,故点与点之间不可以相互赋值。
17.Math.ceil向上取整,Math.floor向下取整;传入参数为-0.5,前者为-0,后者为-1。
18.@SuppressWarnings(“deprecation”)的功能:屏蔽不赞同使用的类和方法的警告
19.ResultSet的起始下标地址为1
20.线程中的各个方法作用:start启动,run执行体,join等待线程结束,stop停止线程。
21.题目讲解静态块和静态域:
public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}
上述代码会输出:构造块 构造块 静态块 构造块。原因在于一个类初始化的顺序是:静态域》静态块》构造块。根据上述,当类B初始化时,会先声明所有静态,所以都附上了默认值,当执行t1的初始化,此时会输出“构造块”,没有执行静态方法原因在于JVM这是第二次执行到静态代码了,所以跳过了静态代码的执行,输出两个“构造块”。接着到main方法中的对象实例化,输出静态代码块“静态块”然后到“构造块”。
22.HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知
23.Mock对象通过反射数破坏了Java哪个一个特性,破坏了封装(原因在于mock是一个对象)
24.线程安全的有HashTable,SynchronizedMap,ConcurrentHashMap
25.volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
26.TCP交互图:其中read()也相当于received()
27.String以及Stringbuffer的类型都为final,区别在于前者不可以被修改,后者可以被修改。
28.文件的读取:文本文件或者是二进制文件读取到最后会反馈出EOFException或者有指定的方法返回值数值,例如read()返回-1。
29.可以用在WEB开发中实现会话跟踪实现:session、cookie、地址重写、隐藏域
30.(JDK1.7以前)Switch语句可以接受的类型包含:short、byte、char、int
31.Servlet的请求周期包含:初始化(init)、销毁(destory)、处理请求(service)
32.子类A继承类B时,new一个子类A的对象时会调用类B的无参构造方法
33.对象进行传递时,修改对象内的值会导致原对象的数据被修改;但若对对象的引用做出修改,改动后的对象和原对象没有关系。
34.Object 是引用数据类型,只申明而不创建实例,只会在栈内存中开辟空间,默认为空,空占1 bit
35.在子类构造方法中调用父类的构造方法,super() 必须写在子类构造方法的第一行,否则编译不通过
36.java异常和错误的基类Throwable,包括Exception和Error
37.所有的对象都在堆区上分配内存,方法区,java虚拟机栈是线程之间共享的
38.throw抛出异常对象,throws抛出异常类
39.forward和redirect的区别
(1)从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
(2)从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
(3)从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等
40.jre 判断程序是否执行结束的标准是:所有的前台线程执行完毕。后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。 前台线程:是指接受后台线程服务的线程。
附上下一篇的链接:牛客网面试题知识点记录-03