函数指针

Linux多线程服务器端编程

泄露秘密 提交于 2019-12-17 14:03:31
目录 Linux多线程服务器端编程 线程安全的对象生命期管理 对象的销毁线程比较难 线程同步精要 借shared_ptr实现写时拷贝(copy-on-write) 多线程服务器的适用场合与常用编程模型 单线程服务器的常用编程模型 多线程服务器的常用编程模型 分布式系统中使用TCP长连接通信 C++多线程系统编程精要 高效的多线程日志 日志功能的需求 多线程异步日志 muduo网络库简介 TCP网络编程最本质的是处理三个半事件: 在一个端口上提供服务,并且要发挥多核处理器的计算能力 muduo编程示例 一种自动反射消息类型的Google Protobuf网络传输方案 短址服务 muduo库设计与实现 分布式系统工程实践 C++编译链接模型精要 Linux多线程服务器端编程 源码链接 。 muduo的编译安装 . 陈硕的编译教程 。 bazel编译文件不能有中文路径。 安装到指定目录: /usrdata/usingdata/studying-coding/server-development/server-muduo/build/release-install-cpp11/lib/libmuduo_base.a. 这本书前前后后看了三四遍,写得非常有深度,值得推荐。 编译和安装 . 线程安全的对象生命期管理 利用shared_ptr和weak_ptr避免对象析构时存在的竞争条件

深入理解JS函数中this指针的指向

走远了吗. 提交于 2019-12-17 11:10:41
函数在执行时,会在函数体内部自动生成一个this指针。谁 直接调用 产生这个this指针的函数 ,this就指向谁。 怎么理解指向呢,我认为指向就是等于。例如直接在js中输入下面的等式: console.log(this===window);//true 情况不同,this指向的对象也不同。例如: 1. 函数声明的情况 var bj=10; function add(){ var bj=20; console.log(this);//window console.log(this.bj);//10 console.log(bj);//20 console.log(this.bj+bj);//30 } add(); window.add(); (1) 执行了add()之后,此时的this指向的是window对象,为什么呢?因为这时候add是全局函数,是通过window 直接调用 的。所以下面我专门写了个window.add()就是为了说明,全局函数的this都是指向的window。 (2) 就像alert()自带的警告弹窗一样,window.alert()执行之后也是一样的效果。所以只要是 window点 这种调用方式都可以省略掉,因此警告弹窗可以直接使用alert()。 2. 函数表达式 var bj=10; var zjj=function(){ var bj=30;

JavaScript面向对象编程实践

