范围覆盖:java基础,集合框架,jvm,spring,redis。(无序,后期整理)
在北京做Java开发如何月薪达到两万,需要技术水平达到什么程度?
https://www.zhihu.com/question/39890405redis,那我说下自己被面过的问题:--begin--(以下是一些需要把这里大部分问题都搞清楚融汇贯通之后才能答的,烧脑,烧脑,加油吧!)
39、redis有序队列实现,跳表的实现,
redis源码分析之有序集SortedSethttps://www.jianshu.com/p/75ca5a359f9f |
Redis SortedSet实现原理及跳表:https://blog.csdn.net/linyu19872008/article/details/72403962 |
40、map各种底层数据结构实现的优劣(哈希表,红黑树,跳表等)。
红黑树、B(+)树、跳表、AVL等数据结构,应用场景及分析,以及一些英文缩写:https://www.cnblogs.com/charlesblc/p/5987812.html |
https://blog.csdn.net/moneyshi/article/details/50593243 |
41、redis的key过期的实现,用的什么数据结构,定期机制具体操作过程,为什不用定时器?redis定时器怎么实现的,实现支持百万级定时器你有什么好的设计思路?
回答同问题1: |
42、还有就是问些跟集群相关的。分片为啥不用一致性hash?和redis方案比有啥优劣。
redis 集群的分片(同问题17): https://www.cnblogs.com/houziwty/p/5167075.html https://blog.csdn.net/ai2713165/article/details/50513974 https://blog.csdn.net/weijiaxiaobao/article/details/51311747 |
redis集群 数据迁移方式 Hash槽 和 一致性hash对比,优缺点比较:https://blog.csdn.net/tianpeng341204/article/details/78963850 |
43、数据迁移的具体过程,假如迁移过程中迁出节点挂了会怎样?
数据迁移:https://blog.csdn.net/liaokailin/article/details/47670895 |
迁移过程中的问题:http://www.360doc.com/content/16/0425/23/16915_553797555.shtml |
44、java smart client实现原理。(不知道,应该不会问吧)
45、如何实现节点的高可用,一致性怎么保证?raft协议怎么设计的?
自己好好想想吧http://blog.51cto.com/anyisalin/1739115 |
46、redis事务怎么实现的,了解mysql事务实现吗?计算机本身实现事务的原理?有了解过分布式事务怎么做吗?
好好想想再答 |
47、阿里的tcc和mysql的xa了解吗?两段提交协议是啥?
48、有了解过zookeeper吗?如果要你实现分布式事务你怎么做?
工作四年经验问的,可能针对某个点一直问下去,问到你不会为止(CTO)。
回复鲁肃:
大神平常用到的东西都会研究原理甚至自己实现一遍吗,萌新刚毕业一年,只对消息队列原理清楚 |
回复潘璋[2]:
一般都是先看下别人资料或者文档研究下原理,然后再去看代码,逼着自己去实现一个简单的。其实数据库设计这方面是我不咋熟的,自己只写过简单的只在本地k/v数据库,而且持久化特性的事务还没实现,就是原理可能了解一点,因为写的过程中会反过来加深理解。 |
回复鲁肃:
我目前也是类似,自己写了一个消息队列,研究了主流的几个,刚毕业有点浮躁,总感觉时间不够用 |
回复潘璋[2]:
那你比我要厉害的多,我在你这个时期还没这个动手的意识。 |
---end---
1.如何实现redis的key失效
redis key失效的话,如果是代码层面,用setNx设置key的有效时间;如果问的是底层策略的话,redis保存了起始和有效时间,有三种策略,一个是在get时检查当前时间是否满足,二是启动定期检查,三是淘汰,应该就不算如何实现了 |
问:主动失效的流程,如何保证下一轮可以继续上一轮的检测,默认的通过检验的比例是多少,让你来实现,你打算怎么做 |
这个知识我忽略了,下来补补,三克油先。如果让我来实现的话,我会用hash值来做,不管是单机的,还是高可用的集群形式,数据的安放都是在一个固定的范围内的,检测比率不应该太大,redis是单线程的,影响读写性能,比如把这个范围分N份,每次扫一份这样,然后同步删除持久化文件,我想到的大概是这样吧 |
redis的key失效机制(自己整理,从源码角度。) |
如何保证下一轮可以继续上一轮的检测http://blog.sina.com.cn/s/blog_48c95a190101e5hv.html 代码段五给出了函数activeExpireCycle的实现及其详细描述,其主要实现原理就是遍历处理Redis服务器中每个数据库的expires字典表中,从中尝试着随机抽样REDIS_EXPIRELOOKUPS_PER_CRON(默认值为10)个设置了失效时间的主键,检查它们是否已经失效并删除掉失效的主键,如果失效的主键个数占本次抽样个数的比例超过25%,Redis会认为当前数据库中的失效主键依然很多,所以它会继续进行下一轮的随机抽样和删除,直到刚才的比例低于25%才停止对当前数据库的处理,转向下一个数据库。这里我们需要注意的是,activeExpireCycle函数不会试图一次性处理Redis中的所有数据库,而是最多只处理REDIS_DBCRON_DBS_PER_CALL(默认值为16),此外activeExpireCycle函数还有处理时间上的限制,不是想执行多久就执行多久,凡此种种都只有一个目的,那就是避免失效主键删除占用过多的CPU资源。代码段五有对activeExpireCycle所有代码的详细描述,从中可以了解该函数的具体实现方法。 |
默认的通过检验的比例是多少https://blog.csdn.net/wwd0501/article/details/51900063 |
处理定时任务:https://blog.csdn.net/orangleliu/article/details/52038092 |
2spring里对aop的扩展。(昨天写的都丢了,好心痛,csdn再这样我就不用你了。)
https://isudox.com/2017/05/24/spring-aop-guide/ |
https://www.cnblogs.com/hq-123/p/6008695.html |
https://www.cnblogs.com/wangzheand/p/5939618.html |