当前位置 博文首页 > 程序员springmeng:133个Java面试问题列表(下)

    程序员springmeng:133个Java面试问题列表(下)

    作者:[db:作者] 时间:2021-08-10 19:16

    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 库。

    下一篇:没有了