Java基础 - 8 - 算法、正则表达式、异常

news2024/9/23 19:23:22

一. 算法

什么是算法?

        解决某个实际问题的过程和方法

学习算法的技巧?

        先搞清楚算法的流程,再直接去推敲如何写算法

1.1 排序算法

1.1.1 冒泡排序

        每次从数组中找出最大值放在数组的后面去

public class demo {
    public static void main(String[] args) {
        int[] arr = {5,2,3,1};
        //升序排序【1,2,3,5】
        //外循环控制排序轮数,内循环控制每一轮的遍历
        //n个数需要排序n-1轮
        for (int i = 0; i < arr.length - 1; i++) {
            //每一轮的目标是找到最大值,并放在最后一个位置
            //n个数 第一轮需要比较n-1次,第二轮需要比较n-2次 …… 第n-1轮需要比较1次
            for (int j = 0; j < arr.length - i - 1; j++) {
                //如果前一个数大于后一个数,则进行交换
                if(arr[j] > arr[j+1]){
                    int temp;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

1.1.2 选择排序

        每次选择当前位置,开始找出后面的较小值与该位置交换

public class demo {
    public static void main(String[] args) {
        int[] arr = {5,1,3,2};
        //升序排序【1,2,3,5】
        selectionSort(arr);
        selectionSort1(arr);
    }

    //普通选择排序
    private static void selectionSort(int[] arr) {
        //外循环控制排序轮数,内循环控制每一轮的遍历
        //n个数需要排序n-1轮
        for (int i = 0; i < arr.length - 1; i++) {
            //每一轮的目标是确定当前位置的值(确定arr[i]的值)
            //j依次记录当前位置后面位置的值(要记录到最后一个位置)
            //如第一轮确定arr[0]的值,j应该从位置1到位置n-1(一共n个数)
            for (int j = i + 1 ; j < arr.length; j++) {
                //如果当前位置的值大于后面的值,就进行交换
                if(arr[i] > arr[j]){
                    int temp;
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }

    //改进选择排序
    //减少交换次数,每一轮确定后面位置的最小值,再进行排序,这样每轮最多只需要交换一次
    private static void selectionSort1(int[] arr) {
        //n个数需要排序n-1轮
        for (int i = 0; i < arr.length - 1; i++) {
            //每一轮的目标是确定当前位置的值(确定arr[i]的值)
            //j依次记录当前位置后面位置的值(要记录到最后一个位置)
            //每轮确定后面位置的最小值再进行交换,用一个变量记录最小值位置的索引
            int minIndex = i;
            for (int j = i + 1 ; j < arr.length; j++) {
                //用minIndex记录这一轮的最小值
                if(arr[minIndex] > arr[j]){
                    minIndex = j;
                }
            }
            //该轮最小值不是arr[i],则和最小值交换位置
            if(minIndex != i){
                int temp;
                temp = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

1.2 查找算法

1.2.1 顺序查找(基本查找)

注意:再数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的

1.2.2 二分查找(折半查找)

        前提条件:数组中的数据必须是有序的

        核心思想:每次排除一半的数据,查询数据的性能明显提高很多

        折半条件:二分查找正常的折半条件应该是开始位置left<=结束位置right

public class demo {
    public static void main(String[] args) {
        int[] arr = {7,23,79,81,103,127,131,147};
        int index = binarySearch(arr,81);
        if(index != arr.length){
            System.out.println("您要找的数据在数组的索引值是"+index);
        }

        //Java中Arrays类提供了二分查找的方法
        System.out.println(Arrays.binarySearch(arr, 131));
    }

    public static int binarySearch(int[] arr,int data){
        //定义两个变量记录左右两端的位置
        int left = 0;
        int right = arr.length - 1;

        //定义一个循环
        while(left <= right){
            int mid = (left + right) / 2;
            if(arr[mid] == data){
                return mid;
            }else if(arr[mid] > data){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        //循环结束,还没有找到,才会执行到这里
        System.out.println("未查找到"+data);
        return -1;
    }
}

二. 正则表达式

2.1 认识正则表达式 

        就是由一些特定的字符组成,代表的是一个规则

        正则表达式作用一:用来校验数据格式是否合法

        正则表达式作用二:在一段文本中查找满足要求的内容

public class demo {
    public static void main(String[] args) {
        //校验QQ号码是否正确,要求全部都是数字,长度在(6-20)之间,不能用0开头
        System.out.println(checkQQ(null));  //为空返回false
        System.out.println(checkQQ("12345"));  //长度不在6-20之间返回false
        System.out.println(checkQQ("012345"));  //0开头返回false
        System.out.println(checkQQ("12345678abc"));  //不都是数字返回false
        System.out.println(checkQQ("12345678"));  //true

        System.out.println("===============================");
        //正则表达式校验
        System.out.println(checkQQ1(null));  //为空返回false
        System.out.println(checkQQ1("12345"));  //长度不在6-20之间返回false
        System.out.println(checkQQ1("012345"));  //0开头返回false
        System.out.println(checkQQ1("12345678abc"));  //不都是数字返回false
        System.out.println(checkQQ1("12345678"));  //true
    }

    //运用正则表达式
    //String提供了一个匹配正则表达式的方法
    //public boolean matches(String regex) 判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false
    private static boolean checkQQ1(String s) {
        return s!=null && s.matches("[1-9]\\d{5,19}");
    }

    //不运用正则表达式
    private static boolean checkQQ(String s) {
        if(s==null || s.startsWith("0") || s.length()<6 || s.length()>20){
            return false;
        }
        //执行到这里,说明不为空且开头不为0,长度在6-20之间
        //接下来要判断都是数字
        for (int i = 0; i < s.length(); i++) {
            //根据索引i提取当前位置的字符
            char c = s.charAt(i);
            if(c < '0' || c > '9'){
                return false;
            }
        }
        //执行到这里,说明都是数字
        return true;
    }
}

2.2 书写规则

public class demo {
    public static void main(String[] args) {
        // 1、字符类(只能匹配单个字符)
        System.out.println("a".matches("[abc]"));  // [abc]只能匹配a、b、c
        System.out.println("e".matches("[abcd]")); // false

        System.out.println("d".matches("[^abc]"));   // [^abc] 不能是abc
        System.out.println("a".matches("[^abc]"));  // false

        System.out.println("b".matches("[a-zA-Z]")); // [a-zA-Z] 只能是a-z A-Z的字符
        System.out.println("2".matches("[a-zA-Z]")); // false

        System.out.println("k".matches("[a-z&&[^bc]]")); // : a到z,除了b和c
        System.out.println("b".matches("[a-z&&[^bc]]")); // false

        System.out.println("ab".matches("[a-zA-Z0-9]")); // false 注意:以上带 [内容] 的规则都只能用于匹配单个字符

        // 2、预定义字符(只能匹配单个字符)  .  \d  \D   \s  \S  \w  \W
        System.out.println("徐".matches(".")); // .可以匹配任意字符(只能匹配单个)
        System.out.println("徐徐".matches(".")); // false

        //在Java中\是有特殊用途的,例如特殊字符 \n \t,因此希望是\的时候需要用\\
        // \转义
        System.out.println("\"");  //输出"
        // \n \t
        System.out.println("3".matches("\\d"));  // \d: 代表0-9
        System.out.println("a".matches("\\d"));  //false

        System.out.println(" ".matches("\\s"));   // \s: 代表一个空白字符
        System.out.println("a".matches("\\s")); // false

        System.out.println("a".matches("\\S"));  // \S: 代表一个非空白字符
        System.out.println(" ".matches("\\S")); // false

        System.out.println("a".matches("\\w"));  // \w: [a-zA-Z_0-9]
        System.out.println("_".matches("\\w")); // true
        System.out.println("1".matches("\\w")); //true
        System.out.println("徐".matches("\\w")); // false

        System.out.println("徐".matches("\\W"));  // [^\w]不能是a-zA-Z_0-9
        System.out.println("a".matches("\\W"));  // false

        System.out.println("23232".matches("\\d")); // false 注意:以上预定义字符都只能匹配单个字符。

        // 3、数量词: ?   *   +   {n}   {n, }  {n, m}
        System.out.println("a".matches("\\w?"));   // ? 代表0次或1次
        System.out.println("".matches("\\w?"));    // true
        System.out.println("abc".matches("\\w?")); // false

        System.out.println("abc12".matches("\\w*"));   // * 代表0次或多次
        System.out.println("".matches("\\w*"));        // true
        System.out.println("abc12张".matches("\\w*")); // false(\w不能匹配中文)

        System.out.println("abc12".matches("\\w+"));   // + 代表1次或多次
        System.out.println("".matches("\\w+"));       // false(+ 代表1次或多次,不能是0次)
        System.out.println("abc12张".matches("\\w+")); // false(\w不能匹配中文)

        System.out.println("a3c".matches("\\w{3}"));   // {3} 代表要正好是n次
        System.out.println("abcd".matches("\\w{3}"));  // false(大于3次)

        System.out.println("abcd".matches("\\w{3,}"));     // {3,} 代表是>=3次
        System.out.println("ab".matches("\\w{3,}"));     // false(小于3次)
        System.out.println("abcde徐".matches("\\w{3,}"));     // false(\w不能匹配中文)

        System.out.println("abc232d".matches("\\w{3,9}"));     // {3, 9} 代表是  大于等于3次,小于等于9次

        // 4、其他几个常用的符号:(?i)忽略大小写 、 或:| 、  分组:()
        System.out.println("abc".matches("(?i)abc")); // true
        System.out.println("ABC".matches("(?i)abc")); // true
        System.out.println("aBc".matches("a((?i)b)c")); // true
        System.out.println("ABc".matches("a((?i)b)c")); // false

        // 需求1:要求要么是3个小写字母,要么是3个数字。
        System.out.println("abc".matches("[a-z]{3}|\\d{3}")); // true
        System.out.println("ABC".matches("[a-z]{3}|\\d{3}")); // false
        System.out.println("123".matches("[a-z]{3}|\\d{3}")); // true
        System.out.println("A12".matches("[a-z]{3}|\\d{3}")); // false

        // 需求2:必须是”我爱“开头,中间可以是至少一个”编程“,最后至少是1个”666“
        System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+"));  //true
        System.out.println("我爱编程编程66666".matches("我爱(编程)+(666)+"));  //false
    }
}

 2.3 应用案例

public class demo {
    public static void main(String[] args) {
        //checkPhone();
        //checkEmail();
        checkTime();
    }

    private static void checkPhone() {
        while (true) {
            System.out.println("请输入您的电话号码(手机|座机):");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();  //nextLine()用来接收一行数据
            //校验手机号码的正则表达式
            if(phone.matches("(1[3-9]\\d{9})|(0\\d{2,3}-?[1-9]\\d{6,7})")){
                System.out.println("您输入的电话号码格式正确");
                break;
            }else{
                System.out.println("您输入的电话号码格式不正确");
            }
        }
    }

    private static void checkEmail() {
        while (true) {
            System.out.println("请输入您的邮箱:");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();  //nextLine()用来接收一行数据
            //校验邮箱的正则表达式
            if(phone.matches("\\w{2,}@\\w{2,10}(\\.\\w{2,10}){1,2}")){
                System.out.println("您输入的邮箱格式正确");
                break;
            }else{
                System.out.println("您输入的邮箱格式不正确");
            }
        }
    }

    private static void checkTime() {
        while (true) {
            System.out.println("请输入需要校验的时间(xx:xx:xx):");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();  //nextLine()用来接收一行数据
            //校验邮箱的正则表达式
            if(phone.matches("(([0-9])|(1[0-9])|(2[0-3]))\\:[0-5][0-9]\\:[0-5][0-9]")){
                System.out.println("您输入的时间格式正确");
                break;
            }else{
                System.out.println("您输入的时间格式不正确");
            }
        }
    }
}

2.4 用于查找信息

public class demo {
    public static void main(String[] args) {
        //需求:从以下内容中爬取出,手机,邮箱,座机、400电话等信息。
        String data = " 来学习Java,\n" +
                "        电话:1866668888,18699997777\n" +
                "        或者联系邮箱:boniu@qq.com,\n" +
                "        座机电话:01036517895,010-98951256\n" +
                "        邮箱:bozai@wosun.cn,\n" +
                "        邮箱:0_009@163.com,\n" +
                "        热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090";
        //定义爬取规则
        //手机号:1开头,第二位是3-9,剩下9位是0-9
        //座机号:
        // 区号是0开头,可能是3位或4位。
        // -可有可无
        // 座机号是7或8位,不能是0开头
        //邮箱:必须有@,@前要有两个及以上的字符,@后要有至少2个最多10个字符,最后至少接上一组.和两个以上的字符(如123@123.com)
        //热线电话:400开头,后接一组3位数和一组4位数,中间的-可有可无
            //正则表达式中不能随意写空格,会导致结果不对
        String regex = "(1[3-9]\\d{9})|(0\\d{2,3}-?[1-9]\\d{6,7})|(\\w{2,}@\\w{2,10}(\\.\\w{2,10}){1,2})|(400-?\\d{3}-?\\d{4})";

        //把正则表达式封装成一个Pattern对象
        Pattern pattern = Pattern.compile(regex);
        //通过pattern对象去获取查找内容的匹配器对象
        Matcher matcher = pattern.matcher(data);
        //定义一个循环开始爬取信息
        while(matcher.find()){
            String rs = matcher.group();  //获取找到的内容
            System.out.println(rs);
        }
    }
}

 2.5 用于搜索替换、分割内容

        正则表达式用于搜索替换、分割内容,需要结合String提供的如下方法完成

方法名说明
public String replaceAll(String regex,String newStr)按照正则表达式匹配的内容进行替换
public String[] split(String regex);按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组
public class demo {
    public static void main(String[] args) {
        //public String replaceAll(String regex,String newStr)	按照正则表达式匹配的内容进行替换
        // 需求:请把 古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成 “-”
        String s = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        System.out.println(s.replaceAll("\\w+", "-"));

        // 需求:某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成“我喜欢编程!”。
        String s2 = "我我我喜欢编编编编编编编编编编编编程程程!";
        /**
         * (.) :代表一组  .用来匹配任意字符
         * \\1 :为这个组声明一个组号:1号    分组引用
         * + :声明必须是重复的字
         * $1 :可以去取到第1组代表的那个重复的字
         */
        System.out.println(s2.replaceAll("(.)\\1+", "$1"));  //未接触过的知识

        //public String[] split(String regex);	按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组
        //需求:请把 古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中的人名获取出来。
        String s3 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        String[] arr = s3.split("\\w+");
        System.out.println(Arrays.toString(arr));
    }
}

三. 异常

        异常就是代表程序出现的问题

异常的体系

        分为 运行时异常编译时异常

代码层面上的异常处理

        · 抛出异常(throws)

                在方法上使用throws关键字,可以将方法内部出现的异常跑出去给调用者处理

方法 throws 异常1,异常2,异常3…{

        ……

}

        · 捕获异常(try…catch)

                直接捕获程序出现的异常

try{

        //监视可能出现异常的代码

}catch(异常类型1 变量){

        //处理异常

}catch(异常类型2 变量){

        //处理异常

}

public class demo {
    public static void main(String[] args) throws ParseException{
        //运行时异常(编译阶段不会出现错误提醒)
        //Integer.valueOf("abc");  //NumberFormatException

//        int[] arr = {1,2,3};
//        System.out.println(arr[3]);  //ArrayIndexOutOfBoundsException

        //编译时异常
        //快捷键 ctrl+Alt+T 可以添加try-catch
//        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //parse()把字符串时间解析成日期对象
            Date d = sdf.parse("2020-11-11 10:24");  //ParseException
            System.out.println(d);
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
    }
}

3.1 自定义异常

        Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类

异常的作用

        · 异常时用来查寻系统bug的关键参考信息

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

//demo
public class demo {
    public static void main(String[] args){
        //需求:保存一个合法的年龄、
        //运行时异常
//        try {
//            //saveAge(23);
//            saveAge(160);
//            System.out.println("底层执行成功");
//        } catch (Exception e) {
//            e.printStackTrace();
//            System.out.println("底层出现了bug");
//        }

        //编译时异常
//        try {
//            saveAge1(256);
//            System.out.println("saveAge1底层执行成功");
//        } catch (AgeIllegalException e) {
//            e.printStackTrace();
//            System.out.println("saveAge1底层出现了bug");
//        }
    }

    public static void saveAge1(int age) throws AgeIllegalException{
        if(age>0 && age<150){
            System.out.println("您输入的年龄"+age+"被成功保存");
        }else{
            //用一个异常对象来封装这个问题
            //throw 抛出去这个异常对象
            //throws 用在方法上,抛出方法内部的异常(因为这里是编译时异常,如果方法上不加throws AgeIllegalException底下的一行会标红)
            throw new AgeIllegalException("/age is illegal, your age is " + age);
        }
    }

    public static void saveAge(int age){
        if(age>0 && age<150){
            System.out.println("您输入的年龄"+age+"被成功保存");
        }else{
            //用一个异常对象来封装这个问题
            //throw 抛出去这个异常对象
            throw new AgeIllegalRuntimeException("/age is illegal, your age is " + age);
        }
    }
}


//AgeIllegalException 
//要继承Exception,才能成为一个编译时异常类
public class AgeIllegalException extends Exception {
    //重写构造器
    public AgeIllegalException() {
    }

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

//AgeIllegalRuntimeException
//要继承RuntimeException,才能成为一个运行时异常类
public class AgeIllegalRuntimeException extends RuntimeException {
    //重写构造器
    public AgeIllegalRuntimeException() {
    }

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

3.2 异常的处理

开发中对于异常的常见处理方式一:捕获异常,记录异常并相应合适的信息给用户

//demo
public class demo {
    public static void main(String[] args){
        try {
            test1();
        } catch (ParseException e) {
            System.out.println("您要解析的时间有问题");
            e.printStackTrace(); //打印出异常对象的信息
        } catch (FileNotFoundException e) {
            System.out.println("您要找的文件不存在");
            e.printStackTrace(); //打印出异常对象的信息
        }
    }

    public static void test1() throws ParseException, FileNotFoundException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //Date d = sdf.parse("2020-11-11 13:14");
        Date d = sdf.parse("2020-11-11 13:14:15");
        System.out.println(d);
        test2();
    }

    public static void test2() throws FileNotFoundException {
        //读取文件
        InputStream is = new FileInputStream("D:/1.jpg");
    }
}

//demo1 对demo中的代码进行一些改进
//因为自己写的时候往往不知道抛出异常的名字,因此可以统一抛出Exception
public class demo1 {
    public static void main(String[] args){
        try {
            test1();
        } catch (Exception e) {
            System.out.println("您当前的操作有问题");
            e.printStackTrace(); //打印出异常对象的信息
        }
    }

    public static void test1() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //Date d = sdf.parse("2020-11-11 13:14");
        Date d = sdf.parse("2020-11-11 13:14:15");
        System.out.println(d);
        test2();
    }

    public static void test2() throws Exception {
        //读取文件
        InputStream is = new FileInputStream("D:/1.jpg");
    }
}

开发中对于异常的常见处理方式二:捕获异常,尝试重新修复 

//目标:掌握异常的处理方式,捕获异常,尝试修复
public class demo {
    public static void main(String[] args){
        //需求:调用一个方法,让用户输入一个合适的价格返回为止
        //尝试修复
        while (true) {
            try {
                System.out.println(getMoney());
                break;
            } catch (Exception e) {
                System.out.println("请您输入合法的数字!!!");
            }
        }
    }

    public static double getMoney(){
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入一个合适的价格:");
            //这里可能会出现异常,因为用户输入的可能不是数字
            double money = sc.nextDouble();
            if(money<=0){
                System.out.println("您输入的价格有问题,请重新输入");
            }else{
                return money;
            }
        }
    }
}

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

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

相关文章

JVM——执行引擎

文章目录 1、概述2、计算机语言的发展史2.1、机器码2.2、汇编语言2.3、高级语言2.4、字节码 3、Java代码编译和执行过程4、解释器5、JIT编译器5.1、为什么HotSpot VM同时存在JIT编译器和解释器5.2、热点代码探测确定何时JIT5.3、设置执行模式5.4、C1编译器和C2编译器 6、AOT编译…

python实现桶排序

桶排序&#xff08;Bucket Sort&#xff09;是一种排序算法&#xff0c;它将待排序的元素分到有限数量的桶&#xff08;buckets&#xff09;中&#xff0c;然后分别对每个桶中的元素进行排序&#xff0c;最后按照顺序将所有的桶中的元素依次取出&#xff0c;即可得到有序序列。…

深入了解Kafka中Topic的神奇之处

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 深入了解Kafka中Topic的神奇之处 前言Topic的基本概念Kafka Topic 的定义&#xff1a;Kafka Topic 的基本原理&#xff1a;为何 Topic 是 Kafka 消息传递的核心组成部分&#xff1a; 创建和配置Topic创…

FairScale 库测试实验(一)-- 大模型训练基础之模型并行

DDP的分布式训练方法采用数据并行方式&#xff0c;相当于通过增大数据的batch来加快训练。但对于大模型&#xff08;LLM&#xff09;来说&#xff0c;DDP已经不适用了。因为LLMs的模型本身太大&#xff0c;一块GPU都放不下怎么可能去复制从而实现数据并行呢。所以LLM的训练采用…

Ansible常用模块详解

Ansible常用模块详解一、Ansible简介1、Ansible是什么&#xff1f;2、Ansible是怎么工作的&#xff1f;3、Ansible的特性 二、Ansible 环境安装部署三、Ansible 命令行模块1、command 模块2、shell 模块3、cron 模块4、user 模块5、group 模块6、copy 模块7、file 模块8、hostn…

阿里云服务器没有国外地域吗?

阿里云地域没有国外节点&#xff1f;有&#xff0c;阿里云服务器国外地域美国、日本、新加坡、韩国、英国及德国等&#xff0c;阿里云服务器地域遍布全球&#xff0c;共29个地域可选。如果您在购买阿里云服务器时&#xff0c;没有国外地域可选&#xff0c;那是因为活动上提供的…

基于SSM框架的婚庆平台设计与实现

目 录 摘 要 I Abstract II 引 言 1 1相关技术 3 1.1 SSM框架简介 3 1.2 MySQL数据库简介 3 1.3 MVC设计模式简介 3 1.4 本章小结 4 2系统分析 5 2.1功能需求 5 2.1.1 用户功能需求 5 2.1.2 管理员功能需求 6 2.2非功能需求 10 2.3本章小结 10 3系统设计 11 3.1总体设计 11 3.…

spark 实验二 RDD编程初级实践

目录 一. pyspark交互式编程示例&#xff08;学生选课成绩统计&#xff09; 该系总共有多少学生&#xff1b; 该系DataBase课程共有多少人选修&#xff1b; 各门课程的平均分是多少&#xff1b; 使用累加器计算共有多少人选了DataBase这门课。 二.编写独立应用程序实现数…

java Spring boot简述jetcache 并叙述后续文章安排

我们之前 讲了 Spring boot 整合 cache 使用 simple(默认) redis Ehcache memcached的几种方式 但是 始终有人觉得不够完善 提出了一些问题 例如 觉得 当前spring boot 对缓存过期的控制过于松散 不严谨 比较明显的体现就是 memcached过期时间在逻辑代码中控制 Ehcache的过期时…

spring boot 集成 mysql ,mybatisplus多数据源

1、需要的依赖&#xff0c;版本自行控制 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId> </dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java<…

神经网络 梯度与神经元参数w、b关系;梯度与导数关系

参考&#xff1a;https://blog.csdn.net/weixin_44259490/article/details/90295146 概念 梯度与w的关系可以用梯度下降公式来表示&#xff1a;ww−α ∂ c o s t ∂ w \frac{\partial cost}{\partial w} ∂w∂cost​&#xff0c;其中w表示网络的权重&#xff0c; ∂ c o s t…

练习3-softmax分类(李沐函数简要解析)与d2l.train_ch3缺失的简单解决方式

环境为:练习1的环境 网址为:https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.1007.top_right_bar_window_history.content.click 代码简要解析 导入模块 导入PyTorch 导入Torch中的nn模块 导入d2l中torch模块 并命名为d2l import torch from torch import nn…

实现鼠标移动el-select下拉框的label上面显示出table悬浮窗

首先是对vue代码 实现思路就是在el-option里面放一个span来包裹el-popover&#xff0c;里面在放tabe实现悬浮表格 <el-form-item label"原理图编号"><el-select v-model"data.number" placeholder"请选择" clearable multiple collaps…

C语言第三十七弹---文件操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 文件操作 1、文件的随机读写 1.1、fseek 1.2、ftell 1.3、rewind 2、文件读取结束的判定 2.1、被错误使用的 feof 3、文件缓冲区 总结 1、文件的随机读写…

阿里云主机地域怎么选择?哪个好?

阿里云服务器地域选择方法&#xff0c;如何选择速度更快、网络延迟更低的地域节点&#xff0c;地域指云服务器所在的地理位置区域&#xff0c;地域以城市划分&#xff0c;如北京、杭州、深圳及上海等&#xff0c;如何选择地域&#xff1f;建议根据用户所在地区就近选择地域&…

同等学力申硕专业介绍——管理学硕士

同等学力申硕的专业很多。 目前有十三大门类&#xff0c;分别是医学、法学、管理学、工学、教育学、经济学、艺术学、文学、历史学、理学、哲学、农学、军事学等&#xff0c;每个大门类中都有很多的细分专业。 今天为大家介绍同等学力申硕专业——管理学。 专业介绍 管理学是…

Java后端核心——Servlet

目录 一.概述 二.基础实现 1.导入坐标 2.定义实现类 3.注解 4.访问Servlet 三.执行流程 四.生命周期 1.加载和实例化 2.初始化 3.请求处理 4.服务终止 五.方法 1.init 2.service 3.destroy 4.getServletInfo 5.getServletConfig 六.体系结构 七.urlPatter…

Spring Boot中Excel数据导入导出的高效实现

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

能量不等式证明

波动方程初值问题能量不等式的证明 Gronwall 不等式 若非负函数 G ( τ ) G(\tau) G(τ) 在 [ 0 , T ] [0,T] [0,T] 上连续可微&#xff0c; G ( 0 ) 0 G(0)0 G(0)0&#xff0c;且对 τ ∈ [ 0 , T ] \tau\in[0,T] τ∈[0,T]满足 d G ( τ ) d τ ≤ C G ( τ ) F ( τ …

Using WebView from more than one process

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、问题过程源码追踪…