- 博客(80)
- 收藏
- 关注

原创 通过树结构的演变以及实现来辩证的看数据结构
1. 单链表、双链表、循环链表的设计实现2. AVL树的构建和实现3. 红黑树的演变和实现4. Trie树的实现和应用5. 堆如何实现优先队列和堆排序6. 跳跃表在redis中的应用
2021-10-18 00:53:10
405
原创 Springboot中如何记录好日志
springboot项目如何配置日志,日志门面和日志实现的区别是什么,如何通过日志切面将日志和代码解耦,这里都有分享。
2024-02-26 18:16:27
2415
原创 并发编程08-线程通信之Condition机制
1. 介绍Condition接口的核心方法2. 介绍Condition如何使用3. 介绍await、signal方法的原理4. 以LinkedBlockingDeque为例看阻塞队列中是如何使用Condition机制的
2022-05-11 01:11:54
193
原创 并发编程07-线程安全解决方案之ReentrantLock锁
1. Lok接口的规范2. ReentrantLock的使用以及简单说明原理3. 可重入锁的概念
2022-05-08 15:54:01
478
原创 并发编程05-线程通信之wait¬ify
线程通信之wait¬ify在前面几节我们说过,java中每个线程在工作的时候,都会为其在栈区分配私有的线程栈,将共享变量拷贝到私有线程栈的工作内存中,进行处理。当线程运行完业务逻辑以后,私有的线程栈会被销毁。因此多个线程之间是无法感知相互的状态,无法进行通信的。但是有时候我们又确实需要让多个线程之间进行通信,比如最经典的生产者消费者模型。什么是生产者消费者模型生产者消费者模型是我们生活中很常见的一种模型,比如中午排队买饭,后厨的师傅会将做好的各种菜放在盘子里,我们排队打饭,然后结账,那么
2022-05-06 00:33:11
1169
原创 并发编程03-从图灵机和冯诺依曼到计算机内存模型和JMM模型分析线程不安全的原因
1. 图灵机的工作方式2. 冯诺依曼体系架构3. 计算机内存模型4. JMM模型5. 线程不安全的原因
2022-04-30 19:23:28
636
1
原创 并发编程02-什么是线程安全以及Java虚拟机中哪些数据是线程共享的,那些是线程私有的
1. 介绍什么是线程安全2. 总Java虚拟机运行时数据区的角度看那些数据是线程共享的,那些是线程私有的
2022-04-28 00:21:20
1899
1
原创 并发编程01-Java创建和使用线程的四种方式
1. 介绍如何如何通过继承Thread类、实现Runnable、实现Callable接口创建线程2. 介绍如何通过线程池创建线程3. 介绍线程池的工作原理4. 什么是守护线程
2022-04-27 00:18:33
2464
1
原创 SpringBoot Data整合ElasticSearch
介绍spring boot项目如何通过RestHighLevelClient、ElasticsearchRepository、ElasticsearchRestTemplate操作ElasticSearch
2022-01-17 22:50:34
2641
2
原创 ElasticSearch查询DSL之全文检索(match_all、match、match_phrase、match_phrase_prefix、multi_match)
在multi match查询的时候,有时候候可能存在这样的场景,比如说你在CSDN搜索一篇包括mutli和match关键字的博客,这两个关键字可能在文章的标题中有,在内容中也有,但是明显在标题中同时出现这两个关键字的文章可能是我们更关心的,也就是相关性更大的,那么如何让这篇文章脱颖而出,排列在搜索结果的最前面呢?,如果我们要查找的两个单词按照顺序同时出现,那么肯定是比分别出现在不同的字段中是有意义的,我们就把两个单词同时按照顺序出现在一个字段中这种情况叫做。的算分策略是一致的,我们讨论。
2022-01-13 11:07:11
10279
原创 ElasticSearch中以词为中心的跨字段查询方式介绍(corss_fields)
DSL中的multi_match有好几种查询方式,比如best_fields和most_fields,他们都是以词为中心的查询方式,如果遇到像查询地址、姓名这种一个完整的信息分散在不同的字段就显得有些力不从心,这里介绍针对这种情况的查询方式:cross_fields
2022-01-13 10:07:15
1275
原创 ElasticSearch查询DSL之Term级别查询(ids、exists、prefix、range、wildcard、regexp、trem、terms、fuzzy)
总结了ElasticSearch中term-level查询的Api,其中包括ids、exists、prefix、range、wildcard、regexp、term、terms、fuzzy这几种dsl的用处和语法。
2022-01-09 12:02:15
4255
1
原创 ElasticSearch查询DSL之组合查询(bool、boosting、constant_score、dis_max)介绍
主要介绍DSL中的组合查询,包括bool查询、boosting查询、constant查询和disjunction查询,并提到了如何通过explain查看dsl的执行计划和算分方法。
2022-01-08 12:10:19
2634
2
原创 从磁盘结构和索引来看B/B+树
从磁盘的结构触发,讨论了数据如何在磁盘上存储以及如何通过索引进行优化。针对索引又讨论了稠密索引和稀疏索引的区别和应用。在进一步讨论了M路搜索树和如何从M路搜索树演化来B树以及B+树。
2021-12-19 14:25:17
816
原创 图论基础以及深度优先搜索和广度优先搜索
1. 介绍树的前序遍历、中序遍历、后序遍历、层序遍历2. 介绍图论基础概念3. 介绍图的邻接矩阵、邻接表的表示方法以及邻接表的优化4. 图的深度优先遍历、广度优先遍历
2021-08-06 23:41:19
494
2
原创 海边的卡夫卡之 - kafka的基本概念以及Api使用
海边的卡夫卡之 - kafka的基本概念以及Api使用kafka的应用以及与其他MQ的对比关于kafka的介绍,也许没有人能比官网更具有话语权,所以这里可以参考官网了解一下kafka:Kafka介绍。这里从一下几个方面稍微总结一下:kafka的核心能力:高吞吐量:RabbitMq、RocketMq和Kafka中,吞吐量最高的就是Kafka可扩展:生产集群可以弹性扩展到至1000多个broker,数十万个分区,每天处理万亿条消息,PB级数据,持久化:每个topic可以有多个分区,每个分区又可以有
2021-06-08 01:14:51
561
原创 Redis做分布式锁的问题以及Redisson源码详解
详细介绍了如何用setnx做分布锁,以及用setnx的问题。然后介绍了如何用setnx+lua脚本解决上面的问题。在探讨了setnx+lua脚本存在的问题以及如何使用Redisson解决和Redisson的加锁的源码解析。
2021-05-30 13:47:59
242
8
原创 05-Netty的零拷贝技术
零拷贝堆内存和直接内存什么是直接内存要说零拷贝,那我们先要知道什么是直接内存和堆内存。所谓堆内存就是分配给JVM堆区的内存,而直接内存是java通过调用navite方法可以直接分配JVM之外的内存区域,所以我们也把这块内存叫做堆外内存。而我们可以在堆区通过一个DirectByteBuffer去引用这块内存。因为这块内存是没有交给JVM去管理的,比较容易发生内存溢出,为了避免一直没有FULL GC,导致耗完物理内存,我们可以通过参数-XX:MaxDirectMemorySize 指定直接内存的大小,这样
2021-04-11 01:32:00
155
原创 03-消息的可靠性投递和死信队列
消息的可靠性投递消息投递的过程前面说了RabbitMq的几种工作模式,到此我们也可以大概总结书RabbitMq投递一个消息到消费端所经历的过程了,如果用一张图来表示,大概可以分为下面几步:Step1:生产者发布消息到交换机Step2:交换机根据路由key将消息投递到指定的队列Step3:消费者监听队列,从队列种拉取消息进行消费,消息被拉取后,就会被队列删除这其中每一步都是不可靠的,都有可能造成消息的丢失。所以每一步RabbitMq也都为我们提供了一些保证措施。Step1:消息确认生产者
2021-04-10 16:21:01
307
2
原创 01-初探MQ-MQ的三大使用场景:应用解耦、异步提速、削峰填谷
综上所述,MQ有他的优势,主要体现在三个方面应用解耦:提高系统容错性和可维护性异步提速:提升响应速度,优化用户体验削峰填谷:高并发的时候,可以有效保证系统的稳定性当然他也有弊端复杂度提高,我们需要解决消息丢失、积压、幂等等各种情况一旦MQ宕机,对业务有影响。
2021-03-21 18:55:38
5526
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人