阿里JAVA实习生入职测试题(2019最新)

根据我的理解和搜集的资料,尽可能清晰完整的回答(逐步完善,持续更新)

1、String类为什么是final的

首先分析String的源码:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
  • 类被final关键字限定,说明它不可以被继承,没有子类。即持有一个String对象的引用,它必然是String类,而不会是其他的类。
  • value是用来存储值的,它是一个private final char数组,说明这个数组不可被其它数组替换-即数组的地址不可变更,但是数组的每个元素得值可以变更

private 限定符,保证String字符串数组的值不可在类外被修改。由于未对外暴露可修改的接口,所以String的值一旦被创建,即不可被修改。

  • 线程安全

因为字符串是不可修改的,即多个线程可以共享同一个字符串实例。

  • 字符串常量池可以大大提高时空间效率

      字符串常量池,详见    https://segmentfault.com/a/1190000009888357

2、JDK8的HashMap的源码,实现原理,底层结构

  HashMap的Hash冲突解决,后面单独会写一篇博客

  • 首先看Node的源码
    static class Node<K,V> implements Map.Entry<K,V> {
        final int hash;
        final K key;
        V value;
        Node<K,V> next;

        Node(int hash, K key, V value, Node<K,V> next) {
            this.hash = hash;
            this.key = key;
            this.value = value;
            this.next = next;
        }

   HashMap用 transient Node<K,V>[] table 存值,所以就是个单向链表

  • 容量
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

默认容量-16。resize时,newCap = oldCap << 1( 2进制,左移1位,即*2)

3、反射中,Class.forName和ClassLoader.loadClass的区别

4、session和cookie的区别与联系,session的生命周期,多个服务部署时session管理
5、Java中的队列都有哪些,有什么区别
6、详谈一下Java的内存模型以及GC算法
7、JAVA10、JAVA11的新特性

JAVA10 新特性官方发布页: https://www.oracle.com/technetwork/java/javase/10-relnote-issues-4108729.html

  • 新增 Optional.orElseThrow() 方法
  • 新增几个Unmodifiable Collections API,如Collectors 类新增 toUnmodifiableListtoUnmodifiableSet, 和toUnmodifiableMap 方法
  • ...

JAVA11 新特性官方发布页:  https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html

8、Java内存泄漏的问题调查定位:jmap, jstack的使用
9、Spring的体系结构和jar用途
10、Spring MVC的运行原理
11、Spring Boot的执行过程
12、Spring IOC和AOP的底层实现
14、Spring boot 的优势和劣势,以及适用场景等
15、讲一下Sping Cloud和Dubbo的优缺点
16、什么是Hystrix?它如何实现容错?

hystrx 工作原理,详见 https://segmentfault.com/a/1190000012439580


17、什么Netflix Feign?它的优点是什么?
18、谈一谈分布式一致性到CAP理论,BASE理论

CAP(compare and swap)
19、常用的线程池模式以及不同线程池的使用场景—面试出现频率非常高

  • FixedThreadPool
  • CachedThreadPool
  • SingleThreadExecutor
  • ScheduledThreadPool  

推荐: https://blog.csdn.net/z_s_z2016/article/details/81674893

20、ReentrantLock 和synchronized的区别
21、atomicInteger和volatile等线程安全操作的关键字的理解和使用
22、分布式锁三种实现方式
23、socket框架netty的使用,以及NIO的实现原理,为什么是异步非阻塞
24、简述NIO的最佳实践
25、Zookeeper的用途,选举的原理是什么
26、手写一个哈夫曼树

哈夫曼树(Huffman Tree)又称最优二叉树

*****************************************************************************************************

精力有限,欲望太多,专注做好一件事就行

  • 5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
  • 写博客的意义在于锻炼逻辑条理性,加深对知识的系统性理解,锻炼文笔,如果恰好又对别人有点帮助,那真是一件令人开心的事

*****************************************************************************************************

猜你喜欢

转载自www.cnblogs.com/NaughtyCat/p/alibaba-java-interview.html
今日推荐