Java异常和文件

news2024/7/16 19:45:28

一、异常

1.定义

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

体系结构:

 最上层的是 Throwable 类,下面有两个子类:

① Error:代表系统级别的问题(属于严重问题,比如:内存溢出)。

           系统一旦出现问题,Sun 公司就会把这些错误封装成 Error 对象。

           Error 是给 Sun 公司自己用的,不是给程序员用的。(如硬件问题:开发人员无法处理)。

② Exception:异常,代表程序可能出现的问题。、

                   我们通常会用 Exception 以及他的子类来封装程序出现的问题。


异常分为两类:

① 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。

                        运行时出现的异常(如:数组索引越界异常)

 细节:

编译阶段不会报错,运行时代码出错而导致程序出现的问题,一般是由参数传递错误带来的问题。

② 编译时异常:直接继承于 Exception,编译阶段就会出现出现异常提醒(如:日期解析异常)。

手动处理后,代码则不会报错:

细节: 

① 编译阶段:java不会运行代码,只会检查语法是否错误,或者做一些优化。

 ② 编译阶段需要进行处理, 作用在于提醒程序员检查本地信息(语法是否正确,文件是否存在)。

2.作用

① 异常用来查看 bug 的关键参考信息

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


需求:创建一个学生对象,年龄只能是20-30岁,否则报错

在过去,我们只能通过打印到控制台的方式, 但调用者并不知晓,程序仍旧正常运行。

我们可以通过将异常作为返回值进行返回,这样调用者就会拿到一个异常,知晓底层出现的问题。

调用者在拿到异常之后,会有两种选择:

① 自己单独处理

② 打印在控制台上(默认)

3.异常的处理方式 

(1)JVM 默认的处理方式:

把异常的名称,异常原因以及异常出现的位置等信息输出在控制台。

程序立即停止执行,下面的代码则不会再执行了。

(2)自己处理(捕获异常)

目的:当代码出现异常时,可以让程序继续往下执行,而不是停止虚拟机。

细节:

在 try 中运行错误代码后,程序就会创建一个对应的异常对象(new ArithmeticException);

再拿着这个对象,和 catch 的小括号进行比对,看括号中的异常变量 e 是否可以接收这个对象:

        如果能被接收,就表示异常被捕获,继续执行 catch 中的代码,然后往下执行。

        如果不能接收,异常交给 JVM 进行处理


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

如果 try 中没有遇到问题,会把 try 中的代码全部执行完毕,不会执行 catch 中的代码。

结论:只有当出现了异常,才会执行 catch 中的代码


Question2: 如果 try 中可能会遇到多个问题,会怎么执行?

如果 try 中出现多个问题,在遇到第一个问题后,就会直接跳转到对应的 catch 中进行捕获。

捕获成功后,执行 catch 中的代码。但 try 中剩下的代码不会在看了,直接跳过。 

如果没有对应的 catch 与之匹配,则交给 JVM 进行处理

Tips1:一般情况下,当可能出现多种异常时,我们会写多个异常与之对应,使其一定能成功捕获。

Tips2: JDK7后,我们可以在一个 catch 中捕获多个异常,中间用 | 隔开。

                表示如果出现了A异常或B异常,采用同一种处理方案。

注意:

如果要捕获多个异常,这些异常中如果存在继承关系的话,那么父类一定要写在最下面,否则报错。

因为 Exception 是异常体系中的顶级父类,任何异常都属于它,都可以被它接收(多态)。

所以 多个异常出现时,父类只能写在最下方。

如果写在上方,则一定能够被捕获,下方的异常则不会执行。 


在上面,我们捕获异常之后,都是通过直接书写打印语句进行处理的。

Throwable 定义了 3 个成员方法,可以直接 返回 / 输出 错误信息。

细节:

① getMessage 和 toString 方法,返回的都是 String 类型的错误提示信息,需要书写打印语句。

② printStackTrace 方法的返回值类型是 void,会直接在控制台进行输出错误信息。

     而且错误信息要比前两个方法更为全面,所以最为常用

③ printStackTrace 方法底层是利用 System.err.println 进行输出,将异常的错误信息以红色字体输出在控制台上(因为多线程的关系,输出顺序和代码的顺序可能不一致)。

④ printStackTrace 方法仅仅是打印异常的错误信息,并不会停止程序运行

(3)抛出异常

在一个方法中,如果出现了异常。

