C++进阶——哈希的实现 在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到O(log2N),即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。
Linux一学就会——共享内存 原理就不用多讲了,之前管道通信是因为进程和子进程天然的可以看到共同的内存区域。这一次我们可以创建一个通向内存让非子进程也可以看到同一片区域进行通信。管道通信里面我们知道,要是想进行通讯就必须让两个进程看到同一片内存区域(其实也就是最开始共享内存的雏形)。共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到。内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。ctrl+c终止进程,再次重启。收到客户发来的信息!
Linux一学就会——线程互斥 多线程执行流共享的资源就叫做临界资源:每个线程内部,访问临界自娱的代码,就叫做临界区:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。
C++进阶——map&set的实现 begin()与end()STL明确规定,begin()与end()代表的是一段前闭后开的区间,而对红黑树进行中序遍历后,可以得到一个有序的序列,因此:begin()可以放在红黑树中最小节点(即最左侧节点)的位置end()放在最大节点(最右侧节点)的下一个位置,关键是最大节点的下一个位置在哪块?能否给成nullptr呢?在这里我们不用设置一个循环迭代器,begin()直接就定义为最小的那棵树枝节点(最左节点),end()不是最右节点那棵树枝而是设置成空节点。
C++进阶——map&set的使用 7. map中的的元素是键值对8. map中的key是唯一的,并且不能修改9. 默认按照小于的方式对key进行比较10. map中的元素如果用迭代器去遍历,可以得到一个有序的序列11. map的底层为平衡搜索树(红黑树),查找效率比较高12. 支持[]操作符,operator[]中实际进行插入查找。
C++进阶——AVL树的构建 AVLTreeNode(const pair < k , v > & kv) //节点构造函数 : _left(nullptr) , _right(nullptr) , _parent(nullptr) , _kv(kv) , _be(0) {int _be;
Linux一学就会——管道通信 一个进程需要将它的数据发送给另一个进程:多个进程之间共享同样的资源。:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
Linux一学就会——系统文件I/O pathname : 要打开或创建的目标文件flags : 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数 : O_RDONLY : 只读打开O_WRONLY : 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND : 追加写返回值:成功:新打开的文件描述符失败: - 1。
C++进阶——反向迭代器Reverse_iterator 之前我们学过适配器,但是只实现了普通的迭代器,可是反向迭代器没有实现,当时说之后会实现的,没错就是今日,我们要收复Reverse_iterator-----。我们其实可以封装一个反向迭代器库(Reverse_iterator.h),这样不管是什么容器(适配器)都可以使用了,减少了代码的冗余。
STL讲解——priority_queue的实现 优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。默认的堆是一个大堆,但是我今天设计的是一个默认小堆的函数,而且我的lesser是小堆比较,这是因为和单词进行对比更容易上手理解。并不想再写一个大堆出来,因为会有代码冗余,于是乎想到了构造一个仿函数,来帮我实现大于小于的函数判断。其他的细节基本没什么重点了。
C++习题——数组中的逆序对 然后再两个两个比较,这里的两个两个是前后跨度为2的(如图所示),然后再四个四个比较(我就按双数来了,有可能是3,4个比较;4,5个比较,都可以,重在好理解!)然后再8,8个比较直到这个变成一个大组,这个大组都是有序的啦!在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。归并排序我之前只是搞懂了原理没有怎么去实现,搞得我遇到这道题直接抓瞎了,MD气死我了!有的人喜欢搞两个函数,我觉得太麻烦了,这样子搞我更加直观。
Linux一学就会——crond任务调度 crontab -e 编辑crontab定时任务。crontab -l 查询crontab任务。crontab -r 删除所有当前用户。crontab 进行定时任务的设置。