# 以下多线程对 int 型变量 x 的操作,哪个不需要进行同步。

A.x

B.x=y

C.x


D.x=1

解:对于非读取的操作,不需要其它的线程进行同步。而对于原子操作,一步到位的操作,比如第四步赋值,就不需要同步。

# 关于垃圾收集。

一个对象成为垃圾是因为不再有引用指向它,线程的结束并不一定代表线程的该引用释放。


有这样一段代码块:

1
2
3
4
5
6
static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;

假定 str0,…,str4 后序代码都是只读引用。
Java 7 中,以上述代码为基础,在发生过一次 FullGC 后,上述代码在 Heap 空间(不包括 PermGen)保留的字符数为多少?


应该是 15。substring 本质是 new,str3 和 4 是 new,3 个 new 就是 15.

# 面对对象的五大基本原则(八股)

  • 单一职责原则
  • 开放封闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则

# 序列化和反序列化

# javac -d 参数的用途是。

指定编译后类层次的根目录。

# 事务、系统、介质故障

.
若系统在允许过程中,由于某种原因,造成系统停止运行,致使事务在执行过程中以非控制方式终止,这时内存中的信息丢失,而存储在外存上的数据未受影响,这种情况称为系统故障。

介质故障是指外存储设备故障,主要有磁盘损坏,磁头碰撞盘面,突然的强磁场干扰,数据传输部件出错,磁盘控制器出错等。

事务故障是由于程序执行错误而引起事务非预期的、异常终止的故障。它发生在单个事务的局部范围内,实际上就是程序的故障。

# java 语言的几种数组复制方法中,哪个效率最高?

复制的效率 System.arraycopy>clone>Arrays.copyOf>for 循环

# 覆盖与重载的关系是。

首先,重载和重写都是多态的体现方式,重载是不同参但同名返回值无关,重写是同名同参

# Java 中可以将布尔值与整数进行比较吗?

不行,Boolean 类型不可以转化为其它的数据类型

# 总共三种异常

  • 检查性异常:一般是用户的失误引起的异常,比如要打开一个不存在的文件,就会产生该异常。
  • 运行时异常:这个是可以通过改写程序来避免的,就是编译时就能发现或出现的。
  • 错误:错误不是异常,这个在编译过程中发现不了。

# java 语言的字符集编码

  1. Java 一律都是 Unicode 编码,中英文都是占用两个字节。
  2. 当数据库的字符编码为 GBK 时,显示数据库数据的网页不一定必须为 GBK。
  3. Java 虚拟机通常使用 UTF-16 保存字符。
    (MySQL 中的 “utf8” 实际上不是真正的 UTF-8, “utf8” 只支持每个字符最多 3 个字节,对于超过 3 个字节的字符就会出错,而真正的 UTF-8 至少要支持 4 个字节

MySQL 中的 “utf8mb4” 才是真正的 UTF-8)

# 不属于白盒覆盖标准的是。

边界值分析。


覆盖标准的有 1. 逻辑覆盖,2. 循环覆盖,3. 基本路径测试

# 分析下面的程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
1. class StaticStuff
2 {
3. static int x = 10;
4.
5. static { x += 5; }
6.
7. public static void main(String args[])
8. {
9. System.out.println(“x = ” + StaticStuff .x);
10. }
11. static
12. {x /= 3; }
13.}

静态代码自上而下执行:

初始化 x 为 10

x += 5 后为 15

x/3 后结果为 5

# 加载驱动的方法。

  1. Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
  2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  3. System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”);


    DriverManage.getConnection 不是加载驱动程序的方法。

# 实现多线程的方法。

  1. 继承 Thread 类
  2. 实现 Runnable 接口
  3. 实现 callable 接口


    没有实现 Thread 接口