自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (3)
  • 收藏
  • 关注

原创 在linux环境中安装perf工具,用于性能分析

本文介绍通过包管理工具和手工的方式安装perf工具。对于像centos、ubuntu等发行版,都提供了对应的包,只要根据内核版本进行安装即可。安装的命令如下:手工安装在一些特殊的场景,比如aws的EC2中,无法使用包管理工具安装linux-tools。这时,我们就需要手工编译安装perf。首先获取内核版本,通过下面的命令:然后在linux内核托管的网站上找到对应的内核源码,例如https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.173.ta

2022-06-15 22:28:49 4882 1

原创 tensorflow-serving源码阅读1

文章目录简介准备工作生成pb产物移除单侧代码屏蔽“无关”文件添加构建目标serving代码阅读service层资源管理层servable层简介准备写几个文章来记录对tensorflow代码的阅读。本文主要写tensorflow代码阅读准备及tensorflow-serving代码的阅读。准备工作代码阅读前,还是需要准备一下装备来提升代码阅读效率,好的工具能提升代码阅读的效率,这里推荐使用CLion来阅读代码。即使windows下,也可以用CLion阅读代码,虽然很多代码编译不过,但并不影响代码的阅

2022-05-04 14:12:14 1555

原创 java日志系统问题总结

摘要本文主要讲述slf4j, jcl, logback, log4j2, log4j冲突问题。 适用场景为同时使用thrift, elasticsearch-client, 老内部库等第三方库造成日志管理难度问题。日志系统介绍首先总结java提供的日志系统,它包括: - jul 全称java-utils-logging, jdk自带的日志系统) - jcl 全称 apache

2017-03-01 23:52:00 797

原创 opensuse 42.1 安装kde4

opensuse 42.1 安装kde4opensuse 42.1默认安装的是kf5, 但是kf5不稳定, 经常奔溃. 这里提供一个教程, 用于重新安装kde4.安装和卸载必要程序使用yast2, 点击”软件管理”.1.搜索kdebase4设置kdebase4-session, kdebase4-workspace为安装, 弹出框一律选择第一个.2.搜索plasma 设置plasma-nm5,

2016-07-12 23:55:21 2358

原创 mysql导入导出csv文件

mysql导出csv文件语法块`select block`into outfile `/path/of/file`fields terminated by ',' optionally enclosed by '"' escaped by '"'lines terminated by '\r\n';例子select * from test_infointo outfile '/tmp/tes

2016-05-09 20:46:35 777

原创 php面试中的经典问题

