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

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.mfbz.cn/a/397924.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IO进程线程day4作业

1、使用多进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;父进程回收子进程的资源 代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//定义两个文件指针FILE *fp1NULL;FILE *fp2NULL;//创…

open3d 点云体素化

open3d 点云体素化 一、算法原理1.从点云到体素化&#xff08;主要函数&#xff09;2.从网格到体素化&#xff08;主要函数&#xff09; 二、代码三、结果1.从点云到体素化2.从网格到体素化 四、相关数据 一、算法原理 点云和三角网格是非常灵活但不规则的几何类型。体素网格是…

Mybatis | 初识Mybatis

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

微信小程序之会议OA个人中心后台交互

目录 获取用户昵称头像和昵称 小程序登录 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties WxConfig WxAuthController 登录-小…

目录的共享与访问的实现

给用户机赋予读取文件的权利 创建文件夹&文件 点击属性–>共享–>共享&#xff08;S&#xff09; 点击添加–》给需要赋权的用户赋予相应的权限–>应用–确定 在赋权的用户机里winR–>‘\’‘IP地址&#xff08;主机&#xff09;’

常用的消息中间件RabbitMQ

目录 一、消息中间件 1、简介 2、作用 3、两种模式 1、P2P模式 2、Pub/Sub模式 4、常用中间件介绍与对比 1、Kafka 2、RabbitMQ 3、RocketMQ RabbitMQ和Kafka的区别 二、RabbiMQ集群 RabbiMQ特点 RabbitMQ模式⼤概分为以下三种: 集群中的基本概念&#xff1a; 集…

Open AI Sora的出现,大大改变ai视频内容生成赛道的格局

前言&#xff1a;在人工智能&#xff08;AI&#xff09;技术的迅猛发展下&#xff0c;我们见证了无数令人惊叹的创新&#xff0c;它们正逐渐重塑我们对可能性的认知。在这一浪潮中&#xff0c;OpenAI 的最新力作——Sora模型&#xff0c;以其在视频生成领域的革命性突破&#x…

mysql调优实战

EXPLAIN执行分析 id:值越大越先执行相同时&#xff0c;由上向下执行。 possible_key: 可能走索引的键。 key&#xff1a;真正走索引的键rows:根据表统计信息及索引选用情况&#xff0c;大致估算出找到所需的记录所需要读取的行数&#xff0c;也就是说&#xff0c;用的越少越好 …

动态获取 微信小程序appid / 自定义启动命令

官网&#xff1a;https://uniapp.dcloud.net.cn/collocation/package.html#%E7%94%A8%E6%B3%95 小程序开发完成之后需要一套代码多个小程序使用&#xff0c;每次都需要在manifest.json文件中手动修改&#xff0c;大大增加了开发的复杂度。 官网&#xff1a;https://uniapp.dcl…

市场复盘总结 20240220

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 19% 最常用…

Android---Retrofit实现网络请求:Java 版

简介 在 Android 开发中&#xff0c;网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库&#xff0c;能够简化开发流程&#xff0c;提供高效的网络请求能力。 Retrofit 是一个建立在 OkHttp 基础之上的网络请求库&#xff0c;能够将我们定义的 Java 接口转化为…

【Vue3】路由传参的几种方式

路由导航有两种方式&#xff0c;分别是&#xff1a;声明式导航 和 编程式导航 参数分为query参数和params参数两种 声明式导航 query参数 一、路径字符串拼接(不推荐) 1.传参 在路由路径后直接拼接?参数名:参数值 &#xff0c;多组参数间使用&分隔。 <RouterLink …

OpenGL学习——17.模型

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

算法——数值算法——牛顿迭代法

目录 牛顿迭代法 一、1021: [编程入门]迭代法求平方根 牛顿迭代法 迭代法&#xff08;Iteration&#xff09;是一种通过反复递推计算来逼近解的方法。而牛顿迭代法&#xff08;Newtons method&#xff09;则是一种特定的迭代法&#xff0c;用于求解方程或函数的根、最小值、最…

【软考中级备考笔记】计算机体系结构

计算机体系结构 2月19日 – 天气&#xff1a;阴转小雪 1. 冯诺依曼计算机体系结构 冯诺依曼将计算机分为了五大部分&#xff0c;分别是&#xff1a; 控制器&#xff1a;主要负责协调指令到执行运算器&#xff1a;负责算数和逻辑运算存储器&#xff1a;负责存储在指令执行过程…

Javaweb之SpringBootWeb案例之切入点表达式的详细解析

3.3 切入点表达式 从AOP的入门程序到现在&#xff0c;我们一直都在使用切入点表达式来描述切入点。下面我们就来详细的介绍一下切入点表达式的具体写法。 切入点表达式&#xff1a; 描述切入点方法的一种表达式 作用&#xff1a;主要用来决定项目中的哪些方法需要加入通知 …

SOPHON算能科技新版SDK环境配置以及C++ demo使用过程

目录 1 SDK大包下载 2 获取SDK中的库文件和头文件 2.1 注意事项 2.2 交叉编译环境搭建 2.2.1 首先安装工具链 2.2.2 解压sophon-img包里的libsophon_soc__aarch64.tar.gz&#xff0c;将lib和include的所有内容拷贝到soc-sdk文件夹 2.2.3 解压sophon-mw包里的sophon-mw-s…

【Simulink系列】——动态系统仿真 之 连续系统线性连续系统

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 一、连续系统定义 连续系统输出在时间上连续变化&#xff0c;而非间隔采样取值&#xff0c;满足以下条件&#xff1a; ①输出连续变化&#xff0c;变化的间隔…

java中实体pojo对于布尔类型属性命名尽量别以is开头,否则 fastjson可能会导致属性读取不到

假如我们有一个场景&#xff0c;就是需要将一个对象以字符串的形式&#xff0c;也就是jsonString存到一个地方&#xff0c;比如mysql&#xff0c;或者redis的String结构。现在有一个实体&#xff0c;我们自己创建的&#xff0c;叫做CusPojo.java 有两个属性是布尔类型的&#x…

删除有序数组中的重复项 II

题目链接 删除有序数组中的重复项 II 题目描述 注意点 nums 已按升序排列1 < nums.length < 30000原地删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次返回删除后数组的新长度 解答思路 因为数组是按升序排列的&#xff0c;可以使用将某个区间…
最新文章