自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【并发编程】自研数据同步工具的优化:创建线程池多线程异步去分页调用其他服务接口获取海量数据

上面代码会有一个问题,就是while循环往线程池里扔任务,所有线程在执行时,会在请求数据那里”停留“一段时间,“停留期间”还会一直循环向线程池扔任务,当线程执行完某次请求得到空数据结束循环时,等待队列中还排着大堆任务等着去请求数据。刚开始的设计思路是,,我创建多个服务同时去请求A服务的接口,每个服务都请求到全量数据,由于这些服务都注册在xxl-job上,而且采用的是分片广播的路由策略,那么每个服务就可以只处理请求到的所有数据中。的部分数据,然后交给kafka,由kafka决定这条数据应该放到哪个分区上。

2023-08-10 20:28:54 2418

原创 【数据库】使用ShardingSphere+Mybatis-Plus实现读写分离

书接上回:数据库调优方案中数据库主从复制,如何实现读写分离ShardingSphere 实现读写分离的方式是通过配置数据源的方式,使得应用程序可以在执行读操作和写操作时分别访问不同的数据库实例。这样可以将读取操作分发到多个从库(从服务器),从而提高读取性能,同时将写操作发送到主库(主服务器)以确保数据的一致性。

2023-08-25 16:14:09 530

原创 【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)

当数据量过亿时,此时要是延续上面的方案,至少需要10个数据库,当数据量再多,过10亿时,至少需要100个数据库,这是不现实的。还有就是,现实中,一天可能就会产生1000w条数据,两个主数据库的单表会很大,影响读和写的性能。在双主架构中,有两个主数据库实例(也称为主节点),每个主数据库都可以处理读写操作,而不仅仅是一个主数据库处理写操作,另一个主数据库处理读操作。除了普通的用户查询操作,增、删、改操作都包含查询操作,所以说,在一个应用中,查询操作是占比最高的,提高了查询效率,整体性能都会有所提升。

2023-08-23 20:36:28 1315 1

原创 【并发编程】经典线程不安全问题(多线程操作同一个资源容易产生相互覆盖)

高速缓存(Cache)是计算机体系结构中的一种关键性技术,用于提高数据访问速度和系统性能。它在处理器和主内存之间充当了一个临时存储器层,用于暂存常用的数据和指令,以减少处理器对主内存的访问次数,从而提高数据访问速度。高速缓存往内存更新的时机是不确定的,如果数据更新回内存,高速缓存中的数据一定会清除,下次再计算需要重新在内存拷贝一份到高速缓存计算。

2023-08-23 00:17:02 256

原创 【并发编程】详解并发编程中Synchronized的特性(可见性、有序性、可重入性、禁止指令重排序)(๑•̀ㅂ•́)و✧

假设线程 A 执行 writer()方法,随后线程 B 执行 reader()方法。上述 happens before 关系的图形化表现形式如下:在上图中,每一个箭头链接的两个节点,代表了一个 happens before 关系。黑色箭头表示程序顺序规则;橙色箭头表示监视器锁规则;蓝色箭头表示组合这些规则后提供的 happens before 保证。上图表示在线程 A 释放了锁之后,随后线程 B 获取同一个锁。在上图中,2 happens before 5。

2023-08-22 11:22:20 356

原创 【并发编程】详解并发编程中Synchronized关键字的三种应用方式以及代码讲解(๑•̀ㅂ•́)و✧

