腾讯一面,焉知喜凉

个人技术博客:http://www.zhenganwen.top

  • 有用过Java的并发包吗,里面有哪些并发的数据结构
    • 是指JUC包吗?里面有一些原子操作类,以Atomic开头的;还有像CountDownLatchCyclicBarrier之类的并发工具类;再有就是对线程池支持的相关类,比如ThreadPoolExecutor
  • 了解JVM吗,能不能说一下GC是怎么停机的?
    • 是指stop the world吗?就是JVM启动的时候会在后台开一个GC守护线程,当需要GC的时候,GC线程需要在标记阶段枚举根节点,这时需要暂停所有工作者线程,在枚举根节点结束之后,所有的工作者线程才会得以恢复执行。因为枚举根节点时需要分析堆中各个对象的引用关系,这时如果不暂停工作者线程,那么工作者线程执行时对引用的变更会影响枚举根节点(就像扫地的时候需要暂停丢垃圾一样)。
  • 现在主流的GC算法都有哪些?
    • 复制算法,应用于新生代;标记-整理算法,应用于老年代。
  • Server和Client模式下的GC算法有区别吗?
    • 额……有区别吧,Server模式下产生的垃圾一般多一些。(感觉面试官应该是想问两种模式下的垃圾回收器,因为选取Server模式通常意味着硬件条件CPU、内存等较高,因此通常选择能够并行回收的,比如ParNew,Parallel Old)
  • 能说下Java的类加载器吗?
    • Java的类加载器主要分为以下三类:引导类加载器、扩展类加载器、应用程序类加载器;引导类加载器负责加载jre/lib下的核心类库,扩展类加载器负责加载ext/下的扩展类库,应用程序类加载器用于加载开发者自定义的类。Java的类加载有一个双亲委派模型,就是当JVM收到类加载请求时,并不会让当前类的类加载器去加载该类,而是递归将请求委派给上级类加载器,直到引导类加载器受理该请求并尝试从jre/lib/加载该类,如果没有则逐层向下,如果连当前类的类加载器都找不到该类,则会抛出NoSuchClass的异常
  • 那为什么会有这个双亲委派模型呢?
    • 为了避免用户自定义的类覆盖核心类库,比如用户也可以自定义Object,如果没有双亲委派机制,那么自定义的Object就会被应用程序类加载器加载,这会和核心类库的Object发生冲突。(没有说明白,应该是:双亲委派模型是对JVM的一种保护机制,即核心类库优先被上层类加载器加载而不会受自定义类的影响,比如自定义一个java.lang.Object,那么由于双亲委派模型,java.lang.Object的加载请求会优先被引导类加载器加载,而引导类加载器则会加载jre/lib下的java.lang.Object而不是加载用户自定义的)
  • 有这样一个场景,不知道你遇到过没有?就是有一个Java应用,它依赖了两个库A和B,A和B又同时依赖了C库,但是A库和B库依赖的C库的版本不一样,如何解决不兼容的问题。
    • 我倒没遇到过这样的情况。但是我听说过一种OSGi模块化技术,它打破了传统的双亲委派机制,各个module之间不是双亲委派模型那样的层级关系,而是平等关系,各module之间之存在依赖和被依赖的关系而没有层级关系,不知道这个技术能否解决此问题。(其实我根本没搞懂问的什么,瞎达了一通……)
  • 加载器可以有多个命名空间吗?JVM可以多次加载同一个jar包吗?
    • java中类的唯一性是由加载器和类的全限定名共同确定的,所以一个类是可以被不同加载器加载多次的。
  • C用得多吗?
    • 只是跟着专业课学了一下基础,只了解到了指针和结构体那一块
  • 我看你Java基础这一块掌握得还比较好,但是……我们团队现在只招C/C++
    • 哦……那蛮遗憾的
  • 不过我们公司有很多Java开发的团队,后续会有其它团队与你取得联系的。
    • 好,谢谢面试官

感觉这一面只是简历评估面吧,面试官可能不是主攻Java的,看后续有没有机会吧~

你可能感兴趣的:(腾讯一面,焉知喜凉)