自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发编程-锁分类及实现及原理

~待完成。

2024-09-30 16:56:37 106

原创 并发编程三大特性(原子性、可见性、有序性)

未完待续~~

2024-09-30 16:55:34 162

原创 深入理解synchronized

1、锁消除:是指在加锁的代码块或方法中,并没有操作临界资源,锁消除机制不会执行加锁操作,因为加不加锁,意义都不大,没影响,因此不需要加锁;偏向锁:当每次都是同一个对象来获取锁时,没有发生锁资源竞争,当再次获取锁资源时,如果发生锁竞争,会优先偏向之前每次都获取的那个对象;轻量级锁:当发生锁竞争时,不挂起线程,而是采用自旋的模式进行锁资源竞争,自旋就是尝试重新获取;重量级锁:当自旋还是获取不到锁资源,则采用传统的synchronized模式,即挂起线程等待。

2024-09-23 10:03:42 250

原创 Elasticsearch核心

索引类型type:在es7.0及以前有这个概念,相当于索引分类,一个索引可以 由多个type组成,相当于数据的逻辑分类,es8.0后删除了该概念,过渡期默认的索引类型是_doc;master:候选节点,当主节点宕机了,master有可能成为主节点,一个集群节点可能有多个候选节点,五角星节点才是主节点;1、节点:一个节点(Node)就是一个es进程,一个服务器可以部署多个节点。lngest:预处理节点,比如日志,可以先处理,过滤,再查询。data:数据节点,所有的数据都存放在数据节点上。

2024-08-20 13:55:08 566

原创 Elasticsearch基本概念和安装

即只需要关闭安全检查,在本地,不需要增加任何配置,es会自动组件集群,根据默认端口自增,生成多个节点组成的集群;(2)配置ES的java环境变量,注意,变量名一定要写ES_JAVA_HOME,因为ES默认会在本地找这个变量名,如果找不到,才会使用自带的jdk;java开发,Lucene框架,json格式的数据格式,支持分布式、PB级海量数据、高性能、高可用、易扩展;(2)OLAP:联机分析处理类数据库,es,查询,全文搜索;1、开发模式,一般用于非生产环境,windows,非集群;

2024-08-20 13:54:38 823

原创 Redission

Redission:底层基于Netty,线程安全,提供很多分布式服务(分布式锁、分布式集合,分布式下的JUC封装),延迟队列;封装了自己的类型,比如getBuket(key,value)SpringDataRedis: RedisTemplate,默认线程安全,底层基于Netty(异步支持),用于一般的操作。Jedis:简单,和命令最相似, API最丰富,多线程,不安全。分布式锁与本地锁的本质是一样的,将并行的操作转换成串行操作。当可以不存在时,返回true,存在,返回false;

2024-08-20 13:45:47 161

原创 软件测试基础入门

(2)什么是等价类划分法:在所有的数据中, 具有某种共同特征的数据集合进行分类划分,比如账号输入,字母+数字是一类,纯数字是一类,纯字母是一类;3、接口测试: 后端实现接口,使用工具或代码对服务端接口进行测试(根据接口文档),JMeter,Postman;(4)安全检查,密码输入是否隐藏,是否要求https,传输报文加密检查,浏览器地址栏是否包含敏感信息检查;比如:6~8位字符,有效取一组,1234567,无效取两组数据:<6取一组,>8取一组。2、输入密码:123456、123356a、a123456;

2024-08-20 13:44:49 1059

原创 Oracle基础

找到安装目录下的deinstall.bat,双击执行(需要管理员身份运行)一、oracle国内网站:https://oracle.com/cn/Oracle11g,2007年发布的文档版本,相当于jdk8。Oracle19c,c表示cloud云版本,大数据版本;一般要么使用11g,要么使用19c,开发环境使用11g。卸载软件Universal installer,(4)等待一会出现安装步骤,然后next就行;用户名:system/123456。删除安装目录下的文件。

2024-08-20 11:52:22 323

原创 Oracle基本SQL操作-用户角色权限管理

一般情况下,一个用户可以有多个角色,比如拥有connect和resource就可以对数据库进行操作了;语法:GRANT ROLE|RESOURCE TO USER(ROLE);一般情况下,将权限赋予给角色,将角色赋予用户,系统权限只由dba授权,

2024-08-20 11:51:58 242

原创 Oracle基本SQL操作-SQL语句

