Java核心技术面试题集锦

5星 · 超过95%的资源 需积分: 16 41 下载量 86 浏览量 更新于2024-07-30 24 收藏 900KB DOC 举报
"这是涵盖Java基础知识的全面笔试题集,包括面向对象特征、作用域、数据类型、运算符、内存管理、类与接口、异常处理、集合框架、IO流、多线程、网络编程、持久化技术(Hibernate)、MVC框架(Struts)以及Web开发相关的知识点。这些题目旨在测试应聘者的Java编程技能和理解深度。" 1. **面向对象特征**:面向对象编程的三大特征是封装、继承和多态。 2. **作用域**:public、private、protected和默认作用域分别代表公共、私有、受保护和包内可见。 3. **String类型**:String不是Java的基本数据类型,而是对象,属于引用类型。 4. **浮点型转换**:float f=3.4是不正确的,因为3.4是double类型,需要强制转换为float。 5. **float类型精度**:float f=1.3也无法直接编译通过,原因同上。 6. **short类型溢出**:s1 = s1 + 1可能造成溢出,因为short相加结果是int,需要强制转换回short。 7. **goto关键字**:Java中没有goto关键字。 8. **int与Integer**:int是基本类型,Integer是int的包装类,二者在使用和内存管理上有区别。 9. **逻辑与条件操作**:&是逻辑与,&&是短路与,它们在布尔表达式中的行为不同。 10. **位运算与条件运算**:位运算符(&, |, ^)不考虑条件,而条件运算符(&&, ||)会根据第一个操作数的真伪决定是否执行第二个操作数。 11. **堆栈的区别**:堆用于存放对象,栈用于存放基本类型和对象引用,堆的内存分配和回收由系统管理,栈的管理由编译器负责。 12. **Math.round**:Math.round(11.5)返回12,Math.round(-11.5)返回-11。 13. **switch语句**:switch可以作用于byte、char、short和int,以及枚举类型和String(Java 7及以上版本)。 14. **计算2乘以8**:最快的方法是直接赋值,如int result = 2 * 8。 15. **length方法**:String有length()方法,但length不是一个通用的方法。 16. **跳出多重循环**:使用break;可以跳出最近的循环,使用标签可以跳出特定的循环。 17. **构造器重写**:构造器不能被重写,但可以重载。 18. **equals与hashCode**:两个对象值相等但hash code可能不同,取决于实现。 19. **继承String**:String类是final的,不能被继承。 20. **其他题目**:未给出具体选项,无法解答。 21. **参数传递**:Java中总是按值传递,对象引用的值会被传递。 22. **编码输出**:使用OutputStreamWriter或PrintWriter指定编码输出字符串。 23. **String与StringBuffer**:String是不可变的,StringBuffer是可变的,适合在多线程环境下操作。 24. **String与StringBuilder**:与StringBuffer类似,StringBuilder是线程不安全的。 25. **重载与覆盖**:重载不关心返回类型,但覆盖必须保持返回类型一致。 27. **JVM加载类**:JVM使用类加载器按照类路径查找.class文件,解析字节码并生成类的运行时数据结构。 28. **存储中文**:char可以存储单个Unicode字符,包括中文,但一个汉字通常占用两个char。 29. **抽象类与接口**:抽象类可以有方法实现,接口只能定义方法。 30. **内部类**:静态嵌套类与普通内部类的主要区别在于静态嵌套类不持有对外部类的引用。 31. **内存泄漏**:Java中,如果不正确地管理对象引用,可能导致内存泄漏。 32. **static与abstract、native、synchronized**:这三个修饰符不能同时用于抽象方法。 33. **静态变量与实例变量**:静态变量属于类,实例变量属于对象。 34. **调用非静态方法**:不能从静态方法内部直接调用非静态方法。 35. **clone方法**:通常需要调用super.clone(),以确保正确复制对象。 36. **垃圾收集**:GC自动回收不再使用的对象所占的内存,以防止内存泄漏。 37. **垃圾回收优点**:自动管理内存,提高程序员效率。原理包括引用计数和可达性分析。 38. **垃圾回收机制**:主要机制包括标记-清除、复制、标记-压缩和分代收集。可以通过System.gc()尝试触发垃圾回收。 39. **String对象创建**:创建了两个对象,一个在常量池,一个在堆。 40. **接口继承**:接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类。 41. **Java接口与C++虚类**:接口没有方法实现,所有方法默认为抽象,C++虚类可以有方法实现。 42. **多类定义**:一个.java文件可以有多个类,但只有一个公共类(主类)。 43. **常用类、包、接口**:例如,类:ArrayList、Thread;包:java.util、java.io;接口:Comparable、Iterable。 44. **匿名内部类**:可以继承其他类或实现接口,但不能有名字。 45. **内部类访问权限**:内部类可以直接访问外部类的所有成员,包括私有成员。 46. **多态**:Java通过方法的重写和向上转型实现多态。 47. **final类**:final类不能被继承。 48. **继承判断**:未给出具体类,无法判断。 49. **程序运行结果**:未给出程序代码,无法确定。 50. **内部类问题**:未给出具体问题,无法解答。 51. **数据类型转换**:未给出具体问题,无法解答。 52. **字符串操作**:可以使用String的reverse()方法反转字符串,replace()方法替换子串。 53. **编码转换**:使用Charset类进行编码转换,如new String(str.getBytes("GB2312"), "ISO-8859-1")。 54. **字符串分隔**:使用String的substring()方法或正则表达式split()方法。 55. **打印昨天日期**:使用Calendar或Java 8的LocalDate减少一天。 56. **Java与JavaScript区别**:Java是静态类型的强类型语言,JavaScript是动态类型的弱类型语言。 57. **assert用法**:用于断言,确保代码在特定条件下正确。 58. **error与exception**:error是系统级错误,exception是应用程序可以捕获处理的异常。 59. **ArrayList与Vector**:ArrayList线程不安全但效率高,Vector线程安全但效率低。 60. **Collection与Collections**:Collection是接口,Collections是工具类,提供对集合的操作方法。 61. **Set的元素比较**:使用equals()比较对象内容,==比较对象引用。 62. **HashMap与Hashtable**:HashMap允许null键值对,Hashtable不允许;HashMap是非线程安全的,Hashtable是线程安全的。 63. **ArrayList、Vector、LinkedList性能**:ArrayList和Vector操作元素快,插入删除慢;LinkedList插入删除快,操作元素慢。 64. **Java流类型**:输入流、输出流、字节流、字符流,主要继承自InputStream、OutputStream、Reader、Writer。 65. **文件读写类**:FileReader、FileWriter、FileInputStream、FileOutputStream等。 66. **线程实现**:实现Runnable接口或继承Thread类;同步实现:synchronized、wait/notify、Lock接口。 67. **启动线程**:使用Thread.start()。 68. **线程互斥**:一个线程进入synchronized方法后,其他线程无法进入该对象的其他synchronized方法。 69. **sleep与wait**:sleep不会释放锁,wait会释放锁。 70. **TCP/UDP区别**:TCP是面向连接的、可靠的协议,UDP是无连接的、不可靠的协议。 71. **序列化**:序列化是将对象的状态转化为字节流,以便存储或网络传输。实现Serializable接口即可序列化。 72. **synchronized与Lock**:synchronized是内置锁,Lock是显式锁,Lock提供更细粒度的控制,但使用不当可能导致死锁。 73. **错误的抽象类**:抽象方法不能是private的,isStupidName()应去掉private。 74. **非法的成员变量**:局部变量不能声明为final且初始化。 75. **非法的抽象方法**:抽象类的抽象方法不能是private的,doSomething()应去掉private。 76. **final方法**