详解

const in C++

别来无恙 提交于 2020-11-23 09:49:03
一 关于一般常量 声明或定义的格式如下: const <类型说明符> <变量名> = <常量或常量表达式>; [1] <类型说明符> const <变量名> = <常量或常量表达式>; [2] [1]和[2]的定义是完全等价的。 例如: 整形int(或其他内置类型:float,double,char) const int bufSize = 512; 或者 int const bufSize = 512; 因为常量在定义后就不能被修改,所以定义时必须初始化。 bufSize = 128; // error:attempt to write to const object const string cntStr = "hello!"; // ok:initialized const i, j = 0; // error: i is uninitialized const 非const变量默认为extern。 const 对象默认为文件的局部变量。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。 例如: const int bufSize = 512; // 作用域只限于定义此变量的文件 extern const int bufSize = 512; // extern用于扩大作用域,作用域为整个源程序(只有extern 位于函数外部时,才可以含有初始化式)

cJSON 使用详解

為{幸葍}努か 提交于 2020-04-12 07:50:42
由于c语言中,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json。如果有对应的数据结构就方便一些, 如python中用json.loads(json)就把json字符串转变为内建的数据结构处理起来比较方便。 cjson库文件下载 : sourceforge地址 下载完之后读一下,README。 编译方式 : 在工程中添加cJSON.c 和cJSON.h 编译即可,不过要添加-lm链接库gcc选项,如: gcc cJSON.c main.c -o main -lm 添加-lm是因为用到了,数学库有关的函数。 一个重要概念 : 在cjson中,json对象可以是json,可以是字符串,可以是数字。。。 cjson数据结构定义 : #define cJSON_False 0 #define cJSON_True 1 #define cJSON_NULL 2 #define cJSON_Number 3 #define cJSON_String 4 #define cJSON_Array 5 #define cJSON_Object 6 typedef struct cJSON { struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively,

tornado web开发之 跨站伪造请求的防范 和 登录详解

和自甴很熟 提交于 2020-04-07 07:17:25
最近在做一个网站的后端开发。因为初期只有我一个人做,所以技术选择上很自由。在 web 服务器上我选择了 Tornado 。虽然曾经也读过它的源码,并做过一些小的 demo,但毕竟这是第一次在工作中使用,难免又发现了一些值得分享的东西。 首先想说的是它的安全性,这方面确实能让我感受到它的良苦用心。这主要可以分为两点: 防范 跨站伪造请求 (Cross-site request forgery,简称 CSRF 或 XSRF)。 CSRF 的意思简单来说就是,攻击者伪造真实用户来发送请求。 举例来说,假设某个银行网站有这样的 URL: http://bank.example.com/withdraw?amount=1000000&for=Eve 当这个银行网站的用户访问该 URL 时,就会给 Eve 这名用户一百万元。用户当然不会轻易地点击这个 URL,但是攻击者可以在其他网站上嵌入一张伪造的图片,将图片地址设为该 URL: < img src = "http://bank.example.com/withdraw?amount=1000000&for=Eve" > 那么当用户访问那个恶意网站时,浏览器就会对该 URL 发起一个 GET 请求,于是在用户毫不知情的情况下,一百万就被转走了。 要防范上述攻击很简单,不允许通过 GET 请求来执行更改操作(例如转账)即可

spark RDD 详解

扶醉桌前 提交于 2020-03-02 22:24:26
概念 RDD具有以下一些特点: 创建:只能通过转换( transformation,如map/filter/groupBy/join等,区别于动作action)从两种数据源中创建RDD:1)稳定存储中的数据;2)其他RDD。 只读:状态不可变,不能修改 分区:支持使RDD中的元素根据那个key来分区( partitioning),保存到多个结点上。还原时只会重新计算丢失分区的数据,而不会影响整个系统。 路径:在RDD中叫世族或血统( lineage),即RDD有充足的信息关于它是如何从其他RDD产生而来的。 持久化:支持将会·被重用的RDD缓存(如in-memory或溢出到磁盘) 延迟计算:像DryadLINQ一样,Spark也会延迟计算RDD,使其能够将转换管道化(pipeline transformation) 操作:丰富的动作( action),count/reduce/collect/save等。 关于转换(transformation)与动作(action)的区别,前者会生成新的RDD,而后者只是将RDD上某项操作的结果返回给程序,而不会生成新的RDD RDD底层实现原理 RDD是一个分布式数据集,顾名思义,其数据应该分部存储于多台机器上。事实上,每个RDD的数据都以Block的形式存储于多台机器上,下图是Spark的RDD存储架构图

SQLite之C++增删改查(详解)

