设为首页收藏本站

思新社区 -谢新阳

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 568|回复: 0

PHP面试问题总结

[复制链接]
我的人缘1

  离线 

  • TA的每日心情
    无聊
    2016-4-26 09:28
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    74

    主题

    101

    帖子

    940

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    940
    发表于 2016-5-24 18:41:27 | 显示全部楼层 |阅读模式
    PHP几个输出功能呼应,差的print(),的print_r(),sprintf的()的var_dump()

    1:回音:该语句是不是一个函数,没有返回值,多个变量,没有括号的产值。不能输出数组和对象,只打印简单

    类型(如整型,字符串)。

    2:打印:该语句不是一个函数,它返回值1,只有一个变量不需要括号的输出。不能输出数组和对象,只打印简

    单类型(如整型,字符串)。

    3:print_r的:一个功能,可以打印一个复合类型,例如:stirng,整型,浮点,数组,对象等,

                         输出数组将通过结构来表示,也可由的print_r($海峡,真)没有返回产值的print_r

    处理,使的print_r

    4:printf的:就是格式化输出后的文字的功能(见C语言)

    5:SPRINTF:功能与printf的类似,但不打印,但返回(而不是输出写入功能写一个格式化字符串变量)格式的

    文本,这是他和printf一样。

    例如:



    1$海峡=“你好”;
    2$数=123;
    3 $ TXT= sprintf的(“%的世界天数%U”,$海峡,$数);
    4//输出:。世界,你好天数123





    6:的var_dump()函数,内容输出变量,内容类型,或字符串,类型,长度。用于调试。


    写一个函数来处理多个线程同时读取和写入文件的问题。

      1<? PHP
      2$计划生育=的fopen(“/ tmp目录/ lock.txt”,“W+”);
      3,如果(羊群($ FP,LOCK_EX)){//执行独占锁定类型
      4 FWRITE($ FP,“写的东西在这里\ n”);
      5羊群($ FP,LOCK_UN); //释放锁
      6}其他{
      7回声“无法锁定文件!”
      8}
      9 FCLOSE($ FP);
    10?>



    禁止使用Cookie的会话程序,设置session过期的方法,相应的功能:
    通过URL传统价值观,会话ID追加到URL(缺点:整个网站不能有纯静态页面作为纯静态页面的会话ID不会继续蔓

    延到下一页)
    通过隐藏表单,会话ID进入隐藏的文本框与以往提交的表单形式(缺点:不适用<A>直接跳转等标签不定期单情

    况)
    直接php.ini配置文件,在session.use_trans_sid指定=0〜1 php.ini文件,(似乎不支持WIN)
    保存会话ID与文件,数据库和其他形式的跨页的手册名为过程

      第1 setcookie()函数直接设置会话ID的setcookie生命周期。
      2
      3 $一生= 60; //保存1分钟
      4在session_start();
      5的setcookie(会话名称(),SESSION_ID(),时间()+$一生,“/”);
      6第二session_set_cookie_params()
      7$一生= 60; //保存1分钟
      8 session_set_cookie_params($寿命);
      9在session_start();
    10 session_regenerate_id(真);
    11其中session_regenerate_id();使用的方法来改变当前的session_id的值和会话阵列中保持的值。参数默

    认为false,如果设置为true,改变SESSION_ID的值并清除当前会话的数组。



    JSON数据格式功能
    JSON,一种轻量级的数据交换格式。它是基于ECMAScript的一个子集。 JSON具有完全独立的文本格式的语言,

    同时也采用了类似于C家族的习惯(包括C,C++,C#,Java的,使用Javascript,Perl和Python等)的语言。

    这些特性使JSON成为理想的数据交换语言。易于读写,也易于机器解析和生成(网络传输速率)。

    基于以下几点JSON结构
    1.“名称/值”为不同语言的集合,它被理解为一个对象(对象),记录(记录),结构(结构),字典(词典)

    ,哈希表(哈希表),列表键(键控列表)等。
    2.大多数语言的有序列表的值被理解为一个数组(数组)

    PHP的获取文件的内容的方法,所述相应的功能
    1:的file_get_contents来获取文件的内容(你可以得到该职位,并获得方式),将整个文件读入字符串
    2:FOPEN打开URL,以访问含量(与fgets的方式()函数)的方式
    3:在函数的fsockopen打开的网址(你可以获取和发布的方式),获得的方式来获得完整的数据,包括标题和正


    4:curl库使用curl库之前获取的内容,您需要查看php.ini文件,查看是否已经打开curl扩展

    常见的那些PHP数组功能? (array_merge,in_array角色)
    一,基本功能数组操作
         array_values($ ARR); //获取数组的值
         array_keys($ ARR); //取得键阵列
         array_flip($ ARR);在阵列和交换密钥//值(如果有重复前将在后面介绍)
         array_search('PHP',$ ARR); //获取给定增加值是真正的严格类型检查
         array_reverse($ ARR); //数组翻转的元素
         in_array(“苹果”,$ ARR); //检索数组中的苹果
         array_key_exists(“苹果”,$ ARR); //获取给定键名称存在数组中
         //计数值数组都出现在数; array_count_values($ ARR)

    二,分割和填充数组
         array_slice($改编,0,3); //阵列部分可以拆卸,忽略键名(分段阵列)这个函数
         array_splice($改编,0,3阵列(“黑”,“栗色”)); //阵列部分可被去除,并且不同的功能,从原

    始序列号返回删除组
         array_chunk($改编,3,TRUE); //数组可以分为多种,TRUE保留阵列的原始密钥名(独立的多个阵列



    四,数组和栈,队列
         array_push($改编,“苹果”,“梨”); //一个或多个元件压入阵列栈(stack)的端部,返回元件的

    数目到堆栈
         array_pop($ ARR); //数组出栈的最后一个元素(栈)
         array_shift($ ARR); //数组,并返回一个元素被删除(数组长度减1,其他的元素从零计数前进数字键

    更改名称,字符键不变)
         array_unshift($改编,“一”,阵列(1,2)); //在阵列的开头插入一个或多个元件

    六数组排序
         排序($ ARR); //由小到大忽略键名rsort($ ARR); //下降,忽略键名
         ASORT($ ARR); //由小到大保留键arsort($ ARR); //降保留键名
         ksort($ ARR); //按照排序krsort($ ARR)正序键名; //按照相反的顺序键名
    七,计算阵列
         array_sum($ ARR); //内部数组中的所有元素做求和(数组元素的总和)
         array_merge($ ARR1,$ ARR2); //合并两个或更多个(相同的字符串键名,接着覆盖前,同样的数字

    键,可被附加到后面)

         和array_diff($ ARR1,$ ARR2); //返回结果和array_diff_assoc阵列的差异($ ARR1,$ ARR2,$

    ARR3); //返回结果阵列的差,键被比较
         array_intersect($ ARR1,$ ARR2); //返回交点阵列array_intersect_assoc的结果($ ARR1,$

    ARR2); //返回交点阵列的结果,密钥比较

    八另一个阵列功能
         array_unique($ ARR);//数组中删除重复值的新数组将保留原来的键名
         洗牌($ ARR); //打乱数组的顺序

    PHP的魔术方法和魔术常量
    方法:__构造(),__自毁()方法重载:__()调用,__ callStatic()。
    物业过载:__ get()方法,__集(),__ isset()函数,__未设置(),其中只有四个班,私有,成员属性

    有效保护
    __toString(),__自动加载();
    _set_state(); //自PHP5.1.0当你调用var_export()在派生类中,这种静态方法将被调用。该方法的唯一

    参数是一个数组。

    __clone(); //拷贝经常被用来重新初始化,
    说明:这是指对象引用的副本,这指的是在PHP原始对象引用的方法它被称为“魔术方法”。所有PHP类方法__(

    两个下划线)保留为魔术方法的开始。因此,当你定义一个类的方法,除了神奇的方法,不建议以__为前缀。他

    们命名类方法的时候,除非你想用它的神奇功能,你不能使用这些方法名。

    恒:__ LINK__//文件的当前行号。
             __FILE__//完整路径和文件的文件名。如果在所包含的文件中使用,然后返回到被包括在文件名。
             __DIR__目录//文件。如果包括在该文件中,该目录文件中包含被返回,这相当于目录名(__ FILE__

    )。

             __FUNCTION__//函数名称。由于PHP这个常数返回函数的名称,因为它被宣布5箱子(区分大小写)。

    在PHP 4中该值总是小写。
              __类__// 班级名称。由于PHP本常量返回类名定义为从5(区分大小写)的时间。在PHP 4中该值总是

    小写。
             方法名称__METHOD__//类(PHP5.0.0添加)。此方法返回,因为它被宣布(区分大小写)的名称。
             __NAMESPACE__//当前名称(区分大小写)的命名空间。这个常量在编译时定义(PHP5.3.0新)


    PHP如何获取客户端的IP地址,

    IP地址由$ _SERVER获得什么问题?

    $_ SERVER['REMOTE_ADDR'];阵列通过全球得到

    GETENV(“REMOTE_ADDR”);通过环境变量获得

    比真正的IP地址较少,当客户端使用代理时
    编写可以遍历文件夹下的所有文件和文件夹的功能。

      1功能get_dir_info($ PATH){
      $2扶栏=执行opendir($ PATH); //返回的句柄打开的目录
      3,而(($内容= READDIR($处理))!= =假){
      $4个NEW_DIR= $ PATH DIRECTORY_SEPARATOR$内容..;
      5如果($内容=='..'||$内容==''){
      6继续;
      7}
      8,如果(is_dir($ NEw_dir)){
      9回声“结果目录:”$ NEW_DIR'结果';..
    10 get_dir_info($ NEW_DIR);
    11}其他{
    。 12回声“文件:”$ PATH':'$内容'结果';...
    13}
    14}
    15}
    16 get_dir_info($目录);



    有一个文件mail.log,几个电子邮件地址的内容,用'\ n'换行分隔分开。所选地址sina.com(包括从文件中读

    取,打印出该过滤器)。

    思想一:正则表达式(慢,效率高,不推荐)

    意见2:猫mail.log| grep的sina.com



    PHP缓存技术有哪些? TP是部分或全部缓存?
    1.整版静态缓存,当用户访问直接访问,而不是去PHP服务器解析过程在页面生成的所有静态的HTML页面,静态

    页面
    2.页面缓存的一部分,一个页不经常成为静态缓存的一部分,并且该高速缓存块不经常变化,最后组装的显示
    通过数据请求时,缓存数据的PHP文件和文件3.数据高速缓存ID是对应到下一个ID直接由ID的PHP文件的请求读取
    4.查询缓存和数据缓存基于查询缓存差不多;
    5.常见的缓存技术:Redis的和memcache
    TP个人认为它应该是一个全局高速缓存,因为:TP缓存在本地生成的PHP文件来存放数据库的数据读出

    角色和区别的strlen()和mb_strlen
    在PHP中,strlen的和mb_strlen正在寻求字符串的长度的函数
    PHP内置字符串长度strlen函数不能正确处理的中国字符串,但由它得到的串所占用的字节数。对于中国GB2312

    编码,strlen的获得的值是字符的2倍的数目,和UTF-8编码的中国,也就是(中国文字以UTF-8编码,3个字节)

    的三倍。

    使用mb_strlen功能可以解决这个问题。 mb_strlen用法和strlen的相似,但它具有第二可选参数指定的字符编

    码。例如,得到字符串$ str中长度UTF-8,你可以使用mb_strlen($海峡,“UTF-8”)。如果省略第二个参数

    ,用于内部编码PHP。内部编码可以()函数来通过mb_internal_encoding得到。

    需要注意的是,mb_strlen不是PHP核心功能,你需要之前在php.ini中加载使用php_mbstring.dll确保,确保“

    EXTENS离子= php_mbstring.dll“行存在,并没有被注释掉,否则问题会出现未定义功能。
    为有效地编写一个函数尽可能从URL的一个扩展标准中删除
    $编曲= parse_url('http://www.sina.com.cn/abc/de/fg.php?id=1');

    $结果= PATHINFO($改编['路径']);后续代码var_dump($ ARR);

    后续代码var_dump($结果['扩展']);

    在php.ini中关闭该功能和参数的安全国防部的影响,写出至少六个?
    move_uploaded_file()以EXEC()
    系统()中继()
    popen()完成fopen()函数
    MKDIR()命令rmdir()
    重命名()取消()
    副本()chgrp命令()
    CHOWN()CHMOD()
    触摸()符号链接()
    链接()parse_ini_file()
    set_time_limit()函数的max_execution_time邮件()



    一群猴子的内衬圈,按1,2,...,N连续编号。然后开始从第一个算起,第一个数m只踢它一圈,然后开始从它的

    背面计数,然后计算到m只有在它踢...所以一直走下去,直到直到去年只猴子,猴子被称为国王。它需要的编程

    来模拟该过程,输入M,N,输出数字的最后王。

      1<? PHP
      2功能寰($ allnum,$ TI){
      3 $ ARR=阵列();
      4($ I= 0;$ I<$ allnum;$ I++){
      5$改编[$ i]= $ I;
      6}
      7
      $8个NUMS= 1;
      9时(计数($ ARR)>1){
    10的foreach($改编为$键=> $值){
    11如果($ NUMS== $ TI){
    12未设置($改编[$关键]);
    $13个NUMS= 1;
    14}其他{
    $ 15 NUMS++;
    16}
    17}
    18}
    $19日new_arr= array_values($ ARR);
    20的var_dump($ new_arr[0]+ 1);
    二十一 }
    22寰(10,10);

    差异isset()函数,空()和is_null

    1,没有定义的变量时,is_null()和“参数本身”是不允许作为参数来判断,将报告公告警告错误;

    2,可变空,使用isset首先检查是否存在,则检测该变量的值。该is_null和“参数本身”只是直接检查变量值

    ,是否为空,所以会出现如果没有定义变量的错误!

    3,使用isset():仅在null和undefined,返回false;

    4,空():“”,0,“0”,空,假,阵列(),不确定的,既返回false;

    5,is_null():仅被判刑是否为null,未定义报纸警告;

    相对路径来找到两个文件

      1的getPath('/ A / B / C / D / e.php','/a/d/12/34/c.php');
      2
      3功能的getPath($ A,$ B){
      $4个aarr=爆炸('/',$ A);
      5$巴尔=爆炸('/',$ B);
      $6个计数=计数($巴尔) - 2;
      $7 PATHINFO='';
      8($ i =1;$ I<= $计数;$ I++){
      9如果($ aarr[$ i]== $巴尔[$ i]){
    。 $10个PATHINFO='../';
    11}其他{
    。 $12个PATHINFO= $巴尔[$ i]'/';
    13}
    14}
    15回声$ PATHINFO;
    16}


    的优点和MVC的缺点
    1,MVC的优势
           (1)可以是用于建立和同时使用的多个视图在运行时模型。变化 - 传播机制,确保及时的模型数据变

    化的所有相关意见,让所有相关的视图和控制器实现同步行为。
           (2)可以查看和控制器连接器,允许更换视图和控制器对象的,并且可以或关闭根据需求,即使在对象

    替换的运行动态接通。
           便携性(3)模型。因为模型是独立的图,它可以为独立移植到新的平台的模型。需要做的是新的平台查

    看和修改新控制器上。
           (4)的电位框架。该模型可以基于应用框架,不只是在设计界面设计中使用。
    2,MVC的不足
           (1)增加了系统架构和实现复杂性。对于简单的界面,严格遵循MVC,模具型,视图和控制器分离,会

    增加结构的复杂性,并可能产生过度的更新操作,降低运行效率。
           (2)视图和控制器之间太近的连接。查看和控制器是相互分离的,但真正紧密的成员,视图控制器不存

    在,其应用是很有限的,反之亦然,从而阻碍了他们的独立重用。
           (3)鉴于模型数据访问效率低。根据不同的用户界面模型,视图可能需要多次调用来获得足够的数据来

    显示。不经常访问的数据不必要的改动,这也将损害表现。
           (4)目前,先进的接口工具或配置不支持MVC模式。这些工具,以适应需要和建立的MVC分离的部件的成

    本重建是非常高的,从而在使用中的MVC困难。


    会话cookie和联系和区别(运行机制),会话共享解决问题的办法:
    接触的区别:
         使用session_start()呼叫会话,服务器侧,同时产生会话文件会话ID的哈希值和默认值是PHPSESSID会

    话名称,客户端发送到变量PHPSESSID(会话名称)(默认)是一个128位的散列值。服务器将通过与客户端的

    cookie进行交互,通过存储在服务器计算机的文本文件PHP的内部序列化会话变量的值后,默认情况下客户端的

    变量名是对应的交互是PHPSESSID苦力,即服务器自动发送HTTP头部:头('的Set-Cookie:会话名称()=

    SESSION_ID(); PATH =/');即的setcookie(会话名称(),SESSION_ID());当一页一页地跳跃和新的调

    用在session_start()后,PHP将与存储在会话,数据相关的给定服务器ID检查,如果没有发现,然后创建一个

    新的数据集。
    6,变量本身作为参数,用空()一致,但接受未定义的变量,报纸警告;
    共享方案:
    1:使用数据库来保存会话,使用数据库来存储会话,即使服务器还是去倒没事,会话。

    问题:需要定制方案;所有的数据库读写不是为每个请求小的开销,另一个数据库是一个点,你可以做哈希数据库

    来解决这个问题。

    2:使用的memcached来存储会话,以这种方式与一个类似的数据库,存储器存取性能比数据库好得多。

    问题:需要定制方案,增加了工作量;存储在memcached的数据需要序列化,效率低,关闭电源,或重新启动计算

    机容易受到数据丢失;

    3:一个加密的Cookie,对A服务器登录,用户的浏览器中添加一个加密的Cookie当用户访问乙服务器,检查状态

    ,如果不是,验证cookie是有效的,在重建会话cookie有效的话对B服务器上。简单,高效,减轻了服务器中的

    压力,因为会话数据不存在在服务器磁盘。会不会出现不是简单的阅读会话问题。

    问:需要大量的网络请求。每个请求,客户端必须发送一个cookie服务器会话数据,会话数据不能过大浏览器

    cookie

    小是有极限的。不适合高流量的情况,因为高流量的情况下。



      正则表达式

    在正则表达式匹配中国字符:[\ u4e00-\ u9fa5]
    匹配双字节字符(包括中国字包括):[^ \ x00-\ XFF]
    匹配空白行的正则表达式:\ n[\ S|] *\ r
    HTML标签匹配的正则表达式:。 /<(。*)> * <\ / \1>| <(。*)\/>/
    尾部的空格匹配的正则表达式:(^ \ S *)| (\ S* $)
    匹配的电子邮件地址的正则表达式:\ w+ - * @\ w+( - \ W +[。])* \\ W+( - \ W +[。])*(\ W +[+]

    )。
    网址URL匹配的正则表达式:^ [一-za-Z]+://(\\ W+( - \\ W+)*)(\\(\\ W+( - \\ W+)*)。)*

    (\\ S *?)$?
    比赛账户是有效的(开头字母,允许5-16字节,允许字母数字和下划线):^ [A-ZA-Z] [A-ZA-Z0-9_]{4,15} $
    匹配国内电话号码:? (\ D{3} - |\ D{4} - )(\ d{8}|\ d{7})?
    腾讯匹配QQ号码:^[1-9]*[1-9][0-9]* $



    -------------------- Linux的一部分---------------------

    什么核心文件是有什么用?

      UNIX内核是系统的核心。当你编写出界内存,操作系统将暂停你的进程,而目前的内存状态倒入作进一步分析

    的核心文件。程序员可以通过的核心文件,找出问题所在。它记录了程序挂起详细的状态描述。

    什么是核心转储肺心病Ë平均内存,自卸意味着扔出去,堆出来的。的发展和使用Unix程序,有时莫名其妙向下

    的程序,但是没有暗示(有时提示核心转储)。这时有可以关注一下形状像核心。文档生成的进程ID,该文件的

    操作系统内存内容倒下当程序生成抛出,它可以用作参考调试器。
         所谓的核心转储当程序执行过程中发生异常核心转储,程序意外退出,由操作系统存储在一个名为核心转

    储核心文件的当前内存状态的程序。如何使用路径核心文件GDB -c核心文件[应用程序路径],输入回车后去哪里

    ,可以显示程序歇业什么线,其中的功能。

    为什么没有核心文件产生的呢?生成的核心文件与关系的当前系统环境设置,可以使用下面的语句来设置它,然

    后运行该程序会生成一个核心文件。

    ü限制-c在程序的大致位置产生无限的核心文件是相同的路径,文件名,通常核心。进程ID

    没有核心文件,程序生成一个问题信号是否知道?答:内核好处理的信号。



    除了共享内存文件映射什么办法吗?

    共享内存对象的映射。

    两者有什么区别:

    一个:存储器映射文件是一个文件到存储器映射使应用可以指访问通过存储器为磁盘上的文件,则处理类似于加

    载存储器访问该文件,所以内存文件映射是很适合用于管理大型文件。
    请解释下列10个shell命令的用途
    top、ps、mv、find、df、cat、chmod、chgrp、grep、wc
    top:命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任

    务管理器。
    ps:查看进程
    mv:移动或者更改文件
    find:在子目录中搜索匹配的文件
    df:linux中df命令参数功能:检查文件系统的磁盘空间占用情况。

    cat:把一个或多个文件内容显示到标准输出

    chmod:改变文件属性

    chgrp:改变用户分组

    grep:在文件内进行搜索

    wc:命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。



    Linux文件属性有哪些?(共十位)

    -rw-r--r--那个是权限符号,总共是- --- --- ---这几个位。

    第一个短横处是文件类型识别符:-表示普通文件;c表示字符设备(character);b表示块设备(block);d表

    示目录 (directory);l表示链接文件(link);后面第一个三个连续的短横是用户权限位(User),第二个

    三个连续短横是组权限位 (Group),第三个三个连续短横是其他权限位(Other)。每个权限位有三个权限,r

    (读权限),w(写权限),x(执行权限)。如果每个权限位都 有权限存在,那么满权限的情况就是:-

    rwxrwxrwx;权限为空的情况就是- --- --- ---。

    权限的设定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:

    一个文件aaa具有完全空的权限- --- --- ---。

    chmod u+rw aaa(给用户权限位设置读写权限,其权限表示为:- rw- --- ---)

    chmod g+r aaa(给组设置权限为可读,其权限表示为:- --- r-- ---)

    chmod ugo+rw aaa(给用户,组,其它用户或组设置权限为读写,权限表示为:- rw- rw- rw-)

    如果aaa具有满权限- rwx rwx rwx。

    chmod u-x aaa(去掉用户可执行权限,权限表示为:- rw- rwx rwx)

    如果要给aaa赋予制定权限- rwx r-x r-x,命令为:

    chmod u=rwx,go=rx aaa


    --------------------服务器部分---------------------

    Apache与Nginx的优缺点比较
    1、nginx相对于apache的优点:
    轻量级,比apache 占用更少的内存及资源。高度模块化的设计,编写模块相对简单
    抗并发,nginx 处理请求是异步非阻塞,多个连接(万级别)可以对应一个进程,而apache 则是阻塞型的,是

    同步多进程模型,一个连接对应一个进程,在高并发下nginx 能保持低资源低消耗高性能
    nginx处理静态文件好,Nginx 静态处理性能比 Apache 高 3倍以上

    2、apache 相对于nginx 的优点:
    apache 的rewrite 比nginx 的rewrite 强大 ,模块非常多,基本想到的都可以找到 ,比较稳定,少bug ,

    nginx 的bug 相对较多

    3:原因:这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache

    则使用的是传统的select模型。目前Linux下能够承受高并发访问的 Squid、Memcached都采用的是epoll网络

    I/O模型。 处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。


    cgi 与fastcgi的区别

    cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,web服务器会根据这次请求的内

    容,然后会fork一个新进程来运行外部c程序 (或perl脚本...), 这个进程会把处理完的数据返回给web服务

    器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么

    web服务器又再次fork一个新进程,周而复始的进行。

    后来出现了一种更高级的方式是, web服务器可以内置perl解释器或php解释器。 也就是说这些解释器做成模块

    的方式,web服务器会在启动的时候就启动这些解释器。 当有新的动态请求进来时,web服务器就是自己解析这

    些perl或php脚本,省得重新fork一个进程,效率提高了。

    fastcgi的方式是,web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就

    开启了,而且不会退 出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,

    tcp方式通信),这个进程收到请求后进行处理,把结果返回 给web服务器,最后自己接着等待下一个请求的到

    来,而不是退出。
    fastcgi跟cgi的区别是:
                      在web服务器方面                                                         在对

    数据进行处理的进程方面
    cgi         fork一个新的进程进行处理                                           读取参数,处理数

    据,然后就结束生命期
    fastcgi   用tcp方式跟远程机子上的进程或本地进程建立连接       要开启tcp端口,进入循环,等待数据的

    到来,处理数据


    举个例子: 服务端现在有个10万个字单词, 客户每次会发来一个字符串,问以这个字符串为前缀的单词有多少

    个。 那么可以写一个程序,这个程序会建一棵trie树,然后每次用户请求过来时可以直接到这个trie去查找。

    但是如果以cgi的方式的话,这次请求结束后这课trie也就没了,等下次再启动该进程时,又要新建一棵trie树

    ,这样的效率就太低下了。   而用fastcgi的方式的话,这课trie树在进程启动时建立,以后就可以直接在trie

    树上查询指定的前缀了。


    select, poll和epoll的区别
    select

    select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select

    ()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续

    的读写操作。

    select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩

    不多的优点之一。

    select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以

    通过修改宏定义甚至重新编译内核的方式提升这一限制。

    另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增

    长。同时,由于网络响应时间的延迟 使得大量TCP连接处于非活跃状态,但调用select()会对所有socket进行一

    次线性扫描,所以这也浪费了一定的开销。
    poll

    poll在1986年诞生于System V Release 3,它和select在本质上没有多大差别,但是poll没有最大文件描述符

    数量的限制。

    poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,

    而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。

    另外,select()和poll()将就绪的文件描述符告诉进程后,如果进程没有对其进行IO操作,那么下次调用

    select()和poll() 的时候将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息,这种方式称为水平

    触发(Level Triggered)。
    epoll

    直到Linux2.6才出现了由内核直接支持的实现方法,那就是epoll,它几乎具备了之前所说的一切优点,被公认

    为Linux2.6下性能最好的多路I/O就绪通知方法。

    epoll可以同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它

    只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能

    要更高一些,但是代码实现相当复杂。

    epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实

    际的描述符,而是一个代表 就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件

    描述符即可,这里也使用了内存映射(mmap)技术,这样便彻底省掉了 这些文件描述符在系统调用时复制的开

    销。

    另一个本质的改进在于epoll采用基于事件的就绪通知方式。在select/poll中,进程只有在调用一定的方法后,

    内核才对所有监视的文件描 述符进行扫描,而epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某

    个文件描述符就绪时,内核会采用类似callback的回调 机制,迅速激活这个文件描述符,当进程调用

    epoll_wait()时便得到通知。


    Redis的和memcache差异

         Redis的,不是所有的数据已被存储在存储器中,这是相比Memcached的最大的区别之一。
         Redis的在许多方面的数据库特征,或者说是一个数据库系统,并Memcached的简单ķ/ V缓存。
         它们扩展群集需要做;实施:主从,哈希。
         在100K以上的数据,比Redis的Memcached的性能。
         如果说内存的使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而且如果使用

    Redis的key-value存储散列结构做的,由于其模块化的压缩,其高存储利用率的Memcached的。当然,这和你的

    应用场景和数据特征。
         如果你有这样要求的数据持久性和数据同步,建议您选择Redis的,因为这两个功能不Memcached的有。即

    使你只是想重新启动系统后,升级或缓存数据不丢失,请选择Redis是明智的。
         Redis的内存缓存并在上面写的性能差别不大,看了上面的批量读取性能表现,尤其是上面的内存缓存更强













    上一篇:php常见面试精华题
    下一篇:php实现遍历目录并删除指定文件中指定内容
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

     
     
    技术支持
    在线客服
    点击这里给我发消息
    点击这里给我发消息
    38小屋
    工作时间:
    8:00-18:00
     

    QQ|Archiver|手机版|小黑屋|sltin ( 16010891 )  

    GMT+8, 2018-11-13 06:48 , Processed in 0.043482 second(s), 30 queries , Memcache On.

    Powered by sltin!

    淘宝旺旺: 淘宝旺旺 xie983600849

    快速回复 返回顶部 返回列表