Java基础入门15:算法、正则表达式、异常

算法(选择排序、冒泡排序、二分查找)

选择排序

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

选择排序的关键:

确定总共需要选择几轮:数组的长度-1。

控制每轮从以前位置为基准,与后面元素选择几次。

冒泡排序

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

实现冒泡排序的关键步骤分析:

确定总共需要做几轮:数组的长度-1。

当前位置大于后一个位置则交换数据。

package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test1 {public static void main(String[] args) {//选择排序int[] arr = {12,14,23,11,21,5,2,8,9,29,19,10};for (int i = 0; i < arr.length - 1; i++) {for (int j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {int temp = arr[j];arr[j] = arr[i];arr[i] = temp;}}}System.out.println(Arrays.toString(arr));}}package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test2 {public static void main(String[] args) {//冒泡排序int[] arr = {2,4,7,5,8,9,0,1};for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}}System.out.println(Arrays.toString(arr));}
}package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test3 {public static void main(String[] args) {//选择排序int[] arr = {12,14,23,11,21,5,2,8,9,29,19,10};//算法优化for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[minIndex] > arr[j]) {minIndex = j;}}if (i != minIndex){int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}System.out.println(Arrays.toString(arr));}
}

二分查找法

package com.tichinajie.d1_aigorithm;import java.util.Arrays;public class Test4 {public static void main(String[] args) {//二分查找法查找数组中的元素int[] arr = {12,13,15,36,57,99};System.out.println(binarySearch(arr, 13));System.out.println(Arrays.binarySearch(arr, 12));}public static int binarySearch(int[] arr,int data){int left = 0;int right = arr.length - 1;while (left <= right){int middle = (left+right)/2;if (data > arr[middle]){left = middle + 1;}else if (data < arr[middle]){right = middle - 1;}else {return middle;}}return -1;//特殊结果,代表没有找到数据,数组中不存在该数据}
}

正则表达式

正则表达式就是由一些特殊的字符组成,代表的是一个规则。

作用一:用来校验数据是否合法

作用二:在一段文本中查找满足要求的内容

package com.tichinajie.d2_regex;
/*
* 目标:体验一下使用正则表达式来校验数据格式的合法性。
需求:校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头。
* */
public class RegexTest1 {public static void main(String[] args) {System.out.println(checkQQ("242343456"));System.out.println(checkQQ("0482734234"));System.out.println(checkQQ(null));System.out.println(checkQQ("r3423rr565"));System.out.println(checkQQ("12345"));System.out.println(checkQQ("223423534556457567568676785745634523"));System.out.println("------------------------------------------------------------------------");System.out.println(checkQQ2("242343456"));System.out.println(checkQQ2("0482734234"));System.out.println(checkQQ2(null));System.out.println(checkQQ2("r3423rr565"));System.out.println(checkQQ2("12345"));System.out.println(checkQQ2("223423534556457567568676785745634523"));}//使用正则表达式public static boolean checkQQ2(String qq){return qq != null && qq.matches("[1-9]\\d{5,19}");}public static boolean checkQQ(String qq){//看是否满足基本条件if (qq ==null || qq.length() < 6 || qq.length() > 20 || qq.startsWith("0")){return false;}//判断是否有字母for (int i = 0; i < qq.length(); i++) {char ch = qq.charAt(i);if (ch < '0' || ch > '9'){return false;}}return true;}
}

正则表达式的书写规则

 判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false。

正则表达式的是写规则:

字符类(只匹配单个字符)

预定义字符(只匹配单个字符)

数量词

package com.tichinajie.d2_regex;
//掌握正则表达式的书写规则
public class RegexTest2 {public static void main(String[] args) {//1、字符类(只能匹配单个字符)System.out.println("a".matches("[abc]")); //[abc]只能匹配a、b、cSystem.out.println("e".matches("[abcd]")); // falseSystem.out.println("d".matches("[^abc]")); //[^abc]不能是abcSystem.out.println("a".matches("[^abc]")); // falseSystem.out.println("b".matches("[a-zA-z]")); // [a-zA-Z] 只能是a-z A-Z的字符System.out.println("2".matches("[a-zA-Z]")); // falseSystem.out.println("k".matches("a-z && [^bc]")); // :a到z,除了b和cSystem.out.println("b".matches("a-z && [^bc]")); // falseSystem.out.println("ab".matches("[a-zA-Z0-9]"));//false 注意:以上带[内容]的规则都只能用于匹配单个字符//2、预定义字符(只能匹配单个字符).\d \D \s \s \w \WSystem.out.println("徐".matches("."));//.可以匹配任意字符System.out.println("徐徐".matches(".")); // false//\在Java中有特殊意义:\n换行\t代表一个缩进//如果在java中,希望\就是\必须转义System.out.println("\"");System.out.println("3".matches("\\d")); // \d: 0-9System.out.println("a".matches("\\d")); //falseSystem.out.println(" ".matches("\\s")); //s:代表一个空白字符System.out.println("a".matches("\\s")); // falseSystem.out.println("a".matches("\\S"));//\S:代表一个非空白字符System.out.println("".matches("\\S"));//falseSystem.out.println("a".matches("\\w"));//\w:[a-zA-Z_0-9]System.out.println("_".matches("\\w"));//trueSystem.out.println("".matches("\\w"));//falseSystem.out.println("徐".matches("\\W"));//[^\w]不能是a-zA-Z_0-9System.out.println("a".matches("\\W"));//falseSystem.out.println("23232".matches("\\d"));//false注意:以上预定义字符都只能匹配单个字符//3、数量词:? * + {n} {n,} {n,m}System.out.println("a".matches("\\w?"));//? 代表0次或1次System.out.println(" ".matches("\\w?"));//trueSystem.out.println("abc".matches("\\w?"));//falseSystem.out.println("abcI2".matches("\\w*"));//*代表0次或多次System.out.println("".matches("\\w*"));//trueSystem.out.println("abc12".matches("\\w*"));//falseSystem.out.println("a3c".matches("\\w{3}"));//{3}代表要正好是n次System.out.println("abcd".matches("\\w{3}"));//falseSystem.out.println("abcd".matches("\\w{3,}"));//{3,}代表是>=3次System.out.println("ab".matches("\\w{3,}"));//falseSystem.out.println("abcde徐".matches("\\w{3,}"));//falseSystem.out.println("abc232d".matches("\\w{3,9}"));//{3,9}代表是  大于等于3次,小于等于9次//4、其他几个常用的符号:(?i) 忽略大小写、 或:|、分组:()System.out.println("----------------------------------------------");System.out.println("abc".matches("(?i)abc"));//trueSystem.out.println("ABC".matches("(?i)abc"));//trueSystem.out.println("aBc".matches("a((?i)b)c"));//trueSystem.out.println("ABc".matches("a((?i)b)c"));//false//需求1:要求要么是3个小写字母,要么是3个数字。System.out.println("123".matches("\\d{3}|[a-z]{3}"));System.out.println("abc".matches("\\d{3}|[a-z]{3}"));System.out.println("aAc".matches("\\d{3}|[a-z]{3}"));//需求2:必须是“我爱“开头,中间可以是至少一个"编程“,最后至少是1个"666"System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+"));System.out.println("我爱编程编程6666666".matches("我爱(编程)+(666)+"));//false}
}

 正则表达式的应用

1、用于校验数据

package com.tichinajie.d2_regex;import java.util.Scanner;public class RegexTest3 {public static void main(String[] args) {//正则表达式的应用一,校验数据格式是否合法checkEmail();}public static void checkPhone(){Scanner sc = new Scanner(System.in);while (true){System.out.println("请您输入您的电话号码(手机I座机):");String phone = sc.nextLine();//18676769999  010-3424242424  0104644535if(phone.matches( "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")){System.out.println("您输入的号码格式正确~~~");break;}else {System.out.println("您输入的号码格式不正确~~~");}}}public static void checkEmail(){while (true) {System.out.println("请您输入您的邮箱:");Scanner sc = new Scanner(System.in);String email = sc.nextLine();/*** dlei0009@163.com*25143242@qq.com*itheima@itcast.com.cn*/if(email.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){System.out.println("您输入的邮箱格式正确~~~");break;}else{System.out.println("您输入的邮箱格式不正确~~~");}}}
}

2、用于查找信息

package com.tichinajie.d2_regex;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexTest4 {public static void main(String[] args) {//使用正则表达式method1();}//需求1:从以下内容中爬取出,手机,邮箱,座机、400电话等信息。public static void method1() {String data = "来黑马程序员学习Java,\n" +"电话:1866668888,18699997777\n" +"或者联系邮箱:boniu@itcast.cn,\n" +"座机电话:01036517895,010-98951256\n" +"邮箱:bozai@itcast.cn,\n" +"邮箱:dlei0009@163.com,\n" +"热线电话: 400-618-9090,400-618-4000,4006184000,4006189090";//1、定义爬取规则String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})|\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}"+ "|(400-?\\d{3,7}-?\\d{3,7})";//2、把正则表达式封装成一个Pattern对象Pattern pattern = Pattern.compile(regex);//3、通过pattern对象去获取查找内容的匹配器对象。Matcher matcher = pattern.matcher(data);//4、定义一个循环开始爬取信息while (matcher.find()) {String rs = matcher.group();//获取到了找到的内容了。System.out.println(rs);}}
}

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

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

package com.tichinajie.d2_regex;import java.util.Arrays;/***目标:掌握使用正则表达式做搜索替换,内容分割。*/
public class RegexTest5 {public static void main(String[] args) {//1、public String replaceAll(String regex,String newStr):按照正则表达式匹配的内容进行替换//需求1:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成"-"String s1="古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";System.out.println(s1.replaceAll("\\w+","-"));//需求2(拓展):某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成“我喜欢编程!"。String s2="我我我喜欢编编编编编编编编编编编编程程程";/***(.)一组:.匹配任意字符的。*\\:为这个组声明一个组号:1号*+:声明必须是重复的字*$1可以去到第1组代表的那个重复的字*/System.out.println(s2.replaceAll("(.)\\1+","$1"));//2、public String.[]split(String regex.):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。//需求1:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs.42425卡尔扎巴,中的人名获取出来。String s3="古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";String[] names = s3.split("\\w+");System.out.println(Arrays.toString(names));}
}

异常

异常的体系

Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,Sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。

Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。

1、运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)。

2、编译时异常:编译阶段就会出现错误提醒的(如:日期解析异常)。

抛出异常(throws)

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

捕获异常(try...catch)
直接捕获程序出现的异常​​​​​​​

package com.tichinajie.d3_exception;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*
* 目标:认识异常
* */
public class ExceptionTest1 {public static void main(String[] args) throws ParseException {// Integer.valueOf("abc");
//   int[] arr = {11, 22, 33};
//   System.out.println(arr[5]);SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");//  Date d = null;
//        try {
//            d = sdf.parse("2028-11-11 10:24");
//        } catch (ParseException e) {
//            throw new RuntimeException(e);
//        }System.out.println(d);}
}

自定义异常

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

自定义异常的种类

package com.tichinajie.d3_exception;//1、必须让这个类继承自RunTimeException,才能成为一个运行时异常类
public class AgeIllegalRuntimeException extends RuntimeException {public AgeIllegalRuntimeException() {}public AgeIllegalRuntimeException(String message) {super(message);}
}package com.tichinajie.d3_exception;//1、必须让这个类继承自RunTimeException,才能成为一个运行时异常类
public class AgeIllegalException extends RuntimeException {public AgeIllegalException() {}public AgeIllegalException(String message) {super(message);}
}package com.tichinajie.d3_exception;
/*
* 目标:掌握自定义异常,异常的应用
* */
public class ExceptionTest2 {public static void main(String[] args) {//需求:保存一个合法的年龄try{saveAge(15) ;System.out.println("底层执行成功的!");} catch (Exception e) {e.printStackTrace();System.out.println("底层出现了bug!");}try{saveAge2(25);System.out.println("saveAge2底层执行是成功的!");} catch (AgeIllegalException e){e.printStackTrace();System.out.println("saveAge2底层执行是出现bug的!");}}public static void saveAge2(int age) throws AgeIllegalException{if(age > 0 && age < 150){System.out.println("年龄被成功保存:" + age);}  else {//用一个异常对象封装这个问题//throw抛出去这个异常对象//throws 用在方法上,抛出方法内部的异常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);}}
}

异常的处理

开发中对于异常的常见处理方式:

​​​​​​​

package com.tichinajie.d3_exception;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*
* 目标异常处理
* */
public class ExceptionTest3 {public static void main(String[] args) {try {test1();} catch (FileNotFoundException e) {System.out.println("您要找的文件不存在~~");throw new RuntimeException(e);//打印这个异常对象的信息,记录下来} catch (ParseException e) {System.out.println("您要解析的时间有问题~~");throw new RuntimeException(e);//打印这个异常对象的信息,记录下来}}private static void test1() throws FileNotFoundException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");System.out.println(d);test2();}public static void test2() throws FileNotFoundException {//读取文件的InputStream is = new FileInputStream("D:/meinv.png");}
}package com.tichinajie.d3_exception;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*
* 目标异常处理
* */
public class ExceptionTest3_2 {public static void main(String[] args) {try {test1();} catch (Exception e) {System.out.println("您要找的文件不存在~~");e.printStackTrace();//打印这个异常对象的信息,记录下来}}private static void test1() throws Exception {SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");System.out.println(d);test2();}public static void test2() throws Exception {//读取文件的InputStream is = new FileInputStream("D:/meinv.png");}
}package com.tichinajie.d3_exception;import java.util.Scanner;public class ExceptionTest4 {public static void main(String[] args) {//需求:调用一个方法,让用户输入一个合适的价格返回为止while (true) {//尝试修复try {System.out.println(getMoney());} catch (Exception e) {System.out.println("请您输入合法的数字!!");}}}public static double getMoney(){Scanner sc = new Scanner(System.in);System.out.println("请输入合适的价格:");double money = sc.nextDouble();if (money >= 0){return money;}else {System.out.println("你输入的价格不合适");}return money;}
}

(本章图片均来自于黑马程序员视频)

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

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

相关文章

Typescript在AI产品中应用越来越广泛

AI产品中的应用 TypeScript 在 AI 产品中的应用逐渐增多&#xff0c;主要得益于其提供的类型安全、面向对象编程和模块化等特性&#xff0c;这些特性使得开发者能够构建可维护、可扩展和高性能的应用程序。 首先&#xff0c;TypeScript 作为 JavaScript 的超集&#xff0c;通…

15.基于session实现登录 前端项目部署

前端项目nginx部署 nginx配置文件 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 8080;server_name localhost;# 指定前端项目所…

线性DP(动态规划)

文章目录 数字三角形思路代码 最长上升子序列1思路代码 最长公共子序列思路代码 其实和背包一样&#xff0c;都不固定&#xff0c;这种类型的题每一道题都需要自己从之前的经验中去摸索。 数字三角形 题目链接 思路 只能从左上或者右上走过来&#xff0c;用一个二维数组&am…

python-A+B again

[题目描述] 小理有一个非常简单的问题给你&#xff0c;给你两个整数 A 和 B&#xff0c;你的任务是计算 AB。输入格式&#xff1a; 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数&#xff0c;然后 2∗T 行&#xff0c;分别表示 A 和 B 两个正整数。注意整数…

计算机网络面试题汇总

文章目录 计算机网络基础计算机网络体系结构(网络分层模型)OSI 七层模型是什么?每一层的作用是什么?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议为什么网络要分层,分层的好处?常见网络协议有哪些,每一层常见协议有哪些?应用层有哪些常见的协…

mysql5.7安装

1.创建一个software文件 2.先下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 3安装源包 rpm -ivh mysql-community-release-el7-5.noarch.rpm 可能会报错 改成命令 rpm -ivh mysql-community-release-el7-5.noarch.rpm --nodeps…

目标检测 | yolov6 原理和介绍

前言&#xff1a;目标检测 | yolov5 原理和介绍 后续&#xff1a; 1.简介 YOLOv6是由美团视觉智能部研发的一款目标检测框架&#xff0c;专注于工业应用&#xff0c;致力于提供极致的检测精度和推理效率。相较于YOLOv4和YOLOv5&#xff0c;YOLOv6在网络结构方面进行了深入优化…

在LabVIEW中高效读取大型CSV文件的方法

当尝试使用“读取分隔的电子表格VI”从大型CSV文件&#xff08;数百MB&#xff09;中读取数据时&#xff0c;可能会遇到内存已满错误。这是因为该VI会一次性读取整个文件并将其转换为数值数组&#xff0c;导致占用大量内存。 解决方案 可以使用“从文本文件VI读取”来部分读取…

技术探索之android项目结构

在新建项目时会自动生成很多文件&#xff0c;需要知道项目结构&#xff0c;我们需要编辑的文件的位置&#xff1a; app: 项目的代码资源都在其中&#xff0c;是我们工作的核心目录 build &#xff1a; 编译生成文件。生成的apk就在build/outputs/apk/debug里。apk在虚拟机里就…

MySQL——内置函数

时间函数 select * from msg where date_add(sendtime, interval 2 minute) > now(); 理解&#xff1a; ------------------------------|-----------|-------------|------------------ 初始时间 now() 初始时间2min 字符串 length函数返回字符串长度&#xff0c;以字节为…

【docker】docker数据卷与网络部署服务

Docker 网络模式 选择网络模式 Host Mode (主机模式) 特点: 容器与宿主机共享网络命名空间操作: docker run --nethost ... Container Mode (容器模式) 特点: 容器与指定容器共享网络命名空间操作: docker run --netcontainer:<container-id-or-name> ... None Mode (无…

营业额统计

文章目录 概要整体架构流程技术细节小结 概要 营业额统计是商业活动中一个非常重要的环节&#xff0c;它可以帮助企业了解自身的经营状况&#xff0c;并为决策提供依据。 需求分析以及接口设计 营业额统计是基于折现图来展现&#xff0c;并且按照天来展示的。实际上&#xf…

机器学习(1)--数据可视化

文章目录 数据可视化作用可视化方法实现可视化 总结 数据可视化 数据可视化是将数据以图形、图像、动画等视觉形式表示出来&#xff0c;以便人们能够更直观地理解、分析和交流数据中的信息。 作用 一个整理的好好的数据&#xff0c;我们为什么要将其可视化呢&#xff1f;将它…

苹果macOS 15 Sequoia投屏功能 实现Mac上iPhone桌面管理

8月14日消息&#xff0c;苹果最新的 iOS 18 和 macOS 15 Sequoia 测试版为 iPhone 投屏功能带来了重大更新。用户可以直接在 Mac 上管理 iPhone 桌面。 iPhone 镜像功能 macOS Sequoia最大的更新是带来了iPhone 镜像功能&#xff0c;这个功能能让给 Mac 用户将 iPhone 的屏幕镜…

异质性空间自回归模型 (HSAR)及 Stata 具体操作步骤

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、稳健性检验 六、程序代码及解释 七、代码运行结果 一、引言 在空间计量经济学中&#xff0c;异质性空间自回归模型&#xff08;Heterogeneous Spatial Autoregressive Model&#xff0c;HSAR&#xff09;是一种…

C#去掉文件夹或文件名非法字符

实现有输入字符串创建文件夹的功能&#xff0c;需要检查字符串中是否包含不能在文件夹中使用的非法字符 。C#中如果需要生成文件路径&#xff0c;有时会抛出“文件路径中出现非法字符”的异常&#xff0c;这时我们就会找到这个非法的字符串&#xff0c;然后Replace替换掉。net类…

Linux中以单容器部署Nginx+ASP.NET Core

强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器&#xff0c;本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程。 Nginx->ASP.NET Coe部署架构容器化 在Docker中部署Nginx--->ASP.NETCore 有两种选择&#xff0c; 第一种是在单容器…

使用Orthofinder进行系统发育直系同源推断

Introduction 确定基因序列之间的系统发育关系是比较生物学研究的基础。它为理解地球上生命的进化和多样性提供了框架&#xff0c;并能够在生物体之间推断生物知识。鉴于此过程对生物研究多个领域的核心重要性&#xff0c;人们开发了一系列不同的软件工具&#xff0c;试图在给…

console调试

简介 浏览器的开发者工具为我们提供了强大的调试系统&#xff0c;可以用来查看DOM树结构、CSS样式调试、动画调试、JavaScript代码断点调试等。今天我们就来看看console调试的那些实用的调试技巧。 我们使用最多的就是console.log()了&#xff0c;当然多数情况下&#xff0c;…

四十二、大数据技术之Kafka3.x(5)

&#x1f33b;&#x1f33b; 目录 一、Kafka-Eagle 监控1.1 MySQL 环境准备1.2 Kafka 环境准备1.3 Kafka-Eagle 安装1.4 Kafka-Eagle 页面操作 二、集成 SpringBoot2.1 前期准备2.2 SpringBoot 生产者2.3 SpringBoot 消费者 三、集成 Spark&#xff08;拓展 Scala 语言&#xf…