程序员如何成为自由职业者? 随着互联网技术的高速发展,近几年,倾向于成为自由职业的专业人士正在逐渐增多。这其中,以编程技术为手艺,月薪高、时薪却并不高的程序员群体,对自由职业似乎更为向往。因而远程办公、跨国编程、接私活等现象在程序员圈已不是什么稀奇事儿。在我们过去接触过的用户中,也不乏从事过自由职业、或以「成为一名自由职业者」为职场目标的程序员。那么,什么样的程序员适合做自由职业者?自由职业者,具体可以做哪些工作...
一些有用的,有趣的搜索技巧 在常见的搜索引擎中搜索时候加上下面的关键字: 例如搜索所有以登陆作为网页开头的页面,就可以采用下面的方式:intitle:登陆 进行搜索,这样搜索到的所有html页面的title字段中都是登陆inurl:?php 同理,搜索到的所有页面的url中都会包含?phpfiletye:pdf python 这样你搜到所有文件都...
那些C++牛人的博客 整理收集C++世界里那些“牛人”的个人博客。凡三类:一是令人高山仰止的大牛,对C++语言本身产生过深远的影响的人;二是C++运用炉火纯青的高手,有原创性的技术干货;三是中文世界里的C++牛人。C++大牛的博客Bjarne Stroustrup的博客: Bjarne Stroustrup’s HomepageBjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bj
如何保证申请内存的地址是4的倍数 前两天遇到了一个需求: 是每次申请一块内存空间 需要的首地址必须要是4的倍数 于是瞬间就想到了这不是就是在应用层重新封装一下malloc 和free 嘛,或者你自己实现一个应用层的内存池自己来管理内存空间的地址分配,等等 实现方法很多,使用者的需求就是只要我申请到的空间我可以使用并且给我返回的首地址必须是4的倍数,于是c语言的结构体内存对齐,以及malloc和free的实现...
redis持久化那些事(kēng) 这是一篇包含了介绍性质和吐槽性质的日志。主要介绍一下我学习redis持久化时候被坑的经历。redis的使用介绍现在没有打算写,因为比较多,以我如此懒的性格。。。好吧,还是有点这方面想法的,不过一篇博客肯定是写不下,要写的话以后慢慢写出一个系列来。今天先说序列化。首先,我们都知道redis是个内存数据库,也就是所有数据都放在内存中的。那么如果进程挂掉了,或者系统重启的时候,内存就会清理掉了。为了保住...
protobuf 序列化 反序列接口 上次说过一次protobuf http://blog.csdn.net/kai8wei/article/details/62230878 这次想说一点稍微复杂的但是十分常用的protobuf操作 这里主要介绍一些 protobuf常见的序列化接口 包括 C数组序列化与反序列化 ,文件描述符序列化与发序列化 ,string类的序列化与反序列化 ,C++ stream 序列化和反序
进程的同步 异步 IO的阻塞 非阻塞 转载 from http://yaocoder.blog.51cto.com/2668309/1308899一讲到网络编程的I/O模型,总会涉及到这几个概念。问了很多人,没几个能清晰地讲出他们之间的区别联系,甚至在网络上也有很多不同的观点,也不知是中国文字释义的博大精深,还是本来这几个概念就是绕人不倦。今天我也来给大家讲解一下我对这几个概念的理解。既然网络上众说纷纭,不如找
算法的本质 1.算法,不止于刷题提到算法,不管是科班出身还是半路出家的程序员可能都会说上几句,算法谁没学过谁不知道啊?对于走工业界路线而非学术路线的同学来说,算法学习的最大作用也许是找工作…… 毕竟工作后,绝大多数时候都用各种成熟的类库,少有自己实现高级数据结构和算法的时候。但刚结束一学期修的算法课,上得我还真跟没学过算法似的,让我大开眼界,虽然每次课上我都听的不是很懂,但每节都期盼着老师又能带来什么
有趣的介绍CAP理论 本文转自:http://blog.csdn.net/dc_726/article/details/42784237这个博客的作者写的文章非常优秀。 一篇非常精彩的解释CAP理论的文章,翻译水平有限,不准确之处请参考原文,还请见谅。 Chapter 1: “Remembrance Inc” Your new venture :Last nigh
MySQL中information_schema 在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量。 1、要查询表所占的容量,就是把表的数据和索引加起来就可以了select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.tables where table_schem
UML类图新手入门级介绍 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法。 首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。前面的符号,+ 表示public,- 表示private,# 表示protected。右下角的飞翔,它表示一个接口图,
自旋锁和互斥锁 POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机
redis监控可视化工具 为了能了解redis的实时性能情况 , 每次去服务器上打info命令明显不太合适, 所以推荐使用可视化的监控工具 1 . redis live -- 实时redis监控面板可以同时监控多个redis实例 , 包括 内存使用 、分db显示的key数、客户端连接数、 命令处理数、 系统运行时间 , 以及各种直观的折线图柱状图.缺点是使用了monitor 命令监控
数据库主键,外键,索引,聚集索引,唯一索引 什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程...
TIME_WAIT和CLOSE_WAIT 对于学习过tcp/ip的同学都对 time_wait 和close_wait 不陌生你遇到过TIME_WAIT的问题吗?我相信很多都遇到过这个问题。一旦有用户在喊:网络变慢了。第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下。哎呀妈呀,几千个TIME_WAIT.然后,做的第一件事情就是:打开Google
mySQL5.6 新特性 快速预热Buffer_Pool缓冲池 在之前的版本里,如果一台高负荷的机器重启后,内存中大量的热数据被清空,此时就会重新从磁盘加载到Buffer_Pool缓冲池里,这样当高峰期间,性能就会变得很差,连接数就会很高。在MySQL5.6里,一个新特性避免的这种问题的出现。你只需在my.cnf里,加入如下:innodb_buffer_pool_dump_at_shutdown = 1解释:在关闭时把热数据du
TCP 粘包问题 http://blog.csdn.net/brk1985/article/details/17300147http://blog.csdn.net/brk1985/article/details/17291459
快速可靠协议:KCP KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。连时钟都需要外部传递进来,内部不会有任何一次系统调用。整个协议只有 ikcp.h, ikcp.c两个源文件,可以方便
gdb 调试系列 coolshell的 gdb系列100个gdb小技巧手把手教你玩转GDB(一)—牛刀小试:启动GDB开始调试手把手教你玩转GDB(二)——Breakpoint, Watchpoint和Catchpoints手把手教你玩转GDB(三)——常用命令 手把手教你玩转GDB(四)——–函数调用栈(call stack)探密
糊涂窗口综合症和Nagle算法 TCP/IP详解系列,关于tcp拥塞控制和数据流的地方讲的不细致,或许是涉及概念/算法太多,作者略去了一些对初学者来说比较陌生的细节吧。比如SWS未说明是什么就开始介绍其避免方法,还和nagle扯在了一起,直觉告诉我二者一定有猫腻,边搜索一下,果然很有收获。今天贴在这里,分享给大家。 关键字:糊涂窗口综合症 nagle算法 延迟ACK/clark算法 CORK选项第一部
mmap为什么比read/write快(兼论buffercache和pagecache) mmap为什参考文献:《从内核文件系统看文件读写过程》 《mmap是什么》 正文: 首先说一下文件系统,Linux文件系统的三层结构想必大家多少都了解一些,每个进程中都有一个用户文件描述符表,表项指向一个全局的文件表中的某个表项,文件表表项有一个指向内存inode的指针,每个inode唯一标识一个文件。如果同时有多个进程打开同一文件,他们
可重入性与线程安全 可重入性与线程安全1. 三个概念,线程安全,可重入,信号安全 先简单提一下, 线程安全,主要是针对数据竞争来说的,就是说:如果数据不需要共享,那就让每个线程私有;如果需要共享,那就加锁。 信号安全,其实也就是异步信号安全,是说线程在信号处理函数当中,不管以任何方式调用你的这个函数如果不死锁不修改数据,那就是信号安全的。也就是说一个可重入函数在信号处理函数当中不
JavaScript和JQuery好书推荐 JavaScript和JQuery好书推荐 其实无论你是php/python/java还是c/c++,只会自己那点知识是无法独立完成一个站点的建设的! 如果你因自己能力不足拒绝过几次亲友的建站请求,或者因合作中不了解前端是什么东西而失去过几次创业机会,那么,请给自己点时间,静下心来,看看这几本书! 不要再给自己找什么理由了——我只需要一门做深!人各有志,至少像我这
gcc 编译过程和编译优化 编译过程 从源代码(xxx.cpp)生成可执行文件(a.out)一共分为四个阶段: 1、预编译阶段: 此时编译器会处理源代码中所有的预编译指令。预编译指定非常有特点,全部以“#”开头。 想想,以“#”开头的命令有哪些? 不同的命令有不同的处理方法,#include命令的处理方法就是赤裸裸的复制粘贴。将#include后面的文件的内容赤裸
记一次redis导致core文件剧增,服务器磁盘爆表 工作的某一天,由于项目时间久远,代码量急剧增加,在进行make的时候总是在ld进行连接过程中被系统 signal 9 杀死了当前进程,众所周知ld 进行连接时候最消耗系统的cpu和内存的,于是在多次ld 不成功之后,我们意识到,应该是内网服务器的内存出了问题。下面是服务器的相关信息:[root@localhost /]# lsb_release -aNo LSB modules are
STL中容器操作的迭代器失效-erase()函数陷阱 迭代器失效都是发生在我们在使用容器的过程中要通过迭代器来删除某一个容器节点而导致的迭代器的失效,我们可以从各个容器使用的迭代器以及容器本身的构造结构找到答案,没必要,也不需要去记忆那些陷阱和正确的使用方法。 每个容器的使用的迭代器类型具体可以到这篇博客去看,下面我们分别看一下每个容器的迭代器失效问题1.vector 和deque 这两种容器是支持随机访问迭代器的,可
STL迭代器的种类和简介 标准模板库(The Standard Template Library, STL)定义了五种迭代器。下面的图表画出了这几种: input output \ / forward | bidire
Goroutine(协程)为何能处理大并发 简单来说:协程十分轻量,可以在一个进程中执行有数以十万计的协程,依旧保持高性能。进程、线程、协程的关系和区别:进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。堆和栈的区别请参
进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿 一、进程操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU
你人生中的那口井挖了没有? 微信上的一篇文章”用下班的时间挖一口属于自己的井,省的老了没有水喝”让我无法入眠。 这篇文章的内容如下: 有两个和尚住在隔壁,每天都会在同一时间下山去溪边挑水,不知不觉己经过了五年。突然有一天,左边这座山的和尚没有下山挑水,过了一个星期,还是没有下山挑水。直到过了一个月,右边那座山的和尚很担心就去探望他,当他看到他的老友之后,大吃一惊!因为他的老友,正在庙前打太极拳,一点也不像一个
如何学习设计模式 设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的作用一般, 其重要性和必要性自然不需要我赘述。 然而学习设计模式的过程却是痛苦的, 从阅读设计模式的圣经——GoF 的《设计模式: 可复用面向对象软件的基础》 时的枯燥、 苦闷、茫无头绪,到有一天突然有一种顿悟;自己去实现 GoF 的 23 中模式时候的知其然不知其所以然, 并且有一天在自己设计的系统种由于设计的
recv send 的 MSG_DONTWAIT 、 MSG_WAITALL 参数 基本概念:阻塞IO::socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。非阻塞IO::非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。 IO模式设置:一般对于一个socket 是阻塞模式还是非阻塞模式有两种方式:: 方法1、fcntl 设置; 方法2、recv,send 系列的参数。(读取,发送时,临时
技术普及帖:你刚才在淘宝上买了一件东西 技术普及帖:你刚才在淘宝上买了一件东西作者: 孙放 发布时间: 2012-02-25 11:04 阅读: 57393 次 推荐: 175 原文链接 [收藏] 你发现快要过年了,于是想给你的女朋友买一件毛衣,你打开了www.taobao.com。这时你的浏览器首先查询DNS服务器,将www.taobao.com转换成ip地址。不过首先你会发现,你在不同的地区或者不同的网络
redis设计与实现 读书笔记1 一个业务模型引出对redis的好奇:提出问题:1.redis 的五种数据类型分别由什么数据结构实现?2.redis 的字符串类型既可以存储字符串,也可以存储整数和浮点数,甚至是二进制位(使用setbit)redis 内部是如何实现存储这些值?3.redis的一部分命令只能对特定的数据类型执行eg:a
海量数据处理问题汇总及方法总结 面试题中总是有好多海量数据的处理问题,在这里列出一些常见问题,便于以后查阅: 类型1:hash映射+hash统计+堆排序1、 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。 可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
使用protobuff 进行网络序列化和反序列传输实例 首先我认为这个文章的读者应该是已经知道protobuff 是什么东西 该怎么用,为什么用,也就是 what how why。如果你真的不知道,可以先去搜索引擎上读几篇他的介绍,如果可以翻墙去谷歌上读读英文文章更好。了解完protobuff后下来我就来点干货,也就是protobuff在网络传输中序列化和反序列的使用。虽然是一个很简单的例子,但是希望你可以从中找到入门开始使用protobuff的
高性能mysql读书笔记1 (高性能mysql (第二版) 王小东 李军等译)--2010年1月第一次印刷译者序言:本书的定位:系统的从各个方面讲述一个高性能mysq应用应该怎么做,区别于市面上那些关于mysql开发书籍只是停留在学习mysql基本语句,本书提供了作者一些mysql调优的基准测试从而帮助理解mysql内部的工作机制,本书强调mysql的可用性 准确性以及性能。(本书根据mysql5.0稳定版)注:
vim的环境配置 一般将vim的环境配置文件 .vimrc文件放在用户的家目录底下https://github.com/weiweikaikai/My_environment_profile 这个链接可以下载 不想下载的可以底下复制set sw=4set ts=4set etset smarttabset smartindentset lbrset fo+=mBset smset sele
leetcode题解一 1. 给定一个排序的数组,删除重复的地方,使得每个元素只出现一次并返回新的长度。 不要为另一个数组分配额外的空间,你必须用固定的内存来做这个。 例如,给定的输入数组array A = [1,1,2], 你的函数应该返回长度= 2,和现在array A=[1,2]分析:数组是排好序的,所以首先想到的是遇到一个数就查看后面有没有和自己相同的数有继续后移直到找到和
微信抢红包的算法实现(C++) 目前只能实现对于整数的钱数的红包的实现,经过随机数从而实现随机人抢红包的算法/* vs 2013 wk*/#include#include#include#includeusing namespace std;//min 默认最小金额 1=0.01元//max 默认最大金额 20000 = 200 元//total 总钱数//num 总人数lo
宏定义中的# ## @# \ # (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。如:[cpp] view plain copy #define example(instr) printf("the input string is:\t%s",#instr)
笔试练习五 1.把一个数组最开始的若干个元素搬到素组的末尾,我们称之为数组的旋转。输入一个递增的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2} 为{1,2,3,4,5}的一个旋转,找出该数组中的最小数也就是1。分析:首先肯定会想到直接一个一个进行比较不是就可以了吗,但是细心的人会注意到这个题目中特别突出的就是一个递增的词语,这说明这个数组一开始是有序的,尽管进行了旋转也就是有点循环
高效阅读源代码指南 最近一年里,我阅读了不少开源项目的源代码,之前也和朋友讨论过阅读源代码时遇到的一些问题。我觉得有必要写一篇博文分享一下自己的经验。序章:准备工作通常情况下,我们不会无缘无故拿到一份源代码,我是说,当想要阅读源代码时,一定是抱着某种目的进行下去的,这个目的会贯穿整个研究过程,比如:想研究某个东西的实现想学习作者的代码风格和项目组织想参考实现并用其他语言移植项目等等。所以在
/etc/ld.so.conf文件 Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 —换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 第二类是动态链接的可执行程序。 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行
Memcache 的安装 安装memcached 需要依赖libevent库1.下载软件: 官方地址: http://http://memcached.org/ http://libevent.org/我的github上边也有 可以下载一下 https://github.com/weiweikaikai/Real-time-weather-query-s
设计模式(C++) -----单例模式 单例模式:何为单例模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为protected或private;最后,需要提供要给全局访问点,就需要在类中定义一
笔试练习四 1.用两个栈实现一个队列首先我们知道队列是一个先进先出的数据结构 栈是个先进后出的数据结构所以根据这种特性我们可以分析出可以用两个栈来模拟队列这种数据结构具体的代码实现如下:/*** FileName : Double_statck_create_queue.cpp** Author : weikai** Date : 20
负载均衡 负载均衡,英文名称为LoadBalance,其意思就是将负载(工作任务)进行平衡,分摊到多个操作单元上进行执行(例如Web服务器、FTP服务器等),实现多个服务器共同完成工作任务的目标。负载均衡建立在现有网络结构之上,它提升了服务器的性能、提高了带宽利用率,增强了网络的灵活性和可靠性。经过十年的发展,负载均衡已经成为网络应用的重要设备,甚至成为大型网络应用的核心设备,与基础路由、交换设备市场并驾齐
四.两种高效的并发模式 首先进程的出现就是由于程序在遇到要跳转执行其他程序而导致寄存器被污染而形成程序执行状态的不可再现性。进程的出现使得程序交替执行成为可能,这就是所谓的并发, 并行就是在多个逻辑处理单元中同一时刻执行。有时候也不要过于盲目的使用多进程或者多线程来实现并发,尤其在服务器编程的时候,因为如果程序是计算密集型的话,过多的上下文切换陷入内核会导致cpu忙于进行上下文切换而没有做一些我么认为有用的事,使
一.服务器编程框架 IO处理单元:单服务器中用于等待或者接受客户端的连接,接受客户端的数据,将服务器的响应数据传给客户端。有时候也不接受数据的读写只是将数据发生的事件交给逻辑单元(进程线程)处理。(与nginx的master-worker进程的方式有点类似); 服务器集群IO处理可以使用一个专门的接入服务器实现反向代理和负载均衡,此时后边的逻辑单位就是各种的逻辑服务器,可能
详细说说select poll epoll (以下内容来自网络和自己的总结,再次感谢网络中的大神们提供的见解)在探索select poll epoll之前我们首先要知道什么叫多路复用:下来探索一下为什么会用到多路复用:首先我们看看一个客户端请求服务器的完整过程。首先,请求过来,要建立连接,然后再接收数据,接收数据后,再发送数据。具体到系统底层,就是读写事件,而当读写事件没有准备好时,必然不可操作,如果不用非
sendfile函数如何实现零拷贝提高性能 现在流行的 web 服务器里面都提供sendfile 选项用来提高服务器性能,那到底 sendfile 是什么,怎么影响性能的呢?sendfile 实际上是 Linux 2.0+ 以后的推出的一个系统调用,web 服务器可以通过调整自身的配置来决定是否利用 sendfile 这个系统调用。先来看一下不用 sendfile 的传统网络传输过程:char tmp_buf[100
输出 0----N 的全排列 对于这种全排列我们首先思考是将其中的一个固定住后边的进行变化,再将其中的两个定住后边的变化直接到没有数据,之后再将第二个和第一个交换第二个作为第一个,再重复这个变化,直到所有的数据都成为过第一个来点实际的例子 比如 对于“abc”这三个字母的全排列: 首先将a固定住 bc进行变化 就是 abc acb 之后恢复原来的abc 再将a和b交换 就是 bac bca 之后
Nginx探索五 为了提高性能,nginx肯定会自己实现管理资源的数据结构,下来就来看吧ngx_pool_t(100%)ngx_pool_t是一个非常重要的数据结构,在很多重要的场合都有使用,很多重要的数据结构也都在使用它。那么它究竟是一个什么东西呢?简单的说,它提供了一种机制,帮助管理一系列的资源(如内存,文件等),使得对这些资源的使用和释放统一进行,免除了使用过程中考虑到对各种各样资源的什么时候释放
Nginx探索四 在探索Nginx中的的基本数据结构之前,我们要思考这样一个问题,为什么,nginx要花这莫大力气搞一个自己的数据结构,用其他的例如STL就可以了嘛,为什么,首先我们知道C语言为什么不能很好作为web服务器的文本处理,因为对字符串的处理太差,所以,一个追求性能极致的nginx肯定会在这个方面上下功夫来提高性能。nginx数据结构nginx的作者为追求极致的高效,自己实现了很多颇具特色的n
Nginx探索三 这次探索一下http 请求request这节我们讲request,在nginx中我们指的是http请求,具体到nginx中的数据结构是ngx_http_request_t。ngx_http_request_t是对一个http请求的封装。 我们知道,一个http请求,包含请求行、请求头、请求体、响应行、响应头、响应体。http请求是典型的请求-响应类型的的网络协议,而http是文
Nginx探索二 今天来谈谈nginx的连接connection在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件。利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比如,建立连接,发送与接受数据等。而nginx中的http请求的处理就是建立在connection之上的,所以nginx不仅可以作为一个web服
STL map/multimap 常用函数 map/multimap 使用map/multimap之前要加入头文件#include,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。map和multimap内部的数据结构也是平衡二叉树。 map和multimap根据元素的key自动对元素进行排序
STL set/multiset 常用函数 版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]集合使用set或multiset之前,必须加入头文件Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。sets和multiset内部以平衡二叉树实现1. 常用函数1) 构造函数和析构函数
STL deque常用函数 deque函数:deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。(1) 构造函数deque():创建一个空dequedeque(int nSize):创建一个deque,元素个
STL list常用函数 相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。常用函数(1) 构造函数list c:创建一个空的listlist c1(c2):复制另一个同类型元素的listlistc(n)
STL vector常用函数 Constructors 构造函数Operators 对vector进行赋值或比较assign() 对Vector中的元素赋值at() 返回指定位置的元素back() 返回最末一个元素begin() 返回第一个元素的迭代器capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)clear() 清空所有元素empty()判断Vector是否
如何熟悉一个开源项目? 你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。2.阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至
我是一个线程 我是一个线程,我一出生就被编了个号: 0x3704,然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900待的时间比较长, 他带着沧桑的口气对我说: “我们线程的宿命就是处理包裹。把包裹处理完以后还得马上回到这里,否则可能永远回不来了。” 我一脸懵懂,包裹,什么包裹? “不要着急,马上你就会明白了, 我们这里是不养闲人的。” 果然
笔试练习四 第一题:最长回文子序列题目思想大概是这样:cabbeaf:回文子序列有:c,a,aa,bb,,aba,abba,e,f,最长的就是abba,所以输出长度为4#include #include #include int dp[1000][1000];using namespace std;int main(){//思路就是求这个原字符串和它反转字符串的最长公共子序列 stri
笔试练习三 一.字符串的反转 示例: I love C++ 反转之后是 C++ love I 尽量的减少空间复杂度和事件复杂度思路:先将每个单词进行反转再进行整体反转局部反转:I evol ++C 全部反转:C++ love Ivoid Reverse_char(char str[]){ if (str == NULL)
超简单的大小写字符转换函数 void BigtoSmall(){ char a; cin >> a; char b = a | 0x20; cout << (char)b << endl;}void SmalltoBig(){ char a; cin >> a; char b = a & ~ 0x20; cout << (char)b << endl;}int main(){ Bigto
STL string的常用函数 string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常stri
指针和引用的区别 看着很多人对指针和引用都模糊不清今天我自己探索了一下啊 ......................... 引用和指针都是地址的概念,引用是一个内存对象的别名,指针指向一个内存对象,保存了这个对象的内存地址。 区别: 1.引用不能为空,即不存在对空对象的引用,指针可以为空,指向空对象。 2.引用必须初始化,指定对哪个对象的引用,指针不需要。 3.引
精简指令集和复杂指令集的区别 RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。CPU架构是厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MU
笔试练习二 一. 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。int Get_MoreThanHalf_Num(char arr[],int n){ if (n <= 0) { return -1; } int ret = 0; int
笔试练习一 1.实现一个Memcpy函数2.给定一副扑克牌和一个随机函数,设计一个洗牌算法#include#includeusing namespace std;void Shuffle(int arr[],int n){ if(arr == NULL) { return ; } int
Nginx探索一 结合Nginx开发从入门到精通一书和Nginx源码学习服务器的高并发处理。 最近编写了一个简单的httpd web服务器,虽说比较简单,但是可以实现基本的web服务器的功能,而且还是有数据库的增删查改,由兴趣的同学可以到我的github上边参与进来,添加一些你的见解,我的github:https://github.com/weiweikaikai/myhttpd.git
如何让UDP变得靠谱一些(增加UDP的可靠性) 最经在写一个聊天系统,用到了UDP协议,但是要给UDP增加一些可靠性,终于在UNP这本书中找到了些许实现的思想,特来写写博客,与大伙交流一下思想,写的不够深入只是实现了书中所写,欢迎拍砖和留言交流!!!!!UNP书中采用的sigsetjmp 和siglongjmp来避免 由于竟态 导致的SIGALRM我采用的是pselect中注册了SIGALRM信号进行信号的避免同时还做到了
微软COM中GUID和UUID、CLSID、IID 当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一:第一种是采用和Internet地址一样的管理方式,成立一个管理机构,用户如果想开发一个COM组件的时候需要向该机构提出申请,并交一定的费用。第二种是发明一种算法,每次都能产生一个全球唯一的COM组件标识符。第一种方法,用户使用起来太不方便,微软采用第二种方法,并发明了一种算法,这种算法用GUI
浅谈操作系统进程的引出 进程的引出 之前的操作系统的程序是顺序执行的所以速度和吞吐量很慢,操作系统为了增加自己的系统的吞吐量就是单位时间处理的数据量而在多道程序系统中程序是不能独立运行的那就更不能和其他程序交替运行了,因为每个程序拥有的硬件上下文资源可能会一样,这样交替的执行就会导致程序的不可再现性,那莫为了实现在I/O请求程序运行的时候CPU不至于空闲而引出了让两个程序同时运行,因为现在的操作系统有可以实现
为什么你要写博客? 为什么你要写博客?陈素封· 2 年前 为什么你要写博客?一个选择我知道现在可能说这话有点不合时宜,毕竟博客时代都已经过去了,再号召大家用过就好像时的东西是不是有点逆流而上?我曾经也问过自己这个问题,但是我觉得,博客时代过去跟我们要开博客是没有多大关系的,就好像你的读书时代已经过去你就不再读书一样。判断一件事情值不值得去做有一个方法:在一张白纸的左边写不值得做的原因,然后
优秀博客推荐 欢迎自荐和推荐链接。请于留言处告知。基本算法贪心算法:贪心算法 作者:独酌逸醉 贪心算法精讲 作者:3522021224递归和分治:递归与分治策略 作者:zhoudaxia图论图的遍历(DFS和BFS): 图的遍历 作者:jefferent最小生成树(Prim算法和Kruskal算法): 贪心算法--最小生成树 作者:独酌逸醉D
用C++模拟操作系统进程调度的几种算法 ******************************************** *****1.******* 先来先服务算法 ********** *****2.******** 时间片轮转 ************ *****3.******** 短作业优先 ************ *****4.******** 优先级调度 ...
关于fork函数执行的几种情况 12345for (int i = 0; i 2; i++){ fork(); printf("-");}//输出6个-先看这段代码: 12345678910111213int main(void)
链表操作之快慢指针 使用包括链表的找环 判断链表相交 找倒数第几个节点。。。。。代码:#include#includeusing namespace std;typedef struct node{ int data; int size; struct node*next;}node;typedef node* Lnode;void init(Lnode &head
可变参数列表 C语言的可变参数列表没有什么神秘,就是从已知的变量地址根据参数内存的分配是连续的来找出后边的所有参数不信,你看底下代码#includeusing namespace std;//#includetypedef char* va_list;#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof
引用计数型指针的的简单实现 templateclass Smart_ptr{ public: Smart_ptr(T*p=0):pointer(p),count(new size_t(p==0?0:1)) {} Smart_ptr(const Smart_ptr &rhs):pointer(rhs.pointer),count(rhs.count) { ++ *count; } ~Smar
交换排序之 冒泡排序(优化) (稳定) #includeusing namespace std;//冒泡排序属于交换排序 //空间复杂度 O(1)//时间复杂度最坏是O(n2)// 最好是O(n)// 平均数O(n2)templatevoid BubbleSort(T array[],int n)//版本1{ for(int i=0;i<n-1;++i) { for(in
一个可以不传参数就可以在函数中改变调用者内部的变量数据的函数 先贴出代码void fun(){int *p= (int*)*(&p+1);p-=1;*p=100;}int main(){int a=10;fun();cout<<a<<endl;return 0;}输出结果是100;下面为了说明里面的栈帧原来我使用另一个和他相同的代码进行分析,代码与分析如下:void fun(int x){int *p= (int*)*
用C++实现一元多项式的四则运算包括数据的文件导入与导出 对于一元多项式我们都再熟悉不过了,这是使用数据结构的单链表进行实现的,下面贴一下我的实现代码,欢迎批评指导//test.h#pragma once#include#includeusing namespace std;class P_Sum{public: typedef struct P_node{ double coef; int index; P_node* n
程序的思考之一个可以检验你指针理解功力的程序 希望结果可以不让你大吃一惊哟!小程序也可以大智慧的!#includeusing namespace std;int main(){double* (*a)[3][6];cout<<sizeof(a)<<endl; //4 a就是一个数组指针32位下是4字节cout<<sizeof(*a)<<endl; // 72 *a就是数组整体cout<<sizeof(
STL(4)----<list> 双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素。在STL中,list和vector一样,是两个常被使用的容器。和 vector不一样的是,list不支持对元素的任意存取。list中提供的成员函数与vector类似,不过list提供对表首元素的操作 push_front、pop_front,这是vector不具备的。和vector另一