自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

开开心心,努力生活

积累工作、学习中的知识~

  • 博客(49)
  • 资源 (3)
  • 收藏
  • 关注

原创 SpringBoot+MybatisPlus实现读写分离,自动切换数据源,主从同步

是Mybatis官方使用的SpringBootStarter,因为我这边自定义了Mybatis连接的相关属性名用来切换数据源,所以我需要自构一个/*** 数据源配置组*//*** 默认数据源配置*/try {@Bean// 创建数据源// 根据objMap创建DataSourceProperties,遍历objMap根据属性反射创建DataSourceProperties// 设置数据源// db0为默认数据源@Override。

2024-05-15 14:15:22 887

原创 Java服务中断之前执行某段代码

日前遇到了一个场景,需要在服务中断之前更改正在运行任务的状态,便于后续任务的继续执行。将这段代码放在你需要触发这个功能的逻辑块内即可。

2023-12-25 16:40:02 402

原创 开发一个简单的数据库路由进行分库分表

使用数据库路由是在业务体量很大, 数据量增长过快,所以要把用户的数据拆分到不同的库表中,以此来减轻单机的压力。数据库路由是用于分库分表操作,有两种方式。1)垂直拆分根据业务分类,将不同的业务表分布在不同的数据库中。可以将数据的压力分担到不同的数据库中,专库专用。2)水平拆分当垂直拆分遇到单机瓶颈的时候,就可以将一张数据表拆分多张表,放在不同的数据库中。本篇文章也是基于水平拆分进行讲解。代码有很多,我们主要介绍一下切换数据源的代码以及通过散列设置库表索引的方法。1)数据源切换。

2023-07-27 15:00:14 721 2

原创 Spring自动装配的底层逻辑

这句代码,跟着代码走到最后,发现最终是将对应的beanDefinition放到了ConcurrentHashMap中,实现了Bean的装配。使用Spring之前我们要先去web.xml中设置一下Spring的配置文件,在Spring的配置文件中,是通过。这要看在这个配置文件顶部配置的context命名空间。看源码+一些自己的理解,如有错漏,请指正。然后根据这个命名空间去context对应的jar包中找到。这自动装配的逻辑过得有点快,不管了,先这样。底下所有的类装配到容器中。这个方法中最重要的就是。

2023-02-22 14:12:44 417

原创 从0到1开发一个简单的RPC框架

RPC就是远程过程调用,在工作中很多需求背景都会有多个服务器,有服务器A、服务器B、服务器C。有时候就会需要服务器B调用服务器A上的某个方法,这时候就需要用到RPC了。市面上也有很多成熟的RPC框架,在我国常用的就是Dubbo。因为它有比较好的社区动态,也有比较成熟的案例项目。Dubbo、Motan、gRPC、Thrift,这四种是比较常见的RPC框架RPC开发商生态/社区活跃度适配语言Dubbo阿里√Motan新浪×JavagRPCGoogle√Thrift。

2023-02-07 11:14:53 659

原创 Java基础面试题(更新中……)

String若要修改值,每次都需要重新创建一个对象,然后再将指针指向新的对象,而旧的对象就会留存等待GC清除。而StringBuffer和StringBuilder都是继承了AbstractStringBuilder,在AbstractStringBuilder中定于数组value没有使用final关键字,所以这两个对象都是可变的。具体表现为,无论如何修改String都无法修改到这个字符串本身的值,而是返回一个新的字符串对象。String对象是不可变的,也就可以理解是String是线程安全的。

2023-01-28 16:07:46 573

转载 一文讲清推荐算法原理

近几年,推荐算法越来越火。所谓推荐算法,其实是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西。推荐算法的价值在于帮助用户解决信息过载,做出更好的选择,这也是现在互联网领域最强大和最流行的信息发现工具之一。日前,娱乐向机器学习解说选手莫凡在公众号“华章计算机(ID:hzbook_jsj)”发表文章,文章分析了推荐算法背后的原理,以及推荐算法为何会“失灵”。以下是重点内容。1. 推荐算法为啥这么“灵”?互联网最大的特点就是有海量的信息,不过,光是数量庞大是没有任何意义的,只有信息真正发挥作用

