自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

河西无名式

月影星痕

  • 博客(342)
  • 资源 (6)
  • 收藏
  • 关注

原创 动态规划分析总结——如何设计和实现动态规划算法

进行算法设计的时候,时常有这样的体会:如果已经知道一道题目可以用动态规划求解,那么很容易找到相应的动态规划算法并实现;动态规划算法的难度不在于实现,而在于分析和设计—— 首先你得知道这道题目需要用动态规划来求解。本文,我们主要在分析动态规划在算法分析设计和实现中的应用,讲解动态规划的原理、设计和实现。在很多情况下,可能我们能直观地想到动态规划的算法;但是有些情况下动态规划算法却比较隐蔽,难以发现。

2014-07-19 19:13:08 14354 8

原创 python中的排序问题——多属性排序

摘要:排序问题是一个经典的问题,在python中,因为有了库函数,排序操作就就更加简单,本文主要讲解如何运用python进行排序操作。1.sort函数说明:sort函数是list类的一个方法,说明如下: | sort(...) | L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PL

2013-12-17 22:14:24 12038

原创 perf 性能分析实例——使用perf优化cache利用率

摘要:本文主要讲解如何使用perf观察程序在缓存利用方面的瓶颈,进而优化程序,提高cache命中率。主要讲解提高缓存利用的几种常用方法。1.程序局部性一个编写良好的计算机程序通常具有程序的局部性,它更倾向与引用最近引用过的数据项,或者这个数据周围的数据——前者是时间局部性,后者是空间局部性。现代操作系统的设计,从硬件到操作系统再到应用程序都利用了程序的局部性原理:硬件层,通

2013-12-16 11:11:47 19187 6

原创 C语言变长数组 struct中char data[0]的用法

摘要:在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。struct MyData {    int nLen;    char data[0];};                         在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyDa

2013-12-01 22:27:39 4806 1

原创 python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode

摘要:在进行python脚本的编写时,如果我们用python来处理网页数据或者进行与中文字符有关的处理工作,经常出现这样的出错信息:SyntaxError: Non-ASCII character '\xe6' in file ./filename.py on line 3, but no encoding declared。本文主要讲解python中与unicode和中文、特殊字符编码有关的问题

2013-11-21 16:28:17 147384 9

原创 linux 高端内存页框管理:永久内核映射、临时内核映射以及非连续内存分配

摘要:高端内存页框的内核映射分为三种情况:永久内核映射、临时内核映射和非连续内存映射。那么这三者有什么区别和联系呢?临时内核映射如何保证不会被阻塞呢?本文主要为你解答这些疑问,并详细探讨高端内存映射的前两种方式。1.高端内存的区域划分内核将高端内存划分为3部分:VMALLOC_START~VMALLOC_END、KMAP_BASE~FIXADDR_START

2013-10-25 10:41:53 6046

原创 linux下的内核测试工具——perf使用简介

摘要:Perf是Linux kernel自带的系统性能优化工具。Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature。pef可以用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。

2013-08-26 17:25:44 30846

原创 git pull报错:Auto Merge Failed; Fix Conflicts and Then Commit the Result.

1.出错场景:协同开发时,我们从远程服务器上pull下代码的时候,出现以下提示信息:Auto Merge Failed; Fix Conflicts and Then Commit the Result.2.原因分析:利用git status,输出如下:root@hyk-virt:/etc# git status# On branch m

2013-08-20 11:32:17 53488 4

原创 数据包转发原理与iptables的使用方法简介与实例

对于连接到网络上的 Linux 系统来说,防火墙是必不可少的防御机制, 它只允许合法的网络流量进出系统,而禁止其它任何网络流量。为了确定网络流量是否合法, 防火墙依靠它所包含的由网络或系统管理员预定义的一组 规则。 这些规则告诉防火墙某个流量是否合法以及对于来自某个源、至某个目的地或具有某种协议类型的网络流量要做些什么。 术语“配置防火墙”是指添加、修改和除去这些规则。稍后,我将详细讨论这些 规则。 网络流量由 IP 信息包(或,简称 信息包)— 以流的形式从源系统传输到目的地系统的一些小块数

2013-07-26 09:06:50 10903 1

