自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunnylunch-blog

介绍c/c++基础知识,介绍一些项目。

  • 博客(283)
  • 资源 (1)
  • 收藏
  • 关注

原创 lua学习笔记——文件I/O

1、lua中的文件I/O lua的文件I/O有两种模式,分别是简单模式和完全模式,他们的区别如下: 简单模式:只有一个默认输入文件和一个默认输出文件,并且提供对这些文件的操作。 完全模式:使用外部的文件句柄来实现。它以一种面向对象的形式,将所有文件操作定义为文件句柄的方法。完全模式可以同时对多个文件进行操作。2、打开和关闭文件 打开文件:file=io.open(filename,

2017-11-19 16:12:20 1820 1

原创 lua学习笔记——coroutine

1、什么是协同程序 Lua中的协同程序(coroutine)与线程比较类似,拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其他大部分东西。 协同程序与线程的区别: 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。在任一指定时刻只有一个协同程序在运行,并且在这个正在运行的协同程序只有在明

2017-11-15 15:49:48 884

原创 lua学习笔记——元表(Metatable)

1、什么是元表 table是lua中一个重要的数据结构,我们可以访问table内的值,但是却无法对两个table进行操作。因此lua提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。 元表就类似于C++中的运算符重载,可以对类对象进行操作,当然元表的功能更强大一些。有两个很重要的函数来处理元表: setmetatable(table,m

2017-11-07 17:38:18 1679

原创 lua学习笔记—table

1、什么是table table是lua的一种数据结构,可以用来创建数组或映射。lua中的table使用的是关联型数组。关联数组的key值可以是除过nil之外任意类型的值。table的大小是不固定的,可以自己进行扩容。2、如何构造table 可以使用”{}”来构造一个空表,还可以在构造的同时进行初始化。 例1:用table创建数组,在lua中数组下标默认从1开始 结果

2017-10-28 17:44:08 1222

原创 lua学习笔记(1)

一、table Table=数组+映射 在lua中,table是数组和映射为一体的数据类型,table既可以当做数组使用,也可以当做映射来使用。1、声明一个table类型 用花括弧{}来声明一个table 例:a={}2、table的赋值 table可以在定义的时候直接赋值,例: a={1,2,3,} 也可以单独赋值,但是注意table的下标必须是连续的,且从1开始,没有赋值

2017-10-27 20:56:04 1276

原创 lua中的闭包

1、在了解lua中的闭包之前,我们先来看一个栗子!!! 在上述例子当中,我们用lua的闭包实现了一个计数器。如果之前没有了解过闭包的概念的话,你一定会对上述代码的结果感到奇怪,下面我们就来详细的解释一下闭包。2、第一类值(First class value ) lua中的函数就是所谓的”第一类值”。 在lua中定义一个函数就像创建普通类型值一样,lua中的函数就是一个值,它可以被存放在变量

2017-10-19 21:17:21 1467 2

原创 require和dofile的区别

1在lua中require和dofile都是用来加载和执行模块的,那么他们有什么不同呢???差异: 在加载一个.lua文件的时候,require会先在package.loaded中查找此模块是否存在,如果存在则直接返回模块,如果不存在,则加载此模块。 dofile会对读入的模块编译执行,每调用dofile一次,都会重新编译执行一次。 require它的参数只是文件名,而dofi

2017-10-18 14:35:15 5112

原创 session和cookie学习

1、什么是cookie和session http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,session是一种在服务器端保存状态的方案。2、cookie和session的区别 我们举个栗子来描

2017-08-03 21:44:03 1014

原创 跳表分析与实现

一、什么是跳表 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveIDB中都有用到。 在对有序顺序表进行搜索时,使用二分查找时间复杂度是O(logn),但是有序顺序表的插入和删除却是O(n)的算法。 在对有序链表进行搜索时,时间复

2017-07-11 21:54:08 6664

原创 剖析tinyhttpd服务器

tinyhttpd是一个小型的http服务器,虽然小但是功能也多,剖析tinyhttpd有助于理解http服务器的工作流程,加深对web服务器的认识。 一、原理图 二、源码剖析 下面是tinyhttpd的源码,自己对它进行了剖析,并对绝大多数内容加上了注释。#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#in

2017-07-07 13:09:27 1185

原创 STL之set相关算法

STL一共提供了四种set相关的算法,分别是并集(union),交集(intersection),差集(difference),和对称差集(symmetric difference)。 STL的这四个算法所接受的set必须是有序区间,元素可以重复出现。即他们只能接受set/multiset容器作为输入区间。 1、set_unoin(求并集) 算法set_union可构造两个S1,S2这

2017-07-06 21:53:41 1331

原创 工厂模式

工厂模式大致可以分为三类: 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式。 这三种模式逐步抽象,并且更具有一般性。 工厂模式有一种非常形象的描述,建立对象的类就像一个工厂,而需要被建立的对象就是一个个产品,在工厂中加工产品,使用产品的人不用关心产品是如何生产出来的。在软件中使用工厂模式的好处就是降低了模块之间的耦合。一、简单工厂模式: 简单工厂模式是工厂模式中最简单的一种

2017-06-12 21:31:17 1434

原创 单例模式

一、什么是单例模式 有时候我们会遇到这样一种情况,一个类只能有一个对象被实例化,这时我们就可以使用单例模式了。 单例模式通过类本身来管理其唯一实例。在设计这个类的时候,让他只能创建一个实例并提供对此实例的全局访问。因此单例模式有两个最基本的条件是,确保一个类只有一个实例被创建,提供一个对实例的全局访问指针。二、常见的单例模式实现 常用的单例模式实现方法有两种,饿汉式和懒汉式。懒

2017-06-11 14:35:02 902

原创 ftp服务器实现

在模拟实现FTP服务器之前,我们先来了解一下有关FTP的功能以及工作原理。一、什么是FTP ftp(File Transfer Protocol)文件传输协议。ftp是应用层协议,基于C/S结构,底层使用TCP/IP协议来保证可靠性。 ftp使得主机间可以共享文件,简单来说就是可以在两台计算机之间来回拷贝文件。 ftp服务的基本过程就是:建立连接、传输数据与释放连接。由

2017-06-09 22:59:36 10380 4

原创 LRU缓存策略设计

一、什么是LRU缓存策略 LRU(Least Recently Used)近期最少使用算法。它的原理就是,缓存一定量的数据,当缓存数量超过设置的阈值时就删除一部分旧的数据。 那么我们怎样判定旧数据呢???根据局部性原理,距离当前最久没有被访问过的数据应该被淘汰。二、LRU缓存策略实现原理 1、使用双向链表记录数据的被使用的时间 因为我们要删除最久没有被访问的数据

2017-06-02 11:53:28 1801 2

原创 大数运算

一、为什么要有大数运算 在C/C++编程语言中,整型的最大存储类型是long long类型,大小是8个字节,一但超出这个范围,则就无法用编程语言的内置类型存储。因为编程语言的存储范围有限,所以它不能满足较大规模的高精度的计算,于是就产生了大数运算这种方法。二、大数运算原理 由于内置类型的存储范围有限,所以我们可以将大数转换成字符串存储在数组里面,然后再对每一位做单独的加减乘除运

2017-05-31 18:47:14 1758

原创 半同步/半反应堆线程池

一、什么是线程池 线程池是服务器预先创建的一组线程,这些线程运行着相同的代码,并具有相同的属性。当有新的任务到来的时候,主线程通过某种方式选择线程池中的某一个线程来为之服务,服务完之后又放回线程池中。二、为什么要有线程池 相比于动态创建线程来说,线程池可以提高速度。因为线程的创建和销毁是需要时间的,如果我们预先创建好,用完之后再回收的话,则会节省不少时间。一般线程池中线程的数量

2017-05-28 21:21:04 2546

原创 两种高效的并发模式

并发编程的目的是让程序”同时”执行多个任务。如果程序是计算密集型的,并发编程并没有什么优势,反而由于任务的切换使效率降低。但如果程序是I/O密集型的,那就不同了。 I/O操作通常分为两个阶段,即等待和数据搬迁,通常等待所花费的时间比较多。而I/O操作的速度远远低于CPU的计算速度,所以让程序阻塞在I/O操作将浪费大量的时间。如果程序有多个执行线程,则当前被I/O操作阻塞的线程可以放弃CP

2017-05-25 15:01:07 2338

原创 Reactor模式和Proactor模式

一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应用程序自己读取或写入数据。(Reactor模式需要用户自己进行I/O操作)。 并发系统常用Reactor模式代替常用的多线程的处理方式,节省系统的资源,提高系统吞吐量。 2、使用同步I/O模

2017-05-25 09:41:18 1399

原创 网络畅聊系统

1、网络聊天系统简介 简单来说,这个聊天系统可以达到群聊的目的。客户端向服务器发送消息,服务器对这条消息进行转发。由于使用的是udp协议,所以服务器会维护一张用户列表,这个列表记录了所有向服务器发送过消息的客户地址。当某个客户端退出的时候,会向服务器发送一条特殊的指令,然后服务器将该客户地址从用户列表中删除。2、Udp聊天系统原理图 从上图可以看到,服务器端使用生产者消费者模型

2017-05-12 10:23:18 2583

原创 天气推送服务器

1、主要功能 用户通过天气推送服务器暴露出来的接口进行注册,注册完毕之后用户可以添加一些自己的亲朋好友的信息。每天定时爬取全国的天气,然后推送给用户的亲朋好友。 2、服务器 服务器使用的是一个协程版本的web服务器,支持get和post方法,底层用CGI方法处理带参数的请求。服务器对外暴露两个接口,用来进行注册和登录。 要登录的话,必须要有一个账号和密码,可以通过注册

2017-05-11 15:32:41 3390

原创 Scrapy框架学习

最开始学习爬虫的时候,我用的是urllib2和BeautifulSoup这两个库,使用这两个库的时候,所有爬虫的框架都要自己写,一开始还觉得没什么,到最后写的越来越多的时候就觉得很麻烦,因为我的重点是爬取数据分析数据啊,不是浪费时间去写什么爬虫框架。 后来了解到scrapy这个框架,用这个框架写爬虫的话感觉真的非常爽,因为它真的很高效。比如原来你用urllib2和BeautifulSou

2017-05-11 14:15:02 2696 1

原创 diff和patch

一、diff和patch diff命令是linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方,常用于svn和git中。diff会在命令行中打印每一个行的改动。diff程序的输出称为补丁(patch),patch命令可以根据diff的输出将a.c的内容更新为b.c的内容,或者是将b.c的内容还原成a.c的内容。二、diff命令介绍 1、命令格式:di

2017-04-24 12:47:38 1288

原创 uniq命令

uniq这个命令用于读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多的重复的行将被删除。行比较是根据所用字符集的排序序列进行的。命令格式: uniq option 文件 常用option: -c:显示输出中,在每行行首加上本行在文件中出现的次数(注意是连续出现的行)。 -d:只显示重复的行。 -u:只显示不重复的行。例:

2017-04-23 22:58:42 1039

原创 sort命令

一、sort将文件的每一行作为一个单位,相互比较,比较的原则是从首字符向后,依次按ASCII码进行比较。 例: 二、命令格式 命令格式: sort option 文件 常用option:1、-u:去除重复行 例1:取出重复行 2、-r:默认是升序,加-r选项变为降序 例2:去重并降序排列 3、-o:sort默认将结果输出到标准输出,所以要使用重定向才能将结果写入文件,但是要将排序结

2017-04-23 22:40:12 1127

原创 shell知识体系框图

grep工具:sed工具:cut工具:awk工具:sort工具uniq工具diff和patch

2017-04-22 22:25:07 2074 5

原创 cut工具

1、cut工具 cut命令可以从一个文本文件或文本流中提取文本列。cut是以每一行为一个处理对象的。2、命令格式 cut option 范围 option: -b:按照字节截取。 -c:按照字符截取。 -d:指定域分隔符 -f:指定要截取那几个域。例1: 例2: 例3: 可以看到用cut和awk都能对列进行截取。

2017-04-22 22:03:50 1383

原创 awk工具

一、什么是awk awk也是文本处理工具,与sed相比,awk不仅能以行为单位处理文件,还可以以列为单位处理文件。awk的缺省行分隔符是”\n”,缺省列分隔符是空格或tab,但是行分隔符和列分隔符都是可以自定义。awk还是一门很复杂的脚本语言,具有像C语言一样的分支和循环结构。二、awk命令格式 awk option ‘编辑命令’ file1 file2 … awk option -f

2017-04-22 21:22:00 2342 3

原创 sed工具

一、什么是sed sed叫做流编辑器,在shell脚本和Makefile中作为过滤一使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换成为另一种格式输出。sed是一种在线编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到

2017-04-22 16:18:18 2667 6

原创 linux知识体系框图

多进程调试多线程调试

2017-04-21 13:47:50 3316

原创 TCP/IP四层模型中协议的格式

1、以太网帧格式2、ARP数据报格式 3、IPV4数据报格式如下: IP数据包的首部长度和数据长度都是可变的,但总是4的整数倍。 4位版本:IPV4的版本号是4。 4位首部长度:它里面的数值是以4字节为单位的,最小值是5,最大是15。即,首部长度最小是20字节(不带任何选项),最大是60字节。 8位服务类型(TOS):这个字段有3个位来表示IP数据包的优先级(目前已经废弃不用),还有4

2017-04-20 14:43:15 1736

原创 grep简单用法

grep是一种强大的文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行统计出来。 命令:grep [选项] [–color=auto] ‘搜索字符串’ filename 常用参数: -c:统计符合条件的字符串出现的次数。 -E:支持扩展正则表达式。 -i:忽略字符大小写。 -n:在显示匹配到的字符串前面加上行号。 -v:显示没有”搜索字符串”内容的那一行

2017-04-19 17:54:08 1289

原创 基础正则表达式

一、什么是正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割、匹配、查找以及替换操作。 描述一个正则表达式需要字符类、数量限定符、位置限定符。规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式。二、正则表达式语法规范 字符类:在模式中表示一个范围,但是取值范围是一类字符中的任

2017-04-19 16:12:47 1096

原创 小型HTTP服务器

本文的重点是介绍HTTP服务器的框架结构,旨在了解HTTP服务器的工作流程,所以我们在下面我们会实现一个多线程的HTTP/1.0版本服务器,这个HTTP服务器主要支持GET和POST方法。在实现HTTP服务器之前,我们首先要了解HTTP协议,CGI协议等: http协议一、web框架的原理图 如果使用非CGI方式处理浏览器的请求的话很简单,服务器直接将浏览器请求的资源返回即可。下面给出C

2017-04-10 13:38:47 3058

原创 HTTP协议

1、URL URL,统一资源定位符,它是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。 URL格式:http://host[":"port][abs_path]http表示通过http协议来定位网络资源,host表示合法的主机域名或IP地址。port指定一个端口号,为空则使用缺省端口80,abs_path指定请求资源的路径,如果URL中没有给出abs_path,那么浏览器会自动会加上

2017-04-10 12:41:08 1632

原创 syslogd日志简介(1)

1、什么是syslogd syslogd是一个守护进程,这个守护进程提供了一个记录特殊事件和消息的标准机制。通俗的讲,syslogd守护进程用于解决系统守护进程的日志记录问题。 syslogd记录的日志文件都是文本文件,一般都放在/var/log目录中。标准C函数库提供了syslogd的接口。 openlog是可选的,如果不调用openlog,则在第一次调用syslog时,

2017-04-06 09:48:16 2964

原创 tcp粘包浅析

1、什么是粘包 从接收缓冲区看,后一包的数据的头部紧接着前一包数据的尾部,使得接收方不能准确的读取一包数据,也就是接收方多读或少读一包数据所造成的现象就是粘包现象。 粘包只会在TCP的长连接时才可能发生,因为TCP是面向字节流的,以流的方式处理数据,当长连接时才可能有多个数据包粘在一起的情况。UDP是面向数据包的,有固定的消息边界。2、为什么会有粘包 粘包既可能是发送方

2017-04-06 09:40:47 844

原创 HTTP长连接和短连接

1、短连接 在HTTP/1.0版本中,默认使用的是短连接,也就是说浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。如果客户端浏览器访问某个HTML或其他类型的Web页中包含其他的web资源,则浏览器每遇到这样一个web资源,就会建立一个HTTP会话。2、长连接 从HTTP/1.1版本起,默认使用长连接用以保持连接特性。使用长连接的HTTP协议,会在响应消息报文段加入:

2017-04-04 16:36:09 1288

原创 shell脚本语法随笔

1、循环1.1、类C循环例:求1到100的和sum=0for ((i=1;i<=100;i++))do let sum+=idone1.2、for in循环例:输出参数列表所有参数for i in $@do echo $idone1.3、while循环例:求 1到100的和sum=0x=1while x<=100do let sum+=x

2017-03-27 22:42:45 900

原创 通讯录第四版

最近在看mysql,想起以前写过通讯录,所以就想着将通讯录中的内容存储到mysql中注意:下面出现的book是我的数据库中一张表的名字,它的字段是(name,tel,mail,addr)。根据情况自己替换 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<mysql.h>#define SIZE 1024MYSQL

2017-03-25 20:52:47 1320

C&&C++知识体系结构图

C,C++知识体系结构图

2016-09-09

空空如也

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

TA关注的人

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