Java Interview Question

20 Essential Java Interview Questions

  • 为什么要在避免在抽象类的构造方法中调用其抽象方法?

    • 主要是因为初始化顺序导致的,因为在父类初始化的时候,子类还没来得及初始化
  • 利用 类似List<e extents Object> , 而不是 List<Object> 来容纳子类

  • transit 关键字的用法?

  • 利用transit 修饰field 可以防止 一些不想被序列化的属性被序列化

  • TreeSet 和HashSet 的比较

  • HashSet 在 add ,remove ,contain 操作都是 O(1) , 而TreeSet 是 O(Log N),可以说HashSet 几乎在各个方面都是优于TreeSet, 但是TreeSet 是基于Tree 的数据结构来实现的,所以说,TreeSetr 可以保持数据的元素顺序。这个特性是HashSet所没有的

  • **好莱坞原则 : ** 以通知代替轮训是好莱坞的核心!

  • 为何 String.length() 给出的结果并非准确的?

    • 因为String.length() 返回的是char[] 数组的长度,在Java 最初设计时,由于char是一个 16位的变量所它只能覆盖 Unicode 的第0号平面,如果字符不包含在第0号平面的,将会覆盖两个char 字节 具体参考 Uncode 字符衍射
  • **什么是JIT ? **:深入浅出 JIT 编译器

  • JIT 是JVM 在运行时优化代码的一种机制

  • 高运行频率的字节码直接被翻译为机器指令以提高性能。在JIT将这部分翻译为机器码时,是method为单位的。并且翻译后的机器码会被保存起来,这样,在第一次以后调用时,就不需要再进行翻译

  • JIT 有两种模式:server 模式启动慢,但是运行快,client 模式启动快,运行慢

  • JIT 的代码缓存是有限的,可以利用 命令–XX:ReservedCodeCacheSize=Nflag 来最大化代码缓存

  • 编译是基于两个计数器的:一个是方法被调用的次数,另一个是方法中循环被回弹执行的次数。通过改变 -XX:CompileThreshold=Nflag 的值,可以更改 方法被编译的阈值,如果在应用的性能瓶颈期,更改这个阈值会带来一定的性能提升

  • 说出下面代码带来的便捷

 try (final Stream<String> stream = Files.lines(path)){
            stream.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 利用Paths 攻破那个剧了
  2. 利用method reference 来简化控制输出到控制台
  3. Stream 是继承于AutoCloseable 接口,然后利用 Java 1.7 开始的try - resource 语法,实现了stream的自动关闭,不需要再去写 try-catch-finally了
  • 解释下面的现象
final List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(2)

最后输出了 [1,2] , 因为 JVM 总是选择最为准确的override 方法,remove 两个重载,remove(int index ) 和 remove(Object object ) 明显第一个更加准确,虽然Java 有自动装载功能,但其实在这里没有用

  • 解释下下面代码存在的问题
public class Foo {
    public Foo() {
        doSomething();
    }

    public void doSomething() {
        System.out.println("do something acceptable");
    }
}

public class Bar extends Foo {
    public void doSomething() {
        System.out.println("yolo");
        Zoom zoom = new Zoom(this); 
    }
}
  • Bar这个对象在创建时,首先是调用的父类 Foo的 construor 方法,而父类的constructor 方法又调用了子类重写的 doSomething 方法,这样在Zoom 引用Bar 对象进行创建的时候,是引用的一个没有完全初始化完成的对象!!!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,491评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,601评论 18 399
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,890评论 0 33
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,419评论 0 2
  • 转让APP有一个条件,项目上线之后才可以转让 一 打开iTunes Connect 登陆from 账户 就是要...
    负心薄幸的龙哥阅读 22,386评论 60 31

友情链接更多精彩内容