自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

背着梦的幸存者

最喜欢解决一个难题时豁然开朗的感觉

  • 博客(167)
  • 资源 (1)
  • 收藏
  • 关注

转载 Error: error:0308010C:digital envelope routines::unsupported 解决方案

出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响.版权声明:本文为CSDN博主「藏蓝色攻城狮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。然后,找到项目的package.json文件,把自己对应的命令,加上&&,写到启动项目的配置里面(构建写不写都可以),即可。唯一不足,是每次启动项目都要运行,所以,我们可以把它配置一下。

2024-01-08 17:06:02 228

原创 项目切换多租户导致的数据库SQL执行异常

因为多租户是通过mybatis拦截器拦截SQL、解析SQL并且自动拼接租户ID。首先可以确认,这个SQL之前一直是可以正常运行的,只是这次上了多租户才被影响到;解析SQL时发现 # 解析失败;大致可以看出来,问题出现在。

2023-11-02 17:01:18 250

原创 ConcurrentHashMap的扩容机制

因为ConcrrentHashMap在jdk1.7和1.8中的实现机制不一样,所以要分开讲解;JDK1.7中使用segment分段锁实现,1.8中使用CAS+Synchronized实现了更细粒度的锁;

2023-09-21 17:01:34 493

原创 ArrayList和LinkedList的区别

ArrayList底层是一个数组,内容是规整的,可以指定数组容量。如果没有指定数组容量,默认容量是10插入新元素的时候会判断容量,若容量不足以插入新元素。就会进行扩容。扩容是通过新建一个新的更大的数组来完成的,将原数组中的值复制到新数组,再添加新值。扩容后原数组后续就会被垃圾回收掉。要设置一个合理的初始容量;1、如果设置容量太小,频繁扩容对资源消耗是很大的。2、如果设置容量过大,会浪费很多空间。ArrayList查询效率。

2023-09-12 13:56:39 546

原创 ==和equals的区别

如上,我们之所以平时觉得equals是代表值相等,就是String默默重写了equals方法,从而让我们产生了错觉。所以如果我们调用了Object中的equals方法进行比较,又没有进行重写,其实就相当于使用==进行比较。所以,如果我们自定义的对象要做比较,需要重写equals方法来定义比较规则,否则就是按照==进行比较。我们平时用到最多的应该就是String类的equals方法;下面的代码就是Object类的源码;引用类型比较的是堆内存中的对象地址。==其实是比较的栈中的值;基本数据类型比较的是数值。

2023-09-11 20:43:48 166

原创 SpringBoot自动装配原理

为什么要用Springboot?SpringBoot相比Spring有什么优点?说到这个问题,必然会牵扯到自动装配,无需手动添加很多配置,开箱即用。首先我们都知道,在spring中约定大于配置。所以我们首先要有一个约定,启动项目的时候去读取某个目录下的配置。那么所有需要自动装配的工具,都可以在这个约定的目录下设置自己的初始默认配置。项目启动时自动统一加载即可。当前SpringBoot官网最新版本是2.7.5,咱们这次就分析这个版本下的源码。

2022-11-20 22:35:05 2215

原创 MDC、ThreadLocal、InheritableThreadLocal的区别和联系

ThreadLocal使用来存储线程本地变量的。MDC的底层使用的就是ThreadLocal来存储的,只不过是做了一些安全校验,如MDC取值时ThreadLocalMap==null怎么办。InheritableThreadLocal支持子线程继承父线程中的thread-local值。留个问题哈:现在项目中很多使用多线程的地方都是使用的线程池,线程池中的线程并不具备父子关系,这样threadlocal怎么传递?

2022-11-10 18:07:27 998 2

原创 Apifox能否替代Postman?

apifox初步使用,从postman转移到apifox,apifox优缺点简单总结。对apifox的一些吐槽。

2022-11-05 01:39:42 4247 1

原创 1024程序员节快乐

大家程序员节快乐!!!!!

2022-10-24 17:42:11 115

原创 Java使用Xpath实现爬虫功能

Java使用Xpath实现爬虫功能看到有人通过Xpath实现爬虫功能,就写了一个Java版本的。全网最简单易学的教程。网上的其他教程看着都是用 过时的方法实现的,我这是用的新方法,不会报错。

2022-06-09 20:00:26 1270

