简历
今天下午三点收到了阿里巴巴的电话面试,时长49:36。研发Java工程师(实习生)
面试内容基本上都是根据简历上的项目进行延伸的,所以建立一定要做的认真,并且要严谨,里边不能有虚假内容,不然真的能问到你冒汗的。
面试题
高并发
根据项目延伸的如果在高并发或者分布式的时候会出现哪种情况,线程中的锁 synchronized是很重要,很重要,很重要。要理解这个的对象锁和类锁的区别和应用。
- 如果两个系统同时修改同一个逻辑,那么锁应该锁哪个对象
- 一个类中两个锁方法的话,那么A进入第一个方法,那么第二个方法B可以进去吗
大家可以考虑一下这两个问题的解决方法。
Java集合
1,首先说一下Java集合,然后说一下它们的简略区别和实现。
2,HashMap的实现原理
HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。HashMap在底层吧Key-Value当成一个整体进行处理,把它封装成了Entry,每次put的时候都会把Key生成一个Hash散列值在数组中进行比较,如果Hash值相同的话,就进行equal方法的比较,如果key值相同的话就把新添加的Entry的Value覆盖掉之前的Value,如果Key不同,则将当前的Entry添加到链表中。
3,ConcurrentHashMap原理
HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。
HashTable,它是线程安全的,它在所有涉及到多线程操作的都加上了synchronized关键字来锁住整个table,这就意味着所有的线程都在竞争一把锁,在多线程的环境下,它是安全的,但是无疑是效率低下的。
ConcurrentHashMap的数据结构是由一个Segment数组和多个HashEntry组成,用concurrentHashMap来解决前面的问题
dubbo
1,dubbo实现机制
2,延伸到rpc实现
1)服务消费方(client)调用以本地调用方式调用服务;
2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
3)client stub找到服务地址,并将消息发送到服务端;
4)server stub收到消息后进行解码;
5)server stub根据解码结果调用本地的服务;
6)本地服务执行并将结果返回给server stub;
7)server stub将返回结果打包成消息并发送至消费方;
8)client stub接收到消息,并进行解码;
9)服务消费方得到最终结果。
3,延伸到rpc的底层实现socket
这个我也说不详新
4,tcp中的send方法以什么数据类型传送的。
char数组
总结
感觉阿里巴巴面试确实挺难的,会延伸出好多问题,如果回答不出来的话就换一个方面问,问到回答不出来为止。
推荐几本书:Java编程思想,深入理解Java虚拟机,Java并发编程实战。