方法就没有继续运行下去的意义了,此时可以采取抛出处理。

让该方法结束运行,并告诉调用者出现了问题。

抛出异常分为两种:throws 和 throw

① throws:写在方法定义处,表示声明一个异常。告诉调用者,使用本方法可能会有那些异常。

作用:声明可能出现的异常,向上抛出,让调用者知晓,方便快速进行处理

        (调用者可以立马知晓会出现什么异常,进行捕获,可以避免不匹配的异常处理)

注意:

编译时异常:必须要声明

运行时异常:可以不声明 

 ② throw:写在方法内,用于结束方法。

                手动抛出异常对象,交给调用者,调用者针对异常进行处理。

public class CatchDemo4 {
    public static void main(String[] args) {
        int[] arr = {};
        int max = 0;
        try {
            max = getMax(arr);
        } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        System.out.println(max);
    }

    //求数组的最大值
    public static int getMax(int[] arr) {
        if (arr == null) {
            //手动抛出异常
            throw new NullPointerException();
        }
        if (arr.length == 0) {
            //手动抛出异常
            throw new ArrayIndexOutOfBoundsException();
        }
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
}

 注:手动抛出异常后,就结束了方法,方法中下面的的代码就不会再执行了。 

4.自定义异常

(1)引言

Question:为什么需要自定义异常呢?

假设现在要录入一个学生信息,姓名长度需要在 3~10 之间,年龄需要在 18~40 之间。

那么在 set 方法进行赋值时,数据不正确的话,该抛出何种异常呢?

我们发现,找不到一个合适的异常来描述这两个问题信息。

所以只能被迫采用运行时异常的父类 RuntimeException。

但这样的缺点是:无法单独处理这两个异常的信息,不能把姓名和年龄的处理方案分开。

所以,我们需要自定义异常类来描述这两个异常。


(2)步骤:

① 定义异常类(类名:异常名+Exception)

② 写继承关系(运行时异常:继承 RunTimeException;编译时异常:继承 Exception)

③ 写空参构造

④ 写带参构造

意义:为了让控制台的报错信息更加的见名知意。

通过自定义异常,可以针对不同的异常,设置不用的处理方案,且这些方案可以独立存在。

细节:

① 选择继承关系时,遵循:

     运行时异常 RunTimeException :表示由于参数错误而导致的问题

     编译时异常 Exception :提醒程序员检查本地信息

② 如果继承的是编译时异常 Exception,那么在方法中抛出该异常时,必须同时用 throws 声明可能出现的异常,否则报错。

二、File文件

1.定义

File 对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径

这个路径可以是存在的,也允许是不存在的。

路径分为相对路径和绝对路径两种:

绝对路径:带盘符的;

相对路径: 不带盘符的,默认在当前项目下找。

2.方法

(1)获取 File 对象

public class FileObject {
    public static void main(String[] args) {
        //1.根据字符串表示的路径,变成File对象
        String str = "C:\\Users\\24285\\Desktop\\a.txt";
        File f1 = new File(str);
        System.out.println(f1);// C:\Users\24285\Desktop\a.txt

        //2.根据父路径字符串和子路径字符串创建File对象
        // 父级路径:C:\Users\24285\Desktop
        // 子级路径:a.txt
        String parent = "C:\\Users\\24285\\Desktop";
        String child = "a.txt";
        File f2 = new File(parent, child);
        System.out.println(f2);// C:\Users\24285\Desktop\a.txt

        //3.将一个File表示的路径和一个字符串表示的路径进行拼接,创建File对象
        File parent2 = new File("C:\\Users\\24285\\Desktop");
        String child2 = "a.txt";
        File f3 = new File(parent2, child2);
        System.out.println(f3);// C:\Users\24285\Desktop\a.txt
    }
}

 细节:

① 路径只有变成 File 对象后,才能调用 File 类的一系列方法(如修改、删除等),否则 Java 只认为是一个普通的字符串。

② 根据父路径字符串和子路径字符串创建 File 对象时:

最好直接使用:File f2 = new File(parent, child);

而不是手动拼接:File f2 = new File(parent + "\\" + child);

因为在不同的操作系统下,路径的分隔符不一样,windows系统中用 \\,Linux中用 /

此时如果代码部署到另一个系统上运行,就会发生错误。

直接使用  new File(parent, child) 的话,在底层会先获取 os ,根据不同的 os 选择不同的分隔符。

(2)常见成员方法 

① 判断

