sharding-jdbc
1、基本概念分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表分为分库和分表两部分,通常分为垂直分库、垂直分表、水平分库、水平分表
1.1、垂直分库垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上。例如,将用户信息表和订单信息表分别存储在不同的数据库中,以减轻单个数据库的负载压力
1.2、水平分库水平分库是将一个表的数据按照某个条件(例如,按照用户ID的范围或哈希值)分散存储在多个数据库中。每个数据库只存储部分数据。这样可以将数据库负载均衡,并提高查询性能。例如,将用户信息根据用户ID的哈希值分散存储在不同的数据库中
1.3、垂直分表垂直分表是将一个表按照列的方式进行拆分,将不同的列存储在不同的表中。每个表负责存储特定的列数据。这样可以降低单个表的数据量和表的宽度,提高查询性能。例如,将用户表拆分为用户基本信息表和用户扩展信息表,分别存储基本信息和扩展信息
1.4、水平分表水平分表是将一 ...
各框架下的SPI机制实现原理
1、基本概念1.1、概念SPI ( Service Provider Interface),是一种服务发现机制。SPI 的本质是将接口的实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载对应接口的实现类。这样就可以在运行时,获取接口的实现类。通过这一特性,我们可以给很容易的通过 SPI 机制为程序提供拓展功能
1.2、使用场景概括地说,适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。比较常见的例子:
数据库驱动加载接口实现类的加载:JDBC加载不同类型数据库的驱动
日志门面接口实现类加载:SLF4J加载不同提供商的日志实现类
Spring:Spring中大量使用了SPI,比如:对servlet3.0规范对ServletContainerInitializer的实现、自动类型转换Type Conversion SPI(Converter SPI、Formatter SPI)等
Dubbo:Dubbo中也大量使用SPI的方式实现框架的扩展, 不过它对Java提供的原生SPI做了封装,允许用户扩展实现Filter接口。
2、java SPI2.1、基本概念 ...
设计模式
创建型模式:创建型模式关注对象的创建过程,主要包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。
结构型模式:结构型模式关注对象之间的组合和协作关系,主要包括适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式和代理模式。
行为型模式:行为型模式关注对象之间的交互和通信,主要包括模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式和访问者模式。
1、单例模式
饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快
12345678910public class Singleton_hungry { //构造函数私有化 private Singleton_hungry(){} //定义私有的引用 private static Singleton_hungry instance = new Singleton_hungry(); //对外提供获取实例的方法 public static Singleton_hungry getInstance()& ...
springBoot
1、Spring Boot基础应用1.1、springBoot特征概念:
约定优于配置,简单来说就是你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时才需要对约定进行替换配置。
特征:
1.SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中
2.使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。
3.自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们
4.使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个j ...
jvm
1、jvm概念1.1、JVM JRE JDK区别
JVM:就是一个虚拟的用于执行bytecode字节码的”虚拟计算机”。一般与OS操作系统打交道
JRE:java运行环境,包含Java虚拟机、库函数、运行Java应用程序所必须的文件
javaw(windos java启动器,不显示黑窗口),libraries(外部类库),rt_jar(核心库)
JDK:java开发工具,包含JRE,以及增加编译器和调试器等用于程序开发的文件
javac(编译器),debugging(调试器),tools,javap(反编译工具)
2、内存结构
注意:常量池,运行时常量池,字符串常量池逻辑上属于方法区,只是存储的物理位置在堆(所以他们属于方法区)
2.1、程序计数器当前线程所执行的字节码的行号指示器。在JVM的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令
特点:(1).为了在线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,独立存储,互不影响。所以,程序计数器是线程私有的内存区域(2).如果线程执行的是一个Java方法,计数器记 ...
mqtt
1、简介MQTT 可以简单看做一个网络协议,用于机器对机器的通信(与客户端到服务器的传输有点区别)。智能传感器、可穿戴设备和其他物联网(IoT)设备通常必须通过带宽有限的资源受限网络传输和接收数据。这些物联网设备使用 MQTT 进行数据传输,因为它易于实施,并且可以有效地传输物联网数据。MQTT 支持设备到云端和云端到设备之间的消息传递。
1.1、特点
轻量级:MQTT协议是一种轻量级的协议,它的开销非常小,可以在低带宽、不稳定的网络环境下运行。
灵活性:双向通信,MQTT协议支持多种消息传输模式,包括点对点、发布/订阅和请求/响应等模式,可以根据不同的应用场景选择合适的模式。
可靠性:MQTT协议支持QoS(服务质量)等级,可以确保消息的可靠传输,同时还支持消息持久化和重传机制,保证消息不会丢失。
易于集成:MQTT协议可以与各种不同的平台和设备集成,包括传感器、嵌入式设备、移动设备和云平台等,可以实现跨平台、跨设备的通信。
安全性:MQTT协议支持TLS/SSL加密和认证机制,可以保证消息的安全传输和身份验证,防止数据泄露和攻击。
1.2、 ...
shiro
1、shiro基本概念Shiro是Apache组织下的一个开源的安全框架,常常用来做:安全认证、权限管理、会话管理、加密
1.1、安全认证可用于验证用户的身份凭证,如用户名和密码。通过配置 Shiro 的 Realm(领域)来自定义身份验证的逻辑,通过 Subject 对象进行身份验证,可以获取用户的身份信息和执行相关操作
1.2、权限管理可以通过配置 Shiro 的 Realm 来定义用户的角色和权限信息,或者使用注解方式进行权限控制。通过 Subject 对象进行权限检查,可以判断用户是否具有某个角色或权限,并根据结果进行相应的处理
1.3、会话管理shiro 提供了会话管理的功能,用于跟踪用户的登录状态和管理用户的会话信息。Shiro 的会话管理可以基于 Web 容器的 HttpSession,也可以使用自己的非 Web 环境会话管理(redis等)
1.4、加密对密码进行加密和解密操作,以保护用户的密码安全。Shiro 支持常用的加密算法,如MD5、SHA、AES等。你可以根据需求选择适当的加密算法进行使用
2、shiro架构
2.1、主体(Subject)Subject即主体 ...
thymeleaf
1. 简介Thymeleaf 是一个服务器端 Java 模板引擎,能够处理 HTML、XML、CSS、JAVASCRIPT 等模板文件。Thymeleaf 模板可以直接当作静态原型来使用,它主要目标是为开发者的开发工作流程带来优雅的自然模板,也是 Java 服务器端 HTML5 开发的理想选择
2. 创建模板文件创建一个html模板文件:
12345678910<!DOCTYPE HTML><html xmlns:th="http://www.thymeleaf.org"><head> <title>Index Page</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body> <p th:text="${message}">Welcome ...
java core
1、Java概述1.1、java特点
Java 语言是面向对象的(oop)
Java 语言是健壮的。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证
Java 语言是跨平台性的。[即: 一个编译好的.class 文件可以在多个系统下运行,这种特性称为跨平台]
java是一种半编译,半解释型语言。 . Java–>. class是由 Javac 编译,这个过程符合编译型语言的特点。而. class–>对应平台机器码 的这一过程 是由Java解释执行
1.2、访问修饰符
2、变量2.1、java基本数据类型java基本数据类型 - 四类八种
整型
byte 、short 、int 、long
浮点型
float 、 double
字符型
char
布尔型
boolean
数据类型名称
占用字节
范围
封装器类
byte(字节型)
1
-(2^7)2^7-1(-128127)
Byte
shot(短整型)
2
-(2^15)2^15-1(-3276832767)
Short
int(整形)
4
-(2 ...
mysql
1、数据库基础概念1.1、mysql数据类型
分类
类型名称
类型说明
整数
tinyInt
微整型:占8位二进制,1个字节 (-128-127)
smallint
小整型:占16位二进制,2个字节(-32768-32767)
mediumint
中整型:占24位二进制,3个字节(-8388608-8388607)
int(integer)
整型:占32位二进制,4个字节(-2147483648-2147483647)
bigint
大整型:占64位二进制,8个字节(-9223372036854775808-9223372036854775807)
小数
float
单精度浮点数,占4个字节
double
双精度浮点数,占8个字节
decimal(m,n)
高精度小数型,最大精度为65,最大占用空间30字节
日期
time
表示时间类型 yyyy-MM-DD ,3字节
date
表示日期类型 hh:mm:ss ,3字节
datetime
同时可以表示日期和时间类型,8字节
字符串
char(m)
固定长度的字符串,无 ...