Java基础学习(12)

news2024/10/5 17:19:19

Java基础学习

  • 一、不可变集合
  • 二、Stream流
    • 2.1 Stream流数据添加
    • 2.2 Stream流的中间方法
    • 2.3 Stream终结方法
  • 三、 方法引用
    • 3.1 方法引用的基本概念
    • 3.2 方法引用的分类
      • 3.2.1 引用静态方法
    • 3.2.2 引用成员方法
      • 3.2.3 引用构造方法
      • 3.2.4 使用类名引用成员方法
      • 3.2.5 引用数组的构造方法
  • 四、异常
    • 4.1 异常
    • 4.1.1 运行时异常和编译时异常的区别
    • 4.1.2 异常的作用
    • 4.2 异常处理方式
      • 4.2.1 JVM默认的处理方式
      • 4.2.2 自己处理
        • 常见问题
    • 4.3 Throwable 的成员方法
    • 4.4 抛出异常
      • 代码实现
    • 4.5 自定义异常

一、不可变集合

不可变集合:就是不可以改变集合内容,长度

运用场景:

  1. 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践 或者当集合对象被不可信的库调用时,不可变形式是安全的
  2. 简单理解:不想让别人修改集合中的内容

书写格式:

  • 在List、Set、Map接口中,都存在静态的of方法,可以获取一个不可变的集合。

主要方法

方法名称说明
static List of(E…elements)创建一个具有指定元素的List集合对象
static Set of(E…elements)创建一个具有指定元素的Set集合对象
static <K .V> Map<K,V> of(E…elements)创建一个具有指定元素的Map集合对象

注意:
List直接使用

Set: 元素不能重复
Map: 元素不能重复、键值对数量最多是10个 超过10个用ofEntries方法

二、Stream流

Stream流的使用步骤

  • 先得到一条Stream流(流水线),并把数据放上去
  • 使用中间方法对流水线上的数据进行操作
  • 使用终结方法对流水线上的数据进行操作

2.1 Stream流数据添加

在这里插入图片描述

package Stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.stream.Stream;

public class StreamCreat {
    public static void main(String[] args) {
        //创建一个单列集合的Stream流
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list,2,3,5,4);
        list.stream().forEach(s-> System.out.println(s));

        //创建一个双列的集合
        HashMap<String,Integer> hm = new HashMap<>();
        hm.put("黄埔",111);
        hm.put("们都",222);
        hm.put("阿松大",333);
        hm.put("o",444);

        hm.keySet().stream().forEach(s-> System.out.println(s));


        //创建一个数组
        String[] arr = {"as","asd","asdasdas","xzca","wad"};
        Arrays.stream(arr).forEach(s-> System.out.println(s));

        //零散的数据
        Stream.of(1,2,3,4).forEach(s-> System.out.println(s));
    }
}

注意:

  1. stream接口中静态方法of的细节
  2. 方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组但是数组必须是引用数据类型的
  3. 如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream当中。,其返回的就是一个地址值了

2.2 Stream流的中间方法

在这里插入图片描述

注意:

  1. 中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式
  2. 修改Stream流中的数据,不会影响原来集合或者数组中的数据
package Stream;

import java.util.ArrayList;
import java.util.Collections;

public class StreamContent {
    public static void main(String[] args) {
        //创建方法,并且添加数据
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1,"张阿松大-22","黄阿松-11","西欧我-33","黄阿萨-87","阿萨松-33","阿萨松-12","阿萨松-32","阿萨松-32");

        //过滤方法
        list1
                .stream()
                .filter(s->s.startsWith("黄"))
                .forEach(s-> System.out.println(s));

        //获取前面几个数据
        list1.stream().limit(3).forEach(s-> System.out.println(s));
        //跳过前面几个数据
        list1.stream().skip(3).forEach(s-> System.out.println(s));

        //集合去重
        list1.stream().distinct().forEach(s-> System.out.println(s));

        //合并a,b,两个集合
//        Stream.concat(list1,list1);
        //转化流的数据类型
        list1.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));
    }
}

2.3 Stream终结方法

在这里插入图片描述

package Stream;

import java.util.*;
import java.util.stream.Collectors;

