自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 大哭!!!栽到了std::move手里!

昨天项目里有个问题一直搞不懂: std::vector#include <iostream>#include <utility>#include <vector>#include <string>int main(){ std::string str = "Hello";

2018-08-23 12:19:48 258

原创 使用hadoop对一组数据排序,求平均值。

1,求平均值 输入文档如下: 基本思路是利用map来产生<1,num>这样的数据,这样reduce处理的数据形式是<1,num1 nmu2 …..>. 代码: import java.io.IOException; import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration; import

2017-08-16 15:33:01 1132

原创 在http服务器里使用协程

首先在使用协程前我们要明白什么是协程?协程相比线程有什么好处? 大概来说:协程是一种用户态的轻量级线程。 相比线程它的开销更小,不需要线程锁,成本低,一个单核cpu可支持上万个协程。 这里推荐一篇博客: http://blog.csdn.net/qq910894904/article/details/41699541我们这里使用腾讯协程库libco,首先下载libco源码。把它放在h

2017-08-04 16:38:35 1191 2

原创 理解协程的运行流程

这是我整合自己对协程的一些理解,文章中的图我有些是在网上直接拷贝的,在这里感谢原作者。这是http服务器整合协程的流程图: 代码图: 从控制台传进来的参数allfont,font,每次循环会创建font个task,task的概念可以说就是协程。协程通过stCoRoutine_t结构来描述,就像我们进程的task_struct一样,保存着运行时,关于协程运行环境的所有信息,所以每个task有一

2017-08-04 16:11:39 3342

原创 用vb.net开发的简易(通用)上位机

这里写的是上位机基本的程序,有什么额外功能的话可以自己加上。我是参与别人项目里做的,主要实现了自动检测,断点重连,发送检测消息。因为要实时使用,所以要最大程度的避免程序崩溃,因此程序里使用了比较多的try模块。同是为了让别人使用起来方便,没有做其他修饰的东西。Public Class Form1//用到的全局变量 Public socketi As Net.Sockets.Socket'套

2017-08-04 01:22:42 6400

原创 搭建简单的http服务器

开发语言C++,平台为Linux。 主要流程为:服务器获得请求–>响应并处理请求–>返回结果。这里着重讲怎么处理请求。 主程序在获得一个请求后会开辟一个线程来处理请求 流程图如下。 hand_cgi函数流程图 cgi程序流程图。 代码:#include"http.h"int ret = 0;void printf_log(string s){ //cout

2017-08-03 06:12:55 5977

原创 不用加减乘除做加法的一些方法

在这里归纳了网上的办法,有些解释是复制粘贴的,如果原作者看到了,我在这里表示感谢。 第一种: 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2。 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相

2017-07-14 20:52:48 705

转载 mongodb学习:mongodb索引原理

网上看到一篇很好的文章,在这里给出链接: http://www.open-open.com/lib/view/open1461568319242.html

2017-06-13 00:09:31 3541 1

原创 mongodb学习:复制集搭建

