springboot项目搭建集成 redis/跨域/远程请求
目录
一,创建maven项目
1,左上角file > new > maven project
2,next 到 创建 Group id 和 Artifact id编辑编辑
二,配置springboot
1,配置pom文件,
2,创建启动类
3,配置 yml 文件
三,集成 Redis
1,yml追加配置
2,对 Redis 做些代码配置
3,spring 注解@Configuration类中编写代码访问
4,过滤器 ,获取Redis的代码 注:过滤路径在yml配置文件中配置
5,配置 Redis 数据
6,页面访问controller
四,集成 跨域
1,yml文件配置需要跨域的路径端口
2,过滤器,获取跨域代码
3,spring 注解@Configuration类中编写代码访问
五,集成 远程请求
1,封装工具类
2,通用工具类方法sendRequest
一,创建maven项目
1,左上角file > new > maven project
2,next 到 创建 Group id 和 Artifact id

二,配置springboot
1,配置pom文件,
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version></parent><groupId>cn.yilixun.jt.econtract</groupId><artifactId>jt-econtract</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.12</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp-sse</artifactId></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.4.1</version></dependency><dependency><groupId>org.mybatis.scripting</groupId><artifactId>mybatis-velocity</artifactId><version>2.1.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency><!-- 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.2</version></dependency><!-- easypoi的支持 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>cn.yilixun.jt.econtract.portal.EcontractPortalStartup</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
</project>
2,创建启动类
package cn.yilixun.jt.econtract.portal;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;/*** Hello world!**/
@SpringBootApplication
@ComponentScan(basePackages = { "cn.yilixun.*" })
@MapperScan("cn.yilixun.jt.econtract.portal.mapper")
@EnableConfigurationProperties
public class EcontractPortalStartup {public static void main(String[] args) {SpringApplication.run(EcontractPortalStartup.class, args);}
}
3,配置 yml 文件
application.yml
spring:application:name: portalprofiles:active: devjackson:default-property-inclusion: non_nulltime-zone: GMT+8main:allow-bean-definition-overriding: true
mybatis-plus:mapper-locations: classpath:/mybatis/*.xmltype-aliases-package: cn.yilixun.jt.econtract.portal.infoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#日志配置
logging:config: classpath:logback-spring.xmllevel:org.springframework: warn
access:ignore-pattern: /*|control:allow:origin: http://localhost:8080
application-dev.yml
server:port: 10000servlet:context-path: /econtract
logging:file:path: D:\logs
spring:redis:host: 172.16.1.205port: 6379database: 8password: "Redis12#$56"timeout: 10sdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://172.16.1.205:3306/jt_econtract?serverTimezone=GMT%2B8&remarks=true&useInformationSchema=true&tinyInt1isBit=true&allowMultiQueries=trueusername: jt_econtractpassword: JTecontract@2024.
至此,springboot项目生成完毕
三,集成 Redis
1,yml追加配置
2,对 Redis 做些代码配置
package cn.yilixun.jt.econtract.portal.cache;import java.util.concurrent.TimeUnit;import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;public class RedisCache {public final static long REDIS_EXPIRE_TIME = 7200L;public final static String REDIS_KEY_USER_TOKEN = "user-token:";public final static String REDIS_KEY_BASE_DATA = "base-data:";private RedisTemplate<String, String> redisTemplate;public RedisCache(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void hset(final String key, final String hashKey, final Object value) {this.redisTemplate.opsForHash().put(key, hashKey, JSON.toJSONString(value));}public String hget(final String key, final String hashKey) {HashOperations<String,Object,Object> operation = this.redisTemplate.opsForHash();if (operation != null && operation.get(key, hashKey) != null) {return (String)operation.get(key, hashKey);}return null;}public void set(final String key, final Object value) {this.redisTemplate.opsForValue().set(key, JSON.toJSONString(value));}public void set(final String key, final Object value, final long timeout, final TimeUnit timeUnit) {this.redisTemplate.opsForValue().set(key, JSON.toJSONString(value), timeout, timeUnit);}public String get(final String key) {ValueOperations<String, String> operation = this.redisTemplate.opsForValue();return operation.get(key);}public boolean expire(final String key, final long timeout) {return this.expire(key, timeout, TimeUnit.SECONDS);}public boolean expire(final String key, final long timeout, final TimeUnit unit) {return this.redisTemplate.expire(key, timeout, unit);}public boolean delete(final String key) {return this.redisTemplate.delete(key);}public void createUserToken(String token, Object user) {if (user != null) {this.set(RedisCache.REDIS_KEY_USER_TOKEN + token, user, RedisCache.REDIS_EXPIRE_TIME, TimeUnit.SECONDS);}}public JSONObject getLoginUserInfo(String token) {Object obj = this.get(RedisCache.REDIS_KEY_USER_TOKEN + token);if (obj != null) {this.expire(RedisCache.REDIS_KEY_USER_TOKEN + token, RedisCache.REDIS_EXPIRE_TIME, TimeUnit.SECONDS);return JSONObject.parseObject(obj.toString());}return null;}}
3,spring 注解@Configuration类中编写代码访问
package cn.yilixun.jt.econtract.portal.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;import cn.yilixun.jt.econtract.portal.cache.RedisCache;
import cn.yilixun.jt.econtract.portal.filter.SimpleCorsFilter;@Configuration
public class PropertiesConfig {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Beanpublic RedisCache redisCache() {return new RedisCache(this.redisTemplate);}}
4,过滤器 ,获取Redis的代码 注:过滤路径在yml配置文件中配置
package cn.yilixun.jt.econtract.portal.filter;import java.io.IOException;
import java.util.regex.Pattern;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import com.alibaba.fastjson2.JSONObject;import cn.yilixun.jt.econtract.portal.cache.RedisCache;@Component
@WebFilter(urlPatterns = {"/*"})
@Order(1)
public class AccessVerifyFilter implements Filter {@Value("${access.ignore-pattern:}")private String ignoreLoginUri;@Autowiredprivate RedisCache redisCache;@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;String token = req.getHeader("User-Token");if (!StringUtils.hasLength(token)) {token = req.getParameter("userToken");}JSONObject user = redisCache.getLoginUserInfo(token);String path = req.getServletPath();if (!this.isIgnoreUri(this.ignoreLoginUri, path) && (user == null || user.isEmpty())) {JSONObject erInfo = new JSONObject();erInfo.put("state", 900);erInfo.put("code", "302");this.writeResponse(response, erInfo);return;}chain.doFilter(request, response);}private void writeResponse(ServletResponse response, JSONObject msg) throws IOException {response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");response.getWriter().write(msg.toJSONString());response.getWriter().flush();}private boolean isIgnoreUri(String patternsStr, String path) {if (StringUtils.hasLength(patternsStr)) {String[] patterns = patternsStr.split("\\|");if (patterns.length > 0) {for (String p : patterns) {if (StringUtils.hasLength(p) && Pattern.matches(p.replace("*", ".*"), path)) {return true;}}}}return false;}}
5,配置 Redis 数据
6,页面访问controller
package cn.yilixun.jt.econtract.portal.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.alibaba.fastjson2.JSONObject;import cn.yilixun.jt.econtract.portal.cache.RedisCache;
import cn.yilixun.jt.econtract.portal.response.ResponseResult;@RestController
@RequestMapping("/")
public class PortalController {@Autowiredprotected RedisCache redisCache;@GetMapping("/getBaseInfo")public JSONObject dictList(HttpServletRequest req) {String token = req.getHeader("User-Token");if (!StringUtils.hasLength(token)) {token = req.getParameter("userToken");}JSONObject user = redisCache.getLoginUserInfo(token);return ResponseResult.success(user);}}
至此,Redis 集成结束
四,集成 跨域
1,yml文件配置需要跨域的路径端口
2,过滤器,获取跨域代码
package cn.yilixun.jt.econtract.portal.filter;import java.io.IOException;
import java.util.Arrays;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** SimpleCORSFilter.* @Title:SimpleCORSFilter.java* @Description SimpleCORSFilter.java*/
public class SimpleCorsFilter implements Filter {private String originUrl;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {originUrl = filterConfig.getInitParameter("originUrl");}/*** 请求过滤器.*/@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;HttpServletRequest re = (HttpServletRequest) req;String url = re.getHeader("Origin");String[] urlArray = originUrl.split(",");if (Arrays.asList(urlArray).contains(url)) {response.setHeader("Access-Control-Allow-Origin", url);}response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type,token,Access-Token");response.setHeader("Access-Control-Allow-Credentials", "true");chain.doFilter(req, res);}
}
3,spring 注解@Configuration类中编写代码访问
package cn.yilixun.jt.econtract.portal.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;import cn.yilixun.jt.econtract.portal.cache.RedisCache;
import cn.yilixun.jt.econtract.portal.filter.SimpleCorsFilter;@Configuration
public class PropertiesConfig {@Value("${access.control.allow.origin}")private String originUrl;/*** 跨域过滤器.* * @return*/@SuppressWarnings({ "rawtypes", "unchecked" })@Beanpublic FilterRegistrationBean filterRegist() {FilterRegistrationBean frBean = new FilterRegistrationBean();frBean.setFilter(new SimpleCorsFilter());frBean.addUrlPatterns("/*");frBean.addInitParameter("originUrl", originUrl);return frBean;}
}
至此,跨域集成结束
五,集成 远程请求
1,封装工具类
package cn.yilixun.jt.econtract.portal.util;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;import com.alibaba.fastjson2.JSONObject;import lombok.extern.log4j.Log4j2;@Log4j2
public class RestTemplateUtil {/*** 发送请求.** @param method not null* @return*/public static JSONObject sendRequest(String url, HttpMethod method, Object bodyParams, JSONObject headerParams) throws Exception {log.info("RestTemplateUtil.sendRequest start :: [url] = " + url + ", [method] = " + method);RestTemplate rest = new RestTemplate();rest.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());HttpEntity<Object> request = RestTemplateUtil.getRequestEntity(bodyParams, headerParams);ResponseEntity<JSONObject> res = rest.exchange(url, method, request, JSONObject.class);if (res == null || res.getBody() == null) {throw new Exception("获取api数据异常");}log.info("RestTemplateUtil.sendRequest end :: " + res.getBody().toString());return res.getBody();}private static HttpEntity<Object> getRequestEntity(Object rbp, JSONObject rhp) {MultiValueMap<String, String> header = new LinkedMultiValueMap<>();if (rhp != null && !rhp.isEmpty()) {for (String key : rhp.keySet()) {header.add(key, rhp.getString(key));}}return new HttpEntity<>(rbp, header);}/*** 发送请求.** @param method not null* @return*/public static JSONObject sendRequestMap(String url, HttpMethod method, Map<String, Object> requestBodyParams, Map<String, String> requestHeaderParams) throws Exception {log.info("RestTemplateUtil.sendRequest start :: [url] = " + url + ", [method] = " + method);RestTemplate rest = new RestTemplate();rest.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());HttpEntity<Map<String, Object>> request = getRequest(requestBodyParams, requestHeaderParams);if (method == HttpMethod.GET) {url = convetUrl(url, requestBodyParams);}ResponseEntity<JSONObject> res = rest.exchange(url, method, request, JSONObject.class);if (res == null || res.getBody() == null) {throw new Exception("获取api数据异常");}log.info("RestTemplateUtil.sendRequest end :: " + res.getBody().toString());return res.getBody();}/*** 请求配置.** @Param :authorization* @Return :HttpEntity*/private static HttpEntity<Map<String, Object>> getRequest(Map<String, Object> rbp, Map<String, String> rhp) {Map<String, Object> body = new HashMap<>();HttpHeaders header = new HttpHeaders();if (rbp != null && !rbp.isEmpty()) {for (String key : rbp.keySet()) {body.put(key, rbp.get(key));}}if (rhp != null && !rhp.isEmpty()) {for (String key : rhp.keySet()) {header.add(key, rhp.get(key));}}return new HttpEntity<>(body, header);}public static class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {/*** RestTemplate 把数据从 HttpResponse 转换成 Object 的时候,找不到合适的 HttpMessageConverter 来转换* 需要继承 MappingJackson2HttpMessageConverter 并在构造过程中设置其支持的 MediaType 类型.*/public WxMappingJackson2HttpMessageConverter() {List<MediaType> mediaTypes = new ArrayList<>();mediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);setSupportedMediaTypes(mediaTypes);}}/*** get请求url拼接参数.* @Param :authorization* @Return :HttpEntity*/public static String convetUrl(String url, Map<String, Object> param) {String paramUrl = "";if (param != null) {for (Map.Entry<String, Object> e : param.entrySet()) {paramUrl+=(e.getKey() + "=" + e.getValue() + "&");}}if (StringUtils.hasLength(paramUrl)) {return url + "?" + paramUrl.substring(0, paramUrl.length() - 1);}return url;}
}
2,通用工具类方法sendRequest
private void executeAfterStartup() {JSONObject jsonObject = null;try {jsonObject = RestTemplateUtil.sendRequest("http://localhost:8080/aaaaa", HttpMethod.POST,new JSONObject(), null);} catch (Exception e) {e.printStackTrace();}if ("10".equals(jsonObject.get("code").toString())) {JSONObject jsonObject = jsonObject.get("data");}}
至此,远程请求集成结束
相关文章:

