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

java入坑之国际化编程

一、字符编码

1.1概述

字符编码
--字符:0,a,我,①,,…
--计算机只用0和1,1bit(0或者1)
--ASCIL码(American Standard Code for Information Interchange)

  • ·美国信息交换标准代码,奠定计算机编码基础
  • ·用一个字节(1Byte=8bits)来存储a-z,A-Z,0-9和一些常用符号
  • ·用于显示英语及西欧语言
  • ·回车键(13,00001101),0(48,00110000),A(65,01000001),a(97,01100001)

package org.example;import java.io.UnsupportedEncodingException;public class StringTest {public static void main(String[] args) throws UnsupportedEncodingException {String a = "我是中国人";String b = new String(a.getBytes("UTF-8"), "GBK");System.out.println(b);String c = new String(b.getBytes("GBK"), "UTF-8");System.out.println(c);}
}

 1.2中文编码

字符集        包括哪些字符元素;
编码        每个字符元素用多少号码        (0和1的组合)来表示

1.3Unicode(字符集)

Unicode(字符集)
一目标:不断扩充,存储全世界所有的字符
·编码方案

  • UTF-8,兼容ASCⅡ,变长(1-4个字节存储字符),经济,方便传输
  • UTF-16,用变长(2-4个字节)来存储所有字符
  • UTF-32,用32bits(4个字节)存储所有字符

写文件

