2025.1.15 学习

news/2025/1/15 17:56:46/文章来源:https://www.cnblogs.com/vastjoy/p/18673542

2025.1.15 学习

api开放平台

我们希望在后端使用Http请求调用接口,应该怎么做呢

可以用Hutool工具库中的Http请求工具类,使用如下:

public class ApiClient {public String getNameByGet(String name){HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("name", name);String result= HttpUtil.get("http://localhost:8080/api/name/", paramMap);System.out.println(result);return result;}public String getNameByPost(String name) {HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("name", name);String result= HttpUtil.post("http://localhost:8080/api/name/", paramMap);System.out.println(result);return result;}public String getUsernameByPost(User user){String json =JSONUtil.toJsonStr(user);HttpResponse httpResponse = HttpRequest.post("http://localhost:8080/api/name/user").body(json).execute();System.out.println(httpResponse.getStatus());System.out.println(httpResponse.body());return httpResponse.body();}
}

项目开在8080端口,提供了几个接口如下

@RestController
@RequestMapping("/name")
public class NameController {@GetMapping("/")public String getNameByGet(String name){return "GET 你的名字是"+name;}@PostMapping("/")public String getNameByPost(@RequestParam String name){return "POST 你的名字是"+name;}@PostMapping("/user")public String getUserNameByPost(@RequestBody User user){return "POST 你的名字是"+user.getUsername();}
}

八股

@Autowired注解和@Resouce注解

首先Spring官方是推荐@Autowired注解的,但是我们在idea中使用@Autowired注解,会有黄色波浪线,显示Field injection is not recommended。所以在项目中我们一般使用@Resource注解来进行依赖注入

接下来我们说一下二者的区别

  1. @Autowired注解是按照类型方式自动装配,如果有多个同类型的Bean,则需要通过@Qualifier指定具体的Bean。

  2. @Resource注解是Java自带的注入方式,按照名称自动装配,默认是按照属性名称进行匹配,如果需要按照Bean的名称进行匹配,可以使用@Resource(name="beanName")

我们来试一下@Autowired注解找到两个可以注入的Bean会怎样

@RestController
@RequestMapping("/autowired")
public class TestAutowiredController {@Autowiredprivate TestAutowired testAutowiredService;@RequestMapping("/test")public void test(){testAutowiredService.AutoWiredTest();}
}//TestAutowired接口
public interface TestAutowired {String AutoWiredTest();}
//实现类1
@Service
public class TestAutowiredImpl1 implements TestAutowired {@Overridepublic String AutoWiredTest() {System.out.println("实现1");return null;}
}
//实现类2
@Service
public class TestAutowiredImpl2 implements TestAutowired {@Overridepublic String AutoWiredTest() {System.out.println("实现2");return null;}
}

报错如下:

image-20250115170826170

Redis主从复制

Redis 的主从复制是指一个 Redis 实例(主节点)可以将数据复制到一个或多个从节点(从节点)),从节点从主节点获取数据并保持同步

流程

开始同步:从节点通过向主节点发送 PSYNC命令发起同步。

全量复制:如果是第一次连接或之前的连接失效,从节点会请求全量复制,主节点将当前数据快照(RDB文件)发送给从节点。

增量复制

情况一:全量复制完毕后,主从之间会保持一个长连接,主节点会通过这个连接将后续的写操作传递给从节点执行,来保证数据的一致。

情况二:主从之间的网络可能不稳定,如果连接断开,主节点部分写操作未传递给从节点执行,主从数据就不一致了。此时有一种选择是再次发起全量同步,但是全量同步数据量比较大,非常耗时。因此 Redis 在 2.8 版本引入了增量同步(psync 其实就是 2.8引入的命令)仅需把连接断开其间的数据同步给从节点就好了。此时需要介绍下 repl_backlog_bufferrepl_backlog_buffer是一个环形缓冲区,默认大小为1m。主节点会将写入命令存到这个缓冲区中,但是大小有限,待写入的命令超过 1m 后,会覆盖之前的数据,因为是环形写入。增量同步也是 psync 命令,如果主节点判断从节点传递的 runid 和主节点一致,且根据 offset 判断数据还在repl_backlog_buffer 中,则说明可以进行增量同步。于是就去 repl_backlog_buffer 查找对应 offset之后的命令数据,写入到replication buffer中,最终将其发送给 slave节点。slave 节点收到指令之后执行对应的命令,一次增量同步的过程就完成了。

