自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Brooks Lv

不留余地,不遗余力!

  • 博客(194)
  • 收藏
  • 关注

原创 Mycat+druid+zk实现多租户

前言Mycat的应用场景之一就是实现多租户,多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;接下来我们使用mycat,结合druid拦截sql添加注释头,利用zk修改mycat配置文件中的schema、dataNode节点等信息,来实现多租户。三种实现方案多租户在数据存储上存在三种主要的方案,分别是:独立数据库这种方案一个租户一个数据...

2019-07-07 08:09:09 3005 3

原创 微信小程序登录解密异常

错误描述用户登录微信小程序,初始登录会报错,接着再登录,就会登录成功。后端catch住的异常抛异常原因小程序客户端调用微信服务器的接口顺序反了。小程序客户端需要调用微信服务器的wx.login接口来获取code,然后调用wx.getUserInfo来获取加密数据和偏移向量iv。正确的顺序应该是先调用login,然后再调用getUserInfo。而公司代码先调用了getUserInfo...

2018-09-26 11:56:24 6382 13

原创 微信小程序之登录解密实现

解密流程代码实现小程序客户端wx.login({ // 获取code success: function (res) { //用拿到的code,从后台获取sessionId wx.request({ url: sessionID, method: 'GET', data: ...

2018-09-26 10:55:38 3077 10

原创 Prompt Engneering(提示词工程)

如何向大语言模型提问,或者更好的提问,就是指提示词(Prompt);提示词是给LLM(大语言模型)的指令,它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。LLM会基于 prompt 所提供的信息,生成对应的内容从而获得符合预期的结果。Prompt Engineering 是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。通俗而言,是指如何在不更新模型权重的情况下与 LLM 进行沟通,以引导LLM的输出得到更有意义结果的方法。

2024-02-04 15:22:45 956

原创 AI大模型

GPT,全称"Generative Pre-training Transformer",是一个由OpenAI开发的自然语言处理(NLP)的模型。它的主要目标是理解和生成人类的自然语言。通过对大规模文本数据进行预训练,GPT模型能学习到语言的各种模式,如语法、句法、一词多义等,以及一些基础的世界知识。总的来说,它通过预训练和生成技术,以及Transformer的自注意力机制,来理解和生成人类的自然语言。

2024-01-29 19:49:49 577

原创 解决Slf4J依赖冲突

项目启动,显示类路径包含多个 SLF4J 绑定,将其中一个排除即可。

2023-11-23 09:54:52 422

原创 利用Stream流的Collectors.toMap实现拼接key

想要将StatementEndTime 中的contractId和contractBillId作为key,statementEndTime作为value,转成map。toMap有三个重载方法,我用的两个参数的,但两个参数的存在两个问题,一是key不能重复,另一个是value不能为空。

2023-08-15 15:37:49 2008

原创 java集合List

Java集合一直理解的都是片面的,整理一下,将知识组织成面,更便于理解。

2022-01-10 09:55:41 911

原创 java集合map

本文会对java集合框架中的对应实现HashMap和ConcurrentHashMap的实现原理及工作原理进行总结,用于整理和学习。

2022-01-03 21:52:56 654

原创 @Validated和@Valid实现接口参数校验

目的是优雅的实现参数校验,避免使用if-else。@Valid是javax提供的,可以用在方法、构造函数、方法参数和成员属性(字段)上。可实现嵌套验证。@Validates是spring框架validation类提供的,可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上。可实现分组验证。常用校验实体中参数需要参数校验注解,比如@NotNull等,在文章最后会做一个总结。@Data@TableName("tb_brand")public class BrandEntity imple

2021-09-10 10:06:31 1881 2

原创 spring循环依赖--三级缓存

什么是循环依赖?就是字面意思,AService依赖BService,BService依赖AService。如果不考虑Spring,循环依赖并不是问题,因为对象之间相互依赖是很正常的事情。但是在spring中,循环依赖就是一个问题了,因为一个对象并不是简单 new出来的,而是会经过一系列bean的生命周期,所以会出现循环依赖。有些循环spring可以帮我们解决,有些依赖需要程序员自己解决。我们先说前者,循环依赖的从生命周期说起。Bean的生命周期这里只会描述一下生命周期的大概过程:Spring扫

2021-03-16 14:52:51 666

原创 较完整的 bean生命周期

首先需要说明的是,Bean的生命周期主要指的是singleton bean,标签的scope默认就是singleton。对prototype bean来说,当用户getBean获得prototype bean的实例后,IOC容器就不再对当前实例进行管理,而是把管理权交由用户,此后再getBean生成的是新的实例。普通Java Bean和Spring Bean普通java对象就是new出来,然后不再使用的时候通过垃圾回收机制进行回收; 而springBean是由spring容器来控制的,并且..

2021-03-16 09:19:13 8227 2

原创 ELK系列--ElasticSearch

ElasticSearch设计理念就是**分布式检索框架**。底层是搜索引擎鼻祖Lucene。es对Lucend的操作都封装成了restful的api,通过http请求可以对其进行操作;同时实现了分布式来存储海量数据。

2020-08-13 17:14:06 413

原创 ELK系列-入门篇

为什么用到ELK曾经的我需要分析日志的时候,都是直接去服务器上捞日志,直在日志文件中 grep、awk 获得自己想要的信息。之所以这种方式满足我的需求,是因为当时虽然是分布式系统,也用到springCloud,但还是服务太少,这个服务没找到错误日志,那么在下一个服务,或下下个服务,必然可以找到。但在规模较大的场景中,此方法效率低下,如果遇到服务太多,如果定位问题、日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。这时候就需要一个集中化的日志管理了,所有服务器上的日志收集汇总,然后统一管理,访问。

2020-07-23 17:48:10 212

原创 java日志框架梳理

如果是在一个新的项目中建议使用Slf4j与Logback组合,Slf4j实现机制决定Slf4j限制较少,使用范围更广。Logback拥有更好的性能。

2020-07-15 09:03:01 360

原创 高并发系统降级常用方法攻略

防止雪崩,保证了系统的稳定性,可用性。

2020-07-07 08:59:54 1225

转载 创建多少线程合适呢-----见过最好的多线程文章

为什么要使用多线程?防止并发编程出错最好的办法就是不写并发程序既然多线程编程容易出错,为什么它还经久不衰呢?A:那还用说,肯定在某些方面有特长呗,比如你知道的【它很快,非常快】我也很赞同这个答案,但说的不够具体并发编程适用于什么场景?如果问你选择多线程的原因就是一个【快】字,面试也就不会出那么多幺蛾子了。你有没有问过你自己并发编程在所有场景下都是快的吗? 知道它很快,何为快?怎样度量?想知道这两个问题的答案,我们需要一个从【定性】到【定量】的分析过程使用多.

2020-07-01 10:19:45 260

原创 高并发系统限流常用方法攻略

限制系统的输入、输出流量,保证系统稳定运行。

2020-06-29 09:52:53 967

原创 这样玩儿spring多数据源

分布式服务,经常是一个服务对应一个库,但也有的时候,因为拆分不彻底或其他原因,一个服务需要用到两个库,这个时候,一个服务就需要配置两个数据源,来支持业务的需要。

2019-12-24 15:20:54 183

原创 session一致性问题及token实现

目录cookie出现之前cookiesession概述工作原理集群session丢失session一致性问题解决方法基于IP-hash处在均衡服务器session复制session统一缓冲三种session一致性问题解决方法的适用情况session的不足tokentoken的实现原理token实现思路实践cookie出现之前c...

2019-07-14 21:42:41 756 2

原创 SpringBoot实现原理

最普通的SpringBoot应用启动类import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { ...

2019-07-09 09:27:21 3894 1

原创 SpringBoot-基于spring的约定优于配置

springBoot和spring的关系首先明确SpringBoot是基于Spring的。在我们实际使用Spring Boot进行项目开发的过程中,往往只需要几个很简单的注解配置就能够将应用启动运行了,相比于传统的Spring项目而已,这种提升大大地提高了我们的研发效率。然而,这种便捷性则是通过高度地上层封装来实现的。那么这种高度的生成封装是怎么来的呢?JDk1.5推出注解功能以后,spr...

2019-07-09 09:23:17 5289 1

原创 Mycat实战

目录配置详解server.xmlschemal.xmlrule.xmlmycat实战单库大表拆分跨库分表读写分离第一种方式第二种方式配置详解server.xml<!DOCTYPE mycat:server SYSTEM "server.dtd"><mycat:server xmlns:mycat="http://...

2019-06-30 21:32:43 396 1

原创 Mycat

目录概述为什么用mycat优势数据库分片垂直拆分垂直分库垂直分表水平拆分大数据表拆分成小表常用策略拆分带来的问题1、跨库JOIN的问题,导致查询失败2、跨分片数据排序分页3、全局序列问题4、分布式事务问题MyCAT重要概念概述一个开源的数据库中间件,前端用户可以把它看做一个数据库代理,可用mysql客户端工具和命令...

2019-06-30 21:32:26 895 2

原创 Spring AOP

目录为什么实现AOP硬编码OOPAOPAspectJspring AOP基于注解的spring aop开发基于XMl的开发Spring AOP的实现过程AOP实现原理JDK动态代理CGLib动态代理什么是AOP面向切面编程是一种思想,其编程思想就是把散布于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的模块,这些独立的模块被称...

2019-06-25 09:31:37 1050 1

原创 Spring IOC

目录IOC控制反转控制反转依赖注入IOC是谁控制了谁,反转了什么?依赖注入是谁依赖谁,注入了什么?IOC和DI的对比IOC容器概念组件Bean概念作用域组件Bean注册基于XML基于java配置自动装配IOC控制反转控制反转IOC称为控制反转,是说一个对象如何获取他所依赖的对象的引用,而对象由容器控制,而不是由我们主动去...

2019-06-25 09:30:18 182

原创 【JVM】- 分代、GC算法

一、分代左图是运行时数据区逻辑图,右图是分代逻辑图,右图中上边部分是JDK1.8之前的,下图是JDK1.8之后的;两张图中相同颜色代表相同的区域。从图中我们可以得出,新生代和老年代是属于堆的;在JDK1.8之前,方法区也称为老年代,JDK1.8之后,取消了老年代,取而代之的是元空间Meta Space,也即是1.8后,方法区的实现方式有老年代变为了元空间。设计元空间的目的,一是规避...

2019-06-02 09:13:40 1204 1

原创 【JVM】- 运行时数据区

一、什么是JVMJVM是整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序。java语言“一次编译,到处运行”,正是由于jvm的存在,才得以实现。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码文件),就可以在多种平台上不加修改地运行。而一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的...

2019-06-01 16:47:52 144 1

原创 Maven项目配置tomcat插件

tomcat插件如下:<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-pl...

2019-05-30 11:40:12 939 2

原创 【并发编程】- 乐观锁,悲观锁

并发

2019-05-26 21:47:26 153 1

原创 【并发编程】-- 原子性、可见性、有序性

上篇博客我们提到了Java内存模型,而Java内存模型的建立是围绕三个特征建立的:原子性、可见性、有序性。那么可见性可能出现的问题例如脏读,主内存和工作内存之间的共享变量操作方式,保证了数据可见性,另外volatile的强制刷新增强了可见性;有序性可能出现的问题例如单例的双重锁隐藏的安全性问题,Happens-Before“禁止部分”编译器重排序,另外volatile通过插入内存屏障来禁止...

2019-05-20 16:14:07 1159 2

原创 【并发编程】- JMM和happens-before规则

涉及到并发,我们通常会想到两方面,一方面是使用多线程实现程序并发,另一方面是使用锁防止程序并发。不管是哪一方面都涉及到两大核心,三大性质。两大核心分别是Java内存模型、Happen-Before原则。三大性质分别是原子性、可见性、有序性。在并发编程中主要需要解决两个问题:一、线程之间如何通信;二、线程之间如何完成同步。通信是指线程之间以何种机制来交换信息,主要有两种方式:共享内存和消息传...

2019-05-19 21:43:56 871

原创 分布式基础-序列化性能对比

序列化理解序列化就是将java对象转化为字节文件;反序列化就是将字节文件转化为java对象。比如我们用到Entity都是需要实现序列化接口的。java平台允许我们在内存中创建一些可服用的对象(例如Entity),也即是在一个JVM进程中允许创建可复用对象。如果在同一个JVM进程中(可以理解为架构?),如果需要用此对象,直接传递该对象的引用就可以了。但是对于分布式架构,就相当于多个JVM进程在...

2019-05-12 15:13:17 567

原创 分布式基础-网络通信之NIO

上篇文章介绍了BIO,是阻塞式的输入输出。客户端和服务端在发起请求和响应请求的时候需要保持同步连接,如果数据源或客户端没有数据或请求,或者请求量太大,都会造成线程阻塞,从而影响效率,浪费资源。从JDK1.4开始,Java提供了一些列改进的输入输出处理的新功能,被称为新IO,即NIO,新增了许多用于处理输入输出的类,这些类都被放在java.nio包以及子包下,并且地缘java.io保中的很多类都...

2019-05-04 11:13:52 213

原创 分布式基础-网络通信之BIO

IO什么是IOIO即输入/输出,是input和output的缩写。输入输出是所有程序都必须的部分--使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据)、用户输入数据(键盘、鼠标);使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘、显示器等存储设备中,或显示屏显示。什么是流IO流是java对输入/输出源的抽象表述,是实现输入/输出的基础。通俗理...

2019-04-27 20:44:47 248 1

原创 CGLib动态代理

在spring AOP中,通常会用cglib动态代理来生成AOProxy对象。cglib动态代理和JDk动态代理的不同之处在于cglib动态代理是通过继承被代理类,生成的动态代理类是被代理类的子类,然后通过重写业务方法来实现代理。1、定义被代理类public class cglibPerson { public void findLove(){ System.out....

2019-04-21 19:19:01 272 1

原创 JDK动态代理

代理一般分为三种:静态代理、JDk动态代理、CGLib动态代理;我们常说的代理模式一般只静态代理;mybatis的mapper接口主要应用JDK动态代理;Spring的AOP主要应用JDk动态代理和CGLib动态代理。本文主要介绍JDK动态代理。静态代理原理静态代理由被代理类,代理类,接口三部分组成。代理类和被代理类都需要实现接口,被代理类实现主要业务方法,代理类通过创建一个业务实现类对象来...

2019-04-14 19:11:38 271 1

原创 【Mybatis】- mapper.java接口如何操作数据库-源码分析

1、上篇博客我们拿到了mapper接口的实现类MapperPorxy,sql语句的执行过程也是从这个类开始执行的,在这个阶段最重要的是exector。/** * MapperProxy在执行时会触发此方法 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws ...

2019-04-01 16:25:56 791 1

原创 【Mybatis】- mapper.java和mapper.xml是如何映射起来的-源码分析

上篇博客我们讲到sqlSession是如何产生的。这篇博客我们讲讲mapper.java和mapper.xml是如何映射起来的。程序中我们只有mapper.java接口,没有mapper实现类,那么是如何调用方法的呢?mybatis里所有mapper接口的实现类都可以看做是mapperProxy,mapper代理类,然后调用MapperProxy.invoke()方法,invoke()方法...

2019-04-01 16:14:46 11528 3

原创 【Mybatis】- 获取sqlSession-源码分析

首先,SqlSessionFactoryBuilder去读取mybatis的配置文件,然后build一个DefaultSqlSessionFactory。源码如下:/** * 一系列的构造方法最终都会调用本方法(配置文件为Reader时会调用本方法,还有一个InputStream方法与此对应) * @param reader * @param environment * ...

2019-04-01 15:32:16 544

空空如也

空空如也

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

TA关注的人

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