public class StreamCollect {
    public static void main(String[] args) {
        //创建Arraylist集合
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌-女-18","张强-男-87","张三丰-男-21","张翠山-女-18","张良-男-18","王二麻子-女-15","谢广坤-女-18");

        //用Arraylist接收
        List<String> collect = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(collect);

        //用Set接收(里面不能有重复的元素)
        Set<String> Set = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(Set);

        //用map接收
        Map<String, Integer> map = list.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(
                        s -> s.split("-")[0]
                        ,
                        s -> Integer.parseInt(s.split("-")[2])
                ));
        System.out.println(map);
    }
}

IntFunction的泛型: 具体类型的数组
apply的形参:流中数据的个数,要跟数组的长度保持一致
apply的返回值: 具体类型的数组方法体: 就是创建数组

toArray方法的参数的作用: 负责创建一个指定类型的数组
toArray方法的底层,会依次得到流里面的每一个数据,并把数据放到数组中
toArray方法的返回值: 是一个装着流里面所有数据的数组

toMap:

toMap :

  • 参数一:表示键的生成规则
  • 参数二:表示值的生成规则

参数一:

Function

  • 泛型一: 表示流中每一个数据的类型
  • 泛型二: 表示Map集合中键的数据类型 方法apply形参:
  • 依次表示流里面的每一个数据方法体:生成键的代码返回值:已经生成的键

参数二:

Function

  • 泛型一: 表示流中每一个数据的类型
  • 泛型二: 表示Map集合中值的数据类型 方法apply形参:
  • 依次表示流里面的每一个数据方法体:生成值的代码返回值: 已经生成的值

三、 方法引用

3.1 方法引用的基本概念

概念:把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体
在这里插入图片描述
方法引用

  1. 引用处需要是函数式接口
  2. 被引用的方法需要已经存在
  3. 被引用方法的形参和返回值需要跟抽象方法的形参和返回值保持一致
  4. 被引用方法的功能需要满足当前的要求

::是什么符号? 方法引用符

package Stream.方法引用;

import java.util.Arrays;
import java.util.Comparator;

public class funcationDom1 {
    public static void main(String[] args) {
        //创建一个数组,随机添加数据,最后的数据要是按降序的排列
        Integer[] arr = {1,8,26,9,3,95};

        //1. 通过匿名内部类的形式进行排序
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });

        // 2. 通过lambda的形式进行排序
        Arrays.sort(arr,(o1,o2) ->  o2-o1);

        //3. 通过引用函数的形式来进行排列
        Arrays.sort(arr,funcationDom1::subtraction);
        System.out.println(Arrays.toString(arr));    //[95, 26, 9, 8, 3, 1]
    }
    public static int subtraction(int num1 , int num2){
        return num2 - num1;
    }
}

3.2 方法引用的分类

  • 引用静态方法
  • 引用成员方法
  • 引用构造方法
  • 其他调用方式

3.2.1 引用静态方法

格式:类名::静态方法

范例:

Integer::parseInt
package Stream.方法引用;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;

public class Dom2 {
    public static void main(String[] args) {
        //创建集合,将数组当中的字符串变为int类型
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"1","2","3","4","56");

        //1. 利用匿名内部类
        list.stream()
                .map(new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.parseInt(s);
                    }
                }).forEach(s-> System.out.println(s));

        //2. 利用调用静态方法来实现
        list.stream()
                .map(Integer::parseInt).forEach(s-> System.out.println(s));
    }
}

3.2.2 引用成员方法

格式:对象::成员方法()
其他类:其他类对象::方法名
本类: this::方法名
父类: super::方法名

其他类:

list.stream()
		.filter(new StringOperration()::StringJudge)
		.foreach(s->system.out.printIn(s));

本类:

list.stream()
		.filter(this::StringJudge)
		.foreach(s->system.out.printIn(s));

如果是静态方法时,没有this,我们只能用重新创建本类方法(new 本类方法名)

父类:

list.stream()
		.filter(super::StringJudge)
		.foreach(s->system.out.printIn(s));

3.2.3 引用构造方法

格式:类名::new

范例:

 student::new
package Method_reference;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;

public class Dome6 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张三,12","李四,12","王五,12");
        //原先的方法使集合里面的数据转换为对象类型的
        list.stream().map(new Function<String, Student>() {
            @Override
            public Student apply(String s) {
                String[] split = s.split(",");
                String name = split[0];
                int age = Integer.parseInt(split[1]);
                return new Student(name,age);
            }
        }).forEach(s-> System.out.println(s));

        //使用引用构造方法map集合
        list.stream().map(Student::new).forEach(s-> System.out.println(s));

    }
}
package Method_reference;

