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 ...
微服务服务调用
微服务服务调用把原本本地方法调用,改造成跨微服务的远程调用(RPC,即 Remote Produce Call)。
因此,现在查询购物车列表的流程变成了这样:
RestTemplateSpring 给我们提供了一个 RestTemplate 的 API,可以方便的实现 Http 请求的发送。
org.springframework.web.client public class RestTemplate
extends InterceptingHttpAccessor
implements RestOperations
-—————————————————————————————————————
同步客户端执行 HTTP 请求,在底层 HTTP 客户端库 (如 JDK HttpURLConnection、Apache HttpComponents 等) 上公开一个简单的模板方法 API。RestTemplate 通过 HTTP 方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。 RestTemplate 通常用作共享组件。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。如果需要, ...
MybatisPlus
MybatisPlus 基本用法 1. 引入依赖
12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version></dependency>
2. 定义 Mapper
自定义的 mapper 需要继承 MybatisPlus 提供的 BaseMapper 接口
123public interface UserMapper extends BaseMapper<User>{ }
常见注解 MyBatisPlus 通过扫描实体类。并基于反射获取实体类信息作为数据库表信息
这个过程遵循一些约定俗成:
驼峰转下划线
名为 id 发字段作为主键
若不符合约定,则通过注解来得到数据库表信息
@TableName: 用来指定表名
@TableId: 用来指定表中的主键字段信息
@TableField ...
Spring 微信支付实现
Spring 微信支付实现时序图:
Spring Cache
Spring CacheSpring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用 JCache(JSR-107)注解简化我们开发
Spring Cache 是一个框架,实现了了基于注解的缓存功能,只需要简单地添加一个注解,就能实现缓存功能。
Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:
EHCache
Caffeine
Redis
导入 cache 的 maven 坐标:
12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> <version>2.7.3</version></dependency>
若你想通过 Redis 来作为具体的缓存实现,只需在 p ...
算法学习笔记 - 动态规划
动态规划本质:空间换时间
求解步骤:
设计状态
确定状态转移方程
确定初始状态
执行状态转移
计算最终的解
题目递推力扣第 70 题 - 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
12345 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶 2. 2 阶
示例 2:
123456 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶
解答:
12345678910class Solution {public int climbStairs (int n) { int [] F=new int [46]; F [0]=F [1]=1; for (int i=2;i<=n;i++){ F [i]=F [i-1]+F [i-2]; } return F [n]; ...
springboot 常用注解整理
Springboot 常用注解整理通用 1.@Autowired 作用:自动注入 Spring 容器中的 bean。
用途:可以用于构造函数、字段或 setter 方法,简化依赖注入的过程。
12@Autowiredprivate UserRepository userRepository;
2. @Component 作用:将类标识为 Spring 组件,使其可以被 Spring 管理。
用途:用于任何 Spring 管理的类,如果不适用更特定的注解(如 @Service、@Controller、@Repository),可以使用这个注解。
是一个类级别的注解,通常用于标记一个类作为 Spring 管理的组件。Spring 会自动扫描带有 @Component 注解的类,并将其实例化为 bean。
更常用于自动扫描的组件,适合用于标记服务层、控制器层、数据访问层等。可以与其他注解(如 @Service、@Controller、@Repository)结合使用,以便在语义上更清晰。
1234@Componentpublic class MyComponent { // 业 ...
MongoDB 快速入门整理
MongoDB 学习整理基础认识:mongoDB 是文档型数据库
在 mongoDB 中,数据库是由一个个集合组成的,每个集合又包含多个文档(文档在使用 BSON 的格式来组织和存储数据)
基础操作 1. 连接 MongoDB1mongo
如果 MongoDB 在其他主机或端口上运行,可以指定地址,例如:
1mongo --host your_host --port your_port
2. 显示数据库列表 1show databases
3. 创建 / 切换数据库使用 use 命令切换到某个数据库,如果该数据库不存在会自动创建:
1use myDatabase
4. 清屏 1cls
5. 退出 1exit
CRUD 创建操作创建或插入操作用于将新文档添加到集合中。如果集合当前不存在,插入操作会创建集合。
MongoDB 提供以下方法将文档插入到集合中:
db.collection.insertOne ()
db.collection.insertMany ()
读取操作读取操作用于从集合中检索文档,即查询集合中的文档。MongoDB 提供以下方法来从集合中读取文档:
db.col ...