主键约束:能够唯一标识该字段的唯一约束+不能为空,一张表只能出现一个主键,但可以出现联合主键(一个主键包含多个字段);DML:数据操作语句,insert、update、delete、select。TCL:事务操作语句,begin,commit、rollback,savepoint;count(1) :在列后面再加一列,值用1填充,然后进行统计,也会包含空的结果。唯一约束:有值的情况下,不能重复,不包括null,字段后加unique;DCL:数据控制语句,权限控制,grant、revoke;

2024-08-20 11:51:40 855

原创 Mysql的分支与变种、替代

MariaDB:sun公司不认同mysql的数据处理流程, 其中一成员创建了MariaDB,主要是bug修复和功能扩展,mysql的超集(超越的集合);Drizzle:C++写的(mysql是C语言写的),主要是高可用、高性能,多核服务器。MyIsam:不支持事务,表锁,支持地图数据类型,关注性能,表空间大,不适合高并发。InnoDB:默认,支持事务,行锁,支持主外键,关注事务,表空间小,适合高并发。Mysql的替代:PostgreSQL;Mysql的分支与变种。

2024-08-20 11:50:53 151

原创 Oracle的PL/SQL编程

一、PL/SQL编程:Procedural Language,过程语言与sql(结构化查询语言)的结合而成的编程语言,增加变量、plsql优缺点:在单数据库里面适用,能提升效率,但是在分布式数据库中不适用。PL/SQL就是方法和存储过程中的一部分。--声明变量,变量名称用v_开头。

2024-08-20 11:50:34 123

原创 计算机操作系统

作为硬件和应用之间的接口:程序接口(应用程序访问操作系统的接口叫系统调用),命令接口(cmd命令)、GUI页面(GUI页面操作底层也是调用命令)(5)并行指在同一个时刻,能处理多少件事的问题,具有很明显的物理局限性,比如4核操作系统在一个时刻就只能处理4件事情;1、基础概念和发展:操作系统(Operation System,简称OS),是一个计算机程序,管理硬件与软件的程序;(1)同时共享访问方式:同一个时间段内可以使用共享的资源,比如磁盘,内存,允许多个程序同时访问磁盘、内存;

2024-08-20 11:49:40 428

原创 并发编程-基础概念

开销不同,线程的创建和终止时间段,且 线程之间的切换比进程之间的切换速度快很多,进程之间的通讯更麻烦,一般借助内核才能实现,而线程之间的通讯相对简单;资源不同,同一个进程下的线程共享进程中的一些资源,线程同时拥有自身的独立存储空间,进程之间的资源通常是独立的;线程:线程依附于进程,是cpu调度的基本单位,每个线程执行的是某个进程的代码的某个片段;数量不同,进程一般指一个,一个应用程序,线程依附于进程,一个进程中可以有多个线程;本质不同,没有可比性,进程是操作系统分配的资源,而线程是cpu调度的基本单位。

2024-08-20 11:48:28 228

原创 Kafka环境搭建和topic管理

三、使用脚本实现topic、生产者和消费者。关闭防火墙&防火墙开机启动。同步时钟(集群环境需要)安装Zookeeper。配置主机名和IP映射。

2024-08-20 11:48:04 366

原创 线程的创建、状态及常见方法

实现Callable接口:实际也是实现Runnable接口,进行了扩展,有返回值,使用的是同步非阻塞模式;1、主要区别:同步异步强调被调用方是否反馈结果,而阻塞非阻塞指调用方是否一直等待被调用方反馈结果;继承Thread:java是单继承,如果使用这种方式,则不能再继承其他类(一般情况下不用);实现Runnable接口:可以解决单继承问题,线程执行完就结束,没有返回值;三、线程的6种状态(也可以是5种,但java种就是6种)3、实战演练各种状态。

2024-08-20 11:47:45 441

原创 Kafka基本概念介绍

也可以采用轮询的方式进行消息发送到分区;顺序写入:kafka会把收到的消息写入磁盘,保证数据不丢失,一般情况下,写数据到磁盘经历磁盘寻址和写入,而对磁盘而言,寻址是机械动作,效率很低;(2)没有限制:生产者写入消息,消费者可能被多个消费者消费,消消费消息的偏移量,消息可以长时间保息服务器仅仅是保存消费者存,每个消费者之间互不影响,在大数据场景使用多。如果是,则product发送后马上flush磁盘,称为同步发送(sync),如果否,则发送后立即返回,由操作系统去flush磁盘,称为(async);

