当前位置: 首页 > 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…...

假期题目整合

1. 下载解压题目查看即可 典型的猪圈密码只需要照着输入字符解开即可得到答案 2. 冷门类型的密码题型&#xff0c;需要特意去找相应的解题思路&#xff0c;直接百度搜索天干地支解密即可 3. 一眼能出思路他已经给了篱笆墙的提示提示你是栅栏密码对应解密即可 4. 最简单的社会主…...

Redisson—分布式服务

一、 分布式远程服务&#xff08;Remote Service&#xff09; 基于Redis的Java分布式远程服务&#xff0c;可以用来通过共享接口执行存在于另一个Redisson实例里的对象方法。换句话说就是通过Redis实现了Java的远程过程调用&#xff08;RPC&#xff09;。分布式远程服务基于可…...

volatile使用方法

volatile使用方法 编译优化。使用等级3的话&#xff0c;可能将优化了一些变量。 这为什么会开启等第三呢&#xff1f;这是关于单片机的内存容量比较小&#xff0c;所以开启优化的话&#xff0c;可以可以省一些空间&#xff0c;但是如果。会出现些变量的问题&#xff0c;需要通过…...

提升您的 Go 应用性能的 6 种方法

优化您的 Go 应用程序 1. 如果您的应用程序在 Kubernetes 中运行&#xff0c;请自动设置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配额 Go 调度器 可以具有与运行设备的核心数量一样多的线程。由于我们的应用程序在 Kubernetes 环境中的节点上运行&#xff0c;当我们的 Go 应用程…...

计算摄像技术02 - 颜色空间

一些计算摄像技术知识内容的整理&#xff1a;颜色视觉与感知特性、颜色空间和基于彩色滤镜阵列的彩色感知。 文章目录 一、颜色视觉与感知特性 &#xff08;1&#xff09;色调 &#xff08;2&#xff09;饱和度 &#xff08;3&#xff09;明度 二、颜色空间 &#xff08;1&…...

Pytorch笔记之分类

文章目录 前言一、导入库二、数据处理三、构建模型四、迭代训练五、模型评估总结 前言 使用Pytorch进行MNIST分类&#xff0c;使用TensorDataset与DataLoader封装、加载本地数据集。 一、导入库 import numpy as np import torch from torch import nn, optim from torch.uti…...

【目标检测】——PE-YOLO精读

yolo&#xff0c;暗光目标检测 论文&#xff1a;PE-YOLO 1. 简介 卷积神经网络&#xff08;CNNs&#xff09;在近年来如何推动了物体检测的发展。许多检测器已经被提出&#xff0c;而且在许多基准数据集上的性能正在不断提高。然而&#xff0c;大多数现有的检测器都是在正常条…...

Java 数组转集合

数组转集合 如果仅仅这样转化Arrays.asList(数组)&#xff0c;导致集合只能查询&#xff0c;无法进行其他操作&#xff0c;因此&#xff0c;对该方法进行优化&#xff1a; List<实体> list1 new ArrayList<>(Arrays.asList(数组))以上方法就可以使用集合的所有操…...

Elasticsearch:ES|QL 查询语言简介

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题&#xff0c;但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在目前的 Elastic Stack 8.10 中此功能还没有提供。 Elasticsearch 查询语言 (ES|…...

qt qml中listview出现卡顿情况时的常用处理方法

如果在qt QML中使用ListView时出现卡顿情况&#xff0c;可能是因为渲染大量的数据或者在模型中进行复杂的数据处理。以下是常用的解决方法&#xff1a; 1. 设置ListView的缓存策略&#xff1a;通过设置ListView的cacheBuffer属性为适当的值&#xff0c;可以提高滚动的流畅性。…...

中国石油大学网页设计与网站建设在线考试答案/百度云登录

不得不说DataFrame现在很火&#xff0c;现在已经有很多库都是基于DataFrame写的,而且它用起来也很方便&#xff0c;读excel只需要一行代码&#xff0c;想当初xlrd可是让我头疼了好久&#xff0c;所以对于用python处理大数据的人来说&#xff0c;pandas是必须要了解的。对于一个…...

临沂网站制作公司6/电商运营的基本流程

1.基于计算机的系统 所谓基于计算机的系统是指&#xff1a;通过处理信息来完成某些预定义目标而组织在一起的元素的 集合或排列 组成基于计算机系统的元素主要有&#xff1a;软件、硬件、人员、数据库、文档 和规程 2.系统元素 软禁——指计算机程序、数据结构和相关的工作产品…...

做网站上传信息软件/百度灰色关键词排名推广

今日和代码族群主在群里闲聊&#xff0c;群友聊到了一个关于后门的事情&#xff0c;群主当时在群里提了部分程序官方就自带有漏洞&#xff0c;列举了一部分程序&#xff0c;里面有我正在使用的龙兵名片系统&#xff0c;于是和群主进行了沟通&#xff0c;了解漏洞的原理以及修复…...

云南云桥建设股份有限公司官方网站/seo顾问阿亮

Lua中默认是没有面向对象的&#xff0c;需要靠我们自己实现 成员变量 成员函数 Student {age 18,sex true,Up function ()print(长大了)end }Lua中类的表现更像是一个类中包含有很多的静态变量和函数 print(Student.age) Student.Up()在声明表后&#xff0c;可以在表外去…...

请上传网站应用水印图片/北京网站优化哪家好

GNU是什么 GNU计划&#xff0c;有译为“革奴计划”&#xff0c;是由理查德斯托曼在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。 GNU是“GNUs Not Unix”的递归缩写。 为保证GNU软件可以自由地“使用、复制、修改和发布”&#xff0c;所有GNU软件都包含…...

wordpress openbox主题/友情链接的概念

在 Linux 上安装 Wine如果您正在使用 Red Hat 或者 SUSE&#xff0c;最简单的方法是从 CD 安装 Wine。不过&#xff0c;如果那些 CD 比较老&#xff0c;您可能需要通过源文件安装&#xff0c;因为 Wine 项目经常更新。如果通过源文件安装&#xff0c;您会发现 Wine 用户指南(参…...