(转载)
59)我们能自己写一个容器类,然后使用 for-each 循环码?
可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。如果你
实现 Collection 接口,默认就具有该属性。
60)ArrayList 和 HashMap 的默认大小是多数?(答案)
在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)。这就是 Java
7 中 ArrayList 和 HashMap 类的代码片段:
// from ArrayList.java JDK 1.7
private static final int DEFAULT_CAPACITY = 10;
//from HashMap.java JDK 7
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
61)有没有可能两个不相等的对象有有相同的 hashcode?
有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么在 hashmap 中会有冲突。相等 hashcode 值
的规定只是说如果两个对象相等,必须有相同的hashcode 值,但是没有关于不相等对象的任何规定。
62)两个相同的对象会有不同的的 hash code 吗?
不能,根据 hash code 的规定,这是不可能的。
63)我们可以在 hashcode() 中使用随机数字吗?(答案)
不行,因为对象的 hashcode 值必须是相同的。参见答案获取更多关于 Java 中重写 hashCode() 方法的知识。
64)Java 中,Comparator 与 Comparable 有什么不同?(答案)
Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户定制的顺序。Comparable 总是只有一个
,但是可以有多个 comparator 来定义对象的顺序。
65)为什么在重写 equals 方法的时候需要重写 hashCode 方法?(答案)
因为有强制的规范指定需要同时重写 hashcode 与 equal 是方法,许多容器类,如 HashMap、HashSet 都依赖于
hashcode 与 equals 的规定。
Java IO 和 NIO 的面试题
IO 是 Java 面试中一个非常重要的点。你应该很好掌握 Java IO,NIO,NIO2 以及与操作系统,磁盘 IO 相关的基础
知识。下面是 Java IO 中经常问的问题。
66)在我 Java 程序中,我有三个 socket,我需要多少个线程来处理?
67)Java 中怎么创建 ByteBuffer?
68)Java 中,怎么读写 ByteBuffer ?
69)Java 采用的是大端还是小端?
70)ByteBuffer 中的字节序是什么?
71)Java 中,直接缓冲区与非直接缓冲器有什么区别?(答案)
72)Java 中的内存映射缓存区是什么?(answer答案)
73)socket 选项 TCP NO DELAY 是指什么?
74)TCP 协议与 UDP 协议有什么区别?(answer答案)
75)Java 中,ByteBuffer 与 StringBuffer有什么区别?(答案)
Java 最佳实践的面试问题
包含 Java 中各个部分的最佳实践,如集合,字符串,IO,多线程,错误和异常处理,设计模式等等。
76)Java 中,编写多线程程序的时候你会遵循哪些最佳实践?(答案)
这是我在写Java 并发程序的时候遵循的一些最佳实践:
a)给线程命名,这样可以帮助调试。
b)最小化同步的范围,而不是将整个方法同步,只对关键部分做同步。
c)如果可以,更偏向于使用 volatile 而不是 synchronized。
d)使用更高层次的并发工具,而不是使用 wait() 和 notify() 来实现线程间通信,如 BlockingQueue,
CountDownLatch 及 Semeaphore。
e)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。
77)说出几点 Java 中使用 Collections 的最佳实践(答案)
这是我在使用 Java 中 Collectionc 类的一些最佳实践:
a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector。
b)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。
c)使用接口代表和访问集合,如使用List存储 ArrayList,使用 Map 存储 HashMap 等等。
d)使用迭代器来循环集合。
e)使用集合的时候使用泛型。
78)说出至少 5 点在 Java 中使用线程的最佳实践。(答案)
这个问题与之前的问题类似,你可以使用上面的答案。对线程来说,你应该:
a)对线程命名
b)将线程和任务分离,使用线程池执行器来执行 Runnable 或 Callable。
c)使用线程池
79)说出 5 条 IO 的最佳实践(答案)
IO 对 Java 应用的性能非常重要。理想情况下,你不应该在你应用的关键路径上避免 IO 操作。下面是一些你应该遵
循的 Java IO 最佳实践:
a)使用有缓冲区的 IO 类,而不要单独读取字节或字符。
b)使用 NIO 和 NIO2
c)在 finally 块中关闭流,或者使用 try-with-resource 语句。
d)使用内存映射文件获取更快的 IO。
80)列出 5 个应该遵循的 JDBC 最佳实践(答案)
有很多的最佳实践,你可以根据你的喜好来例举。下面是一些更通用的原则:
a)使用批量的操作来插入和更新数据
b)使用 PreparedStatement 来避免 SQL 异常,并提高性能。
c)使用数据库连接池
d)通过列名来获取结果集,不要使用列的下标来获取。
81)说出几条 Java 中方法重载的最佳实践?(答案)
下面有几条可以遵循的方法重载的最佳实践来避免造成自动装箱的混乱。
a)不要重载这样的方法:一个方法接收 int 参数,而另个方法接收 Integer 参数。
b)不要重载参数数量一致,而只是参数顺序不同的方法。
c)如果重载的方法参数个数多于 5 个,采用可变参数。
Date、Time 及 Calendar 的面试题
82)在多线程环境下,SimpleDateFormat 是线程安全的吗?(答案)
不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中
使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做,在
解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐
joda-time 库。
83)Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式?(答案)
Java 中,可以使用 SimpleDateFormat 类或者 joda-time 库来格式日期。DateFormat 类允许你使用多种流行的格式
来格式化日期。参见答案中的示例代码,代码中演示了将日期格式化成不同的格式,如 dd-MM-yyyy 或 ddMMyyyy。
84)Java 中,怎么在格式化的日期中显示时区?(答案)
85)Java 中 java.util.Date 与 java.sql.Date 有什么区别?(答案)
86)Java 中,如何计算两个日期之间的差距?(程序)
87)Java 中,如何将字符串 YYYYMMDD 转换为日期?(答案)
单元测试 JUnit 面试题
89)如何测试静态方法?(答案)
可以使用 PowerMock 库来测试静态方法。
90)怎么利用 JUnit 来测试一个方法的异常?(答案)
91)你使用过哪个单元测试库来测试你的 Java 程序?(答案)
92)@Before 和 @BeforeClass 有什么区别?(答案)
编程和代码相关的面试题
93)怎么检查一个字符串只包含数字?(解决方案)
94)Java 中如何利用泛型写一个 LRU 缓存?(答案<)
95)写一段 Java 程序将 byte 转换为 long?(答案)
95)在不使用 StringBuffer 的前提下,怎么反转一个字符串?(解决方案)
97)Java 中,怎么获取一个文件中单词出现的最高频率?(解决方案)
98)如何检查出两个给定的字符串是反序的?(解决方案)
99)Java 中,怎么打印出一个字符串的所有排列?(解决方案)
100)Java 中,怎样才能打印出数组中的重复元素?(解决方案)
101)Java 中如何将字符串转换为整数?(解决方案)
102)在没有使用临时变量的情况如何交换两个整数变量的值?(解决方案)
|
|