public class Student {
    private String name;
    private int age;

    public Student() {
    }
	//重写一个带一个参数的构造函数
    public Student(String str){
        String[] split = str.split(",");
        this.name = split[0];
        this.age = Integer.parseInt(split[1]);
    }
    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) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}


3.2.4 使用类名引用成员方法

格式:类名::成员方法

范例:

 String::substring

方法引用的规则:

  1. 需要有函数式接口
  2. 被引用的方法必须已经存在
  3. 被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致。
  4. 被引用方法的功能需要满足当前的需求

抽象方法形参的详解:

  • 第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法在stream流当中,第一个参数一般都表示流里面的每一个数据。假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用string这个类中的方法
  • 第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法

将集合当中的所有数据全部变成大写输出

package Stream.方法引用;

import java.util.ArrayList;
import java.util.Collections;

public class Dom3 {
    public static void main(String[] args) {
        //创建Arraylist对象并且添加对象
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"aaa","bbb","ccc");

        //将所有的字母变成大写并且输出
        //.map(String::toUpperCase) : 表示拿着stream里面的每一个数据去调用String方法里面的toUpperCase
        list.stream()
                .map(String::toUpperCase)
                .forEach(s-> System.out.println(s));

        //方法二
/*        list.stream()
                .map(new Function<String, String>() {
                    @Override
                    public String apply(String s) {
                        return s.toUpperCase();
                    }
                }).forEach(s-> System.out.println(s));
 */
    }
}

3.2.5 引用数组的构造方法

格式:数据类型I::new
范例:

int[]::new

集合中存储一些整数,收集到数组当中:
数组的类型,需要跟流中数据的类型保持一致。

package Stream.方法引用;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.IntFunction;

public class Dom4 {
    public static void main(String[] args) {
        //创建集合,添加整型数据
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5);

        //将数据添加到数组当中
        Integer[] array = list.stream()
                .toArray(Integer[]::new);
        System.out.println(Arrays.toString(array));//[1, 2, 3, 4, 5]

        //法二:
        Integer[] arr = list.stream()
                .toArray(new IntFunction<Integer[]>() {
                    @Override
                    public Integer[] apply(int value) {
                        return new Integer[value];
                    }
                });
        System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5]


    }
}

四、异常

4.1 异常

异常:异常就是代表程序出现的问题
当出现异常时,该怎么处理事情

在这里插入图片描述

  • Exception:叫做异常,代表程序可能出现的问题我们通常会用Exception以及他的子类来封装程序出现的问题
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒运行时出现的异常(如:数组索引越界异常
  • 编译时异常:编译阶段就会出现异常提醒的。 (如:日期解析异常)

在这里插入图片描述

4.1.1 运行时异常和编译时异常的区别

  • 编译时异常:除了RuntimeExcpetion和他的子类,其他都是编译时异常。编译阶段需要进行处理,作用在于提醒程序员。
  • 运行时异常: RuntimeException本身和所有子类,都是运行时异常编译阶段不报错,是程序运行时出现的。一般是由于参数传递错误带来的问题

4.1.2 异常的作用

  • 作用一: 异常是用来查询bug的关键参考信息

  • 作用二: 异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

搭建的条件

 public void setAge(int age) {
        if (age>40 || age<18){
            throw new RuntimeException();
        }else {
            this.age = age;
        }
    }

初始:

package 异常;

public class Dom1 {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student("zhangsn",13);

        s.setAge(90);
    }
}

结果
在这里插入图片描述

4.2 异常处理方式

  1. JVM默认的处理方式
  2. 自己处理
  3. 抛出异常

4.2.1 JVM默认的处理方式

  1. 异常的名称异常原因异常出现的位置信息输出在了控制台程序
  2. 停止执行,下面的代码不会再执行了

代码:

     package 异常;

    public class Dom1 {
        public static void main(String[] args) {
            //创建对象
            Student s = new Student("zhangsn",13);

            System.out.println("我先执行一步");
            s.setAge(90);
            System.out.println("看看我执行没");
        }
    }