2024-08-20 11:46:47 1198

原创 幂等问题及解决方案

二、应用支付场景:下订单时,如何保证没有重复订单,比如用户将商品添加购物车后,反复点击去支付按钮,此时后端会收到多条创建订单的请求,如何保证不重复生成订单?首次提交数据,删除成功,此时有新数据进来,重复提交的delete请求就会删除新数据导致数据幂等性问题;订单被删除多次产生多个商品id、用户id、订单未支付状态、逻辑删除,导致触发唯一索引,实际上这种情况是被允许的;3、设计幂等表,将唯一索引里面的字段提出来,单独放一个表,先查防重幂等表,如果发现有数据,直接返回,没有数据,则insert;

2024-07-25 17:32:39 271

原创 PostgreSQL约束、表空间、视图、物化视图、索引、事务(MVCC和锁)、数据备份和恢复

在PostgreSQL中,在存储数据时,数据必须要落到磁盘。(select id,name,real_name from user) ---- 仅查询部分字段,不查询密码。如:对表进行insert、update、delete、truncate时,会触发表的Trigger。当创建表时指定了表空间,则默认存储表空间存储了一个链接,指向指定的实际存储的磁盘目录。简单视图允许写操作,但不推荐,因为视图实际上是写的表数据。(5)外键约束(不建议,会导致级联关联)

2024-07-22 17:06:40 609

原创 PostgreSQL的引号、数据类型转换和数据类型

(2)pgsql对boolean类型不敏感,也可以是'yes'或者'no',大小写也不敏感;2、在pgsql中,实际字符串用单引号,双引号相当于mysql的``,用来包含关键字;decimal(n,m),本质是numeric,pgsql会帮转换。1、场景:字符串默认情况下是text类型,浮点默认是numeric;int,int4,int,integer:都是4位。(2)第二种方式,也可以在具体值的后面加 ::类型。(1)可以存储true,false,和null;|/ 平方根 |/4=2。

2024-07-19 11:48:08 928

原创 PostgreSQL创建表和自增序列

2、pgsql没有auto_increment的概念,如何实现id自增?1、在mysql没有序列的概念,id自增通过auto_increment实现;二、查询、修改和删除和mysql没差别。方式一:创建序列,绑定表;

2024-07-18 17:07:17 721

原创 PostgreSQL数据类型

一、pgsql的数据类型(数据类型比mysql丰富,但大部分与mysql都有对应)bit varying(n)可变长位图,类似redis的bitmaps。9、JSON类型: mysql有,但是没有pgsql功能丰富。jsonb:存储json的二进制,可以加索引。7、几何类型: mysql没有。json:本质上是字符串。bit(n)定长位图。8、数组:mysql没有。

2024-07-18 16:36:03 140

原创 PostgreSQL的逻辑架构

一、PostgreSql的逻辑架构:所有者:

2024-07-18 16:32:46 244

原创 PostgreSQL简介和安装

windows下找到安装目录下的data下:postgresql.conf和pg.hba.conf配置文件;可以对pgsql的日志存储方式,端口,允许远程连接等进行配置;注意:postgresql默认的端口是5432,并且在linux下,不支持root用户管理,需要新建非root用户进行配置、连接和操作;注意:在安装过程中,遇到提示输入默认超级管理员postgres密码时,需要设置密码,否则默认账号postgres无法登录;1、PostgreSql是功能强大的,开源的关系型数据库,底层基于C语言实现;

2024-07-18 16:02:47 845

原创 Git入门

在外网环境下,可以使用GitHub或者Gitee作为代码托管中心,GitHub是国外的、已经搭建好的代码托管中心,Gitee是阿里的、国内的代码托管中心,相对来说,在国内,Gitee会比GitHub快一些;git init 本地仓库初始化 ,会生成隐藏的.git文件夹,使用ll -la查看,.git目录下的内容不要删除和修改。git commit -m "" 将暂存区的内容提交到本地仓库,-m写备注,后面“”的内容就是备注。公司A的用户A进行项目创建,并将代码push到公司A的远程仓库;

2024-07-17 08:46:12 314

原创 mysql 8新特性