翻译 内核符号表详解——如何在module中利用内核符号

前言:在内核开发中,有时候我们必须检查某些内核状态,或者我们想冲用某些内核功能,我们需要得到(read,write,exe)内核符号。本文主要为你介绍内核如何保存这些符号表,我们怎样应用这些内核符号表。本文仅仅是阅读内核源码的一个guide,通过阅读内核源码,我们将有更深入的理解。

2013-07-24 10:41:41 12151 5

原创 linux 内核头文件 linux kernel header

概述:在进行有关系统软件的安装的时候(编译一个新的驱动,或者安装一个系统级别的测试工具,例如systemtap),经常需要重新编译内核,相应的问题往往与内核头文件有关。那么,什么是内核头文件,为什么需要更新内核头文件?内核头文件作用是什么,如何更新?本文主要为你解答这些疑问。

2013-07-20 14:50:40 17570 1

原创 git中各个commit节点的查询 回溯 与 合并:git rebase与git reset

概述:在利用git进行管理的时候,除了对不同的分支进行merge以外,往往需要对同一个一个分支上的不同commit进行合并或者撤销;或者对不同分支上的多次提交进行合并,形成一个线性的提交历史,等等:这些都要用到git rebase,git reset和git log这三个命令。1.commit的信息查询——git log如果我们在同一个分支上进行了多次commit,要想查找每次co

2013-05-30 13:15:36 18688