控制台报错,并且不会执行后面代码

4.2.2 自己处理

格式:

try {
可能出现异常的代码;
catch(异常类名 变量名){
异常的处理代码;

原理解释:

  • 此处出现了异常,程序就会在这里创建一个ArrayIndexOutofBoundsException对象
  • new ArrayIndexOutofBoundsException();
  • 拿着这个对象catch的小括号中对比,看括号中的变量是否可以接收这个对象如果能被接收,就表示该异常就被捕获(抓住),执行catch里面对应的代码
  • 当catch里面所有的代码执行完毕,继续执行try…catch体系下面的其他代码
package 异常;

public class Dom2 {
    public static void main(String[] args) {
        //创建对象
        int[] arr = {1,2,3,4,5};

        System.out.println("我先执行一步");
        try {
            System.out.println(arr[5]);
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("出现错误,错误信息:"+e);
        }
        System.out.println("看看我执行没");
    }
}

控制台:
在这里插入图片描述
该方法好处,就是可以执行下面的代码

常见问题

  • 如果try中可能会遇到多个问题,怎么执行?
  • 我们会创建多个catch来捕获其他的对象

如果再出现多个异常时,要把父类写在最后一个
因为如果父类放到最前面的话,会将其子类所有的异常都接收

package 异常;

public class Dom3 {
    public static void main(String[] args) {
        int[] arr = {1,2,34,5,51};

        try {
            System.out.println(1/0);
            System.out.println(arr[5]);
            String s = null;
            System.out.println(s.equals("asd"));
        }catch (NullPointerException e){
            System.out.println("空指针异常");
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界");
        }catch (ArithmeticException e){
            System.out.println("分母不为");
        }
        System.out.println("看看我执行了吗s");
    }
}

执行时机是,捕捉到就跳转,不会执行try该代码下面的代码,直接去catch当中查询其捕捉到的异常,若无就会是JVM自动给你报错,导致后面的代码无法实现

4.3 Throwable 的成员方法

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

快捷键生成try……catch --> ctrl + Alt + t

package 异常;

public class Dom4 {
    public static void main(String[] args) {
        //创建对象
        int[] arr = {1,2,3,4,5};

        System.out.println("我先执行一步");
        try {
            System.out.println(arr[5]);
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println(e.getMessage());//Index 5 out of bounds for length 5
            System.out.println(e.toString());//java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
            e.printStackTrace();//打印红色报错,包含上面两个信息+出错位置。他还不会影响到后面代码的实现
        }
        System.out.println("看看我执行没");
    }
}

4.4 抛出异常

在这里插入图片描述

代码实现

在这里插入图片描述
GirlFrend代码细节地方:

public void setName(String name) {
        int len = name.length();
        if (len<3 || len>10){
            throw new RuntimeException();//运行时错误
        }
        this.name = name;
    }
    public void setAge(int age) {
        if (age>40 || age<18){
            throw new RuntimeException();
        }
        this.age = age;
    }

main代码:

package 异常;

import java.util.Scanner;

public class Exercise {
    public static void main(String[] args) {
        //键盘录入女朋友名字(长度3-10)和年龄(18-40)
        Scanner sc = new Scanner(System.in);
        GirlFriend gf = new GirlFriend();

        while (true) {
            try {
                System.out.println("请输入你女朋友的名字");
                String name = sc.nextLine();
                System.out.println("请输入你女朋友的年龄");
                String agestr = sc.nextLine();
                int age = Integer.parseInt(agestr);
                gf.setAge(age);
                gf.setName(name);
                break;
            } catch (NumberFormatException e) {
                System.err.println("数字格式有错,请重新输入");
            }catch (RuntimeException e){
                System.err.println("名字有误 或 年龄有误");
            }
        }

        System.out.println("女朋友的年龄"+gf.getAge()  + "女朋友名字" + gf.getName());
    }
}

4.5 自定义异常

防止再出现异常时,没有适合说明异常的工具

书写步骤:

  • 定义异常类
  • 写继承关系
  • 空参构造
  • 带参构造

AgeOutAreaException

package 异常;

public class AgeOutAreaException extends RuntimeException{
    public AgeOutAreaException() {
    }

    public AgeOutAreaException(String message) {
        super(message);
    }
}

NameFormatException

package 异常;

public class NameFormatException extends RuntimeException{
    public NameFormatException() {
    }

    public NameFormatException(String message) {
        super(message);
    }
}

public void setName(String name) {
        int len = name.length();
        if (len<3 || len>10){
            throw new RuntimeException(name + "范围为长度3-10");//运行时错误
        }
        this.name = name;
    }
    public void setAge(int age) {
        if (age>40 || age<18){
            throw new RuntimeException(age +"超出范围")	;
        }
        this.age = age;
    }

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

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

相关文章

PyQt5 基础篇(一)-- 安装与环境配置

1 PyQt5 图形界面开发工具 Qt 库是跨平台的 C 库的集合&#xff0c;是最强大的 GUI 库之一&#xff0c;可以实现高级 API 来访问桌面和移动系统的各种服务。PyQt5 是一套 Python 绑定 Digia QT5 应用的框架。PyQt5 实现了一个 Python模块集&#xff0c;有 620 个类&#xff0c;…

MATLAB 点云非均匀体素下采样 (8)

MATLAB 点云非均匀体素下采样的不同参数效果测试 (8) 一、实现效果二、算法介绍三、函数说明3.1 函数3.2 参数四、实现代码(详细注释!)五、与固定步长采样法比较5.1 代码5.2 效果一、实现效果 不同参数调整下的非均匀体素下采样结果如下图所示,后续代码复制黏贴即可: 可…

入职6个月,被裁了...

我跟大多数人不大一样&#xff0c;从来没有说要等公司主动裁员拿补偿&#xff0c;我看自己没有什么价值或者是公司不行了&#xff0c;我都会主动离职。但是这次也太突然了。公司很大已上市&#xff0c;并不是不行了&#xff0c;总结原因就是&#xff0c;一是领导无能&#xff0…

【STM32CubeMX】F103ADC获取

前言 本文记录了我学习STM32CubeMX的过程&#xff0c;方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了基本的ADC值的获取流程&#xff0c;只单纯地记录了ADC端口的配置&#xff0c;没有加配像串口之类的调试&#xff0c;以简化流程。下面的流程是使用串口调试…

版本控制系统Git - 配置与基本使用

Git 1 Git简介1 Git概述2 Git的作用2.1 项目版本管理2.2 多人协同开发2.3 Git 的结构2.4 Git的工作原理 2 Git安装1 下载Git2 安装Git3 配置环境变量4 测试git是否安装成功5 安装git桌面工具(可以不安装) 3 Git基本操作1 设置Git用户2 新建仓库3 查看仓库状态4 添加到暂存文件5…

MATLAB 点云重复点去除(7)

MATLAB 点云重复点去除 (7) 一、实现效果二、算法介绍三、函数说明3.1 函数3.2 参数四、具体代码 (注释详细!)一、实现效果 效果上看不出来,但实际上左边的点云是右边的两倍 二、算法介绍 重复点的去除,是点云处理中常用的预处理方法,因为重复点的存在有时候会严重干…

C++系列四:数组

数组 1. 数组定义与初始化2. 多维数组3. 字符数组4. 总结 1. 数组定义与初始化 定义数组时需要指定数组的类型和大小&#xff1a; int myArray[10];上述代码定义了一个包含 10 个整数的数组。这些整数的下标从 0 开始&#xff0c;并以 1 个单位递增。 C 允许在定义数组时对其…

设计模式——装饰者模式(继承和接口的两种实现方式)

是什么&#xff1f; 场景案例&#xff1a;想必大家都吃过手抓饼吧&#xff0c;我们在点手抓饼的时候可以选择加培根、鸡蛋、火腿、肉松等等这些配菜&#xff0c;当然这些配菜的价格都不一样&#xff0c;那么计算总价就比较麻烦&#xff1b; 装饰者模式就是指在不改变现有对象…

springboot 集成 shardingSphere 加mybatisplus 自带增加 分页查询 和源代码包 分库分表 单库 分表 使用雪花算法id

目录 介绍 代码下载 效果 数据库 代码结构 上代码 pom.xml yml配置 建表语句 mapper.xml mybatisplus 配置.java logback application.java BaseEntity TUser TUserMapper TUserService TUserServiceImpl TUserController 测试 介绍 这套springboot shardi…

OSG笔记:AutoTransform实现固定像素大小的图形

需求 在(200,0,0)位置绘制固定10像素大小的正方体 实现方式 为了便于观察&#xff0c;例子中绘制了两条直线&#xff0c;相交于(200,0,0)。 //两根直线交于(200, 0, 0)&#xff0c;用于辅助观察 {osg::Geometry* pLineGeom new osg::Geometry();osg::Vec3Array* pVertexArra…

python语法复习

print&#xff1a;输出函数 print(520)效果&#xff1a;输出520. print(hello)效果&#xff1a;输出hello. print(1020)【效果&#xff1a;输出了:1020】注&#xff1a;“ ”在print里面是一个连接符。 print(1020)【效果&#xff1a;输出了30】注&#xff1a; 在此处…

OJ 系统常用功能介绍 快速入门 C++ Python JAVA语言在线评测

技术支持微 makytony 服务器配置 腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用&#xff0c;经过压力测试&#xff0c;评测并发速度可满足130人左右的在线比赛。 系统镜像选 Ubuntu 22.04 LTS &#xff0c;Ubuntu是最热门的Linux发行版之一&#xff0c;是一款…

洞车系统常见问题解决指南

洞车常见问题解决指南 1.研发脚本处理问题1.1 WMS出库单无法审核1.2 OMS入库单无法提交&#xff0c;提示更新中心库存失败1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案1.4 调度波次生成或者添加任务系统异常1.5 东鹏出库单部分出库回传之后要求重传1.6 更新订单…

spring、springmvc、springboot、mybatis框架高频面试题

一、spring 1、Spring框架中的单例bean是线程安全的吗&#xff1f; 不是线程安全的&#xff0c;是这样的&#xff1a; 当多用户同时请求一个服务时&#xff0c;容器会给每一个请求分配一个线程&#xff0c;这是多个线程会并发执行该请求对应的业务逻辑&#xff08;成员方法&a…

ES索引结构升级-笔记

ES中索引的字段类型是不可修改的&#xff0c;只能是重新创建一个索引并设置好mapping&#xff0c;然后再将老索引的数据复制过去 查看老索引mapping GET /twitter/_mappings创建new索引&#xff0c;并指定mapping PUT /twitter410{"mappings": {"properties&…

金3银四结束了,回顾一下我2个月面试的公司....

金三银四结束了&#xff0c;还没有 offer 的同学不要气馁&#xff0c;该来的迟早会来。楼主从 年底 月有想法跳槽开始准备春招&#xff0c;一开始也是惨不忍睹&#xff0c;后来慢慢进入状态最近的面试基本都能走到终面&#xff0c;所以好好坚持&#xff0c;最后一定会有好结果的…

操作系统考试复习——第四章 存储器管理 4.1 4.2

存储器的层次结构&#xff1a; 存储器的多层结构&#xff1a; 存储器至少分为三级&#xff1a;CPU寄存器&#xff0c;主存和辅存。 但是一般分为6层为寄存器&#xff0c;高速缓存&#xff0c;主存储器&#xff0c;磁盘缓存&#xff0c;固定磁盘&#xff0c;可移动存储介质。…

无需重复造轮子—借助 Jetpack 组件,加速应用程序开发

简介 Android Jetpack 是谷歌官方推出的一套 Android 应用架构组件库&#xff0c;旨在为 Android 应用开发提供一种更优秀、更高效且更简单的方式。 Android Jetpack 对开发者带来了许多好处&#xff0c;以下是其中的一些&#xff1a; 提高开发效率&#xff1a;Jetpack 提供…

vue项目重复点击一个路由会报错如何解决

在新版本的vue-router中&#xff0c;重复点击同一个路由会出现以下报错 &#xff1a; 这个问题时vue-router 3.2.0版本的一个小Bug 方法有很多,比如降低路由版本(不推荐),但是推荐下面这种方式,比较简单靠谱 // 把这段代码直接粘贴到router/index.js中的Vue.use(VueRouter)之…

django:django2配置websocket

源码地址&#xff1a; https://gitee.com/liuhaizhang/django2-configuring-websockethttps://gitee.com/liuhaizhang/django2-configuring-websocket python3.9.0 django2.2.1 channels2.2.0 项目结构&#xff1a; test_websocket_django2 -chat -home -test_websocket_dja…