String字符串,FastJson常用操作方法

JSON字符串操作

1、创建配置环境

# 引入测试包testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.2.6.RELEASE'
# 创建测试类@RunWith(SpringRunner.class)@SpringBootTestpublic class JsonTest {@Testpublic void test(){System.out.println("xxxxxxx");}
}
  • 注意

    测试的时候需要更改一下idea的设置
    在这里插入图片描述

2、FastJson简介

# FastJson简介FastJson是将Java对象转为JSON格式字符串的过程,JavaBean对象,List集合对象,Map集合应用最为广泛。

3、序列化

# Json的数组形式jsonStr = ['0','1','2','3',4]
  • 测试

    @Test
    public void test(){// 创建数组String arr [] =  {"a", "b", ""};// 将数组转为JSON形式Object json = JSON.toJSON(arr);System.out.println("json = " + json);
    }
    

    在这里插入图片描述

# 序列化:将Java对象转为JSON字符串的过程
  • JSON.toJSONString(序列化java对象)

        @Testpublic void test(){Student student = new Student();student.setUserName("范浩然");student.setAge(12);student.setClassName("初二1班");// 将javaBean对象序列化String studentInfo = JSON.toJSONString(student);System.out.println("studentInfo = " + studentInfo);// 打印对象信息System.out.println("student = " + student);}
    

    在这里插入图片描述

        @Testpublic void test1(){Student student = new Student();student.setUserName("范浩然");student.setAge(12);student.setClassName("初二1班");// 序列化集合信息List<Student> studentList = new ArrayList<>();studentList.add(student);// 序列化集合信息String students = JSON.toJSONString(studentList);System.out.println("students = " + students);}
    

    在这里插入图片描述

        @Testpublic void test2(){Student student = new Student();student.setUserName("范浩然");student.setAge(12);student.setClassName("初二1班");HashMap<String, Student> studentMap = new HashMap<>();studentMap.put("1",student);// 序列化HashMapString studentInfo = JSON.toJSONString(studentMap);System.out.println("studentInfo = " + studentInfo);}
    

    在这里插入图片描述

4、反序列化

    @Testpublic void test3(){//  反序列化 将Json字符串反序列化为Java对象String str = "{\"age\":12,\"className\":\"初二1班\",\"userName\":\"范浩然\"}";// 第一个参数 反序列化的字符串,Java对象的Class对象Student student =  JSON.parseObject(str, Student.class);System.out.println("student = " + student);//  json对象转为数组String str3 = " [{\"age\":12,\"className\":\"初二1班\",\"userName\":\"范浩然\"}]";List<Student> studentList = JSON.parseArray(str3, Student.class);studentList.forEach(item ->{System.out.println(item);});// json字符串转为集合 转换后集合泛型的classString str2 = "{\"1\":{\"age\":12,\"className\":\"初二1班\",\"userName\":\"范浩然\"}}";// 第一个参数 字符串// 直接进行反序列化 Map集合是没有泛型的,没有泛型的集合是不安全的,转换后的集合必须具有泛型,// 调用parseObject传递参数,TypeReference类型,在TypeReference类的泛型中,传递转后的Map集合Map<String,Student> map = JSON.parseObject(str2,new TypeReference<Map<String,Student>>(){});// 遍历Mapmap.entrySet().stream().forEach(item->{// 遍历键值对System.out.println("key:"+item.getKey());System.out.println("value:"+item.getValue());});}

在这里插入图片描述

5、枚举介绍

 @Testpublic void test4(){// 枚举介绍 是进行序列化时 自己可以定义一些特殊的需求// toJSONString()// 参数一:要序列化的对象// 参数二:SerializerFeature枚举类型的可变参数// 常见的方法// 1.序列化Null值的字段Student student = new Student();student.setClassName("高三一班");student.setBirthday(new Date());String studentInfo1 = JSON.toJSONString(student);System.out.println("studentInfo1 = " + studentInfo1);// 序列化空字段String studentInfo2 = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);System.out.println("studentInfo2 = " + studentInfo2);// 序列化字段把值序列化为双引号String studentInfo3 = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);System.out.println("studentInfo3 = " + studentInfo3);// 字段为空的时候 序列化为0String studentInfo4 = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);System.out.println("studentInfo4 = " + studentInfo4);// 序列化 布尔值为null 序列化为falseString studentInfo5 = JSON.toJSONString(student, SerializerFeature.WriteNullBooleanAsFalse);System.out.println("studentInfo5 = " + studentInfo5);// 序列化日期String studentInfo6 = JSON.toJSONString(student, SerializerFeature.WriteDateUseDateFormat);System.out.println("studentInfo6 = " + studentInfo6);// 格式化字符串可以接收多个String s = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero,SerializerFeature.WriteNullBooleanAsFalse,SerializerFeature.PrettyFormat);System.out.println("s = " + s);}

在这里插入图片描述

6、JSONField注解的使用

1、注解
# 若属性是私有的,必须有set方法,否则无法序列化、1.JSONField可以作用于get/set方法上面2.配置在字段上面
2、作用于字段上面
    @JSONField(name = "username")private String userName;@Testpublic void test5(){Student student = new Student();student.setUserName("范浩然");student.setClassName("高三一班");String studentInfo = JSON.toJSONString(student);System.out.println(studentInfo);}

在这里插入图片描述

3、格式化日期时间
#  使用JSONField格式化日期时间
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")private Date createTime;@Testpublic void test6(){Student student = new Student();// 赋值时间数据student.setCreateTime(new Date());// 转为JSON字符串String studentInfo = JSON.toJSONString(student);System.out.println("studentInfo = " + studentInfo);}

在这里插入图片描述

4、指定字段不序列化
# 可以指定某些字段不序列化1.serialize = false/deserialize
    /*** 指定年龄这个字段不序列化*/@JSONField(serialize = false)private Integer age;@Testpublic void test7(){Student student = new Student();// 虽然给年龄赋值了 但是指定了年龄不序列化 所以结果中年龄只有姓名student.setAge(32);student.setUserName("张三");String studentInfo = JSON.toJSONString(student);System.out.println("studentInfo = " + studentInfo);}

在这里插入图片描述

5、指定字段顺序
# 可以指定某些字段的一个序列化的顺序1.ordinal
    @JSONField(name = "username",ordinal = 1)private String userName;@JSONField(format = "yyyy-MM-dd HH:mm:ss",ordinal = 0)private Date createTime;// 首先序列化 创建时间 在序列化姓名@Testpublic void test8(){Student student = new Student();student.setUserName("范浩然");student.setCreateTime(new Date());String studentInfo = JSON.toJSONString(student);System.out.println("studentInfo = " + studentInfo);}

在这里插入图片描述

6、自定义序列化内容
# 在fastjson 1.2.16版本之后,JSONField支持新的定制化配置serializeUsing,可以单独对某个类的某个属性定制序列化、反序列化。

指定自定义序列化的内容

    /*** 指定自定义序列化字段*/@JSONField(serializeUsing = StudentTypeSerializable.class)private Boolean status;

创建实现序列化内容的类

/*** @author hrFan* @version 1.0* @description: 自定义序列化内容* @date 2022/5/9 星期一*/
public class StudentTypeSerializable implements ObjectSerializer {/**** @param serializer 序列化器* @param object 字段的值* @param fieldName 字段的名称* @param fieldType 字段的类型* @param features 特征* @throws IOException*/@Overridepublic void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {// 获取字段的值Boolean isStatus = (Boolean) object;// 判断字段的值String text = "";if (isStatus = false){text  = "未启用";}else {text = "已启用";}// 进行序列化serializer.write(text);}
}

测试

    @Testpublic void test9(){Student student = new Student();// 设置字段的值student.setStatus(false);String studentInfo = JSON.toJSONString(student);System.out.println("studentInfo = " + studentInfo);}

在这里插入图片描述

7、自定义反序列化内容

指定反序列化字段

    /*** 指定自定义序列化字段*/@JSONField(deserializeUsing = StudentTypeDeSerializable.class)private Boolean status;

创建反序列化内容的类

/*** @author hrFan* @version 1.0* @description: 自定义序列化内容* @date 2022/5/9 星期一*/
public class StudentTypeDeSerializable implements ObjectDeserializer {/**** @param parser Json解析器* @param type 字段类型* @param fieldName 字段名称* @return 反序列化完成的内容*/@Overridepublic Boolean deserialze(DefaultJSONParser parser, Type type, Object fieldName) {String isUse = "已启用";// 获取反序列化的值String status = parser.getLexer().stringVal();Boolean b = false;if (isUse.equals(status)){b = true;}// 返回字段的类型信息return b;}@Overridepublic int getFastMatchToken() {return 0;}
}

测试

    @Testpublic void test10(){// 自定义序列化的内容String studentInfo = "{\"status\":\"已启用\"}";Student student = JSON.parseObject(studentInfo, Student.class);System.out.println("student = " + student);}

在这里插入图片描述

3、String字符串操作

1、isBlank(判断字符串是否为空)

# isBlank 空格是非空1.包含的有空串("")、空白符(空格"","  ",制表符"\t",回车符"\r","\n"等)以及null值;
    @Testpublic void test1(){// 如果为空 返回true 不为空返回falseSystem.out.println("空格 : " + StringUtils.isBlank(" "));System.out.println("字符 : " + StringUtils.isBlank("s"));System.out.println("制表位 : " + StringUtils.isBlank("\t"));}

在这里插入图片描述

2、remove(移除字符)

 # 移除单个字符,也可以是字符串StringUtils.remove(String str, char remove)StringUtils.remove(String str, String remove);# 移除开头/结尾匹配的字符序列StringUtils.removeStart(String str, String remove);StringUtils.removeStartIgnoreCase(String str, String remove);StringUtils.removeEnd(String str, String remove);StringUtils.removeEndIgnoreCase(String str, String remove);
1、移除单个字符串
    @Testpublic void test2(){String str = "test";// 第一个参数 操作的字符串// 第二个参数 匹配删除的字符String afterStr = StringUtils.remove(str, "t");// 原字符串并不会被修改 System.out.println("afterStr = " + afterStr);}

在这里插入图片描述

2、移除匹配的字符串
    @Testpublic void test3(){String str = "testtesttestest";// 移除某个字符串String afterStr = StringUtils.remove(str, "es");System.out.println("afterStr = " + afterStr);}

在这里插入图片描述

3、移除首尾匹配的字符串
@Testpublic void test4(){// 移除开头或者结尾匹配的字符序列String str = "ABCDEFG";String afterStr1 = StringUtils.removeStart(str, "ab");String afterStr2 = StringUtils.removeEnd(str, "fg");System.out.println("-------------------------------------------------");// 删除忽略大小写String afterStr3 = StringUtils.removeStartIgnoreCase(str, "ab");String afterStr4 = StringUtils.removeEndIgnoreCase(str, "fg");System.out.println("afterStr1 = " + afterStr1);System.out.println("afterStr2 = " + afterStr2);System.out.println("afterStr3 = " + afterStr3);System.out.println("afterStr4 = " + afterStr4);}

在这里插入图片描述

3、trim(去除首尾空白)

    @Testpublic void test5(){String str = " demo ";System.out.println("str = " + str);// 去除首尾空白的字符String afterStr = StringUtils.trim(str);System.out.println("afterStr = " + afterStr);}

在这里插入图片描述

4、strip(去掉首尾匹配字符)

    @Testpublic void test6(){String str = "[demoomed]";System.out.println("str = " + str);// 去除首尾的[]// 应用的比较广泛String stripStr = StringUtils.strip(str, "[]");System.out.println("stripStr = " + stripStr);}

在这里插入图片描述

5、replace(替换)

# 注意若被替换的字符串为null,或者被替换的字符或字符序列为null,又或者替换的字符或字符序列为null此次替换都会被忽略,返回原字符串;
# 替换单个字符或字符序列 replace(String text, String searchString, String replacement);replace(String text, String searchString, String replacement, int max);max是指替换最大次数,0:不替换,-1:全部替换replaceChars(String str, char searchChar, char replaceChar);replaceChars(String str, String searchChars, String replaceChars);
# 只会替换一次,后面即使匹配也不替换replaceOnce(String text, String searchString, String replacement);
# 指定位置进行字符序列替换,从start索引处开始(包含)到end-1索引处为止进行替换overlay(String str,String overlay,int start,int end);    
# 可以同时替换多个字符序列,一一对应但被替换和替换的字符序列的个数应该对应,否则会报IllegalArgumentExceptionreplaceEach(String text, String[] searchList, String[] replacementList);StringUtils.replaceEach("test", new String[] { "t", "e" }, new String[] { "T", "E" });StringUtils.replaceEach("test", null, new String[] { "T", "E" });test (存在null,不进行替换)
# IllegalArgumentException (被替换和替换的个数不对应)	     StringUtils.replaceEach("test", new String[] { "t", "e" }, new String[] { "T", "E", "X" }); 
# 循环替换--了解即可replaceEachRepeatedly(String text, String[] searchList, String[]replacementList);StringUtils.replaceEachRepeatedly("test", new String[] { "e", "E" }, new String[] { "E", "Y" }); tYst (e被替换为E,E又被替换为Y)
1、(replace)替换单个字符或者字符序列
    @Testpublic void test7(){String str = "abc123abc";// 第一个参数 源字符串 第二个参数 需要替换的字符 三个参数 需要替换的字符串// 第四个参数 max是指替换最大次数,0:不替换,-1:全部替换String replaceStr1 = StringUtils.replace(str, "abc", "000");String replaceStr2 = StringUtils.replace(str, "abc", "000",1);// 当max设置为1时等价于只替换一次String replaceStr3 = StringUtils.replaceOnce(str, "abc", "000");System.out.println("replaceStr1 = " + replaceStr1);System.out.println("replaceStr2 = " + replaceStr2);System.out.println("replaceStr3 = " + replaceStr3);}

在这里插入图片描述

2、(overlay)替换指定位置字符串序列
    @Testpublic void test8(){String str = "system is very good";// 指定位置开始替换 直接替换除了首尾的字符String afterStr = StringUtils.overlay(str, "--------", 1, str.length()-1);System.out.println("afterStr = " + afterStr);}

在这里插入图片描述

3、(replaceEach)批量替换
    @Testpublic void test9(){String str = "abcdefgabcdefg";// 替换多个字符序列String [] arr1 = { "a", "b"};String [] arr2 = { "A", "B"};// 注意 替换的个数一定要一致不然报异常String afterStr = StringUtils.replaceEach(str, arr1, arr2);System.out.println("afterStr = " + afterStr);}

在这里插入图片描述

6、(reverse)反转

    @Testpublic void test10(){String str1 = "123456789";String str2 = "1-2-3-4-5-6-7-8-9";// 字符串反转String afterStr1 = StringUtils.reverse(str1);// 根据分隔符反转String afterStr2 = StringUtils.reverseDelimited(str2,'-');System.out.println("afterStr1 = " + afterStr1);System.out.println("afterStr2 = " + afterStr2);}

在这里插入图片描述

7、(substring)截取

# 截取1.从左到对右下标默认从0开始,从右往左下标默认从-1开始
    @Testpublic void test11(){String str1 = "0123456789";// 从第五个位置开始截取String afterBefore1 = StringUtils.substring(str1, 5);// 指定截取的开始位置和结束位置String afterBefore2 = StringUtils.substring(str1, 0, 5);System.out.println("afterBefore1 = " + afterBefore1);System.out.println("afterBefore2 = " + afterBefore2);}

在这里插入图片描述

# 根据指定的分隔符进行截取
# substringAfter从分隔符第一次出现的位置向后截取
# substringBefore从分隔符第一次出现的位置向前截取
# substringAfterLast从分隔符最后一次出现的位置向后截取
# substringBeforeLast从分隔符最后一次出现的位置向前截取
# substringBetween截取指定标记字符之间的字符序列
    @Testpublic void test12(){String str = "ab-cd-ef-gh-ij-kl-mn-op-qr";// 从分隔符第一次出现的位置向后截取String afterStr1 = StringUtils.substringAfter(str, "-");String afterStr2 = StringUtils.substringBefore(str, "-");System.out.println("afterStr1 = " + afterStr1);System.out.println("afterStr2 = " + afterStr2);System.out.println("------------------------------------------------");// 从分隔符最后一次出现的位置向前或者向后截取String afterStr3 = StringUtils.substringAfterLast(str, "-");String afterStr4 = StringUtils.substringBeforeLast(str, "-");System.out.println("afterStr3 = " + afterStr3);System.out.println("afterStr4 = " + afterStr4);System.out.println("------------------------------------------------");// 截取指定标记字符之间的序列String str2 = "A00000000000000000000000000000000000000A";String afterStr5 = StringUtils.substringBetween(str2, "A");System.out.println("afterStr5 = " + afterStr5);}

在这里插入图片描述

8、(containsOnly)包含

# 包含判断字符串中的字符是否都是出自所指定的字符数组或字符串   StringUtils.containsOnly(str, validChars);需要注意的是:前面的字符是否都出自后面的参数中,也是拆为数组来比较
    @Testpublic void test13(){String str = "Happiness is a way station between too much and too little";// 注意 他是拆分成字符数组比较的(所以只要有to这个字符串序列 就会匹配成功) 注意顺序// 判断字符序列中是否包含一个字符或一个字符序列// str中是否包含to这个字符序列boolean isExistTo1 = StringUtils.containsOnly("to",str);boolean isExistTo2 = StringUtils.containsOnly("ato",str);System.out.println("isExistToo1 = " + isExistTo1);System.out.println("isExistToo2 = " + isExistTo2);// 用于检测字符串是否以指定的前缀开始boolean isHappinessPrefix = StringUtils.startsWith(str,"Happiness");System.out.println("isHappinessPrefix = " + isHappinessPrefix);}

在这里插入图片描述

9、(indexOf)查找字符索引

# indexOf返回在字符串中第一次出现的位置,如果没有在字符串中出现,则返回-1
# lastIndexOf返回在字符串中最后一次出现的索引
# indexOfAny返回字符数组第一次出现在字符串中的位置
# indexOfAnyBut子字符串与主字符串不匹配部分的位置StringUtils.indexOfAnyBut("sdsfhhl0","h");//结果是0StringUtils.indexOfAnyBut("sdsfhhl0","s");//结果是1StringUtils.indexOfAnyBut("aa","aa");//结果是-1
# indexOfDifference统计两个字符串共有的字符个数
# difference去掉两个字符串相同的字符以后的字符串
    @Testpublic void test14(){String str = "hello,world";// 查找字符出现的位置int index1 = StringUtils.indexOf(str, "l");System.out.println("index1 = " + index1);// 查找字符最后出现的索引位置int index2 = StringUtils.lastIndexOf(str,"l");System.out.println("index2 = " + index2);// 查找字符串第一次出现的索引的位置int index3 = StringUtils.indexOfAny(str, "l");System.out.println("index3 = " + index3);// 查找字符和字符串不匹配的开始位置int index4 = StringUtils.indexOfAnyBut(str,"we");System.out.println("index4 = " + index4);// 统计两个字符串开始共有的字符个数int number = StringUtils.indexOfDifference(str,"hello");System.out.println("number = " + number);// 去除两个字符串开始共有的部门String afterStr = StringUtils.difference(str,"hello,java");System.out.println("afterStr = " + afterStr);}

在这里插入图片描述

10、首字母大小写

# capitalize首字母大写
# uncapitalize首字母小写
    @Testpublic void test15(){String str = "fhr";System.out.println("str = " + str);// 首字母变为大写String capitalize = StringUtils.capitalize(str);System.out.println("首字母大写 = " + capitalize);// 首字母变为小写String uncapitalize = StringUtils.uncapitalize(capitalize);System.out.println("首字母小写 = " + uncapitalize);// 全部变为大写String upperCase = StringUtils.upperCase(capitalize);System.out.println("全部变为大写 = " + upperCase);// 全部变为小写String lowerCase = StringUtils.lowerCase(upperCase);System.out.println("全部变为小写 = " + lowerCase);}

在这里插入图片描述

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

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

相关文章

第100讲:MHA+Atlas实现MySQL主从复制读写分离分布式集群

文章目录 1.Atlas读写分离简介2.搭建MHA高可用MySQL主从复制集群3.部署配置Atlas读写分离中间件3.1.安装Atlas读写分离中间件3.2.配置读写分离3.3.启动Atlas读写分离 4.读写分离集群测试5.生产环境中创建一个用户通过Atlas使用6.Atlas通过管理接口实现在线管理7.Atlas自动分表 …

Linux下解压tar.xz文件的命令

tar -c: 建立压缩档案-x&#xff1a;解压-t&#xff1a;查看内容-r&#xff1a;向压缩归档文件末尾追加文件-u&#xff1a;更新原压缩包中的文件 ------------------------------------------ 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的…

【 Maven 】花式玩法之多模块项目

目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目&#xff0c;并且想将这些模块发布到不同的仓库或目标位置&…

拿捏c语言指针(下)

前言 此篇讲解的主要是函数与指针的那些事~ 书接上回 拿捏c语言指针&#xff08;上&#xff09;和 拿捏c语言指针&#xff08;中&#xff09; ​​​​​​没有看的小伙伴要抓紧喽~ 欢迎关注​​个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#x…

Cache-M语言 通用工具类

链接&#xff1a;M语言通用工具类

MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案

项目场景 有时候&#xff0c;遇到数据库重复数据&#xff0c;需要将数据进行分组&#xff0c;并取出其中一条来展示&#xff0c;这时就需要用到group by语句。 但是&#xff0c;如果mysql是高版本&#xff0c;当执行group by时&#xff0c;select的字段不属于group by的字段的…

设计模式——观察者模式

定义&#xff1a; 定义一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;其所有依赖者都会收到通知并自动更新。 作用&#xff1a; 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通…

MySQL 基础知识(十)之 MySQL 架构

目录 1 MySQL 架构说明 2 连接层 3 核心业务层 3.1 查询缓存 3.2 解析器 3.3 优化器 3.4 执行器 4 存储引擎层 5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层&#xff1a; 连接层&#xff1a;负责跟客户…

今日必读的9篇大模型论文

1.来自普林斯顿大学的研究团队及其合作者提出了 TutorEval 和 TutorChat。TutorEval 是首个结合了长上下文、自由形式生成和跨学科科学知识的基准&#xff0c;它有助于衡量 LMs 作为科学助手在现实生活中的可用性。TutorChat 是一个包含 80000 篇关于教科书的长篇合成对话的数据…

Mybatis | 初识Mybatis

初识Mybatis 目录: 初识Mybatis什么是Mybatis&#xff1f;Hibernate 和 MyBatis的区别&#xff1f;Mybatis的下载和使用Mybatis的工作原理 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正在努力学习、努力敲代码中! 让我们一起继续努力学习&#…

第3.1章:StarRocks数据导入——Insert into 同步模式

一、概述 在StarRocks中&#xff0c;insert的语法和mysql等数据库的语法类似&#xff0c;并且每次insert into操作都是一次完整的导入事务。 主要的 insertInto 命令包含以下两种&#xff1a; insert into tbl select ...insert into tbl (col1, col2, ...) values (1, 2, ...…

2024-02-21(Spark)

1.Spark程序中的相关端口 4040&#xff1a;是一个运行的Application在运行的过程中临时绑定的端口&#xff0c;用以查看当前任务的状态。4040被占用会顺延到4041&#xff0c;4042等。4040是一个临时端口&#xff0c;当前程序运行完成后&#xff0c;4040就会被注销。 4040和Dr…

防火墙——计算机网络

前述基于密码的安全机制不能有效解决以下安全问题&#xff1a; 用户入侵&#xff1a; 利用系统漏洞进行未授权登录&#xff1b; 授权用户非法获取更高级别权限等。 软件入侵&#xff1a; 通过网络传播病毒、蠕虫和特洛伊木马。 拒绝服务攻击等。 解决方法&#xff1a; 防火墙&a…

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023 摘要关键词 1 资料和方法1. 1 研究区域与观测数据1. 2 机器学习模型构建与验证方法1. 3 SHAP 可解释性方法 2 主要结果2. 1 不同模型的模拟性能和泛化能力2. 2 不同模型的可解释性分析2. 3 5 km 分辨率格点蒸散发…

Linux内核解读

来自鹅厂架构师 作者&#xff1a;aurelianliu 工作过程中遇到的调度、内存、文件、网络等可以参考。 1.os运行态 X86架构&#xff0c;用户态运行在ring3&#xff0c;内核态运行在ring0&#xff0c;两个特权等级。 &#xff08;1&#xff09;内核、一些特权指令&#xff0c;例…

强化学习(GPS)

GPS——Guided Policy Search引导策略搜索 GPS目前被作为基础算法广泛应用于各种强化学习任务中&#xff0c;其出发点在于纯粹的策略梯度方法在更新参数时不会用到环境模型因而属于一种无模型强化学习算法。由于没有利用任何环境的内在属性&#xff0c;使得其训练只能完全依靠…

【开源】在线办公系统 JAVA+Vue.js+SpringBoot+MySQL

目录 1 功能模块1.1 员工管理模块1.2 邮件管理模块1.3 人事档案模块1.4 公告管理模块 2 系统展示3 核心代码3.1 查询用户3.2 导入用户3.3 新增公告 4 免责声明 本文项目编号&#xff1a; T 001 。 \color{red}{本文项目编号&#xff1a;T001。} 本文项目编号&#xff1a;T001。…

Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

Docker Compose中映射卷&#xff08;Volumes&#xff09;的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系&#xff1a; Docker Compose映射卷的作用 在Docker Compose中&#xff0c;卷&#xff08;Volumes&#xff09;用于数据持久化和数据共享…

沁恒CH32V30X学习笔记11---使用外部时钟模式2采集脉冲计数

使用外部时钟模式2采集脉冲计数 使用外部触发模式 2 能在外部时钟引脚输入的每一个上升沿或下降沿计数。将 ECE 位置位时,将使用外部时钟源模式 2。使用外部时钟源模式 2 时,ETRF 被选定为 CK_PSC。ETR 引脚经过可选的反相器(ETP),分频器(ETPS)后成为 ETRP,再经过滤波…

Excel练习:日历

Excel练习&#xff1a;日历 ‍ 题目&#xff1a;制作日历 ‍ ​​ 用rows和columns函数计算日期单元格偏移量 一个公式填充所有日期单元格 ​​ ‍