编程知识
ZLANBL085321
学如逆水行舟,不进则退,加油吧,程序媛!
展开
-
高级语言的程序被翻译的过程
像C/C++这样的高级语言写出的程序,被翻译的过程可分为四个阶段,如下图所示: 四个阶段如下: 一、预处理阶段 预处理器根据以字符#开头的预处理命令,修改原始文件,得到一个以.i为扩展名的文本文件。 二、编译阶段 编译器将以.i为扩展名的文件翻译成以.s为扩展名的文本文件,它包含了一个汇编语言程序。 三、汇编阶段 汇编器将.s为扩展名的文件翻译成机器语言指...原创 2018-05-17 16:51:59 · 2384 阅读 · 0 评论 -
C++回顾——运算符重载
运算符重载只是一种语法上的方便,实际上它是另一种函数调用的方式,其不同之处在于函数的参数不是出现在圆括号内,而是紧贴在一些字符旁边;调用运算符时要把运算符放置在参数之间、参数之后、参数之前;编译器决定调用哪一个“函数”。在C++中,可以定义一个处理类的新运算符,函数的名字由关键字operator及其后紧跟的运算符组成。一、语法 函数名字是operator@,这里@代表了被重载的运算符。参...原创 2018-08-20 17:32:33 · 209 阅读 · 0 评论 -
C++回顾——继承和组合
一、组合语法 实际上,我们一直在用组合创建类,只不过是在用内部数据类型组合新类。原创 2018-09-10 10:49:14 · 378 阅读 · 0 评论 -
C++回顾——多态性和虚函数
多态性(在C++中通过虚函数来实现)是面向对象程序设计语言中数据抽象和继承之外的第三个基本特征。多态性提供了接口与具体实现之间的另一层隔离,改善了代码的组织性和可读性,同时也使创建的程序具有可扩展性,程序不仅在项目的最初创建期可以“扩展”,而且当在项目需要有新的功能时也能“扩展”。一、函数调用捆绑 把函数体与函数调用相联系称为捆绑(binding)。当捆绑在程序运行之前(由编译器和连接器)完...原创 2018-09-10 10:49:47 · 219 阅读 · 0 评论 -
JavaScript与C++等其他语言的不同之处——控制语句
JS中条件语句if-else、switch和循环语句while、do-while、for和C等其他编程语言相同,但是JS中循环语句多了一个for/in,它和常规的for循环完全不同,其语法如下:for(variable in object)statementvariable通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的...原创 2019-01-04 16:00:07 · 538 阅读 · 0 评论 -
PHP学习笔记——语法基础
一、PHP标记符PHP标记符能让Web服务器识别PHP代码的开始和结束,而标记之外的任何文本都会被认为是普通的HTML,有4种风格:1、标准风格<?php//PHP代码?>但是对于只包含PHP代码的文件,结束符“?>”是多余的,如果加上它,phpStorm里面会给个警告:Closing tag ‘?>’ is redundant for files conta.原创 2019-01-10 13:10:33 · 848 阅读 · 0 评论 -
PHP学习笔记——控制语句和函数
一、控制语句条件控制语句if-else、switch和循环语句while、do-while、for和其他编程语言的差别不大,PHP多了一个foreach循环。foreach循环在PHP4.0中擅长处理数组,是遍历数组的一种简单方法。在PHP5.0中,增加了对对象的支持。其语法格式为:foreach(array_expression as $value)statement或foreach(...原创 2019-01-10 16:22:08 · 253 阅读 · 0 评论 -
JavaScript与C++等其他语言的不同之处——类型、变量、运算符
因工作需要,最近要自学JavaScript,在学习的过程中,发现JS和其他编程语言有许多相似和不同之处,在此就记录下它的不同之处。一、数据类型1、数字与其他编程语言不同,JS不区分整数值和浮点数值,JS中所有数字均用浮点数值表示,JS采用IEEE754标准定义的64位浮点格式表示数字。2、文本在JS中,字符串常量可以由单引号或双引号括起来。JS中没有表示单个字符的“字符型”,要表...原创 2019-01-02 16:25:50 · 851 阅读 · 0 评论 -
PHP学习笔记——日期和时间(一)
1、获取指定日期的时间戳int mktime ([ int hour = date(“H”) [, int minute = date(“i”) [, int second = date(“s”) [, int month = date(“n”) [, int day = date(“j”) [, int year = date(“Y”) [, int is_dst = -1 ]]]]]]] )...原创 2019-01-17 14:56:26 · 281 阅读 · 0 评论 -
PHP学习笔记——日期和时间(二)
1、设置地区信息string setlocale ( int category , array locale )参数 category 命名常量指定的受区域设置的功能类别:LC_ALL 所有的设置LC_COLLATE 字符串比较, 详见 strcoll()LC_CTYPE 字符串的分类与转换, 参见例子 strtoupper()LC_MONETARY 等同 localeconv()L...原创 2019-01-17 16:01:44 · 273 阅读 · 0 评论 -
PHP学习笔记——会话管理
一、cookie管理1、介绍cookiecookie是在HTTP协议下,将服务器传递给浏览器的少量数据保存到用户浏览器的一种方式,通过这种方式,即使在浏览器被关闭和连接中断的情况下,用户仍然可以维护状态数据。cookie是保存在用户硬盘上的由字符串组成的小文本文件,其命名格式如下:用户名@网站地址[数字].txtcookie中的内容大多警告了加密处理,因此,表面上看来只是一些字母和数字组合...原创 2019-01-18 11:43:09 · 411 阅读 · 0 评论 -
PHP学习笔记——常用字符串操作函数
一、自动转义、还原字符串string addslashes(string str)该函数用来给字符串str加入斜线“\”,对指定字符串中的字符进行转义,能转义的字符包括单引号“’”、双引号“"”、反斜杠“\”、NULL字符“0”。该函数...原创 2019-01-15 15:07:59 · 311 阅读 · 0 评论 -
PHP学习笔记——图形图像
一、GD2函数库原创 2019-01-21 15:46:23 · 394 阅读 · 0 评论 -
PHP学习笔记——正则表达式
一、语法规则1、行定位符(用于描述字符串的边界)“^”表示行的开始;“”表示行的结尾。如mr匹配以mr开始的字符,”表示行的结尾。如^mr匹配以mr开始的字符,”表示行的结尾。如mr匹配以mr开始的字符,mr匹配以mr结尾的字符。如果要匹配的字符串可以出现在字符串的任意部分,可直接写成mr。2、字符类([ ])正则表达式是区分大小写的,如果想忽略大小写,可以通过方括号表达式“[ ]”来完成...原创 2019-01-16 09:42:07 · 291 阅读 · 0 评论 -
PHP学习笔记——数组
PHP的数组更加灵活,不但支持数字索引数组,而且支持以字符串或字符串、数字混合为键名的关联数组。一、声明数组有两种方式:一是应用数组函数声明数组;二是通过数组标识符[]声明数组。1、通过函数创建数组1)array array([mixed…])参数mixed的预防为“key=>value”(多个参数mixed用逗号隔开),分别定义了索引和值。索引可以是字符串或数字。如果省略了索引,...原创 2019-01-16 15:19:12 · 374 阅读 · 0 评论 -
PHP学习笔记——文件系统
一、文件处理1、打开文件resource fopen ( string filename , string mode [, bool use_include_path = false [, resource context ]] )该函数打开文件或者 URL,将 filename 指定的名字资源绑定到一个流上。如果 filename 是 “scheme://…” 的格式,则被当成一个 UR...原创 2019-01-22 16:21:15 · 418 阅读 · 0 评论 -
PHP学习笔记——PHP与Web页面交互
一、表单表单标记属性如下表所示:在使用form表单时,必须要指定其行为属性action,它指定表单提交数据的处理页。GET方法是将表单内容附加在URL地址后面;POST方法是将表单中的信息作为一个数据块发送到服务器上的处理程序中,在浏览器的地址栏不显示提交的信息。method属性默认为GET方法。二、在Web页面嵌入PHP脚本1、在HTML标记中嵌入PHP脚本通过在HTML标记中添加PH...原创 2019-01-17 09:50:37 · 654 阅读 · 0 评论 -
PHP学习笔记——面向对象
一、原创 2019-01-23 09:57:15 · 315 阅读 · 0 评论 -
C++回顾——new和delete
一、对象的创建 当创建一个C++对象时,会发生两件事: 1)为对象分配内存; 2)调用构造函数来初始化那个内存(C++强迫这样做是因为未初始化的对象是程序出错的主要原因)C++把创建一个对象所需要的所有动作都结合在一个称为new的运算符里(分配内存并调用构造函数),默认的new还进行检测以确信在传递地址给构造函数之前内存分配是成功的,所以不必显示地确定调用是否成功。delete只用于...原创 2018-08-22 14:25:03 · 273 阅读 · 0 评论 -
C++回顾——名字控制
一、来自C中的静态元素 在C和C++中,static有两种基本含义(这两种含义经常是互相冲突的): 1)在固定的地址上进行存储分配,即对象是在一个特殊的静态数据区上创建的(静态存储); 2)对一个特定的编译单位来说是局部的。1、函数内部的静态变量 C和C++允许函数内部定义一个static对象,这个对象将存储在程序的静态数据区中,这个对象只在函数第一次调用时初始化一次,以后它将在两次函...原创 2018-07-20 13:29:31 · 227 阅读 · 0 评论 -
C++回顾——引用和拷贝构造函数
一、C++中的指针 C和C++指针的最重要的区别在于C++是一种类型要求更强的语言。C不允许随便地把一个类型的指针赋值给另一个类型,但允许通过void*来实现。C++不允许这样做,如果真想把某种类型当做别的类型处理,则必须显示地使用类型转换。二、C++中的引用 引用(&)就像能自动地被编译器间接引用的常量型指针,它通常用于函数的参数表中和函数的返回值,但也可以独立使用。任何引用必须...原创 2018-07-25 17:54:26 · 906 阅读 · 0 评论 -
转移指令与条件设置指令
一、转移指令 转移指令的介绍见: https://baike.baidu.com/item/%E8%BD%AC%E7%A7%BB%E6%8C%87%E4%BB%A4/12734565 转移指令的原理见: https://blog.csdn.net/u011068702/article/details/52985737根据转移的距离,转移指令有以下类型: 1)短转移:无条件转移和条件转...原创 2018-05-15 10:41:14 · 3355 阅读 · 0 评论 -
需要注意字节序的大端(big endian)和小端(little endian)的几种情景
大端(big endian):在内存中,按照从最低有效字节到最高有效字节的顺序存储对象,即数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。 小端(little endian):在内存中,按照从最高有效字节到最低有效字节的顺序存储对象,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。 下图举例摘自CSAPP: 大多数Intel兼容机都...原创 2018-05-25 22:17:10 · 2943 阅读 · 0 评论 -
《质量全面管控》读书笔记——代码质量控制
开发过程中常用的代码规范如下: 1)命名规范; 2)编码规范; 3)注释规范; 以C++为例,以上可参考google开源项目C++风格指南和Google C++ Style Guide 4)异常处理规范,以C++为例,参考异常规范 (throw) (C++) 5)单元测试规范(测试脚本可以重复执行,能有效地保证代码的质量等); 6)文件解析规范(好像是针对JAVA项目,C++中没有见...原创 2018-06-03 17:40:01 · 566 阅读 · 0 评论 -
7Z源码分析——7zAlloc.h和7zAlloc.c
7zAlloc.h声明了四个函数,用来申请和释放内存,其中输入参数ISzAllocPtr p的类型在头文件7zTypes.h中定义。 7zAlloc.c中实现了7zAlloc.h中声明的四个函数,该文件中还定义了全局变量g_allocCount和g_allocCountTemp,其实这两个全局变量只是方便调试(从打印的变量信息来观测程序是否正常),功能上没有实际意义。void *SzAllo...原创 2018-06-11 11:03:10 · 472 阅读 · 0 评论 -
7Z源码分析——7z.h
#define k7zStartHeaderSize 0x20#define k7zSignatureSize 6extern const Byte k7zSignature[k7zSignatureSize];文件的开头处定义了2个宏,k7zStartHeaderSize 是7z文件头的大小(详情可见7z文件格式及其源码的分析(三));k7zSignatureSize是7z文件标志的大小...原创 2018-06-13 10:19:06 · 2010 阅读 · 0 评论 -
C++回顾——对象的创建与使用
一、语言的翻译过程 任何源代码都要转化成机器指令。通常,翻译器分为两类:解释器和编译器。 1)解释器 解释器将源代码转化成一些动作(可由多组机器指令组成)并立即执行这些动作。现在许多的解释器,先把整个程序转化成某种中间语言,然后由执行速度更快的解释器来执行。 解释器的优点:较好的交互性和适于快速程序开发,缺点:执行速度慢、难以调试(不隔离不同代码段的影响)。 2)编译器 编译器直接把源...原创 2018-06-25 13:09:54 · 253 阅读 · 0 评论 -
7Z源码分析——7zTypes.h
源码下载地址:https://www.7-zip.org/download.html 下载后解压,然后使用Visual Studio 2008 SP1(一定要打SP1补丁,不然后面编译会很麻烦,各种报错,然后查看解决办法,也许最终还是回到打SP1补丁……) 打开%7z_source%\CPP\7zip\Bundles\Format7zF\Format7z.dsw,会有如下提示,选择标记的那个...原创 2018-06-11 10:38:03 · 1363 阅读 · 0 评论 -
C++回顾——C++中的C
一、创建函数 参数的顺序和类型必须在声明、定义、函数调用中相匹配(必须指明每一个参数的类型)。 在不知道会有多少个参数或什么类型的参数时,可使用可变的参数列表(用…表示)。如果不想使用函数原型的错误检查功能,可以对固定参数表的函数使用可变参数列表。 C++函数原型必须指明函数的返回值类型(在C中,如果省略返回值,默认为整型)。二、使用C的函数库 在定义自己的函数之前,应该仔细地看一下函...原创 2018-07-01 20:46:06 · 256 阅读 · 0 评论 -
《质量全面管控》读书笔记——灾难恢复与容灾测试(END)
一、灾难恢复 从一个软件和平台的角度讲,一切引起系统非正常停机的事件都可以称为灾难。灾难大致分为3个类型: 1)自然灾害,这是人力不可抗拒的; 2)设备故障,硬件故障、电源中断、网络故障等; 3)人为操作破坏。灾难恢复测试就是灾难发生后,将生产平台恢复到正常运作的能力。1、灾难恢复规范 IT行业公认最关键的衡量指标有两个:RTO和RPO。 RTO(Recovery Time O...原创 2018-07-08 22:38:07 · 712 阅读 · 0 评论 -
C++回顾——数据抽象
一、动态内存分配 堆是很大的内存块,用以在运行时分配一些小的存储空间。在写程序时,如果还不知道所需内存的大小,就可使用堆。在标准C中,动态内存分配函数包括malloc()、calloc()、realloc()、free()。C++中,使用new和delete。任何时候申请内存都有可能失败,要判断内存是否分配成功。 注意,堆管理器是相当简单的,它给出一块内存,而当用delete释放时又把它收回。...原创 2018-07-02 21:00:09 · 268 阅读 · 0 评论 -
C++回顾——隐藏实现
一、C++的访问控制 在任何关系中,设立相关各方面都遵从的边界很重要。需要控制对结构成员的访问有两个理由:1)让客户程序员远离一些他们不需要的工具(他们很容易知道什么是重要的,什么是可以忽略的);2)允许库的设计者改变内部实现,而不必担心会对客户程序员产生影响。 访问控制通常是指实现细节的隐藏。 public意味着在其后声明的所有成员可以被所有的人访问。 private意味着除了该类型的创...原创 2018-07-04 12:44:47 · 896 阅读 · 0 评论 -
C++回顾——初始化与清除
一、欧诺个构造函数确保初始化 在C++中,初始化很重要,不应该留给客户程序员来完成。类的设计者可以通过构造函数(constructor)来保证每个对象都被初始化。构造函数和析构函数没有返回值,这是因为在程序中创建和消除一个对象的行为非常特殊,总是由编译器来调用构造函数和析构函数,如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式地调用构造函数与析构函数(这样一来...原创 2018-07-04 13:54:42 · 470 阅读 · 0 评论 -
QT学习——QFileSystemModel与QTreeView显示文件夹下的文件信息
最近因为项目需求,使用QT做界面,新手学习,记录一些笔记。虽然QT已经做好了标准对话框的国际化,但是有时候对于中文的翻译可能达不到我们期望的,所以就需要我们自己来修改。比如下面的代码中,利用了国际化: // 写在main函数中 QApplication app(argc, argv); QString translatorFileName("C:/Qt/4.8.6/...原创 2018-07-05 11:36:29 · 9706 阅读 · 0 评论 -
C++回顾——函数重载与默认参数
一、函数重载 函数重载:可以对不同的函数使用同样的名字,只要求函数的参数不同。编译器会修饰这些名字、范围和参数来产生内部名以供它和连接器使用。C++代码在编译时会根据参数列表对函数进行重命名,例如void fun(int a, int b)会被重命名为_fun_int_int(不同的编译器有不同的重命名方式),当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择对应的函数,如果匹配失败,编...原创 2018-07-05 13:22:14 · 284 阅读 · 0 评论 -
QT学习——QTreeView获取选中单行数据和多行数据
个人感觉QTreeView有些地方的使用没有MFC的CListCtrl方便(比如在不响应单击信号的情况下,获取选中行的数据(单行和多行)),也许因为我是新手吧。 一、获取单行选中的数据QModelIndex selected = ui.treeView->currentIndex(); //选中的行selected = selected.sibling(selected.row(),...原创 2018-07-05 17:04:39 · 14271 阅读 · 4 评论 -
C++回顾——常量
一、值替代 要使用const而非#define,必须把const定义放进头文件里。这样,通过包含头文件,可把const定义单独放在一个地方并把它分配给一个编译单元。C++中的const默认为内部连接(internal linkage),也就是说,const仅在const被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到。当定义一个const时,必须赋一个值给它,除非用extern作出了...原创 2018-07-06 20:24:35 · 149 阅读 · 0 评论 -
C++回顾——内联函数
函数调用有参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN等开销。一、内联函数 内联函数能够像普通函数一样具有我们所期望的任何行为,唯一不同之处是内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。...原创 2018-07-13 13:58:40 · 192 阅读 · 0 评论 -
PHP学习笔记——加密解密
一、MD5算法MD5消息摘要算法(Message Digest Algorithm)是R.Rivest设计的,它对输入的任意长度的消息进行运算,产生一个128位的消息摘要。随着穷举攻击和密码分析的发展,MD5算法已经不再那么流行了。1、算法原理1)数据填充填充消息使其与448模512同余(长度 ≡ 448 mod 521),即填充后的消息长度是比512的倍数仅小64位的数。即使消息长度本身...原创 2019-01-23 17:06:02 · 569 阅读 · 0 评论