SpringCloud学习
相关笔记:狂神说SpringCloud学习笔记-KuangStudy-文章
这文章总结的很全面:(194条消息) SpringCloud与Dubbo的区别_IsToRestart的博客-CSDN博客
服务注册与发现,负载均衡,远程服务调用的关系?注册中心:多个(分布式集群)
服务提供者:多个
消费者向注册中心获取服务提供者列表(通过服务名查询),通过ribbon(本地)选择合适的服务提供者实现负载均衡。
客户端记录多个注册中心地址从而保证可用性。注册中心有多个服务提供者,从而实现负载均衡和高可用。
服务注册与发现的作用?
负载均衡?
微服务名字 【ribbon】
接口和注解 【feign】(可用作微服务间通信)
Ribbon是什么?
Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。
简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。Ribbon 的客户端组件提供一系列完整的配置项,如:连接超时、重试等。简单的说,就是在配置文件中 ...
学习springboot+vue入门笔记
SpringBoot 请求拦截器首先定义拦截器,拦截时机
123456789//继承父类public class LoginInterceptor implements HandlerInterceptor { @Override //请求实际可以查看HandlerInterceptor父类 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("LoginInterceptor"); return true; }}
在config中进行注册,否则不生效
1234567891011@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override pub ...
仿B站后端系统--用户验证
JWTJSON Web Token(JSON Web令牌)
是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任,因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。
JWT作用:授权:一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。它的开销很小并且可以在不同的域中使用。如:单点登录。信息交换:在各方之间安全地传输信息。JWT可进行签名(如使用公钥/私钥对),因此可确保发件人。由于签名是使用标头和有效负载计算的,因此还可验证内容是否被篡改。
参考链接:https://blog.csdn.net/Top_L398/article/details/109361680
本项目中,使用JWT实现用户登录,以及后续用户身份验证的功能。
应用—用户登录和验证1.在API(Controlle ...
仿B站后端系统--AOP切面编程
AOP—面向切面编程在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。Advice(增强):Advice 定义了在 Poin ...
仿B站后端系统--webSocket实现弹幕传输
HTML5 WebSocketWebSocketWebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
本项目中使用webSocket连接前后端,实现弹幕实时传输功能。
应用—webSocket实现弹幕传输WebSocket搭建需要注意的是,应用服务器要为每个客户端创建一个webSocket连接,属于多例模式,因此需要声明全局上下文环境
1234567//全局上下文环境设置,通过设置这个参数可以在多例下注入bean(在bilibiliApp.java里赋值)//DanmuService danmuService = (DanmuService)APPLICATION_CON ...
仿B站后端系统-RocketMQ应用
RocketMQRocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考验、Java编程语言实现,有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。
在仿B站后端系统中,使用RocketMQ作为消息中间件,实现用户动态发布,订阅消息接收,弹幕接收并批量分发的核心功能。
应用—动态订阅简单来说,用户动态的实现流程是创建动态->创建生产者->消费者接收->消息分发 。其中MQ作为中间件,可以对消息进行监听,处理,缓存(redis),分发的操作。
controller层主要实现接口的调用,没啥好说的
123456789101112131415@PostMapping("/user-moments")public JsonResponse<String> addUserMoments(@RequestBody UserMoment userMoment) throws Exception{ Long userId = ...
Top100
4. 寻找两个正序数组的中位数难度 困难
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
12345678910111213141516171819202122232425262728293031323334 /* 主要思路:要找到第 k (k>1) 小的元素,那么就取 pivot1 = nums1[k/2-1] 和 pivot2 = nums2[k/2-1] 进行比较 * 这里的 "/" 表示整除 * nums1 中小于等于 pivot1 的元素有 nums1[0 ...
Java学习笔记
多态
多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法
一个实际类型为Student,引用类型为Person的变量,调用其run()方法,调用的是Person还是Student的run()方法?
运行一下上面的代码就可以知道,实际上调用的方法是Student的run()方法。因此可得出结论:
Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。
这个非常重要的特性在面向对象编程中称之为多态。
静态方法
因为静态方法属于class而不属于实例,因此,静态方法内部,无法访问this变量,也无法访问实例字段,它只能访问静态字段。
通过实例变量也可以调用静态方法,但这只是编译器自动帮我们把实例改写成类名而已。
因为interface是一个纯抽象类,所以它不能定义实例字段。但是,interface是可以有静态字段的,并且静态字段必须为final类型 public static final int MALE = 1;
格式化字符串
123String s = "Hi %s, your score is %d!";Sy ...
git使用手册
安装官网下载:https://git-scm.com/downloads (opens new window)下载完成后使用默认进行安装。
安装完成后,在开始菜单里找到 Git -> Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 还需要最后一步设置,在命令行输入:
12git config --global user.name "Your Name"git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
#创建版本库(仓库)1234567891011# 创建仓库mkdir <仓库name> # 进入仓库cd <仓库name># 此命令用于显示当前目录pwd# 把当前目录初始化成Git仓库git init
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录直接git init也是可以的。
#添加文件到仓库在仓库目录下放入文件,如新建一个test ...
LeetCode每日一题(一)
剑指 Offer II 002. 二进制加法难度:简单
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “10”输出: “101”
示例 2:
输入: a = “1010”, b = “1011”输出: “10101”
提示:每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。1 <= a.length, b.length <= 10^4字符串如果不是 “0” ,就都不含前导零。
12345678910111213141516171819//将两个字符串的末位分别相加,如有进位用temp标记,将结果插入一个新的字符串的首位类似于进栈//注意,字符char-'0'的使用,若char为整型的字符形式,该计算结果得到其int值,如'6'-'0'=6(int)//另有一种算法,将两字符串每位相加得到新字符串,再进行逐字符进位计算class Solution { public St ...