我不清楚的,亟待学习的

 

memcached的分布式应用

 

html、dhtml、xhtml的区别

 

xml怎样转化为html格式

 

面向对象深入、再深入

 

index为什么能加快检索速度

 

1、apache的工作原理

 

网络服务器由于要同时为多个客户提供服务,就必须使用某种方式来支持这种多任务的服务方式。一般情况下可以有三种方式来选择,多进程方式、多线程方式及异步方式。

 

apache2可以是多进程与多线程混合的工作方式。影响它性能的核心模块主要是MPM(Multi-ProcessingModules,多道处理模块)。

 

可以选择prefork和worker模式。

其中,prefork是单纯的多进程工作方式,当apache启动时,生成startserver个进程,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。每个进程处理多个请求后退出,维持最小空闲进程数,当服务器处理的请求比较复杂、要求高稳定性的时候,可以选择该工作模式,因为多个进程之间不干扰。

而worker是多进程与多线程混合的方式。系统启动时,生成startserver个进程,每个进程又包含Threadsperchild个线程,每个线程独立的处理请求。这样能够增大系统的并发负载量。

以上参考:http://blog.tianya.cn/blogger/post_show.asp?BlogID=40003&PostID=4585547

 

 

[Figure 3: The Data Axis]

 

一个请求到来的,依次经过metadata模块、内容生成模块、logging模块,而content generator 模块又会通过pipelined的方式调用input filters和output filters进行处理,这些filters比如:Server side includes (SSI), XML and XSLT processing, gzip compression, and Encryption (SSL)。

 

内容生成模块通过addhandler或sethandler,在httpd.conf中指定。

 

metadata 模块比如:

  • The request URL will be matched against the configuration to determine what content generator should be used.
  • The request URL will be normally mapped to the filesystem. The mapping may be to a static file, a CGI script, or whatever else the content generator may use.
  • If content negotiation is enabled, mod_negotiation will find the version of the resource that best matches the browser's preference. For example, the Apache manual pages are served in the language requested by the browser.
  • Access and Authentication modules will enforce the servers access rules, and determine whether the user is permitted what has been requested.
  • mod_alias or mod_rewrite may change the effective URL in the request.

 

以上参考:http://www.apachetutor.org/dev/request

 

 

2、apache的编译方式:DSO与静态编译

 

DSO(Dynamic Shared Objects,动态共享目标),它提供了在运行时加载模块的方式。

 

apache分4层,从上到下依次为:第三方库、可选的附加功能模块(如mod_rewrite)、基本功能库(http_core、mod_so等)、os相关的库。其中,第三层和第四层都可以灵活选择。于是就有了DSO和静态编译的方式。

 

前者,在apache启动时,加载动态库,可以通过配置文件来选择需要哪些模块,但是启动速度会受到影响。后者,在编译时,将动态库编译进apache。

 

 

3、HTTP/1.1 为什么能提高性能?

 

在HTTP/1.0中,每次请求得到响应之后,都会断开浏览器与服务器端的连接。这样,如果一个页面有多个请求,就会有多个连接。而1.1中,引入了持久连接,因为TCP允许来自IP层的多个请求打包为一个发送,并把响应也打包发送,这样就减少了连接数目。同时,由于连接请求少了,也减少了为了建立请求而发送的数据包,减少了网络负载。

 

 

4、PHP引擎的工作原理

 

首先,分析php代码的执行顺序:

    1.         Scanning(Lexing) , PHP 代码转换为语言片段 (Tokens)

2.         Parsing, Tokens 转换成简单而有意义的表达式

3.         Compilation, 将表达式编译成 Opocdes

4.         Execution, 顺次执行 Opcodes ,每次一条,从而实现 PHP 脚本的功能。

附记 : 现在有的 Cache 比如 APC, 可以使得 PHP 缓存住 Opcodes ,这样,每次有请求来临的时候,就不需要重复执行前面 3 步,从而能大幅的提高 PHP 的执行速度。

以上参考: http://www.laruence.com/2008/06/18/221.html

 

即 php代码 -> token -> opcodes ,缓存php代码效果较好的方式,应该是缓存opcodes。

 

提高php性能的方法:

1、使用优化引擎,去除不必要的代码

2、使用缓冲技术,缓存opcodes

3、对输出内容进行压缩

以上参考:http://developer.51cto.com/art/200904/120151.htm

 

 


 

 