原创 Zookeeper简介(数据结构、节点、监听机制、权限控制、应用场景)

Zookeeper简介Zookeeper数据结构Zookeeper节点Zookeeper监听机制Zookeeper ACL权限控制Zookeeper应用场景统一命名服务数据发布、订阅功能统一集群管理负载均衡

2022-05-28 20:58:00 549

原创 Zookeeper集群(leader选举原理、数据同步流程)

Zookeeper集群集群角色集群架构Leader选举原理服务器启动时运行过程中数据同步流程消息广播崩溃恢复

2022-05-28 20:55:15 450

原创 CAP && BASE理论 && 几种一致性简单介绍

CAP && BASE理论CAP理论BASE理论几种一致性简单介绍强一致性弱一致性最终一致性顺序一致性

2022-05-28 04:28:38 103

原创 Java基础-动态代理

1、什么是代理生活中的代理1、房产中介,租户不能直接对接房主,要通过中介。中介就是代理,同时中介提供价格调整、房屋维修等增强功能。2、商家店铺,用户不能直接去厂家买东西,要通过商家。商家就是代理,同时商家提供商品价格调整、举办优惠活动等增强功能。由上面的例子可以看出,代理和目标都实现了同一种功能,只不过代理在原功能的基础上进行了功能增强。(中介和房主都提供房屋出租的功能,中介只不过是在原功能的基础上进行了价格调整、房屋装修等额外功能)2、代理的特点功能增强(在原功能的基础上封装其他功能)

2022-04-29 10:13:26 196

原创 Java基础-反射

反射就是把Java类中的各个成员映射成一个个的Java对象。即在运行状态中1、对于任意一个类,都能知道这个类的所有属性和方法。2、对于任意一个对象,都能调用它的任意一个属性和方法。这种动态获取信息以及动态调用对象方法的功能叫做Java的反射机制。1、对象创建过程为什么在介绍反射的时候需要先介绍对象创建过程?通过对象创建,引出Class对象通过javac命令把Java源代码编译成class文件。类加载器加载class文件到内存类元信息存放在方法区。(类元信息:类、方法等字节码信息)

2022-04-29 10:11:11 166

原创 算法基础入门 - 9、复杂排序算法-堆排序

堆排序什么是堆排序?1、先让整个数组都变成大(小)根堆结构2、把堆的最大值和堆末尾的值交换,减少堆的大小。再去调整堆。3、堆的大小减为0之后,排序完成。时间复杂度O(n*logn)堆排序的练习题:已知一个几乎有序的数组,请选择一个合适的排序算法针对这个数据进行排序。几乎有序:如果吧数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。首先是Java版本的解法:package com.leftGod;import java.util.Arrays;i

2022-04-04 23:03:52 921 3

原创 算法基础入门 - 8、复杂排序算法-堆结构介绍+自定义堆+java堆

堆结构堆结构就是用数组实现的特殊的完全二叉树结构:有右子节点时,必有左子节点每个父节点都大于等于子节点(或者每个父节点都小于等于子节点)我们的数据在逻辑上可以根据数组的索引构建出一颗完全二叉树,节点和索引之间的位置关系是:i位置节点的父节点在数组中的位置是**(i-1)/2**i位置节点的左孩子在数组中的位置是**(i*2)+1**i位置节点的右孩子在数组中的位置是**(i*2)+2**堆的类型有两种:大根堆:父节点的值比左右子节点的值都要大小根堆:父节点的值比左右子节点的

2022-04-03 02:07:25 586

原创 算法基础入门 - 6、复杂排序算法-快速排序

快速排序初识快速排序下面我们两道简单算法题引入快速排序的概念1、给定一个数组和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求:时间复杂度O(n) 额外空间复杂度O(1)//记录一个分割线的位置,分割线左边都是小于等于的,分割线右边都是大于的public void preQuickSort(int[] arr, int target) { //分割点和数组下标 int splitPoint=0, index=0; while(i

2022-03-30 23:43:17 382

原创 算法基础入门 - 7、复杂排序算法-归并排序