在 Java 中,关键字 synchronized **可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块**(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到 synchronized 另外一个重要的作用,synchronized 可保证一个线程的变化(主要是共享数据的变化)被其他线程所看到(保证可见性,完全可以替代 Volatile 功能)。

2023-08-22 10:44:20 139

原创 【仿写框架之仿写Tomact】四、封装HttpRequest对象(属性映射http请求报文)、HttpResponse对象(属性映射http响应报文)

HttpRequest对象中的属性与HTTP协议中的内容对应,用于后序servlet从request中获取请求中的参数。

2023-08-17 16:28:13 814

原创 【仿写框架之仿写Tomact】一、详解Tomcat的工作流程

当涉及到Java Web应用程序的部署和运行,Apache Tomcat无疑是一个备受欢迎的选择。Tomcat作为一个开源的、轻量级的Java Servlet容器和JavaServer Pages (JSP) 容器,扮演着连接用户和应用程序的重要角色。本篇文将向大家阐述Tomcat的执行流程,从启动到请求处理再到关闭,帮助您更好地理解Tomcat在Java Web开发中的作用。

2023-08-17 15:22:13 316

原创 【JVM】如何判定一个对象已死以及“标记-清除”、“标记-复制”、“标记-整理”三种垃圾收集算法

使用可达性算法分析:通过 一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”,如果某个对象到GC Roots间没有任何引用链相连, 或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的(在对象中添加一个引用计数器,每当有地方引用这个对象的时候,引用计数器的值就+1,当引用失效的时候,计数器的值就-1,当引用计数器被减为零的时候,标志着这个对象已经没有引用了,可以回收了!

2023-08-16 09:47:33 712

原创 【JVM】对String::intern()方法深入详解(JDK7及以上)一文搞懂

String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用;否则,会将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。----书上描述已经包含。。。可能不太好理解。我画图解释方法的执行顺序肯定是从下向上依次执行的。

2023-08-14 23:46:40 762

原创 一条sql语句在mysql中如何执行(查询+更新)

连接器主要和身份认证和权限相关的功能相关,就好比一个级别很高的门卫一样。负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作。如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。如果用户名密码认证通过,那么连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。也就是一个用户已经成功建立连接之后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。

2023-08-05 11:52:06 840

原创 [Spring]Spring@Transactional 声明式事务总结(事务的传播行为、事务的使用、@Transactional失效场景)

声明式事务管理是建立在 AOP 之上的。其本质是通过 AOP 功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前启动一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明或通过 @Transactional 注解的方式,便可以将事务规则应用到业务逻辑中,减少业务代码的污染。最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。

2023-07-27 11:54:32 455

原创 [数据库]对数据库事务进行总结

事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

2023-07-27 10:01:55 574

原创 【设计模式】详解观察者模式

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,它的所有依赖者都会收到通知并自动更新。(MQ和它有点像)当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。Subject(抽象主题):也称为被观察者或可观察者,它是具有状态的对象,并维护着一个观察者列表。抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者。

2023-07-26 18:43:56 2607

原创 【JVM】详解对象的创建过程

并发情况下,需要考虑操作的步骤是不是原子性,如果不是,就要加锁。原子性就是动作不能再继续被拆分了,读是原子性,写也是原子性,但是读+写就不是原子性。

2023-07-26 16:50:14 1268

原创 【设计模式】详解单例设计模式(包含并发、JVM)

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。

2023-07-25 18:43:07 782

原创 【JVM】详解JVM的五大内存模型、可能出现的异常以及堆栈引用易错点

源自:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) 周志明。

2023-07-25 14:01:38 1510

原创 [Java]Java中n++,n--的相关问题

【代码】[Java]Java中n++,n--的相关问题。

2023-07-24 09:50:40 282

原创 [SpringMVC]仿写SpringMVC(注解开发)

当前版本无接受网络请求功能,不喜勿喷🙏🙏。本文将对代码核心进行讲解,源码已上传到。

2023-07-23 21:01:13 172

原创 [JVM]String str1 = new String(“yhz“)和 String str2 = “yhz“ 的区别

如果字符串常量池中没有"hello",那么当执行String str1=“hello"时,会在字符串常量池中创建一个"hello"实例,并将"hello"实例的地址返回给str1。执行到String str3 = new String(“hello”) 时,会先去字符串常量池中看是否有"hello"实例 ,由于之前已经创建了,所以直接去堆中开辟一块空间,创建一个value为字符串常量池中"hello"实例的地址的字符串对象,并将在堆中new出来的对象的地址返回给str3。

2023-07-23 00:00:00 536

原创 [Java]详解什么是注解以及如何自定义注解?

①:注解一般用于对程序的说明,就像注释一样,但是区别是注释是给人看的,但是注解是给程序看的。②:让编译器进行编译检查的作用,比如下边这个@Override注解是重写的意思,子类重写了父类的方法,但是改动了方法名,所以报错。①:@interface是用来声明一个注解的,格式public @interface 注解名{定义内容}②:其中的每一方法实际上是声明了一个配置参数③:方法的名称就是参数的名称④:返回值类型就是参数的类型(返回值类型只能是基本数据类型,Class,String,enum)

2023-07-22 16:46:03 281

原创 [VUE]Element_UI 实现TreeSelect 树形选择器

最近在做一个人员管理系统,在增改用户信息时,可能会设置用户所在的部门,因为部门是多级的,于是想到用Element_UI的TreeSelect组件实现。

2023-07-21 10:52:42 1602

原创 JDK、JRE与JVM三者之间的关系及区别

JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。什么是JDK,JDK是用于Java程序开发的最小环境,包含:Java程序设计语言,Java虚拟机(JVM),Java类库(API)。JVM(Java Virtual Machine)即Java虚拟机,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。什么是JVM——Java虚拟机,它是 Java 实现平台无关性的基石。

2023-07-19 14:32:21 276

原创 [Java]Set、Map、List常见实现类的特点、使用方法总结

且向HashSet集合中添加元素,HashSet add方法实质是map全局变量调用了put方法,将数据存到了key,因为HashMap的 key不允许重复,所以HashSet添加的元素也不允许重复。②.get(Object key) 返回指定键所映射的值,没有该key对应的值则返回 null,即获取key对应的value。⑨.remove(int index) 移除列表中指定位置的元素,并返回被删元素,删除位置后面的元素(如果有)向前移动。//用来判断集合容器中是否含有参数元素。

2023-07-18 13:41:06 1541

原创 [Java]重写equals为什么要重写hashcode???配合HashMap源码一起理解

用哈希取余法,也就是拿hashCode和存储元素的数组的长度取余,获取 key 对应的 value 所在的下标位置。如果获取到的下标位置上已经存在元素,则认为产生了**哈希碰撞**(hashCode() 所使用的散列算法也许刚好会让多个对象传回相同的散列值。)再拿新添元素(新的)与当前位置上的元素(旧的)进行equals比较,如果返回true就用新的替换旧的。如果返回false就添加到该位置下面的链表尾或红黑树上。而如果没有发生哈希碰撞,也就间接说明两个对象不相等。

2023-07-18 09:28:50 101

原创 泛型和Object类的区别

泛型:如果我确定要用哪个对象,并且使用到这个对象里面的属性,选择用泛型,因为泛型代表着更精确的对象,能够使用独有的方法。Object类:Object是所有类的父类,特别笼统,且只能使用固定的属性。只要有Object的地方,基本都能用泛型替代。

2023-07-18 08:00:23 244

原创 【SpringBoot】自定义一个SpringBoot starter 怎么实现

规范的starter包含两个model,一个autoconfigure,提供自动配置代码,一个starter,会加载 autoconfigure,并提供启动所需的所有依赖。定义一个starter模块和autoconfigure模块,starter模块依赖autoconfigure模块,并提供启动所需的依赖。starter模块不提供服务。定义Starter需要的配置类(Properties)xxxProperties编写Starter项目的业务功能xxxService。

2023-07-17 19:19:04 1635

原创 什么是Nginx的反向代理与正向代理详解

正向代理,“它代理的是客户端”,是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标(目标服务器),然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。正向代理中目标服务器并不知道访问它的真实用户是谁,因为和它交互的是代理服务器。比如我们在国内访问国外的YouTube、Twitter等网站,就是通过代理服务器实现的,这个就是正向代理的过程。

2023-07-15 13:46:13 355

原创 Nginx中 location 工作流程

location 指令是 nginx 中最关键的指令之一,location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应。

2023-07-15 00:00:59 287

原创 VUE项目devServer.proxy(正向代理)匹配请求中的地址工作流程

在devServer中配置proxy属性,可以将指向本地的请求(例如: http://localhost:8080/api/action) 代理到后端的开发服务器上(例如: http://localhost:8089/personal-management/action)。当浏览器发起一个请求后, 前端拿配置项中的地址去匹配请求中的地址,如果请求的地址中包含配置中的地址,则匹配成功,匹配成功后,会将匹配到的地址及其后面的地址拼到target的后面,向后端服务器发起跨域请求。

2023-07-14 23:29:21 1927 1

原创 mybatis-plus 实现自动填充

*** @Description: 自动填充处理器} }/*** @Description: 自动填充处理器} }/*** @Description: 自动填充处理器} }/*** @Description: 自动填充处理器} }/*** @Description: 自动填充处理器} }/*** @Description: 自动填充处理器。

2023-07-13 11:56:44 155

原创 Java解决魔法值问题

魔法值,也叫做魔法数值、魔法数字,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性。除数字之外,代码中作为key值的常量字符串也被认为是魔法值,尽管其表示含义比数值较为清晰,但是仍然会产生不规范问题。a = 2;在运行的时候不会报错,但在代码阅读时很难判断他所代表的含义接口中定义,实现这个接口的实现类都可以使用这些常量。

2023-07-11 17:13:05 518

原创 git merge 与 git rebase 的区别

首先我们要清楚,git merge 与 git rebase 处理的问题是一样的,这两个命令都用于把一个分支的变更整合进另一个分支,只不过他们达成同样目的的方式不同。刚开始,已经存在一条分支,这条分支的名字是base(黄色的),后来基于base分支,创建了new1分支,此时,base分支的指针和new1分支的指针都指向了base最新的提交。

2023-07-10 13:52:02 387

原创 在idea中添加mapper.xml文件模板

填入映射mapper接口文件即可编写sql。最后 点击 apply 、ok 大功告成。

2023-07-10 09:53:17 2483 1

原创 线程池的使用

当非核心线程超过多长时间不执行任务,处于空闲状态,线程池会将它回收,直到线程数量达到核心线程数。线程池尽量不要使用的时候再创建,不要在业务逻辑里面去创建线程池,因为这样会在每次调用这个方法的时候,都会创建一个线程池。最大线程数 (maximumPoolSize):当核心线程数满了,当队列也满了,再来新任务,就会创建新非核心线程来执行这个新任务,直到线程数达到最大线程数。核心线程数(corePoolSize):当线程池的线程都忙碌时,再进来新任务时,由最小线程数扩容到核心线程数。需要for循环查询数据库。

2023-07-08 21:49:14 951

原创 将xxl-job集成到自己的项目中,部署并测试

XxlJob注解里的内容为任务的处理程序JobHandler对应内容:(不要瞎写!ip为网卡ip,通过ifconfig指令查看 eth0。端口为配置文件里设置的执行器端口。

2023-07-08 01:23:48 403

原创 聚合项目(父子Maven项目)如何打jar包

【代码】聚合项目如何打jar包。

2023-07-08 00:54:30 210

原创 配置部署调度中心 xxl-job-admin

XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。源码地址: https://gitee.com/xuxueli0323/xxl-job文档地址: https://www.xuxueli.com/xxl-job简单灵活提供Web页面对任务进行管理,管理系统支持用户管理、权限控制;支持容器部署;支持通过通用HTTP提供跨平台任务调度;丰富的任务管理功能支持页面对任务CRUD操作;支持在页面编写脚本任务、命令行任务、Java代码任务并执行;

2023-07-07 12:11:30 1468

原创 运行容器时报错docker: Error response from daemon: driver failed programming external connectivity

Error response from daemon: driver failed programming external connectivity on endpoint XXX(端口映射或启动容器时报错)解决办法:输入指令 如下指令,重启docker服务及可重新生成自定义链DOCKER。

2023-07-07 10:18:31 379

原创 MySQL高性能优化规范建议

索引 NULL 列需要额外的空间来保存,所以要占用更多的空间进行比较和计算时要对 NULL 值做特别的处理。

2023-07-06 11:56:03 948

空空如也

空空如也

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

TA关注的人

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