 细节:

存在是前提条件,只有存在,才能判断是不是文件或者文件夹。

如果文件或者文件夹根本不存在,那么即使名字的确是文件名或者文件夹名,也返回 false。

② 获取
I. length 方法

细节:

① length 方法只能获取文件的大小,单位是字节。

② length 方法不能获取文件夹的大小,如果想要获取文件夹的大小,需要计算这个文件夹中所有文件的大小,再累加计算总和。

II. getAbsolutePath 方法

 III. getPath 方法
public class FileGet {
    public static void main(String[] args) {
        File f1 = new File("D:\\text\\aaa.txt");//绝对路径
        File f2 = new File("File\\a.txt");//相对路径

        //3.getPath  返回定义文件对象时使用的路径
        String path1 = f1.getPath();
        System.out.println(path1);//D:\text\aaa.txt

        String path2 = f2.getPath();
        System.out.println(path2);//File\a.txt
    }
}

简单来说:就是构造方法中的参数是什么,返回的就是什么

Ⅳ. getName 方法
public class FileGet {
    public static void main(String[] args) {
        File f1 = new File("D:\\text\\aaa.txt");
        File f2 = new File("D:\\text");

        //4.getName  获取文件的名字(带后缀名)
        String name1 = f1.getName();
        System.out.println(name1);//aaa.txt

        String name2 = f2.getName();
        System.out.println(name2);//text
    }
}

 细节:

① 如果是文件,就会返回 文件名.后缀名(aaa:文件名        .txt:后缀名、扩展名)

② 如果是文件夹,返回的就是文件夹的名字

Ⅴ. lastModified 方法
public class FileGet {
    public static void main(String[] args) {
        File f1 = new File("D:\\text\\aaa.txt");

        //5.lastModified  返回文件的最后修改时间(时间毫秒值)
        long time = f1.lastModified();
        System.out.println(time);//1718450498844

        //将毫秒值转换成字符串表示的时间
        ZonedDateTime date = Instant.ofEpochMilli(time).atZone(ZoneId.of("Asia/Shanghai"));
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");
        String str = dtf.format(date);
        System.out.println(str);//2024-06-15 19:21:38 周六 下午
    }
}
③ 创建和删除 

I.  createNewFile 方法
public class FileCreate {
    public static void main(String[] args) throws IOException {
        //1.createNewFile  创建一个新的空的文件
        File f1 = new File("D:\\text\\bbb.txt");
        boolean b1 = f1.createNewFile();
        System.out.println(b1);//true

        try {
            File f2 = new File("D:\\text\\ccc\\aaa.txt");
            boolean b2 = f2.createNewFile();
            System.out.println(b2);
        } catch (IOException e) {
            e.printStackTrace();
        }

        File f3 = new File("D:\\text\\ddd");
        boolean b3 = f3.createNewFile();
        System.out.println(b3);//true
    }
}

运行结果:

细节:

① 如果当前路径表示的文件是不存在的,则创建成功,方法返回 true;

    如果当前路径表示的文件是存在的,则创建失败,方法返回 false。

② 如果父级路径是不存在的,那么方法会产生 IOException 异常。

③ createNewFile 方法创建的一定是文件,如果路径中不含后缀名,则创建一个没有后缀的文件。

II. mkdir 方法
public class MakeDir {
    public static void main(String[] args) {
        //2.mkdir  make directory 创建文件夹(目录)
        File f1 = new File("D:\\text\\ccc");
        boolean b1 = f1.mkdir();
        System.out.println(b1);//true

        File f2 = new File("D:\\text\\ddd");
        boolean b2 = f2.mkdir();
        System.out.println(b2);//false

        File f3 = new File("D:\\text\\aaa\\bbb");
        boolean b3 = f3.mkdir();
        System.out.println(b3);//false
    }
}

运行结果:

细节:

① windows 当中路径是唯一的,如果当前路径已经存在,则创建失败,返回 false。

