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

news2024/11/23 3:22:09

JSON字符串操作

1、创建配置环境

# 引入测试包
	testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.2.6.RELEASE'
# 创建测试类
	@RunWith(SpringRunner.class)
	@SpringBootTest
	public class JsonTest {
    @Test
    public 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对象)

        @Test
        public 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);
        }
    

    在这里插入图片描述

        @Test
        public 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);
        }
    

    在这里插入图片描述

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

    在这里插入图片描述

4、反序列化

    @Test
    public 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字符串转为集合 转换后集合泛型的class
        String str2 = "{\"1\":{\"age\":12,\"className\":\"初二1班\",\"userName\":\"范浩然\"}}";
        // 第一个参数 字符串
        // 直接进行反序列化 Map集合是没有泛型的,没有泛型的集合是不安全的,转换后的集合必须具有泛型,
        // 调用parseObject传递参数,TypeReference类型,在TypeReference类的泛型中,传递转后的Map集合
       Map<String,Student> map = JSON.parseObject(str2,new TypeReference<Map<String,Student>>(){});
        // 遍历Map
        map.entrySet().stream().forEach(item->{
            // 遍历键值对
            System.out.println("key:"+item.getKey());
            System.out.println("value:"+item.getValue());
        });

    }

在这里插入图片描述

5、枚举介绍

 @Test
    public 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);
        // 字段为空的时候 序列化为0
        String studentInfo4 = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
        System.out.println("studentInfo4 = " + studentInfo4);
        // 序列化 布尔值为null 序列化为false
        String 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;

    @Test
    public 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;


    @Test
    public 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;
    
    @Test
    public 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;

		// 首先序列化 创建时间 在序列化姓名
    @Test
    public 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
     */
    @Override
    public 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);
    }
}

测试

    @Test
    public 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 反序列化完成的内容
     */
    @Override
    public 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;
    }

    @Override
    public int getFastMatchToken() {
        return 0;
    }
}

测试

    @Test
    public 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值;
    @Test
    public void test1(){
        // 如果为空 返回true 不为空返回false
        System.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、移除单个字符串
    @Test
    public void test2(){
        String str = "test";
        // 第一个参数 操作的字符串
        // 第二个参数 匹配删除的字符
        String afterStr = StringUtils.remove(str, "t");
        // 原字符串并不会被修改 
        System.out.println("afterStr = " + afterStr);
    }

在这里插入图片描述

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

在这里插入图片描述

3、移除首尾匹配的字符串

    @Test
    public 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(去除首尾空白)

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

在这里插入图片描述

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

    @Test
    public 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);    
# 可以同时替换多个字符序列,一一对应但被替换和替换的字符序列的个数应该对应,否则会报IllegalArgumentException
	replaceEach(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)替换单个字符或者字符序列
    @Test
    public 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)替换指定位置字符串序列
    @Test
    public void test8(){
        String str = "system is very good";
        // 指定位置开始替换 直接替换除了首尾的字符
        String afterStr = StringUtils.overlay(str, "--------", 1, str.length()-1);
        System.out.println("afterStr = " + afterStr);
    }

在这里插入图片描述

3、(replaceEach)批量替换
    @Test
    public 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)反转

    @Test
    public 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开始
    @Test
    public 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
	截取指定标记字符之间的字符序列
    @Test
    public 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);
	需要注意的是:前面的字符是否都出自后面的参数中,也是拆为数组来比较
    @Test
    public 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");//结果是0
	StringUtils.indexOfAnyBut("sdsfhhl0","s");//结果是1
	StringUtils.indexOfAnyBut("aa","aa");//结果是-1
# indexOfDifference
	统计两个字符串共有的字符个数
# difference
	去掉两个字符串相同的字符以后的字符串

    @Test
    public 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
	首字母小写
    @Test
    public 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.coloradmin.cn/o/1461026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

13.Qt 文件的读和写,样式表文件的读用

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 ①浏览按键 ②保存按键 ③加载样式按键 参考&#xff1a; 前言&#xff1a; 上一篇文章说明了如何弹窗选取文件并在Qlabel中显示文件内容 12.QT文件对话框 文件的弹窗选择-QFileDialog 这篇…

Gitlab CI 报错: /usr/bin/bash: line 137: kubectl: command not found

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

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

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

机器学习基础(四)非监督学习的进阶探索

导语&#xff1a;上一节我们详细探索监督学习的进阶应用&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;三&#xff09;监督学习的进阶探索-CSDN博客文章浏览阅读296次&#xff0c;点赞13次&#xff0c;收藏11次。监督学习作为机器学习的一个主要分支&#xff0c;…

34.仿简道云公式函数实战-数学函数-PRODUCT

1. PRODUCT函数 函数使所有以参数形式给出的数字相乘并返回乘积。 2. 函数用法 PRODUCT(number1, [number2], …) 3. 函数示例 PRODUCT(数量, 单价) 4. 代码实战 首先我们在function包下创建math包&#xff0c;在math包下创建ProductFunction类&#xff0c;代码如下&…