你。 提交于 2019-12-16 21:55:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 面向对象的几个概念 在进入正题前,先了解传统的面向对象编程(例如Java)中常会涉及到的概念,大致可以包括: 类:定义对象的特征。它是对象的属性和方法的模板定义。 对象(或称实例):类的一个实例。 属性:对象的特征,比如颜色、尺寸等。 方法:对象的行为,比如行走、说话等。 构造函数:对象初始化的瞬间被调用的方法。 继承:子类可以继承父类的特征。例如,猫继承了动物的一般特性。 封装:一种把数据和相关的方法绑定在一起使用的方法。 抽象:结合复杂的继承、方法、属性的对象能够模拟现实的模型。 多态:不同的类可以定义相同的方法或属性。 在JavaScript的面向对象编程中大体也包括这些。不过在称呼上可能稍有不同,例如,JavaScript中没有原生的“类”的概念, 而只有 对象 的概念。因此,随着你认识的深入,我们会混用对象、实例、构造函数等概念。 对象(类)的创建 在JavaScript中,我们通常可以使用构造函数来创建特定类型的对象。诸如Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中。 此外,我们也可以创建自定义的构造函数。例如: function Person(name, age, job) { this.name = name; this.age = age; this.job =

16.go语言基础学习(上)——2019年12月16日

我的未来我决定 提交于 2019-12-16 17:04:04
2019年12月13日10:35:20 1.介绍 2019年10月31日15:09:03 2.基本语法 2.1 定义变量 2019年10月31日16:12:34 1.函数外必须使用var定义变量 var a=1 b:=5 声明变量的一般形式是使用 var 关键字: var name type 其中,var 是声明变量的关键字,name 是变量名,type 是变量的类型。 2.没有全局变量说法,只有包变量 3.集中定义变量 var ( a int c string d bool ) 4.使用var关键字 var a,b,c bool var s1,s2 string="hello","world" 5.使用:=定义变量 只能在函数体内使用 a,b,c:=1,2,"123" 6.基本类型 Go语言的基本类型有: bool string int、int8、int16、int32、int64 uint、uint8、uint16、uint32、uint64、uintptr byte // uint8 的别名 rune // int32 的别名 代表一个 Unicode 码 float32、float64 complex64、complex128 7.源代码: package main import "fmt" var ( a int c string d bool ) func main()

C语言博客作业06--结构体&文件

别说谁变了你拦得住时间么 提交于 2019-12-16 13:53:17
1.本章学习总结 1.1 学习内容总结 1.结构的介绍 结构(Structure)类型是一种允许程序员把一些数据分量聚合成一个整体的数据类型,一个结构中包含的每个数据分量都有名字。这些数据分量称为结构成员或者结构分量,结构成员可以是C语言中的任意变量类型,程序员可以使用结构类型来创建适合于问题的数据聚合。 像数组和指针一样,结构也是一种构造数据类型(或叫派生数据类型),它与数组的区别在于:数组中所有元素的数据类型必须是相同的,而结构中各成员的数据类型可以不同。 2.结构是C语言中一种新的构造数据类型,它能够把有内在联系的不同类型的数据汇聚成一个整体,使它们相互关联;同时,结构又是一个变量的集合, 可以按照对基本数据类型的操作方达单独使用其成员变量。 3.在C语言中,整型、实型等基本数据类型是被系统预先定义好了的,程序员可以用其直接定义变量。而结构类型是由用户根据需要,按规定的格式自行定义的数据类型。 4.结构类型定义的一般形式为: struct 结构名 { 类型名 结构成员名1; 类型名 结构成员名2; … 类型名 结构成员名n; }; 5.struct是定义结构类型的关量字,在struct之后,自行命名一个结构名,它必须是一个合法的C标识符。struct与结构名两者合起来共同组成结构类型名,大括号内的内容是结构所包括的结构成员,也叫结构分量。结构成员可以有多个,这样

洛谷大佬的题解 p1427小鱼倒数字

淺唱寂寞╮ 提交于 2019-12-16 10:06:14
滑稽题解第一弹 大家好,我是一个入门一年还在入门的蒟蒻。 今天天气不错,我决定回新手村看看。 然后我就随手点开了一个题。 看到题面一开始我有点惊……现在新手村就开始用栈了吗? 然而事后我发现这个题好像并没有想象中的那么难…… 于是我就尝试性地交了一个学了一年后的入门水平代码…… #include #include using namespace std; stack a; int k; int main(){ while(cin>>k) a.push(k);a.pop();//这种输入方式在本地调试的时候需要在输入结束后按Ctrl+Z来结束输入 while(!a.empty()) cout<<a.top()<<" ",a.pop(); return 0; } 然后我们机房的c姓神犇就来指点了一下,然后诊断出我患有重度STL依赖症…… 我看了一下我之前的代码: #include using namespace std; int x[100],c=0; int main(){ for(int i=0;;i++){ cin>>x[i]; if(x[i]==0) break; c=i; } for(int j=c;j>=0;j–) cout<<x[j]<<" "; return 0; } 然后我就突发奇想,这个题是不是可以一题多解呢? 我觉得可以的。

go笔记--json包使用

北城以北 提交于 2019-12-15 21:55:30
目录 Marshal Unmarshal 处理json对象 @ json包实现了json对象的编解码,参见RFC 4627。Json对象和go类型的映射关系主要通过Marshal和Unmarshal函数实现 Marshal func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码。 Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其MarshalJSON方法来生成json编码。nil指针异常并不是严格必需的,但会模拟与UnmarshalJSON的行为类似的必需的异常。 否则,Marshal函数使用下面的基于类型的默认编码格式: 布尔类型编码为json布尔类型。 浮点数、整数和Number类型的值编码为json数字类型。 字符串编码为json字符串。角括号"<"和">"会转义为"\u003c"和"\u003e"以避免某些浏览器吧json输出错误理解为HTML。基于同样的原因,"&"转义为"\u0026"。 数组和切片类型的值编码为json数组,但[]byte编码为base64编码字符串,nil切片编码为null。 结构体的值编码为json对象。每一个导出字段变成该对象的一个成员,除非: 字段的标签是"-" 字段是空值,而其标签指定了omitempty选项

C51学习笔记

筅森魡賤 提交于 2019-12-15 21:03:36
一, C51内存结构深度剖析 二, reg51.头文件剖析 三, 浅淡变量类型及其作用域 四, C51常用头文件 五, 浅谈中断 六, C51编译器的限制 七, 小淡C51指针 八, 预处理命令 一,C51内存结构深度剖析 在编写应用程序时,定义一个变量,一个数组,或是说一个固定表格,到底存储在什么地方; 当定义变量大小超过MCU的内存范围时怎么办; 如何控制变量定义不超过存储范围; 以及如何定义变量才能使得变量访问速度最快,写出的程序运行效率最高。以下将一一解答。 1 六类关键字(六类存储类型) data idata xdata pdata code bdata code: code memory (程序存储器也即只读存储器)用来保存常量或是程序。code memory 采用16位地址线编码,可以是在片内,或是片外,大小被限制在64KB 作用:定义常量,如八段数码表或是编程使用的常,在定义时加上code 或明确指明定义的常量保存到code memory(只读) 使用方法: char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 此关键字的使用方法等同于const data data memory (数据存储区)只能用于声明变量,不能用来声明函数,该区域位于片内,采用8位地址线编码

scandir函数

Deadly 提交于 2019-12-15 19:30:54
在C语言课程的后端,讲完指针和标准文件IO处理,我会做出一个难度较大练习,题目就是, 利用标准的目录处理函数 opendir/readdir/closedir实现类似于 scandir的功能。其中接口要scandir 函数一致 。 这个题目看起来简单,实现难度相当大,主要采用复杂指针的操作。我第一次拿出来测试,全班大约只一二名实现80%的功能,其余很多觉得无从下手。程序很容易就会出现段错误。基本上短时间内正确的做出来的人可以划归专业级的程度了。有兴趣的人可以先不看后面内容,自行实现一下 首先看一下man的scandir 接口定义 int scandir(const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const struct dirent **, const struct dirent **)); ,从定义来看就不是一个简单的函数,形参里,出现一个三级指针,二个函数指针。它的功能是,扫描名字为dir的目录,把满足filter函数的过滤条件(即filter执行为非0值)的目录项加入到一维指针数组namelist.数组的总长度为返回值n,如果compar不为空,则最终输出结果还要调用qsort来对数组进行排序后再输出。 从scandir的演示代码

c语言字符串处理函数

白昼怎懂夜的黑 提交于 2019-12-15 01:16:54
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen§ 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1) 查找字符串 strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 2)字符串到数值类型的转换 strtod(p, ppend) 从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。 strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制,设置为 0