    虽然 ddd 文件夹不存在,但 ddd 文件存在。路径唯一,所以创建失败。

② mkdir 方法只能创建单级文件夹,无法创建多级文件夹。

III. mkdirs 方法
public class MakeDirs {
    public static void main(String[] args) {
        //3.mkdirs  创建多级文件夹
        File f1 = new File("D:\\text\\aaa\\bbb");
        boolean b1 = f1.mkdirs();
        System.out.println(b1);//true

        //3.mkdirs  创建多级文件夹
        File f2 = new File("D:\\text\\bbb");
        boolean b2 = f2.mkdirs();
        System.out.println(b2);//true
    }
}

运行结果:

细节:

mkdirs 既可以创建多级文件夹,也可以创建单级文件夹。


Question:既然 mkdirs 都可以,那为什么还需要 mkdir 呢?

在 mkdirs 的底层,也会先使用 mkdir 方法。

如果不行,才会执行自己的代码逻辑。

结论:在以后只要创建文件夹,都用 mkdirs 就行了

Ⅳ. delete方法
public class FileDelete {
    public static void main(String[] args) {
        //4.delete  删除文件和空文件夹
        File f1 = new File("D:\\text\\aaa.txt");
        boolean b1 = f1.delete();
        System.out.println(b1);//true

        File f2 = new File("D:\\text\\aaa");
        boolean b2 = f2.delete();
        System.out.println(b2);//false

        File f3 = new File("D:\\text\\bbb");
        boolean b3 = f3.delete();
        System.out.println(b3);//true
    }
}

运行结果:

细节:

delete 方法只能删除文件和空文件夹,且直接删除,不走回收站。

如果删除的是非空文件夹,则删除失败,返回 false 。


Question:如何删除一个有内容的文件夹(多级文件夹)呢?--> 递归

public class MultilevelFileDelete {
    public static void main(String[] args) {
        File file = new File("D:\\text");
        delete(file);
    }

    public static void delete(File src) {
        File[] files = src.listFiles();
        //1.先删除文件夹中的所有内容
        for (File f : files) {
            //是文件 --> 删除
            //不是 --> 递归进入
            if (f.isFile()) {
                f.delete();
            } else {
                delete(f);
            }
        }
        //2.再删除文件夹本身
        src.delete();
    }
}
④ 获取并遍历

I. listFiles 方法 (重点掌握)
public class ListFile {
    public static void main(String[] args) {
        File f = new File("D:\\text");
        //listFiles  获取当前该路径下所有内容(文件和文件夹)
        File[] files = f.listFiles();
        for (File file : files) {
            //file依次表示text文件夹中的每一个文件或者文件夹
            System.out.println(file);
        }
    }
}

运行结果:

 细节:

①  当调用者 File 表示的路径不存在时,返回 null。

② 当调用者 File 表示的路径是文件时,返回 null。

③ 当调用者 File 表示的路径是一个空文件夹时,返回一个长度为 0 的数组。

④ 当调用者 File 表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回。

⑤ 当调用者 File 表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File 数组中返回,包含隐藏文件。

⑥ 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null。

II. listRoots 和 list 方法
public class FileDemo1 {
    public static void main(String[] args) {
        //1.listRoots  获取系统中所有的盘符
        File[] arr = File.listRoots();
        System.out.println(Arrays.toString(arr));

        //2.list()    获取当前该路径下所有内容(仅仅能获取名字)
        File f1 = new File("D:\\text");
        String[] arr2 = f1.list();
        for (String s : arr2) {
            System.out.println(s);
        }
    }
}

运行结果:

细节:

① 文件系统根就是盘符

② list 方法也可以获取当前该路径下所有内容,但仅仅能获取名字

Ⅲ. 文件名过滤器

需求:获取 D:\\text 文件夹里面所有的 txt 文件

1) list(FilenameFilter filter)
public class FileDemo2 {
    public static void main(String[] args) {
        File f = new File("D:\\text");

        String[] arr = f.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File src = new File(dir, name);
                return src.isFile() && name.endsWith(".txt");
            }
        });

        System.out.println(Arrays.toString(arr));//[bbb.txt]
    }
}

细节:

① accept 方法的形参,依次表示 text 文件夹里面每一个文件或者文件夹的路径

       参数一:父级路径

        参数二:子级路径

        返回值:如果返回值为true,就表示当前路径保留

                      如果返回值为false,就表示当前路径舍弃不要

② FilenameFilter 是一个函数式接口,可以使用 Lambda 表达式。


③ 用 list 方法实现的文件过滤器,获取的内容也仅仅只有名字。 