2022-06-23 14:43:02 1352

原创 记录一下搭建vue项目遇到的问题

一、index.html页面无法渲染我们都知道vue项目入口是由main.js、app.vue、index.html三者组合而成的,具体的逻辑就是webpack将main.js、app.vue打包成一个js,然后再将js插入到index.html中。如果main.js是默认路径,那没有问题。但是我们有时候会想要修改main.js的路径,方便我们代码的管理。如果没有修改webpack配置,那首先会找不到main.js然后项目启动起来后,index.html是为空的。这个问题去修改vue.config.js的

2022-06-10 11:01:26 1629

原创 Windows系统搭建Redis哨兵集群模式详细介绍

哨兵集群是Redis的高可靠性的一种运行模式,基于主从库模式,增加哨兵结点。哨兵之间会进行通讯,如果主库断开连接,哨兵就会去选举一个从库来当作主库。使Redis一直处于高可用的状态。一、安装RedisWIndows安装Redis,下载地址:https://github.com/tporadowski/redis/releasesRedis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 D 盘,解压后,将文件夹重新命名为 re

2022-05-07 14:20:42 1967 7

原创 Spring Cloud 实战(三)将RestTemplate替换为OpenFeign

前两篇文章分别实战了Eureka的客户端、服务端以及Hystrix熔断、降级Spring Cloud 实战(一)以eureka作为服务注册中心Spring Cloud 实战(二)使用hystrix有效处理服务雪崩然而这两篇文章中客户端相互调用的方式采用的是RestTemplate并用注解@LoadBalanced标注为负载均衡。本篇就采用OpenFeign来调用其他的客户端。OpenFeign:声明式Rest客户端Feign是一个声明式 Web 服务客户端。它使编写 Web 服务客户端更容易。

2022-02-18 15:17:49 842

原创 Spring Cloud 实战(二)使用hystrix有效处理服务雪崩

在分布式系统中,我们可能会有服务A调用服务B然后服务B再调用服务C的业务。那么如果服务C宕机了或者阻塞了,服务B同时也会阻塞,服务A也会阻塞。如果对此不做任务处理的话,那么服务ABC会全部宕机,这就是服务雪崩。

2022-02-16 17:21:56 456

原创 Spring Cloud 实战(一)以eureka作为服务注册中心

eureka是一个服务发现注册框架,它保证了AP原则,即保证了可用性+分区容错性。CAP原则指的是在分布式系统中,最多只能满足其中两个需求,不可能三个需求全部满足。

2022-02-12 15:41:17 342

原创 Spring Cloud 入门学习(一),Eureka和Hystrix

