java基础面试/笔试题整理(二)
https://www.jianshu.com/p/d4a77808c91b
- jdk1.8之前,抽象方法不可以有大括号。
- 构造方法可以重载,可以通过反射,new,反序列化调用。
- switch语句后的控制表达式只能是short,char,int,long和枚举类型,在jdk1.7以后可以是String类型。
- Spring并没有提供日志系统,我们需要使用AOP(面向切面编程)的方式,借助spring与日志系统log4j等实现我们自己的日志系统。
- java中,垃圾回收在jvm中优先级很低,程序员只能推荐jvm进行垃圾回收,但是何时回收是不可控制的。
- 进入dead的线程还可以回复,所以GC不会回收。
- HashMap,ArrayList,TreeSet,LinkedList都不是线程安全的。
CurrentHashTable是线程安全的HashMap,Vector是线程安全的ArrayList。 - JSP九大内置对象:
request response session out page application exception pageContext config - 一个很简单但是我犯了的错误:main方法中不能直接调用本类的非静态变量和方法。
- java,ObjectC,C#都是类C语言,需要先编译在执行。
而python是解释执行的。 - X++先使用再+1,++X先+1再使用。
符号在前优先级最高,先运算再使用。符号在后优先级较低,先使用再运算。 - java中类之间的关系:
- use -a 依赖关系
- is -a 继承关系
- has -a组合关系
- class.getClass().getName()返回的是包名+类名(没有.class)。
- java程序内存泄露的最直接的表现就是程序抛出内存控制的exception。
- 在Applet中:
- init()初始化
- start()激活
- stop()停止线程
- destory()终止applet,释放applet的所有资源。
- ServletConfig接口默认是GenericServlet实现的。
- 创建servlet的实例是由servlet容器完成的,而且创建servlet实例是在初始化方法init()之前。
- try-catch-finally中,先执行finally再执行try块中的return。
- string.substring(m,n)。m是起始下标,n是结束下标。包含m不含n。
- instanceof运算符能够用来判断一个对象是否是:
- 一个类的实例。
- 一个实现指定接口的类的实例。
- 一个子类的实例。
- 在一个基于分布式的游戏服务器系统中,不同服务器之间可用的通信方式:
消息队列,套接字,高速缓存数据库。 - dbms中事务四特性:
- 持久性:恢复管理子系统。
- 一致性:完整性管理子系统。
- 隔离性:并发控制子系统。
- 原子性:事务管理子系统。
- volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的,但是volatile不能保证原子性,所以也就不能保证线程安全。
- jsp中:
forword是转发,用户地址栏不变。
redirect是重定向,用户地址栏变成新的地址。 - 在web应用程序中,web容器负责讲http请求转换为httpServletRequest对象。
- 类的初始化过程:
父类静态——子类静态——父类非静态——父类构造函数——子类非静态——子类构造函数。(这个以我现在看觉得说的有点糙,但是当时这么写的,我也懒得改了) - doGet/doPost是在javax.servlet.http.HttpServlet中实现的。
- 只有当页面是错误处理页面即isErrorPage为true时,才可以使用exception。
- string.length()返回当前长度。
string.capacity()返回初始化时的长度。
如果string.append后字符串的实际长度超过初始化的长度,string.capacity返回的是增长之后的长度。 - java一律采用unicode编码方式,每个字符无论中文还是英文都占用两个字节。
不同编码之间可以转换。
java虚拟机中通常用utf-16的方式保存一个字符。