归并排序先使部分有序,最后再合并每个部分,让整体有序。(让其整体有序的过程采用了外排序的方式)时间复杂度:O(n*log(n)) 空间复杂度O(n)下面通过两道归并排序的算法题来深入理解归并排序算法:1、小和问题在一个数组中,每一个数左边比当前数小的数,累加起来,就叫做这个数的小和。如:[1,3,2,4],1左边没有值,所以没有小和3左边,1比3小,所以3的小和是12左边,1比2小,所以2的小和也是14左边,都比4小,所以4的小和为1+3+2=6所以整个数组的小和=1+1+

2022-03-29 20:39:27 432

原创 《计算机网络 自顶向下》第八章==网络安全

文章目录第八章 网络安全8.1 什么是网路安全?8.2 加密原理对称密钥加密学公开密钥加密学RSA8.3 认证Protocol ap1.0Protocol ap2.0Protocol ap3.0Protocol ap3.1Protocol ap4.0Protocol ap5.08.4 报文完整性8.5 密钥分发和证书8.6 访问控制:防火墙8.7 攻击和对策映射分组嗅探IP Spoofing欺骗DOS第八章 网络安全8.1 什么是网路安全?![image.png](https://img-blog.c

2022-03-28 23:48:26 4834 1

原创 《计算机网络 自顶向下》第六章==链路层和局域网

第六章 链路层和局域网网络层解决了一个网络到达另一个网络的路由问题。链路层解决了在一个网络内部如何由一个节点到达另外一个相邻的节点一个子网内的若干节点是怎么连接到一起的?点到点连接:点到点连接的链路层服务实现非常简单,封装和解封装多点连接(共享型介质、网络交换机):连接到共享介质上,就可以连接所有其他节点,需要协调各节点对共享型介质的访问和使用。6.1 引论和服务主机、路由器和交换机是结点:nodes沿着通信路径,连接相邻节点通道信道的是链路:links数据链路层负责从一个节点通过链路将

2022-03-27 15:04:30 2693

原创 算法基础入门 - 5、递归行为和Master公式

5、递归行为和Master公式递归:在运行过程中不断的调用自己凡是标准的递归流程,都可以直接使用Master公式求解时间复杂度。master公式如下:![image.png](https://img-blog.csdnimg.cn/img_convert/497fc5d6b9d2f626b2bf327795d2d0f7.png#clientId=udb460ad5-55c5-4&crop=0&crop=0&crop=1&crop=1&from=paste

2022-03-24 19:53:08 488

原创 算法基础入门 - 4、二分算法

4、二分算法主要思想:每次查询都能缩减一半的范围时间复杂度:O(log n) ; 空间复杂度O(1):首先的一个问题:是不是只有排好序的元素才能使用二分算法?下面的第三道算法题会回答这个问题!1、在一个有序数组中找某个数是否存在经典二分算法,无需查找至最后一个值。遍历过程中如果发现了target,直接返回。解题思路:1、因为是有序数组,直接找中点下标mid2、若arr[mid] 比我们的目标值大,说明我们的目标值在[0, mid-1]区间3、若arr[mid] 比我们的目标值小,

2022-03-24 19:51:24 225

原创 算法基础入门 - 3、简单排序算法(选择、冒泡、插入)

3、简单排序算法选择排序主要思想:将当前值和 之后的每一个值相比较时间复杂度:O(n2) 空间复杂度:O(1)public void selectSort(int[] arr) { int len = arr.length; for(int i = 0; i < len-1; i++) { for(int j = i+1; j < len; j++){ if(arr[i] > arr[j]) {

2022-03-24 00:57:22 613

原创 算法基础入门 - 2、异或运算的性质与扩展

2、异或运算的性质与扩展异或又被叫做:模二运算(相加不进位)异或的特性a ^ a = 0a ^ 0 = aa ^ b = b ^ a(a ^ b) ^ c = a ^ (b ^ c)通过一个demo熟悉上面的特性public void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; //arr[i] = arr[i] ^ arr[j]; arr[j] = arr[j] arr[j] = arr[i] ^ arr[

2022-03-23 00:35:37 389

原创 算法基础入门 - 1、认识时间复杂度

1、认识时间复杂度常数操作一个操作如果和样本的数据量没有关系,每次都是固定时间内完成操作,就叫做常数操作要首先总结出常数操作数量的表达式;在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数;剩下的部分如果为f(n),那么时间复杂度为O(f(n))当两个算法的时间复杂度都是f(n)时,不能仅仅比较常数项,如下面的f1和f2方法,f1的常数项比f2小,但是加减乘除运算是比位运算要慢很多的,所以,当时间复杂度相等时,不要比较常数项,而是应该实际去跑两个算法,实际对比哪个性能更优。public .

2022-03-23 00:34:53 125

原创 《计算机网络 自顶向下》第五章==网络层:控制平面==随堂笔记

文章目录第五章 网络层:控制平面5.1 路由选择算法路由基础知识链路状态算法(link state) --全局距离矢量算法(distance vector) --分布式LS和DV的比较5.2 自治系统内部的路由选择RIP(Routing Information Protocol)OSPF(Open Shortest Path First)5.3 ISP之间的路由选择eBGPiBGP5.4 SDN控制平面(Software Defined Network)第五章 网络层:控制平面5.1 路由选择算法路由

2022-03-10 22:52:51 357

原创 《计算机网络 自顶向下》第四章==网络层:数据平面==随堂笔记

文章目录第四章 网络层:数据平面4.1 导论数据平面控制平面网络服务模型4.2 路由器组成输入端口缓存输出端口缓存交换结构调度策略丢弃策略4.3 IP:Internet Protocol数据报格式IPv4IP地址是怎么分配的NAT(Network Address Translation 网络地址转换)IPv64.4 通用转发和SDN网络设备控制平面(传统方式)SDN(逻辑上集中)第四章 网络层:数据平面4.1 导论在发送主机和接收主机对之间传送段(segment)在发送端将数据封装到数据报中在接

2022-03-07 23:27:26 408

原创 《计算机网络 自顶向下》第三章==传输层==随堂笔记

文章目录第三章 传输层3.1 传输层概述传输层提供什么服务?传输层协议3.2 多路复用和解复用多路复用解复用3.3 UDP(User Datagram Protocol)3.4 可靠数据传输(rdt)的原理rdt1.0:在可靠信道上进行可靠数据传输rdt2.0:具有比特差错的信道rdt2.1:发送方处理出错(ACK/NAK)rdt2.2:无NAK的协议rdt3.0:具有比特差错和分组丢失的信道流水线协议流水线协议:回退N步(GBN)流水线协议:选择重传(SR)3.5 TCP(Transmission Con

2022-03-03 11:29:09 457

原创 JAVA TCP Socket实现互相通信

文章目录TCP Socket执行流程socket serversocket client测试功能TCP Socket执行流程服务器首先运行,等待连接建立创建欢迎socket和本地端口号绑定(客户端访问的指定端口号)在欢迎socket上阻塞的等待接受用户的连接客户端主动和服务器建立连接创建客户端本地套接字(隐式捆绑到本地port)指定服务器的IP地址和端口号,和服务器进程连接服务器收到来自客户端的请求,进行处理服务器接收来自客户端的请求,解除阻塞式等待,返回一个新的socket

2022-02-26 19:26:59 1964 2

原创 《计算机网络 自顶向下》第二章==应用层==随堂笔记

文章目录第二章 应用层2.1 应用层协议原理应用层学习目标网络应用的体系结构进程通信分布式进程通信应用层协议Internet传输层提供的服务TCPUDPUDP存在的必要性安全TCP2.2 Web和HTTPHTTP概况HTTP连接HTTP请求报文HTTP响应报文cookiesweb缓存(代理服务器)2.3 FTP(FTP协议)2.4 Email(SMTP协议)SMTP协议POP3协议IMAP协议2.5 DNS(Domain Name System)为什么需要DNS?DNS系统需要解决的问题ARPANET方案(

2022-02-25 10:56:26 290

原创 《计算机网络 自顶向下》第一章==计算机网络和因特网==随堂笔记

文章目录第一章 计算机网络和因特网1.1 什么是因特网从具体构成角度从服务角度从组成类型角度1.2 网络边缘1.3 网络核心电路交换(存储-转发)分组交换统计多路复用1.4 接入网1.5 物理媒体1.6 Internet和ISP1.7 分组延时、丢失和吞吐量分组延时分组丢失吞吐量1.8 协议层次及服务模型复杂的网络功能如何实现?专用术语服务类型服务和协议Internet协议栈Internet协议栈各层次数据单元1.9 Internet历史第一章 计算机网络和因特网1.1 什么是因特网从具体构成角度

2022-02-22 17:02:52 274

原创 Java String Split多个参数

今天遇到一个需求,需要通过多个分隔符切割字符串,又不想多次切割,研究出了下面的用法:String x = "1&&2&&3||4||5&&6";String[] split = x.split("&&|\\|\\|");for (String s : split) { System.out.println("split-1:" + s);}String x2="hello;world,hi,";String[] split

2022-01-06 10:50:50 1324 1

原创 Java 克隆方式

java克隆目录Java克隆介绍代码实现CloneableBOCommonBOSerializableBOSerializableUtilMainTest为什么推荐选择深克隆?Java克隆介绍  在Java中存在两种克隆方式:深克隆:不仅克隆对象本身,还克隆对象包含的引用所指向的所有对象。(通过实现Serilable接口)浅克隆:仅克隆对象本身,不可隆对象中的引用指向的对象。(通过实现Cloneable接口)代码实现CloneableBOpackage clone;/** * 通过实

2021-12-31 15:51:20 2399

原创 JAVA设计模式 - 外观模式

章节目录什么是外观模式外观模式的结构外观模式的代码示例子系统1子系统2子系统3子系统4外观类1外观类2抽象外观类客户端外观模式的优缺点外观模式优点外观模式缺点  本文参考自书籍《JAVA设计模式》什么是外观模式  外观模式是一种使用频率非常高的结构性设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互。为复杂的子系统提供一个统一的入口,使子系统和客户端之间耦合度降低。外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观

2021-12-27 19:05:42 500

原创 位运算:异或(附算法)

文章目录一、两道算法题二、异或运算 介绍三、算法解题思路1、求1个单数出现的数值。2、求2个单数出现的数值。四、算法解题代码一、两道算法题 有一批数值,其中只有1个数值是单数出现的,其他数值都是双数出现的,求这个单数的数值。 有一批数值,其中有2个数值是单数出现的,其他数值都是双数出现的,求这2个单数的数值。(如:1、2、3、2、1、4、4,这里面只有3只出现了1次,是单数出现的)要求:时间复杂度 O(N)   空间复杂度O(1)二、异或运算 介绍  如果a、b两个值不相同,则异或结果为1

2021-11-25 00:28:31 1822

转载 索引失效的情况有哪些?

文章目录列与列对比索引列存在NULL值NOT条件LIKE通配符条件上包括函数复合索引前导列区分大数据类型的转换Connect By、Level谓词运算列与列对比某个表中,有两列(mobile和phone)都建了单独索引,下面这种查询不会走索引:select * from test where mobile = phone;这种情况被认为还不如走全表扫描。索引列存在NULL值Mysql在字段为允许null时,存在null值,会不会影响索引使用NOT条件建立索引时,会给每一个索引建立一个条目

2021-11-03 13:09:34 240

原创 又是一年1024,程序员节快乐!

2021-10-24 16:43:37 106

原创 Java是值传递(没有引用传递)!!!

  很多程序设计语言(特别是,C++和Pascal)提供了两种参数传递的方式:值调用和引用调用。有些程序员认为Java程序设计语言对对象采用的是引用调用,实际上,这种理解是不对的。由于这种误解具有一定的普遍性,所以下面给出一个反例来详细地阐述一下这个问题。  请问下面的employee1和employee2交换引用地址了吗?public static void main(String[] args) { Employee employee1 = new Employee("张三",15

2021-08-09 17:32:01 69

原创 Java核心技术:卷1基础知识(第十版)笔记一:基础设计结构

文章目录基本程序设计结构数据类型整型浮点类型char类型Unicode和char类型boolean类型变量运算符数学函数和常量数值类型之间的转换位运算符字符串字符串拼接输入输出文件输入与输出控制流程大数值数组基本程序设计结构数据类型整型Java提供了4种整形,byte   1字节short   2字节int    4字节long   8字节  在Java中,整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移

2021-08-06 18:47:48 274

SSM+Maven+Oracle+Log4j+Idea

。在这里把自己整理的框架分享一下。SSM+Maven+Oracle+Log4j。只是写了一个简单的登陆界面。数据库是train,表是person。具体的可以下载项目看一下,就一个简单的示例框架。

2019-07-09

空空如也

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

TA关注的人

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