springboot项目搭建集成 redis/跨域/远程请求
目录 一,创建maven项目 1,左上角file > new > maven project 2,next 到 创建 Group id 和 Artifact id编辑编辑 二,配置springboot 1,配置pom文件, 2,创建启动类 3ÿ…...

lvs详解及实例配置
目录 1.什么是负载均衡 1.1为什么用负载均衡 1.2.负载均衡类型 1.2.1.四层负载均衡 1.2.2.七层负载均衡 1.3 四层和七层的区别 2.LVS介绍 2.1LVS 的优势与不足 2.2LVS 核心组件和专业术语 3.ipvsadm命令 4.LVS集群中的增删改 4.1.管理集群服务中的增删改 4.2.管理集…...
DAY41-动态规划-买卖股票
LeetCode121. 买卖股票的最佳时机 public int maxProfit(int[] prices) {//dp数组含义:0为持有该股票,1为不持有该股票int[][] dp new int[prices.length][2];dp[0][0]-prices[0];dp[0][1]0;for(int i1;i<prices.length;i) {dp[i][0]Math.max(dp[i-…...
【C#】StringComparer
什么是“文化” 在 .NET 中,“文化”(Culture)指的是与语言、地区、和区域设置相关的特定信息集合。这些信息包括了日期和时间的格式、数字的表示方式、货币符号、字符串比较规则等等。文化的概念在软件开发中特别重要,因为应用程…...
阿里云服务器远程登录问题解决指南
前言 在使用阿里云服务器时,可能会遇到无法通过密码进行远程登录的情况。这种情况通常是因为操作系统默认禁用了密码登录功能。本文将介绍如何解决这一问题,确保能够顺利地通过密码进行远程登录。 问题描述 当尝试通过Workbench进行密码登录时&#x…...

Datawhale X 魔搭 AI夏令营(2024第四期)AIGC方向 学习笔记
粗谈 这一期是使用可图lora微调进行文生图任务的比赛 文生图也算是跨模态了,输入Prompt文本,输出图片。Prompt很重要,分为prompts和negative prompts。可以指导结果图片的生成。 lora可以参考我上期夏令营的文章:Datawhale AI 夏令营&…...

VScode前端环境搭建
前言 VScode是企业中最常用的前端开发工具,本文描述如何利用VScode搭建前端开发环境 一、安装VScode 下载Vscode 点击前往下载页面 安装 安装时一直点击下一步即可 二、环境配置 1)更改语言 点击拓展搜索Chinese后下载第一个,下载完后…...
Python自动化测试之selenium - 元素定位
元素定位 元素定位就是通过元素的信息或者元素层级结构来定位元素。当定位到了重复的属性,默认会定位到第一个标签。 id定位 - find_element_by_id 同一个html页面中id值是唯一的。 模拟在百度输入框中输入想要查找的内容 python 代码解读 复制代码 from sel…...
深入探索 npm cache clean --force:清理 npm 缓存的艺术
npm 是 JavaScript 编程语言的包管理器,它是 Node.js 运行环境的默认包管理器。npm 提供了一个丰富的生态系统,包括数以百万计的可重用代码包。然而,随着时间的推移,npm 的缓存可能会变得庞大,影响性能或导致一些奇怪的…...
如何看待“低代码”开发平台的兴起?
如何看待“低代码”开发平台的兴起? 近年来,“低代码”开发平台如雨后春笋般涌现,承诺让非专业人士也能快速构建应用程序。这种新兴技术正在挑战传统软件开发模式,引发了IT行业的广泛讨论。低代码平台是提高效率的利器࿰…...