ぃ、小莉子 提交于 2020-03-01 03:41:14
很高兴加入开源中国社区,开源可以让我们成长更快、更强大,如果每个人都能多多交流。。。我们的未来必将不可限量!毫无疑问,这并不夸张,但是现在我还是从一个菜鸟级程序员开始入门吧! 进入正题,开始我们的SQLite之旅吧!其实原来对SQLite一无所知,毫不夸张的可以说是听都没听过吧,一次偶然的机会我发现了这个数据库,但是发现网上资料不是很多然后慢慢研究它,最后总结出一些小知识吧,拿出来和大家分享分享,供大家参考。。。如有错误,请各位大虾多多指正! 开发所需依赖 下载地址: http://www.sqlite.org/download.html 在该页面上下载 Source Code 中的 sqlite-amalgamation-3071300.zip ,该包有含有两个头文件,两个实现文件。 下载 Precompiled Binaries For Windows 中的 sqlite-dll-win32-x86-3071300.zip ,该包中含有一个 def 文件,一个 dll 文件。 新建一个 win32 控制台应用程序 sqlite ,选择空项目。 方法一:将所得 dll 、 sqlite3.h 、 sqlite3.lib 文件拷贝到 ../ 工程 /sqlite/ 下,点击头文件,选择添加现有项,选择拷贝的 sqlite.h 文件,选择工程 -> 属性 -> 链接器 -> 输入 -

什么是aidl?Android AIDL详解

前提是你 提交于 2019-12-09 15:31:45
什么是aidl: aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 icp:interprocess communication :内部进程通信。 在 Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的。在JavaEE中,采用RMI通过序列化传递对象。在Android中, 则采用AIDL(Android Interface Definition Language:接口定义语言)方式实现。 (1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。 (2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。 (3)建立一个服务类(Service的子类)。 (4)实现由aidl文件生成的Java接口。 (5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android

Linux中SUID和SGID详解

╄→гoц情女王★ 提交于 2019-12-06 18:31:38
如果你对SUID、SGID仍有迷惑可以好好参考一下! 由 于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、SGID的 问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了一些资料,决定整理成本文,以供大家参考。限于本人的水平问题, 文章中如果有不当之处,请广大网友指正。 一、UNIX下关于文件权限的表示方法和解析 SUID 是 Set User ID, SGID 是 Set Group ID的意思。 UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位: 9 8 7 6 5 4 3 2 1 0 - r w x r - x r - x 第9位表示文件类型,可以为p、d、l、s、c、b和-: p表示命名管道文件 d表示目录文件 l表示符号连接文件 -表示普通文件 s表示socket文件 c表示字符设备文件 b表示块设备文件 第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户的权限,其形式为rwx: r表示可读,可以读出文件的内容 w表示可写,可以修改文件的内容 x表示可执行,可运行这个程序 没有权限的位置用-表示 例子:

Git详解之四 服务器上的Git(第一部分)

风格不统一 提交于 2019-12-05 21:50:12
到目前为止,你应该已经学会了使用 Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的 Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度。另外,你也一定希望合作者们即使在 自己不开机的时候也能从仓库获取数据 — 拥有一个更稳定的公共仓库十分有用。因此,更好的合作方式是建立一个大家都可以访问的共享仓库,从那里推送和拉取数据。我们将把这个仓库称为 “Git 服务器”;代理一个 Git 仓库只需要花费很少的资源,几乎从不需要整个服务器来支持它的运行。 架设一台 Git 服务器并不难。第一步是选择与服务器通讯的协议。本章第一节将介绍可用的协议以及各自优缺点。下面一节将介绍一些针对各个协议典型的设置以及如何在服务器 上实施。最后,如果你不介意在他人服务器上保存你的代码,又想免去自己架设和维护服务器的麻烦,倒可以试试我们介绍的几个仓库托管服务。 如果你对架设自己的服务器没兴趣,可以跳到本章最后一节去看看如何申请一个代码托管服务的账户然后继续下一章,我们会在那里讨论分布式源码控制环境的林林总总。 远程仓库通常只是一个_裸仓库(bare repository)_ — 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说

redis info 参数详解

╄→гoц情女王★ 提交于 2019-12-05 19:25:21
redis info 参数 详解 info 以一种易于解释且易于阅读的格式,返回关于redis服务器的各种信息和统计数值 命令如下: (默认不需要all , 我习惯加 all ,你可以去掉all 对吧一下) redis-cli -h x.x.x.x -p xxxx info all all : 返回所有信息 default : 返回默认选择的信息 当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。 这里的redis 版本是 redis 3.0.7 返回参数如下: Server 服务器的信息 # Server redis_version: 3.0.7 ## redis 服务器版本 redis_git_sha1:00000000 ## Git SHA1 redis_git_dirty:0 ## Git dirty flag redis_build_id:d811223d6cb3a727 ## redis_mode:standalone ## os:Linux 2.6.32-573.18.1.el6.x86_64 x86_64 ## redis 服务器的宿主操作系统 arch_bits:64 ## 架构(32 或 64 位) multiplexing_api:epoll ## redis 所使用的事件处理机制 gcc_version:4.4.7 ## 编译

Nginx/LVS/HAProxy负载均衡软件的优缺点详解

空扰寡人 提交于 2019-12-04 19:27:53
PS: Nginx /LVS/ HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的 应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费 的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。 一种是通过硬件来进行进行,常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点 就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于Nginx/LVS/HAProxy的基于 Linux 的开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用非常低廉。 目前关于网站架构一般比较合理流行的架构方案:Web前端采用Nginx/HAProxy+ Keepalived 作负载均衡器;后端采用 MySQL 数据库一主多从和读写分离,采用LVS+Keepalived的架构。 当然要根据项目具体需求制定方案。 下面说说各自的特点和适用场合。 Nginx的优点是: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名