牛客第二章
# 以下多线程对 int 型变量 x 的操作,哪个不需要进行同步。
A.x
B.x=y
C.x
D.x=1
解:对于非读取的操作,不需要其它的线程进行同步。而对于原子操作,一步到位的操作,比如第四步赋值,就不需要同步。
# 关于垃圾收集。
一个对象成为垃圾是因为不再有引用指向它,线程的结束并不一定代表线程的该引用释放。
有这样一段代码块:
1 | static String str0="0123456789"; |
假定 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 语言的字符集编码
- Java 一律都是 Unicode 编码,中英文都是占用两个字节。
- 当数据库的字符编码为 GBK 时,显示数据库数据的网页不一定必须为 GBK。
- Java 虚拟机通常使用 UTF-16 保存字符。
(MySQL 中的 “utf8” 实际上不是真正的 UTF-8, “utf8” 只支持每个字符最多 3 个字节,对于超过 3 个字节的字符就会出错,而真正的 UTF-8 至少要支持 4 个字节
MySQL 中的 “utf8mb4” 才是真正的 UTF-8)
# 不属于白盒覆盖标准的是。
边界值分析。
覆盖标准的有 1. 逻辑覆盖,2. 循环覆盖,3. 基本路径测试
# 分析下面的程序:
1 | 1. class StaticStuff |
静态代码自上而下执行:
初始化 x 为 10
x += 5 后为 15
x/3 后结果为 5
# 加载驱动的方法。
- Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
- DriverManager.registerDriver(new com.mysql.jdbc.Driver());
- System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”);
DriverManage.getConnection 不是加载驱动程序的方法。
# 实现多线程的方法。
- 继承 Thread 类
- 实现 Runnable 接口
- 实现 callable 接口
没有实现 Thread 接口