自动控制——过阻尼、欠阻尼、临界阻尼及无阻尼
自动控制——过阻尼、欠阻尼、临界阻尼及无阻尼 引言 在自动控制系统和振动分析中,系统的阻尼特性对于系统的动态响应至关重要。阻尼决定了系统在受到扰动或输入信号后,如何恢复到稳定状态。本文将详细介绍过阻尼(overdamped)、…...

从AlphaGo到AlphaPong:AI乒乓球机器人将如何改变乒乓球竞技?
在人工智能领域,谷歌DeepMind的AlphaGo曾以其超凡的围棋能力震惊了世界。而如今,DeepMind又将其技术延伸到了乒乓球领域,推出了乒乓球机器人,被网友戏称为“AlphaPong”。这一机器人使用ABB的IRB1100机械手臂,能够与普…...

荒原之梦:考研期间可以玩游戏吗?
有不少同学,特别是男同学,在考研之前,会有玩游戏的习惯,那么,对于考研的同学来说,就会产生这样一个疑问。在考研备考期间,我还可以玩游戏吗? 其实关于这个问题的答案是因人而异的&am…...

Hive SQL ——窗口函数源码阅读
前言 使用Starrocks引擎中的窗口函数 row_number() over( )对10亿的数据集进行去重操作,BE内存溢出问题频发(忘记当时指定的BE内存上限是多少了.....),此时才意识到,开窗操作,如果使用 不当,反而…...

