MySql常见问题
MySql中怎么创建索引?查看答案
A:方式一:
1ALTER TABLE table_name ADD INDEX index_name (column_list);
方式二:创建表时创建
1CREATE INDEX index_name ON table_name (column_list);
我们都知道索引的好与坏,可以间接的影响整个系统的性能,那你平时是怎么去设计索引的?查看答案
A:创建索引的目的在于尽可能减少占内存的情况下去设计一个合适的索引让查询速度更快。我们一般在where字段匹配条件后,为了让创建索引所带来的好处大于坏处,我们一定要在数据量大,也就是基数大的情况下才考虑索引。 因为索引本身就要占用空间,操作数据也要操作索引文件,数据少得不偿失。为了使得效率更高,应该选择区分度大,匹配度高的字段建立索引。而且索引不适合于频繁更新的数据,因为操作数据的同时需要维护索引又得花费时间。
假如本来已经创建了个(a)索引,但是由于需求我们需要加上(b)索引,你觉得怎么操作更好呢?查看答案
A:在我们创建索引方面,我们尽量扩展索引,而不是创建新的索引 ...
Gateway的介绍和使用
Gateway的介绍和使用项目地址:https://spring.io/projects/spring-cloud-gateway
Gateway提供了一个用于在 Spring WebFlux 之上构建 API 网关。
Spring Cloud Gateway 底层使用了高性能的通信框架Netty。
特征:
基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0
能够匹配任何请求属性的路由。
谓词和过滤器特定于路由。
断路器集成。
Spring Cloud DiscoveryClient 集成
易于编写谓词和过滤器
请求速率限制
路径重写
网关在用户端与微服务之间建立了一道屏障,通过 API 网关为微服务访问提供了统一的访问入口,所有用户端的请求被 API 网关拦截并在此基础上可以实现额外功能,例如:
针对所有请求进行统一鉴权、熔断、限流、日志等前置处理,让微服务专注自己的业务。
统一调用风格,通常 API 网关对外提供 RESTful 风格 URL 接口。用户传入请求后,由 API 网关负责转换为后端服务需要 ...
OpenFeign的介绍和使用
OpenFeign的介绍和使用项目地址:https://spring.io/projects/spring-cloud-openfeign
OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。
Feign 与 OpenFeignSpring Cloud OpenFeign 并不是独立的技术。它底层基于 Netflix Feign,Netflix Feign 是 Netflix 设计的开源的声明式 WebService 客户端,用于简化服务间通信。Netflix Feign 采用“接口+注解”的方式开发,通过模仿 RPC 的客户端与服务器模式(CS),采用接口方式开发来屏蔽网络通信的细节。OpenFeign 则是在 Netflix Feign 的基础上进行封装,结合原有 Spring MVC 的注解,对 Spring Cloud 微服务通信提供了良好的支持。使用 OpenFeign 开发的方式与开发 Sp ...
003-AOP-概念及实现原理
003-AOP-概念及实现原理AOP 基本概念 (1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得 业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能
AOP(底层原理) a)AOP 底层使用动态代理 ,动态代理有两种情况:
第一种 有接口情况,使用 JDK 动态代理 ;创建接口实现类代理对象,增强类的方法
12345678910interface UserDao { public void login();}class UserDaoImpl implements UserDao { @Override public void login() { // 登陆实现过程 }}
第二种 没有接口情况,使用 CGLIB 动态代理;创建子类的代理对象,增强类的方法
123456789101112class User { public void add() & ...
002_Spring5-IOC容器-Bean管理-Annotation方式
002_Spring5-IOC容器-Bean管理-Annotation方式什么是注解1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值…)
2)使用注解,注解作用在类上面,方法上面,属性上面
3)使用注解目的:简化xml配置
Spring针对Bean管理中创建对象提供注解1)@Compenent,组件
2)@Service,业务
3)@Controller,web层
4)@Repository,持久层
上面四个注解功能是一样的,都可以创建bean实例
基于注解方式实现对象创建第一步,引入spring-aop依赖
第二步,引入context名称空间
12xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
第三步,开启组件扫描
12345<!--开 ...
001_Spring5-IOC容器-Bean管理-XML方式
001_Spring5-IOC容器-Bean管理-XML方式一、IOC容器 1、什么是IOC(控制反转)
a)把对象创建和对象之间的调用过程,交给Spring进行管理
b)使用IOC目的:为了降低耦合度
2、IOC底层
a)xml解析、工厂模式、反射
3、Spring提供的IOC容器实现的两种方式(两个接口)
a)BeanFactory接口:IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用(加载配置文件时候不会创建对象,在获取对象时才会创建对象。)
b)ApplicationContext接口:BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用(加载配置文件时候就会把在配置文件对象进行创建)推荐使用!
4、ApplicationContext接口的实现类(具体根据API文档查看)
二、IOC容器-Bean管理IOC操作Bean管理 a)Bean管理就是两个操作:(1)Spring创建对象;(2)Spring注入属性
基于XML配置文件创建对象12<!--1 配置User对象创建--><bean id ...
Redis
RedisRedis安装(docker版)查看可用版本
1docker search redis
拉取最新镜像
1docker pull redis:latest
查看镜像
1docker images
运行容器
1docker run -itd --name redis -p 6379:6379 redis
-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。
安装成功
查看容器运行信息
1docker ps
进入容器
1docker exec -it redis /bin/bash
通过 redis-cli 连接测试使用 redis 服务及查看版本信息
12redis-cliinfo
常用5大数据类型Redis键相关操作:
keys *:查看当前库所有key,匹配key *1
exists <key> [<key> …]:查看key是否存在,存在返回匹配的键个数,不存在返回0
type <key>:查看key值的类型
del & ...
JUC高并发编程从入门到精通
前言JUC是java.util.concurrent工具包的简称,是处理线程的工具包,用来解决多线程高并发的问题。
Lock接口synchronizedsynchronized是一种同步锁。
具体修饰的对象有三种方法:
修饰代码块
修饰方法
修饰静态方法
示例:
创建资源类,在资源类中定义属性和操作方法
1234567891011121314class SyncTicket { /** 票数 */ private int number = 30; /** * 卖票 */ public synchronized void sale(){ if (number > 0) { System.out.println(Thread.currentThread().getName() + ": 成功卖出一张票, 剩余票: " + (--number)); } }}
创建多个线程,调用资源类和操作方法
12 ...
001_源码阅读-Spring-Framework-阅读环境搭建
001_源码阅读-Spring-Framework-5.3.10-SNAPSHOT-阅读环境搭建本文基于linux环境进行SpringFramework框架搭建
一、依赖工具git1sudo apt-get install git
jdk11下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
gradle下载地址:https://services.gradle.org/distributions/
选择all结尾的版本进行下载,all包含gradle所有源码,遇到问题可以进行修改,只需要运行,选择bin结尾的版本即可。
idea下载地址:https://www.jetbrains.com/idea/
二、下载源码源码地址:https://github.com/spring-projects/spring-framework
三、开始构建设置idea的gradle配置idea打开项目,进行idea的gradle的设置:File -> Settings:
修改项目使用的gradle路径打开工 ...
001_源码阅读-builtin
byte和rune1type byte = uint8
byte是 uint8 的别名,并且 byte始终与unit8相等,它用于区分字节值和8-bit的无符号整数值。
1type rune = int32
rune是int32的别名,并且rune始终与int32相等,用于区分字符值和整数值。
12345678910111213package mainimport "fmt"func main() { var a uint8 var b byte fmt.Println(a == b) // true var c rune var d int32 fmt.Println(c == d) // true}
append1func append(slice []Type, elems ...Type) []Type
将元素追加到切片末尾,超出最大容量会自动扩容,扩容规则:当前容量<1024,容量翻倍,翻倍后仍不足则新容量为翻倍后的
123456789101112131415161718192021222324252627package ...