Posts by Year

2023

Springboot集成邮件服务

less than 1 minute read

集成步骤 添加starter依赖 添加相关配置 调用JavaMailSender发送邮件 添加starter依赖

经典同步问题

less than 1 minute read

生产者-消费者问题 生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。生产者和消费者共享固定大小的缓冲区。

Back to Top ↑

2022

分布式锁

less than 1 minute read

分布式锁一般有以下几种实现方式: 数据库乐观锁 利用主键唯一的特性,如果有多个请求同时提交到数据库的话,数据库会保证只有一个操作可以成功,那么我们就可以认为操作成功的那个线程获得了该方法的锁,当方法执行完毕之后,想要释放锁的话,删除这条数据库记录即可。 Memcache...

并查集

less than 1 minute read

算法简述 并查集是一种树形的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常在使用中以森林来表示,进行操作。 算法复杂度分析 时间复杂度 = O(1) N次合并M次查找的复杂度 = O(M α(N)),其中α是Ackerman函数的某个反函数,...

快速排序

less than 1 minute read

算法简述 不稳定排序 时间复杂度(平均)= O(nlog2n) 时间复杂度(最坏)= O(n2) 时间复杂度(最好)= O(nlog2n) 空间复杂度 = O(nlog2n) 原理讲解 应用分治法思想,使数组中的每个元素与基准值比较,数组中比基准值小的放在基准值的左边;大的放...

快速幂

less than 1 minute read

原理讲解 幂运算即求 $a^n$。 最基础的方法是可以通过循环累乘,时间复杂度为 $O(n)$ 加速幂运算可以从减少累乘次数入手,合并某些步骤为一步。如果n能被2整除,那么可以先得到 $a^{n/2}$ 的值,再进一步求取 $a^n$,但时间复杂度仍为O(n)。 若能找到 $2^k = n$,原有运...

Back to Top ↑

2021

Raft协议

less than 1 minute read

Raft是分布式一致性协议之一。维护多个server之间的一致性。 每个server都以Follower角色启动,根据不同条件切换为不同角色。

Prometheus之OOM故障

less than 1 minute read

现象 当数据量过大时访问服务prometheus端口拿不到响应

Back to Top ↑

2020

Flink

less than 1 minute read

简介 Flink提供面向流式处理的接口(DataStream API)和面向批处理的接口(DataSet API) 分布式 高吞吐 压力下保持正确 操作简单 低延迟 时间正确/语义化窗口

红黑树

4 minute read

红黑树是一种特殊的二叉查找树,满足二叉查找树的特征:任意一个节点包含的键值 >= 左孩子的键值,<= 右孩子的键值。

MurmurHash算法

less than 1 minute read

MurmurHash是一种非加密型哈希函数,适用于一般的哈希检索操作。已经被很多开源项目如Redis, Memcached, Cassandra, Lucene等应用。对于规律性较强的key,MurmurHash的随机分布特征表现更良好。

Trie 字典树

1 minute read

Trie树即字典树,一种用于快速检索的多叉树数据结构。

定时任务

2 minute read

在JAVA开发过程中经常会遇到使用定时任务的情况,现有的实现方式有以下几种: 1. Timer 2. ScheduledExecutorService 3. SpringTask 4. Quartz 5. XXL-JOB

Back to Top ↑

2019

JWT

less than 1 minute read

JWT(Json Web Token)是目前最流行的跨域认证解决方案。

Hadoop

less than 1 minute read

简介 Hadoop是一个开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储 适合 大规模数据 流式数据(写一次,读多次) 商用硬件(一般硬件)

HyperLogLog算法

less than 1 minute read

HyperLogLog简介 HyperLogLog算法简称HLL,作用是提供不精确的去重计数。存在以下特点: 代码实现较难 能够使用极少的内存统计巨量数据。例:在Redis中实现的HyperLogLog,仅需12K内存就能统计 **264** 条数据 计数存在一定误差,且误差率整体较低。标准误差为 ...

快速幂取模

less than 1 minute read

原理讲解 幂取模即求 $a^b \% mod$。 最基础的方法是可以通过循环累乘,最后取模,时间复杂度为O(n)

ZooKeeper

less than 1 minute read

ZooKeeper是一个分布式的开源分布式应用程序协调服务,是Google的Chubby的一个开源实现,Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等

布隆过滤器 Bloom Filter

less than 1 minute read

由一个很长的二进制向量和一系列随机映射函数组成。布隆过滤器可用于检索一个元素是否在一个集合里

less than 1 minute read

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底 栈就是一个桶,先进后出(FILO/先进后出)

链表

1 minute read

是一种线性表,但不按线性顺序存储数据而是在每个节点存储后继指针指向下一个节点。无需预先知道数据大小,充分利用计算机内存空间,实现灵活的内存动态管理。无法随机读取元素,而且空间开销比较大 插入的时间复杂度 = O(1) 查找的时间复杂度 = O(n)

Redis原理

less than 1 minute read

Redis 是 Nosql 单线程,但可处理10w/s的并发。使用JAVA对Redis进行操作 类似于 jdbc接口标准对mysql。jdbc对于mysql有多种实现类,常用druid;而JAVA对于Redis,常用Jedis 在Redis中,key即byte[] (String) Redis的数据结构(valu...

JAVA堆内存浅析

less than 1 minute read

JAVA堆的特点 JAVA堆是JAVA虚拟机所管理的内存中最大的一块

ElasticSearch

3 minute read

ElastciSearch 简介 ElastciSearch 是一个分布式可扩展的实时搜索和分析引擎,建立于全文搜索引擎 Apache Lucene(TM) 基础之上,具有以下功能: 全文搜索

MapReduce

1 minute read

为什么需要 MapReduce 海量数据受硬件资源限制,无法单机处理

行为型模式

4 minute read

策略模式 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化

结构型模式

2 minute read

适配器模式 意图:将一个类的接口转换成客户希望的另一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

创建型模式

2 minute read

单例模式 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点 适用性: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

Spring Cloud整体架构

less than 1 minute read

介绍: 基于Spring Boot实现的云应用开发工具,用于管理微服务,关注全局。 包括Spring Cloud Netflix、Config配置中心,Bus事件、消息总线负责传递消息等。

Spring AOP的实现原理

1 minute read

AOP介绍 AOP利用“横切”的技术将位于同一层面多个类的公共行为封装为一个可重用模块即“切面”,降低重复代码与模块耦合。 AOP将系统划分为两部分:核心关注点与横切关注点。 核心关注点使用业务逻辑处理 横切关注点常发生于核心关注点多处且基本相似,如日志、权限认证等。 AOP实现原理 A...

JAVA8新特性-函数式编程

less than 1 minute read

概念:函数式接口指是有且只有一个未实现的方法的接口,一般通过@FunctionalInterface表明某个接口是一个函数式接口。函数式接口是Java支持函数式编程的基础。 核心:以处理数据的方式处理代码。 用途:精简代码,允许在更高层次更自然的描述业务逻辑,表达能力更强,便于实现并行化。 语法...

Back to Top ↑