"Java面试题集锦,涵盖了Java基础理论、面向对象编程、集合、IO、JSP/Servlet框架相关的面试题目,旨在帮助求职者准备Java程序员面试。"
以下是相关知识点的详细说明:
1. JVM加载class文件的原理机制:JVM通过类加载器(ClassLoader)来加载class文件,它遵循双亲委派模型,首先由Bootstrap ClassLoader加载核心库,然后是Extension ClassLoader加载扩展库,最后是App ClassLoader加载用户类路径上的类。如果类在父加载器的范围内已加载,则不会重复加载。
2. Java程序优化:包括代码优化(如避免冗余计算、使用局部变量、减少对象创建)、JVM调优(调整堆大小、设置垃圾回收策略、使用并发收集器)、使用编译器优化选项(如-Xcomp或-XX:CompileThreshold)等。
3. 一个.java源文件可以包含多个类,但只能有一个公共类(public class),且公共类名必须与文件名一致。
4. char型变量可以存储一个Unicode字符,因此可以存储中文汉字。
5. 逻辑操作符(&, |, ^)按位运算,而条件操作符(&&, ||)是短路逻辑运算,只评估需要的部分。
6. Math.round(11.5)等于12,Math.round(-11.5)等于-11。round方法四舍五入到最接近的整数。
7. Java没有goto语句,其设计原则是避免无控制的跳转,提高代码的可读性和可维护性。
8. int是基本数据类型,Integer是int的包装类,它们之间可以自动装箱拆箱,但性能和内存占用有区别。
9. 数值型字符可以通过Integer.parseInt()或Double.parseDouble()等方法转换为数字,使用DecimalFormat进行四舍五入保留两位小数。
10. shorts1 = 1; s1 = s1 + 1;会导致编译错误,因为1是int类型,需要强制类型转换。而s1 += 1;会自动处理类型转换。
11. float f = 3.4f是正确的,因为3.4默认是double类型,需要后缀f或F表明是float。
12. String是不可变对象,StringBuffer是线程安全的可变字符串,适用于多线程环境下的字符串拼接。
13. String不是基本数据类型,它是对象,不能被继承,因为它是final类。
14. "xyz"创建了一个String对象,new String("xyz")创建了两个对象,一个在常量池,一个在堆。
15. 数组有length属性,String也有length()方法。
16. 快速排序是一种高效的排序算法,Java实现通常涉及递归和分区操作。
17. switch不能作用于byte类型之前,Java 7之后可以;不能作用于long类型;Java 7之后可以用字符串(String)作为switch条件。
18. 使用break语句可以跳出多重嵌套循环,配合label可以指定跳出特定循环。
19. 日期和时间处理可以使用java.util.Date、java.time包中的类,如LocalDate、LocalTime、 LocalDateTime等。
20. Java中参数传递总是值传递,对象传递的是引用副本,而不是实际对象。
21. assert用于单元测试,断言某个条件是否为真,方便调试。
22. GC(Garbage Collector)是Java自动内存管理机制,用于回收不再使用的对象所占用的内存。
23. 垃圾回收的优点包括自动内存管理、防止内存泄漏;原理基于可达性分析,判断对象是否可及以确定是否回收。
24. 垃圾回收器不一定立即回收,可通过System.gc()尝试触发,但不保证成功。一般不推荐主动触发,而是让JVM自动管理。
25. Java中存在内存泄漏,比如不再使用的对象保持对外部对象的引用,阻止了GC回收。
26. 事件委托机制是GUI编程中的一种设计模式,通过将事件监听器注册在父组件上,间接处理子组件事件,减少事件处理器的注册。
27. Heap和Stack是内存的两个主要区域,Heap用于存放对象实例,Stack用于存放方法调用时的局部变量和方法返回地址。
28. final用于声明常量或不可变对象,finally确保代码块在异常情况下也能执行,finalize是对象被垃圾回收前调用的清理方法。
29. &是按位与运算符,&&是逻辑与运算符,后者具有短路特性。
30. 计算2乘以8最有效率的方法是直接赋值2 * 8。
31. 两个对象值相同(x.equals(y) == true)但hashcode不同是可能的,因为不同的对象可能有相同的值但hashcode不同。
32. Web应用开发中,输出特定编码字符通常涉及charset设置,例如response.setContentType("text/html;charset=UTF-8")。