自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

但它在法律甚至文化娱乐方面的使用都已经提上日程:比如公证人用于确认和核实契约及合约等法律文件上的签名,利用区块链技术,这些文件可以进行数字化保存,成为数字账本的一部分。九)把环卫工群体的人力资源利用起来,将之与规范共享单车停放的需求对接,是多赢之举:兼管单车虽然会加重环卫工的劳动负担,但他们的收入也会增加;因为孤独来自于人们“拥有的联结”与“渴望的联结”之间的差异,它是一种主观感受,一个人可能被他人围绕,却因为渴望某种联结而不可得,于是感到孤独,而独处则是一种客观状态,是“此时此刻只有我一个人”。

2024-04-21 21:44:06 928

原创 Redis缓存和redis分布式锁

热点key永不过期是需要分析出key访问的次数,达到一定次数从而进行设置永不过期,限制访问数据库的访问频率,但是用户访问时间边长,降级。redis最主要的用途,主要是三个方面:存储数据+缓存+消息队列。

2024-01-30 09:43:15 198

原创 redis分片集群

4)为什么key要和插槽绑定而不是节点绑定呢?因为redis的主节点是有可能出现宕机的情况的,或者是集群扩容增加了节点,或者是集群伸缩,删除了节点,如果一个节点宕机了,那么这个节点上面的数据也就丢失了,而数据如果是和插槽绑定的,那么当节点宕机的时候,可以把这个节点对应的插槽转移到正常工作的节点,集群扩容的时候,也可以将插槽进行转移,这样数据跟着插槽走,就永远可以找到数据的位置;

2024-01-28 22:56:04 1358 1

原创 redis哨兵机制

2)主节点挂了,把选中的从节点,通过slave of no one自立山头,把其他的从节点,修改slave of 主节点的IP port连上新的主节点,告知客户端,修改客户端的配置,完成修改数据的操作,当之前挂了的的主节点修好了以后,就可以作为一个新的主节点挂到这组机器中,但是修复的过程中,至少需要半个小时,整个redis不能写?2)主节点确实是挂了,那么在这些哨兵节点中,就会推选出一个哨兵leader,由这个leader来负责从现有的从节点中,选取一个作为新的主节点。

2024-01-26 23:17:42 909

原创 redis主从复制

4)由于从节点上面的数据都是时刻和主节点是保持一致的,因此其他的客户端从从节点这里面读取数据,和从主节点这里面读取数据是没有本质区别的,如果后续有客户端来读取数据了,就可以从上述节点中,随机挑选一个节点,给这个客户端提供读取数据的服务,3)本来在主节点上保存着一堆数据,引入从节点以后,就是要把主节点上面的数据,复制出来放到从节点上面去,后续在主节点上面对于数据有任何的修改,都会把这样的修改同步到从节点上面去,从节点就是从节点的副本,

2024-01-21 15:17:48 404

原创 渐进式哈希和SpringBoot集成redis

一)渐进式遍历1)keys可以一次性的把整个redis中的所有的key都获取到,keys *,这个操作比较危险可能会一下子得到过多的key,从而会造成redis阻塞,因为redis是一个单线程的服务器,通过渐进式遍历,可以做到既能够获取到所有的key又可以保证不会卡死服务器,渐进式不是一个命令把所有的key,而是每执行一次命令,只获取到其中的一部分,这样就可以保证当前一次操作不会太卡,要想得到所有的key就需要多次执行渐进式命令,化整为0,光标设置成0了,意味着这一次是从头开始遍历。

2024-01-20 21:41:08 336

原创 Git初始

2)此时第二次的时候,我的老板有要求再来修改一份文档,此时我们将第一次修改完成的文档是设计文档V1,此时设计文档V1完成以后,老板说你的文档不靠谱,此时你再去给我修改,但是此时我会把文档V1复制一份,1)假设现在有一个文档,你的老板要求你针对于这份文件进行修改,进行完成的修改的版本是版本1,接下来是文档2,修改完文档2以后,接下来老板还不同意,于是又有了文档三,文档四,此时果然当文档2上传的时候老板此时还不满意,我就针对于这个文档反反复复的进行修改,此时已经把设计文档更新到了文档V5,

2023-12-18 17:48:38 505 1

原创 搜索引擎---项目测试

搜索引擎项目测试

2023-11-23 17:48:27 1448

原创 JAVA项目测试----用户管理系统