一、Eureka(服务发现框架)图片中可以看到总体架构分为了两个角色:Eureka Client 和 Eureka Server。而其中Eureka Client 又分为了Application Service 和 Application Client即服务提供者和服务消费者。可以简单的理解为,服务提供者卖家、消费者是买家、Eureka Server就是中间商。Eureka的基础概念Register,服务注册。Eureka客户端向Eureka服务端注册时,会将客户端的元数据(IP、端口、主页等

2022-02-07 15:08:44 533

原创 记录Java序列化关键字transient

1、序列化就是将对象写入io流的过程。2、反序列化就是从io流中提取对象的过程。这是在网络传输的过程中需要必须进行的操作,也是为了网络传输的安全性。所以建议每个JavaBean都需要进行序列化操作。通常我们序列化是让某个对象实现Serializable接口,就会自动序列化。有些场景我们传输对象的时候不能对所有的字段进行序列化。比如一些敏感的字段:身份证、密码等等。那么我们就只需要在不要序列化的变量前面加上transient关键字进行修饰就可以了看代码import java.io.*;pu

2022-01-26 16:49:52 118

原创 记录volatile的用法

volatile的玩法一、作用1、保证变量在内存中对线程可见。2、禁用指令重排。二、用法1、可见性public class VolatileTest { private static volatile int count = 0; public static void increase() { count++; } public static void main(String[] args) { for (int i = 0;

2022-01-26 15:14:39 234

原创 SpringBoot引入本地jar包,打包成war并成功部署。

在做项目的时候,有时需要引入第三方Jar包来完成指定的功能。

2021-11-05 11:32:43 1350

原创 echarts中国旅客迁徙地图

功能1、省份根据数据显示不同的颜色。2、点击省份可以切换地级市。3、增加迁徙动态图。JavaWeb端使用Vue整合EchartsEcharts学习网站1、想要地图能够随着内容呈现不同的颜色那么就需要使用series.map配置选项,这个配置项中, 有个geoIndex,这个是选用的geo的索引。当设置了索引后,series-map.map 属性,以及 series-map.itemStyle 等样式配置不再起作用,而是采用 geo 中的相应属性。然后在option中配置visualMap.

2021-08-01 22:00:55 644

原创 thymeleaf的不同用法

一、获取项目路径contextPath将下面代码写到共用的html中let context = [[@{/}]]//这种方法Javascript汇报错,导致了在idea中,//只要在{后面回车,就会自动增加一个}所以可以采用下一个方法/*<![CDATA[*/ context = /*[[@{/}]]*/ '';/*]]>*///这样不会报错,也能正常使用二、创建共用HTML,可以将HTML中任意模块引入到你想要引入的页面这个需要用到两个thymele...

2021-07-31 21:27:42 246

原创 springboot + thymeleaf页面无法访问的问题

1、访问html总是404查了各种方法。1、有说springboot 和 thymeleaf版本不匹配的(我是springboot.io自动创建的,所以不是这个问题)2、自己打断点,跟着看,也看不出什么东西3、查看application.properties文件,取消了手动设置的suffix和prefix(依旧不行)查看了各种方式后,终于让我发现问题所在了!!之前自以为是的,在application.properties中配置了这一行代码:spring.thymeleaf.servlet.co

2021-05-25 14:53:40 3071 4

原创 Group by分组,为分组后的数据添加序号

需求如下:根据两个日期区间查询出两个查询列表,表1、表2。并根据日期,以及名称进行group by,并合并数量本期数量、同期数量。其中查询出来的数据,可能表2不存在表1的日期,所以不能用时间来合并数据。SQL代码如下:select t.cyr,t.orders,t.date,sum(case when t.b_cn ='b_cn' then 0 else t.b_cn end) b_cn,sum(case when t.t_cn ='t_cn' then 0 else t.t_cn end) t

2021-04-26 13:50:39 3323

原创 如何用Java获取并操作系统进程?

声明:本篇文章主要记录如何使用 Java查询Windows电脑的进程,并解析结果,显示于浏览器上。使用SpringBoot没有写前端框架,简单的生成一个Table显示在浏览器上。后续有空,就写个前端,使用仪表盘显示。内容:代码主要使用了dos的几个命令:查找进程列表命令:tasklist根据pid删除进程命令:tasklist /f /pid 123456查询当前系统的内存命令:wmic ComputerSystem get TotalPhysicalMemory代码:查询进程代码: p

2021-03-11 14:57:27 2390

原创 初学RabbitMQ(四),整理总结一下之前学的相关知识,了解SpringBoot整合RabbitMQ的简单用法。

前三篇,主要记录了,RabbitMQ的安装,并使用SpringBoot整合RabbitMQ。本篇就对其进行整理和总结。如何安装RabbitMQ的内容本篇就不说了,可以去看别人的博客,安装教程很详细。安装好MQ后,访问MQ服务端页面,可以看到有多个选项卡。Exchange就是交换机、queues就是队列,现在主要使用的就是这两个东西。既然只使用这两块,那么这两块有什么关系呢?那来看一下MQ生产与消费消息的流程图。如果我们生产者需要发送消息到MQ中,那么就必须要有对应的交换机和队列(因为他们.

2021-03-01 18:00:24 228

原创 初学RabbitMQ(三),了解回调函数,并手动确认消息进行消费

初学RabbitMQ(二),初识扇形交换机与主题交换机前面两节,说明了常用的三种交换机(直连交换机、扇形交换机、主题交换机)以及对应的用法。但是实际开发中,可能会需要判断消息主体,来确定该消息需要进行怎样的逻辑确认,从而判断获取到的消息是否需要ACK。首先调用回调函数,需要在application.properties中完成相关的配置,在这一系列中,使用的SpringBoot版本是2.4.3spring.application.name=MqProducer##配置rabbitmqspring

2021-02-24 18:04:10 2441

原创 初学RabbitMQ(二),初识扇形交换机与主题交换机

在上节中,说了RabbitMQ安装与其流程图以及直连交换机的用法与逻辑。本节,主要学习扇形交换机与主题交换机的用法。扇形交换机 amq.fanout amq.fanout是RabbitMQ中默认的扇形交换机的名字,可以直接绑定该交换机,也可以自定义一个扇形交换机,再创建队列进行绑定。 可以会用多个队列绑定一个扇形交换机,消费者消费其中的数据时,会拉取扇形交换机中绑定的所有队列。理解了扇形交换机,那么就编写一下生产者mqproducer的代码,pom的依赖文件如下:<depend

2021-02-23 18:01:04 544 2

原创 初学RabbitMQ(一),使用SpringBoot进行简单的整合,初识直连交换机。

安装RabbitMQ由于RabbitMQ是基于erlang开发出来的,所以需要安装ErLang环境,再安装RabbitMQ。附上安装教程链接~RabbitMQ的流程逻辑安装成功后,即可访问http://localhost:15672/,MQ的服务端。这个页面中,Exchange标签对应的是交换机、Queue标签对应的是队列 。消费者是从队列中获取消息,而队列是和交换机进行绑定的,可以看如下流程图。在RabbitMQ中有七个默认的交换机,常用的交换机有直连交换机(DirectExchange)

2021-02-22 17:38:43 191

原创 如何理解按位与(&)、按位或(|)、按位异或(^)?

今天做题遇到了一道题如下:int x=3,y=6,z=0;z = x ^ y << 2;那么z的值等于多少呢?它的二进制又是多少呢?这一道题就涉及到了按位异或(^)运算符和左移运算符<<接这个式子的优先顺序是先计算y<<2,再计算x^y。那么就理解一下y<<2等于多少?1.按位异或(^)y=6,可以将6转换为2进制为00110,那么左移两位就为11000,其十进制为24。那么就接着计算x^y了,x的二进制为00011,y的二进制为..

2021-02-02 16:52:29 1631

原创 各类SQL语句汇总

1.将结果进行排序后,对排序后的数据进行排名select t.score Score,CAST((case when @rowtotal = t.score then @rownum:=@rownum + 0 when @rowtotal := t.score then @rownum:=@rownum + 1 when @rowtotal = 0 then @rownum:=@rownum+1 end) AS SIGNED) as `Rank` from (select.

2021-02-02 10:48:20 573

原创 收集近期开发遇到的问题

spring boot - jpa 异常数据查询连接异常Cannot determine value type from string 'pc1'这个异常表示的是:字段与表属性不匹配字段类型与表属性不匹配没有构造函数本人遇到的问题是:类型不匹配Model映射异常在Idea中Model上加入Entity注解后,@Table注解异常,@Column注解也异常。提示找不到对应的表与字段。1.在Idea中配置数据源2.将表与数据源对应最后选择Data Soucespring

2021-01-22 17:23:09 89

原创 Java实体类反射配合自定义注解自动生成数据库表

前言在SpringBoot环境支持中,通过反射机制获取到实体类的属性列表,判断属性是否是主键,是否该属性不能为空,是否该属性是唯一索引。这需要自己创建自定义注解,IDField、FieldUnique、NotNull等注解。自定义注解自定义注解有很广的用途。例如在SpringAOP中,可以在需要拦截的方法上添加自定义注解或官方注解。在Java中,class是类、abstract是抽象类、interface是接口而@interface就是注解import java.lang.annotation.*

2021-01-18 14:23:52 555

原创 早睡身体好!SpringAOP学习笔记

什么是SpringAOP?AOP(Aspect Oriented Programing)面向切面编程。在整个程序贯穿之下,存在N个切点,而切点会连接着横切面。若程序执行到了连接点后,就会进入到横切面中执行你的逻辑增强。AOP相关注解@Pointcut该注解是指定一个切点,拦截你需要拦截的东西进入切面,这里介绍两种常用的表达式:execution()和annotation()execution(* * com.service..*(..))该表达式的意思是,监听了com.service

2021-01-12 15:15:20 305

原创 利用Java实现哲学家进餐问题并提供解决方案~

哲学家进餐问题,是并发执行共享资源的代表性问题。某天有五位哲学家围在一张桌子上吃饭,桌子上有五根筷子,每个人的左手边都有一只筷子。吃饭嘛就得有两根筷子才能吃,但是每个人都先抢左手筷子再抢右手筷子,抢完左手筷子体力不行了休息一秒再接着抢,不出所料,右手筷子已经被别人给抢了,总所周知每个哲学家都轴得很就是不让,大不了一起“饿死”。此时就产生了死锁。如何用java重现这个场景呢?通过面向对象的思想就很简单。这个场景中,主要有了两个对象,筷子与哲学家。public class ChopSticks.

2020-11-11 15:07:39 424

原创 落伍了!竟然还可以利用Redis完成定时任务的需求!

有些场景,我们需要在某个时间(甚至是以秒为级别)对数据进行操作。有几种解决方案:使用定时框架quartz等,如果需要做以秒为单位的定时任务,那是相当大的一个体量。这时我们就可以使用redis来完成。使用的框架是Spring boot ,Spring Data Jpapom文件如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs.

2020-10-12 16:53:18 1809 1

原创 学习redis的开发与实践①

使用“万金油”string,数据量大,占用内存大刚启动redis客户端,通过info memory 命令查看内存开销,仅为728416,711.34kb做了测试案例,查询出100万条数据,将id与内容通过string,set到内存中,占用内存为:105036784,100Mb,100w条数据增加了100Mb。如果有几亿条数据呢?那内存占用量是相当恐怖的。这时因为,string的数据结构,包含了两块,一块是内容,一块是元数据。所以通过string将会保存许多我们用不到的数据。若有100M,大约有

2020-10-12 10:32:50 145 2

原创 学习SQL知识优化篇之范式设计及索引优化

首先在设计数据库之前,就应该选好工具,在工具完备的情况下, 再进行逻辑查询优化以及物理查询优化,必要的情况下,还需要找外援(缓存数据库)提高数据库效率。范式设计数据表的范式有哪些?一共有五大范式,分别为1NF,2NF,3NF,DCNF,5NF。就是第一范式、第二范式、第三范式、巴斯科德范式、第五范式(又称完美范式)范式的等级越高,数据表的冗余就越少。并且高范式会包含低范式的所有内容。1NF:每个DBMS都支持的范式,保证数据表属性的原子性,即不可分割的字段。2NF:当前表的非主属性都要与表.

2020-10-08 15:06:34 198 2

原创 学习SQL知识总结之基础篇

SQL 基础知识整理SQL语句是怎么执行的?SQL语句在oracle中的执行过程:1.语法检查,检查语句的语法是否存在问题。2.语义检查,检查语句的寓意是否存在问题。3.权限检查,检查当前用户是否有访问权限。4.共享池若存在共享池中->优化器(软解析)若不存在共享池中->解析器->执行器(硬解析)共享池是oracle中的术语,主要包括了库缓存以及数据字典缓冲区。库缓存存储了SQL语句以及执行计划,数据字段缓冲区存储的是Oracle对对象的定义,比如表、视图、索引等。

2020-10-05 23:23:16 291

原创 总结与归纳Redis持久化、可靠性等

该文章是将近期学习Redis的基础知识进行总结和归纳,纯手打。大篇幅、纯文字。慎看Redis是一个单线程的内存数据库,在主线程中处理命令操作,但是其余的一些操作,比如:rdb快照、AOF日志重写等,都需要主线程fock一个子进程出来处理,所以实际上,Redis不完全就是单线程。由于Redis是将数据保存到内存上的,所以它的速度是非常快的,但是也容易数据丢失,所以Redis大多数是用来做缓存数据库。那么如何来保证Redis的数据的可靠性?这使用了AOF日志以及RDB快照,来保证数据少丢失。也.

2020-09-29 23:21:43 394

原创 初学Redis之Redis主从库模式

AOF日志和RDB内存快照都只是让Redis有数据可以恢复,但是还是存在数据丢失的情况,那就是Redis宕机的时间,有命令传输到客户端,这些数据没有记录到日志或者在快照中。那么为什么Redis还是高可靠性呢?Redis的高可靠主要是:数据少丢失、连接少断开AOF日志以及RDB内存快照都是保证了第一点,那么如何保证第二点呢?那就是要说的主从库。主从库简单来说,就例如:有两个redis实例,redis1(168.172.3.4)和redis2(168.172.3.5),那么可以设置redis2是re.

2020-09-28 23:18:17 514

原创 WIN10安装MySQL8.0出现的问题

通过cmd登录mysql是提示Access denied for user‘root’@‘localhost’ (using password: YES)的问题可以直接输入初始化命令,生成一个临时的密码,登录后修改密码即可,具体步骤如下:1.停MySQL服务net stop MySQL2.需要先将MySql中的Data文件夹里的所有文件都备份后删除。然后输入命令:mysqld --initialize --console;3.启动MySQL服务net start MySQL注意:停止

2020-09-28 15:02:19 176

原创 初学Redis之Redis持久化之AOF日志与内存快照RDB

宕机了,如何避免数据丢失?如果redis作为缓存数据库,那么宕机后我们首先能想到的是从后端数据库中恢复数据。这会出现两种问题:频繁访问数据库,会给数据库造成压力。数据库读取是慢读取,肯定没有redis速度快,会导致应用程序响应变慢。那么对redis来说做数据持久化就是避免频繁的从后端数据库恢复数据,就至关重要了。redis中有两种方式来保证数据的持久化:AOF(Append Only File),只允许追加写RDB内存快照AOF日志我们常见的数据库日志写入就是“写前日志”,在命令执行

2020-09-24 10:53:40 635 1

原创 初学Redis之为什么redis是单线程,但是还能那么快?

redis真的是单线程吗?首先我们得厘清一个事实,我们说的Redis单线程,其实指的是redis的网络IO和键值对是由一个线程执行,这要是redis对外提供键值存储服务的主要流程。此外,还有持久化、意不删除、集群数据同步等都是用额外的线程来执行的。所以严格来说,Redis并不是单线程。但是我们还是说成“单线程”,因为“酷”~redis为什么用单线程?Redis为例在多线程当中,如果有线程1为List做LPUSH操作,线程2做LPOP操作,那么为了List的长度的正确性,就需要将两个线程串行来完

2020-09-22 14:32:46 231

旅客迁徙需要的两个前端页面+一个Java+地图需要的js

主要使用的是thymeleaf + springboot + vue + echarts 1、如果不用thyemeleaf,那就把common.html中需要的代码放到passengerMigrate.html中。 2、需要放到服务器中才可以使用。 3、一些Vue访问后台的代码,就可以写啦。 4、如果有什么疑问,可以加Q:949550242

2021-08-24

echarts迁徙图所需的所有JS文件

echarts做中国迁徙图需要的所有JS文件,包括了china.js,以及省份zhejiang.js等全国所有省份对应的JS文件,还包括了echarts.min.js。做echarts迁徙图,全程无忧。

2021-08-01

ImageConvert.zip

选择系统文件,可以输入文字,将文字添加到图片中。并能指定颜色、字体以及字体大小。

2021-03-31

空空如也

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

TA关注的人

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