- 博客(80)
- 收藏
- 关注
原创 Chrome浏览器:The request client is not a secure context and the resource is in more-private address ...
Chrome浏览器跨域问题
2022-11-18 16:04:41
594
原创 深入理解MySQL索引
为什么要使用索引? 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 可以大大加快 数据的检索速度(大大减少的检索的数据量), 这也是创建索引的最主要的原因。 帮助服务器避免排序和临时表。 将随机IO变为顺序IO 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 索引这么多优点,为什么不对表中的每一个列创建一个索引呢? 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
2022-04-09 15:15:00
159
原创 简单理解MySQL中的引擎、事务、索引、锁
MyISAM和InnoDB区别MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB。大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的比如读密集的情况下。(如果你不介意 MyISAM 崩溃
2022-04-09 10:12:54
199
原创 【无标题】
1.1 RabbitMQ 简介RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ 发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开的。RabbitMQ 的具体特点可以概括为以下几点: 可靠性: RabbitMQ使用一些机制来保证消息的可靠性,如持久化、传输确认及发布确认
2022-04-06 15:15:00
120
原创 消息队列那点事
“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。那么...什么是消息队列我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。来张图:消息队列是分布式系统中重要的组件之一。使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。我们知道队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。为什么要使用消息队列
2022-04-06 09:36:54
165
原创 对初学者十分友好的redis集群详解
主从复制主从链(拓扑结构、主负责写,从负责读)画了两张图来帮助理解复制模式 全量复制:Master 全部同步到 Slave 部分复制:(只复制增量 主服务器有8个数据,从服务器有3个数据,只把那5个复制过来)Slave 数据丢失进行备份 问题点 同步故障 复制数据延迟(不一致) 读取过期数据(Slave 不能删除数据) 从节点故障 主节点故障 配置不一致 maxmem..
2022-04-02 16:30:00
2757
原创 redis持久化详解
什么是redis持久化?很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后回复数据),或者是为了防止系统故障而将数据备份到一个远程位置。Redis支持持久化,而且支持两种不同的持久化操作。Redis的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file,AOF).这两种方法各有千秋,下面我会详细这两种持久化方法是什么,怎么用,如何选择适合自己的持久化方法。快照(sna
2022-04-02 15:30:00
383
原创 redis常见问题介绍以及超详细redis操作讲解
1. 简单介绍一下 Redis 呗!简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。2. 缓存数据的处理流程是怎样的?在网上找了张大佬画的图
2022-04-02 10:59:32
153
原创 HashMap1.7Put方法原理
分享一篇别人写的HashMap文章,简单易懂,适合新手10分钟拿下 HashMap_学为下,习为中,悟为上-CSDN博客
2022-03-08 15:53:54
153
原创 缓存常用的三种读写策略==》Write Behind Pattern(异步缓存写入)
Write Behind Pattern(异步缓存写入)Write Behind Pattern 和 Read/Write Through Pattern 很相似,两者都是由 cache 服务来负责 cache 和 DB 的读写。但是,两个又有很大的不同:Read/Write Through 是同步更新 cache 和 DB,而 Write Behind Caching 则是只更新缓存,不直接更新 DB,而是改为异步批量的方式来更新 DB。很明显,这种方式对数据一致性带来了更大的挑战,比如cac
2022-03-08 14:37:34
917
1
原创 缓存常用的三种读写策略==》Read/Write Through Pattern(读写穿透)
Read/Write Through Pattern 中服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 DB,从而减轻了应用程序的职责。这种缓存读写策略小伙伴们应该也发现了在平时在开发过程中非常少见。抛去性能方面的影响,大概率是因为我们经常使用的分布式缓存 Redis 并没有提供 cache 将数据写入DB的功能。写(Write Through): 先查 cache,cache 中不存在,直接更新 DB。 cache 中存
2022-03-08 14:30:04
863
原创 缓存常用的三种读写策略==》Cache Aside Pattern(旁路缓存模式)
Cache Aside Pattern(旁路缓存模式)Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 DB 的结果为准。下面我们来看一下这个策略模式下的缓存读写步骤。写 : 先更新 DB 然后直接删除 cache 。 简单画了一张图帮助大家理解写的步骤。读 : 从 cache 中读取数据,读取到就直接返回 cache中读取不到的话,就从 DB 中读取数据返回 再把数据放到 cache 中。.
2022-03-08 14:04:43
4147
原创 深拷贝和浅拷贝
一、数据类型数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。基本数据类型的特点:直接存储在栈(stack)中的数据引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。二、浅拷贝与深拷贝深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
2022-02-22 15:57:59
82
原创 字符的大小写转换(随记)
Java中char类型字母大小写转换大写字母+32后转为小写字母 小写字母-32后转为大写字母例子 public static void main(String[] args) { char a = 'a'; a = (char) (a-32); System.out.println(a); //结果是 A }public static void main(String[] args) { c
2022-02-22 15:13:48
287
原创 进程之间通信方式
进程间通信主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、套接字(SOCKET)。# 普通管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(进程的亲缘关系通常是指父子进程关系)的进程间使用。管道是单向的、先进先出的、 无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。#流管道:区别于普通管道的是数据可以双向传输。# 命名管道 : 命名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量
2022-02-14 21:45:00
97
原创 zookeeper报错 JAVA_HOME is not set
很多开发者安装zookeeper的时候,应该会发现到这么一个问题:JAVA_HOME is not set那么这个是什么意思呢?就是说你的JAVA_HOME 变量没有设定为什么会提示这个呢?其实zookeeper在启动服务端的时候会基于java环境启动,所以在启动的时候会检测 jdk 是否安装而在我们开发者的入门过程中,都会设定一下 %JAVA_HOME%的系统变量。在 zkservice启动的时候,会找%JAVA_HOME%\bin\java.jar 进行java基础环境的...
2022-02-14 17:54:16
3208
原创 MySQL大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED V..
2022-02-12 21:00:00
110
原创 MySQL命令行基本操作
注意:所有命令都以“;”结束。一、MySQL启动与登录1. MySQL启动:通过运行mysql安装目录下的/bin/mysqld.exe文件来启动Mysql服务。在命令行中进入mysql安装目录下的bin目录,执行命令:mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"(指定配置文件,配置文件的位置根据具体情况而定)即可启动mysql服务。为了以后开启mysql服务的方便,你可以将mysql注..
2022-02-12 16:02:29
3454
原创 jvm中两大垃圾回收器
CMSCMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的老年代收集器。CMS收集器与之前的垃圾收集器最大的特点就是它可以并发清除垃圾。 他的工作流程如下: 初始标记(CMS initial mark) 并发标记(CMS concurrent mark) 重新标记(CMS remark) 并发清除(CMS concurrent sweep) 其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GCRoot
2022-01-21 19:00:40
202
原创 关于intern方法的理解
首先明确一下两种String的声明String a = "ab"; 这种赋值都是直接在字符串常量池生成一个字符串对象的。String a = new String("ab")在用new生成字符串对象的时候,只会在堆中生成字符串对象。而不会在字符串常量池生成对象,也没有引用。intern在JDK中的不同:1、在jdk1.6中,intern()方法是先查找字符串常量池是否含有当前字符串,如果没有,那么就在字符串常量池中创建 该字符串,并且返回该字符串在字符串常量池中的引用。 2、在jdk1.7
2022-01-19 13:00:33
474
原创 Java中定义一个不做事而且没有参数的构造方法有什么用
Java 程序在执⾏⼦类的构造⽅法之前,如果没有⽤ super() 来调⽤⽗类特定的构造⽅法,则会调⽤⽗类中“没有参数的构造⽅法”。因此,如果⽗类中只定义了有参数的构造⽅法,⽽在⼦类的构造⽅法中⼜没有⽤ super() 来调⽤⽗类中特定的构造 ⽅法,则编译时将发⽣错误,因为 Java 程序在⽗类中找不到没有参数的构造⽅法可供执⾏。解决办法是:在⽗类 ⾥加上⼀个不做事且没有参数的构造⽅法。父类:public class F { public int x = 0; p
2022-01-19 12:02:39
478
原创 java异常==>try catch finally执行关系
有finally的时候,不论try有没有捕捉到异常,finally都会执行public class Main { public static void main(String[] args) { int a = new Main().test(); System.out.println(a); } int test(){ int a = 3; try { Class<?> c
2022-01-16 18:06:38
218
原创 lambda表达式字符串长度从大到小排序
public class Main { public static void main(String[] args) { String[] strings = new String[]{"123","avbs","asdasd","74365222222"}; /** * strings为要排列的字符串组 * o1 o2是比较的两个参数,类型明确的时候可以不注明类型 * */ .
2022-01-16 11:59:43
778
原创 Comparator接口自定义带条件的Arrays.sort(字符串长度从大到小排序)
import java.util.Arrays;import java.util.Comparator;public class Main { public static void main(String[] args) { String[] strings = new String[]{"123","avbs","asdasd","74365222222"}; StringRuler stringRuler = new StringRuler(); .
2022-01-16 11:54:23
488
原创 springboot整合spring @Cache和Redis
spring基于注解的缓存对于缓存声明,spring的缓存提供了一组java注解:@Cacheable:触发缓存写入。 @CacheEvict:触发缓存清除。 @CachePut:更新缓存(不会影响到方法的运行)。 @Caching:重新组合要应用于方法的多个缓存操作。 @CacheConfig:设置类级别上共享的一些常见缓存设置。@Cacheable注解顾名思义,@Cacheable可以用来进行缓存的写入,将结果存储在缓存中,以便于在后续调用的时候可以直接返回缓存中的值,而不必再执行
2022-01-05 19:21:07
1144
原创 SpringBoot整合Redis及Redis工具类撰写
一、导入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 二、application.properties中加入redis相关配置# Redis数据库索引(默认为0) spring..
2022-01-05 19:18:59
98
原创 SpringBoot定时任务详解
使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。一、基于注解1、创建定时器使用SpringBoot基于注解来
2022-01-01 18:02:50
111
原创 windows下执行redis-server.exe闪退
windows使用redis时,偶然出现执行redis-server.exe,出现运行框却一闪而过,无法运行的情况,现总结解决方案如下:1、重新用原来的免安装的Redis覆盖,原因:修改了RDB持久化和AOF持久化文件.把dump.rdb,appendonly.aof 这两个文件用正常的替换掉就没问题了。注意备份文件。2、在解压的redis文件夹下新建一个start.bat(window启动一般都是xx.bat)在新建的start.bat文件中加入下面一句话redis-server.exe redi
2021-12-25 18:45:00
648
原创 redis相关
1、是什么redis是完全免费的,遵守BSD协议,是一个高性能的键值数据库,是当前最热门的Nosql(Not Only SQL)数据库之一,也被人们称为数据结构服务器2、为什么要用原因很简单----它很快!今天的我们可以通过第三方平台,很容易就能访问和抓取数据,用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些数据进行挖掘,那么单纯的SQL已经不适合这些应用了,NoSQL数据库的发展也确实能很好的解决子这些大的数据。那么为什么它就能解决呢?r
2021-12-22 11:07:19
321
原创 java中int与char的互相转换
int类型是一个32位的数据类型,因为其位有符号数,所以,其取值范围为:-2^31 至 2^31 - 1。而char为16位的数据,为无符号数,其范围为:0 至 2 ^ 16 -1,即 0 - 65535。而无论是什么字符,在计算机中,其实也是以数字(本质为一个二进制数)的形式存储的,因此,在java中,无论是一个字符,还是一个字符型变量,实则也是一个数字,所以,可以直接将一个(不超过char的范围的)数字赋值给一个char变量,即可输出其结果:char c1 = 97;System.out.pri
2021-12-22 10:57:09
2338
原创 String的两种创建方式在内存中的区别
两种创建方式String str = "hello"String str = new String("hello")测试结果public class Test { public static void main(String[] args) { String str = "Hello"; } }上面的例子,Test.java文件编译后得到class文件,里面包含了类的信息,其中有一块叫做常量池的区域,class文件常量池主要存储的就包
2021-12-18 14:44:06
263
原创 AOP实现日志入参出参打印
aop层@Slf4j// 切面注解@Aspect// spring 组件@Componentpublic class AnnotationAop { //定义切点,注解作为切入点 @Pointcut("@annotation(com.qcby.aop.ViewRecords)") public void viewRecordsPoinCut() { } /** * before 目标方法执行前执行,前置通知 * after 目.
2021-12-18 14:05:14
635
原创 Spring Aop基础
简介在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。常用场景日志记录 & 日志框架 入参打印 用户、时间、那个方法、传了那些参数
2021-12-18 13:50:46
74
原创 Mysql日期函数格式转换
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。date 参数是合法的日期。format 规定日期/时间的输出格式。可以使用的格式有:常用格式 对应描述 %Y --年,4 位 %m --月,数值(00-12) %M --月名 %k --小时(0-23) 使用方法:select DATE_FORMAT(date,'%Y-%m')as monfrom resume_infowhere date like '2025%
2021-12-15 14:46:41
629
原创 Mysql中的sum() over (order by ) 开窗函数
sum() over (order by ) 开窗函数,sum(a) over (order by b) 的含义是:例如a b 1 5 4 3 6 7 按照b列排序,将a依次相加,得到结果,如下:a b sum(a)over(order by b) 4 3 4 1 5 4+1 6 7 4+4+6 ...
2021-12-15 14:36:31
2538
1
原创 Java中关于进程线程那些事
进程线程进程概念:进程就是正在运行的程序,它会占用对应的内存区域,由CPU进行执行与计算。进程特点:独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间 动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,程序加入了时间的概念以后,称为进程,具有自己的生命周期和各种不同的状态,这些概念都是程序所不具备的. 并发性:多个进程可.
2021-12-13 20:51:43
360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人