如果说此是针对于第一组参数用户登陆成功了,直接跳转到列表页了,那么当第二组参数参数构造以后,系统执行以后发现此时页面是在列表页,自然无法定位到输入框和按钮,此时就会出现nosuchelement异常。主要针对常用的主流程功能进行测试,除此之外还有界面测试+功能测试+兼容性测试+安全性测试+可靠性测试+容错性测试+性能测试+网络测试;目前的用户管理系统实现了超级管理员的注册功能,用户管理员的新增,删除,修改,用户分页展示,批量删除,多条件查询等功能。一)针对于登录界面进行自动化测试。

2023-11-21 19:50:29 616

原创 MYSQL索引+常见的锁

一)联合索引:1)定义:是给一张表上面的多个列增加索引,也就是说给表上面的多个列增加索引,供快速查询使用,当两个列的组合是唯一值时,联合索引是个不错的选择联合索引和单个索引对比来讲,联合索引的所有索引项都会出现在索引上,存储引擎会先根据第一个索引项排序,如果第一个索引项相同的话才会去看第二个,所有我们在查询的时候,如果头索引不带的话,联合索引就会失效,因为在根节点他就不知道怎么往下走一般来说在实际开发中,很少使用到单个字段来做索引,因为总的来说尽可能还是让索引的数量少,避免占用磁盘空间太多影响

2023-11-11 21:46:19 266

原创 MYSQL操作详解

select 列名, ... from 表名 limit 限制个数 offset 起始下标;select 列名, ... from 表名 limit 限制个数, 起始下标;limit+n,取出已经读取数据结果中的前N条,他的效果就类似于limit+n+offset+0,意思就是说从我们查询结果的第0个位置开始,向后取N条记录limit+n+offset+M,取出当前下标为N的记录开始,再向后找M条,默认从0开始,从我们查询结果的第M个位置开始,向后取N条记录。

2023-11-11 18:28:50 719

原创 JUC包下面的四大天王+线程池部分知识

execute()的返回值是void,线程提交后不能得到线程的返回值,submit()的返回值是Future,通过Future的get()方法可以获取到线程执行的返回值,get()方法是同步的,执行get()方法时,如果线程还没执行完,会同步等待,直到线程执行完成。2)从上面的执行结果可以看出来,程序先打印了任务执行完成,再来继续打印并执行线程池的任务,这种执行顺序混乱的结果不是我们想要看到的,我们期望的结果就是等到鲜橙汁中的所有任务都执行完成了,再来进行打印线程池执行完成的信息;

2023-11-11 17:04:41 138

原创 对于线程的收尾

2)那么此时:线程一的寄存器和线程二的寄存器都读到了100元钱,和版本号是1,线程1扣款成功内存中的钱变成50,版本号改成2,此时线程二还在阻塞等待中,这时突然有人给滑稽老铁转账50,虽然此时的钱数是100,但是版本号也进行加1操作,变成了3,此时线程二进行扣款操作之后修改版本号是2,但是此时的内存的版本号已经是3了,小于读到的内存中的版本号,就操作失败;好处就是说这里面的锁一进行释放,我们就可以立即拿到锁;也就是说,一个进程中至少包含一个线程,后期再创建线程,创建PCB,它们的PID是相同的;

2023-11-11 13:23:18 98

原创 阻塞队列+定时器+常见的锁策略

突然来了大量请求,如果没有入口服务器,这些什么商家服务器,直播服务器就有可能会挂掉,操作数据库,效率比较低,况且需要的系统资源可能会更多,如果主机的硬件不够,程序就有可能直接挂了,咱们的入口服务器一般是不会垮掉的,因为入口服务器是不会不会处理数据请求的。4)这样我们就做到了,让生产者和消费者可以不知道他们彼此之间是谁,这个数据是谁生产的,是谁消费的,都不重要,能生产,能消费就可以了,这样还是我们的系统变得更加灵活,可以随意替换A,B,C的任意一个模块,修改更方便,耦合耕地,让代码程序的维护性变得更高;

2023-11-10 21:38:32 175

原创 计算机是如何进行工作的+进程和线程

3)咱们一直说类加载,类加载,那么类加载到底是什么?1)线程是抢占式执行,这是线程不安全的根本原因,解决方法:没有,假设线程之间不是抢占式执行的,而是其他的调度方式,那么就可能没有线程不安全问题了,也有协商式执行的,虽然这是根本原因,但是我们拿他无可奈何,毕竟这是操作系统自身的机制,咱们也改变不了,它天然就是充满随机性的,因为操作系统的调度完全由内核负责,线程之间的调度不可预期,线程的调度充满随机性,线程谁先执行谁后执行,谁后执行,到哪里从CPU上下来。

2023-11-10 21:12:40 230

原创 HTTP和HTTPS详解