package org.example;import java.io.*;public class Main {public static void main(String[] args) {writeFile1();}public static void writeFile1() {FileOutputStream fos = null;OutputStreamWriter osw = null;BufferedWriter bw = null;String charset = "UTF-8";try {fos = new FileOutputStream("c:/temp/abc.txt"); // 节点类osw = new OutputStreamWriter(fos, charset); // 转化类
//osw  =  new  OutputStreamWriter(fos); //  转化类 采用操作系统默认编码bw = new BufferedWriter(osw); // 装饰类
// br = new BufferedWriter(new OutputStreamWriter(newFileOutputStream("c:/temp/abc.txt")))bw.write("我们是");bw.newLine();bw.write("Ecnuers.^^");bw.newLine();} catch (Exception ex) {ex.printStackTrace();} finally {try {bw.close();// 关闭最后一个类,会将所有的底层流都关闭} catch (Exception ex) {ex.printStackTrace();}}}
}

读文件

package org.example;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;public class Main {public static void main(String[] args) {readFile1();}public static void readFile1(){FileInputStream fis=null;InputStreamReader isr=null;BufferedReader br=null;String charset="UTF-8";try{fis=new FileInputStream("c:/temp/abc.txt"); // 节点类isr=new InputStreamReader(fis,charset); // 转化类
//isr = new InputStreamReader(fis); //采用操作系统默认编码br=new BufferedReader(isr); // 装饰类
// br = new BufferedReader(new InputStreamReader(newFileInputStream("c:/temp/abc.txt")))String line;while((line=br.readLine())!=null) // 每次读取一行{System.out.println(line);}}catch(Exception ex){ex.printStackTrace();}finally{try{br.close();// 关闭最后一个类,会将所有的底层流都关闭}catch(Exception ex){ex.printStackTrace();}}}
}

1.4ANSI编码

1.5Java的字符编码

package org.example;import java.nio.charset.Charset;
import java.util.Set;
import java.util.SortedMap;
public class Main {public static void main(String[] args) {
//默认字符集 GBKCharset c = Charset.defaultCharset();System.out.println(c.name());
//输出所有的支持字符集SortedMap<String, Charset> sm = Charset.availableCharsets();Set<String> keyset = sm.keySet();System.out.println("Java 支持的所有字符集");for (String s : keyset) {System.out.println(s);}}
}

java charset类是一个用于表示字符编码集的类,它可以用于将字符序列和字节序列之间进行转换和处理。字符编码集是一种将字符和数字之间进行映射的规则,例如ASCII、UTF-8、GBK等。不同的字符编码集可能支持不同的字符集合,因此在不同的编码之间转换时可能会出现乱码或丢失信息的情况。java charset类提供了一些方法和工具,用于检测、创建和管理不同的字符编码集

java charset类的主要方法有:

  1. static Charset forName(String charsetName):根据给定的字符编码集名称,返回一个Charset对象,如果不存在或不支持该名称,则抛出异常。
  2. static Charset defaultCharset():返回当前Java虚拟机的默认字符编码集,它通常取决于底层操作系统的语言环境和字符编码。
  3. static SortedMap<String,Charset> availableCharsets():返回一个包含当前Java虚拟机支持的所有字符编码集的映射,其中键是规范名称,值是Charset对象。
  4. String name():返回该字符编码集的规范名称。
  5. Set<String> aliases():返回该字符编码集的别名集合,别名是除了规范名称之外的其他有效名称。
  6. boolean isRegistered():返回该字符编码集是否在IANA Charset Registry中注册,如果没有注册,则其规范名称必须以"X-"或"x-"开头。
  7. boolean canEncode():返回该字符编码集是否可以对任意Unicode字符进行编码12。
  8. boolean contains(Charset cs):返回该字符编码集是否包含给定的字符编码集,即该字符编码集可以表示给定字符编码集中的所有字符。
  9. CharsetEncoder newEncoder():返回一个新的CharsetEncoder对象,用于将字符序列转换为字节序列。
  10. CharsetDecoder newDecoder():返回一个新的CharsetDecoder对象,用于将字节序列转换为字符序列
package org.example;import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharsetDecoder;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;public class CharsetDemo {public static void main(String[] args) throws Exception {// 获取默认字符编码集Charset cs = Charset.defaultCharset();System.out.println("默认字符编码集:" + cs.name());// 获取UTF-8字符编码集cs = Charset.forName("UTF-8");System.out.println("UTF-8字符编码集:" + cs.name());// 创建一个UTF-8编码器CharsetEncoder encoder = cs.newEncoder();// 创建一个UTF-8解码器CharsetDecoder decoder = cs.newDecoder();// 定义一个要转换的字符串String str = "你好,世界!";// 将字符串转换为字节缓冲区ByteBuffer bb = encoder.encode(CharBuffer.wrap(str));System.out.println("转换后的字节缓冲区:" + bb);// 将字节缓冲区转换为字符串CharBuffer cb = decoder.decode(bb);System.out.println("转换后的字符串:" + cb);}
}

二、国际化编程

2.1格式化相关类

数字格式化

import java.text.DecimalFormat;public class DecimalFormaterRuleTest {public static void main(String[] args) {DecimalFormat df1, df2;System.out.println("整数部分为0的情况,0/#的区别");// 整数部分为0 ,#认为整数不存在,可不写; 0认为没有,但至少写一位,写0df1 = new DecimalFormat("#.00");df2 = new DecimalFormat("0.00");System.out.println(df1.format(0.1)); // 0.10System.out.println(df2.format(0.1)); // 0.10System.out.println("小数部分0/#的区别");// # 代表最多有几位,0代表必须有且只能有几位df1 = new DecimalFormat("0.00");df2 = new DecimalFormat("0.##");System.out.println(df1.format(0.1)); // 0.10System.out.println(df2.format(0.1)); // 0.1System.out.println(df1.format(0.006)); // 0.01System.out.println(df2.format(0.006)); // 0.01System.out.println("整数部分有多位");// 0和#对整数部分多位时的处理是一致的 就是有几位写多少位df1 = new DecimalFormat("0.00");df2 = new DecimalFormat("#.00");System.out.println(df1.format(2)); // 2.00System.out.println(df2.format(2)); // 2.00System.out.println(df1.format(20)); // 20.00System.out.println(df2.format(20)); // 20.00System.out.println(df1.format(200)); // 200.00System.out.println(df2.format(200)); // 200.00}
}
package org.example;import java.text.DecimalFormat;public class DecimalFormatTest {public static void main(String[] args) {DecimalFormat df1 = new DecimalFormat("0.0");DecimalFormat df2 = new DecimalFormat("#.#");DecimalFormat df3 = new DecimalFormat("000.000");DecimalFormat df4 = new DecimalFormat("###.###");System.out.println(df1.format(12.34)); // 12.3System.out.println(df2.format(12.34)); // 12.3System.out.println(df3.format(12.34)); // 012.340System.out.println(df4.format(12.34)); // 12.34DecimalFormat df5 = new DecimalFormat("0.00");// 保留2位小数double d1 = 123456789.123456789;double d2 = 987654321.987654321;System.out.println("format1 d1=" + df5.format(d1));// 输出: format1 d1=123456789.12System.out.println("format1 d2=" + df5.format(d2));// 输出: format1 d2=987654321.99DecimalFormat df6 = new DecimalFormat("#,##0.00");System.out.println("format2 d1=" + df6.format(d1));// 输出: format2 d1=123,456,789.12System.out.println("format2 d2=" + df6.format(d2));// 输出: format2 d2=987,654,321.99}
}

字符串格式化

package org.example;import java.text.MessageFormat;public class MessageFormatTest {public static void main(String[] args) {String message = "{0}{1}{2}{3}{4}";Object[] array = new Object[]{"A","B","C","D","E"};String value = MessageFormat.format(message, array);System.out.println(value);message = "oh, {0,number,#.##} is a good number";array = new Object[]{new Double(3.1415)};value = MessageFormat.format(message, array);System.out.println(value);}
}

时间格式化

package org.example;import java.text.SimpleDateFormat;
import java.util.Date;public class SimpleDateTest {public static void main(String[] args) {String strDate = "2008-10-19 10:11:30.345";// 准备第一个模板,从字符串中提取出日期数字// 将毫秒部分改为大写的SString pat1 = "yyyy-MM-dd HH:mm:ss.SSS"; //修正了大小写// 准备第二个模板,将提取后的日期数字变为指定的格式String pat2 = "yyyy年MM月dd日HH时mm分ss秒SSS毫秒";SimpleDateFormat sdf1 = new SimpleDateFormat(pat1); // 实例化模板对象SimpleDateFormat sdf2 = new SimpleDateFormat(pat2); // 实例化模板对象Date d = null;try {d = sdf1.parse(strDate); // 将给定的字符串中的日期提取出来} catch (Exception e) { // 如果提供的字符串格式有错误,则进行异常处理e.printStackTrace(); // 打印异常信息}System.out.println(sdf2.format(d)); // 将日期变为新的格式}
}
package org.example;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateFormatterTest {public static void main(String[] args) {//将字符串转化为时间String dateStr= "2016年10月25日";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");LocalDate date= LocalDate.parse(dateStr, formatter);System.out.println(date.getYear() + "-" + date.getMonthValue() + "-" + date.getDayOfMonth());System.out.println("==========================");//将日期转换为字符串输出LocalDateTime now = LocalDateTime.now();DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss");String nowStr = now.format(format);System.out.println(nowStr);}
}

 2.2Locale类

package org.example;import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;public class LocaleDemo {public static void main(String[] args) {// 创建一个中文简体的语言环境Locale cn = Locale.SIMPLIFIED_CHINESE;// 创建一个英文美国的语言环境Locale us = Locale.GERMAN;// 获取当前日期Date date = new Date();// 创建一个日期格式化器DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, cn);// 使用不同的语言环境格式化日期System.out.println("中文简体:" + df.format(date));df = DateFormat.getDateInstance(DateFormat.FULL, us);System.out.println("英文美国:" + df.format(date));}
}

 java Locale类的主要方法有:

  1. static Locale getDefault():返回当前Java虚拟机的默认语言环境,它通常取决于底层操作系统的设置。
  2. static Locale forLanguageTag(String languageTag):根据给定的语言标签,返回一个Locale对象,如果语言标签无效或不支持,则返回一个空的Locale对象。
  3. static String toLanguageTag():返回该Locale对象对应的语言标签,如果该Locale对象为空,则返回空字符串。
  4. String getLanguage():返回该Locale对象的语言代码,如果该Locale对象为空,则返回空字符串。
  5. String getCountry():返回该Locale对象的国家或地区代码,如果该Locale对象为空,则返回空字符串。
  6. String getScript():返回该Locale对象的脚本代码,如果该Locale对象为空或没有指定脚本,则返回空字符串。
  7. String getVariant():返回该Locale对象的变体代码,如果该Locale对象为空或没有指定变体,则返回空字符串。
  8. String getDisplayName():返回该Locale对象的显示名称,根据默认语言环境进行本地化,如果该Locale对象为空,则返回空字符串

2.3 ResourceBundle类

java ResourceBundle类是一个用于表示特定的地理、政治和文化地区的类。每一个ResourceBundle对象都代表了一个语言环境,可以用于执行一些与区域相关的操作,例如格式化日期、时间、数字、货币等。java ResourceBundle类还支持IETF BCP 47标准,可以使用语言标签来表示不同的语言和地区

package org.example;import java.util.Locale;
import java.util.ResourceBundle;public class ResourceBundleDemo {public static void main(String[] args) {// 创建一个英文美国的语言环境Locale us = new Locale("en", "US");// 创建一个中文简体的语言环境Locale jp = new Locale("ja", "JP");// 根据基本名称和语言环境获取ResourceBundle对象ResourceBundle bundleUS = ResourceBundle.getBundle("Message", us);ResourceBundle bundleCN = ResourceBundle.getBundle("Message", jp);// 获取不同语言环境下的消息System.out.println("message from Message_en_US.properties: " + bundleUS.getString("message"));System.out.println("message from Message_ja_JP.properties: " + bundleCN.getString("message"));}
}

语言文件

Message_en_US.properties

message=Hello!

 Message_ja_JP.properties

message=こんにちは!

三、正则表达式

 3.1Pattern类

java Pattern类是一个用于表示正则表达式的编译表示形式的类,它可以用于对字符串进行匹配和处理。正则表达式是一种定义字符串模式的规则,可以用于搜索、编辑或验证文本。java Pattern类支持Perl风格的正则表达式语法,也支持Unicode字符集

package org.example;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class MatcherDemo {public static void main(String[] args) {// 检查字符串里面有多少个dogString REGEX = "dog";String INPUT = "I have a dog, and my friend has a dog too.";Pattern p = Pattern.compile(REGEX);Matcher m = p.matcher(INPUT);int count = 0;while (m.find()) {count++;System.out.println("Match number: " + count);System.out.println("start(): " + m.start());System.out.println("end(): " + m.end());}System.out.println(count);}
}

3.2 Matcher类

java Matcher类是一个用于执行正则表达式匹配操作的类,它实现了MatchResult接口,可以对一个字符序列按照一个Pattern对象进行解释和处理。要使用java Matcher类,需要先调用Pattern类的静态方法compile,将一个正则表达式字符串编译为一个Pattern对象,然后调用Pattern对象的matcher方法,创建一个Matcher对象,用于对输入字符串进行匹配操作

Matcher对象提供了一些方法,用于检查匹配结果和获取匹配信息,例如:

  1. boolean matches():判断整个输入字符串是否与正则表达式完全匹配。
  2. boolean find():判断输入字符串中是否存在与正则表达式匹配的子序列。
  3. boolean find(int start):从指定位置开始,判断输入字符串中是否存在与正则表达式匹配的子序列。
  4. String group():返回与正则表达式匹配的子序列。
  5. String group(int group):返回与正则表达式中指定分组匹配的子序列。
  6. int groupCount():返回正则表达式中分组的数量。
  7. int start():返回与正则表达式匹配的子序列在输入字符串中的起始位置。
  8. int start(int group):返回与正则表达式中指定分组匹配的子序列在输入字符串中的起始位置。
  9. int end():返回与正则表达式匹配的子序列在输入字符串中的结束位置(不包含)。
  10. int end(int group):返回与正则表达式中指定分组匹配的子序列在输入字符串中的结束位置(不包含)
package org.example;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class MatchesLooking {private static final String REGEX = "foo";private static final String INPUT = "foooo";private static Pattern pattern;private static Matcher matcher;public static void main(String[] args) {// Initializepattern = Pattern.compile(REGEX);matcher = pattern.matcher(INPUT);System.out.println("Current REGEX is: " + REGEX);System.out.println("Current INPUT is: " + INPUT);System.out.println("lookingAt(): " + matcher.lookingAt());  //部分匹配System.out.println("matches(): " + matcher.matches()); //完全匹配}
}

 3.3综合

Matcher对象还提供了一些方法,用于对输入字符串进行替换和追加操作,例如:

  1. Matcher appendReplacement(StringBuffer sb, String replacement):将与正则表达式匹配的子序列替换为给定的字符串,并将结果追加到一个StringBuffer对象中。
  2. StringBuffer appendTail(StringBuffer sb):将最后一次匹配操作后剩余的输入字符串追加到一个StringBuffer对象中。
  3. String replaceAll(String replacement):将所有与正则表达式匹配的子序列替换为给定的字符串,并返回替换后的新字符串。
  4. String replaceFirst(String replacement):将第一个与正则表达式匹配的子序列替换为给定的字符串,并返回替换后的新字符串

替换 

package org.example; //声明包名import java.util.regex.Matcher; //导入Matcher类
import java.util.regex.Pattern; //导入Pattern类public class RegexDemo { //定义公共类private static String REGEX = "a*b"; //*表示限定前面的a可以有0或者多个。private static String INPUT = "aabfooaabfooabfoobcdd";private static String REPLACE = "-";public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); //将正则表达式字符串编译为Pattern对象Matcher m = p.matcher(INPUT); //创建Matcher对象,用于对输入字符串进行匹配操作StringBuffer sb = new StringBuffer(); //创建StringBuffer对象,用于存储替换后的字符串//全部替换while(m.find()){ //循环查找与正则表达式匹配的子序列m.appendReplacement(sb,REPLACE); //将匹配的子序列替换为指定的字符串,并追加到StringBuffer对象中}//将最后的尾巴字符串附加上m.appendTail(sb); //将最后一次匹配操作后剩余的输入字符串追加到StringBuffer对象中System.out.println(sb.toString()); //输出替换后的字符串}
}
package org.example; //声明包名import java.util.regex.Matcher; //导入Matcher类
import java.util.regex.Pattern; //导入Pattern类public class ReplaceDemo2 {private static String REGEX = "a*b"; //*表示限定前面的a可以有0或者多个。private static String INPUT ="aabfooaabfooabfoob";private static String REPLACE = "-";public static void main(String[] args) {Pattern p = Pattern.compile(REGEX);// get a matcher objectMatcher m = p.matcher(INPUT);// 使用replaceAll方法替换所有匹配的子序列,并赋值给一个新的字符串变量String output = m.replaceAll(REPLACE); //修正了赋值// 输出新的字符串变量System.out.println(output); //修正了输出}
}

邮箱的判定

package org.example;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexTest {public static void main(String[] args) {regularExpression();}public static void regularExpression() {String REGEX_EMAIL = "^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";String[] emails = new String[]{"123^@qq.com", "name_321@163.com", "+whatever*72@gmail.com"};Pattern pattern = Pattern.compile(REGEX_EMAIL);for (String email : emails) {Matcher matcher = pattern.matcher(email);if (matcher.matches()) {System.out.println(email + " is a valid email.");} else {System.out.println(email + " is not a valid email.");}}}
}

相关文章:

java入坑之国际化编程

一、字符编码 1.1概述 字符编码 --字符&#xff1a;0&#xff0c;a,我&#xff0c;①&#xff0c;,… --计算机只用0和1,1bit(0或者1) --ASCIL码(American Standard Code for Information Interchange) 美国信息交换标准代码&#xff0c;奠定计算机编码基础用一个字节(1Byte8b…...

Kafka客户端核心参数详解

这一部分主要是从客户端使用的角度来理解 Kakfa 的重要机制。重点依然是要建立自己脑海中的 Kafka 消费模型。Kafka 的 HighLevel API 使用是非常简单的&#xff0c;所以梳理模型时也要尽量简单化&#xff0c;主线清晰&#xff0c;细节慢慢扩展。 一、从基础的客户端说起 Kaf…...

踩大坑ssh免密登录详细讲解

目 录 问题背景 环境说明 免密登录流程说明 1.首先要在对应的用户主机名的情况下生成密钥对&#xff0c;在A服务器执行 2.将A服务器d公钥拷贝到B服务器对应的位置 3.在A服务器访问B服务器 免密登录流程 0.用户说明 1.目前现状演示 2.删除B服务器.ssh 文件夹下面的…...

操作系统八股

1、请你介绍一下死锁&#xff0c;产生的必要条件&#xff0c;产生的原因&#xff0c;怎么预防死锁 1、死锁 两个或两个以上的进程在执行过程中&#xff0c;因争夺共享资源而造成的一种互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处…...

Hudi SQL DDL

本文介绍Hudi在 Spark 和 Flink 中使用SQL创建和更改表的支持。 1.Spark SQL 创建hudi表 1.1 创建非分区表 使用标准CREATE TABLE语法创建表&#xff0c;该语法支持分区和传递表属性。 CREATE TABLE [IF NOT EXISTS] [db_name.]table_name[(col_name data_type [COMMENT col_co…...

gin 框架的 JSON Render

gin 框架的 JSON Render gin 框架默认提供了很多的渲染器&#xff0c;开箱即用&#xff0c;非常方便&#xff0c;特别是开发 Restful 接口。不过它提供了好多种不同的 JSON Render&#xff0c;那么它们的区别是什么呢&#xff1f; // JSON contains the given interface obje…...

《Dataset Condensation with Differentiable Siamese Augmentation》

《Dataset Condensation with Differentiable Siamese Augmentation》 在本文中&#xff0c;我们专注于将大型训练集压缩成显著较小的合成集&#xff0c;这些合成集可以用于从头开始训练深度神经网络&#xff0c;性能下降最小。受最近的训练集合成方法的启发&#xff0c;我们提…...

多普勒频率相关内容介绍

图1 多普勒效应 1、径向速度 径向速度是作用于雷达或远离雷达的速度的一部分。 图2 不同的速度 2、喷气发动机调制 JEM是涡轮机的压缩机叶片的旋转的多普勒频率。 3、多普勒困境 最大无模糊范围需要尽可能低的PRF&#xff1b; 最大无模糊速度需要尽可能高的PRF&#xff1b…...

win10睡眠快捷方式

新建快捷方式 如下图 内容如下 rundll32.exe powrprof.dll,SetSuspendState 0,1,0 下一步 点击完成即可。 特此记录 anlog 2023年10月6日...

C++中的static和extern关键字

1 声明和定义 声明就是告诉编译器有这个东西的存在&#xff0c;而定义则是这个东西的实现。 对于变量来说&#xff0c;声明就是告诉编译器存在这个名称的变量&#xff0c;定义则是给这个变量分配内存并赋值&#xff1a; // 变量声明&#xff0c;声明时不能赋值&#xff0c;如…...

JAVA经典百题之找完数

题目&#xff1a;一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。 程序分析 首先&#xff0c;我们需要编写一个程序来找出1000以内的所有完数。"完数"是指一个数等于它的…...

CSS 滚动驱动动画 view-timeline-inset

view-timeline-inset 语法例子&#x1f330; 正 scroll-padding 为正正的 length正的 percentage 负 scroll-padding 为负负的 length负的 percentage 兼容性 view-timeline-inset 在使用 view() 时说过, 元素在滚动容器的可见性推动了 view progress timeline 的进展. 默认…...

ansible部署二进制k8s

简介 GitHub地址&#xff1a; https://github.com/chunxingque/ansible_install_k8s 本脚本通过ansible来快速安装和管理二进制k8s集群&#xff1b;支持高可用k8s集群和单机k8s集群地部署&#xff1b;支持不同版本k8s集群部署&#xff0c;一般小版本的部署脚本基本是通用的。 …...

Nginx限流熔断

一、Nginx限流熔断 Nginx 是一款流行的反向代理和负载均衡服务器&#xff0c;也可以用于实现服务熔断和限流。通过使用 Nginx 的限流和熔断模块&#xff0c;比如&#xff1a;ngx_http_limit_req_module 和 ngx_http_limit_conn_module&#xff0c;可以在代理层面对服务进行限流…...

QQ登录的具体流程

文章目录 网站授权QQ登录QQ登录的完整流程代码示例1. 添加依赖2. 配置文件3. 实现Service4. 创建Controller 网站授权QQ登录 首先需要去QQ互联申请应用填写网站的相关信息&#xff0c;以及回调地址&#xff0c;需要进行审核。申请流程暂时不说了&#xff0c;百度一下挺多申请失…...

用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路

文章目录 安装JMeter和Groovy为什么选择Groovy&#xff1f; 压测需求以及思路准备JMeter脚本以及脚本正确性验证使用Test Script Recorder来获取整条业务线上涉及的接口为什么使用Test Script Recorder&#xff1f; 配置Test Script Recorder对接口进行动态化处理处理全局变量以…...

接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能

看腻了文章就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV1cV411A7iU/ delete忘加where条件&#xff08;模拟Oracle闪回&#xff09; 操作基本等同于上篇&#xff1a;再来谈谈如何从binlog文件恢复误update的数据&#xff0c;模拟Oracle的回滚功能 原理&a…...

计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…...

pyqt5使用经验总结

pyqt5环境配置注意&#xff1a; 安装pyqt5 pip install PyQt5 pyqt5-tools 环境变量-创建变量名&#xff1a; 健名&#xff1a;QT_QPA_PLATFORM_PLUGIN_PATH 值为&#xff1a;Lib\site-packages\PyQt5\Qt\plugins pyqt5经验2&#xff1a; 使用designer.exe进行设计&#xff1…...

【MQTT】mosquitto库中SSL/TLS相关API接口

文章目录 1.相关API1.1 mosquitto_tls_set1.2 mosquitto_tls_insecure_set1.3 mosquitto_tls_opts_set1.4 mosquitto_tls_insecure_set1.5 mosquitto_tls_set_context1.6 mosquitto_tls_psk_set 2.示例代码 Mosquitto 是一个流行的 MQTT 消息代理&#xff08;broker&#xff09…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...