x86与arm架构区别

前言 我们经常讨论的芯片的X86架构和ARM架构&#xff0c;那么他们的的区别什么呢&#xff1f;其实俩种都是主流的两种计算机处理器架构&#xff08;CPU&#xff09;架构&#xff0c;X86架构的CPU是PC服务器行业的老大&#xff0c;ARM架构的CPU则是移动端的老大。X86架构和arm架…

如何在Shopee 上选择热销商品?shopee应该在哪选品

在如今激烈竞争的电商市场中&#xff0c;如何通过精准的选品策略提升在Shopee平台上的销售业绩成为卖家们关注的焦点。Shopee作为一个蓬勃发展的电商平台&#xff0c;提供了多种资源和工具来帮助卖家做出明智的选品决策。通过深入了解这些渠道和策略&#xff0c;卖家们可以更好…

云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

Redis 有哪些架构模式?讲讲各自的特点

单机版模式 特点&#xff1a;简单 问题&#xff1a; 1、内存容量有限 2、处理能力有限 3、无法高可用。 主从复制 Redis 的复制&#xff08;replication&#xff09;功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品&#xff0c;其中被复制的服务器为主服…

Linux基础(vim、常用指令介绍)

Linux基础 1、目录结构2、vi和vim3、常用指令运行级别找回密码帮助指令时间日期指令搜索查找文件目录操作磁盘管理指令压缩和解压缩 4、组管理和组权限用户操作指令权限 1、目录结构 Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录“/”&a…

挑战杯 基于LSTM的天气预测 - 时间序列预测

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 机器学习大数据分析项目 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/po…

Vue状态管理库-Pinia

一、Pinia是什么&#xff1f; Pinia 是 Vue 的专属状态管理库&#xff0c;它允许支持跨组件或页面共享状态&#xff0c;即共享数据&#xff0c;他的初始设计目的是设计一个支持组合式API的 Vue 状态管理库&#xff08;因为vue3一个很大的改变就是组合式API&#xff09;,当然这…

设计师必看!哪个云渲染平台便宜?

渲染100 溜云库 渲云 平均价格 9.27 9.37 9.51 Camera007 5.81 6.1 4.7 Camera008 18.66 17…

Laravel02 路由基本概念和用法 给视图传递请求参数

Laravel02 路由基本概念和用法 1. 路由的基本概念2. 给视图传递请求参数 1. 路由的基本概念 routes文件夹下的web.php是用来定义路由规则的。 自己定义一个路径 2. 给视图传递请求参数 在laravel里使用一个辅助函数request来快速获取请求参数

Socket通信---Python发送数据给C++程序

0. Problems 很多时候实现某种功能&#xff0c;需要在不同进程间发送数据&#xff0c;目前有几种主流的方法&#xff0c;如 让python和C/C程序互相发送数据&#xff0c;其实有几种方法&#xff1a; 共享内存共享文件Socket通信 在这里只提供Socket通信的例程&#xff0c;共享…

C语言读取 ini 配置文件,修改/添加键值对

C语言读取 ini 配置文件&#xff0c;修改/添加键值对 C语言读取 ini 配置文件&#xff0c;对section中的键值对进行修改/添加&#xff0c;如果section不存在&#xff0c;则在末尾将新的section/key/value 添加进去。 一、了解什么是INI文件&#xff1f; ini 文件是Initializ…

2022蓝帽杯取证初赛

检材&#xff1a;https://pan.baidu.com/s/1ibOdxyCWeC5x0DQKjwcz7w?pwdvg6g 目录 手机取证1、627604C2-C586-48C1-AA16-FF33C3022159.PNG图片的分辨率是&#xff1f;&#xff08;答案参考格式&#xff1a;19201080&#xff09;2、姜总的快递单号是多少&#xff1f;&#xff0…

【2024软件测试面试必会技能】Jmeter_性能测试(4):性能测试脚本的优化

性能测试脚本的优化 以PHP论坛为例&#xff1a;http://47.107.178.45/phpwind/ 根据上一篇的性能测试(3&#xff09;的脚本进行优化&#xff1b;见下图&#xff1a; 如上图中&#xff0c;把发帖和回帖的事务添加到随机控制器中&#xff0c;登录操作添加到仅一次控制器中&…

yolov5转换成TensorRT推理过程笔记

笔记内容来自 B站 手写AI 一、用硬代码实现 GitHub - wang-xinyu/tensorrtx: Implementation of popular deep learning networks with TensorRT network definition API 安装python、cuda11.2、cudnn对应cuda11.2软件 1、在yolov5-master下训练完成后生成best.pt文件(训练时…

Vue模版语法之属性绑定v-bind

双大括号不能在 HTML 属性中使用。想要响应式地绑定一个属性&#xff0c;应该使用 v-bind 指令 1. 使用v-bind绑定属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>新建页面</title><sc…