(3)类似于使用partition by 代替group by,因为group by使用的时候有很多限制,比如select的时候,只能select group by的字段,如果要select更多字段,得在group by后面加;b、灰度发布:线上测试,加隐藏,仅针对测试,如果发现索引没问题也是有必要的,可以变成正式索引;(1)drop、create、alter等DDL语句同时操作多张表,如果有一个表报错了,5.7之前会执行成功的表,而8后则所有都不执行成功,保证原子性;(1)不会被优化器使用,不可见,

2024-07-16 21:33:29 605

原创 mysql锁-共享锁、排他锁和意向锁,记录锁、间隙锁和临键锁

MVCC:通过生成版本链,读取快照信息,解决事务并发的脏读、不可重复读、幻读问题,针对普通查询(未加锁的查询);step3:开启另外一个事务,对同一行数据加排他锁,一直在执行中,阻塞,说明加锁不成功;step2:开启另外一个事务,也对同一行数据加共享锁,执行成功,说明加锁成功;step1:开启一个事务,并对某行数据加共享锁,执行成功,说明加锁成功。按锁的模式分:共享锁、排他锁、意向锁、共享意向锁、共享排他锁。1、共享锁、排他锁、意向锁、共享意向锁、共享排他锁;按锁的算法分:记录锁、间隙锁、临键锁;

2024-07-15 11:57:43 987

原创 mysql索引优化

字段不一样,其中一个没索引,则索引失效;8、字符串加引号(不加的话,mysql会自动加上,相当于对索引列做了操作,索引列会失效)like "%abc" 索引失效,因为字符串排序,然后前面不确定,就会失效。2、尽量全值匹配(在联合索引中,where 后面的条件尽量和索引的所有列匹配);count(字段)遍历数据,判断null,为null的数据不返回,返回数据,累加。中间也有范围查询,后面也有范围查询,则后面的范围查询索引会失效。count(0)遍历数据,判断null,不返回数据,只累加。

2024-07-09 17:22:02 641

原创 mysql执行计划详解

const:针对当前select,精确查找,索引一次就命中数据,命中一条数据,select * from user where id=1;1、id:sql语句在经过查询优化器优化之后,有几个select,就会显示几个id。(7)key:真正使用到的索引,为null时,没使用索引,type一般是ALL;eq_ref: 针对当前select,走主键索引或唯一索引,只返回一条数据;ref:针对当前select,走主键索引或唯一索引,可能会返回多条数据;(6)possible_key:可能会使用到的索引。

2024-07-09 10:53:20 291

原创 mysql慢查询

取出全部的列(select * 当select *时,如果有某些字段没有加覆盖索引,则会在二级索引查不到字段的时候进行回表操作(回表增加磁盘IO,不满足第三颗星))slow_query_log_file DESKTOP-PLDRIF5-slow.log 慢查询日志文件(linux下的路径是完整路径)mysql记录了所有执行超过long_query_time这个参数设定的时间戳阈值的SQL语句。响应时间: 服务时间(sql处理时间) + 排队时间(等锁,等IO)一、造成慢查询的核心原因:数据量大。

2024-07-08 14:39:52 334

原创 mysql事务的ACID和事务隔离级别

事务A进行范围查询id>5,得到结果=4,此时事务B新增或删除一行数据,并提交事务;因为不可重复读主要发生在同一个事务对同一条数据(主要是被修改的数据)的多次查询结果不一致的问题,那么可以针对该条数据进行加锁,且加行锁即可。1、事务的概念:指的是一个操作序列,在操作序列中,多个操作要么全部执行成功,要么全部执行失败,是一个不可分割的逻辑工作单位。当事务A在同一个事务中,进行三次查询,就会出现第三次查询的结果和第一次查询的结果不一致的情况,称为不可重复读。将事务隔离级别设置为READ COMMITED;

2024-07-08 14:10:17 565

原创 mysql事务隔离实现原理MVCC

m_ids:表示在生成ReadView视图的时候,活跃的事务ID集合,所谓活跃,就是开启了事务,没提交的那些事务的id集合,一条数据,可以被多个会话开启多个事务,就会有多个ReadView;比如某条数据有3个事务同时对它进行修改,事务A的id是1,事务B的id是2,事务3的id是4,则m_ids=[1,2,3],而m_max_trx_id则等于4;m_max_trx_id: m_max_trx_id并不是m_ids中的最大值,而是在m_ids的最大值再递增一位,

2024-07-08 10:00:32 322

原创 mysql索引概念、分类及创建高性能索引

