排序:
默认
按更新时间
按访问量

java日志系统问题总结

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

2017-03-01 23:52:00

阅读数:372

评论数:0

opensuse 42.1 安装kde4

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

2016-07-12 23:55:21

阅读数:1328

评论数:0

mysql导入导出csv文件

mysql导出csv文件语法块`select block` into outfile `/path/of/file` fields terminated by ',' optionally enclosed by '"' escaped by '"' lines termina...

2016-05-09 20:46:35

阅读数:508

评论数:0

php面试中的经典问题

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

2016-04-29 23:02:22

阅读数:7282

评论数:0

redis总结

redis的缓存处理当将redis作为缓存服务器时, 需要处理过期缓存问题. LRU是redis唯一支持的缓存处理方式. 对于缓存方面的设置包括两个参数, 一个是最大缓存数量, 另一个是缓存策略.最大缓存数量参数名为, “maxmemory”, 在配置文件”redis.conf”中设置. 当...

2016-04-29 13:21:53

阅读数:4938

评论数:0

90-新垃圾回收机制说明

90-新垃圾回收机制说明在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不释放,这是一种非常简单的GC...

2016-04-28 22:08:58

阅读数:7785

评论数:0

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

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

2016-04-28 22:01:37

阅读数:656

评论数:0

88-zend_execute的具体执行过程

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

2016-04-28 22:01:04

阅读数:7352

评论数:0

87-代码的加密与解密

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

2016-04-28 22:00:44

阅读数:1264

评论数:0

86-中间代码opcode的执行

