Java面试常见问题集锦
4星 · 超过85%的资源 需积分: 17 181 浏览量
更新于2024-07-29
收藏 771KB DOC 举报
"Java面试宝典是一份针对Java程序员面试准备的资料,涵盖了基础语法、编程技巧、异常处理、多线程、集合框架、IO流、JVM内存管理等多个核心知识点。这份资料旨在帮助求职者熟悉Java语言的关键概念,提高面试成功率。"
一、Java基础部分
1. 一个.java源文件可以包含多个类,但只能有一个公共类(public class),其他类可以是非公共的。
2. Java中没有goto语句,提倡使用流程控制结构如if、for、while等替代。
3. &是位运算符,&&是逻辑运算符。前者用于按位操作,后者用于布尔逻辑判断,只有当左侧为真时才会评估右侧。
4. 使用break语句可以跳出多重嵌套循环。
5. switch语句不能作用于byte,但Java 7以后可以作用于char,不能作用于long和String。
6. short s1 = 1; s1 = s1 + 1; 会隐式转换为int,需要强制类型转换;s1 += 1; 直接在原类型上进行运算,无需转换。
7. char型变量可以存储中文汉字,因为UTF-16编码每个中文汉字占用2个字节。
8. 最有效率的方法计算2乘以8是直接使用位移运算:2 << 3。
9. 设计一个计算器要考虑数据范围、进制转换、运算符优先级等。
二、核心概念
10. final修饰变量时,变量引用不可变,但如果是对象,则对象的属性可以变。
11. ==比较基本类型值,equals比较对象内容。
12. 静态变量属于类,实例变量属于对象。
13. 不可以从static方法内部调用非static方法。
14. Integer是int的封装类,有额外功能,如缓存,但性能稍逊。
15. Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. 需要检查代码具体实现来分析不妥之处。
17. public、private、protected及默认访问修饰符分别对应不同的访问级别。
18. Overload是重载,方法名相同但参数列表不同;Override是重写,子类方法覆盖父类方法,不能改变返回类型。
19. 构造器不能被override,但可以被重载。
20. 接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类可以有静态main方法。
三、高级特性
21. 写clone()方法时,通常会调用super.clone()。
22. 面向对象特征包括封装、继承、多态。
23. Java通过方法的动态绑定实现多态。
24. abstract class可以有方法实现,而interface只能声明方法。
25. abstract method不能同时是static、native或synchronized。
26. 内部类是定义在另一个类内部的类,Static Nested Class是静态内部类,不依赖外部类实例;Inner Class是普通内部类,依赖外部类实例。
27. 内部类可以访问其外部类的所有成员,包括私有成员。
28. 匿名内部类可以继承其他类或实现接口。
29. super.getClass()获取对象的类信息。
30. String不是基本数据类型,是对象。
31. 原始的String对象内容不变,s + " world!"创建了一个新的String对象。
32. 不可以继承String类,它是final的。
四、异常处理
33. String s = new String("xyz")创建了两个Object,一个常量池中的,一个堆中的。
34. String和StringBuffer的区别在于String是不可变的,而StringBuffer是线程安全的可变字符串。
35. 使用split(",")方法将逗号分隔的字符串转换为数组。
36. 数组有length属性,String有length()方法。
37. 创建了3个对象。
38. try后的finally{}总是会被执行,无论是否有return,它会在return前执行。
39. 编程代码未给出,无法确定输出结果。
40. final修饰变量,finally确保代码块始终执行,finalize是对象被垃圾收集前调用的方法。
41. 运行时异常是程序运行时可能发生且需要处理的异常,一般异常在编译阶段就需处理。
42. error是严重问题,如系统崩溃,exception是程序可处理的异常。
43. 异常处理机制涉及try、catch、finally、throw、throws关键字,try块中可以抛出异常。
44. 如:NullPointerException、ArrayIndexOutOfBoundsException等。
45. throws表示方法可能抛出异常,throw用于抛出异常,try用于捕获异常,finally用于确保代码执行。
46. 通过Thread类或实现Runnable接口创建线程,synchronized修饰同步方法。
47. sleep()使线程休眠,wait()使线程等待,两者都在对象锁上操作。
48. 同步(synchronized)用于多线程同步,防止数据冲突;异步不保证执行顺序,提高并发性能。
49. 未给出代码,无法判断。
50. 多线程实现:继承Thread类、实现Runnable接口。同步实现:synchronized关键字、Lock接口。
五、集合框架
51. 启动线程应使用start()而非run(),start()会调用run()。
52. 其他线程不能进入同步方法,除非获得对象锁。
53. 线程状态包括新建、可运行、运行、阻塞和死亡,它们之间通过API进行状态转换。
54. synchronized与Lock异同在于synchronized是内置机制,简单但粒度较粗;Lock是显式锁,粒度更细,提供更多控制。
55. 示例代码实现四个线程交替操作共享变量j。
56. 示例代码实现子线程、主线程交替循环。
57. Collection是所有集合的顶级接口,结构包括List、Set、Queue等。
58. 实现比较需实现Comparable接口。
59. ArrayList线程不安全,允许null,效率高;Vector线程安全,效率低。
60. HashMap非同步,允许null键值;Hashtable同步,不允许null键值。
61. List存储有序元素,可重复;Set存储无序不重复元素;Map存储键值对。
62. List、Set、Map都是Collection接口的子接口。
63. List:有序、可重复;Set:无序、不重复;Map:键值对,键唯一。
64. ArrayList效率高,适合随机访问;Vector效率低,线程安全;LinkedList适合遍历插入删除。
65. 使用removeAll()方法去除Vector中重复元素。
66. Collection是接口,Collections是工具类,提供集合操作。
67. 使用equals()判断对象内容是否相等,==比较对象引用。
68. 集合类包括ArrayList、LinkedList、HashSet、HashMap等,主要方法包括add、get、remove等。
69. 可能,两个对象值相等但哈希码不同。
70. 使用子类的compareTo方法,因为实际对象是子类实例。
71. 常用类:ArrayList, HashMap, String, Thread, Exception;包:java.util, java.io, java.net, java.awt, java.sql;接口:Runnable, Comparable, Iterator, ActionListener。
六、IO流与序列化
72. 流分为字节流和字符流,字节流处理任意数据,字符流处理字符。
73. 序列化是将对象的状态转化为字节流,便于持久化或网络传输。Serializable接口表示对象可序列化。
74. JVM加载class文件通过类加载器,从磁盘加载到内存并验证字节码。
75. heap存储对象实例,stack存储方法调用帧。heap用于垃圾回收,stack速度快但大小有限。
76. GC自动回收不再使用的内存,避免内存泄露。
77. 垃圾回收优点:自动管理内存,防止内存泄露。机制:可达性分析、标记-清除等。
78. 垃圾回收器不一定立即回收,手动调用System.gc()建议少用。
79. 使用System.gc()请求回收,但不保证立即执行,可使用finalize()方法。
80. assert用于断言,调试代码时检查特定条件是否满足。
81. Java中可能导致内存泄漏,如未关闭流、静态集合中引用对象等。
82. 不能,java.lang.String是预定义的,不能创建同名类。
83. 查错题目的具体错误需要查看代码。
84. 算法与编程题目涉及文件操作、字符串处理、二叉树、排序、递归等。
七、HTML、JavaScript和Ajax
85. 判断日期大小通常使用JavaScript的Date对象。
86. 使用CSS样式实现表格行颜色变化。
87. 使用正则表达式验证数字。
88. 验证数字的JavaScript代码。
以上
2010-07-27 上传
2021-10-03 上传
2011-04-07 上传
2021-09-30 上传
2012-10-31 上传
zengshao_qiang
- 粉丝: 0
- 资源: 12
最新资源
- MATLAB新功能:Multi-frame ViewRGB制作彩色图阴影
- XKCD Substitutions 3-crx插件:创新的网页文字替换工具
- Python实现8位等离子效果开源项目plasma.py解读
- 维护商店移动应用:基于PhoneGap的移动API应用
- Laravel-Admin的Redis Manager扩展使用教程
- Jekyll代理主题使用指南及文件结构解析
- cPanel中PHP多版本插件的安装与配置指南
- 深入探讨React和Typescript在Alias kopio游戏中的应用
- node.js OSC服务器实现:Gibber消息转换技术解析
- 体验最新升级版的mdbootstrap pro 6.1.0组件库
- 超市盘点过机系统实现与delphi应用
- Boogle: 探索 Python 编程的 Boggle 仿制品
- C++实现的Physics2D简易2D物理模拟
- 傅里叶级数在分数阶微分积分计算中的应用与实现
- Windows Phone与PhoneGap应用隔离存储文件访问方法
- iso8601-interval-recurrence:掌握ISO8601日期范围与重复间隔检查