用python的Manim 创建大括号
Brace 是 Manim 中用于创建大括号(curly braces)的一个对象类。它有几个子类,自定义了不同的功能。下面是每个类的简要解释: 1. ArcBrace 功能: 创建一个环绕弧线的括号。适用于需要围绕弧形线条的场景。用法: 通常用于图形中有…...
白骑士的Matlab教学附加篇 5.2 代码规范与最佳实践
系列目录 上一篇:白骑士的Matlab教学附加篇 5.1 MATLAB开发工具 在 MATLAB 编程中,遵循良好的代码规范和最佳实践有助于提高代码的可读性、可维护性和可重用性。无论是变量命名、注释风格,还是代码格式化,合理的规…...
Javaweb--SpringBoot
1.SpringBoot入门 简化Spring开发的一个框架,Spring Boot 旨在帮助开发者快速搭建 Spring 框架。 整个Spring的一个合集,可以简化配置 2.微服务 (1)微服务就是一种架构风格 (2)微服务就是把一个项目拆…...

【数据结构】算法的时间复杂度与空间复杂度
计算机考研408-数据结构笔记本之——第一章 绪论 1.2 算法和算法评价 1.2.2 算法效率的度量 算法效率的度量是通过时间复杂度和空间复杂度来描述的。 1.空间复杂度 算法的空间复杂度S(n)定义为该算法所需的存储空间,它是问题规模n的函数,记为 S(n) …...