86-中间代码opcode的执行假如我们现在使用的是CLI模式,直接在SAPI/cli/php_cli.c文件中找到main 函数, 默认情况下PHP的CLI模式的行为模式为PHP_MODE_STANDARD。 此行为模式中PHP内核会调用php_execute_script(&file_...

2016-04-28 22:00:15

阅读数:7343

评论数:0

85-虚拟机的语法分析

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

2016-04-28 21:59:30

阅读数:6862

评论数:0

84-虚拟机的词法解析

84-虚拟机的词法解析语言从广义上来讲是人们进行沟通交流的各种表达符号。每种语言都有专属于自己的符号,表达方式和规则。 就编程语言来说,它也是由特定的符号,特定的表达方式和规则组成。 语言的作用是沟通,不管是自然语言,还是编程语言,它们的区别在于自然语言是人与人之间沟通的工具, 而编程语言是人与机...

2016-04-28 21:58:52

阅读数:4144

评论数:0

83-Zend虚拟机

83-Zend虚拟机通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程: 递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend 引擎, 加载注册的扩展模块。 初始化完成后读取脚本文件,Zend引擎对脚本文件进行词法分析,语法分析。然后编译...

2016-04-28 21:58:30

阅读数:586

评论数:0

82-资源resource类型

82-资源resource类型讲述之前,先描述下{资源}类型在内核中的结构://每一个资源都是通过它来实现的。 typedef struct _zend_rsrc_list_entry { void *ptr; int type; int refcount; }zend_r...

2016-04-28 21:57:16

阅读数:7485

评论数:0

81-继承与实现接口

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

2016-04-28 21:56:33

阅读数:541

评论数:0

80-定义接口

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

2016-04-28 21:56:12

阅读数:663

评论数:0

79-命名空间

79-命名空间在维基百科中,对命名空间的定义是: 命名空间(英语:Namespace)表示标识符(identifier)的上下文(context)。一个标识符可在多个命名空间中定义, 它在不同命名空间中的含义是互不相干的。在编程语言中,命名空间是一种特殊的作用域,它包含了处于该作用域内的标识符, ...

2016-04-28 21:55:46

阅读数:527

评论数:0

78-对象属性读写

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

2016-04-27 13:32:42

阅读数:995

评论数:0

77-创建对象实例

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

2016-04-27 13:32:12

阅读数:803

评论数:0

76-对象

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

2016-04-27 13:31:57

阅读数:928

评论数:0

75-保留类与特殊类

75-保留类与特殊类在面向对象语言中,都会内置一些语言内置提供的基本功能类,比如JavaScript中的Array,Number等类, PHP中也有很多这种类,比如Directory,stdClass,Exception等类,同时一些标准扩展比如PDO等扩展中也会定义一些类, PHP中类是不允许重...

2016-04-27 13:31:27

阅读数:988

评论数:0

74-魔术函数与延迟绑定

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

2016-04-27 13:31:12

阅读数:694

评论数:0

73-继承,多态与抽象类

73-继承,多态与抽象类继承继承是一种关联类的层次模型,它可以建立类之间的关系,并实现代码重用,方便系统扩展。 继承提供了一种明确表述共性的方法,是一个新类从现有的类中派生的过程。 继承产生的新类继承了原始类的特性,新类称为原始类的派生类(或子类), 而原始类称为新类的基类(或父类)。派生类可以从...

2016-04-27 13:30:33

阅读数:888

评论数:0

72-访问控制

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

2016-04-27 13:29:57

阅读数:693

评论数:0

71-类的定义

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

2016-04-27 13:29:26

阅读数:759

评论数:0

70-类的原型zend_class_entry

70-类的原型zend_class_entryzend_class_entry是内核中定义的一个结构体,是内核实现PHP语言中类与对象的一个非常基础、关键的结构类型。他就相当于我们定义的类的原型。如果我们想获得一个名字为myclass的类该怎么做呢?首先我们定义一个zend_class_entry...

2016-04-27 13:28:23

阅读数:856

评论数:0

69-类的成员方法

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

2016-04-27 13:27:01

阅读数:745

评论数:0

68-类的成员变量

68-类的成员变量在上一小节,我们介绍了类的结构和声明过程,从而,我们知道了类的存储结构,接口抽象类等类型的实现方式。 在本小节,我们将介绍类的成员变量和成员方法。首先,我们看一下,什么是成员变量,什么是成员方法。类的成员变量在PHP中本质上是一个变量,只是这些变量都归属于某个类,并且给这些变量是...

2016-04-27 13:25:40

阅读数:612

评论数:0

67-类的结构和实现

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

2016-04-27 13:24:05

阅读数:695

评论数:0

66-面向对象开篇

66-面向对象开篇面向对象是一种编程范式,它将对象作为程序的基本单元,将程序和数据封装起来, 以此来提高程序的重用性、灵活性和可扩展性。目前很多语言都支持面向对象编程,既然对象对象是一种范式,其实这就和具体的编程语言没有直接关系, 只不过很多语言将这个范式作为语言的基本元素,使用C语言也能够进行面...

2016-04-27 13:23:20

阅读数:575

评论数:0

65-匿名函数及闭包

65-匿名函数及闭包匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。匿名函数是一类不需要指定标示符,而又可以被调用的函...

2016-04-27 13:22:45

阅读数:858

评论数:0

64-引用与函数执行

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

2016-04-27 13:22:29

阅读数:851

评论数:0

63-函数调用与执行

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

2016-04-27 13:21:50

阅读数:590

评论数:0

62-形参return value

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

2016-04-27 13:21:33

阅读数:731

评论数:0

61-函数返回值

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

2016-04-27 13:21:06

阅读数:851

评论数:0

60-zend_parse_parameters函数

60-zend_parse_parameters函数最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数。zend_parse_parameters()函数的前几个参数我们直接用内核里宏来生成便可以了,形式为:ZEND_NUM_ARGS() TSRMLS_...

2016-04-27 13:20:52

阅读数:882

评论数:0

59-函数的参数

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

2016-04-27 13:20:30

阅读数:682

评论数:0

58-定义函数的过程

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

2016-04-26 12:32:37

阅读数:1087

评论数:0

57-函数结构转换

57-函数结构转换在函数调用的执行代码中我们会看到这样一些强制转换:EX(function_state).function = (zend_function *) op_array; 或者:EG(active_op_array) = (zend_op_array *) EX(function_st...

2016-04-26 12:32:17

阅读数:644

评论数:0

56-函数的内部结构

56-函数的内部结构在PHP中,函数有自己的作用域,同时在其内部可以实现各种语句的执行,最后返回最终结果值。 在PHP的源码中可以发现,PHP内核将函数分为以下类型:#define ZEND_INTERNAL_FUNCTION 1 #define ZEND_USER_FU...

2016-04-26 12:31:59

阅读数:585

评论数:0

55-函数的分类

55-函数的分类函数是一种可以在任何被需要的时候执行的代码块。它不仅仅包括用户自定义的函数,还包括程序语言实现的库函数。用户定义的函数如下所示手册中的展示函数用途的伪代码:function foo($arg_1, $arg_2, ..., $arg_n) { echo "Exam...

2016-04-26 12:31:37

阅读数:581

评论数:0

54-数组源码分析

54-数组源码分析PHP中经常使用数组,使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置,从而直接取出或者写入。那么内核中是如何实现的呢?PHP大部分功能,都是通过HashTable来实现,其中就包括数...

2016-04-26 12:31:23

阅读数:632

评论数:0

53-数组操作

53-数组操作当你在扩展中使用HashTable时候,95%是要存储用户端的变量,就像PHP语言中数组那样。为此,内核中已经准备好了相应的工具,来让我们更加的方便的操作HashTable存储zval*,也就是PHP语言中的数组,即IS_ARRAY常量代表的zval,以下用{数组}来代替PHP语言中...

2016-04-26 12:31:01

阅读数:553

评论数:0

52-使用哈希表API

52-使用哈希表APIZend把与HashTable有关的API分成了好几类以便于我们寻找,这些API的返回值大多都是常量SUCCESS或者FAILURE。创建HashTable下面在介绍函数原型的时候都使用了ht名称,但是我们在编写扩展的时候,一定不要使用这个名称,因为一些PHP宏展开后会声明这...

2016-04-26 12:30:43

阅读数:5056

评论数:0

51-数组与链表

51-数组与链表在C语言中,我们可以自定义各种各样的数据结构,用来把很多数据保存在一个变量里面,但是每种数据结构都有自己的优缺点,PHP内核规模如此庞大,是否已经找到了一些非常棒的解决方法呢?我们在选择各种数据结构时,往往会考虑我们需要处理的数据规模以及需要的性能。下面让我们简要的看一下看C语言中...

2016-04-26 12:30:20

阅读数:595

评论数:0

50-写时复制COW机制

50-写时复制COW机制写时复制(Copy-on-Write,也缩写为COW),顾名思义,就是在写入时才真正复制一份内存进行修改。 COW最早应用在*nix系统中对线程与内存使用的优化,后面广泛的被使用在各种编程语言中,如C++的STL等。 在PHP内核中,COW也是主要的内存优化手段。 在前面关...

2016-04-26 12:30:07

阅读数:1713

评论数:0

49-内存管理中的cache

49-内存管理中的cache在维基百科中有这样一段描述: 凡是位于速度相差较大的两种硬件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache。 从最初始的处理器与内存间的Cache开始,都是为了让数据访问的速度适应CPU的处理速度, 其基于的原理是内存中“程序执行与数据访问的局域性行为...

2016-04-26 12:29:38

阅读数:712

评论数:0

48-PHP5.3的垃圾回收机制

48-PHP5.3的垃圾回收机制垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。 在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征,如Pyt...

2016-04-26 12:29:05

阅读数:926

评论数:0

47-引用计数与写时复制

47-引用计数与写时复制对于PHP这种需要同时处理多个请求的程序来说,申请和释放内存的时候应该慎之又慎,一不小心便会酿成大错。另一方面,除了要安全申请和释放内存外,还应该做到内存的最小化使用,因为它可能要处理每秒钟数以千计的请求,为了提高系统整体的性能,每一次操作都应该只使用最少的内存,对于不必要...

2016-04-26 12:28:30

阅读数:5015

评论数:0

46-内存的申请与销毁

46-内存的申请与销毁PHP底层对内存的管理, 围绕着小块内存列表(free_buckets)、 大块内存列表(large_free_buckets)和 剩余内存列表(rest_buckets)三个列表来分层进行的。 ZendMM向系统进行的内存申请,并不是有需要时向系统即时申请, 而是由Zend...

2016-04-26 12:23:06

阅读数:798

评论数:0

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