2)listFiles(FileFilter filter)
public class FileDemo3 {
    public static void main(String[] args) {
        File f = new File("D:\\text");
        //调用listFiles(FileFilter filter)
        File[] arr = f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile() && pathname.getName().endsWith(".txt");
            }
        });
        System.out.println(Arrays.toString(arr));//[D:\text\bbb.txt]
    }
}
3)listFiles(FilenameFilter filter)
public class FileDemo4 {
    public static void main(String[] args) {
        File f = new File("D:\\text");

        //调用listFiles(FilenameFilter filter)
        File[] arr = f.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File src = new File(dir, name);
                return src.isFile() && name.endsWith(".txt");
            }
        });
        System.out.println(Arrays.toString(arr));//[D:\text\bbb.txt]
    }
}

细节:

accept 中的形参:

        dir:表示父级路径

        name:表示子级路径

dir + name 就是 2)中 accept 的形参 pathname

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

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

相关文章

VScode基本使用

VScode下载安装&#xff1a; Visual Studio Code - Code Editing. Redefined MinGW的下载安装&#xff1a; MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net x86是64位处理器架构&#xff0c;i686是32为处理器架构。 POSIX和Win32是两种不同的操…

java文件传输小工具 java17+springboot3+thymeleaf

背景 在和同事工作中经常需要传输文件&#xff0c;但是公网传输太慢&#xff0c;业务方不是计算机专业直接用命令行沟通麻烦。 本小工具通过页面可视化方便用户使用&#xff0c;端口9090&#xff0c;启动默认展示当前登陆本机用户的桌面。 代码开源&#xff1a; https://git…

SM9加密算法:安全、高效的国产密码技术

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。加密算法作为保障信息安全的核心技术&#xff0c;受到了广泛关注。在我国&#xff0c;一种名为SM9的加密算法逐渐崭露头角&#xff0c;凭借其卓越的安全性能和高效计算能力&#xff0c;成为了新一代国产密码技术的代表…

NGINX_九 nginx_proxy代理

九 nginx_proxy代理 1.代理 1.1 代理原理 反向代理产生的背景&#xff1a; 在计算机世界里&#xff0c;由于单个服务器的处理客户端&#xff08;用户&#xff09;请求能力有一个极限&#xff0c;当用户的接入请求蜂拥而入时&#xff0c;会造成服务器忙不过来的局面&#xff0…

使用Jetpack Compose和DummyJSON加速你的Android开发

使用Jetpack Compose和DummyJSON加速你的Android开发 在现代Android开发中&#xff0c;Jetpack Compose提供了一种全新的UI构建方式&#xff0c;同时DummyJSON简化了开发过程中数据获取的复杂性。本文将详细介绍一个名为firefly-compose的Jetpack Compose模板应用程序&#xf…

电脑一键还原系统,小白也能轻松操作!

电脑一键还原系统是一项非常实用的功能&#xff0c;当电脑遇到无法解决的问题或需要恢复到出厂设置时&#xff0c;用户可以通过一键还原功能快速恢复系统到之前的状态。这项功能不仅可以节省时间&#xff0c;还能有效解决系统问题。本文将介绍三种电脑一键还原系统的方法&#…

【React】Lodash---groupBy() 分组

例子 _.groupBy([6.1, 4.2, 6.3], Math.floor); // > { 4: [4.2], 6: [6.1, 6.3] }// The _.property iteratee shorthand. _.groupBy([one, two, three], length); // > { 3: [one, two], 5: [three] }思路分析 来源 定义一个名为groupBy的方法&#xff0c;通过扩展Ar…

AI界的“视频滤镜”(Stable Diffusion进阶篇-TemporalKit视频风格转化),手把手教你制作原创AI视频

大家好&#xff0c;我是向阳 在之前的文章中我也分享过如何进行AI视频的制作&#xff0c;说是AI视频其实也就是通过Stable Diffusion进行视频重绘&#xff0c;也就是将一个视频一帧一帧重绘为自己想要的画面&#xff0c;然后再连贯起来成为视频。 这个东西其实比较耗费时间和…

智能猫砂盆是养猫必需品吗?三个好用品牌让你实现铲屎自动化!

随着现代社会的快节奏和压力增大&#xff0c;许多人开始因工作、旅行或其他紧急情况需要暂时离家&#xff0c;但这样的话&#xff0c;大家又要如何确保猫咪的猫砂盆在无人照料的情况下依旧保持清洁&#xff1f;尤其在炎热的季节&#xff0c;猫砂盆若长时间未得到清理&#xff0…

