java常用API异常

1.包装类

1.1 基本类型包装类(记忆)

  • 基本类型包装类的作用

    将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

    常用的操作之一:用于基本数据类型与字符串之间的转换

  • 基本类型对应的包装类

    基本数据类型包装类
    byteByte
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble
    charCharacter
    booleanBoolean

1.2 Integer类(应用)

  • Integer类概述

    包装一个对象中的原始类型 int 的值

  • Integer类构造方法

    方法名说明
    public Integer(int value)根据 int 值创建 Integer 对象(过时)
    public Integer(String s)根据 String 值创建 Integer 对象(过时)
    public static Integer valueOf(int i)返回表示指定的 int 值的 Integer 实例
    public static Integer valueOf(String s)返回一个保存指定值的 Integer 对象 String
  • 示例代码

    public class IntegerDemo {public static void main(String[] args) {//public Integer(int value):根据 int 值创建 Integer 对象(过时)Integer i1 = new Integer(100);System.out.println(i1);
    ​//public Integer(String s):根据 String 值创建 Integer 对象(过时)Integer i2 = new Integer("100");
    //        Integer i2 = new Integer("abc"); //NumberFormatExceptionSystem.out.println(i2);System.out.println("--------");
    ​//public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 实例Integer i3 = Integer.valueOf(100);System.out.println(i3);
    ​//public static Integer valueOf(String s):返回一个保存指定值的Integer对象 StringInteger i4 = Integer.valueOf("100");System.out.println(i4);}
    }

1.3 自动拆箱和自动装箱(理解)

  • 自动装箱

    把基本数据类型转换为对应的包装类类型

  • 自动拆箱

    把包装类类型转换为对应的基本数据类型

  • 示例代码

    Integer i = 100;  // 自动装箱
    i += 200;         // i = i + 200;  i + 200 自动拆箱;i = i + 200; 是自动装箱

1.4 int和String类型的相互转换(记忆)

  • int转换为String

    • 转换方式

      • 方式一:直接在数字后加一个空字符串

      • 方式二:通过String类静态方法valueOf()

    • 示例代码

      public class IntegerDemo {public static void main(String[] args) {//int --- Stringint number = 100;//方式1String s1 = number + "";System.out.println(s1);//方式2//public static String valueOf(int i)String s2 = String.valueOf(number);System.out.println(s2);System.out.println("--------");}
      }

  • String转换为int

    • 转换方式

      • 方式一:先将字符串数字转成Integer,再调用valueOf()方法

      • 方式二:通过Integer静态方法parseInt()进行转换

    • 示例代码

      public class IntegerDemo {public static void main(String[] args) {//String --- intString s = "100";//方式1:String --- Integer --- intInteger i = Integer.valueOf(s);//public int intValue()int x = i.intValue();System.out.println(x);//方式2//public static int parseInt(String s)int y = Integer.parseInt(s);System.out.println(y);}
      }

1.5 字符串数据排序案例(应用)

  • 案例需求

    有一个字符串:“91 27 46 38 50”,请写程序实现最终输出结果是:27 38 46 50 91

  • 代码实现

    public class IntegerTest {public static void main(String[] args) {//定义一个字符串String s = "91 27 46 38 50";
    ​//把字符串中的数字数据存储到一个int类型的数组中String[] strArray = s.split(" ");
    //        for(int i=0; i<strArray.length; i++) {
    //            System.out.println(strArray[i]);
    //        }
    ​//定义一个int数组,把 String[] 数组中的每一个元素存储到 int 数组中int[] arr = new int[strArray.length];for(int i=0; i<arr.length; i++) {arr[i] = Integer.parseInt(strArray[i]);}
    ​//对 int 数组进行排序Arrays.sort(arr);
    ​for(int i=0; i<arr.length; i++){System.out.print(arr[i] + " ");}
    }

2.递归

2.1 递归【应用】

  • 递归的介绍

    • 以编程的角度来看,递归指的是方法定义中调用方法本身的现象

    • 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解

    • 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算

  • 递归的基本使用

    public class MyFactorialDemo2 {public static void main(String[] args) {int sum = getSum(100);System.out.println(sum);}
    ​private static int getSum(int i) {//1- 100之间的和//100 + (1-99之间的和)// 99 + (1- 98之间的和)//....//1//方法的作用: 求 1- i 之间和if(i == 1){return 1;}else{return i + getSum(i -1);}}
    }    

  • 递归的注意事项

    • 递归一定要有出口。否则内存溢出

    • 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出

2.2 递归求阶乘【应用】

  • 案例需求

    用递归求5的阶乘,并把结果在控制台输出

  • 代码实现

    public class DiGuiDemo01 {public static void main(String[] args) {//调用方法int result = jc(5);//输出结果System.out.println("5的阶乘是:" + result);}
    ​//定义一个方法,用于递归求阶乘,参数为一个int类型的变量public static int jc(int n) {//在方法内部判断该变量的值是否是1if(n == 1) {//是:返回1return 1;} else {//不是:返回n*(n-1)!return n*jc(n-1);}}
    }

  • 内存图

3.数组的高级操作

3.1 二分查找 (理解)

  • 二分查找概述

    查找指定元素在数组中的位置时,以前的方式是通过遍历,逐个获取每个元素,看是否是要查找的元素,这种方式当数组元素较多时,查找的效率很低

    二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率

  • 需求

    在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置

  • 实现步骤

    1. 定义两个变量,表示要查找的范围。默认min = 0 ,max = 最大索引

    2. 循环查找,但是min <= max

    3. 计算出mid的值

    4. 判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引

    5. 如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找

    6. 如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找

    7. 当min > max 时,表示要查找的元素在数组中不存在,返回-1.

  • 代码实现

    public class MyBinarySearchDemo {public static void main(String[] args) {int [] arr = {1,2,3,4,5,6,7,8,9,10};int number = 11;
    ​//1,我现在要干嘛? --- 二分查找//2.我干这件事情需要什么? --- 数组 元素//3,我干完了,要不要把结果返回调用者 --- 把索引返回给调用者int index = binarySearchForIndex(arr,number);System.out.println(index);}
    ​private static int binarySearchForIndex(int[] arr, int number) {//1,定义查找的范围int min = 0;int max = arr.length - 1;//2.循环查找 min <= maxwhile(min <= max){//3.计算出中间位置 midint mid = (min + max) >> 1;//mid指向的元素 > numberif(arr[mid] > number){//表示要查找的元素在左边.max = mid -1;}else if(arr[mid] < number){//mid指向的元素 < number//表示要查找的元素在右边.min = mid + 1;}else{//mid指向的元素 == numberreturn mid;}}//如果min大于了max就表示元素不存在,返回-1.return -1;}}

  • 注意事项

    有一个前提条件,数组内的元素一定要按照大小顺序排列,如果没有大小顺序,是不能使用二分查找法的

3.2 冒泡排序 (理解)

  • 冒泡排序概述

    一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序

    如果有n个数据进行排序,总共需要比较n-1次

    每一次比较完毕,下一次的比较就会少一个数据参与

  • 代码实现

    public class MyBubbleSortDemo2 {public static void main(String[] args) {int[] arr = {3, 5, 2, 1, 4};//1 2 3 4 5bubbleSort(arr);}
    ​private static void bubbleSort(int[] arr) {//外层循环控制的是次数 比数组的长度少一次.for (int i = 0; i < arr.length -1; i++) {//内存循环就是实际循环比较的//-1 是为了让数组不要越界//-i 每一轮结束之后,我们就会少比一个数字.for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
    ​printArr(arr);}
    ​private static void printArr(int[] arr) {for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}}

3.3 Arrays (应用)

  • Arrays的常用方法

    方法名说明
    public static String toString(int[] a)返回指定数组的内容的字符串表示形式
    public static void sort(int[] a)按照数字顺序排列指定的数组
    public static int binarySearch(int[] a, int key)利用二分查找返回指定元素的索引
  • 示例代码

    public class MyArraysDemo {public static void main(String[] args) {//        public static String toString(int[] a)    返回指定数组的内容的字符串表示形式//        int [] arr = {3,2,4,6,7};//        System.out.println(Arrays.toString(arr));
    ​//        public static void sort(int[] a)      按照数字顺序排列指定的数组//        int [] arr = {3,2,4,6,7};//        Arrays.sort(arr);//        System.out.println(Arrays.toString(arr));
    ​//        public static int binarySearch(int[] a, int key) 利用二分查找返回指定元素的索引int [] arr = {1,2,3,4,5,6,7,8,9,10};int index = Arrays.binarySearch(arr, 0);System.out.println(index);//1,数组必须有序//2.如果要查找的元素存在,那么返回的是这个元素实际的索引//3.如果要查找的元素不存在,那么返回的是 (-插入点-1)//插入点:如果这个元素在数组中,他应该在哪个索引上.}}

  • 工具类设计思想

    1. 构造方法用 private 修饰

    2. 成员用 public static 修饰

4.异常

4.1 异常(记忆)

  • 异常的概述

    异常就是程序出现了不正常的情况

  • 异常的体系结构

4.2 编译时异常和运行时异常的区别(记忆)

  • 编译时异常

    • 都是Exception类及其子类

    • 必须显示处理,否则程序就会发生错误,无法通过编译

  • 运行时异常

    • 都是RuntimeException类及其子类

    • 无需显示处理,也可以和编译时异常一样处理

  • 图示

4.3 JVM默认处理异常的方式(理解)

  • 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:

    • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台

    • 程序停止执行

4.4 查看异常信息 (理解)

控制台在打印异常信息时,会打印异常类名,异常出现的原因,异常出现的位置

我们调bug时,可以根据提示,找到异常出现的位置,分析原因,修改异常代码

4.5 throws方式处理异常(应用)

  • 定义格式

    public void 方法() throws 异常类名 {}
  • 示例代码

    public class ExceptionDemo {public static void main(String[] args) throws ParseException{System.out.println("开始");
    //        method();method2();
    ​System.out.println("结束");}
    ​//编译时异常public static void method2() throws ParseException {String s = "2048-08-09";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d = sdf.parse(s);System.out.println(d);}
    ​//运行时异常public static void method() throws ArrayIndexOutOfBoundsException {int[] arr = {1, 2, 3};System.out.println(arr[3]);}
    }

  • 注意事项

    • 这个throws格式是跟在方法的括号后面的

    • 编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理

    • 运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理

4.6 throw抛出异常 (应用)

  • 格式

    throw new 异常();

  • 注意

    这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了

  • throws和throw的区别

    throwsthrow
    用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
    表示声明异常,调用该方法有可能会出现这样的异常表示手动抛出异常对象,由方法体内的语句处理
  • 示例代码

    public class ExceptionDemo8 {public static void main(String[] args) {//int [] arr = {1,2,3,4,5};int [] arr = null;printArr(arr);//就会 接收到一个异常.//我们还需要自己处理一下异常.}
    ​private static void printArr(int[] arr) {if(arr == null){//调用者知道成功打印了吗?//System.out.println("参数不能为null");throw new NullPointerException(); //当参数为null的时候//手动创建了一个异常对象,抛给了调用者,产生了一个异常}else{for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}
    ​
    }

4.7 try-catch方式处理异常(应用)

  • 定义格式

    try {可能出现异常的代码;
    } catch(异常类名 变量名) {异常的处理代码;
    }
  • 执行流程

    • 程序从 try 里面的代码开始执行

    • 出现异常,就会跳转到对应的 catch 里面去执行

    • 执行完毕之后,程序还可以继续往下执行

  • 示例代码

    public class ExceptionDemo01 {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}
    ​public static void method() {try {int[] arr = {1, 2, 3};System.out.println(arr[3]);System.out.println("这里能够访问到吗");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");}}
    }

  • 注意

    1. 如果 try 中没有遇到问题,怎么执行?

      会把try中所有的代码全部执行完毕,不会执行catch里面的代码

    2. 如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?

      那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了 当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码

    3. 如果出现的问题没有被捕获,那么程序如何运行?

      那么try...catch就相当于没有写.那么也就是自己没有处理. 默认交给虚拟机处理.

    4. 同时有可能出现多个异常怎么处理?

      出现多个异常,那么就写多个catch就可以了. 注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面

4.8 Throwable成员方法(应用)

  • 常用方法

    方法名说明
    public String getMessage()返回此 throwable 的详细消息字符串
    public String toString()返回此可抛出的简短描述
    public void printStackTrace()把异常的错误信息输出在控制台
  • 示例代码

    public class ExceptionDemo02 {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}
    ​public static void method() {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); //new ArrayIndexOutOfBoundsException();System.out.println("这里能够访问到吗");} catch (ArrayIndexOutOfBoundsException e) { //new ArrayIndexOutOfBoundsException();
    //            e.printStackTrace();
    ​//public String getMessage():返回此 throwable 的详细消息字符串
    //            System.out.println(e.getMessage());//Index 3 out of bounds for length 3
    ​//public String toString():返回此可抛出的简短描述
    //            System.out.println(e.toString());//java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    ​//public void printStackTrace():把异常的错误信息输出在控制台e.printStackTrace();
    //            java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    //            at com.itheima_02.ExceptionDemo02.method(ExceptionDemo02.java:18)
    //            at com.itheima_02.ExceptionDemo02.main(ExceptionDemo02.java:11)
    ​}}
    }

4.9 异常的练习 (应用)

  • 需求

    键盘录入学生的姓名和年龄,其中年龄为18 - 25岁,超出这个范围是异常数据不能赋值.需要重新录入,一直录到正确为止

  • 实现步骤

    1. 创建学生对象

    2. 键盘录入姓名和年龄,并赋值给学生对象

    3. 如果是非法数据就再次录入

  • 代码实现

    学生类

    public class Student {private String name;private int age;
    ​public Student() {}
    ​public Student(String name, int age) {this.name = name;this.age = age;}
    ​public String getName() {return name;}
    ​public void setName(String name) {this.name = name;}
    ​public int getAge() {return age;}
    ​public void setAge(int age) {if(age >= 18 && age <= 25){this.age = age;}else{//当年龄不合法时,产生一个异常throw new RuntimeException("年龄超出了范围");}}
    ​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
    }

    测试类

    public class ExceptionDemo12 {public static void main(String[] args) {// 键盘录入学生的姓名和年龄,其中年龄为 18 - 25岁,// 超出这个范围是异常数据不能赋值.需要重新录入,一直录到正确为止。
    ​Student s = new Student();
    ​Scanner sc = new Scanner(System.in);System.out.println("请输入姓名");String name = sc.nextLine();s.setName(name);while(true){System.out.println("请输入年龄");String ageStr = sc.nextLine();try {int age = Integer.parseInt(ageStr);s.setAge(age);break;} catch (NumberFormatException e) {System.out.println("请输入一个整数");continue;} catch (AgeOutOfBoundsException e) {System.out.println(e.toString());System.out.println("请输入一个符合范围的年龄");continue;}/*if(age >= 18 && age <=25){s.setAge(age);break;}else{System.out.println("请输入符合要求的年龄");continue;}*/}System.out.println(s);
    ​}
    }

4.10 自定义异常(应用)

  • 自定义异常概述

    当Java中提供的异常不能满足我们的需求时,我们可以自定义异常

  • 实现步骤

    1. 定义异常类

    2. 写继承关系

    3. 提供空参构造

    4. 提供带参构造

  • 代码实现

    异常类

    public class AgeOutOfBoundsException extends RuntimeException {public AgeOutOfBoundsException() {}
    ​public AgeOutOfBoundsException(String message) {super(message);}
    }

    学生类

    public class Student {private String name;private int age;
    ​public Student() {}
    ​public Student(String name, int age) {this.name = name;this.age = age;}
    ​public String getName() {return name;}
    ​public void setName(String name) {this.name = name;}
    ​public int getAge() {return age;}
    ​public void setAge(int age) {if(age >= 18 && age <= 25){this.age = age;}else{//如果Java中提供的异常不能满足我们的需求,我们可以使用自定义的异常throw new AgeOutOfBoundsException("年龄超出了范围");}}
    ​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
    }

    测试类

    public class ExceptionDemo12 {public static void main(String[] args) {// 键盘录入学生的姓名和年龄,其中年龄为 18 - 25岁,// 超出这个范围是异常数据不能赋值.需要重新录入,一直录到正确为止。
    ​Student s = new Student();
    ​Scanner sc = new Scanner(System.in);System.out.println("请输入姓名");String name = sc.nextLine();s.setName(name);while(true){System.out.println("请输入年龄");String ageStr = sc.nextLine();try {int age = Integer.parseInt(ageStr);s.setAge(age);break;} catch (NumberFormatException e) {System.out.println("请输入一个整数");continue;} catch (AgeOutOfBoundsException e) {System.out.println(e.toString());System.out.println("请输入一个符合范围的年龄");continue;}/*if(age >= 18 && age <=25){s.setAge(age);break;}else{System.out.println("请输入符合要求的年龄");continue;}*/}System.out.println(s);
    ​}
    }

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

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

相关文章

司铭宇老师:房地产中介电话销售培训:房地产中介电话销售技巧

房地产中介电话销售培训&#xff1a;房地产中介电话销售技巧 在当今的房地产市场中&#xff0c;电话销售已经成为了房地产中介的重要营销手段。然而&#xff0c;如何才能有效地利用电话销售来吸引客户&#xff0c;提高销售业绩呢&#xff1f;这就需要掌握一些专业的电话销售技巧…

【React基础】– JSX语法

文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …

10个常考的前端手写题,你全都会吗?

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 今天来分享一下10个常见的JavaScript手写功能。 目录 1.实现new 2.call、apply、…

Python爬虫---scrapy框架---当当网管道封装

项目结构&#xff1a; dang.py文件&#xff1a;自己创建&#xff0c;实现爬虫核心功能的文件 import scrapy from scrapy_dangdang_20240113.items import ScrapyDangdang20240113Itemclass DangSpider(scrapy.Spider):name "dang" # 名字# 如果是多页下载的话, …

transbigdata笔记:轨迹切片

1 方法介绍 在transbigdata笔记&#xff1a;轨迹停止点和行程提取-CSDN博客中&#xff0c;已经可以把轨迹点拆分成停止点和行程点&#xff0c;但是行程点只有起止位置&#xff0c;不包含行程轨迹信息为了进一步分析车辆的行驶轨迹&#xff0c;需要从每次行程的时间段中提取轨迹…

matlab Robotics Toolbox

工具箱下载地址&#xff1a;ROBOTICS TOOLBOX 安装教程 笛卡尔运动规划 在MATLAB中&#xff0c;ctraj和jtraj是两个不同的函数&#xff0c;主要用于控制系统和机器人学中的轨迹规划。它们之间的主要区别在于它们处理的问题类型和使用方式。 ctraj&#xff08;连续时间轨迹规划…

CTF CRYPTO 密码学-2

题目名称&#xff1a;crypto1 题目描述&#xff1a; 字符 ZZZZ X XXZ ZZ ZXZ Z ZXZ ZX ZZX XXX XZXX XXZ ZX ZXZZ ZZXZ XX ZX ZZ 分析 此字段是由Z和X组成的字符&#xff0c;联想到莫斯密码是由.和-组成的所以接下来可以尝试莫斯密码解题 解题过程&#xff1a; Step1&#xf…

2019年认证杯SPSSPRO杯数学建模C题(第二阶段)保险业的数字化变革全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于统计建模的车险业数字变革研究 C题 保险业的数字化变革 原题再现&#xff1a; 车险&#xff0c;即机动车辆保险。保险自身是一种分散风险、消化损失的经济补偿制度&#xff0c;车险即为分散机动车辆在行驶过程中可能发作的未知风险和损失…

【Vue】Vue 路由的配置及使用

目录捏 前言一、路由是什么&#xff1f;1.前端路由2.后端路由 二、路由配置1.安装路由2.配置路由 三、路由使用1.route 与 router2. 声明式导航3. 指定组件的呈现位置 四、嵌套路由&#xff08;多级路由&#xff09;五、路由重定向1.什么是路由重定向&#xff1f;2.设置 redire…

C++类与对象【友元】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f384;1 友元&#x1f951;1.1 全局函数做友元&#x1f951;1.2 类做友元&#x1f951;1.3 成员函数做友元 &#x1f56e;2 总结 &#x1f384;1 友元 生活中你的家…

深入了解性能优化(web应用)

影响一个系统性能的方方面面 一个 web应用不是一个孤立的个体,它是一个系统的部分,系统中的每一部分都会影响整个系统的性能 一.常用的性能评价/测试指标 1.响应时间 提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。 常用操作的响应时间列表: 操作 响应…

探索 2024 年新副业:无人饮品机的新风向

随着科技的迅猛发展&#xff0c;无人饮品机作为一种全新的商业模式&#xff0c;正逐渐成为 2024 年副业的新风向。如果你还没有了解过这种全新的副业&#xff0c;那么现在是时候深入了解一下了。 D咖无人饮品机的优势在于其 24 小时不间断的营业模式&#xff0c;它可以在你睡觉…

web前端项目-中国象棋【附源码】

中国象棋 【中国象棋】是一款历史悠久、深受人们喜爱的策略类游戏。在Web前端技术中&#xff0c;我们可以使用HTML、CSS和JavaScript等语言来制作一款中国象棋游戏。玩家使用棋子&#xff08;帅/相/士/炮/马/车/炮/卒&#xff09;在棋盘上相互对弈&#xff0c;将对手的“帅”棋…

工作流管理框架airflow-安装部署教程

1 概述 Airflow是一个以编程方式编写&#xff0c;用于管理和调度工作流的平台。可以帮助你定义复杂的工作流程,然后在集群上执行和监控这些工作流。 Airflow计划程序在遵循指定的依赖项&#xff0c;同时在一组工作线程上执行任务。丰富的命令实用程序使在DAG上执行复杂的调度…

国产开源模型标杆,能力比肩ChatGPT!书生·浦语2.0发布,支持免费商用

1月17日&#xff0c;新一代大语言模型书⽣浦语2.0&#xff08;InternLM2&#xff09;正式发布并开源。 2种参数规格、3种模型版本&#xff0c;共计6个模型&#xff0c;全部免费可商用。 它支持200K超长上下文&#xff0c;可轻松读200页财报。200K文本全文范围关键信息召回准确…

Springboot日志框架logback与log4j2

目录 Springboot日志使用 Logback日志 日志格式 自定义日志格式 日志文件输出 Springboot启用log4j2日志框架 Springboot日志使用 Springboot底层是使用slf4jlogback的方式进行日志记录 Logback日志 trace&#xff1a;级别最低 debug&#xff1a;调试级别的&#xff0c…

Windows平台反调试技术学习

前言 前俩天的学习记录Windows上面的反调试学习&#xff0c;主要是参考《恶意代码实战分析》和《加密与解密》里面的&#xff0c;给每个小技术都写了程序示例&#xff0c;自己编译反调试了一遍。对于加解密一书是还有很多不理解的地方的&#xff0c;目前只能记录到这了&#x…

建筑类中级工程师职称证明业绩材料有哪些?

三、建筑类中级工程师职称造价类工程业绩材料 1.合同&#xff1a;证明项目合作关系的凭证。 2.预&#xff08;结&#xff09;算报告等(重点是体现封面有你的名字和执业印章等) 3.单位证明或任命书(本人在项目中的职务聘书) 4.工程获奖证明&#xff1a;项目获得市优的证书、省优…

Ubuntu 22.04.1 LTS VirtualBox7.0 解决虚拟机窗口失去焦点一段时间后,虚拟机显示不刷新问题

故障描述&#xff1a; virtualbox安装在ubuntu系统上&#xff0c;虚拟机内安装了windows操作系统。使用中发现&#xff0c;当linux系统窗口被激活&#xff0c;如firefox浏览器&#xff0c;虚拟机的显示一段时间后会暂停刷新&#xff0c;鼠标划入虚拟机窗口后&#xff0c;才会立…

分布式概念

文章目录 一、CAP定理和BASE定理1.1 CAP定理1.2 CAP取舍1.3 BASE定理 二、分布式事务2.1 柔性事务2.2 两阶段提交协议2.3 三阶段提交协议 三、分布式ID3.1 数据库自增ID3.2 数据库多主模式3.3 号段模式3.4 雪花算法3.5 Leaf3.6 使用Redis生成ID 四、限流算法4.1 固定窗口计数器…