Java面试黄金宝典41

1. IO 种类

 

  • 定义

在 Java 里,IO(输入 / 输出)主要分为字节流和字符流这两种类型。字节流以字节为单位处理数据,适合处理二进制数据,像图片、音频、视频等;字符流以字符为单位处理数据,适用于处理文本数据。

  • 要点
  1. 字节流处理二进制数据,字符流处理文本数据。
  2. 字节流的基类是 InputStream 和 OutputStream,字符流的基类是 Reader 和 Writer
  • 应用

在实际开发中,读取图片等二进制文件用字节流,读取文本文件用字符流。比如读取配置文件、保存图片等场景。

  • 代码示例

java

import java.io.*;

public class IODemo {
    public static void main(String[] args) {
        // 字节流示例:复制图片
        try (FileInputStream fis = new FileInputStream("input.jpg");
             FileOutputStream fos = new FileOutputStream("output.jpg")) {
            int byteRead;
            while ((byteRead = fis.read()) != -1) {
                fos.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 字符流示例:读取文本文件
        try (FileReader fr = new FileReader("input.txt");
             BufferedReader br = new BufferedReader(fr)) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

2. 先进先出置换算法(FIFO)

 

  • 定义

FIFO 是一种页面置换算法,当内存空间不足时,该算法会选择最先进入内存的页面进行置换。

  • 要点
  1. 简单易实现,只需一个队列记录页面进入内存的顺序。
  2. 可能出现 Belady 异常,即增加页面帧数时,缺页率反而增加。
  • 应用

在一些对内存管理要求不高的简单系统中使用,例如早期的一些小型操作系统。

  • 代码示例

java

import java.util.LinkedList;
import java.util.Queue;

public class FIFOPageReplacement {
    public static int pageFaults(int[] pages, int capacity) {
        Queue<Integer> queue = new LinkedList<>();
        int pageFaults = 0;
        for (int page : pages) {
            if (!queue.contains(page)) {
                if (queue.size() == capacity) {
                    queue.poll();
                }
                queue.add(page);
                pageFaults++;
            }
        }
        return pageFaults;
    }

    public static void main(String[] args) {
        int[] pages = {1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5};
        int capacity = 3;
        System.out.println("Page faults: " + pageFaults(pages, capacity));
    }
}

 

3. 最近最久未使用(LRU) 算法

 

  • 定义

LRU 算法是一种页面置换算法,它会选择最近最久未使用的页面进行置换。

  • 要点
  1. 性能较好,能较好地反映程序的局部性原理。
  2. 实现相对复杂,需维护一个链表记录页面的使用顺序。
  • 应用

常用于缓存系统,如浏览器缓存、数据库缓存等,以提高数据的访问效率。

  • 代码示例

java

import java.util.LinkedHashMap;
import java.util.Map;

public class LRU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值