Java二维数组添加元素,附详细答案

阻塞IO

我们知道在调用某个函数的时候无非就是两种情况,要么马上返回,然后根据返回值进行接下来的业务处理。当在使用阻塞IO的时候,应用程序会被无情的挂起,等待内核完成操作,因为此时的内核可能将CPU时间切换到了其他需要的进程中,在我们的应用程序看来感觉被卡主(阻塞)了。

非阻塞IO

当使用非阻塞函数的时候,和阻塞IO类比,内核会立即返回,返回后获得足够的CPU时间继续做其他的事情。

IO复用模型

当使用fgets等待标准输入的时候,如果此时套接字有数据但不能读出。IO多路复用意味着可以将标准输入、套接字等都当做IO的一路,任何一路IO有事件发生,都将通知相应的应用程序去处理相应的IO事件,在我们看来就反复同时可以处理多个事情。这就是IO复用

信号驱动IO

在信号驱动式 I/O 模型中,应用程序使用套接口进行信号驱动 I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个 SIGIO 信号,可以在信号处理函数中调用 I/O 操作函数处理数据。

异步IO

用程序告知内核启动某个操作,并让内核在整个操作(包括将数据从内核拷贝到应用程序的缓冲区)完成后通知应用程序。那么和信号驱动有啥不一样?

  • 讲讲select和epoll的区别?

这里一样的套路,先说出两者的用途,然后两者的优缺点。

select的缺点

  • select返回的是含有整个句柄的数组,应用程序需要遍历整个数组才能发现哪些句柄发生了事件

  • select的触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次select调用还是会将这些文件描述符通知进程

  • 内核 / 用户空间内存拷贝问题,select每次都会改变内核中的句柄数据结构集,因而每次select调用时都需要从用户空间向内核空间复制所有的句柄数据结构,产生巨大的开销

  • 单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量

epoll实现

epoll在内核中会维护一个红黑树和一个双向链表,红黑树存放通过epoll_ctl方法向epoll对象中添加进来的事件,所以不需要每次调用epoll_wait都全量复制所有的事件结构。双向链

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要删除二维数组中的指定重复元素,可以使用以下步骤: 1. 遍历二维数组,将每个元素存储到一个一维数组中。 2. 对一维数组进行去重操作,生成一个新的一维数组。 3. 根据新的一维数组的长度创建一个新的二维数组。 4. 遍历原二维数组,如果元素在新的一维数组中不存在,则将元素添加到新的二维数组中。 下面是一个示例代码,演示如何删除二维数组中指定重复元素: ```java public static int[][] removeDuplicate(int[][] arr, int target) { // 遍历二维数组,将每个元素存储到一个一维数组中 int[] temp = new int[arr.length * arr[0].length]; int k = 0; for (int[] i : arr) { for (int j : i) { temp[k++] = j; } } // 对一维数组进行去重操作,生成一个新的一维数组 int[] newArr = Arrays.stream(temp).distinct().toArray(); // 根据新的一维数组的长度创建一个新的二维数组 int[][] result = new int[newArr.length][arr[0].length]; // 遍历原二维数组,如果元素在新的一维数组中不存在,则将元素添加到新的二维数组中 k = 0; for (int[] i : arr) { for (int j : i) { if (!Arrays.stream(newArr).anyMatch(x -> x == j)) { result[k++] = i; break; } } } return result; } ``` 该方法接收一个二维数组和一个目标元素,返回一个新的二维数组,其中不包含目标元素重复的行。需要注意的是,这个方法并不会改变原数组,而是返回一个新的数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值