当前位置: 首页 > news >正文

HttpUtil的get和post请求

Http工具类 

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;/*** http 工具类*/
public class HttpUtil {private static String contentType = "application/json";private static String encoding = "UTF-8";/*** post请求* @param url* @param params* @return*/public static String post(String url, String params){try {return postGeneralUrl(url, params);} catch (Exception e) {e.printStackTrace();}return "请求失败";}public static String postGeneralUrl(String generalUrl, String params)throws Exception {URL url = new URL(generalUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");// 设置通用的请求属性connection.setRequestProperty("Content-Type", contentType);connection.setRequestProperty("Connection", "Keep-Alive");connection.setUseCaches(false);connection.setDoOutput(true);connection.setConnectTimeout(2000);connection.setDoInput(true);// 得到请求的输出流对象DataOutputStream out = new DataOutputStream(connection.getOutputStream());out.write(params.getBytes(encoding));out.flush();out.close();// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> headers = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : headers.keySet()) {System.err.println(key + "--->" + headers.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = null;in = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));String result = "";String getLine;while ((getLine = in.readLine()) != null) {result += getLine;}in.close();System.err.println("result:" + result);return result;}public static String uploadFile(String url, File file, Map<String, Object> map) {CloseableHttpClient httpClient = HttpClients.createDefault();String result = "";//每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。String boundary ="--------------4585696313564699";try {//文件名String fileName = file.getName();HttpPost httpPost = new HttpPost(url);//设置请求头httpPost.setHeader("Content-Type","multipart/form-data; boundary="+boundary);//HttpEntity builderMultipartEntityBuilder builder = MultipartEntityBuilder.create();//字符编码builder.setCharset(Charset.forName("UTF-8"));//模拟浏览器builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//boundarybuilder.setBoundary(boundary);//multipart/form-databuilder.addPart("file",new FileBody(file));builder.addTextBody("needVerify",map.get("needVerify").toString());builder.addTextBody("businessTimestamp",map.get("businessTimestamp").toString());builder.addTextBody("nonce",map.get("nonce").toString());builder.addTextBody("businessSign",map.get("businessSign").toString());//HttpEntityHttpEntity entity = builder.build();httpPost.setEntity(entity);// 执行提交HttpResponse response = httpClient.execute(httpPost);//响应HttpEntity responseEntity = response.getEntity();if (responseEntity != null) {// 将响应内容转换为字符串result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}return result;}public static String get(TreeMap<String, Object> map, String url){//1、创建httpClientCloseableHttpClient client = HttpClients.createDefault();//2、封装请求参数List<BasicNameValuePair> list = new ArrayList<>();map.forEach((k,v)->list.add(new BasicNameValuePair(k, v.toString())));//3、转化参数String params ;String result = null;CloseableHttpResponse response = null;try {params = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8));//4、创建HttpGet请求HttpGet httpGet = new HttpGet(url+ "?"+ params);System.out.println("请求URL: "+httpGet);response = client.execute(httpGet);//5、获取实体HttpEntity entity = response.getEntity();//将实体装成字符串result = EntityUtils.toString(entity);} catch (IOException e) {e.printStackTrace();}finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}return result;}

对象转换为json字符串

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParseException;import java.lang.reflect.Type;/*** Json工具类.*/
public class GsonUtils {private static Gson gson = new GsonBuilder().create();public static String toJson(Object value) {return gson.toJson(value);}public static <T> T fromJson(String json, Class<T> classOfT) throws JsonParseException {return gson.fromJson(json, classOfT);}public static <T> T fromJson(String json, Type typeOfT) throws JsonParseException {return (T) gson.fromJson(json, typeOfT);}

post请求

public static void main(String[] args) {User user= new User();user.setName("张三");// 1.转化参数String param = GsonUtils.toJson(user);// 2.发送请求String url = "";String result = HttpUtil.post(url, param);// 3.获取结果System.out.println("响应结果: "+ result);}

get请求

 public static void main(String[] args) {// 1.组装参数TreeMap<String, Object> map = new TreeMap<>();map.put("name", "张三");map.put("id", "1");map.put("idCard", "51090102198801025878");// 2.签名 无签名可以忽略// String businessSign = SignUtil.sign(map, key);map.put("businessSign", "签名字符串");// 3.发送请求String url = "";String result = HttpUtil.get(map, url);// 4.获取结果System.out.println("响应结果: "+ result);}

如果需要签名

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;public class MD5Encoder {private static final String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b","c", "d", "e", "f"};public static String encode(String rawPass, String salt) {String result = null;try {MessageDigest md = MessageDigest.getInstance("md5");// 加密后的字符串result = byteArrayToHexString(md.digest(mergePasswordAndSalt(rawPass, salt).getBytes(StandardCharsets.UTF_8)));} catch (Exception ex) {}return result;}private static String mergePasswordAndSalt(String password, String salt) {if (password == null) {password = "";}if ((salt == null) || "".equals(salt)) {return password;} else {return password + salt;}}/*** 转换字节数组为16进制字串** @param b 字节数组* @return 16进制字串*/private static String byteArrayToHexString(byte[] b) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++) {resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0) {n = 256 + n;}int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.thinkgem.jeesite.modules.panelmachine.request.OpenAPIRequest;
import org.springframework.util.StringUtils;import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;public class SignUtil {public static String signJsonObject(JsonObject jsonObject, String signKey, int floor) {List<String> keys = new ArrayList<>();HashMap<String, String> params = new HashMap<>();for (Map.Entry<String, JsonElement> entity : jsonObject.entrySet()) {String key = entity.getKey();String value = "";if (entity.getValue().isJsonNull()) {continue;}if (entity.getValue().isJsonObject()) {value = signJsonObject(entity.getValue().getAsJsonObject(), signKey, floor + 1);} else if (entity.getValue().isJsonArray()) {List<String> result = new ArrayList<>();entity.getValue().getAsJsonArray().forEach(action -> {if (action.isJsonObject()) {result.add(signJsonObject(action.getAsJsonObject(), signKey, floor + 1));} else if (action.isJsonArray()) {result.add(signJsonObject(action.getAsJsonArray().getAsJsonObject(), signKey, floor + 1));} else {result.add(action.getAsString());}});if (result.size() > 0) {Collections.sort(result);StringBuilder sb = new StringBuilder();result.forEach(action -> {if(StringUtils.hasText(action)) {sb.append(action + "&") ;} ;});sb.deleteCharAt(sb.length() - 1);value = MD5Encoder.encode(sb.toString(), "");}} else {value = entity.getValue().getAsString();}if (StringUtils.isEmpty(value)) {} else {keys.add(key);params.put(key, value);}}if (keys.size() == 0) {return "";}// checkSignCollections.sort(keys);StringBuilder sb = new StringBuilder();keys.forEach(key -> sb.append(key + "=" + params.get(key) + "&"));if (floor == 1 && StringUtils.hasText(signKey)) {sb.append("key=" + signKey);} else {sb.deleteCharAt(sb.length() - 1);}System.out.println("签名前字符串:"+ sb.toString());System.out.println("签名结果:"+MD5Encoder.encode(sb.toString(), ""));return MD5Encoder.encode(sb.toString(), "");}public static OpenAPIRequest sign(OpenAPIRequest openAPIRequest, String key) {openAPIRequest.setNonce(UUID.randomUUID().toString());openAPIRequest.setBusinessTimestamp(System.currentTimeMillis()+"");openAPIRequest.setBusinessSign(md5Sign(openAPIRequest,key));return openAPIRequest ;}public static OpenAPIRequest sign(OpenAPIRequest openAPIRequest, Map<String, String> params, String key) {openAPIRequest.setNonce(UUID.randomUUID().toString());openAPIRequest.setBusinessTimestamp(System.currentTimeMillis()+"");openAPIRequest.setBusinessSign(md5Sign(openAPIRequest , params, key));return openAPIRequest ;}public static  String md5Sign(OpenAPIRequest request, Map<String, String> params, String key) {JsonObject jsonObject = new JsonParser().parse(new Gson().toJson(request)).getAsJsonObject();params.entrySet().forEach(action -> jsonObject.addProperty(action.getKey() , action.getValue()));return signJsonObject(jsonObject, key,1) ;}private static String md5Sign(OpenAPIRequest request, String key) {JsonObject jsonObject = new JsonParser().parse(new Gson().toJson(request)).getAsJsonObject();jsonObject.remove("image");return signJsonObject(jsonObject, key ,1) ;}public static String sign(TreeMap<String, Object> map, String key) {StringBuilder sb = new StringBuilder();map.forEach((k,v)->{sb.append(k + "=" + v + "&");});sb.append("key=" + key);System.out.println("签名前字符串: "+ sb);String businessSign = MD5Encoder.encode(sb.toString(), "");System.out.println("签名结果: " + businessSign);return businessSign;}

签名调用方式

//可以更改为配置或者写死 
public static final String KEY = "key"; public static void main(String[] args) {
//封装参数
TreeMap<String, Object> map = new TreeMap<>();map.put("name", "张三");map.put("id", "1");map.put("idCard", "51090102198801025878");
// 签名String businessSign = SignUtil.sign(map, key);}

相关文章:

HttpUtil的get和post请求

Http工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.ht…...

leetcode 二进制数转字符串

1.题目要求: 2.题目代码: class Solution { public:string printBin(double num) {string result;double compare_value 1.0;//先给把0和.赋值给result;result.push_back(0);result.push_back(.);while(result.size() < 33){//利用十进制转换成二进制的方法//1.先给num …...

前端项目使用gitlab-cicd+docker实现自动化部署

GitLab CI/CD 是一个强大的工具&#xff0c;可以实现项目的自动化部署流程&#xff0c;从代码提交到部署只需几个步骤。本文将带你配置 GitLab CI/CD 完成一个前端项目的自动化部署。 前言 为什么使用cicddocker&#xff1f; 目前我们公司开发环境使用的shell脚本部署&#…...

【Linux】进程

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、冯诺依曼体系结构 &#x1f31f;系统调用和库函数概念 二、操作系统OS 三、进程 &#x1f31f;查看进程 &#x1f31f;通过系统调用获取进程标示符 &#x1f31f;通过系统调用创…...

transformers生成式对话机器人

简介 生成式对话机器人是一种先进的人工智能系统&#xff0c;它能够通过学习大量的自然语言数据来模拟人类进行开放、连贯且创造性的对话。与基于规则或检索式的聊天机器人不同&#xff0c;生成式对话机器人并不局限于预定义的回答集&#xff0c;而是可以根据对话上下文动态地…...

Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战

Text2SQL&#xff08;NL2sql&#xff09;对话数据库&#xff1a;设计、实现细节与挑战 前言1.何为Text2SQL&#xff08;NL2sql&#xff09;2.Text2SQL结构与挑战3.金融领域实际业务场景4.注意事项5.总结 前言 随着信息技术的迅猛发展&#xff0c;人机交互的方式也在不断演进。…...

C# 关于加密技术以及应用(二)

AES&#xff08;Advanced Encryption Standard&#xff09;和 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是两种不同的加密算法&#xff0c;它们各自有特定的使用场景和优势。下面是它们的主要区别和适用场景&#xff1a; AES&#xff08;高级加密标准&#xff09; 特…...

四十四:Web如何关闭会话

在Web应用中&#xff0c;关闭会话&#xff08;Session Termination&#xff09;是一个重要的机制&#xff0c;用于确保用户的会话状态被安全地终止。无论是用户主动退出登录还是因超时被动登出&#xff0c;正确地管理会话关闭有助于提升安全性并释放服务器资源。 一、为什么需…...

在wsl2中安装archlinux

在之前的博客中&#xff0c;我介绍了如何在虚拟机或者真实机上安装archlinux并且进行一定的配置&#xff0c;但是实际上Linux不管怎么配置在日常使用中都没有Windows简单便利&#xff0c;在开发有关Linux的程序时过去用虚拟机或者直接在Windows上使用ssh在远程服务器上进行开发…...

在Goland中对goroutine协程断点调试

在Goland中对goroutine协程断点调试 环境: Goland 参考了 chatgpt 的回复 进行断点调试的代码 package mainimport ("fmt""sync""time" )// worker 模拟处理任务 func worker(id int, wg *sync.WaitGroup) {defer wg.Done() // 确保任务完成后…...

最长连续递增序列

问题分解 1&#xff1a;要求 要求找到最长的连续递增子序列&#xff0c;即在原数组中位置连续且数值严格递增的一段序列 2&#xff1a;输入和输出 输入是一个未经排序的整数数组nums 输出是该数组中最长连续递增子序列的长度 3&#xff1a;边界调节 数组为空则长度为0 …...

apt 包 源 的维护 和缓存 命令

APT 包源维护命令 更新软件包列表&#xff1a; sudo apt update&#xff1a;从配置的软件源中获取最新的软件包信息。这是安装、升级或删除软件包前通常要执行的步骤&#xff0c;以确保使用的是最新的软件包信息。 升级软件包&#xff1a; sudo apt upgrade&#xff1a;升级系…...

【排序方法的总结】

在数据结构中常见的排序方法有&#xff1a; 插入排序、交换排序、选择排序、归并排序和基数排序等。 插入排序 特点&#xff1a; 简单直观&#xff0c;对于小规模的数据排序效率较高。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后…...

工作中常用springboot启动后执行的方法

前言&#xff1a; 工作中难免会遇到一些&#xff0c;程序启动之后需要提前执行的需求。 例如&#xff1a; 初始化缓存&#xff1a;在启动时加载必要的缓存数据。定时任务创建或启动&#xff1a;程序启动后创建或启动定时任务。程序启动完成通知&#xff1a;程序启动完成后通…...

QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能

简介 在Qt中&#xff0c;使用QTableView和QStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能&#xff0c;而不使用第三方库&#xff08;如QXlsx&#xff09;。 效果 将 QTableView 中的数据导出到Excel //从tableview 导出到 EXcle void MainInterfa…...

模版方法模式的理解和实践

在软件开发中&#xff0c;设计模式为我们提供了一套经过验证的解决方案&#xff0c;用于解决常见的设计问题。其中&#xff0c;模版方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个算法的框架&#xff0c;并允许子类在不改…...

05-树莓派-交叉编译

交叉编译的概念 交叉编译是什么 来源百度百科&#xff1a; 交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统&#xff1b;同样&#xff0c;同一个操作系统也可以在不同的体系结构上运行。 举例来说&#xff0c;我们常说的x86 Lin…...

杨振宁大学物理视频中黄色的字,c#写程序去掉

先看一下效果&#xff1a;&#xff08;还有改进的余地&#xff09; 我的方法是笨方法&#xff0c;也比较刻板。 1&#xff0c;首先想到&#xff0c;把屏幕打印下来。c#提供了这样一个函数&#xff1a; Bitmap bmp new Bitmap(640, 480, PixelFormat.Format32bppArgb); // 创…...

非归档模式下一个或多个数据文件损坏恢复

1. 介绍 有些时侯可能你的库处于非归档的模式下&#xff0c;而你的联机重做日志又currupted,你的数据文件不能完成完全的恢复&#xff0c;这里为大家介绍一个oracle的一个隐藏参数_allow_resetlogs_corruption&#xff0c;让数据库重生。 通过设置隐含参数恢复 alter system …...

k8s 之storageclass使用nfs动态申请PV

文章目录 配置角色权限部署nfs-client-provisioner创建 NFS StorageClass创建 PVC 来动态申请 PV在 Pod 中使用 PVC验证存储是否正确挂载使用 kubectl 和 jq 筛选 PVCwaiting for a volume to be created, either by external provisioner "nfs-diy" or manually cre…...

Spark实训

实训目的: 介绍本实训的基本内容,描述知识目标、,以及本实训的预期效果等。 1、知识目标 (1)了解spark概念、基础知识、spark处理的全周期,了解spark技术是新时代对人才的新要求。 (2)掌握Linux、hadoop、spark、hive集群环境的搭建、HDFS分布文件系统的基础知识与应用…...

Mitel MiCollab 企业协作平台 任意文件读取漏洞复现(CVE-2024-41713)

0x01 产品简介 Mitel MiCollab是加拿大Mitel(敏迪)公司推出的一款企业级协作平台,旨在为企业提供统一、高效、安全的通信与协作解决方案。通过该平台,员工可以在任何时间、任何地点,使用任何设备,实现即时通信、语音通话、视频会议、文件共享等功能,从而提升工作效率和…...

React学习笔记(一)

创建函数写法一&#xff1a; 重点&#xff1a;函数有几种写法 function DemoShow() {return (<div className"App">函数声明</div>); }export default DemoShow;对应js创建函数声明&#xff1a;function sum1(a,b){return ab } 创建函数写法二&#x…...

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…...

SQL按指定字符分割字符串

在SQL中分割字符串通常需要使用特定的函数&#xff0c;因为SQL本身并不像编程语言那样直接支持字符串分割。不同的数据库系统有不同的函数来处理字符串分割。以下是一些常见数据库系统中分割字符串的方法&#xff1a; 1. MySQL 在MySQL中&#xff0c;你可以使用SUBSTRING_IND…...

NAT traversal 原理 | TCP / UDP/ P2P

注&#xff1a;本文为 “NAT traversal ”相关的几篇文章合辑。 未整理去重。 NAT 穿越技术原理 Li_yy123 于 2020-12-08 18:54:26 发布 一、NAT 由来 为了解决全球公有 IPv4 的稀缺&#xff0c;提出了 NAT 技术。NAT 是 Network Address Translation 网络地址转换的缩写。 …...

喜报!极限科技(INFINI Labs)通过国家高新技术企业认定

2024 年 10 月 29 日&#xff0c;国家高新技术企业认定管理工作网公示了北京市认定机构 2024 年认定报备的第一批高新技术企业备案名单&#xff0c;极限数据&#xff08;北京&#xff09;科技有限公司 顺利通过本次高新技术企业评审&#xff0c;并获得 国家级“高新技术企业”认…...

在Ubuntu 22.04上搭建Kubernetes集群

Kubernetes 简介 什么是 Kubernetes&#xff1f; Kubernetes&#xff08;常简称为 K8s&#xff09;是一个强大的开源平台&#xff0c;用于管理容器化应用程序的部署、扩展和运行。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation&#xff08;CNCF&#xff0…...

【OpenCV】平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...

Vue了解

​​​​​​​MVVM和MVC区别是什么? MVC &#xff1a; 传统的设计模式。 设计模式&#xff1a; 一套广泛被使用的开发方式 M&#xff1a; model 模型 模型&#xff1a;就是数据的意思 V &#xff1a; view视图 视图&#xff1a;就是页面的意思 C&#xff1a;controlle…...

JS 深拷贝浅拷贝

一、浅拷贝 // 假设有一个JSON对象 let originalObject {name: "Alice",age: 25,interests: ["reading", "coding"] };// 将JSON对象赋值给另一个变量 let copiedObject originalObject;// 修改新变量的属性 copiedObject.age 26;// 输出原始…...

设计模式学习之——单例模式

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这个模式的主要目的是控制对象的创建&#xff0c;确保在程序的整个生命周期中&#xff0c;某个类只有一个实例被创…...

Linux Vi/Vim使用 ⑥

掌握 CentOS 7 下的 Vi/Vim 编辑器&#xff1a;从安装到精通 在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中&#xff0c;Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称&#xff0c;虽然初次上手有一定学习门槛&#xff0c;但掌握之后便能…...

【5G】5G技术组件 5G Technology Components

5G的目标设置非常高&#xff0c;不仅在数据速率上要求达到20Gbps&#xff0c;在容量提升上要达到1000倍&#xff0c;还要为诸如大规模物联网&#xff08;IoT&#xff0c; Internet of Things&#xff09;和关键通信等新服务提供灵活的平台。这些高目标要求5G网络采用多种新技术…...

Java 学习,字符串比较

Java 字符串比较通常使用 equals() 方法&#xff0c;而不是使用 运算符。因为 运算符&#xff0c;比较的是字符串对象的引用是否相同&#xff0c;而 equals() 方法比较的是字符串的内容是否相同。 使用equals()等方法&#xff0c;比较两个字符串&#xff1a; public class …...

普通算法——二维前缀和

二维前缀和 题目链接&#xff1a;https://www.acwing.com/problem/content/798/ 题目描述&#xff1a; 输入一个 n n n 行 m m m 列的整数矩阵&#xff0c;再输入 q q q 个询问&#xff0c;每个询问包含四个整数 ** x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 x1,y1,x2,y2 &…...

2024年API接口发展趋势:智能化、自动化引领潮流

随着信息技术的飞速发展&#xff0c;应用程序编程接口&#xff08;API&#xff09;已成为现代软件开发的核心组成部分。API作为不同系统之间的桥梁&#xff0c;使得数据、功能和服务能够在各种平台和设备之间无缝流动。在2024年&#xff0c;API接口正经历着一系列显著的变革和发…...

SQL中的通配符:使用LIKE操作符进行模式匹配

在SQL中&#xff0c;LIKE 操作符用于在查询中进行模式匹配。它常用于 WHERE 子句中&#xff0c;以便根据特定模式查找数据。与直接进行精确匹配的 操作符不同&#xff0c;LIKE 允许你使用通配符来对数据进行模糊查询&#xff0c;从而使查询更加灵活和强大。 常见的SQL通配符 …...

数据结构:数组

线性表: 线性表就是数据排成像一条线一样的结构.每个现行表上的数据最多只有前和后两个方向.常见的线性表结构&#xff1a;数组&#xff0c;链表、队列、栈等。 什么是数组: 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储…...

2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判

2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判 完整代码请私聊 博主 一、背景 在各类学科竞赛中&#xff0c;常常要求参赛者提交 Excel 或/和 PDF 格式的竞赛作品。 本赛题以某届数据分析竞赛作品的评阅为背景&#xff0c;要求参赛者根据给定的评分准则和标准答案&a…...

java+ssm+mysql美妆论坛

项目介绍&#xff1a; 使用javassmmysql开发的美妆论坛&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 用户&#xff1a;主要是前台功能使用&#xff0c;包括注册、登录&#xff1b;查看论坛板块和板块下帖子&#xff1b;…...

MySQL | 尚硅谷 | 第13章_约束

MySQL笔记&#xff1a;第13章_约束 文章目录 MySQL笔记&#xff1a;第13章_约束第13章_约束 1. 约束(constraint)概述1.1 为什么需要约束1.2 什么是约束1.3 约束的分类演示代码 2. 非空约束2.1 作用2.2 关键字2.3 特点2.4 添加非空约束2.5 删除非空约束演示代码 3. 唯一性约束3…...

【Ubuntu】Ubuntu的Desktop(学习/用户使用)和Bit版本(工作)

这篇文章似乎没什么必要写&#xff0c;但想了想还是决定记录一下&#xff0c;也许对新手入坑Ubuntu会有帮助&#xff0c; 事实上也很简单&#xff0c;一个是桌面版本&#xff0c;另一个是字符界面版本。 桌面版&#xff1a;拥有图形桌面 字符界面&#xff0c;易上手&#xff…...

面试之MySQL自增ID耗尽问题的解决方案详解

自增ID耗尽问题的解决方案详解 目录 引言切换到BIGINT分表分库UUID雪花算法&#xff08;Snowflake&#xff09;回收已删除的ID其他策略策略选择和实施总结 引言 在现代数据库应用中&#xff0c;自增ID作为主键被广泛使用。随着数据量的不断增长&#xff0c;自增ID耗尽问题逐…...

数据结构第一弹-平衡树

大家好&#xff0c;今天和大家一起分享一下数据结构中的平衡树~ 平衡树是一种特别重要的数据结构&#xff0c;它通过维持树的高度来保证操作的效率&#xff0c;从而在众多数据结构中脱颖而出。我们今天深入探讨平衡树的概念、种类、工作原理以及应用实例。 1. 平衡树简介 平衡…...

k8s二进制部署集群报错

k8s二进制部署的集群 添加node节点之后 部署服务之后出现报错 在该节点上telnet 172.30.0.1 443也不通 其他正常节点telnet是通的 解决办法&#xff1a; 修改kube-proxy的服务配置 systemctl daemon-reload systemctl restart kube-proxy再次telnet通了...

深入了解架构中常见的4种缓存模式及其实现

4种缓存模式 随着应用程序的复杂性日益增加&#xff0c;缓存管理变得至关重要。缓存不仅能有效减轻数据库负载&#xff0c;还能显著提升数据访问速度。选择合适的缓存模式能够在不同的业务场景下发挥出最佳效果。 本文将详细介绍四种常见的缓存模式&#xff1a;Cache-Aside (…...

python pyqt5 优秀的开源项目

目录 1. Qutebrowser 2. Anki 3. Calibre 4. Spyder 5. Leo Editor 6. Trelby 7. Eric IDE 8. Fman 9. Gramps 10. OpenShot 使用 PyQt5 开发的优秀开源项目涵盖了各种应用领域,包括桌面应用、开发工具、教育软件等。以下是一些值得关注的 PyQt5 开源项目: 1. Qut…...

【C++】关系操作符的全面解析与高级应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;关系操作符1.关系操作符的分类与语义2.关系操作符的连用问题3.浮点数比较的精度问题问题示例解决方案 &#x1f4af;总结核心要点 &#x1f4af;小结 &#x1f4af;前言 在…...

Git进行版本控制的VS项目中特定配置

在使用Git进行版本控制的VS&#xff08;Visual Studio&#xff09;项目中&#xff0c;通常有一些文件和目录是不需要提交到仓库中的。这些文件通常是编译生成的输出、临时文件、用户特定配置等。为了告诉Git忽略这些文件&#xff0c;你应该编辑或创建一个.gitignore文件&#x…...