英伟达中国特供芯片降价背后:巨头与市场的较量

英伟达&#xff0c;这家曾经在人工智能芯片领域独领风骚的巨头&#xff0c;近期在中国市场遭遇了一些挑战。为了应对来自华为等中国本土企业的竞争&#xff0c;英伟达不得不采取降价策略&#xff0c;调整其专为中国市场打造的H20芯片价格&#xff0c;甚至低于华为的同类产品。这…

数据可视化实验五:seaborn绘制进阶图形

目录 一、绘制动态轨迹图 1.1 代码实现 1.2 绘制结果 二、使用seaborn绘制关系图 2.1 绘制散点图分析产品开发部已离职的员工的评分与平均工作时间 2.1.1 代码实现 2.1.2 绘制结果 ​编辑 2.2 基于波士顿房价数据&#xff0c;绘制房间数和房屋价格的折线图 2.2.1 代码…

人工智能产品经理,行业巨头争夺的稀缺人才

前言 在当今这个由数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;正迅速成为推动各行各业创新的核心力量。随着行业巨头纷纷布局人工智能领域&#xff0c;对于专业人才的需求也日益增长。特别是人工智能产品经理这一岗位&#xff0c;缺口高达6.8万&#xff0c…

mac安装高版本git(更新git)

问题 问题&#xff1a;新下载的idea&#xff0c;此idea的版本较高&#xff0c;但是在工作发现这个版本的git存在一定漏洞会导致一些信息泄露问题。 1.安装Homebrew 对于Mac更新git&#xff0c;最简单的就是使用brew命令。所以我们首先下载homebrew。已下载的同学忽略直接下一…

基于Java的留守儿童爱心网站

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S结构&#xff0c;SpringBoot框架 工具&#xff1a;MyEclipse&#xff0c;Navicat&#xff0c;To…

《深入理解Spark RDD缓存机制》(第4天)

文章目录 前言一、小试牛刀&#xff1a;解剖RDD缓存机制&#xff1f;1. 什么是Spark RDD缓存策略1.1 为什幺RDD要做缓存1.2 缓存相关API&#xff1a;1.3 缓存案例解析:1.4 图解缓存效果: 2. 什么是checkpoint缓存2.1 为什么要做checkpoint缓存2.2 checkpoint相关API:2.3 checkp…

车载测试面试项目看这一套就够了!车载测试___自我讲解项目

面试官您好&#xff0c;我叫xx来自安微&#xff0c;今年xx岁&#xff0c;毕业于安微新华学院&#xff0c;我是从2017年开始接触软件测试行业&#xff0c;目前从事软件测试工作有5年多时间&#xff0c;第一家公司做了电商和进销存项目app和web都有做过&#xff0c;上家公司做了车…

流程图工具评测:十大热门软件对比

流程图是一种用图形符号和箭头表示工作流程的图形表示方法。它展示了一系列相互关联的步骤&#xff0c;以显示过程中数据或物质的流动、决策点和操作步骤。流程图广泛用于各种领域&#xff0c;包括业务流程、软件开发、工程等&#xff0c;以帮助人们更好地理解和分析工作流程。…

大数据助力电商发展||电商API接口接入

伴随互联网尤其是移动互联网的高速发展&#xff0c;电子商务已经成为人们生活中不可或缺的一部分&#xff0c;人们的购物理念和消费模式正在发生颠覆性的转变。基于天然的数据优势&#xff0c;电子商务平台利用大数据计算技术不断实施数据的累积、分析和处理&#xff0c;消费者…

xshell使用vi命令:bash:vim:command not found

你们好&#xff0c;我是金金金。 场景 此时我通过xshell客户端连接到了远程的虚拟机。想用vi命令编辑一个文件时&#xff0c;显示&#xff1a;bash: vim: command not found 排查 看报错提示就可以知道&#xff0c;没找到vim命令 解决 使用包管理器 apt 来安装 vim 更新你的软…

Faiss:加速大规模数据相似性搜索的利器

在机器学习和数据挖掘领域&#xff0c;相似性搜索是一项基本且重要的任务&#xff0c;它涉及到在大型数据集中找到与特定对象最相似的对象。Faiss是一个由Facebook AI Research开发的库&#xff0c;专门用于高效地进行相似性搜索和聚类&#xff0c;它之所以重要&#xff0c;是因…