其实在定位网络上的一个具体的资源的,还可以带有其他一些详细的要求,也就是后面的参数部分6)查询字符串:本质上来说就是咱们的浏览器或者是客户端向服务器传输的自定义的信息,相当于是对获取到的资源提出了一些更高的要求,我们只能看清这里面的格式是什么样子的,但是我们没有办法理解里面键和值都是什么意思,只要特定开发这个应用的程序员才能认识7)URL中的片段标识符:不是特别常见,通常用于定位HTML页面中的具体位置,这个在文档类网站中,十分常见,以#来进行开始,

2023-11-10 16:48:14 890

原创 网络层+数据链路层+物理层

2)假设第一份数据的片偏移是1,第二份数据的片偏移是2,咱们就可以知道谁是前,谁是后了,比如说上面的数据包的16位标识是1000,下面的IP数据包的16位标识也是1000,片偏移越小,那么他就是越靠前的包,为了防止网络上面出现后发先置的情况;4)你在报文里面构造了一个目的IP就一定可以找到吗,这是不一定的,主要是有些包里面的IP地址,是永远也无法到达的,这样的IP包,不可能在网络上面进行无休止的转发,这样就会占用硬件资源太多了,正常的IP数据包都会在既定的TTL内来进行到达;

2023-11-10 12:53:56 224

原创 传输层中的TCP和UPD协议

一)应用层协议简介:根据需求明确要传输的信息,明确要传输的数据格式;1)其它四层都是操作系统,驱动,硬件实现好了的,咱们是不需要管2)应用层:当我们继续进行写应用程序的时候,尤其是应用程序负责网络通信的时候,往往是需要自定义应用层协议的,我们要根据需求,明确要进行传递的信息,我们还要明确传递的数据格式;3)应用层这里面,最重要的事情,就是说自己实现一个应用层协议,比较简单也是在工作中经常做的事情;FTP,SSH,TELNET,DNS(域名解析的协议)1)使用现成的应用层协议来进行开发。

2023-11-09 21:50:37 677

原创 TCP网络编程

1)对于accept的返回值对应Socket这个文件,是有一个close方法的,如果打开一个文件后,是要记得去关闭文件的,如果不关闭,就可能会造成文件资源泄漏的情况,一个socket文件写完之后本应是要关闭的,但是咱们前面写的UDP程序是不可以关闭的,当时的socket是有生命周期的,都是要跟随整个程序的,当客户端不在工作时,进程都没了,PCB也没了,文件描述符就更没有了。5)但是我们的TCP是有连接的,首先需要做的事,先建立起连接,相当于客户端的代码是货品,就要通过一条公路来把这些货发送过去。

2023-11-09 19:37:35 464

原创 UDP网络编程

但是我们的服务器上面的应用程序是啥,绑定了哪些端口,都是我们指定好的,不会出现端口号占用的问题;面向数据报:以一个一个的数据报单位为基本发射和接收单位,每个数据报多大,不同的协议有不同的规定,一个数据包都会明确大小,我们的一次发送和一次接收都是一个完整的数据包,不能是半个,也不能是一个半,对于数据包来说 ,传输数据是一块一块的,发送一次数据假如说是100个字节,必须要一次进行发送,接受也是必须一次性接收100个字节,而是不能分100次,每一次接受一个字节。而不是让系统自动给咱们分配一个?

2023-11-09 16:34:38 920

原创 redis持久化和Redis事务

1)通过刚才配置文件中的save执行M时间内,修改N次2)通过shutDown命令,也就是redis中的一个命令关闭redis服务器,也会触发3)当redis进行主从复制的时候,主节点也会生成rdb快照,然后把rdb快照文件内容传输给从节点,

2023-11-08 12:46:16 263

原创 MyBatis知识点总结

SQL都是自己写的,可以加索引,可以进行SQL优化,不像Hibernate那样SQL是由程序自动生成的,Hibernate是自己调用API生成SQL语句,万一性能不好没有办法。所谓的ORM框架,就是对象关系映射框架,就是让JAVA程序中的类里面的属性直接映射到数据库中的表里面的列,在Java中操作这个类的时候,就相当于直接操作数据库中的表和字段;,所谓的全⾃动,是 SQL 语句都不⽤在编写,基于框架的 API,可以将对象⾃动的组装为要执⾏的 SQL 语句,简单的SQL连SQL语句都不用编写,

2023-11-04 13:15:34 150

原创 Spring知识点总结

