自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 Spring 整合 Elasticsearch

Spring 项目中专门有链接ES的,可以方便快速的链接ES。官方文档一般都会有版本对照的说明同时也提供了更为方便的“Spring Boot Starter Data Elasticsearch”。在这里我们使用的是“Spring Boot Starter Data Elasticsearch » 2.6.15” 这里要注意结合自己项目版本选择正确的“Spring Boot Starter Data Elasticsearch“版本引入到项目即可</</</</

2024-03-12 15:49:51 1419

原创 Elasticsearch 排序与评分问题

我们es中保存了商户所有的商品信息,在一个下拉框中需要能多维度的定位到商品信息(如输入商品名+规格等等),因为涉及字段较多,所以我们还为每个字段单独设置了权重,且在使用should + multi_match 时指定了minimum_should_match(最小的匹配数量),以此来避免出现无关数据。测试发现我们输入与第一项匹配值与预想有一定差距,比如下图:我们输入了全脂牛奶15ml,可是预想的15ml排到了第三行,一个50ml排到了第一行。我们在不停调整权重后也不能解决。

2024-03-12 10:39:25 1505

原创 canal 1.1.7安装 (同步es7)

canal读取Mysql的 binlog文件实现数据同步操作,所以开启极其简单且网上大把教程,这里跳过这一步。查看binlog二进制文件信息,执行查看内容。

2024-03-11 18:35:55 1282

原创 elasticsearch说明

elasticsearch是构建在Apache Lucene上的使用Java语言开发的开源分布式搜素引擎。Lucene是一个开源的全文搜索引擎工具包,它仅是一个工具包而不是一个完整的工作引擎,并且只能被Java应用程序调用,elasticsearch基于REST API,因此任何开发语言开发的任何应用程序都可以通过JSON格式的HTTP请求来管理elasticsearch集群。elasticsearch封装并扩展了Luncene,使存储、索引、搜索都变得更快、更容易。

2024-03-11 14:07:01 366

原创 G1与 CMS收集器对比

CMS 收集器CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,基于并发“标记清理”实现,在标记清理过程中不会导致用户线程无法定位引用对象。仅作用于老年代收集。它的步骤如下:初始标记(CMS initial mark):独占CPU,stop-the-world, 仅标记GCroots能直接关联的对象,速度比较快;并发标记(CMS concurrent mark):可以和用户线程并发执行,通过GCRoots Tracing 标记所有可达对象;重新标

2021-09-01 22:44:38 605

原创 分布式事务

两阶段提交 2pc两阶段提交协议,简称2PC(2 Prepare Commit),是比较常用的解决分布式事务问题的方式,要么所有参与进程都提交事务,要么都取消事务,即实现ACID中的原子性(A)的常用手段。成功提交事务流程阶段一:事务询问协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。执行事务各参与者向协调者反馈事务询问相应阶段二:发送提交请求协调者向所有参与者发出commit请求事务提交参与者收到 commit 请求后,会正式执行

2021-08-27 00:03:34 128

原创 MySQL主从模式

主从复制主从复制原理图主从复制整体分为三个步骤:主库将数据库的变更操作记录到Binlog日志文件中从库读取主库中的Binlog日志文件信息写入到从库的Relay Log中继日志中从库读取中继日志信息在从库中进行Replay,更新从库数据信息。这里有几个问题:主机宕机后,数据可能丢失从库只有一个SQL Thread,主库写压力大,复制很可能延时解决方法:半同步复制(解决数据丢失问题)并行复制 (解决从库复制延时问题)半同步复制为了提升数据安全,MySQL让Master

2021-08-23 22:50:17 161

原创 Spring Boot 一些基础知识

