linux点滴
文章平均质量分 57
linux学习之路
午饭要阳光
热爱编程
展开
-
lua中的闭包
1、在了解lua中的闭包之前,我们先来看一个栗子!!! 在上述例子当中,我们用lua的闭包实现了一个计数器。如果之前没有了解过闭包的概念的话,你一定会对上述代码的结果感到奇怪,下面我们就来详细的解释一下闭包。2、第一类值(First class value ) lua中的函数就是所谓的”第一类值”。 在lua中定义一个函数就像创建普通类型值一样,lua中的函数就是一个值,它可以被存放在变量原创 2017-10-19 21:17:21 · 1553 阅读 · 2 评论 -
require和dofile的区别
1在lua中require和dofile都是用来加载和执行模块的,那么他们有什么不同呢???差异: 在加载一个.lua文件的时候,require会先在package.loaded中查找此模块是否存在,如果存在则直接返回模块,如果不存在,则加载此模块。 dofile会对读入的模块编译执行,每调用dofile一次,都会重新编译执行一次。 require它的参数只是文件名,而dofi原创 2017-10-18 14:35:15 · 5316 阅读 · 0 评论 -
session和cookie学习
1、什么是cookie和session http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,session是一种在服务器端保存状态的方案。2、cookie和session的区别 我们举个栗子来描原创 2017-08-03 21:44:03 · 1048 阅读 · 0 评论 -
跳表分析与实现
一、什么是跳表 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveIDB中都有用到。 在对有序顺序表进行搜索时,使用二分查找时间复杂度是O(logn),但是有序顺序表的插入和删除却是O(n)的算法。 在对有序链表进行搜索时,时间复原创 2017-07-11 21:54:08 · 6747 阅读 · 0 评论 -
剖析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 · 1220 阅读 · 0 评论 -
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 · 1411 阅读 · 0 评论 -
工厂模式
工厂模式大致可以分为三类: 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式。 这三种模式逐步抽象,并且更具有一般性。 工厂模式有一种非常形象的描述,建立对象的类就像一个工厂,而需要被建立的对象就是一个个产品,在工厂中加工产品,使用产品的人不用关心产品是如何生产出来的。在软件中使用工厂模式的好处就是降低了模块之间的耦合。一、简单工厂模式: 简单工厂模式是工厂模式中最简单的一种原创 2017-06-12 21:31:17 · 1468 阅读 · 0 评论 -
单例模式
一、什么是单例模式 有时候我们会遇到这样一种情况,一个类只能有一个对象被实例化,这时我们就可以使用单例模式了。 单例模式通过类本身来管理其唯一实例。在设计这个类的时候,让他只能创建一个实例并提供对此实例的全局访问。因此单例模式有两个最基本的条件是,确保一个类只有一个实例被创建,提供一个对实例的全局访问指针。二、常见的单例模式实现 常用的单例模式实现方法有两种,饿汉式和懒汉式。懒原创 2017-06-11 14:35:02 · 958 阅读 · 0 评论 -
ftp服务器实现
在模拟实现FTP服务器之前,我们先来了解一下有关FTP的功能以及工作原理。一、什么是FTP ftp(File Transfer Protocol)文件传输协议。ftp是应用层协议,基于C/S结构,底层使用TCP/IP协议来保证可靠性。 ftp使得主机间可以共享文件,简单来说就是可以在两台计算机之间来回拷贝文件。 ftp服务的基本过程就是:建立连接、传输数据与释放连接。由原创 2017-06-09 22:59:36 · 10602 阅读 · 4 评论 -
LRU缓存策略设计
一、什么是LRU缓存策略 LRU(Least Recently Used)近期最少使用算法。它的原理就是,缓存一定量的数据,当缓存数量超过设置的阈值时就删除一部分旧的数据。 那么我们怎样判定旧数据呢???根据局部性原理,距离当前最久没有被访问过的数据应该被淘汰。二、LRU缓存策略实现原理 1、使用双向链表记录数据的被使用的时间 因为我们要删除最久没有被访问的数据原创 2017-06-02 11:53:28 · 1859 阅读 · 2 评论 -
大数运算
一、为什么要有大数运算 在C/C++编程语言中,整型的最大存储类型是long long类型,大小是8个字节,一但超出这个范围,则就无法用编程语言的内置类型存储。因为编程语言的存储范围有限,所以它不能满足较大规模的高精度的计算,于是就产生了大数运算这种方法。二、大数运算原理 由于内置类型的存储范围有限,所以我们可以将大数转换成字符串存储在数组里面,然后再对每一位做单独的加减乘除运原创 2017-05-31 18:47:14 · 1805 阅读 · 0 评论 -
半同步/半反应堆线程池
一、什么是线程池 线程池是服务器预先创建的一组线程,这些线程运行着相同的代码,并具有相同的属性。当有新的任务到来的时候,主线程通过某种方式选择线程池中的某一个线程来为之服务,服务完之后又放回线程池中。二、为什么要有线程池 相比于动态创建线程来说,线程池可以提高速度。因为线程的创建和销毁是需要时间的,如果我们预先创建好,用完之后再回收的话,则会节省不少时间。一般线程池中线程的数量原创 2017-05-28 21:21:04 · 2646 阅读 · 0 评论 -
两种高效的并发模式
并发编程的目的是让程序”同时”执行多个任务。如果程序是计算密集型的,并发编程并没有什么优势,反而由于任务的切换使效率降低。但如果程序是I/O密集型的,那就不同了。 I/O操作通常分为两个阶段,即等待和数据搬迁,通常等待所花费的时间比较多。而I/O操作的速度远远低于CPU的计算速度,所以让程序阻塞在I/O操作将浪费大量的时间。如果程序有多个执行线程,则当前被I/O操作阻塞的线程可以放弃CP原创 2017-05-25 15:01:07 · 2404 阅读 · 0 评论 -
Reactor模式和Proactor模式
一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应用程序自己读取或写入数据。(Reactor模式需要用户自己进行I/O操作)。 并发系统常用Reactor模式代替常用的多线程的处理方式,节省系统的资源,提高系统吞吐量。 2、使用同步I/O模原创 2017-05-25 09:41:18 · 1455 阅读 · 0 评论 -
网络畅聊系统
1、网络聊天系统简介 简单来说,这个聊天系统可以达到群聊的目的。客户端向服务器发送消息,服务器对这条消息进行转发。由于使用的是udp协议,所以服务器会维护一张用户列表,这个列表记录了所有向服务器发送过消息的客户地址。当某个客户端退出的时候,会向服务器发送一条特殊的指令,然后服务器将该客户地址从用户列表中删除。2、Udp聊天系统原理图 从上图可以看到,服务器端使用生产者消费者模型原创 2017-05-12 10:23:18 · 2672 阅读 · 0 评论 -
天气推送服务器
1、主要功能 用户通过天气推送服务器暴露出来的接口进行注册,注册完毕之后用户可以添加一些自己的亲朋好友的信息。每天定时爬取全国的天气,然后推送给用户的亲朋好友。 2、服务器 服务器使用的是一个协程版本的web服务器,支持get和post方法,底层用CGI方法处理带参数的请求。服务器对外暴露两个接口,用来进行注册和登录。 要登录的话,必须要有一个账号和密码,可以通过注册原创 2017-05-11 15:32:41 · 3463 阅读 · 0 评论 -
Scrapy框架学习
最开始学习爬虫的时候,我用的是urllib2和BeautifulSoup这两个库,使用这两个库的时候,所有爬虫的框架都要自己写,一开始还觉得没什么,到最后写的越来越多的时候就觉得很麻烦,因为我的重点是爬取数据分析数据啊,不是浪费时间去写什么爬虫框架。 后来了解到scrapy这个框架,用这个框架写爬虫的话感觉真的非常爽,因为它真的很高效。比如原来你用urllib2和BeautifulSou原创 2017-05-11 14:15:02 · 2795 阅读 · 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 · 1339 阅读 · 0 评论 -
uniq命令
uniq这个命令用于读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多的重复的行将被删除。行比较是根据所用字符集的排序序列进行的。命令格式: uniq option 文件 常用option: -c:显示输出中,在每行行首加上本行在文件中出现的次数(注意是连续出现的行)。 -d:只显示重复的行。 -u:只显示不重复的行。例:原创 2017-04-23 22:58:42 · 1109 阅读 · 0 评论 -
sort命令
一、sort将文件的每一行作为一个单位,相互比较,比较的原则是从首字符向后,依次按ASCII码进行比较。 例: 二、命令格式 命令格式: sort option 文件 常用option:1、-u:去除重复行 例1:取出重复行 2、-r:默认是升序,加-r选项变为降序 例2:去重并降序排列 3、-o:sort默认将结果输出到标准输出,所以要使用重定向才能将结果写入文件,但是要将排序结原创 2017-04-23 22:40:12 · 1190 阅读 · 0 评论 -
shell知识体系框图
grep工具:sed工具:cut工具:awk工具:sort工具uniq工具diff和patch原创 2017-04-22 22:25:07 · 2127 阅读 · 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 · 1431 阅读 · 0 评论 -
awk工具
一、什么是awk awk也是文本处理工具,与sed相比,awk不仅能以行为单位处理文件,还可以以列为单位处理文件。awk的缺省行分隔符是”\n”,缺省列分隔符是空格或tab,但是行分隔符和列分隔符都是可以自定义。awk还是一门很复杂的脚本语言,具有像C语言一样的分支和循环结构。二、awk命令格式 awk option ‘编辑命令’ file1 file2 … awk option -f原创 2017-04-22 21:22:00 · 2403 阅读 · 3 评论 -
sed工具
一、什么是sed sed叫做流编辑器,在shell脚本和Makefile中作为过滤一使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换成为另一种格式输出。sed是一种在线编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到原创 2017-04-22 16:18:18 · 2721 阅读 · 6 评论 -
linux知识体系框图
多进程调试多线程调试原创 2017-04-21 13:47:50 · 3367 阅读 · 0 评论 -
grep简单用法
grep是一种强大的文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行统计出来。 命令:grep [选项] [–color=auto] ‘搜索字符串’ filename 常用参数: -c:统计符合条件的字符串出现的次数。 -E:支持扩展正则表达式。 -i:忽略字符大小写。 -n:在显示匹配到的字符串前面加上行号。 -v:显示没有”搜索字符串”内容的那一行原创 2017-04-19 17:54:08 · 1342 阅读 · 0 评论 -
基础正则表达式
一、什么是正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割、匹配、查找以及替换操作。 描述一个正则表达式需要字符类、数量限定符、位置限定符。规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式。二、正则表达式语法规范 字符类:在模式中表示一个范围,但是取值范围是一类字符中的任原创 2017-04-19 16:12:47 · 1120 阅读 · 0 评论 -
小型HTTP服务器
本文的重点是介绍HTTP服务器的框架结构,旨在了解HTTP服务器的工作流程,所以我们在下面我们会实现一个多线程的HTTP/1.0版本服务器,这个HTTP服务器主要支持GET和POST方法。在实现HTTP服务器之前,我们首先要了解HTTP协议,CGI协议等: http协议一、web框架的原理图 如果使用非CGI方式处理浏览器的请求的话很简单,服务器直接将浏览器请求的资源返回即可。下面给出C原创 2017-04-10 13:38:47 · 3183 阅读 · 0 评论 -
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 · 1751 阅读 · 0 评论 -
syslogd日志简介(1)
1、什么是syslogd syslogd是一个守护进程,这个守护进程提供了一个记录特殊事件和消息的标准机制。通俗的讲,syslogd守护进程用于解决系统守护进程的日志记录问题。 syslogd记录的日志文件都是文本文件,一般都放在/var/log目录中。标准C函数库提供了syslogd的接口。 openlog是可选的,如果不调用openlog,则在第一次调用syslog时,原创 2017-04-06 09:48:16 · 3010 阅读 · 0 评论 -
tcp粘包浅析
1、什么是粘包 从接收缓冲区看,后一包的数据的头部紧接着前一包数据的尾部,使得接收方不能准确的读取一包数据,也就是接收方多读或少读一包数据所造成的现象就是粘包现象。 粘包只会在TCP的长连接时才可能发生,因为TCP是面向字节流的,以流的方式处理数据,当长连接时才可能有多个数据包粘在一起的情况。UDP是面向数据包的,有固定的消息边界。2、为什么会有粘包 粘包既可能是发送方原创 2017-04-06 09:40:47 · 882 阅读 · 0 评论 -
HTTP长连接和短连接
1、短连接 在HTTP/1.0版本中,默认使用的是短连接,也就是说浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。如果客户端浏览器访问某个HTML或其他类型的Web页中包含其他的web资源,则浏览器每遇到这样一个web资源,就会建立一个HTTP会话。2、长连接 从HTTP/1.1版本起,默认使用长连接用以保持连接特性。使用长连接的HTTP协议,会在响应消息报文段加入:原创 2017-04-04 16:36:09 · 1347 阅读 · 0 评论 -
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 · 951 阅读 · 0 评论 -
通讯录第四版
最近在看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 · 1355 阅读 · 0 评论 -
shell脚本执行过程
一、先看一个简单的脚本执行过程 shell脚本中以#表示注释。但是如果#位于第一行并且后面是感叹号,它表示该脚本使用后面指定的解释器解释执行。#!/bin/bash叫做shebang,它指定了解释器。 因为编写好的shell脚本文件是一个普通文本文件,所以我们要对它赋予可执行权限才可以执行。或者直接使用解释器对文本文件进行解释执行。 二、shell的执行过程 1、原创 2017-03-24 10:14:18 · 10224 阅读 · 0 评论 -
shell编程之符号与变量
一、shell特殊字符 1、一般通配符 2、模式表达式 3、引号 在shell中引号分为三种,单引号、双引号和倒引号。 3.1、双引号 由双引号括起来的字符(除$,倒引号(),和反斜杠(\)外),其余字符均视为普通字符。对这三种字符仍然保持特殊功能。$表示变量替换,倒引号()表示命令替换,反斜杠表示转移字符。 例:i=10; echo “i”输出:103.2、单引号由单引号括起来原创 2017-03-23 20:47:46 · 1392 阅读 · 0 评论 -
shell中的命令替换
在shell里面有倒引号”“”和$()两种命令替换方式: 如: 那么这两条命令有什么不同呢? 在多层次的复合替换命令中,倒引号需要加”\”转义,$()则不需要。 例:conmand1 conmand2conmand3。 原意是先执行conmand3,将结果交给conmand2处理,最后再将conmand2的结果交给conmannd1处理。 但实际由于两个倒引号进行了嵌套,最终将conma原创 2017-03-23 18:55:19 · 1226 阅读 · 0 评论 -
linux命令之eval
1、linux的eval命令用于重新运算求出参数的内容。 语法:eval cmdline 功能:eval会对后面的cmdline扫描两遍,第一遍扫描之后如果cmdline是个普通命令的话,则执行此命令。如果cmdline中含有变量的间接引用,用变量的值代替变量。 例1:变量i的值是”>”,用i进行重定向的话,结果如下: 可见,eval将间接引用解释成变量的值。 例2:使用eval可以创原创 2017-03-23 13:14:54 · 672 阅读 · 0 评论 -
linux下各目录含义
1、/ 根目录,系统中所有目录均是从根目录开始的。 2、/bin:bin是binary的缩写,该目录存放了使用则最常用的命令。 3、/boot:引导核心的程序目录,主要存放Linux Loader(Linux装配程序)LILO使用的各种文件。 4、/dev:dev是device(设备)的缩写,这个目录包含了Linux所有的外部设备名。 5、/etc:etc是etcetera(其他事项)的缩写原创 2017-03-23 13:11:53 · 1017 阅读 · 0 评论 -
I/O多路转接之poll
poll也是一种I/O多路转接的方式,select将三种事件进行了区分,并且用三个位图来表示不同的监测事件。而poll统一用一种结构来管理要监测的事件。#include<poll.h>int poll(struct pollfd* fds,nfds_t nfds,int timeout);参数: fds: 它是一个结构体数组,其中元素的类型如下: struct pollfd{ int fd原创 2017-03-17 11:04:16 · 828 阅读 · 0 评论