mysql基础
mysql基础基础使用操作数据库
创建数据库
1CREATE DATABASE [IF NOT EXISTS] 数据库名;
删除数据库
1DROP DATABASE [IF EXIST] 数据库名字;
使用数据库
1use 数据库名;
查看数据库
1show 数据库名;
数据库的列类型数值:
数据类型
描述
大小
tinyint
十分小的数据
1个字节
smallint
较小的数据
2个字节
mediumint
中等大小的数据
3个字节
int
标准的整数
4个字节
bigint
较大的数据
8个字节
float
浮点数
4个字节
double
浮点数
8个字节
decimal
字符串形式的浮点数,一般用于金融计算
字符串
数据类型
描述
大小
char
字符串固定大小
0~255
varchar
可变字符串
0~65535
tinytext
微型文本
2^8-1
text
文本串
2^16-1
时间日期
数据类型
描述
格式
date
日期格式
YYYY-MM-DD
time
时间格式
HH ...
springboot基础详解
springboot基础详解循环依赖什么是循环依赖?AB两个Bean之间相互注入
spring如何解决循环依赖关键是提前暴露未完全创建的Bean
在spring中主要使用了三级缓存来解决循环依赖
一级缓存:用于存储完全实例化完成的Bean
二级缓存:用于存储尚未完全初始化,但已实例化的Bean,用于提前暴露对象,解决循环依赖
三级缓存:用于存储对象工厂,当需要时,可以通过工厂创建早期的Bean
解决步骤:
Spring首先创建Bean实例,并存入三级缓存中
当一个Bean依赖另一个未初始化的Bean时,Spring会从三级缓存中获取Bean的工厂,并生成改Bean的代理对象
代理对象存入二级缓存,解决循环依赖
一旦所有依赖Bean被完全初始化,Bean将转移到一级缓存
解决循环依赖的流程如下:
实例化A对象,并创建ObjectFactory存入三级缓存。
A在初始化时需要B对象,开始B的创建逻辑。
B实例化完成,也创建ObjectFactory存入三级缓存。
B需要注入A,通过三级缓存获取ObjectFactory生成A对象,存入二级缓存。
B通过二级缓存获得A对象后,B创建 ...
java基础详解
java基础详解概念基础框架建立
对象实例在堆内存中
java中堆栈的区别栈:主要存储局部变量和方法的调用信息(如返回地址参数等)。在方法执行期间,局部变量被创建在栈上,并在方法结束时销毁。
堆:用于存储对象实例和数组。每次用new关键字创建对象时,JVM都会在堆上为该对象分配内存空间
面向对象基础构造方法的特点
名称与类名相同
没有返回值
自动执行
不能被重写(override),可以被重载
面向对象的三大特征1.封装:
封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息
2.继承:
子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有
子类可以拥有自己属性和方法,即子类可以对父类进行扩展
3.多态
表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例
StringString、StringBuffer、StringBuilder的区别
安全性:
String不可变,也就可以理解为常量,线程安全。
StringBuilder 与 StringBuffer都继承自 Abs ...
java多线程
java多线程多线程基础在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程。
某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,同时还可以在后台进行打印,我们把子任务称为线程。
一个Java程序实际上是一个JVM进程,JVM进程用一个主线程来执行main()方法,在main()方法内部,我们又可以启动多个线程。此外,JVM还有负责垃圾回收的其他工作线程
Java多线程编程的特点又在于:
多线程模型是Java程序最基本的并发模型;
后续读写网络、数据库、Web开发等都依赖Java多线程模型。
创建新进程创建一个新线程非常容易,我们需要实例化一个Thread实例,然后调用它的start()方法:
12Thread t = new Thread();t.start(); // 启动新线程
Thread内部有一个run()方法,start()方法会在内部自动调用实例的run()方法
1Thread t = new Thread(new MyRunnable( ...
Elasticsearch
Elasticsearchelasticsearch是一款非常强大的开源搜索引擎,支持的功能非常多,例如:
代码搜索
商品搜索
解决方案搜索
地图搜索
初识Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括:
Elasticsearch:用于数据存储、计算和搜索
Logstash/Beats:用于数据收集
Kibana:用于数据可视化
整套技术栈被称为ELK,经常用来做日志收集、系统监控和状态分析等等:
整套技术栈的核心就是用来存储、搜索、计算的Elasticsearch,因此我们接下来学习的核心也是Elasticsearch。
我们要安装的内容包含2部分:
elasticsearch:存储、搜索和运算
kibana:图形化展示
首先Elasticsearch不用多说,是提供核心的数据存储、搜索、分析功能的。
然后是Kibana,Elasticsearch对外提供的是Restful风格的API,任何操作都可以通过发送http请求来完成。不过http请求的方式、路径、还有请求参数的格式都有严格 ...
微服务总结
微服务总结知识体系总图:
注册中心微服务本质是多实例部署,服务间的调用需要一个统一的管理
1. 部署Nacos的注册中心首先我们要准备MySQL数据库表,用来存储Nacos的数据(需要去资料里找nacos.sql文件)
表的结构如下:
其次需要更改下载下来的nacos文件夹中的custom.env文件,配置mysql地址
后启动nacos,日访:8848/nacos进入到nacos的控制台,账号密码都是nacos
2.服务注册和发现添加依赖
12345<!--nacos 服务注册发现--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
配置
123456spring: application: name: item-service # 服务名称 clo ...
MQ消息队列
MQ消息队列消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
目比较常见的MQ实现:
ActiveMQ
RabbitMQ
RocketMQ
Kafka
几种常见MQ的对比:
RabbitMQ
ActiveMQ
RocketMQ
Kafka
公司/社区
Rabbit
Apache
阿里
Apache
开发语言
Erlang
Java
Java
Scala&Java
协议支持
AMQP,XMPP,SMTP,STOMP
OpenWire,STOMP,REST,XMPP,AMQP
自定义协议
自定义协议
可用性
高
一般
高
高
单机吞吐量
一般
差
高
非常高
消息延迟
微秒级
毫秒级
毫秒级
毫秒以内
消息可靠性
高
一般
高
一般
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka
RabbitMQ安装我们同样基于Docker来安装Ra ...
JavaSTL
JavaSTLString定义:
1String s1="HelloWorld"
判断字符是否为空:
1System.out.println(s1.isEmpty());// False
获取字符串长度:
1System.out.println(s1.length()); 10
获取字符串中的某个字符:
1System.out.println(s1.charAT(0)); //H
将字符串转化为全大写或全小写:
12System.out.println(s1.toLowerCase()); //helloworldSystem.out.println(s1.toUpperCase()); //HELLOWORLD
去除字符串前后的空格:
1System.out.println(" hell o world ".trim()); //hell o world
比较字符串:
1s2 ="helloWorld";
1System.out.pringln(s1.equals(s2)); ...
微服务保护
微服务保护和分布式事务微服务保护的方案有很多,比如:
请求限流
线程隔离
服务熔断
这些方案或多或少都会导致服务的体验上略有下降,比如请求限流,降低了并发上限;线程隔离,降低了可用资源数量;服务熔断,降低了服务的完整度,部分服务变的不可用或弱可用。因此这些方案都属于服务降级的方案。但通过这些方案,服务的健壮性得到了提升,
SentinelSentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:
https://sentinelguard.io/zh-cn/
Sentinel 的使用可以分为两个部分:
核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。
控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。
控制台搭建为了方便监控微服务,我们先把Sentinel的控制台搭建出来。
1)下载jar包
2) ...
微服务网关及配置管理
微服务网关及配置管理现在我已经将黑马商城拆分为5个微服务:
用户服务
商品服务
购物车服务
交易服务
支付服务
由于每个微服务都有不同的地址或端口,入口不同,相信大家在与前端联调的时候发现了一些问题:
请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦
前端无法调用nacos,无法实时更新服务列表
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:
每个微服务都需要编写登录校验、用户信息获取的功能吗?
当微服务之间调用时,该如何传递用户信息?
网关网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由****和转发以及数据安全的校验。
前端请求不能直接访问微服务,而是要请求网关:
网关可以做安全控制,也就是登录身份校验,校验通过才放行
通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去
在SpringCloud当中,提供了两种网关实现方案:
Netflix Zuul:早期实现,目前已经淘汰
SpringCloudGate ...