PHP总共有三个模块:内核、Zend引擎、以及扩展层; PHP内核用来处理请求、文件流、错误处理等相关操作; Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们 需要mysql扩展来连接MySQL数据库;当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。

MINIT的意思是“模块初始化”,RINIT方法,即“请求初始化”。它们分别对应PHP全局变量、函数等的两种生命周期:一个apache进程(线程)内都有效,以及仅在一次请求内有效。它们对应的有MSHUTDOWN和RSHUTDOWN。

  1. We never start any PHP daemon or anything by ourself. When we start Apache, it starts the PHP interpreter along itself
  2. PHP is linked to Apache (In general term SAPI i.e. a Server API) using mod_php5.so module
  3. PHP as a whole consists of 3 modules (Core PHP, Zend Engine and Extension Layer)
  4. Core PHP is the module which handles the requests, file streams, error handling and other such operations
  5. Zend Engine(ZE) is the one which converts human readable code into machine understandable tokens/op-codes. Then it executes this generate code into a Virtual Machine.
  6. Extensions are a bunch of functions, classes, streams made available to the PHP scripts, which can be used to perform certain tasks. For example, we need mysql extension to connect to MySQL database using PHP.
  7. While Zend Engine executes the generated code, the script might require access to a few extensions. Then ZE passes the control to the extension module/layer which transfer back the control to ZE after completion of tasks.
  8. Finally Zend Engine returns back the result to PHP Core, which gives that to SAPI layer, and finally which displays it on your browser.

 

以上参考:http://abhinavsingh.com/blog/2008/11/how-does-php-echos-a-hello-world-behind-the-scene/

 

5、缓存

 

缓存分为服务器和客户端缓存。服务器端缓存可以利用memcached缓存数据,php加速器缓存编译好的opcodes,还有类似varnish的http缓存服务器。而客户端缓存主要是根据http协议,减少客户端对服务器端的重复请求。

 

客户端缓存方式:

a、expires/cache-control: 给静态资源(HTML文件,图片文件等)的Repsone加上Expires/Cache-Control Header,这样下次浏览器需要这个资源的时候,就会检查本地缓存的文件是否过期,如果不过期就不请求了

b、 HTTP的Response中还会有另外一个Header叫Last-Modified 浏览器访问一个URI得 到这样的Resposne之后,就知道这个资源最后一次的修改时间,下次需要再次获得这个资源的时候,会发一个Request给Server,不过这个 Request中有一条“If-Unmodified-Since: Thu, 06 Apr 2006 21:17:12 GMT”,如果在Server端在这个日期之后对这个资源进行了修改,就会照常返回这个资源给Client端,但是如果没有修改,就会返回一个304 (Not Modified) Response而不返回资源,告诉Client端:“这个资源从上次给你之来从来没改过,你放心用你Cache中的好了。” 一个304 Response比一个静态资源通常小多了,这样就节省了网络带宽

 

当用户在IE或者 Firefox里面按F5或者点击Refresh按钮的时候(不是在URL栏里重新输入一遍URL然后回车),就算对于有Expires的URI,一样也 会发一个HTTP请求出去,所以,Last-Modified还是要用的,而且要和Expires一起用。

 

c、Etags方式:服务器的response中,对资源打一个标记,下次浏览器请求的时候,会带上这个tag,如果服务器端的tag=客户端的tag,则返回304,客户端可以直接使用本地缓存。

 

6、join的区别

 

join默认是outer join的。

 

内连接           只连接匹配的行
左外连接        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接        包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接        包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

 

7、数据库索引(index)

 

在数据库中,索引的含义与日常意义上的“索引”一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象。
A )索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。
B 对于非聚集索引,有些查询甚至可以不访问数据页。
C 聚集索引可以避免数据插入操作集中于表的最后一个数据页。
D 一些情况下,索引还可用于避免排序操作。

 

当然,众所周知,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。

 

以上参考:http://www.cnblogs.com/KissKnife/archive/2009/03/30/1425534.html

 

B-tree是为磁盘或者其他直接存取辅助存储设备而设计的一种平衡查找树,能降低磁盘I/O操作次数。它可以有许多个儿女,即分支因子可能较大,含n个节点的B-tree的高度是O(lgn)。

 

8、表单提交:get和post方式的区别

 

get方式:参数和值存储在http头里;可以被cache;可以被记录在log里;某些旧浏览器有长度限制

 

post方式:参数和值存在在http数据里;不可以被cache;不可以被记录在log里

 

最安全的方式还是使用https。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值