PyCharm环境python开发上位机
目录 前言: 一、pycharm新建工程 1、打开 pycharm软件,新建工程 二、配置UI界面 1、新建UI界面 1)创建 Main Window 2)拖动控件到 MainWindow 中 3)设置信号与槽 4)ctrlS 保存ui文件 2、将ui文件转…...

ROS 2 参数使用
ROS 2 参数使用 介绍 ROS 2 (Robot Operating System 2) 是一个为机器人开发提供支持的开源框架。它继承了 ROS 1 的优点,并且在架构上做了许多改进以支持分布式系统、实时性、安全性等要求。ROS 2 中的参数是用于配置节点行为的关键部分,允许我们动态…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【QT控件】显示类控件
目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...
软件工程教学评价
王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中,您通过丰富的实例,将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻,让这些理论不再是停留在纸面的名词,而是可以指导…...

vb监测Excel两个单元格变化,达到阈值响铃
需求 在Excel中实现监控两个单元格之间的变化范围,当达到某个设定的值的范围内时,实现自动响铃提示。 实现: 首先设置Excel,开启宏、打开开发者工具,点击visual Basic按钮,然后在左侧双击需要监测的shee…...

二叉树-226.翻转链表-力扣(LeetCode)
一、题目解析 翻转可以理解为树的左右子树交换,从根到叶子节点,但是这里交换的是链接的指针,而不是单纯的交换值,当出现nullptr时,也是可以交换链接的,交换值的话就不行了。 二、算法原理 依旧的递归&…...