Spring Boot 核心注解@SpringBootApplication启动类上面的注解是@SpringBootApplication,它也是 Spring Boot的核心注解,主要组合包含了以下3个注解:@ SpringBootConfiguration:组合了@ Configuration注解,实现配置文件的功能@ EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@ SpringBootApplication( ex

2021-08-22 11:43:25 169

原创 Redis主从架构

为什么引入主从单机的 redis,能够承载的QPS大概就在上万到几万不等。对于緩存来说,一般都是用来支撑读高并发的。因此架构做成主从 (master- slave}架构,一主多从,主负责写,并且将数据复制到其它的 slave节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。redis replication->主从架构->读写分离->水平扩容支撑读高并发redis replication的核心机制redis采用异步方式复制数据到 slave

2021-08-17 23:33:51 83

原创 简析数据库扩容方案

扩容方案当系统用户进入了高速增长期时,即便是对数据进行分库分表,但数据库的容量,还有表的数据量也总会达到天花板。当现有数据库达到承受极限时,就需要增加新服务器节点数量进行横向扩容。首先来思考一下,横向扩展会有什么技术难度?数据迁移问题分片规则改变数据同步、时间点、数据一致性提供以下两种方案参考:停机扩容这是一种很多人初期都会使用的方案,在数据库较少时,业务较为简单时使用,大致步骤:停止对外服务。新增N哥数据库,写数据迁移程序,将原有的X个库数据导入最新的Y个库中。(比如更改分片

2021-08-15 21:21:18 3891

原创 消息中间件一些基本知识

RocketMq 基本组成Producer消息生产者,生产者的作用就是将消息发送到MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到MQ。Producer Group生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可。Consumer消息消费者,简单来说,消费MQ上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。Con

2021-08-09 23:47:10 171

原创 BIO NIO AIO

基本概念同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。BIOBIO 全称Block-IO 是一种阻塞同步的通信模式。是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。设计原理:服务器通过一个Acceptor线程负责监听客户端请求和为每个客户端

2021-08-09 22:00:37 101

原创 Redis一些基础知识

Redis 为什么这么快完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在內存中。数据结构简单,对数据的操作也简单。采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;使用多路I/O复用模型,非阻塞IO;数据类型数据类型存储的值应用场景String字符串做简单的键值对缓存List列表存储一些列表型的数据结构,类似文章评

2021-08-08 19:28:48 121

原创 Dubbo 一些基础知识

Dubbo 核心组件Provider:暴露服务的服务提供方Consumer:调用远程服务消费方Registry:服务注册与发现注册中心Monitor:监控中心和访问调用统计Container:服务运行容器Dubbo服务注册与发现流程服务容器 Container 负责启动,加载,运行服务提供者。服务提供者 Provider 在启动时,向注册中心注册自己提供的服务服务消费者 Consumer 在启动时,向注册中心订阅自己所需的服务。注册中心 Registry返回服务提供者地址列表给消

2021-08-08 17:13:23 166

原创 并发编程一些基础知识

并发编程三要素:原子性:一个操作集要么全部成功,要么全部失败可见性:一个线程对共享线程变量修改,另一个线程能够立刻看到有序性:程序执行顺序按照代码先后顺序执行。解决方法:原子类(Atomic),synchronized,lock,可以解决原子性问题。synchronized,volatile,lock,可以解决可见性问题Happeds-Before 规则可以解决有序性问题进程与线程进程内存中应用程序都有自己的一块内存空间,一个进程有多个线程线程负责当前进程中任务的执行,一个

2021-08-08 15:20:36 225

原创 JVM 一些基础知识

JVM 主要组成部分及其作用JVM主要包含两个子系统和两个组件两个子系统为:类装载子系统(里面含有类加载器)执行引擎(即时编译器,GC垃圾回收器)两个组件为:运行时数据区(JVM内存)本地接口Java程序运行过程:1.编译器将Java代码转为字节码2.类加载器将字节码加载到内存中3.再将其放入运行时数据区(JVM)内存的方法区内4.将字节码传入执行引擎,将其编译为系统指令5.将系统指令传输至本地方法接口,再使用本地方法库执行。简述JVM内存模型程序计数器当前线程所

2021-08-06 18:22:44 198

原创 MySQL 一些基础知识

聚簇索引与非聚簇索引区别与使用场景聚集索引和非聚集索引的根本区别是表中记录的物理顺序和索引的排列顺序是否一致。聚簇索引的表记录的物理顺序与索引的排列顺序一致优点查询速度较快,第一个索引值被查询到,具有连续索引值的记录也一定物理的紧跟其后。缺点对表记录修改速度较慢,为了保证表中记录的物理顺序与逻辑顺序一致,而把数据插入至数据页相应的位置,必须在数据页进行数据重排,降低了执行速度。在插入新记录时数据文件为了维持 B+Tree 的特性而频繁的分裂调整,十分低效。所以建议使用聚簇

2021-08-05 19:40:47 113

原创 Spring Boot 源码浅析

自动装配自动装配:根据我们添加的jar包依赖,会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用@autowired或者@resource等注解来使用它。那么Spring Boot如何实现自动装配的呢?这里讲一下大致的步骤:1.从spring.factories配置文件中加载自动配置类。2.在加载的自动配置类中排除@EnableAutoConfiguration注解的exclude属性指定的自动配置类。3.然后再用 AutoConfigurationImportFilter

2021-08-05 00:09:48 86

原创 UV 统计- HLL算法(JAVA实现)

HLL是什么HyperLogLog(HLL)算法经常在数据库中被用来统计某一字段的Distinct Value,比如Redis的HyperLogLog结构。目前在我们项目中用于UV统计。网上有一篇大佬博文十分深入:https://www.jianshu.com/p/55defda6dcd2注意:1.此算法是近似估算值,该算法能在一定误差内近似统计去重数,可以输出空间内去重数大小,若要求UV详细数据则该方法不适用。2.需要在空间与准确性中取舍。若要求准确性较高,则HLL生成的空间就会较大。基本流

2021-07-28 23:04:45 2090

原创 MySQL索引原理

一、索引类型索引能显著提升查询速率,一般影响到where查询,order by排序等查询场景。当然降低插入,修改索引列速率。从存储结构上划分:B Tree索引(B + Tree 索引)、Hash索引、FULLTEXT全文索引、R Tree索引从应用层次划分:普通索引、唯一索引、主键索引、复合索引从索引键值划分:主键索引、辅助索引从逻辑关系划分:聚簇索引,非聚簇索引二、索引原理通俗的讲:索引是存储引擎用于快速查找记录的一种数据结构,需要额外的开辟空间和数据维护工作。索引是物理数据页存储,

2021-07-22 00:08:46 239

原创 MySQL基础架构

一、MySQL体系架构引用网图:MySQL 自上而下可分为网络连接层、服务层、存储引擎层和系统文件层。网络连接层客户连接器:提供MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术。比如JAVA 通过 JDBC API连接连接。服务层服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。连接池:负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。系统管理和控制工具:例如备份恢复、安全管理、集群管理

2021-07-18 23:37:10 114

原创 Spring一些基础知识点

1.BeanFactory与ApplicationContext区别先看下接口继承/实现关系这里可以清楚看到ApplicationContext是BeanFactory接口的一个子接口,当然ApplicationContext下也有很多子接口与实现类,这里我列举了一个配置的子接口(ConfigurableApplicationContext)。在spring中BeanFactory是IoC容器的顶层接⼝,它只是⽤来定义⼀些基础功能,定义⼀些基础规范,ApplicationContext是它的⼀个⼦接

2021-05-30 19:50:33 120

原创 简述Tomcat体系结构

简述Tomcat体系结构Tomcat请求处理流程Tomcat核心组件Coyote 连接器Catalina 容器Tomcat请求处理流程流程大致说明:用户请求至Tomcat服务器,Tomcat将其封装为ServletRequest对象。Servlet容器初始化时会初始化部署在tomcat下业务类,放入Servlet容器中(用户请求前,tomcat启动时)。第1步执行完后会使用ServletRequest对象中的信息(url,请求方式)等去Servlet容器中寻找对应的Servlet。如果Ser

2021-05-23 19:27:08 167

原创 Spring MVC无xml配置

spring mvc 无xml配置如何配置与说明前置知识具体配置与说明入口类Initializer基本配置类RootConfigspring mvc 基本设置类ServletConfig如何配置与说明前置知识前置知识:在servlet3.0后servlet容器会搜索classPath下的META-INF下javax.servlet.ServletContainerInitializer文件中配置的类,这个类需要实现javax.servlet.ServletContainerInitializer

2021-05-20 18:47:49 325

原创 实现简单的MyBatis框架

实现简单的mybatis框架一、传统JDBC存在的问题与解决思路传统JDBC存在的问题解决思路二、实现简单的mybatis框架流程图一、传统JDBC存在的问题与解决思路首先我们要知道为什么我们需要引入向MyBatis这样的ORM框架(传统JDBC访问存在的问题),以及怎样才能解决传统所发现的问题(实现简单的ORM框架)传统JDBC存在的问题上图是一个简单的原生JDBC操作,我们不难发现存在以下问题:数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能sql语句在代码中硬编码,造成代码不

2021-05-18 01:04:43 270 1

原创 第一篇CSDN博客

第一篇CSDN博客说说自己为什么开始写博客最后写给自己的说说自己大学计算机科学与技术本科于18年毕业,因为家在深圳原因,所以毕业后也就在深圳工作发展了,目前从事Java开发一职,个人性格平和,多数时候还是比较内向安静的(是不是程序猿大多都是这样的?)。偶尔会关注研究下新的技术,喜欢乒乓,追番(各番都追,标准二刺猿),打机(PC,主机双党)。为什么开始写博客写博客的想法其实早就有了,大概在大三的时候看到一个大佬的博客,被惊艳到了(特别是整合了当时比较流行的liv2d webGL,直接点燃二刺猿之魂),

2021-04-01 15:39:50 134

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除