首页 > 阿里巴巴菜鸟一面
头像
无辄_
编辑于 2020-09-01 13:33
+ 关注

阿里巴巴菜鸟一面


1、synchronized1的底层元阿迷

synchronized的底层源码 和 synchronized的实现过程(锁膨胀过程没说清楚)



2、hashmap的底层源码讲解:

参考我的一份笔记: https://blog.csdn.net/lzinner/article/details/108101772 里面详细说了java1.7和java1.8的put get 和 一些其他的机制 (回答的时候也是按照上面说的..)

3、hashmap有什么优点 和 缺陷吗?

优点:  1、超级快速的查询速度,可以达到O(1)的时间复杂度  2、独特的hash定位法,通过hashcode() 进行处理后定位  3、底层结构的设计巧妙(数组 + 链表 + 红黑树 balabala)   缺点:  1、需要额外计算一次hash值  2、如果处理不当会占用额外的空间  3、并发的时候产生问题(java 1.7 成环 java 1.8 数据覆盖)  

4、hashmap,synchronizedMap,concurrentHashMap的区别

hashmap 上面说了一堆,高并发下处理不行  synchronizedMap: 不锁定方法,锁定代码块 synchronized(mutex){....}  concurrentHashMap: 
1.7: Segment(extends ReentractLock)  

1.8 CAS + Synchronized  + Node 

也说了一下内部的put get 扩容啥的

5、redis为什么是单线程的 而不是 多线程的(这里没有回答好.. 要从cpu瓶颈考虑..)

* 是因为redis的设计是io多路复用,即使连接网络处理多io多路复用也可以在内存处理中被忽略 * 多线程模型虽然快但他不可保证执行顺序,并带来了并发读写的问题, * redis是基于内存的,多线程的是为了充分利用cpu资源.但对redis来说除了进行备份基本不会涉及到io操作数据读写,读写只发生在内存中,处理速度很快,所以使用多线程技术会很鸡肋[由于在内存中读写,不会占用太多的cpu资源 
即: 达不到瓶颈,而多线程会产生并发安全问题,所以不需要]   ps: 为什么要引入多线程(删除的异步操作) read/write系统调用在执行期间占用了大量的cpu时间,将其网络读写总成多线程的方式会有很大性能提升,在其最新的几个版本中也加入了被其他线程异步处理的删除操作,因为redis的del命令删除元素特别大在短时间内不可完成,所以引入多线程来进行异步操作

6、redis的高可用和高性能在哪里体现的?(这里回答的不好,附上一些正确答案..)

高性能:  1、io多路复用技术(redis底层模型) 【io多路复用 + 文件事件分派器 + 连接应答】  2、主从复制 主从复制 master-slave(replication) 从节点上只能读数据,不能写入数据,只能在主节点写入数据。主节点的数据会自动同步到从节点。   复制原理:  从节点第一次加入后和主节点建立连接 建立连接后主节点通过bgsave生成RDB文件,再将文件发送到从节点(假如超时则会重发) 新来的指令主节点保存在缓冲区中,然后再发送给从节点 从节点基于rdb做一次数据载入 后续通过命令传播到从节点保持数据一致 假如从节点断开一段时间重新加入,会丢失断开时间的数据,会基于偏移量增量复制。 解决的问题:  数据备份 读写分离(不是很有必要,redis本身的性能已经够高了) 存在的问题: 主从会有延迟。 主挂了,主从不会自动切换,需要手动重启主节点。 ------------------------------------------------------------------------------------------------------------------  高可用  高可用(Sentinel机制)【哨兵机制】 sentinel是特殊的redis-server节点,一般会建造多个sentinel节点互相监控,sentinel之间地位平等,没有主从之分。 sentinel会监控真正redis-server节点: 当主节点超时未与sentinel节点连接时,会先将主节点标记下线(主观下线) 该sentinel节点会询问其他的节点,假如超过半数(奇数个sentinel)认为主节点下线,此时为真正下线(客观下线) 此时需要failover(故障转移):奇数个哨兵会通过Raft算法选举leader,leader的sentinel节点会发送两条指令让某一个从节点成为主节点 旧的主节点重启后会变成新的主节点的从节点  解决的问题:  高可用 存在的问题:  切换过程中可能会出现短暂数据丢失 没有解决水平扩容问题 redis客户端会从sentinel拿到主节点的地址,再去根据地址进行真正地连接及操作。   

7、双亲委派机制的实现,如何破坏和使用(说的不是很全面)

双亲委派机制的实现: https://www.jianshu.com/p/1e4011617650  保证了沙箱安全   打破双亲委派机制: https://www.sohu.com/a/334000357_505800   tomcat打破了双亲委派机制 : https://blog.csdn.net/caox_nazi/article/details/91047307?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf


面完的感受: 阿里巴巴的面试官非常好,给了我这个双非菜鸡一次机会,他会给出一个很大很开放的问题,让你自己慢慢挖,然后再细心的补充和教导。虽然最后的反馈还可以,但是也说不如其他竞争者的深度和广度,双非本科的我还是太菜了,简历东西太浅薄。

许愿二面,嘿嘿

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