综上,我们也可以总结一下replication buffer和repl_backlog_buffer之间的区别。replication呢是主节点对应每个从节点都有的一块区域,用于在长连接过程中实时传输写命令,而repl_backlog_buffer在主节点上只有一个,存储最近的写命令,用于从服务器重新连接时的部分重同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869712.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024龙信年终技术考核

1. 分析手机备份文件,该机主的QQ号为?(标准格式:123) 看了下,备份里没有QQ,但是有微信,所以应该是微信绑定的QQ号(早期微信推广时可以用QQ直接注册登录)经过测试,对应的是这个结果为1203494553 2. 分析手机备份文件,该机主的微信号为?(标准格式:abcdefg)结果为…

Dex文件结构】ReadDex解析器实现

# APP加壳脱壳 # DEX文件结构 近期学习DEX文件结构为学习APP加壳脱壳打基础,自实现了一个简易的DEX解析器加深理解。DEX文件结构整体看不复杂,深究时发现DexCLassDef结构非常复杂,编码的数据结构,嵌套和指向关系。本文作为近期学习的一个阶段总结以及知识分享,后期再完…

记录---浏览器多窗口通信有效实践总结

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣如何跨越不同窗口通信 在现代 Web 开发中,多个窗口或标签页之间的通信成为了越来越常见的需求,尤其是在应用需要同步数据、共享状态或进行实时更新的场景中。不同窗口间的通信方式有很多种,选择合适的方式可以大大提高…

python 按时间戳删除3232数组的前2列和后9列

还是雨滴谱文件,这次尝试批量处理 首先处理1个单独的txt文件#!usr/bin/env python # -*- coding:utf-8 _*- """@author:Suyue @file:raindrop.py @time:2025/01/15 {DAY} @desc: """ import numpy as np import redef process_file(input_file,…

电源中TL431及光耦的实战运用

首先了解一下TL431的基本原理;由一个运放及三极管组成;运放的应用前文略有几笔,此处未加反馈,运放只需要同相端与反相端做差在输出对应电压即可,而三极管是电压驱动;当VREF>2.5V即同相端大于反相端,输出正电压,三极管导通,当VREF<2.5V即同相端小于反相端,输出负…

在OERV也可以玩MC(下)

话接上回,上期讲述了在OERV安装HMCL的历程,这期讲讲HMCL的打包。Show openEuler:24.09 / HMCL - 开源软件构建与测试。在这个网站里,可以看到有好几个文件,这些都跟HMCL打包有关。 第一个是_service文件,这个文件用于从特定仓库里面拉取代码文件到当前平台,可以看见每个文…

JS-38 对象概述

什么是对象?对象(object)是JavaScript语言的核心概念,也是最重要的数据类型 简单说,对象就是一组“键对值”(key-value)的合集,是一种无序的复合数据集合 var user={ name:zifuchuan, age:13 };对象的每一个键名又称为属性(property),它的“键值”可以是任何数据类型…

第八届工业信息安全技能大赛全国复赛snake_wp

pwn题 snake writeup多少有点不自信,太久没做题,看到题都有点怕怕的这个程序是一个贪食蛇游戏,主程序如下: __int64 __fastcall main_4015A5(__int64 a1, __int64 a2) {int v2; // edxint v3; // ecxint v4; // er8int v5; // er9int v7; // [rsp+Ch] [rbp-4h]sub_400B6D()…

初识Spring -2025/1/12

bean的生命周期初始化容器1.创建对象(内存分配) 2.执行构造方法 3.执行属性注入(set操作) 4.执行bean初始化方法使用bean1.执行业务操作关闭/销毁容器1.执行bean销毁方法(3)关闭容器的两种方式:ConfigurableApplicationContext是ApplicationContext的子类close()方法 registerS…

Linux命令【date】格式化

作用:显示或设定系统的日期与时间 格式化

高效协作与工时优化的结合点在哪里

在信息化高速发展的今天,如何提升团队的协作效率、优化工时管理,已经成为每个企业面临的挑战。在线文档协作工具因其实时共享、多端同步、权限控制等功能,成为现代企业数字化办公的重要一环。本文将分析在线协作工具如何助力办公室团队优化工时管理,从而实现高效办公。一、…