一)什么是Spring?它有什么优点?spring是一款顶级的开源框架,他是包含了众多工具方法的IOC容器,Spring中包含了很多模块,比如说Spring-core,Spring-context,Spring-aop,Spring-web,从而更好地帮助我们开发JAVA程序;Spring提供了IOC容器,它是用来管理应用程序中的对象的生命周期和依赖关系,2)统一业务处理,面向切面编程:Spring本身支持AOP,能够分离横切关注点比如说日志和事务管理和核心业务逻辑;手动式事务+编程式事务。

2023-11-02 13:06:27 180

原创 JAVA中的垃圾回收器(3)----ZGC

就是用来修复并发标记中的漏标记问题,就是将B扫描完成之后,B就会变成黑色,此时B引用着D,D引用着E,此时如果在并发标记过程中D指向E的指针没了(D还没有来得及指向E),此时B指向了E,此时因为B已经变成了黑色,B不会重新扫描,但是此时的E就变成了一个垃圾对象,此时就发生了漏标操作CMS使用的是增量更新G1使用的是原始快照。2)ZGC小页面优先回收,大页面尽量不回收,可以选取垃圾特别多的页面进行回收,一个页面垃圾越多,那么回收的优先级就越高,如果将所有的页面都进行回收,那么回收的效率就特别低;

2023-10-30 12:53:53 225

原创 JAVA中的垃圾回收器(2)------G1

6)G1垃圾收集器对于对象什么时候会转移到老年代和之前说过的原则一模一样,唯一不同的是针对于大对象的处理,G1有一个专门分配大对象的区域叫做Humongous区域,而不是让大对象直接进入到老年代的Regin中,在G1中有专门分配大对象的区域叫做Humongous区,大对象的判断规则就是一个对象超过了Regin区域的一半,按照上面的计算规则,每一个Regin的大小是2M,只要对象的大小超过了1M,就会被存放到Humongous,如果对象特别大,还有可能使用多个连续的Regin存放。

2023-10-29 16:56:58 241

原创 JAVA中的垃圾回收器(1)

3)假设此时要是设置最大停顿时间是10ms,再进行垃圾回收的时候会尽可能的想办法把时间控制在10ms以内,要想实现垃圾回收的时间比较短,每一次垃圾回收比较短,那么就只能控制堆的大小,想让停顿时间短,那么垃圾回收的时间就比较短,垃圾回收器把堆控制的小一些,每一次GC时间就比较短,但是堆空间比较小,堆空间容易满,但是可能经常发生GC,GC频率增高,这样子吞吐量反而降低了,就会导致用户线程执行的总时长比较短,所以第一个参数使用需要谨慎;分成多个区,为什么分区算法是可控的?

2023-10-28 21:29:28 325

原创 JVM进阶(3)

2)在JAVA程序运行的过程中会产生大量的对象,其中有一些对象是和业务信息相关,比如说Http请求的session对象,线程,Socket连接,这类对象和业务直接挂钩,因此生命周期比较端,比如说String对象,由于不可变的特性,系统会产生大量的这些对象,甚至有的对象只使用一次就被回收,将活着的内存空间分为两块,每一次只是用其中一块,再进行垃圾回收的时候将正在使用的内存中的存活对象复制到还没有被使用到的内存快里面,然后最后清楚正在使用到的内存块中的所有对象,交换两个内存的角色,最后完成垃圾回收。

2023-10-28 12:58:10 671

原创 微服务初始和Nacos安装

首先,找到 Nacos 安装目录的中的 conf/application.properties 文件,修改以下几次内容为以下配置:开启权限认证,权限认证类型是nacos,默认密码,开启白名单,可以设置成任意值,设置完成直接重新启动,先设置用户,在设置角色,最后设置权限,默认的数据源,是Derby数据库,是内置本地数据库,可以保证数据不丢失;微服务是将一个大型的,单一的应用程序拆分成多个小型服务,每一个服务负责于特定的业务功能,并且可以通过网络来和其他服务进行通讯,是一个思想,3)还可以进行历史信息的对比。

2023-10-27 16:51:08 595

原创 JVM进阶(2)

JVM

2023-10-26 16:05:09 726

原创 JVM进阶(1)

2)因为本身JAVA的。

2023-10-24 21:50:19 389

原创 MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)

4)假设在RR隔离级别下执行下面的SQL,select * from user where name="张三",此时where条件中的name字段没有索引,那么对于其他的Session对该表任何一条记录做修改操作都会被阻塞住,因为在RR隔离级别下,需要解决不可重复读问题和幻读问题,所以在进行遍历扫描索引记录的时候,为了防止扫描过的索引被其他事务修改也就是不可重复读问题,或者是间隙被其他事务插入记录,从而导致数据不一致,所以MYSQL的解决方案就是把所有扫描过的索引记录和间隙锁都加上;

2023-10-24 16:43:29 375