原创 算法复杂度精讲——算法时间复杂度的数学原理:从O(n(log(n))说起

概述:在设计算法的时候,要考虑两个方面,一个是算法的正确性,另外一个就是算法的效率,也就是复杂度,通常情况下,我们优先考虑的是时间复杂度,这也是本文要讨论的内容。算法学习的时候,经常碰到这样的问题,为什么快速排序的时间复杂度是O(nlog(n))?为何插入排序的时间复杂度是O(n^2)?这些是我们熟悉的算法时间复杂度,可能病没有太大的问题,那我们不熟悉的呢?如果我们采用三路归并排序而不是二路归并排

2013-05-19 19:13:44 9239

原创 栈破坏下crash的分析方法

在众多的coredump中,有一类crash调试起来是最麻烦的,那就是“栈被破坏”导致的函数调用回溯结构破坏引发的coredump。本文,主要讲讲这一类crash的成因、原理以及调试方法。1. SMTC(show me the code)首先,让我们来看一段代码#include <stdio.h>#include <string.h>void fun(int n...

2019-02-13 10:30:57 2579

转载 从汇编视角看函数调用

C语言函数如下int bar(int c, int d){ int e = c + d; return e;}int foo(int a, int b){ return bar(a, b);}int main(void){ foo(2, 5); return 0;}让我们从汇编的角度跟踪函数的执行,main对应的汇编函数如下:Dump of a

2017-08-03 18:49:20 1288

转载 laravel 简介

Laravel是一款基于MVC设计模式的PHP框架,提供了一系列便捷的API接口,包括数据库、路由、表单验证等等,使PHP开发更为快速和优雅,一言以蔽:Laravel为WEB艺术家而生!1.安装先保证你已经安装好了PHP,接下来,你可以直接参考官网的安装教程进行安装。如果遇到网络问题,上述安装教程无法成功安装,你也可以先下载PHP包管理工具composer.phar,用PHP命令行运行安装:php

2016-08-21 18:36:56 4813

转载 crond 简介[转]

0.cron简介工具是一个以系统服务的形式存在。通过/etc/rc.d/init.d 或者 /etc/init.d目录下的启动脚本crond来启动。 也可能直接通过 service crond start 命令来启动。cron 会从如下这些地方读取安装的任务: 1>. /etc/anacrontab 这个文件存着系统级的任务。它主要用来运行每日的(daily),每周的(weekly),每月的(m

2016-08-18 10:52:24 1029

原创 automake 使用指南

在构建大型的C/C++项目时,往往需要借助Makefile. 然而手动编写makefile是相当复杂的,这一点在程序需要跨平台的时候表现地更为明显。在此背景下,我们需要借助于一些自动化的工具来生成Makefile和configure。本文主要介绍autoconf, automake等自动化工具,默认读者已经具备linux shell脚本和makefile的基础知识。1. 工具准备autoconf,

2015-10-28 10:12:21 4606

原创 linux svn命令使用简介

1. svn st –helpstatus (stat, st): 显示工作副本中目录与文件的状态。 用法: status [PATH…] 未指定参数时,只显示本地修改的条目(没有网络访问)。 使用 -q 时,只显示本地修改条目的摘要信息。 使用 -u 时,增加工作版本和服务器上版本过期信息。 使用 -v 时,显示每个条目的完整版本信息。 问号表示不

2015-09-17 15:06:51 836

原创 gcc指定头文件及动态链接库路径

在利用源代码进行软件编译的过程中,经常会出现以下错误:undefined reference to ‘crypt’libdl.so: error adding symbols: DSO missing from command lineopenssl/rsa.h: no such file or directory这些都是软件编译、链接过程中找到不相关头文件或者动态链接库导致的。本文主要讲解

2015-09-16 11:27:04 4169

原创 C++中的类型转化

C++中的类型转换种类繁多,很容易出错。本文主要总结,在何种情形该使用什么类型转化。1. char* >> intatoi char s[100]; int i=atoi(s);sscanf int sscanf(const char *str, const char *format, …); sscanf(s,”%d”,&i); *stringstream as follows2

2015-09-16 09:49:45 609

原创 C++中shared_ptr的使用

template class shared_ptr#include<memory>shared_ptr是C++ 11之后标准库引入的一个特性,用于简化内存管理,防止内存泄露。1.shared_ptr的作用是什么?Objects of shared_ptr types have the ability of taking ownership of a pointer and share that o

2015-09-14 15:50:46 1930

转载 Docker Image Specification v1.0.0

Docker Image Specification v1.0.0An Image is an ordered collection of root filesystem changes and the corresponding execution parameters for use within a container runtime. This specification outline

2015-03-31 15:29:48 1340

原创 go语言文件操作

1.os包中File类首先,file类是在os包中的,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现。type File struct { *file}type file struct { fd int name string dirinfo *dirInfo nepipe int}func (f *File) Fd( )uin

2015-03-17 10:28:19 2382

原创 进程通信之linux信号机制

摘要:本文主要介绍,linux进程通信中的信号机制,介绍信号的本质与作用原理;重点讲解信号的处理流程,同时介绍了信号的安装\发送\阻塞等概念.

2015-03-17 09:56:10 1342

原创 僵尸进程

1.僵尸进程与孤儿进程僵尸进程:如果子进程先于父进程退出,此时子进程便成为一个尸体;此前,如果父进程没有调用wait等相关系统调用,那么子进程便成为僵尸进程.孤儿进程:如果父进程先于子进程退出,那么子进程变成为孤儿进程,将被init进程领养.2.进程相关数据结构进程控制块PCB:保留了进程运转时所需要的全部信息,是进程表中的一个entry.当以fork()系统调用建立一个新的进程后,核心进

2015-03-14 10:27:29 2096

转载 在ubuntu上搭建go编程环境(附带自动化部署脚本)

自2009年Go语言发布以来,我一直在关注Go语言,如今Go语言已经发展到1.2版本,而且也收到越来越多的人关注这门语言。Go语言设计的目的就是为了解决执行数度快但是编译数度并不理想(如C++)以及编译速度快但执行效率不佳(.NET、Java),或者开发难度低但执行速度一般的动态语言这一问题。所以说,Go语言的特点是:快速编译,高效执行,易于开发。好了,跳过那些框框条条的craps, 让我

2014-10-28 15:58:51 1974

原创 C++ 中的比较函数

在写程序的时候,排序是一种和常用的

2014-10-14 20:21:40 3521

转载 C++ static关键字的几点说明

(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。      (2)不能将静态成员函数定义为虚函数。      (3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊 ,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。(4)由于静态成员函数没有t

2014-10-14 16:01:15 872

原创 守护进程

本文,主要讲解守护进程的定义和相关的原理,并通过一个用户实例来说明如何编写守护进程。1.守护进程的撰写条件:1)D要在系统中处于一直运转的状态,也就是说while循环,时刻在监听服务2)D不能在关闭终端的时候退出—— 为什么终端关闭将导致进程退出呢?3)D要脱离控制终端,登录会话和进程组—— 注销的时候,为什么有的进程将被注销,而有的不会?2.相关原理Q

2014-10-14 14:47:55 2079

原创 标准输入的原理:cin与scanf

1.cin 的处理方式1)如果cin读取整数,会自动忽略换行和空格;遇到文件结束标记,cin  >> a返回的数false    int a;    while(cin >> a){         cout     }       return 0;eg:1, 2, 31 231 a2a 12注意:cin读取到'a'字符的时

