- 博客(8)
- 收藏
- 关注
转载 Linux同步IO :sync,fsync,fdatasync
传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)(Bach [1986]第3章详细讨论了缓冲区高速缓存)。延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲
2020-12-31 14:18:04
221
原创 关于dup和dup2函数
1、dup函数和dup2函数#include <unistd.h>int dup(int filedes);int dup2(int filedes1, int filedes2);//两个函数,若成功则返回新的文件描述符,若出错则返回-1,同时设置errno对于dup而言,返回的新文件描述符一定是当前可用的文件描述符中的最小数值,用dup2则可用用filedes参数指定新描述符的数值。如果filedes已经打开,则先将其关闭,如若filedes1等于filedes2,则dup2返回
2020-12-28 21:48:31
372
原创 C++中一些概念区分
1、C++中struct与class的区别C++中struct和class的区别不是很大,主要有以下三个方面:字面上struct表示“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。而class表示“类”,是面向对象编程的关键。a、默认成员权限的区别:struct的默认成员为public,而在class中默认为private。b、默认继承方式:struct的默认继承方式为public,而clas
2020-12-13 11:39:06
178
原创 堆排序详解
堆:通常是一个可以被看做一棵完全二叉树的数组对象。实际中也通常用数组来实现。链接: 堆的定义完全二叉树要么是满二叉树,若不满,则在最后一层是从左往右依次补齐的。堆可以分为:大根堆 和 小根堆两种。大根堆指:在这棵完全二叉树中,任何一棵子树的最大值都在子树的头节点;小根堆相反。接下来就是堆排序的过程:(以大根堆为例)1、首先来看一个函数 heapinsert:heapinsert(int arr[], int i)表示在一个大根堆末尾 i 处插入节点后,仍维持一个0~i 的大根堆。根据大根堆的
2020-09-04 15:58:20
245
1
原创 Leetcode 二叉树填充每个节点的下一个右侧节点指针
这种题给出了两种情况,第一种是完美二叉树(特殊情况),第二种是一般情况下的二叉树。二叉树填充每个节点的下一个右侧节点指针对于特殊情况会有一些特殊的解法。我仅就我尝试过的几种方法做一个记录。首先是对于这种题目的通解(对于两种情况都适用):层序遍历记录每层节点,最后在倒序连接起来即可。/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next;
2020-07-29 15:09:02
146
原创 Leetcode 给定两种遍历创建二叉树
题目链接:1.链接: 105. 从前序与中序遍历序列构造二叉树:.2.链接: 106. 从中序与后序遍历序列构造二叉树:.3.链接: 889. 根据前序和后序遍历构造二叉树:这三道题都可以用递归和迭代来解决,这次就贴三道题的递归解法,都是一个解题思路:先根据给定遍历的特点找到根结点的位置(前序:根-左-右,中序:左-根-右,后序:左-右-根),找到根结点以后(创建根节点),再根据另外一个给定遍历来确定左右子树的结点数,再递归创建左右子树即可。题外话:对于这种二叉树的题目,通常用到递归都是类似的模板
2020-07-28 15:24:19
222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人