![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
超级大拌菜
这个作者很懒,什么都没留下…
展开
-
mysql 幻读和不可重复读区别
面试有一部分人不太理解这两个区别,自己梳理下。幻读侧重行数量发生了变化。不可重复读侧重某一行数据发生了变化。幻影行,重点是行,同一个事务中,某一行之前没有,后来读到了,那我认为读到幻影行了(比如其他事务插入了新行)。不可重复读,广义上讲,第一次读和第二次读数据不一样,这包含两种情况:(1) 同一行数据发生了变化;(2) 行数量发生了变化;为了区分来这两种情况,就把后者单独叫“幻读”。而不可重复读通常指的就是第一种情况。...原创 2021-03-19 18:54:11 · 620 阅读 · 0 评论 -
spring boot lettuce和HikariCP线程池大小的设置
HikariCP是用于数据库的连接池,连接池的大小设置请参考HikariCP,简单总结下建议设置连接数:connections = (core_count * 2) + effective_spindle_countcore_count表示核数, effective_spindle_count表示one hard disk 。lettuce是用于连接redis的Java驱动包,这个连接池的大小没找到相关文章,但是根据我司的性能工程师的建议设置2倍的核数即:connections = (core_c原创 2020-10-11 21:41:32 · 952 阅读 · 0 评论 -
kafka扩展
以下扩展还未实现,后续会慢慢实现。扩展点一:kafka重试与死信队列kafka在我们系统中用于微服务之间保证数据一致性,但是若是消费失败,无限重试?也无死信队列概念。不扩展也能实现重试与死信队列,重试可以借助第三方工具比如redis,es等,当重试一定次数,同样可以新建kafka队列,用做于死信队列,为什么想去扩展?因为引第三方插件同样带来了复杂性,也保证代码格式的统一,因为目前代码有的消费直接捕获异常,有的不做处理,有的做了重试。目前的扩展的思路,重试次数通过新建队列时指定,存储于zk,支持一个top原创 2020-05-20 22:46:26 · 1043 阅读 · 0 评论 -
记录存储用户视频播放历史记录选型
需求背景,服务端存储app端用户视频播放历史记录。日活跃用户三百万,增长用户播放指标每天20w,召回用户指标每天20w,每个用户存储上限250条数据,每天数据大小340B,按照腾讯视频,爱奇艺视频,十秒同步一次播放进度。按照上面指标,qps过十万妥妥的,虽然之前有日数据千万的经验,和上面这个比小巫见大巫,并未有过这个量的经验,刚开始设定并未考虑用户增量和用户召回量,刚开始技术选型是mongodb或者Es,但是会议讨论是直接被pass,按照这个量需要选用hbase或者cassandra,国门用hbase的原创 2020-05-10 06:33:18 · 1347 阅读 · 4 评论 -
一.kafka0.8概要
改写kafka0.8 Java版本git地址:https://github.com/smipo/mykafka-0.8kafka0.8相比于0.7多了副本和分片。原创 2020-05-09 09:31:08 · 78 阅读 · 0 评论 -
kafka TimingWheel(时间轮)
上篇文章说到HashedWheelTimer结构是个数组+链表,而kafka TimingWheel结构也是个数组+链表,区别呢HashedWheelTimer只有一个轮(一个数组),而TimingWheel是多轮(多数组)。TimingWheel结构是由DelayQueue(这个实质上是object数组,最外层的轮)+buckets(数组+TimerTaskList)组成,如下图kafka TimingWheel源码解析也是一坨,不多说这个了,想说下kafka和netty时间轮的一些区别,kafka的原创 2020-05-09 09:29:00 · 429 阅读 · 0 评论 -
netty HashedWheelTimer(时间轮)
写文章,也是复习的一种,最近需要找工作,一部分面试官需要看博客和gitup之类,现在面试很多套路,蛋疼。HashedWheelTimer源码解析很多,在此也引用一个大佬的源码解析,https://zacard.net/2016/12/02/netty-hashedwheeltimer/ ,我写这篇文章主要是为了一些疑惑,也是为了准备面试官的提问需要博客。4版本HashedWheelTimer,wheel我认为可以理解为数组+链表类似hashmap数据结构。但是HashedWheelTimer最初版本wh原创 2020-05-09 09:27:25 · 262 阅读 · 0 评论 -
elasticsearch6 dsl解析(1)
版本号:6.0.1上两周,es从2升级到6,而我负责升级的东西,只有查询,写dsl写的快吐了,在这里吐槽下,mysql导入es的字段原汁原味的,字段都不转化的。如下图mmp,然后只能自己做了字段转换,言归正传,写了那么多dsl,在想底层怎么解析,一直没时间,趁着元旦写一下,底层是lucene,从lucene先看起来,es6.0.1采用lucene的版本7.0.1,下载代码导入idea,这个可以谷歌。Query中rewrite是重新构建语法数的方法,Query子类如下图类没截全,太多了,其中Mul原创 2020-05-09 09:20:59 · 508 阅读 · 0 评论 -
记录面试BlockingQueue
面试常见的队列比较ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,编程中常用的ArrayBlockingQueue,LinkedBlockingQueue是这两个,现在记录下我面试遇到的ArrayBlockingQueue问题,1.ArrayBlockingQueue是无锁的吗?答:ArrayBlockingQueue是 有界阻塞队列。2.ArrayBlockingQueue为什么实现是阻塞队列?能像LinkedBlockingQueue的原创 2020-05-09 09:16:06 · 284 阅读 · 0 评论 -
Jctools Queue队列
JCTools是一款对jdk并发数据结构进行增强的并发工具,主要提供了非阻塞Map以及无锁Queue的增强数据结构,关于NonBlockingHashMap源码分析我写了篇文章。如果还不了解CAS,可以参考这个博客http://blog.csdn.net/hsuxu/article/details/9467651主要说下JCTools中的Queue,和jdk中的Queue比性能有很大的提升,主要实现利用了CAS和填充缓存行(避免伪共享),典型的空间换时间,然后我在百度时很多文章千篇一律不知道是不是抄袭原创 2020-05-09 09:13:56 · 541 阅读 · 0 评论 -
Java NIO
本来想写关于netty类的时序图,学习下设计模式并学习如何扩展Java nio的,毕竟对于我这种拧螺丝钉的给我一个任务如何写出高内聚低耦合的代码才是重要的,但是找不到合适相关联Java NIO和netty相关的代码,所以我花费了一点时间整理了下相关代码。import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import原创 2020-05-09 09:12:47 · 88 阅读 · 0 评论 -
NonBlockingHashMap无阻塞并发map
cliff click博士无阻塞实现的Map NonBlockingHashMap这个算法是无锁。以下尝试分析下源码。看下kv结构. private transient Object[] _kvs; private static final CHM chm (Object[] kvs) { return (CHM )kvs[0]; } private static final int[] hashes(Object[] kvs) { return (int[])kvs[1原创 2020-05-09 09:11:45 · 1069 阅读 · 0 评论 -
跳表ConcurrentSkipListMap
很久没刷leetcode,今天刷leetcode时,遇到了跳表题目,传送门:中文版leetcode跳表题目,于是学习了下ConcurrentSkipListMap同时也是学习并发,关于ConcurrentSkipListMap是无锁的,跳表平时基本没用过,会讲解少许源码,但是不会细讲,因为关于这个源码讲解百度太多了,讲解之前,先把我抄袭的跳表代码贴出来,去除了并发操作,但是放入leetcode执行时,超时了…import java.util.Comparator;import java.util.con原创 2020-05-09 09:09:57 · 178 阅读 · 0 评论 -
mq延时消息
延时消息项目重一般都能用的到,mq用于解耦,有时可能会用到延时消息(比如定时支付),但是有部分mq暂不支持延时消息,比如kafka,rocketmq支持固定的18个Level延时。当然这些可用其他方案代替,至于用到mq延时的优点后面再说。kafka的优缺点,性能等等百度很多,暂不啰嗦。介绍下kafka延时消费方案。1.kafka消费消息,按照特定格式判断是否需要延时,若需要,则可以用偏移量和topic位置丢到定时任务框架。当时间达到拿到偏移量和topic位置去kafka获取消息消费。2.kafka消费消原创 2020-05-09 09:04:25 · 315 阅读 · 0 评论 -
记录面试map
1.hashmap数据结构?是线程安全吗?为什么不是线程安全?1.8为什么用黑红树?1.8为什么大于8使用红黑树?和avl树比有什么优缺点?2.ConcurrentHashMap数据结构?怎样实现线程安全的?jdk1.8比1.7有什么改变?get为什么不加锁?可以实现无锁吗?迭代器是强一致还是弱一致?以上是我面试中常见的问题,我试着自我总结下答:1.jdk1.7数据结构数组+链表,jdk1.8数组+链表当链表的长度大于包括8转换红黑树。hashmap非线程安全。为什么非线程安全:1)多线程put时,若原创 2020-05-09 09:02:54 · 71 阅读 · 0 评论 -
记录面试线程
ThreadLocal:ThreadLocal面试六连问,这个链接已经很好体现了面试,但是有一点我需要补充,ThreadLocal hashcode冲突时,是采用线性探测的方式进行下一步操作。线程池:运行原理,参数含义,拒绝策略等,或许还有很多深度问题,但是我只遇到了这些。aqs:1.什么是AQS?答:AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,比如ReentrantL原创 2020-05-09 09:01:55 · 77 阅读 · 0 评论 -
HashTable和HashMap的默认大小
这个问题主要还是记录下别人回答的链接,之所以单独写一个文章,仅仅是记录以及更好检索。HashTable的默认大小是质数,HashMap默认大小是2的倍数,这是为什么呢?传送门:http://stackoverflow.com/questions/1145217/why-should-hash-functions-use-a-prime-number-modulus以上的链接是讨论质数问题,第一个高赞的回答,讨论了质数,2的次幂以及String hashcode为什么用31的问题,另又找到了一个链接是关原创 2020-05-09 09:00:12 · 1371 阅读 · 0 评论 -
二.kafka0.7 Broker
git地址链接:https://github.com/smipo/mykafka-0.7服务端启动类是kafka,但是启动之前需要指定配置文件server.properties。0.7版本不涉及副本的概念,分区是配置文件配置的,且topic的创建是由生产者获取每个服务端分区数目在服务端创建多少个分区,服务端最重要的功能是日志的管理,网络通讯,向zk注册服务端的信息,以下分别说说概要。日志的管理:主要两个部分组成log包和message包,log包主要是管理文件的,message包是管理存储文件信息格式原创 2020-05-09 08:57:38 · 128 阅读 · 0 评论 -
四.kafka0.7 消费者
git地址链接:https://github.com/smipo/mykafka-0.7启动类是在test下面的kafka.examples.KafkaConsumerDemo无需配置文件核心类讲解:1.Fetcher负责管理FetcherRunnable2.FetcherRunnable负责获取数据的线程3.TopicCount负责topic数量的统计4.ZookeeperTopicEventWatcher负责监听topic的变化5.ZookeeperConsumerConnector负责监原创 2020-05-09 08:55:50 · 99 阅读 · 0 评论 -
三.kafka0.7 生产者
git地址链接:https://github.com/smipo/mykafka-0.7启动类是在test下面的kafka.examples.KafkaProducerDemo无需配置文件核心类讲解:1.Producer主要是起引导作用2.ProducerPool负责管理Producer包括同步和异步的Producer3.SyncProducer负责通信4.ZKBrokerPartitionInfo负责监听broker的变化以上是生产者同步核心类,在0.7版本之后核心主要是异步,以下是异步核心原创 2020-05-09 08:55:09 · 84 阅读 · 0 评论 -
一.kafka0.7概要
kafka0.7全部是scala语言写的,我用一周的时间把它改成了Java语言,git地址链接:https://github.com/smipo/mykafka-0.7改写这个原因主要是因为0.7版本简单,也熟悉下mq,也是因为每个项目都是版本迭代,使功能更加完善,所以熟悉0.7版本对之后的版本理解也有帮助,0.7版本kafka官网也有文档,因为比较简单,所以之后还会写三篇文章,主要针对服务器broker,生产者,消费者。...原创 2020-05-09 08:53:22 · 142 阅读 · 0 评论 -
lucene概述
lucene各种文章介绍都有,这篇文章介绍下很多文章不曾说的为什么快,大多文章就是说倒排索引,然后就没然后了,lucene反向索引存储主要有两个文件(所谓反向信息是指词(Term) –> 文档(Document)),词典文件和词典索引文件,版本不同,后缀名称也不同,因为一个索引会包含多个字段,文件实现是按照字段排列实现,这也是为什么段一旦刷到磁盘,不可更改的原因。词典索引文件是论文fst实现,论文链接:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=原创 2020-05-08 22:52:47 · 101 阅读 · 0 评论