Java开发面试是一系列技术考察,旨在评估求职者对Java编程语言的理解和实际应用能力。以下是一些关键知识点的详细解析:
1. **ReentrantLock** 是Java并发编程中的一个高级锁机制,相较于synchronized关键字,它提供了更高的灵活性和控制性,支持公平锁、非公平锁和可中断锁。正确理解ReentrantLock有助于提升多线程程序的性能和安全性。
2. 在Java中,`Integer`类的对象表示整数值,即使它们的引用相同(如i1和i2),对象也是不同的,因此`i1==i2`的结果为`false`。对于i3和i4、i5和i6、i7和i8,由于都是不同引用但值相同的对象,所以`i3==i4`和`i7==i8`为`false`,而`i5==i6`为`true`。
3. 表达式`5688/1000*1000`的结果是整数运算,会先进行除法然后乘以1000,实际上等于5688,因为5688除以1000得到5.688,然后整数乘法得到5688。
4. `int`类型在Java中占用4个字节的内存空间。
5. Java的`int`类型最大值为`2147483647`,当对其进行加1操作(`inta=2147483647+1`)时,会自动溢出到`int`类型的最小负值`-2147483648`,所以`a`的值为`-2147483648`。
6. SQL语句中,(1)查询所有行的总数可能不会返回`null`;(2)查询列的最大值可能会返回`null`,如果表中没有数据或col1列没有值;(3)拼接字符串和最大值可能会返回`null`,如果`max(col1)`的结果为`null`。所以可能返回`null`的是(2)和(3)。
7. 在GBK字符集中,一个汉字通常占用两个字节。
8. `javax.validation`包主要用于Java Bean验证,其中的数据验证注解包括@NotNull、@NotEmpty、@Valid等,但不属于该包的是`@Size`(Spring MVC中的注解,用于验证集合大小)。
9. 单价的计算公式为`1400 / 3 / 100 * 100`,四舍五入保留两位小数后,将结果转换为BigDecimal并格式化。
10. SpringBoot的优点包括:快速启动、自动配置、依赖注入、内嵌Tomcat、模块化结构、RESTful风格的默认配置等,极大地简化了企业级应用的开发流程。
11. JVM方法区主要存储类的元数据(如类的版本、字段、方法、常量池)、静态变量、即时编译后的代码等。
12. 对象头包含类型指针(用于确定对象的实际类)、哈希码(用于哈希表)、对齐填充(为了满足CPU缓存行的边界要求)等信息。
13. 运行时异常(Runtime Exception)是在程序运行过程中可能出现的异常,例如`NullPointerException`、`ArrayIndexOutOfBoundsException`等,它们不需要被捕获,但程序员通常需要处理或声明。
14. 导致内存溢出的常见场景包括:大量对象创建但未及时清理、循环引用、死锁、长时间持有大对象引用、递归调用深度过深等。
15. R是一个统计分析和图形处理软件包,与Java面试问题无关,这里可能是题目错误,应询问与Java或数据处理相关的R语言知识点。