Java基础 - 8 - 算法、正则表达式、异常
一. 算法
什么是算法?
解决某个实际问题的过程和方法
学习算法的技巧?
先搞清楚算法的流程,再直接去推敲如何写算法
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)); //为空返回falseSystem.out.println(checkQQ("12345")); //长度不在6-20之间返回falseSystem.out.println(checkQQ("012345")); //0开头返回falseSystem.out.println(checkQQ("12345678abc")); //不都是数字返回falseSystem.out.println(checkQQ("12345678")); //trueSystem.out.println("===============================");//正则表达式校验System.out.println(checkQQ1(null)); //为空返回falseSystem.out.println(checkQQ1("12345")); //长度不在6-20之间返回falseSystem.out.println(checkQQ1("012345")); //0开头返回falseSystem.out.println(checkQQ1("12345678abc")); //不都是数字返回falseSystem.out.println(checkQQ1("12345678")); //true}//运用正则表达式//String提供了一个匹配正则表达式的方法//public boolean matches(String regex) 判断字符串是否匹配正则表达式,匹配返回true,不匹配返回falseprivate 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、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,因此希望是\的时候需要用\\// \转义System.out.println("\""); //输出"// \n \tSystem.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("1".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("abc12".matches("\\w*")); // * 代表0次或多次System.out.println("".matches("\\w*")); // trueSystem.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")); // 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("abc".matches("[a-z]{3}|\\d{3}")); // trueSystem.out.println("ABC".matches("[a-z]{3}|\\d{3}")); // falseSystem.out.println("123".matches("[a-z]{3}|\\d{3}")); // trueSystem.out.println("A12".matches("[a-z]{3}|\\d{3}")); // false// 需求2:必须是”我爱“开头,中间可以是至少一个”编程“,最后至少是1个”666“System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+")); //trueSystem.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"); //ParseExceptionSystem.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;}}}
}
相关文章:

Java基础 - 8 - 算法、正则表达式、异常
一. 算法 什么是算法? 解决某个实际问题的过程和方法 学习算法的技巧? 先搞清楚算法的流程,再直接去推敲如何写算法 1.1 排序算法 1.1.1 冒泡排序 每次从数组中找出最大值放在数组的后面去 public class demo {public static void main(S…...

gRPC-第二代rpc服务
在如今云原生技术的大环境下,rpc服务作为最重要的互联网技术,蓬勃发展,诞生了许多知名基于rpc协议的框架,其中就有本文的主角gRPC技术。 一款高性能、开源的通用rpc框架 作者作为一名在JD实习的Cpper,经过一段时间的学…...
Node.js是什么?
概念:Node.js1运行在服务器端的js,用来编写服务器 特点:单线程、异步、非阻塞、统一API 是一个构建在V8引擎之上的js运行环境,它使得js可以运行在浏览器以外的地方,相对于大部分的服务器端语言来说,Node.J…...

java SSM厂房管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM厂房管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…...

uniapp实现---类似购物车全选
目录 一、实现思路 二、实现步骤 ①view部分展示 ②JavaScript 内容 ③css中样式展示 三、效果展示 四、小结 注意事项 一、实现思路 点击商家复选框,可选中当前商家下的所有商品。点击全选,选中全部商家的商品 添加单个多选框,在将多选…...
Java:List列表去重有序和无序
目录 待去重列表HashSet去重(不保证顺序)TreeSet去重(不保证顺序)LinkedHashSet去重(保证顺序)遍历List去重(保证顺序)Java8中Stream流处理(保证顺序)参考文章 待去重列表 // 列表 …...

Python绘图-12地理数据可视化
Matplotlib 自 带 4 类别 地理投影: Aitoff, Hammer, Mollweide 及 Lambert 投影,可以 结 合以下四 张 不同 的 图 了解四 种 不同投影 区别 。 12.1Aitoff投影 12.1.1图像呈现 12.1.2绘图代码 import numpy as np # 导入numpy库,用于…...

NineData与OceanBase完成产品兼容认证,共筑企业级数据库新生态
近日,云原生智能数据管理平台 NineData 和北京奥星贝斯科技有限公司的 OceanBase 数据库完成产品兼容互认证。经过严格的联合测试,双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。 此次 NineData 与 OceanBase 完成产品兼容认证…...
旅游专业VR虚拟仿真情景教学实训
一、生动的情景模拟 VR技术能够创建出高度逼真的虚拟环境,使学生能够身临其境地体验旅游场景。无论是古色古香的古代建筑,还是充满异国情调的热带雨林,亦或是繁华的都市风光,VR都能一一呈现。这种沉浸式的体验,使得学…...

解决方案TypeError: string indices must be integers
文章目录 一、现象:二、解决方案 一、现象: PyTorch深度学习框架,运行bert-mini,本地环境是torch1.4-gpu,发现报错显示:TypeError: string indices must be integers 后面报字符问题,百度过找…...

【论文阅读】Segment Anything论文梳理
Abstract 我们介绍了Segment Anything(SA)项目:新的图像分割任务、模型和数据集。高效的数据循环采集,使我们建立了迄今为止最大的分割数据集,在1100万张图像中,共超过10亿个掩码。 该模型被设计和训练为可…...

接口自动化测试框架搭建:基于python+requests+pytest+allure实现
众所周知,目前市面上大部分的企业实施接口自动化最常用的有两种方式: 1、基于代码类的接口自动化,如: PythonRequestsPytestAllure报告定制 2、基于工具类的接口自动化,如: PostmanNewmanJenkinsGit/svnJme…...
蓝桥杯(3.9)
1210. 连号区间数 蓝桥杯暴力过80% import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] res new int[n];int[] copy new int[n];for(int i0;i&…...

万物皆可Find My,伦茨科技ST17H6x芯片赋能产品苹果Find My功能
苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、Ai…...
UHF无线麦克风方案的特点
U段无线麦克风方案是一种基于UHF频段的无线音频传输技术。相比于传统的VHF频段和2.4GHZ频段,U段频谱资源更为宽阔,信号传输更加稳定可靠。 1.广阔的频谱资源:U段频段通常指450MHZ至900MH之间的频谱范围,相比于VHF频段的100MH至30…...

STM32 学习10 PWM输出
STM32 学习10 PWM输出 一、PWM简介1. PWM的概念2. PWM的工作原理3. PWM 常用的应用场景 二、一些概念1. 频率2. 占空比 三、STM32F1 PWM介绍1. 定时器与寄存器(1)**自动重装载寄存器(ARR)**:(2)…...
SQL语言(数据库编程)
一.select查询 在数据库编程中,SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库管理系统(RDBMS)的标准编程语言。其中,SELECT 是 SQL 中最常用的查询语句,用于从数据库表中检索数据。 下面是一个基本的 SELECT 查询的示例: SELECT column1…...
C#面向对象(OOPs)中的多态性
本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com C#面向对象(OOPs)中的多态性 概述:在编程语言和类型理论中,多态性是为不同类型的实体提供单个接口,或者使用单个符号来表示多个不同的类型。多态对象是能够呈现多种形式的…...

(二十一)从零开始搭建k8s集群——kubernates核心组件及功能介绍
前言 Kubernetes是一个可移植、可扩展、开源的平台,用于管理容器化的工作负载和服务,它促进了声明性配置和自动化。Kubernetes容器可以持续开发、集成和部署:可靠且频繁地构建和部署容器镜像,快速有效地回滚;开发与运…...

[云原生] k8s之存储卷
一、emptyDir存储卷 当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...

Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...