- 博客(73)
- 资源 (1)
- 问答 (13)
- 收藏
- 关注
原创 Explorer : 发布一个key-value存储系统,带有客户端和服务器端
Explorer一个key-value存储系统,带有客户端和服务器端。使用非常方便。使用B+树作为存储引擎,客户端和服务器端使用TCP协议进行通信。 代码采用C++实现,底层将客户端和服务器通信封装成了一个网络库,里面还有些还不错的实现可供看看,比如线程池、工作队列、Reactor设计模式实现等等。项目地址:https://github.com/zinx20
2017-07-28 21:53:15
905
原创 一款线程安全、基本功能齐全的STL
MiniSTL 目前正在完成一个STL,主要想通过该项目锻炼C++编程、模板编程、熟悉STL、锻炼数据结构和算法能力。 项目的目标是实现STL的几大构件+线程安全。项目过程中主要参考SGI STL源码,项目名称为:MiniSTL。 目前已完成空间配置器和迭代器部分,接下来会去实现容器和算法,最后还会实现几种智能指针。有兴趣的同学可以一起参与进来,一起学习进步。
2017-06-10 17:54:53
630
原创 MySQL基本操作
初步知识数据库是一个以某种有组织方式存储的数据的集合DBMS是数据库管理系统也叫数据库软件MySQL是一种DBMSSQL语句是DBMS用来操控数据库的语言MySQL主配置文件 /etc/my.cnfMySQL数据库文件存放位置 /var/lib/mysql
2017-05-17 20:40:50
824
原创 Memcached的使用与CAS命令
Memcached的前台启动memcached -p 11211 -m 64m -vv -u root作为daemon后台启动memcached -p 11211 -m 64m -vv -u root -d -u选项只有在root用户下才使用连接Memcached服务
2017-05-14 17:22:31
1296
原创 vector空间的动态增长
vector空间的动态增长 当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,不能保证原空间之后有可供配置的空间。因此,对vector的任何操作,一旦引起空间的重新配置
2017-04-10 11:19:33
4769
1
原创 升级gcc后出现错误:/usr/lib/libstdc++.so.6: version `CXXABI_1.3.9' not found
升级gcc后,今天用g++编译一个c++程序时出现一个错误,如下:./destructor: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./destructor)经过网上查找后,发现问题是由于升级了gcc,却没有将升级后的gcc的动态库去替换老版本的gcc动态库所致。
2017-04-07 19:40:47
48469
4
原创 堆相关操作
#include using namespace std;void swap(int *a, int *b){ int tmp = *a; *a = *b; *b = tmp;}/*1.结点i的左右子节点下标分别为2i+1,2i+22.结点i的父结点下标为(i-1)/23.一颗完全二叉树的最后一个拥有子结点的结点下标为(n/2 - 1),n为结点数*///下滤操作
2017-03-28 22:07:13
435
原创 七种排序算法及其复杂度
1.冒泡排序时间复杂度:O(N^2)思想:从后往前开始,相邻的两两进行比较,将小的逐渐移到前面。(也可以从前往后开始两两相邻的进行比较)代码:void BubbleSort(int *a, int N){ if (a == NULL || N <= 0) return ; int i, j; for (i = 0; i < N; i++) { for (j
2017-03-28 20:40:04
1457
原创 Nginx源码分析与实践---进程间通信机制(信号)
在前面我们分析了nginx进程间通信机制的共享内存和套接字。这次我们分析剩下一种进程间通信机制---信号。首先要区分信号和信号量:信号是用于进程间通信的机制,而信号量是用于保证共享资源不被并发访问的机制,如可使用信号量作为互斥锁实现多进程下对共享资源的同步。1.nginx中什么地方用到了信号?比如我们输入命令:./nginx -s reload或./nginx -s stop,
2017-03-28 15:25:37
1212
原创 生产者-消费者问题
生产者-消费者问题是进程间或线程间同步的经典问题。该问题有多种实现,如消息队列、共享内存等,这次我们用的是多线程和互斥锁以及条件变量来实现该问题。动手写程序之前先得把问题想明白。1.该问题难在什么地方?难点其实只有一个,就是同步问题。这个同步涉及了以下几个方面:多个生产者之间的同步(如:生产资源的总数的同步,生产的资源不会乱序的同步)、多个消费者之间的同步(如:消费资源
2017-03-27 20:17:21
745
原创 Nginx源码分析与实践---进程间通信机制(套接字)
在上一篇中,我们看到了nginx共享内存方式的进程间通信。这次我们看下nginx使用套接字的进程间通信方式。同样的几个问题:1.什么时候需要使用套接字方式的进程间通信机制呢?举个栗子:我们知道nginx有master进程和worker进程,那么master进程是如何向worker进程发送消息的呢?worker进程又是如何接收master发送过来的消息呢?答案就是使用套接字。注意
2017-03-25 11:59:10
1341
2
原创 Nginx源码分析与实践---进程间通信机制(共享内存)
Nginx有一个master进程和多个worker进程,那么master进程与worker进程间或worker进程之间是如何通信的呢,又什么时候需要进程间通信呢?我们知道linux下的进程间通信方式主要有:管道、FIFO、套接字、消息队列、共享内存、信号。那么nginx的进程间通信方式采用的是什么呢?nginx的3种进程间通信方式为:共享内存、套接字、信号共享内存1.什么时
2017-03-24 16:40:35
2356
转载 内存管理之程序内存分布
在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space)。1 32位虚拟内存布局在32位模式下虚拟地址空间总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使用,那么它
2017-03-19 14:37:59
645
原创 树的镜向
问题: 求一颗树的镜向解决思路: 镜向其实就是将所有结点的左右两个子结点交换就行。所以可以遍历二叉树,遍历到一个结点时,交换其左右两个子结点。代码:递归版本void Mirro(BTree *T){ if (T == NULL || (T->left == NULL && T->right == NULL)) return ; BT
2017-03-16 17:39:39
425
原创 判断一棵树为另一颗树的子树
题目: 有两颗二叉树,判断其中一颗A是否是另一颗B的子树。解决思想: 按先序遍历树B的每个结点,判断结点是否和树A的根结点相同。若相同,再判断以该结点为根结点的树是否有和树A相同的子树。代码:#include using namespace std;struct BTree{ int m_val; BTree *m_lchild; BT
2017-03-16 17:02:10
1668
原创 Nginx源码分析与实践---ngx_command_t
从上一节了解到配置项的相关属性是由ngx_command_t这个结构体设置的,下面就来看其源码,分析一下。.../src/core/ngx_core.h :typedef struct ngx_command_s ngx_command_t;由上可知,以s结尾的和以t结尾的是同一种类型。该头文件下还有许多类似的定义。如:typedef struct ngx_modu
2017-03-15 21:17:27
3019
原创 Nginx源码分析与实践---(一)编写一个简单的Http模块
在上一节中,我们通过修改配置文件,便能让nginx去访问我们写的html文件,并返回给浏览器。问题是:nginx是如何检测到我们写的配置项的?检测到后,nginx又是如何知道该进行什么操作的?本节通过亲自实践,写一个经典的Hello World模块来了解相应的流程是如何进行的。我们采用自上向下的方法,先让模块跑起来,再去向下分析模块的具体细节。(一)模块源码准备工作:新建的模块名为ng
2017-03-15 21:04:19
1764
转载 C/C++面试
首先说明,此帖针对的是非计算机专业想转互联网开发的童鞋,C/C++后台开发方向,想起自己在准备阶段也经常水河畔,看了一些面经对自己确立方向和需要准备哪些上帮助很大,所以也分享下自己的经历,希望对大家有所帮助。基本情况:电工硕士,教研室项目就是matlab仿真,自己毫无兴趣,一心想从事互联网软件开发,但无互联网方面的项目经验,无实习经验(这一点面试时很伤),自己准备的是C/C++
2017-03-13 20:49:28
1860
3
转载 教你如何迅速秒杀掉:99%的海量数据处理面试题
教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。
2017-03-13 20:22:56
445
转载 腾讯后台面试过程
一位自学生的努力与梦想求职历程:只面了两间,都是一轮笔试+三轮面试,拿到心仪公司offer后就木有参加其他面试了。1、淘宝(研发工程师)终面后被BS,那RP…。2、腾讯(后台开发工程师)成功拿到offer。学习经历:作为一个非计科专业的学生,三年自学血泪史历历在目。没人指导,靠自己摸搜,走过很多歪路,不被同学朋友理解,被老师当问题学生,被早学几年的前辈嘲笑。一度怀疑自己
2017-03-13 20:17:53
4603
转载 腾讯后台开发面试总结
前段时间专心面过腾讯,经过了N轮的技术面,结果还是挂了,但没挂在技术面,比较欣慰,回来之后写一点总结,以供有梦想进入腾讯做后台服务器开发的同学参考,本文章为胡成精心总结,胡成原创,copy和转载请通知。ps:()之内的文字由作者点评,非面试题文字。linux和os:netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的
2017-03-13 20:14:59
10938
2
转载 Nginx常用命令
1. 启动 Nginxpoechant@ubuntu:sudo ./sbin/nginx2. 停止 Nginxpoechant@ubuntu:sudo ./sbin/nginx -s stoppoechant@ubuntu:sudo ./sbin/nginx -s quit-s都是采用向 Nginx 发送信号的方式。3. Nginx 重载配置poechan
2017-03-09 17:00:33
557
原创 Nginx源码分析与实践---Nginx的初步配置
先写个HTML文件:新建目录/home/zxin/nginx_temp_file,在该目录下写个index.html文件: My Nginx This is my first nginx ! 修改配置文件:在配置文件nginx.conf(本机位置
2017-03-09 16:33:23
684
原创 linux下动态库的使用
动态库的调用分为隐式调用和显式调用动态库的编写动态库是由源文件编译而成的,与普通程序不同的是,动态库没有main函数,不能单独执行,需要被调用才能执行。写一个四则运算的动态库calculate.h文件#ifndef CALCULATE_H_H#define CALCULATE_H_H//加法int add(int a, int b);//减法int su
2017-03-08 19:42:47
509
转载 一个Linux下C线程池的实现
1.线程池基本原理 在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程
2017-03-06 16:21:26
381
原创 关于TCP超时重传、快速重传、慢启动、拥塞避免、拥塞发生、快速恢复、滑动窗口之间的关系概括
标题上这些概念很多,理解也有一定困难,尤其是它们之间的相互关系。这次就简单概括一下。1.滑动窗口接收端使用的流量控制。当接收端的应用程序从TCP缓存中提取数据速度过慢,导致TCP缓存中还有未被提取的数据,由于TCP缓存大小是固定的,则接收端下次能接收的数据量就变小了。2.糊涂窗口综合症当滑动窗口变为0的时候,则发送端不能再继续发送任何数据。若之后应用程序从TCP缓存中提取了几个字节
2017-03-02 17:58:11
8119
3
转载 TCP 的那些事儿(下)
转自:http://coolshell.cn/articles/11609.html这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需
2017-03-02 17:26:18
315
转载 TCP 的那些事儿(上)
转自陈浩:酷客TCP头格式接下来,我们来看一下TCP头的格式TCP头格式(图片来源)你需要注意这么几点:TCP的包是没有IP地址的,那是IP层上的事。但是有源端口和目标端口。一个TCP连接需要四个元组来表示是同一个连接(src_ip, src_port, dst_ip, dst_port)准确说是五元组,还有一个是协议。但因为这里只是说TCP协议,所以,这里
2017-03-02 15:36:18
795
原创 系统架构方面的文章
(0) 系统架构汇总(1)关于负载均衡的一切(2)智能广告系统架构(3)twitter系统架构分析(4)秒杀系统架构优化思路(5)大型网站后台架构的演变(6)Instagram的技术架构(7) 知乎技术方案初探(8)Facebook图片存储架构的学习(9)一淘网的系统架构(10)大型网站架构系列:缓存在
2017-02-28 17:40:33
502
转载 【Linux学习】epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol
2017-02-22 21:17:36
380
转载 Linux Epoll介绍和程序实例
Linux Epoll介绍和程序实例1. Epoll是何方神圣?Epoll可是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的。其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TP
2017-02-22 21:16:00
326
原创 I/O多路复用之epoll
1.epoll介绍epoll是当前开发大规模并发网络程序的热门人选。epoll在linux 2.6内核中正式引入。linux下设计并发网络程序的几种方法有:典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入epoll呢?2. 常用模型
2017-02-22 21:00:00
457
原创 I/O多路复用之poll
对于poll的理论讲解,可参考文章:http://www.cnblogs.com/Anker/p/3261006.html实战:写一个echo程序,服务器原样返回客户端发送过来的内容。用poll写。client:#include #include #include #include #include #include #define err_exit(m)\
2017-02-22 10:55:21
377
原创 增加I/O多路复用的回射程序
在上一版本的回射程序中,若服务器子进程被杀死,则客户端检测不到这一事件的发生。原因在于,子进程被杀死时,虽然发送了FIN给客户端套接字,但此时客户端进程是阻塞于等待标准输入上的,因此检测不到套接字的输入。解决办法就是使用I/O多路复用。
2017-02-22 10:36:24
545
转载 sturct stat 结构体中 st_mode 的含义
在中定义的stat结构体内容如下:[cpp] view plain copy print?struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* numbe
2017-02-20 15:07:28
1123
原创 增加信号处理的回射服务器
问题:由上一篇文章分析可知,若客户端进程终止,则服务器子进程会变成僵尸进程。原因是由于服务器子进程退出后,服务器父进程未获取子进程的状态信息,导致子进程变成僵尸进程。解决方法:由于子进程退出会产生SIGCHLD信号给父进程,所以添加一个对该信号的捕获函数,在该函数内获取子进程的终止状态,从而避免产生僵尸进程。程序:信号处理函数:void sigfunc(int signo){
2017-02-16 20:48:07
509
原创 经受时延的确认(Delay ACK)
通常TCP在接收到数据时并不立即发送ACK,相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带ACK),这样做的目的是尽量减少发往网络的报文,以提高传输的效率,节省网络资源。 捎带ACK的意思是,当接收端接收到TCP报文段后,并不立即发送ACK报文,而是等上一段时间,如果这段时间里该主机有数据要发送到远程主机,就将该数据捎带上ACK一
2017-01-03 20:24:51
3161
转载 TCP的交互数据流和成块数据流
转自:http://blog.csdn.net/ns_code/article/details/32329157前言 建立在TCP协议上的应用层协议有很多,如FTP、HTTP、Telnet等,这些协议根据传输数据的多少可以分为两类:交互数据类型和成块数据类型。 交互数据类型,如:Telnet,这类协议一般只做小流量的数据交换,比如每按下一个键,要回显一些字符。
2017-01-03 20:04:27
1236
转载 C/C++框架和库
转自:http://blog.csdn.net/weiwangchao_/article/details/52675869值得学习的C语言开源项目- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。W
2016-12-31 11:47:08
604
转载 linux常用命令的常用使用方法---ps
Linux作为Unix的衍生操作系统,Linux内建有查看当前进程的工具ps。这个工具能在命令行中使用。PS 命令是什么查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。ps命令支持三种使用的语法格式UNIX 风格,选项可以组合在一起,并且选项前必须
2016-12-31 11:10:47
731
fortran语言,初次接触fortran
2015-10-09
关于goto语句执行问题
2015-10-09
有人懂fortran语言吗?可以帮我看下代码,写成c语言吗?十分感谢!
2015-10-09
vc++中中文注释有下划线,怎么去掉
2015-09-05
vc中程序调用ntgraph控件
2015-08-20
vc中写好的程序怎么利用控件
2015-08-18
全局变量的定义和使用
2015-08-18
卷积的C++实现的代码问题
2015-08-16
负几十次方数字的数据类型
2015-08-15
vc中用struct来将txt文件中的数据导入到数组中
2015-08-14
c++读取txt文件中的数据
2015-08-14
vc程序中调用控件的方法,谢谢。
2015-08-13
vc程序中使用控件的方法,谢谢。
2015-08-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人