原创 MYSQL(事务+锁+MVCC+SQL执行流程)理解

7)根据undolog版本链上的每一条记录的事务ID来判断当前这条记录是否已经在生成读视图之前提交了,小于min_id的一定是已提交事务,大于max_id一定是未提交事务,但是在min_id和max_id之间的记录有可能是已提交,也有可能是未提交;3)表锁开销小,加锁块,但是行锁开销大,加锁慢,这样子理解很简单,对于表来说只要找到这一张表,就可以直接给他加锁,速度很快,但是对于行锁来说,先要找到表,再来找行,效率很低,行锁的粒度肯定是比表锁小的,粒度越大,锁冲突的概率还是比较高的。

2023-10-23 21:50:29 901

原创 MYSQL(索引+SQL优化)

索引:索引是帮助MYSQL高效获取数据的排好序的数据结构1)假设现在进行查询数据,select * from user where userID=892)没有索引是一行一行从MYSQL进行查询的,还有就是数据的记录都是存储在MYSQL磁盘上面的,比如说插入数据的时候是向磁盘上面的某一个点位去存放,3)一次读取一条记录,一次IO,如果表中的数据非常多,就需要进行多次IO4)二叉树,key是主键值,value是数据所在的物理磁盘的地址;

2023-10-21 20:26:42 405

原创 AQS理解

AQS是JAVA中的一组抽象类,就是为了解决多线程并发竞争共享资源而引发的线程安全问题,细致点说AQS就是具备一套线程阻塞等待以及被唤醒的时候锁分配的机制,这个机制是由队列来实现的,暂时获取不到所的线程加入到队列里面,AQS本身并没有实现太多的业务功能,只是对外提供了三点核心内容来帮助实现其他的并发内容。

2023-10-20 16:37:27 88

原创 MYSQL中的锁

4)当一个事务对某张表或表中的行加了共享锁,则当前事务内可以对锁住的对象进行查询、修改和删除操作,其他事务对已经加锁的事务只能查询,当要修改或删除对应的记录时,将会阻塞等待。2)当select语句中的where条件查询的时候使用到了索引,那么会对查询结果所在的行进行锁定,也就是行级锁,如果查询没有使用到了索引,就会升级到表级锁;当一个事务对某张表或表中的行加了共享锁,其他事务也是可以对同一对象添加共享锁,即同一张表或行是可以被多个不同的事务同时添加共享锁的。

2023-10-09 12:50:43 182

原创 MYSQL日志和索引模块详解

下面这种情况范围查询后面的字段索引失效:但是如果修改成这样子:create index idx_age_name_classid on student(age,name,classID)

2023-10-05 21:38:56 326

原创 并发编程知识点总结

2)线程池会先启动若干数量的线程,这些线程都会处于睡眠状态,当有一个新的任务到来的时候,线程池就会唤醒某一个睡眠的线程,让他来进行处理客户端的请求,当处理完整个请求之后,线程又处于睡眠的状态,线程池可以很好地提高程序执行的性能,因为频繁的创建和销毁线程是很浪费时间的;1)这个核心线程数如果设置成0,那么表示没有任务的时候销毁线程池,如果核心线程数大于0表示线程池即使没有任务的时候最少的线程池的数量等于这个值,如果设置比较小,那么会频繁的创建和销毁线程,如果创建的值比较大,那么会浪费大量的系统资源。

2023-10-02 21:45:17 891

原创 线程安全问题+锁机制详解

1)_recursions是某一个线程某一次重复获取到锁的次数,可重入锁代表某一个线程可以重复的获取锁,因为synchronized是可重入锁,线程是可以重复的获取到这把锁,那么某一个线程每一次获取到锁的时候,计数器就会记录该线程和获取到锁的次数,每获取到一次锁,进入到这个房间,_recursions++,每当离开这个房间一次,那么这个计数器就--,当_recursions=0的时候,

2023-10-02 13:07:16 247

原创 索引+事务+排查慢SQL

1)降低资源消耗:普通的线程执行完成任务之后就被销毁了,而线程池中的线程执行完成任务之后会把这个线程继续放到池子里面,

2023-10-01 21:42:48 374

原创 JAVASE知识点总结

假设此时这个系统是支持用户进行配置的,是支持用户设置皮肤的颜色,设置系统的快捷键,此时就需要使用原型设计模式,不能自己设置把别人的设置都给改了,还不能修改默认的设置,就是为了防止用户有一天进行reset操作,实现原型设计模式,实现备份和恢复。一)为什么要使用克隆?

2023-09-30 16:04:53 156

空空如也

空空如也

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

TA关注的人

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