Welcome 微信登录

首页 / 操作系统 / Linux

Node.js框架对比:Express/Koa/Hapi

Node.js框架对比:Express/Koa/Hapi

1、介绍 直至今日,Express.js仍然是最为流行的Node.js Web应用程序框架。它似乎已经逐渐成为大多数Node.js Web应用程序的基础依赖框架,包括很多流行的框架,比如Sail.js就是以Express.js为基础搭建的。然而现在我们有了更多“类sinatra”(注:sinatra是一款Ruby框架,代码非常简洁,号称开发一个博客项目只需要100行代码)似的框架可以选择。也就是接下来我们将分别介绍的Koa和Hap...
Python迭代器实现斐波拉契求值

Python迭代器实现斐波拉契求值

斐波纳契数列以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。这个数列从第2项开始,每一项都等于前两项之和,而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618。 用dir(list),dir(tuple),dir(file),dir(dict)来查看不同类型对象的属性,会发现它们都有一个名为__iter__的特殊方法,对象有它,就能通过该方法返回迭代器,所谓的迭代...
进程和线程、协程的区别

进程和线程、协程的区别

现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中也有协程库,tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。一、概念 1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等...
正则表达式基础语法摘要

正则表达式基础语法摘要

什么是正则表达式呢,先来看一下百度百科中的解释:正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。简单来说,正则表达式是一种特定的模式,可以用来对文本进行匹配、替换或删除等操作。正则表达式本身与编程语言无关,是一种强大的文本处理工具。基础概念正则表达式由两种字符构成:元字符和普通文本字符。其中,元字符 即...
C语言之从内存角度理解不同类型的变量

C语言之从内存角度理解不同类型的变量

