面试小知识(二)

合并两个排序列表

其实只要是合并两个集合,无论是数组还是列表,都应该与MergeSort的Merge阶段类似,即只看重第一个(或最后一个)元素,在比较大小后放入新排序的集合。
对于链表而言,无论何时,创建一个dummyNode一般都有用。

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode head = dummy;
        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                head.next = l1;
                l1 = l1.next;
            } else {
                head.next = l2;
                l2 = l2.next;
            }

            head = head.next;
        }       
        //对于链表而言只需要改变引用即可
        if (l1 != null) {
            head.next = l1;
        }

        if (l2 != null) {
            head.next = l2;
        }       
        return dummy.next;
    }
}

页面置换算法

我是统计出身,并不是严格的计算机科班人员,之前曾经尽可能地补过一些基础,但是对于这样的计算机基础题目一直都很头疼,今天尝试回答一下这道题目。

在操作系统发现需要访问的页面不在内存中的时候,就需要将其加载到内存中。而当内存中不存在空闲页面空间的时候,就需要将其中一个移出内存。内存置换算法就是用来选择将哪一个页面移除内存的。

OPT(理想置换算法)

从内存中移出永远不再需要的页面,如果没有这样的页面存在,就移出最长时间不需要访问的页面。但是这样的算法其实是很难实现的,它不仅要考虑内存内页面的情况,还需要考虑之后任务的执行情况。

FIFO(先进先出置换算法)

这是一种最好实现的页面置换算法,只需要一个队列即可实现。其思想页非常简单,最先使用的页面最先被淘汰。
当然这里使用队列实现的只是一种模拟情况,真实情况下应该是最早进入内存的页面会直接被新的页面覆盖,而不是简单的入队出队。

LRU(最近最少使用算法)

这道题可以用LinkedHashMap很快地做出来哈哈哈哈。
LRU的核心思想就是将目前为止最不经常使用的页面移出,并移入新的页面。

LFU(最不经常使用算法)

像比如LRU,LFU显得有些绝对,它是直接将过去使用最少的页面移出内存,对应的,也就需要有额外的空间来存储器使用次数。

时钟(CLOCK)置换算法

这是一个我今天才知道的置换算法…不愧是我,菜的一如既往
将每一个页面看作一帧,在其被使用或加入内存的时候,帧的使用位被记为1,当某一页被替换的时候操作系统会循环扫描所有帧,并将路过的帧置为0;如果在这个过程中所有帧都是0,就将第一帧移出;如果全为1,就将所有帧都置为0并替换第一帧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值