面试操作系统生疏点

这天面试被问到了一些操作系统,和算法题。有些感觉有点生疏了,来回忆一下。

  1. 进程之间的通信方式?
  2. 排序数组二维数组查找?
  3. 快排时间复杂度及过程?

进程之间通信方式?

相关好文:[进程间的通信方式](https://www.cnblogs.com/LUO77/p/5816326.html)

进程复制:fork()复制一个一模一样的子进程,成功返回0。
通信方式有:管道、有名管道、消息队列、共享内存、信号量、套接字、信号。
信号:半双工,只限于父子进程间使用。在头文件中,软件层面对中断的模拟。
管道:半双工,FIFO。匿名管道只能用于父子进程通信。
消息队列:可按消息类型分类读取的队列。
共享内存:直接进行共享内存数据交换。无需用户态和核心态的切换。效率最高。

排序二维数组查找值

剑指offer的题。leetcode地址: 剑指 Offer 04. 二维数组中的查找

法一 暴力:

  • 思路: 直接二重循环遍历。时间复杂度O(n*m)。
  • 缺点:没有利用到已排序特性。
public boolean findNumberIn2DArray(int[][] matrix, int target) {
        for(int i=0;i

法二:

  • 思路:交叉极值点(左下或右上,既是极小值也是极大值)。每次没找到就剔除一行/一列。时间复杂度O(m+n),最极端情况:在最后一行最左边匹配。
  • 分析:每行的最后边必定大于左边的数。所以先判断每行最大值。
  • 代码:
//每一行的最后边是值最大的
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if(matrix.length==0) return false;
        int col_len = matrix[0].length;
        for(int i=0;i=0;j--){     //列左移
                if(matrix[i][j]==target)return true; 
                if(matrix[i][j]

法三:行列同时二分查找。
思路:充分利用二分查找思想。
代码:略

快排 时间复杂度O(nlgn)

void quicksort(int data[],int low,int high){
        int i,j,temp,basis;
        if(low>high)return;     //弹出条件
        i = low;
        j = high;
        basis = data[low];    //第一位为基准值
        while(i!=j){          //先右边左移
            while(data[j]<=basis&&i=basis
            while(data[i]>=basis&&i

你可能感兴趣的:(数据结构和算法,操作系统)