我们都知道在C语言中不同类型的变量在内存中的存放位置不同的,从内存角度上讲,不同内存块中存放的代码或者变量其属性(主要是作用域、生命周期、链接属性)是不同的。首先我们介绍一下作用域、生命周期已经链接属性的概念1:作用域作用域也就是指变量其作用的范围(1)局部变量为代码块作用域(也就是说局部变量的作用范围是{ })(2)函数和全局变量是文件作用域,进一步讲其作用范围就是函数和全局变量定义或者声明后的部分。2:生命周期生命周期也就是变量的产生时间和消亡时间(1...
C语言之offset_of宏和container_of宏

C语言之offset_of宏和container_of宏

通过结构体整体变量来访问其中各个元素,本质上是通过指针方式来访问的,形式上是通过.的方式来访问的(这时候其实是编译器帮我们自动计算了偏移量)。1:offset_of宏作用:计算结构体中某个元素和结构体首地址的偏移量(其实质是通过编译器来帮我们计算)。定义:#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)参数分析:TYPE是结构体类型,MEMBER是结构体中一个元素的元素名返...
C语言之main函数传参

C语言之main函数传参

1:为什么需要给main函数传参首先要明白一点,给mian函数传参不是必须的,但是有时候我们需要通过给main函数不同的参数来得到的不同的结果,比如我们希望main函数中某个变量的值为0时执行子函数A,该变量值为1时执行子函数B,那么这个时候就可以通过给main函数传参来实现,mian函数传参格式如下:int main(int argc , char *argv[])int main(int argc , char **argv)参数解释:argc:int...
C语言之存储类的相关的关键字

C语言之存储类的相关的关键字

不同的数据在内存中的存储位置是不同的,总体来说内存中存储数据的地方主要有四部分:栈、堆、数据段、bss段,这些地方分别存放着不同的数据,比如栈一般用来存储局部变量,堆内存需要程序员字自己申请以及释放,主要用来存放比较大的数据;数据段主要用来存放显示初始化的全局变量和static关键字修饰的静态局部变量;bss段一般用来存放未显式初始化的全局变量或显式初始化为0的全局变量(C语言中,默认全局变量初始化为0)。C语言还提供了一些关键字来修饰变量,使其附有其他的...
C语言之枚举的定义以及测试

C语言之枚举的定义以及测试

1:什么是枚举枚举在C语言中其实就是一些符号常量集,简单来说,枚举就是定义了一些符号(字符串),这些字符的本质就是int类型的常量,每个符号和一个常量相绑定,那么这个符号就成为了一个自定义的识别码,对编译器来说对枚举的认知就是符号常量所绑定的那个int类型的数。直白来讲,枚举就是自己定义一些符号,然后这些符号对应int类型的数,对于程序员来讲,这些符号可以帮助程序员理解代码,而对于编译器来讲,编译器是不认识我么定义的枚举符号的,编译器只认识这个枚举变量所对...
C语言之静态链接库和动态链接库

C语言之静态链接库和动态链接库

1:静态链接库比较早出现的是静态链接库。静态库其实就是商业公司将自己的函数库源代码经过只编译不连接形成.o的目标文件,然后用ar工具将.o文件归档成.a的归档文件(.a的归档文件又叫静态链接库文件)。商业公司通过发布.a库文件和.h头文件来提供静态库给客户使用;客户拿到.a和.h文件后,通过.h头文件得知库中的库函数的原型,然后在自己的.c文件中直接调用这些库文件,在连接的时候链接器会去.a文件中拿出被调用的那个函数的编译后的.o二进制代码段链接进去形成最...
C语言之作用域

C语言之作用域

1:作用域的概念(1)作用域是描述这个变量起作用的代码范围。(2)基本来说,C语言变量的作用域规则是代码块作用域。意思就是这个变量起作用的范围是当前的代码块。代码块就是一对大括号{}括起来的范围,所以一个变量的作用域是:这个变量定义所在的{}范围内从这个变量定义开始往后的部分。(这就解释了为什么变量定义总是在一个函数的最前面)2:示例代码#include <stdio.h> int var = 10; int main(void) { ...
C语言之大小端问题

C语言之大小端问题

1:大小端名字的由来及发展 (1)在乔纳森·斯威夫特的著名讽刺小说《格列夫游记》中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破。斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧。 (2)后来计算机通信发展起来后,遇到一个问题就是:在串口等串行通信中,一次只能发送1个字节。这时候我要发送一个int类型的数就遇到一个问题。int类...
C语言之程序中内存的来源:栈 堆 数据段

C语言之程序中内存的来源:栈 堆 数据段

程序在运行的时候,其内存的来源主要通过三种方法: 栈 堆 数据段,总体上来讲栈是一般用来存放小内存的局部变量,堆内存和数据段的属性很像,在使用的的时候,如果这个变量是伴随程序一直存在则使用全局变量,也就是放在数据段,如果一个变量使用完了就没用了,那么就适合用堆内存(先申请,然后释放即可),一:栈(stack):1:栈在使用的时候是编译器自动分配内存空间的,不需要程序员的干涉,其次栈的大小是有限的,所以当我们定义的变量需要大片的内存的时候就不适合使用栈,2:...
C语言之结构体以及结构体对齐访问

C语言之结构体以及结构体对齐访问

1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同。2:结构体的定义:struct student { int age; char name[20]; }s1;上面这种方法是结构体定义的同时定义变量,结构体的定义有两部分组成struct studen:结构体的类型s1:类型为struct student的结构体变量,当然还可以用struct stu...
C语言之offsetof宏和container_of宏

C语言之offsetof宏和container_of宏

首先我们要明白一点通过结构体变量来访问结构体中的各个元素时,其本质上是通过指针的方式来实现访问的,只不过是这个时候编译器帮自动帮我们计算了每个元素与结构体起始地址之间的偏移量而已。一:offsetof宏:1 #define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)1:参数与返回值分析:(1)TYPE是结构体类型,MEMBER是结构体中一个元素的元素名 (2)这个宏返回的是membe...
C#中下限非零的数组解析

C#中下限非零的数组解析

谈到数组时,当被问及数组是从什么数开始时,估计大部分程序员都会直接说出数组当然是从0开始的。这个回答当然没有错,现在我们就来了解一下C#中的下限非0的数组。 首先看一下数组的相关介绍: 1.数组:是允许将多个数据项当作一个集合来处理的机制。 2.数组的分类:在CLR中,数组可分为一维数组,多维数组,交错数组。 3.数组的类型:由于所有的数组都是继承自System.Array这个抽象类型,而这个类型又是继承自System.Object,这就说明数...
Java 8函数编程轻松入门

Java 8函数编程轻松入门

Java 8函数编程轻松入门函数接口介绍在Java1.8中,新增了Lambda表达式。在.net3.5(C# 3.0)在原先的匿名方法基础上演变出了Lambda表达式。学过C# Lambda表达式的同学,对于Java的Lambda表达式就不会太陌生。在Java中,没有委托的概念,为了配合Lambda表达式,Java推出了函数接口这个概念,来作为Java Lambda表达式的类型。1. 函数接口定义:函数接口是只有一个抽象方法的接口,用作于Lambda表达式...
内核抢占的理解

内核抢占的理解

内核是否能被抢占在内核编译的时候是可选的,看了《深入理解Linux内核》一书,作者认为很难对内核抢占下一个定义,我也不想强行下一个定义,始终是新手嘛,那就说一下内核抢占的现象,通过现象来理解内核抢占机制内核抢占的一个现象:正在内核态运行的进程。可能在运行期间被另外一个进程替代。深入理解Linux内核(第三版)(英文版+中文版) 下载见 http://www.linuxidc.com/Linux/2011-08/41228.htm上述现象是允许内核抢占的情况...
<< 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 >>