(2)B+Tree的数据结构中,叶子节点的页里面,存放的是索引的字段以及字段对应的主键id;(3)当遇到组合索引的时候,比如字段a,b,c三个字段索引,hash索引是将这三个字段进行hash,然后存储到hash表中,不能仅对a,b或者a,c或者b,c进行部分组合索引,除非再建a,b或者a,c或者b,c索引,加深复杂度。(2)索引列的选择,尽量选择重复率低的列来创建索引,比如id,userName这种,而不要选择gender,枚举类的字段做索引,意义相对不大,因为数据重复,过滤出来的数据依然是那么多。

2024-07-05 23:02:30 1016

原创 Springboot、SpringCloud、SpringCloudAlibaba微服务架构环境搭建入门

一、构建Maven工程和pom文件。往下翻就能找到对应的版本啦~

2024-07-02 13:47:17 348

原创 Rabbitmq的延迟交换机exchange

那么在consumer进行消费的时候,消费的顺讯为m4,m3,m2,m1,当消费到m1时,发现m1已经过期很久了,由于前面还堵着m2,m3和m4,因此在m1过期时,并没有第一时间被发送到死信队列,由此可能产生的问题就是,假如当下订单未支付等待的时间到了,却并没有去查看支付结果或者取消订单;使用延迟交换机,即在交换机进行消息投递的时候,检查过期时间,如果还没到过期时间,就等待,不投递到queue里面去,而是等到过期时间到了,再投递,相当于在进入到队列之前进行时间上的排序;

2024-06-27 14:54:35 333

原创 Rabbitmq中的死信和死信队列

(2)消息过期,即消息的过期时间超过消息的TTL,这里分为两种情况,一种是在生产者发送消息时给当前者条消息设置生存时间,一种是在创建队列时,给队列设置所有存在该队列的消息设置生存时间;1、如果一个队列的消息达到了阈值,再发过来的消息会被删除,会造成消息的丢失,在保证消息可靠性上不友好,如果将消息发送到死信队列上,可以保证消息不丢失;2、死信会被重新交给死信交换机进行消息投递,绑定到死信交换机上的、被定义为死信的队列。3、死信交换机和死信队列与普通交换机和队列的区别仅仅 多了一个argument参数;

2024-06-27 12:21:10 199

原创 Rabbitmq消息可靠性

一、Rabbitmq生产者-----》交换机----》队列《-------消费者,这中间有几个地方存在因网络会服务器宕机原因导致消息丢失,如何保证消息可靠,至关重要!通过查看源码:setConfirmCallback需要传递一个ConfirmCallback对象实例,使用lamda表达式实现即可。CORRELATED: 与回调函数一起使用,实现异步消息确认。如何保证消息一定能从生产者发送到exchange,请参考。3、服务器重启,queue里面的消息不会丢失。4、消费者获取队列消息不会丢失(手动ack)

2024-06-26 12:21:35 267

原创 Springboot集成Rabbitmq,并实现三种通讯模式

3、topic模式下,两个队列绑定一个交换机,只有满足占位符和通配符规则的才会被路由。一、引入依赖包和配置文件。二、三种类型交换机实现。

2024-06-24 19:03:23 494

原创 RabbitMQ七种通讯模式

c、当Consumer从队列中获取消息后,需要给Rabbitmq一个ack确认标识,当Rabbitmq收到ack后,会认为消息已经成功被Consumer消费,否则会认为消费失败,会将消息交给下一个Consumer;a、从下图中可以看出,hello world模式和work queue模式的区别是一个生产者发送消息到queue后,hello world的consumer只有一个,而work queue的consumer有2个;b、默认情况下,队列会以轮询的方式将消息发送给不同的Consumer;

2024-06-23 23:50:41 180

原创 RabbitMQ系统结构

a、一个broker可以包含多个virtual host,可以理解为内部的虚拟机,每个virtual host之间是相互隔离的;a、建立连接,通过指定ip、端口、用户名、密码和virtual host,与broker建立连接;2、RabbitMQ整体逻辑架构说明,主要分为2大部分,server端和client端;整体的逻辑架构是什么?c、通过channel,可以实现新建queue、发送消息,接收消息等操作;b、通过创建的连接实例,获取channel通道;RabbitMQ处理和转发的是二进制数据块消息!

2024-06-23 23:49:46 113

空空如也

空空如也

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

TA关注的人

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