2014-10-11 20:49:51 2863

原创 雅虎笔试题目——最大集合问题

摘要:sort函数在日常编程中,经常被用到;同时,对内存的初始化函数,经常用到fill,本节,我们以计算LIS为例讲解这两个函数的应用。例子:有一些老鼠,有x和y两个属性,现在要选择一个最大集合,其中从前到后,老鼠的x属性依次递减,y属性依次递增。分析:如果我们先按照x属性递减排列,那么形成一个数组,然后问题就转化为求解这个数组中y属性递增排列的最长字串,于是转化为一个动态规划问题

2014-09-28 15:24:12 1263

原创 使用priority_queue建立小顶推

template < class Type, class Container=vector, class Compare=less > class priority_queue注意,priority_queue是一个模板类,它的定义形式如上;其中,它的每一个参数也是一个类,这里我们主要解释一下Compare 参数。其中,Compare 参数是一个

2014-09-26 23:37:10 2198

转载 C++模板学习

1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float

2014-09-22 17:15:31 1020

原创 ubuntu开启启动过程&&开启自动启动 &&chkconfig

ubuntu开启启动过程&&开启自动启动&&chkconfig摘要:很多情况下,我们需要让某些服务开机自动运行:apache、mysql等。或者,在其他时候,我们需要开机即设置某些环境变量的值,修改runlevel等;这个时候,我们需要弄明白系统的开机启动过程。1.ubuntu开启启动过程:一般的linux系统,开机启动过程如下:boot>> loader >>

2014-09-11 18:28:10 2073

转载 http协议详解

Author :Jeffrey  My Blog:http://blog.csdn.net/gueter/ 引言                                        HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是

2014-09-10 22:52:14 828

转载 segment fault 的调试方法

Linux环境下段错误的产生原因及调试方法小结最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,

2014-09-09 22:20:39 1827

原创 文件描述符与文件指针等文件操作的几个问题

1.二者对比:文件描述符就是open文件时产生的一个整数,直到一个索引作用,它用于UNIX系统中,用于标识文件。它是系统调用产生的。文件指针是指向一个FILE的结构体,这个结构体里有一个元素就是文件描述符。它用于ANSI C标准的IO库调用中,用于标识文件。fopen是依赖于open的; 既然FILE中包含文件描述符元素,可以用fopen()直接获取指针fp,然后使用fp获

2014-09-09 22:08:10 1750

转载 Ubuntu init启动流程分析 upstart

Ubuntu init启动流程分析  现行的Linux distros主流的有两种init方式:一种是广为流传的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart方式,基于事件机制,系统的所有服务,任务都是由事件驱动的。据我所知,采用后一种方式的目前有Ubuntu(6.10

2014-08-22 15:19:12 1466

转载 linux 下任务前后台切换:ctr + z && bg && fg

假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:    [1]+ Stopped /root/bin/rsync.sh    然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)    #bg 1    [1]+ /root/bin/rsync.sh &    用 j

2014-08-22 14:44:17 2187

博客对应文件——makefiletest

makefile使用说明对应的测试文件,是本篇博文的测试C程序和文件

2013-09-07

libreoffice math使用完全手册

linux下的公式编辑器 libreffice math的使用详细说明

2013-04-21

正则表达式的测试文件

正则表达式简明教程 博客 的测试文档,下载此文档进行测试,进行情景学习

2013-04-20

KMP算法 C语言实现

用c实现的KMP算法,没有注释,不过程序逻辑清晰,适合了解算法的人观看

2012-10-31

kvm虚拟机分析

一篇介绍KVM的论文,对kvm的总体框架、cpu、内存、IO的虚拟化进行了总体分析

2012-02-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除