我们这里搭建3个节点的复制集,示例如下: 由于我用的是32位系统,所以驱动引擎需要更换所以使用–storageEngine=mmapv1,fork为后台执行 配置文件如下: ![这里写图片描述] 依次创建3个。(http://img.blog.csdn.net/20170612234941678?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ

2017-06-13 00:07:01 339

转载 mongodb系列-conf配置文件

启动MongoDB有2种方式,一种是直接默认启动,另一种是指定配置文件。启动方式如下: 1: /etc/init.d/mongod start 或service mongod start 2: mongod –config /etc/mongodb.conf 下面我们看看配置文件: vi /etc/mongod.conf# 日志文件位置 logpath=/var/log/mongo/

2017-06-10 09:59:03 16154

转载 Linux平台下安装Mongodb

找到一篇写得很好的文章,解决了我很多的问题。: http://coderschool.cn/1709.html另外在附上关闭mongodb的方法来自:http://outofmemory.cn/code-snippet/15999/how-to-shutdown-mongodb: killall mongodb //or kill -9 mongo-pid 上面的方法确实可以关闭mongo

2017-06-06 10:50:35 297

原创 用vb.net开发的简易服务器

在这里介绍程序主要实现的功能以及流程。 程序在启动后会开启1个线程,1个定时器,一个线程用来接受来自客户端的连接,定时器用来检测当前有多少个客户连接,当有一个客户连接是,会开启一个线程用来与客户传送消息。为了简单起见,服务器发送消息为广播发送。全局变量: Dim listen_thread As Thread'监听线程 Dim listener As Socket '套接字 Pu

2017-06-02 10:00:58 3501 1

转载 MapReduce工作原理讲解

有时候我们在用,但是却不知道为什么。就像苹果砸到我们头上,这或许已经是很自然的事情了,但是牛顿却发现了地球的万有引力。ok了,希望通过了解MapReduce,我们能够写出更好的MapReduce例子。 第一部分:MapReduce工作原理 MapReduce 角色 •Client :作业提交发起者。 •JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业。

2017-05-25 23:51:43 346

原创 VB.net 字节数组转字符串的办法

由于我最近再用Vb.net进行网络编程,因为从服务器接受的数据都保存在byte数组里,想要转换成string是非常麻烦的,而且我在网上所查到的资料基本都试了一遍,然而有着各种各样的问题。我在官网上找到了一种办法,如下:'假设有byte数组by,里面保存这我们想要的数据Dim s As New System.Text.StringBuilderDim str As String = Nothing

2017-05-20 04:29:45 8255

原创 主机向虚拟机传送文件

一般来说,我们只需要复制粘贴就可以了,前提是我们安装了vmware tools,这个都是默认安装好的,当然如果你的虚拟机没有的话这里我提供一个下载地址(linux虚拟系统): http://download.csdn.net/detail/longxuu/6434885在复制的时候会遇到权限问题,你把文件粘贴到当前用户的/home下就行了。

2017-05-08 04:07:13 1800

原创 解决Python字符串问题:UnicodeEncodeError: 'ascii' codec can't encode characters in position问题

再向文件写入中文字符串会出现这个问题。即使在开头添加了# -- coding: utf-8 --也不行。 解决办法: import sys reload(sys) sys.setdefaultencoding( “utf-8” ) 这样可以成功运行。

2017-05-07 12:12:30 1327

转载 Python的字符串操作

去空格及特殊符号s.strip().lstrip().rstrip(',')复制字符串strcpy(sStr1,sStr2)sStr1 = 'strcpy'sStr2 = sStr1sStr1 = 'strcpy2'print sStr2连接字符串#strcat(sStr1,sStr2)sStr1 = 'strcat'sStr2 = 'append'sStr1 += sStr2pri

2017-05-07 02:22:56 263

原创 python对excel文件的读写操作

由于用c++程序处理excel文件实在太过麻烦,于是我便去寻求更为简单的方法,发现python较为简单,我在这里整合了网上的python处理excel文件模块的使用。xlrd模块,可以读取excel文件数据,在导入该模块前请确保你安装了该模块,下载地址:https://pypi.python.org/pypi/xlrd**安装:CD到解压目录,执行 sudo python setup.py inst

2017-05-02 04:40:02 4756

转载 python中的正则表达式

1.re的简介 使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。import re print re.doc 可以查询re模块的功能信息,下面会结合几个例子说明。2.re的正则表达式语法 正则表达式语

2017-05-01 06:25:58 403

转载 针对Excel表格文件操作的编程实现

由于有个项目要对excel文件处理,结果一时竟无法下手,便上网查询了这方面的知识。以下代码适用于c++。 一、 包含Excel文件操作类头文件#include "CSpreadSheet.h"二、 新建Excel文件,并写入默认数据// 新建Excel文件名及路径,TestSheet为内部表名CSpreadSheet SS("c:\\Test.xls", "TestSheet");CString

2017-04-28 00:41:44 4155 2

转载 格雷码的递归生成

问题:产生n位元的所有格雷码。格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 。 如果要产生n位元的格雷码,那么格雷码的个数为2^n.假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的位元值;第二步,改变右起第

2017-04-24 02:33:03 1581 1

原创 http协议支持的6种请求格式

标准Http协议支持六种请求方法,即:   1,GET   2,HEAD   3,PUT   4,DELETE   5,POST   6,OPTIONS 1, GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。 GET的url格式

2017-04-19 11:17:05 2913

转载 Mysql的接口函数

mysql_affected_rows() 返回被最新的UPDATE, DELETE或INSERT查询影响的行数。 mysql_close() 关闭一个服务器连接。 mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。 mysql_change_user() 改变在一个打开的连接上的用户和数据库。 mysql_c

2017-04-15 20:18:51 502

转载 setsockopt解决套接字绑定失败

在编程的时候遇到的问题,在网上找到了原因,这这里记录一下,方便以后查阅。bind API 函数来绑定一个地址(一个接口和一个端口)到一个套接字端点。可以在服务器设置中使用这个函数,以便限制可能有连接到来的接口。也可以在客户端设置中使用 这个函数,以便限制应当供出去的连接所使用的接口。bind 最常见的用法是关联端口号和服务器,并使用通配符地址(INADDR_ANY),它允许任何接口为到来的连接所使用

2017-04-10 03:59:47 7359

转载 关于crosses initialization of “XXX的问题

这个问题是由于goto引起的;goto是已经名为不提倡的语句,但是有时它还是很有用的。 代码: 11 void func() 12 { 13 A a1; 14 cout << “hello,world!” << endl; 15 goto end; 16 A a2; 17 end: 18

2017-04-09 03:56:38 3805

原创 Shell脚本的一些操作和知识

循环语句: Bash Shell中主要提供了三种循环方式:for、while和until。 一,for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。 其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。 for的语法结构如下: 1.

2017-03-28 15:32:36 200

原创 epoll函数及原理

epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平

2017-03-22 23:20:49 1878

原创 poll函数详解及原理

poll函数实现和select极为相似,但是它们的接口并不相同:int poll(struct pollfd fdarray[], nfds_t nfds, int timeout); int select(int maxfdp1, fd_set restrict readfds, fd_set *restrict expectfds, struct timeval restrict tvptr

2017-03-22 15:34:07 14338 2

原创 Select函数详解及原理

select函数原型:int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);select函数的参数将告诉内核:(1) 我们所关心的描述符。(2) 对于每个描述符我们所关心的条件(是否读一个给定的描述符?是否想写一个给定的描述符?是否关心一个描述符的异

2017-03-22 15:12:17 2605

原创 Xshell连接不上虚拟机的问题和解决办法

·第一次用xshell,一直连不上linux,搞了好久,也查了很多办法,但是最后也终于解决了,在这里我分享一下自己的解决办法,再列举网上的办法,希望可以帮助其他人。 1,你的linux ip地址没有配置。 在你的linux下输入ifconfig -a,如果 你的inet addr为fexxxxxxx之类的,说明ip地址没有配置,你需要自己配置,配置的方法网上很多,在这里列举一种:

2017-03-03 11:09:03 185498 26

转载 OSI七层模型详解

发现一篇写得很好的文章,与大家分享: OSI(Open System Interconnection Reference Model,OSI/RM)模型把网络通信的工作分为7层,它们由低到高分别是物理层(Physical Layer),数据链路层(Data Link Layer),网络层(Network Layer),传输层(Transport Layer),会话层(Session Layer),

2017-02-28 23:27:51 749

原创 Linux下用gdb调试多进程与多线程程序

1,调试多进程或多线程程序我们可以用printf语句打印消息,比如打印一些用的变量. 这种方法的优点是不用借助其他工具就可以对程序的运行进行观察,缺点是插入语句的位置、粒度等都需要调试者自己去权衡,如果插入过多的打印语句,则频繁的IO操作会使程序运行变慢,线程行为改变,有些bug甚至不会再出现。 2 , 使用我们的gdb工具。 在这里我们先列出gdb的一些基本操作:

2017-02-26 16:08:03 620

原创 简单常用的信号集操作函数

在这里我们先列出这些信号集操作函数,它们是: int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); int sigismember(const sigset

2017-02-24 12:51:18 487

转载 线程安全函数与可重入函数

一 什么是线程安全函数 • 概念: 线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 • 确保线程安全: 要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,对于同一进程的不同线程来说,每个线程的局部变量都是私有

2017-02-24 11:24:30 301

原创 gcc编译动态库与静态库

我们知道库有静态库和动态库2种。这是因为链接时间不同而造成的。如下为它们的差别: 静态库是在链接阶段被链接的,链接静态库就像是我们所用的复制粘贴,它操作的对象是目标代码,源码不会发生改变由于静态库被链接后库就直接嵌入可执行文件中了,所以生成的可执行文件就不受库的影响了,即使在别的电脑上运行,程序依然可以成功运行。有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留

2017-02-18 05:40:23 711

原创 Linux:浅谈信号量

1.信号量的概念。 信号量的本质是一种数据操作锁,它本⾝身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本⾝身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。 当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,无资源可用,进程会进⼊入睡眠状态直至资源可用。 当进程不再使用

2017-02-17 06:18:43 422

原创 浅谈消息队列

1,首先,我们应该说清楚什么是消息队列?(以下为网络资料) 消息队列提供了一种从一个进程向另一个进程发送一个数据块的⽅方法。 每个数据块都被认 为是有一个类型,接收者进程接收的数据块可以有不同的类型值。 可以这么说消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值、用户ID、组ID、消息队列

2017-02-17 04:23:23 370

原创 linux task_struct的结构体成员信息

我在网上查阅task_struct的相关信息时,讲的有点乱,让人很难整理,所以我在这里把网上的资料整理一下,这里只列出task_stuct的结构体成员,相关的信息以后会补充。 1.进程状态。 2、进程标识符(PID) 3、进程内核栈 4、标记 5、表示进程亲属关系的成员 6、ptrace系统调用 7、Performance Event 8、进程调度 9、进程地址空间 10、判

2017-01-12 13:18:16 440

原创 Linux学习历程,与文件有关的时间属性

今天在学习linux指令的时候,发现在输入[admin@localhost cmd]$ stat test4.c 时会显示几行信息: File: `test4.c’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 274866

2016-12-26 17:12:44 331

原创 二叉树:找出2个节点的最近公共祖先(优化算法)

这道题的传统思路是想方法把根到两个点的路径分别保存在两个容器中,然后从后往前遍历容器找出相等的节点便为最近公共祖先。很容易计算出这是一个时间复杂度为o(n),空间复杂度为o(lgn)的算法。如果我们这时要求使用空间复杂度为o(1)的算法那?我们可以这样做: 假设2个节点为p1, p2。 我们遍历这颗树,如果发现这个节点为p1/p2或者这个 节点的子树中有p1/p2时,返回p1/p2。否则为NUL

2016-12-01 02:22:42 2691 1

空空如也

空空如也

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

TA关注的人

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