问题一问题描述考虑下面代码:$str1 = 'yabadabadoo';$str2 = 'yaba';if (strpos($str1,$str2)) { echo "\"" . $str1 . "\" contains \"" . $str2 . "\"";} else { echo "\"" . $str1 . "\" does not contain \"" . $str

2016-04-29 23:02:22 8119

原创 redis总结

redis的缓存处理当将redis作为缓存服务器时, 需要处理过期缓存问题. LRU是redis唯一支持的缓存处理方式. 对于缓存方面的设置包括两个参数, 一个是最大缓存数量, 另一个是缓存策略.最大缓存数量参数名为, “maxmemory”, 在配置文件”redis.conf”中设置. 当这个参数设置为0时, 表示内存无限制. 但是对于32位操作系统, 最大内存使用为3GB, 当超过这个数

2016-04-29 13:21:53 5225

原创 90-新垃圾回收机制说明

90-新垃圾回收机制说明在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不释放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况(Bug:http://bugs.

2016-04-28 22:08:58 8024

原创 89-变量的引用与计数规则

89-变量的引用与计数规则变量的内部引用和计数在引擎内部,一个PHP的变量是保存在“zval”结构中,此结构包含了变量的类型和值信息,这个在之前的文章 变量的内部存储:值和类型 中已经介绍了,此结构还有另外两个字段信息,一个是”is_ref”(此字段在5.3.2版本中是is_ref__gc),此字段是一个布尔值,用来标识变量是否是一个引用,通过这个字段,PHP引擎能够区分一般的变量和引用变量。PHP

2016-04-28 22:01:37 964

原创 88-zend_execute的具体执行过程

88-zend_execute的具体执行过程解释器引擎最终执行op的函数是zend_execute,实际上zend_execute是一个函数指针,在引擎初始化的时候zend_execute默认指向了execute,这个execute定义在{PHPSRC}/Zend/zend_vm_execute.h:ZEND_API void execute(zend_op_array *op_array TSRM

2016-04-28 22:01:04 7708

原创 87-代码的加密与解密

87-代码的加密与解密PHP语言作为脚本语言的一种,由于不需要进行编译,所以通常PHP程序的分发都是直接发布源代码。 对于一些开源软件来说,这并没有什么问题,因为它本来就希望有更多的人阅读代码,希望有更多的人参与进来, 而对于商业代码来说,这却是一个不太好的消息,不管是从商业秘密,还是从对公司产权的保护来说却是一个问题, 基于此,从而引出了对PHP代码的加密和解密的议题。 例如国内的Discuz论坛

2016-04-28 22:00:44 1714

原创 86-中间代码opcode的执行

86-中间代码opcode的执行假如我们现在使用的是CLI模式,直接在SAPI/cli/php_cli.c文件中找到main 函数, 默认情况下PHP的CLI模式的行为模式为PHP_MODE_STANDARD。 此行为模式中PHP内核会调用php_execute_script(&file_handle TSRMLS_CC);来执行PHP文件。 顺着这条执行的线路,可以看到一个PHP文件在经过词法分析

2016-04-28 22:00:15 8294

原创 85-虚拟机的语法分析

85-虚拟机的语法分析Bison是一种通用目的的分析器生成器。它将LALR(1)上下文无关文法的描述转化成分析该文法的C程序。 使用它可以生成解释器,编译器,协议实现等多种程序。 Bison向上兼容Yacc,所有书写正确的Yacc语法都应该可以不加修改地在Bison下工作。 它不但与Yacc兼容还具有许多Yacc不具备的特性。Bison分析器文件是定义了名为yyparse并且实现了某个语法的函数的C

2016-04-28 21:59:30 7209

原创 84-虚拟机的词法解析

84-虚拟机的词法解析语言从广义上来讲是人们进行沟通交流的各种表达符号。每种语言都有专属于自己的符号,表达方式和规则。 就编程语言来说,它也是由特定的符号,特定的表达方式和规则组成。 语言的作用是沟通,不管是自然语言,还是编程语言,它们的区别在于自然语言是人与人之间沟通的工具, 而编程语言是人与机器之间的沟通渠道。相对于自然语言,编程语言的历史还非常短, 虽然编程语言是站在历史巨人的基础上创建的,但

2016-04-28 21:58:52 4454

原创 83-Zend虚拟机

83-Zend虚拟机通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程:递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend 引擎, 加载注册的扩展模块。初始化完成后读取脚本文件,Zend引擎对脚本文件进行词法分析,语法分析。然后编译成opcode执行。 如过安装了apc之类的opcode缓存, 编译环节可能会被跳过而直接从缓存中读取o

2016-04-28 21:58:30 795

原创 82-资源resource类型

82-资源resource类型讲述之前,先描述下{资源}类型在内核中的结构://每一个资源都是通过它来实现的。typedef struct _zend_rsrc_list_entry{ void *ptr; int type; int refcount;}zend_rsrc_list_entry;在真实世界中,我们经常需要操作一些不好用标量值表现的数据,比如某个文件的

2016-04-28 21:57:16 8182

原创 81-继承与实现接口

81-继承与实现接口在定义一个类时往往会使其继承某个父类或者实现某个接口,在扩展中实现这个功能非常方便。下面我先给出PHP语言中的代码。<?phpinterface i_myinterface{ public function hello();}class parent_class implements i_myinterface{ public function hello

2016-04-28 21:56:33 828

原创 80-定义接口

80-定义接口定义一个接口还是很方便的,我先给出一个PHP语言中的形式。<?phpinterface i_myinterface{ public function hello();}?>那它在扩展中的实现是这样的。zend_class_entry *i_myinterface_ce;static zend_function_entry i_myinterface_method[]=

2016-04-28 21:56:12 886

原创 79-命名空间

79-命名空间在维基百科中,对命名空间的定义是: 命名空间(英语:Namespace)表示标识符(identifier)的上下文(context)。一个标识符可在多个命名空间中定义, 它在不同命名空间中的含义是互不相干的。在编程语言中,命名空间是一种特殊的作用域,它包含了处于该作用域内的标识符, 且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。 函数和类的作用域

2016-04-28 21:55:46 690

原创 78-对象属性读写

78-对象属性读写这一节主要描述与对象属性有关的东西。有关如何对它进行定义的操作我们已经在上一章中描述过了,这里不再叙述,只讲对其的操作。读取对象的属性ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS

2016-04-27 13:32:42 1245

原创 77-创建对象实例

77-创建对象实例为了操作一个对象,我们需要先获取这个对象的实例,而这有肯定会涉及调用对象的构造方法。首先我们先了解下一个object在PHP内核中到底是如何实现的。typedef struct _zend_object_value { zend_object_handle handle; zend_object_handlers *handlers;} zend_object_v

2016-04-27 13:32:12 958

原创 76-对象

76-对象对象是我们可以进行研究的任何事物,世间万物都可以看作对象。它不仅可以表示我们可以看到的具体事物, 也可以表示那些我们看不见的事件等。对象是一个实体,它具有状态,一般我们用变量来表示, 同时它也可以具有操作行为,一般用方法来表示,对象就是对象状态和对象行为的集合体。在之前我们很多次的说到类,对于对象来说,具有相同或相似性质的对象的抽象就是类。 因此,对象的抽象是类,类的具体化就是对象,我们常

2016-04-27 13:31:57 1099

原创 75-保留类与特殊类

75-保留类与特殊类在面向对象语言中,都会内置一些语言内置提供的基本功能类,比如JavaScript中的Array,Number等类, PHP中也有很多这种类,比如Directory,stdClass,Exception等类,同时一些标准扩展比如PDO等扩展中也会定义一些类, PHP中类是不允许重复定义的,所以在编写代码时不允许定义已经存在的类。同时PHP中有一些特殊的类:self,static和p

2016-04-27 13:31:27 1498

原创 74-魔术函数与延迟绑定

74-魔术函数与延迟绑定PHP中有一些特殊的函数和方法,这些函数和方法相比普通方法的特殊之处在于:用户代码通常不会主动调用, 而是在特定的时机会被PHP自动调用。在PHP中通常以”“打头的方法都作为魔术方法, 所以通常不要定义以”“开头的函数或方法。 例如:__autoload()函数, 通常我们不会手动调用这个函数, 而如果在代码中访问某个未定义的方法, 如过已经定义了__autoload()函数

2016-04-27 13:31:12 868

原创 73-继承,多态与抽象类

73-继承,多态与抽象类继承继承是一种关联类的层次模型,它可以建立类之间的关系,并实现代码重用,方便系统扩展。 继承提供了一种明确表述共性的方法,是一个新类从现有的类中派生的过程。 继承产生的新类继承了原始类的特性,新类称为原始类的派生类(或子类), 而原始类称为新类的基类(或父类)。派生类可以从基类那里继承方法和变量, 并且新类可以重载或增加新的方法,使之满足自己的定制化的需要。PHP中使用ext

2016-04-27 13:30:33 1092

原创 72-访问控制

72-访问控制面向对象的三大特性(封装、继承、多态),其中封装是一个非常重要的特性。封装隐藏了对象内部的细节和实现, 使对象能够集中而完整的描述并对应一个具体的事物, 只提供对外的访问接口,这样可以在不改变接口的前提下改变实现细节,而且能使对象自我完备。 除此之外,封装还可以增强安全性和简化编程。 在面向对象的语言中一般是通过访问控制来实现封装的特性。 PHP提供了public、protected及

2016-04-27 13:29:57 858

原创 71-类的定义

71-类的定义在这一节中,我们正式的定义一个类。首先我给出PHP语言的实现:<?phpclass myclass{ public $public_var; private $private_var; protected $protected_var; public static $static_var; public function __construct(

2016-04-27 13:29:26 954

原创 70-类的原型zend_class_entry

70-类的原型zend_class_entryzend_class_entry是内核中定义的一个结构体,是内核实现PHP语言中类与对象的一个非常基础、关键的结构类型。他就相当于我们定义的类的原型。如果我们想获得一个名字为myclass的类该怎么做呢?首先我们定义一个zend_class_entry变量,并为它设置名字,最后注册到runtime中去。zend_class_entry *myclass_

2016-04-27 13:28:23 1073

原创 69-类的成员方法

69-类的成员方法成员方法从本质上来讲也是一种函数,所以其存储结构也和常规函数一样,存储在zend_function结构体中。 对于一个类的多个成员方法,它是以HashTable的数据结构存储了多个zend_function结构体。 和前面的成员变量一样,在类声明时成员方法也通过调用zend_initialize_class_data方法,初始化了整个方法列表所在的HashTable。 在类中我们如

2016-04-27 13:27:01 980

原创 68-类的成员变量

68-类的成员变量在上一小节,我们介绍了类的结构和声明过程,从而,我们知道了类的存储结构,接口抽象类等类型的实现方式。 在本小节,我们将介绍类的成员变量和成员方法。首先,我们看一下,什么是成员变量,什么是成员方法。类的成员变量在PHP中本质上是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的。 类的成员变量也称为成员属性,它是现实世界实体属性的抽象,是可以用来描述对象状态的数据。类

2016-04-27 13:25:40 1053

原创 67-类的结构和实现

67-类的结构和实现面向对象编程中我们的编程都是围绕类和对象进行的。那在PHP内部类是怎么实现的呢? 它的内存布局以及存储是怎么样的呢?继承、封装和多态又是怎么实现的呢?类的结构首先我们看看类是什么。类是用户定义的一种抽象数据类型,它是现实世界中某些具有共性事物的抽象。 有时我们也可以理解其为对象的类别。类也可以看作是一种复合型的结构,其需要存储多元化的数据, 如属性、方法、以及自身的一些性质等。类

2016-04-27 13:24:05 828

原创 66-面向对象开篇

66-面向对象开篇面向对象是一种编程范式,它将对象作为程序的基本单元,将程序和数据封装起来, 以此来提高程序的重用性、灵活性和可扩展性。目前很多语言都支持面向对象编程,既然对象对象是一种范式,其实这就和具体的编程语言没有直接关系, 只不过很多语言将这个范式作为语言的基本元素,使用C语言也能够进行面向对象编程。面向对象的程序设计中包含:类。类是具体事物的抽象。通常类定义了事物的属性和所能完成的工作。

2016-04-27 13:23:20 702

原创 65-匿名函数及闭包

65-匿名函数及闭包匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。闭包(Closure)

2016-04-27 13:22:45 1048

原创 64-引用与函数执行

64-引用与函数执行一个函数的执行结果要返回给调用者,除了使用return功能,还有一种办法,那就是以引用的形式传递参数,然后在内部修改这个参数的值。前一种方法往往只能返回一个值,如果我们的函数执行结果具有多种数据,便需要把这些数据打包到一个数组、类等复合类型的变量中才能得以实现;但后一种方法相比而言就简单一些了。运行时传递引用:Call-time Pass-by-ref标题有点绕口,其实很简单,功

2016-04-27 13:22:29 1037

原创 63-函数调用与执行

63-函数调用与执行前面对函数的内部表示以及参数的传递,返回值都有了介绍,那函数是怎么被调用的呢?内置函数和用户定义函数在调用时会有什么不一样呢? 下面将介绍函数调用和执行的过程。 函数的调用函数被调用需要一些基本的信息,比如函数的名称,参数以及函数的定义(也就是最终函数是怎么执行的), 从我们开发者的角度来看, 定义了一个函数我们在执行的时候自然知道这个函数叫什么名字,以及调用的时候给传递了什么

2016-04-27 13:21:50 912

原创 62-形参return value

62-形参return valuePHP语言中函数的返回值是通过return来完成了,就像下面的程序:<?phpfunction sample_long() { return 42;}$bar = sample_long();?>C语言也一样使用return关键字:int sample_long(void) { return 42;}int main(void) {

2016-04-27 13:21:33 978

原创 61-函数返回值

61-函数返回值在编程语言中,一个函数或一个方法一般都有返回值,但也存在不返回值的情况,此时,这些函数仅仅仅是处理一些事务, 没有返回,或者说没有明确的返回值,在pascal语言中它有一个专有的关键字 procedure 。 在PHP中,函数都有返回值,分两种情况,使用return语句明确的返回和没有return语句返回NULL。return语句当使用return语句时,PHP给用户自定义的函数返回

2016-04-27 13:21:06 1102

原创 60-zend_parse_parameters函数

60-zend_parse_parameters函数最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_CC,注意两者之间有个空格,但是没有逗号。从名字可以看出,ZEND_NUM_ARGS()代表这参数的个数

2016-04-27 13:20:52 1179

原创 59-函数的参数

59-函数的参数前面介绍了函数的定义,函数的定义只是一个将函数名注册到函数列表的过程,在了解了函数的定义后,我们来看看函数的参数。 这一小节将包括用户自定义函数的参数和内部函数的参数两部分,详细内容如下:用户自定义函数的参数我们对于参数的类型提示做了分析,这里我们在这一小节的基础上,进行一些更详细的说明。 在经过词语分析,语法分析后,我们知道对于函数的参数检查是通过 zend_do_receive_

2016-04-27 13:20:30 947

原创 58-定义函数的过程

58-定义函数的过程在PHP中,用户函数的定义从function关键字开始。如下所示简单示例:function foo($var) { echo $var;}这是一个非常简单的函数,它所实现的功能是定义一个函数,函数有一个参数,函数的内容是在标准输出端输出传递给它的参数变量的值。函数的一切从function开始。我们从function开始函数定义的探索之旅。词法分析在 Zend/zend

2016-04-26 12:32:37 1261

cpp编程艺术电子书

一本讲述cpp编程艺术的电子书

2012-07-12

白话cpp电子书

白话c++,讲的是浅显的编程知识

2012-07-12

完整C#版记事本

完整的C#写的记事本源代码。

2012-06-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除