SF
On my way
On my way
注册登录
关注博客
注册登录
主页
关于
RSS
[algorithm]动态规划问题
chnmagnus
2017-02-25
阅读 5 分钟
1.8k
对于任意字符串,如果其头尾相同,则其回文子序列的长度是其去头去尾字符串回文子序列长度+2,如果头尾不同,则是去头或去尾字符串回文子序列中长的那个。
[Linux] 内核模块&proc使用 实例:统计所有进程的信息
chnmagnus
2016-11-27
阅读 6 分钟
5.6k
编写一个Linux的内核模块,其功能是遍历操作系统所有进程。该内核模块输出系统中:每个进程的名字、进程pid、进程的状态、父进程的名字;以及统计系统中进程个数,包括统计系统中TASK_RUNNING、TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE、TASK_ZOMBIE、TASK_STOPPED等(还有其他状态)状态进程的个数。同时还需要编写一...
[Linux/C++] 多线程实例:十字路口车辆调度
chnmagnus
2016-11-26
阅读 12 分钟
8.7k
有两条道路双向两个车道,即每条路每个方向只有一个车道,两条道路十字交叉。假设车辆只能向前直行,而不允许转弯和后退。如果有4辆车几乎同时到达这个十字路口,如图(a)所示;相互交叉地停下来,如图(b),此时4辆车都将不能继续向前,这是一个典型的死锁问题。从操作系统原理的资源分配观点,如果4辆车都想驶过十字...
[Linux] signal()函数解析
chnmagnus
2016-10-20
阅读 2 分钟
7.3k
1. 原型Unix系统提供了signal()和sigaction()两个函数来改变对于信号的处理方法。其中signal()是一个基于sigaction()系统调用的glibc库函数,其行为在不同的Unix操作系统存在差异,对于可移植性有要求的程序不能使用signal()函数。
[Linux] socket编程
chnmagnus
2016-09-24
阅读 3 分钟
1.9k
如果你点进了这个文章,我建议你直接访问 [链接] 学习socket编程,下面的资料是在读CSAPP时的一些总结,已经过时。 从programmer的角度,我们们可以把因特网看成一个世界范围内的主机集合,满足以下要求: 主机集合被映射为一组32位的ip地址 这组ip地址被映射为一组称为因特网域名的标识符 主机上的进程能够通过连接和其...
[Linux] RIO C++封装
chnmagnus
2016-09-21
阅读 4 分钟
4.3k
RIO包是CSAPP中一个基于read和write函数实现的能够处理终端并提供了带缓冲区读取的IO包。代码很简单,但很巧妙。缩减了原程序的初始化等函数之后,主要有以下四个对外函数:
[Note] C++动态内存:智能指针、动态数组
chnmagnus
2016-07-12
阅读 5 分钟
9k
先简单介绍一下我们常用的几种内存:静态内存、栈内存、动态内存1)从静态内存分配空间,内存在程序编译的时候就已经被分配好,比如全局变量和static变量2)栈内存是在执行函数时,函数内部定义局部变量所分配的内存,在函数结束时,这些内存就被释放,效率比较高,但栈空间往往较小3)动态内存,又称堆,由程序员自主通...
[Note] Linux学习笔记7 shell编程基础
chnmagnus
2016-07-08
阅读 5 分钟
3.1k
Note 7 Linux Shell编程基础 基本概念 shell脚本,一个shell程序,由可执行的shell命令组成,以普通linux文件形式保存运行一个shell脚本的方法: chomd u+x scriptfile ./scriptfile /bin/bash scriptfile shell变量,shell允许使用一些读写存储区,为用户和程序设计人员提供一个暂存数据的区域,分为环境变量和用户定义...
[Note] Linux学习笔记5-6 进程、重定向和管道
chnmagnus
2016-07-08
阅读 2 分钟
2.5k
An executing program = A process当你执行一个外部命令(内部命令是shell进程的一部分,不需要创建进程)时,Linux系统会为之创建一个进程,命令完成之后会撤销它进程的创建和终止是linux系统处理外部命令所采用的唯一机制Linux通过系统调用fork创建一个新的进程,该操作建立原进程内存的完全拷贝,然后系统调用exec来...
[Note] Linux学习笔记1-4 文件相关
chnmagnus
2016-07-07
阅读 3 分钟
1.9k
Note 1 Linux 和 Shell 简介 Linux系统 是多进程、多用户和交互式的计算环境。Linux系统的运行级别从0-6共7个: 0:停机,关闭系统 1:单用户模式,类似win下的安全模式 2:多用户模式,但是没有NFS支持 3:完整的多用户模式,是标准的运行级别 4:保留 5:X Windows系统 6:重新启动 Shell 是Linux系统的用户界面,提供...
[C++] 多态性实战:异质链表
chnmagnus
2016-06-02
阅读 7 分钟
5.5k
AnyElement.h包含AnyElment、ElementBase、Element 三个类;ElementBase和Element嵌套在AnyElment类之中;Element类继承ElementBase类;Element类是一个模版类;在AnyElement中通过ElementBase类的指针来存储不同类型的Element类。
[C++] 多态性和虚函数
chnmagnus
2016-05-27
阅读 3 分钟
3k
1.为什么需要virtual按照Java的思维方式,在有了继承和向上类型转换(upcasting)之后,就可以实现多态性了。但是在C++中似乎并不能orz。考虑这种情况:
[磁盘存储] FAT16存储详解
chnmagnus
2016-05-13
阅读 2 分钟
7.2k
一、 磁盘的总体结构物理:一个机械硬盘由很多盘片组成,一个盘片有两个面,对应两个读写磁头。磁头以0、1、2... 编号。每个盘片被划分成多个同心圆磁道,不同盘片上半径相同的同心圆构成了一个柱面,从外至里编号为 0、1、2...每个磁道被划分为几十个扇区(Sector),一般容量是 512byte(字节),扇区按照一定规则编号为...
[DS] AVL树 和 伸展树
chnmagnus
2016-04-11
阅读 15 分钟
2.1k
= =AVL树和伸展树的代码实现 {代码...} {代码...} {代码...} {代码...} {代码...}
[DS] 易于合并的堆:左式堆和斜堆C++实现
chnmagnus
2016-03-31
阅读 8 分钟
3.5k
原始的二叉堆使用数组实现,是一个完全二叉树,其实现简单,但是在合并方面不尽人意,只能通过构建一个新的堆来实现两个堆的合并,时间复杂度为O(N)。而左式堆和斜堆是两种合并高效的堆,并且左式堆以及斜堆的insert以及deleteMin等操作都是以merge操作为基础的。merge时间复杂度可以达到O(logN)。
[Java] 数独生成和求解
chnmagnus
2016-03-19
阅读 5 分钟
6.3k
数独的生成总体思路是挖洞法。首先在二维数组第一行随机填充1-9 9个数字,然后将这9个数字随机分布到整个二维数组中,然后使用求解数独的算法对此时的数组进行求解,得到一个完整的数独,然后按照用户输入的提示数量进行随机挖洞,得到最终的数独题目。这种方法理论上可以随机生成(81!/72! = 9.5e+16)种不同的数独题目,...
[node.js]《Nodejs开发指南》 微博项目实现
chnmagnus
2016-02-27
阅读 2 分钟
2.2k
一个基于express和mongodb 的简单微博项目,具体描述详见《Nodejs开发指南》。网上也有一些该项目实现的代码,但是基本都是几年前的= =,许多代码都无法运行,各种search之后终于用各种最新版本的代码实现了这一项目,特此记录,分享。
[node.js] 简单的http爬虫
chnmagnus
2016-01-26
阅读 2 分钟
2k
准备工作1.node.js本身2.cheerio模块可以将html构建DOM结构,并提供像jquery一样的选择器。通过npm install cheerio进行安装