精华内容
下载资源
问答
  • 一些PHP面试题目

    千次阅读 2013-09-24 00:07:19
    生活总是要往前看,等待了一天也没有阿里的面试通知,心情是相当灰暗,但是生活总要继续,还是要向前看,做几道PHP的面试题目,毕竟我的主要开发语言还是PHP 题目 1、一个包含中英文的字符串如何获得它的自然...

    前言

    生活总是要往前看,等待了一天也没有阿里的面试通知,心情是相当灰暗,但是生活总要继续,还是要向前看,做几道PHP的面试题目,毕竟我的主要开发语言还是PHP

    题目

    1、一个包含中英文的字符串如何获得它的自然长度

    需要考虑汉字的字符编码,注意UTF-8中一个汉字占3个字节

    <?php
    /**
     * 获取中英文混排的字符串的长度
     */
    
    $str = "还没等到阿里的面试通知123456";
    
    $nor_len = mb_strlen($str, "utf8");
    
    echo $nor_len."<br>";
    
    $len = strlen($str);
    
    echo $len."<br>";


    2、问一问什么是ORM,有时候会问这个词的英文全称是什么,问问ta对于ORM有什么个人的看法

    对象关系映射(Object Relationl Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。本质上是将数据从一种形式转换到另一种形式


    3、问一问假如ta要自己去实现一个framework,ta会怎么设计

    这里我直接谈一下自己对MVC的理解,我都是用原生php开发,没有用过框架



    所以就算不用框架,自己代码里也可以做到mvc分层


    4、问一问framework设计里的url dispatcher他会怎么考虑

    还是MVC的问题,可以通过url进行设计:http://example.com/<controler>/<action>/<id>/, 还可以通过nginx的rewrite进行跳转


    5、如何访问会话变量(session)?
    A.通过$_GET
    B.通过$_POST
    C.通过$_REQUEST
    D.通过全局变量
    E.以上都不对

    E,解释:session变量只能通过$_SESSION数组获得


    6、哪个函数能让服务器输出如下header?
    set-Cookie: foo=bar;

    解答:setcookie('foo', 'bar', time() + 3600);


    7、在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
    A.通过HTTP_REMOTE_COOKIE访问
    B.不可能
    C.在调用setcookie()时设置一个不同的域名
    D.向浏览器发送额外的请求
    E.使用Javascript,把cookie包含在URL中发送

    B,解释:cookie不能跨域访问


    8、在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
    A.这两个是明文传输,之后的信息加密传输
    B.加密传输
    C.URL明文传输,查询字串加密传输
    D.URL加密传输,查询字串明文传输
    E.为确保加密,查询字串将转换为header,夹在POST信息中传输

    B,解释:ssl加密


    9、当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
    A.它们组成一个数组,存储在超级全局变量数组中
    B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
    C.第二个元素将覆盖第一个元素
    D.第二个元素将自动被重命名
    E.PHP输出一个警告

    C

    10、如何把数组存储在cookie里?
    A.给cookie名添加一对方括号[]
    B.使用implode函数
    C.不可能,因为有容量限制
    D.使用serialize函数
    E.给cookie名添加ARRAY关键词

    D,解释:序列化,serialize序列化数组即可,采用implode会丢失关联数组的key值


    11、以下脚本输出什么?(E)
    <?php
    ob_start();
    for ($i = 0; $i < 10; $i++) {
    echo $i;
    }
    $output = ob_get_contents();
    ob_end_clean();
    echo $output;
    ?>
    A.12345678910
    B.1234567890
    C.0123456789
    D.什么都没有
    E.一个提示

    C,解释:ob_start打开输出缓存,将输出字符保存在缓冲区里。通过ob_get_contents()获取输出的字符串


    12、默认情况下,PHP把会话(session)数据存储在______里。
    A.文件系统
    B.数据库
    C.虚拟内容
    D.共享内存
    E.以上都不是

    A,解释:默认存在文件系统里,为了分布式,一般都放在Nosql数据库里,例如nginx+fastcgi+php5_fpm,修改fpm的php.ini session.save_path=tcp://redisip:redisport?auth=redispasswd


    14、假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
    A.1440秒后
    B.在session.gc_maxlifetime设置的时间过了后
    C.除非手动删除,否则永不过期
    D.除非浏览器重启,否则永不过期
    E.以上都不对

    B或者E,解释:虽然session有过期机制,默认session.gc_maxlifetime是1440秒,但是必须启动gc机制才行,gc机制的启动是有概率的,session分别使用session.gc_probability和session.gc_divisor来确定session的gc概率


    15、哪个函数能把换行转换成HTML标签<br />?

    nl2br


    16、index.php脚本如何访问表单元素email的值?(双选)
    <form action="index.php" method="post">
    <input type="text" name="email"/>
    </form>
    A.$_GET[‘email’]
    B.$_POST[‘email’]
    C.$_SESSION[‘text’]
    D.$_REQUEST[‘email’]
    E.$_POST[‘text’]

    BD,解释:提交方法为POST,所以只能从$_POST和$_REQUEST两个超级全局变量数组取得值


    17、如果不给cookie设置过期时间会怎么样?
    A.立刻过期
    B.永不过期
    C.cookie无法设置
    D.在浏览器会话结束时过期
    E.只在脚本没有产生服务器端session的情况下过期

    D,解释:cookie跟session没有半毛钱关系,唯一的作用可以用cookie保存session的会话id

    18、以下脚本将如何影响$s字符串?(双选)
    <?php
    $s = '<p>Hello</p>';
    $ss = htmlentities ($s);
    echo $s;
    ?>
    A.尖括号<>会被转换成HTML标记,因此字符串将变长
    B.没有变化
    C.在浏览器上打印该字符串时,尖括号是可见的
    D.在浏览器上打印该字符串时,尖括号及其内容将被识别为HTML标签,因此不可见
    E.由于调用了htmlentities(),字符串会被销毁

    BD,解释:htmlspecialchars转义$s后赋值给$ss,输出的是$ss









    展开全文
  • PHP开发面试题目总结

    千次阅读 2016-08-18 11:47:50
    PHP开发常见面试题目

    PHP开发常见面试题目

    ==========================================PHP===================================================

    1:请用最简单的语言告诉我PHP是什么?
    PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。

    2:什么是MVC?
    MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。
    Model:数据信息存取层。
    View:view层负责将应用的数据以特定的方式展现在界面上。
    Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

    3:PHP支持多继承吗?
    不可以。PHP类只能继承一个父类,并用关键字“extends”标识。
    被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent:: 来访问父类中的方法或属性。
    当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。
    Final 关键字
    PHP 5新增的一个关键字,如果父类中的方法被声明为 final,则子类无法覆盖该方法。同样如果一个类被声明为 final,则不能被继承。(需要注意的是: 属性不能被定义为 final,只有类和方法才能被定义为 final。)

    4:php中对数组序列化和反序列化的函数分别是 serialize 和 unserialize ;

    5:urlencode和rawurlencode的区别

    urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的,唯一的不同是对空格的处理,urlencode处理成“+”,rawurlencode处理成“%20”。

    6:php中过滤HTML的函数是strip_tags,转义的函数是htmlspecialchars

    7:写出用正则把HTML中的js脚本过滤掉

    preg_replace(‘/<script.*?//script>/is’,”,$htmlcode);

    8:写出三个调用系统命令的函数:exec、system、passthru

    9:php中判断变量是否被设置是函数是_isset_;判断是否为空的是empty;

    empty、 isset、is_null的区别:

    empty: 如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
    isset: 如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。

    is_null: 检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】

    10:error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别_________;

    前者是设置错误显示等级,E_ALL代表提示全部错误(包括notice,warnning和error)。后者是设置让php显示错误,在关于错误显示控制中,后者的优先级最高。

    11:PHP写出显示客户端IP的预定义变量$_SERVER['REMOTE_ADDR'];

    提供来路url的是$_SERVER['HTTP_REFERER']

    $_SERVER['REMOTE_HOST'] //当前用户主机名;

    $_SERVER['PHP_SELF']//正在执行脚本的文件名 

    $_SERVER['REQUEST_METHOD']//访问页面时的请求方法 

    $_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。 

    $_SERVER['SERVER_PORT'] #服务器所使用的端口 

    12:php把utf-8转换成gbk的函数是iconv(‘UTF-8′,’GBK’,$str);

    13:php中类的静态方法怎么使用?

    在类外部,使用:类名后面跟双冒号,再后面是方法名,类似classname::staticFucntion(),由于静态方法不属于某个对象,而是隶属于整个类,所以要用类名来调用它。

    14:$a = 1; $b = & $a;

    unset($a),$b是否还是1,为什么?
    unset($b),$a是否还是1,为什么?

    都等于1。

    在php中,引用赋值不同于指针的感念,他只是将另一个变量名指向了某个内存地址。此题中:$b = &$a;只是将$b这个名字也指向了$a变量所指向的内存地址。unset时只是释放了这个名字的指向,并没有释放内存中的值。另一方面讲unset($a),其实也并未真正立刻释放内存中的值,也只是释放了这个名字的指向而已,该函数只有在变量值所占空间超过256字节长的时候才会释放内存,并且只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放。

    15:写一个判断手机号码(号段为130-139,150-159,170-179,180-189)是否正确的正则表达式。
    /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})&/

    16:请问PHP中echo和print有什么区别?
    echo和print的本质区别在于:echo用来输出字符串,显示多个值的时候可以用逗号隔开。只支持基本类型,print不仅可以打印字符串值,而且可以打印函数的返回值。

    17:请问GET和POST方法有什么区别?
    我们在网页上填写的表单信息都可以通过这两个方法将数据传递到服务器上,当我们使用GET方法是,所有的信息都会出现在URL地址中,并且使用GET方法最多只能传递1024个字符,所以如果在传输量小或者安全性不那么重要的情况下可以使用GET方法。说到POST方法,最多可以传输2MB字节的数据,而且可以根据需要调节。
    18:PHP中获取图像尺寸大小的方法是什么?
    getimagesize () 获取图片的尺寸
    Imagesx () 获取图片的宽度
    Imagesy () 获取图片的高度
    19:PHP中的PEAR是什么?
    PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库。
    20:如何用PHP和MySQL上传视频?
    我们可以在数据库中存放视频的地址,而不需要将真正的视频数据存在数据库中。可以将视频数据存放在服务器的指定文件夹下,上传的默认大小是2MB,但是我们也可以在php.ini文件中修改max_file size选项来改变。
    21:PHP中的错误类型有哪些?
    PHP中遇到的错误类型大致有3类。
    提示(notice):这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。
    警告(warning):这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。
    错误(error):这是真正的严重错误,比如访问不存在的PHP类。
    22:如何在PHP中定义常量?
    PHP中使用Define () 来定义常量。
    define (“Newconstant”, 30); echo constant("Newconstant"); //constant返回一个常量的值
    23:在网站开发中需要传递变量值时,不能使用session、cookie、application,你有几种方法

    Session id的传递主要有四个方法:

    1、 通过cookie。

    2、 设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。

    3、 手动通过url或隐藏表单传值。

    4、 用文件或数据库方式传递,在通过其他key对应取值。

    以上的2和3其实使用的是同样的方法,只是途径不一样。

    通过以上的分析我们不难看出,通过cookie传递sessionid,将session存储于memcache服务器中是为一个比较合理的选择。当出现跨域的情况是,可以使用p3p跨域设置cookie。而当客户端禁用cookie的情况下,可以设置php.ini,通过url自动传递session id。

    24:概述反射和序列化

    序列化:

    serialize() 把变量和它们的值编码成文本形式

    unserialize() 恢复原先变量

    25:session喜欢丢值且占用内存,Cookie不安全,请问用什么办法代替这两种原始的方法

    redis 或者 memcache。

    26:反射
    反射是在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。
    其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
    php反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。
          反射api是php内建的oop技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些oop扩展被称为反射。
          通过ReflectionClass,我们可以得到Person类的以下信息:
         1)常量 Contants
         2)属性 Property Names
         3)方法 Method Names静态
         4)属性 Static Properties
         5)命名空间 Namespace
         6)Person类是否为final或者abstract 

    27:请使用正则写一个函数验证电子邮件的格式是否正确?
    preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);


    28:面向对象
    三大特性:封装、继承、多态(方法重写)。
    抽象类:abstract,至少有一个方法是抽象方法,不能被实例化,为子类定义公共接口。
    接口:interface,解决php的单继承问题,所有方法都是public访问权限的抽象方法,不能声明变量只能声明常量。
    继承一个类的同时实现多个接口

    class A  extends B implements 接口1,接口2...,接口n(){
        //实现所有接口中的方法
    }
    29:进程和线程定义,区别和联系。
       进程的状态:运行run、就绪ready、等待wait

    30:Include require include_once require_once 的区别.
    处理失败方式不同:
    require 失败时会产生一个致命级别错误,并停止程序运行。
    include 失败时只产生一个警告级别错误,程序继续运行。
    include_once/require_once和include/require 处理错误方式一样,
    唯一区别在于当所包含的文件代码已经存在时候,不在包含。

    31:HEREDOC介绍
    一种定义字符串的方法。
    结构:
    <<<。在该提示符后面,要定义个标识符(单独一行),
    然后是一个新行。接下来是字符串 本身,
    最后要用前面定义的标识符作为结束标志(单独一行)
    注意:
    标识符的命名也要像其它标签一样遵守PHP的规则:
    只能包含字母、数字和下划线,并且必须以字母和下划线作为开头

    32:写出一些php魔幻(术)方法
    __construct() 实例化类实自动调用
    ——destruct() 类对象使用结束时自动调用
    __set() 在给未定义的属性赋值时调用
    __get() 调用未定义的属性时调用哦
    __isset() 使用isset()或empty()函数的时候调用
    __unset() 使用unset()函数的时候调用
    __sleep() 使用serialize序列化的时候调用
    __wakeup() 使用unserialize()反序列化的时候调用
    __call() 调用一个不存在的方法时调用
    __callStatic() 调用一个不存在的静态方法时调用
    __toString() 把对象转换Wie字符串的是调用,比如echo
    __clone() 当使用clone复制一个对象时候调用。
    __invoke() 当尝试把对象当方法调用时调用。
    __set_state() 当使用var_export()函数时候调用。接受一个数组参数。

    33:一些编译php时的configure 参数
    –prefix=/usr/local/php php安装目录
    –with-config-file-path=/usr/local/php/etc 指定php.ini位置
    –with-mysql=/usr/local/mysql mysql安装目录,对mysql的支持
    –with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目录,优化支持
    –enable-safe-mode 打开安全模式
    –enable-ftp 打开ftp的支持
    –enable-zip 打开对zip的支持
    –with-bz2 打开对bz2文件的支持
    –with-jpeg-dir 打开对jpeg图片的支持
    –with-png-dir 打开对png图片的支持
    –with-freetype-dir 打开对freetype字体库的支持
    –without-iconv关闭iconv函数,种字符集间的转换
    –with-libxml-dir 打开libxml2库的支持
    –with-xmlrpc 打开xml-rpc的c语言
    –with-zlib-dir 打开zlib库的支持
    –with-gd 打开gd库的支持

    34:向php传入参数的三种方法。
    方法一 使用$argc $argv
    方法二 使用getopt函数()
    方法三 提示用户输入,然后获取输入的参数。有点像C语言

    35:error_reporting 等调试函数使用
    error_reporting() 函数能够在运行时设置php.ini中 error_reporting 指令。
    所以可以再程序中随时调节显示的错误级别。
    使用此函数时 display_errors必须是打开状态。

    36:写一段上传文件的代码。
    upload.html

    <span style="white-space:pre">	</span><form enctype="multipart/form-data" method="POST" action="upload.php">
    	Send this file: <input name="name" type="file" />
    	<input type="submit" value="Send File" />
    	</form>
    upload.php
    <span style="white-space:pre">	</span>$uploads_dir = '/uploads';
    	foreach ($_FILES["error"] as $key => $error) {
    		if ($error == UPLOAD_ERR_OK) {
    			$tmp_name = $_FILES["tmp_name"][$key];
    			$name = $_FILES["name"][$key];
    			move_uploaded_file($tmp_name, "$uploads_dir/$name");
    		}
    	}
    
    37:写代码来解决多进程/线程同时读写一个文件的问题。
    PHP是不支持多线程的,可以使用php的flock加锁函数实现。
    <span style="white-space:pre">	</span>$fp = fopen("/tmp/lock.txt", "w+");
    	if (flock($fp, LOCK_EX)) { // 进行排它型锁定
    		fwrite($fp, "Write something here\n");
    		flock($fp, LOCK_UN); // 释放锁定
    	} else {
    		echo "Couldn't lock the file !";
    	}
    	fclose($fp);
    38:$_POST/$HTTP_RAW_POST_DATA和php://input的区别
    $_POST是获取表单提交的数据,media type是"applicaiton/x-www-form-urlencoded"。字段名和值都进行了编码,每个key-value队使用‘$’分隔,key和value使用‘=’分开,其他特殊字符都会被urlencode进行编码
    $HTTP_RAW_POST_DATA:可以获取原始的POST数据,但需要在php.ini中设置开启,并且不支持enctype='multipart/form-data'方式传递的数据
    php://input:可以获取POST数据,但是比$HTTP_RAW_POST_DATA跟少的消耗内存,也不支持‘multipart/form-data’

    39:PHP常用的设计模式:
    1.简单工厂模式
    ##工厂模式是一种类,具有为民创建对象的某些方法。可以用工厂类创建对象而不直接使用new方法
    特点:
    1.抽象基类:类中定义抽象一些方法,用以在子类中实现
    2.继承自抽象基类的子类:实现基类中的抽象方法
    3.工厂类:用以实例化所有相对应的子类
    代码实例;

    <span style="white-space:pre">	</span>/**
    		     * 定义个抽象的类,让子类去继承实现它
    		     */
    			abstract class Operation{
    		        //抽象方法不能包含函数体
    		        abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数
    		    }	
    		    /**
    		      * 加法类
    		    */
    		    class OperationAdd extends Operation {
    		        public function getValue($num1,$num2){
    		            return $num1+$num2;
    		        }
    		    }
    		    /**
    		      * 减法类
    		    */
    		    class OperationSub extends Operation {
    		        public function getValue($num1,$num2){
    		            return $num1-$num2;
    		        }
    		    }
    		    /**
    		     * 工程类,主要用来创建对象
    		     * 功能:根据输入的运算符号,工厂就能实例化出合适的对象
    		     */
    		    class Factory{
    		        public static function createObj($operate){
    		            switch ($operate){
    		                case '+':
    		                    return new OperationAdd();
    		                    break;
    		                case '-':
    		                    return new OperationSub();
    		                    break;
    		                case '*':
    		                    return new OperationSub();
    		                    break;
    		                case '/':
    		                    return new OperationDiv();
    		                    break;
    		            }
    		        }
    		    }
    		    $test=Factory::createObj('/');
    		    $result=$test->getValue(23,0);
    		    echo $result;
    2.单例模式--数据库应用
    特点:
    a是某个类只能有一个实例;
    b是它必须自行创建这个实例;
    c是它必须自行向整个系统提供这个实例
    为什么要使用PHP单例模式:
    1. php的应用主要在于数据库应用, 一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的new 操作消耗的资源,还可以减少数据库连接这样就不容易出现 too many connections情况。
    2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。
    3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。
    3.观察者模式
    观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依 赖于它的对象都得到通知并自动刷新。
    4.策略模式
    在此模式中,算法是从复杂类提取的,因而可以方便地替换.例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择。思考一下搜索引擎的几个部分 —— 一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序。在复杂的示例中,这些部分都在同一个类中。通过使用策略模式,您可将排列部分放入另一个类中,以便更改页排列的方式,而不影响搜索引擎的其余代码。
    此模式非常适合复杂数据管理系统或数据处理系统,二者在数据筛选、搜索或处理的方式方面需要较高的灵活性
    5.命令链模式


    40:抽象类和接口:
    一、 抽象类abstract class
    1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法的类(在类方法 function 关键字前加了 abstract 关键字)
    2.抽象类不能被直接实例化。抽象类中只定义(或部分实现)子类需要的方法。子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。
    3.如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化。

    <span style="white-space:pre">	</span>abstract class A{
    			    /** 抽象类中可以定义变量 */
    			    protected $value1 = 0;
    			    private $value2 = 1;
    			    public $value3 = 2;
    			    /** 也可以定义非抽象方法 */
    			    public function my_print(){
    			        echo "hello,world/n";
    			    }
    			    /**
    			     * 大多数情况下,抽象类至少含有一个抽象方法。抽象方法用abstract关键字声明,其中不能有具体内容。
    			     * 可以像声明普通类方法那样声明抽象方法,但是要以分号而不是方法体结束。也就是说抽象方法在抽象类中不能被实现,也就是没有函数体“{some codes}”。
    			     */
    			    abstract protected function abstract_func1();
    			    abstract protected function abstract_func2();
    			}
    			abstract class B extends A{
    			    public function abstract_func1(){
    			       echo "implement the abstract_func1 in class A/n";
    			    }
    			    /** 这么写在zend studio 8中会报错*/
    			    //abstract protected function abstract_func2();
    			}
    			class C extends B{
    			    public function abstract_func2(){
    			       echo "implement the abstract_func2 in class A/n";
    			    }
    			}
    41:以下输出结果为7,因为=是赋值的意思
            $z=2;
    	$x=$z+$z+$z=3;
    	echo $x;
    42:请介绍Session的原理,大型网站中Session方面应注意什么?
    PHP SESSION原理:
    session是在服务器端保持用户会话数据的一种方法,对应的cookie是 在客户端保持用户数据。
    首先要将客户端和服务器端建立一一联系,每个客户 端都得有一个唯一标识,这样服务器才能识别出来。建议唯一标识的方法有两种:cookie或者通过GET方式指定。默认配置的PHP使用session的 时会建立一个名叫”PHPSESSID”的cookie(可以通过php.ini修改session.name值指定),如果客户端禁用cookie,你 也可以指定通过GET方式把session id传到服务器(修改php.ini中session.use_trans_sid等参数)。
    session是保存的服务端的,在服务器端session.save_path目录会发现很多类似sess_vv9lpgf0nmkurgvkba1vbvj915这样的文件,这个就是session id "vv9lpgf0nmkurgvkba1vbvj915"对应的数据。客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入。

    session影响系统性能:

    session 在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,PHP支持 session目录hash,我们可以通过修改php.ini中session.save_path = “2;/path/to/session/dir”,那么session将存储在两级子目录中,每个目录有16个子目录[0~f],不过好像PHP session不支持创建目录,你需要事先把那么些目录创建好 。
    session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差
    存储session的方式有很多种,可以通过php -i|grep “Registered save handlers”查看。比如memcached,mysql等
    session的同步
    1.如果存储在memcached或者MySQL中比较容易,
    2.如果是文件形式的,你可以用NFS统一存储。
    3.通过加密的cookie来实现
    4.在负载均衡那一层保持会话,把访问者绑定在某个服务器上,他的所有访问都在那个服务器上就不需要session同步了,这些都是运维层面的东西。

    43:禁用cookie的session使用方案
    1.url传值,
    2.通过隐藏表单提交,
    3.配置php.ini将session.use_trans_sid设为1,
    4.用文件或数据库等形式保存session_id,在跨页过程中手动调用


    44:PHP缓存技术有哪些?
    1、全页面静态化缓存。也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms;
    Ob_start()
    ******要运行的代码*******
    $content = Ob_get_contents();
    ****将缓存内容写入html文件*****
    Ob_end_clean();
    2、页面部分缓存
    该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存(ESI技术,请baidu,此处不详讲)。
    该种方式可以用于如商城中的商品页;
    3、数据缓存
    顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类;
    Ecmall商城系统里面就用了这种方式;
    4、查询缓存
    其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示;
    按时间变更进行缓存
    其实,这一条不是真正的缓存方式;上面的2、3、4的缓存技术一般都用到了时间变更判断;就是对于缓存文件您需要设一个有效时间,在这个有效时间内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设置2个小时更新一次;
    5、按内容变更进行缓存
    这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件;
    比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;
    当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际上访问的是一个静态页面,而不需要再去访问数据库;
    试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了;
    6、内存式缓存
    提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
    它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是 key–>value方式;

            <?php 
    	     $memcachehost = '192.168.6.191';
    	     $memcacheport = 11211;
    	     $memcachelife = 60;
    	     $memcache = new Memcache;
    	     $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
    	     $memcache->set('key','缓存的内容');
    	     $get = $memcache->get($key);       //获取信息
    	?>
    7、apache缓存模块
    apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
    安装apache时:./configure –enable-cache –enable-disk-cache –enable-mem-cache
    8、php APC缓存扩展
    Php有一个APC缓存扩展,windows下面为php_apc.dll,需要先加载这个模块,然后是在php.ini里面进行配置:
         [apc] 
         extension=php_apc.dll 
         apc.rfc1867 = on 
         upload_max_filesize = 100M 
         post_max_size = 100M 
         apc.max_file_size = 200M 
         upload_max_filesize = 1000M 
         post_max_size = 1000M 
         max_execution_time = 600 ;   每个PHP页面运行的最大时间值(秒),默认30秒 
         max_input_time = 600 ;       每个PHP页面接收数据所需的最大时间,默认60 
         memory_limit = 128M ;       每个PHP页面所吃掉的最大内存,默认8M
        9、Opcode缓存
        首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行时可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
    比较知名的是XCache、Turck MM Cache、PHP Accelerator等。

    45:返回由对象属性组成的关联数组:get_object_vars

    class object1 {
        private $a = NULL;
        public  $b = 123;
         public  $c = 'public';
          private $d = 'private';
           static  $e = 'static';
    public function test(){
        echo "<pre>";
        print_r(get_object_vars($this));
        echo "<pre>";
         }
    }
        $test = new object1();
          //print_r(get_object_vars($test));
           $test->test();
     ?>
    
    输出:
    Array ( 
    [a] =>
    [b] => 123 
    [c] => public 
    [d] => private
     )
    
    如果把//print_r(get_object_vars($test));的注释打开的话,则输出:
    Array (
    [b] => 123 
    [c] => public
     ) 
    也就是说在外面只会弹出public的非静态的属性;

    46.php函数:从数组中取出一段的函数是 array_slice();

    dirname() 函数返回路径中的目录部分。

    basename()返回路径中的文件名部分。

    realpath()返回绝对路径名。

    file_exists()检查文件或目录是否存在。

    file_get_contents()将文件读入字符串。

    flock()锁定或释放文件。

    fopen()打开一个文件或 URL。

    is_dir()判断指定的文件名是否是一个目录。

    is_file()判断指定文件是否为常规的文件。

    mkdir()创建目录。

    pathinfo()返回关于文件路径的信息。

    func_get_args() 返回包含所有参数的数组 


    变量的类型转换和判断类型方法。

    3:php运算符优先级,一般是写出运算符的运算结果。
    4:PHP中函数传参,闭包,判断输出的echo,print是不是函数等。
    5:PHP数组,数组函数,数组遍历,预定义数组(面试必出)。
    6:PHP面向对象,魔术方法,封装、继承、多态。设计模式,包括(单利、工厂、迭代器、装饰、命令、策略)。
    7:正则表达式,每个标号含义,邮箱、网址、标签匹配,正则函数。
    8:PHP异常处理(级别,错误日志,控制错误输出)。
    9:PHP时间函数,日期计算函数。
    10:文件系统,记录日志、目录、文件的遍历、上传、多方法得到文件扩展名、文件引用方式、引用函数区别。(面试必出)。
    11:会话控制,主要说原理。session与cookie在分布式应用中出现问题的解决方案。
    12:PHP模板引擎,常用模板引擎特点,MVC好与不好的地方。
    13:PHP安全处理,过滤函数。
    14:XML的使用。
    15:PHP字符串的处理,包括转义(安全)、编码、截取、定位、与数组间的转换、处理函数等。(面试必出)。
    16:Socket编程,各种协议,head头,curl参数含义。
    17:网络状态码含义,常用(204,304, 404, 504,502)。
    18:Apache配置文件,PHP配置文件,各个含义字段的含义。

    =================================================PHP写函数===========================

    1.请实现一个函数,输入1-1亿之间的任意整数,返回其中文。

    <?php
    function num2Chinese($num){
    	$char= array('零','一','二','三','四','五','六','七','八','九');
    	$unit    = array('','十','百','千','','万','亿','兆');
    	$str = strrev($num);
        for($i = 0,$c = strlen($str);$i < $c;$i++) {
            $out[$i] = $char[$str[$i]];
            $out[$i] .= $str[$i] != '0'? $unit[$i%4] : '';
                    if($i>1 and $str[$i]+$str[$i-1] == 0){
                    $out[$i] = '';
                }
                    if($i%4 == 0){
                    $out[$i] .= $unit[4+floor($i/4)];
                }
        }
        $retval = join('',array_reverse($out)) ;
        return $retval;
    }
    echo num2Chinese(20160348);
    ?><?php
    //3.写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。 
    	url dir/upload.image.jpg找出jpg或者.jpg
    	1.return strrchr($filename,"."));	
    		strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
    	2.return substr($filename,strrpos($filname,"."));
    		strrpos() 函数查找字符串在另一字符串中最后一次出现的位置。
    		substr(string,start,length) 函数返回字符串的一部分。
    	3.return array_pop(explode(".",$filename));
    	4.$p=pathinfo($filename); return $p['extension'];
    	5. return strrev(substr(strrev($filanme),o,strpos(strrev($filename),".")));
    ?>

    ========================HTML============================
    1.如下HTML:<img title=’aaaa’ sina_title=’bbbb’ id=’img1′>,
    用js取得 document.getElementById(‘img1′); 方法取得该对象;
    用 document.getElementById(‘img1′).getAttribute(‘title’); 属性取得属性title的属性值;
    用 document.getElementById(‘img1′).getAttribute(‘sina_title’); 方法取得属性sina_title的属性值;

    2.
    ===========================MySQL=============================
    1:mysql has gone away的原因是什么?
    般情况下是由于max_allowed_packet设置的值过小导致的,max_allowed_packet用来控制缓冲区的包大小,有时在导入数据的时候,此值过小就容易造成缓冲区容量不够。将my.ini或my.cnf中的此值设置大一些即可解决。
    还有一种可能是连接数据库时使用了单例模式,多次操作数据库但都使用的是同一个连接,由于mysql处理每个线程也是队列模式,当前一个操作还没执行完毕并且间隔小于wait_timeout所设置的值时就容易出现此问题,解决办法是将wait_timeout的值设置大一些。
    2:mysql优化方式
    MYSQL 优化常用方法:
    1、选取最适用的字段属性。
    MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。
    2、使用连接(JOIN)来代替子查询(Sub-Queries)。
    MySQL从4.1开始支持SQL的子查询。子查询可以把一个结果作为过滤条件用在另一个查询中,如:DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) ,使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代,例如SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) ,如果使用连接(JOIN)来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. CustomerID WHERE salesinfo.CustomerID IS NULL。 连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。 
    3、使用联合(UNION)来代替手动创建的临时表 
    MySQL从4.0的版本开始支持UNION查询,它可以把需要使用临时表的两条或更多的SELECT查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用UNION来创建查询的时候,我们只需要用UNION作为关键字把多个SELECT语句连接起来就可以了,要注意的是所有SELECT语句中的字段数目要想同。示例:
    SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM author UNION SELECT Name, Supplier FROM product 
    4、事务 
    事务可以保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。 示例:
    <span style="white-space:pre">	</span>BEGIN; 
    		INSERT INTO salesinfo SET CustomerID=14; 
    		UPDATE inventory SET Quantity=11 
    		WHERE item='book'; 
    	COMMIT; 
    事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。 
    5、锁定表 
    尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。其实,有些情况下我们可以通过锁定表的方法来获得更好的性能。示例:
    <span style="white-space:pre">	</span>LOCK TABLE inventory WRITE 
    		SELECT Quantity FROM inventory 
    		WHEREItem='book'; 
    		... 
    		UPDATE inventory SET Quantity=11 
    		WHEREItem='book'; 
    	UNLOCK TABLES 
    6、使用外键 (FOREIGN KEY)
    锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。如果要在MySQL中使用外键,一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型。
    7、使用索引 
    索引是提高数据库性能的常用方法,尤其是在查询语句当中包含有MAX()、MIN()和ORDERBY这些命令的时候,性能提高更为明显。一般说来,索引应建立在那些将用于JOIN、WHERE判断和ORDER BY排序的字段上。
    8、优化的查询语句 
    首先,最好是在相同类型的字段间进行比较的操作。如不能将一个建有索引的INT字段和BIGINT字段进行比较;但是作为特殊的情况,在CHAR类型的字段和 VARCHAR类型字段的字段大小相同的时候,可以将它们进行比较。
    其次,在建有索引的字段上尽量不要使用函数进行操作。 例如,在一个DATE类型的字段上使用YEAE()函数时,将会使索引不能发挥应有的作用。所以,下面的两个查询虽然返回的结果一样,但后者要比前者快得多。
    <span style="white-space:pre">	</span>SELECT * FROM order WHERE YEAR(OrderDate)<2001; 
    	SELECT * FROM order WHERE OrderDate<"2001-01-01";
    第三,在搜索字符型字段时,我们有时会使用 LIKE 关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。例如:
    SELECT * FROM books 
    WHERE name like "MySQL%" 
    但是如果换用下面的查询,返回的结果一样,但速度就要快上很多: 
    SELECT * FROM books 
    WHERE name>="MySQL"and name<"MySQM" 
    最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。 
    3:MYSQL数据表类型有哪些?
    MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等
           MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
           InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。
           存储引擎MyISAM和InnoDB的区别:
    一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。
    二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及设计到安全性就高的应用
    三、InnoDB支持外键,MyISAM不支持
    四、MyISAM是默认引擎,InnoDB需要指定
    五、InnoDB不支持FULLTEXT类型的索引
    六、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表
    七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引
    八、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表
    九、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'
    4:PHP中防sql注入方法
        mysql_escape_string(strip_tags($arr["$val"]));
    5:mysql数据库,一天五万条以上的增量,预计运维三年怎么优化
    a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
    b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
    c. mysql库主从读写分离。
    d. 找规律分表,减少单表中的数据量提高查询速度。
    e。添加缓存机制,比如memcached,apc等。
    f. 不经常改动的页面,生成静态页面。
    g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
    6:(mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
    int : 数值类型
    char : 固定长度字符串类型
    varchar : 可变长度字符串类型
    datetime : 时期时间类型
    text : 文本类型
    varchar和char有什么区别:
    a. char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。
    而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。
    b. char 固定长度,所以在处理速度上要比varchar快速很多,但是浪费存储空间,
    所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。
    7:Mysql 的存储引擎,myisam和innodb的区别。
    a. MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.
    b. MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快.
    c. InnoDB不支持FULLTEXT类型的索引.
    d. InnoDB 中不保存表的具体行数,也就是说,
    执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,
    但是MyISAM只要简单的读出保存好的行数即可.
    e. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
    f. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
    g. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,
    但是对于使用的额外的InnoDB特性(例如外键)的表不适用.
    h. MyISAM支持表锁,InnoDB支持行锁。
    8:


    =============================LINUX======================
    1:Linux服务器上有一个访问日志文件,格式如下:
    172.17.0.31--[17/Mar/2016:15:59:40 +0800] "POST /User/get HTTP/1.1" 200 1209 "-" "order" "-" 17
    其中,order字段记录了调用方的系统名称,最后的17为本次查询的响应时间,使用SHEEL或者PHP来统计调用方为order的所有接口的平均响应时间。
    awk '$9 ~ /order/ {++S[$11]}END{for (a in S) print (sum+=S[a])/a}' file

    ============================HTTP======================
    1:长连接和短连接的使用
    长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。
    长连接通常就是: 
           连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接; 
            长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,
            例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
    短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接, 
    操作步骤是: 
           连接→数据传输→关闭连接;
       例如:一般银行都使用短连接。  WEB网站的http服务一般都用短链接
    2:LAMP与LNMP架构的区别及其具体的选择说明
    LAMP和LNMP最主要的区别在于:
    一个使用的是Apache,一个使用的是Nginx。
    Apache是世界是用排名第一的Web服务器软件,其几乎可以在所有广泛使用的计算机平台上运营,由于其跨平台和安全性被广泛使用,是最流行的Web服务端软件之一。相比于nginx,apache有些臃肿,内存和CPU开销较大,性能上有损耗,nginx对于静态文件的响应能力远高apache。
    Apache是负载PHP的最佳选择,如果流量很大的话,可以使用nginx来负载非PHP的Web请求。在整个IT界而言,70%的流量访问均来源于Apache。
    Nginx是一款高性能额Http和反向代理服务器,也是一个AMAP/POP3/SMTP服务器,Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的。相比于Apache,nginx使用资源更少,支持更多并发连接,效率更高,作为负载均衡服务器。nginx即可对内进行支持,也可对外进行服务。其还是一款非常优秀的邮件代理服务器,安装简单,配置简介。
    LNMP是Linux+Nginx+Mysql+PHP的组合方式,其特点是利用Nginx的快速与轻量级,替代以前的LAMP(Linux+Apache+Mysql+PHP)的方式。由于安装方便,并且安装脚本也随时更新。
    LNMP方式的优点:占用VPS资源较少,Nginx配置起来也比较简单,利用fast-cgi的方式动态解析PHP脚本。
    LNMP方式的缺点:php-fpm组件的负载能力有限,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502 bad gateway错误
    综上所述:
    基于 LAMP 架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是 Web 网络应用和环境的优秀组合。若是服务器配置比较低的个人网站,当然首选 LNMP 架构。
    当然,在大流量的时候。把Apache和Nginx结合起来使用,也不失为一个不错选择,如下:
    LNAMP是Linux+Nginx+Apache+Mysql+PHP的组合方式,其特点是利用Nginx来作为静态脚本的解析,而利用 Nginx的转发特性,将动态脚本的解析转交给Apache来处理,这样,能充分利用两种Web服务器的特点,对于访问量需求较大的站点来说,是一个很不错的选择。
    LNAMP方式的优点:由于Apache本身处理PHP的能力比起php-fpm要强,所以不容易出现类似502 bad gateway的错误。适合访问量较大的站点使用。
    LNAMP方式的缺点:相比LNMP方式会多占用一些资源,另外,配置虚拟主机需要同时修改Nginx和Apache的配置文件,要稍微麻烦一些。

    3:memcached、redis、mongodb的区别联系
           3个场景完全不同的东西。
           1.memcached:单一键值对内存缓存的,做对象缓存无可替代的分布式缓存;
           2.redis:是算法和数据结构的集合,快速的数据结构操作是他最大的特点,支持数据持久化;
           3.mongodb是bson结构、介于rdb和nosql之间的,更松散更灵活的,但是不支持事务,只用作非重要数据存储。
        Redis和Memcached的区别
        1.数据支持类型不同:
       Memcached仅支持简单的key-value结构的数据,Redis常用的数据类型有5种:String、Hash、List、Set和Sorted Set.Resdis内部使用一个redisObject对象来表示所有的key和value.
       redis核心对象(redisObject)
       |数据类型(type)-------------------->string/hash/list/set/sorted set
    raw/int/ht/zipmap/
    linkedlist/ziplist --> |编码方式(encoding)
    /intset
       |数据指针(ptr)
       |虚拟内存(vm)
       |其他信息……
       说明:type代表一个value对象具体是什么数据类型,encoding是不同数据类型在redis内部的存储方式。比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者int,如果是int则代码实际redis内部是按数值型类型存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示比如“124”,“456”这样的字符串。只有打开了Redis的虚拟内存功能,vm字段才会真正的分配内存,该功能默认关闭。
       1)String:
       常用命令:set/get/decr/incr/mget等。
       应用场景:String是最常用普通的key/value都可以用
       实现方式:String在Redis内部存储默认就是一个字符串。当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
       2)Hash
       常用命令:hset/hget/hgetall等
       应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;
       实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
       3)List
       常用命令:lpusht/rpush/lpop/rpop/lrange等
       应用场景:比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;
       实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构
       4)Set
    常用命令:sadd/spop/smembers/sunion等;
    应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;
    实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
    5)Sorted Set
    常用命令:zadd/zrange/zrem/zcard等;
    应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。
    实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
    2.内存管理机制不同
    在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。

    4:HTTP协议中几个状态码的含义:503 500 401 403 404 200 301 302。。。
    2XX 成功
    200 : 请求成功,请求的数据随之返回。
    3XX 重定向
    301 : 永久性重定向。
    302 : 暂时行重定向。
    304 :未修改 
    305 :使用代理
    307 :临时重定向
    4XX 请求错误
    401 : (未授权)当前请求需要用户验证。
    403 : (禁止) 服务器拒绝请求。
    404 : (未找到)请求失败,请求的数据在服务器上未发现。
    405 :(方法禁用) 禁用请求中指定的方法。 
    407 :(需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。  
    5xx 服务器错误
    500 : 服务器错误。一般服务器端程序执行错误。
    501 :(尚未实施) 服务器不具备完成请求的功能
    502 :(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。   
    503 : (服务不可用)服务器临时维护或过载。这个状态时临时性的。
    504 :(网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。   
    505 :(HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

    5:对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
    a. 确认服务器是否能支撑当前访问量。
    b. 优化数据库访问。参考2.3
    c. 禁止外部访问链接(盗链), 比如图片盗链。
    d. 控制文件下载。
    e. 使用不同主机分流。
    f. 使用浏览统计软件,了解访问量,有针对性的进行优化。
    6:使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567,请先打开mod_rewrite.
    首先,打开mod_rewrite模块。
    其次,http.conf找到以下代码段:
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    将其中的:AllowOverride None 改为 AllowOverride All ,重启httpd服务即可。
    然后,在项目根目录下建立 .htaccess 文件,填写规则。
    7:测试php性能和mysql数据库性能的工具,和找出瓶颈的方法
    XHProf是一个分析php性能的工具,他报告函数基本的请求次数和各种指标,包括阻塞时间、cpu时间和内存使用情况,有一个简单的HTML用户界面,给予浏览器的性能分析用户界面,也能绘制调用关系

    未完待续……
    如有错误请联系我修改,谢谢。



    展开全文
  • PHP 笔试题目收集

    千次阅读 2012-10-17 18:16:39
     请根据上面的题目完成代码:  $mysql_db=mysql_connect("local","root","pass");  @mysql_select_db("DB",$mysql_db);  34、如何使用下面的类,并解释下面什么意思?(3)  class test{ ...
    
    

      基础题

      1.表单中 get与post提交方法的区别?

      答:get用户端将数据加到URL后,格式为”?字段1=输入数据1&字段2=输入数据2&..."。

      由于get提交参数后会在地址栏中显示出来,所以会产生严重的安全问题。

      get传输的数据量小,get传输的数据量小,这主要是因为受url长度限制;而post可以传输大量的数据。

      get限制表单中数据集的范围为asc2码,而post可以支持整个iso10646字符集。

      2.session与cookie的区别?

      答:cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

      3.数据库中的事务是什么?

      答:事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。

      简述题(50分)

      1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)

      2、echo(),print(),print_r()的区别(3分)

      3、能够使HTML和PHP分离开使用的模板(1分)

      5、使用哪些工具进行版本控制?(1分)

      6、如何实现字符串翻转?(3分)

      ---------------------------------------------------------------

      7、优化MYSQL数据库的方法。(4分,多写多得)

      8、PHP的意思(送1分)

      9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)

      10、实现中文字串截取无乱码的方法。(3分)

      ---------------------------------------------------------------

      11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)

      12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)

      13、请简单阐述您最得意的开发之作(4分)

      14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

      -----------------------------------------------------------------

      15、用PHP写出显示客户端IP与服务器IP的代码1分)

      16、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)

      17、如何修改SESSION的生存时间(1分).

      18、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)

      19、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)

      12、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)

      13、谈谈asp,php,jsp的优缺点(1分)

      14、谈谈对mvc的认识(1分)

      -------------------------------------------------------------------

      15、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)

      16. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)

      17. 在PHP中error_reporting这个函数有什么作用? (1分)

      18. 请写一个函数验证电子邮件的格式是否正确 (2分)
      19. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)

      20.如何修改SESSION的生存时间. (1分)

      --------------------------------------------------------------------

      21、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)

      22、JS的转向函数是?怎么引入一个外部JS文件?(2分)

      23、foo()和@foo()之间有什么区别?(1分)

      24、如何声明一个名为”myclass”的没有方法和属性的类? (1分)

      25、如何实例化一个名为”myclass”的对象?(1分)

      26、你如何访问和设置一个类的属性? (2分)

      27、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)

      --------------------------------------------------------------------

      28、GD库是做什么用的? (1分)

      29、指出一些在PHP输入一段HTML代码的办法。(1分)

      30、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)

      (a) fget() (b) file_open() (c) fopen() (d) open_file()

      31、下面哪个选项没有将 john 添加到users 数组中? (1分)

      (a) $users[] = ‘john’;

      (b) array_add($users,’john’);

      (c) array_push($users,‘john’);

      (d) $users ||= ‘john’;

      32、下面的程序会输入是否?(1分)

      $num = 10;

      function multiply(){

      $num = $num * 10;

      }

      multiply();

      echo $num;

      ?>

      33、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2分)

      表名User

      Name Tel Content Date

      张三 13333663366 大专毕业 2006-10-11

      张三 13612312331 本科毕业 2006-10-15

      张四 021-55665566 中专毕业 2006-10-15

      请根据上面的题目完成代码:

      $mysql_db=mysql_connect("local","root","pass");

      @mysql_select_db("DB",$mysql_db);

      34、如何使用下面的类,并解释下面什么意思?(3)

      class test{

     function Get_test($num){

      $num=md5(md5($num)."En");

      return $num;

      }

      }

      ----------------------------------------------------------------------------

      35、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)

      表名User

      Name Tel Content Date

      张三 13333663366 大专毕业 2006-10-11

      张三 13612312331 本科毕业 2006-10-15

      张四 021-55665566 中专毕业 2006-10-15

      (a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中

      (b) 请用sql语句把张三的时间更新成为当前系统时间

      (c) 请写出删除名为张四的全部记录

      36、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)

      37、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)

      38、写出以下程序的输出结果 (1分)

      $b=201;

      $c=40;

      $a=$b>$c?4:5;

      echo $a;

      ?>

      39、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)

      -----------------------------------------------------------------------------

      40、取得查询结果集总数的函数是?(1分)

      41、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)

      42、请将41题的数组的值用','号分隔并合并成字串输出(1分)

      43、$a = 'abcdef'; 请取出$a的值并打印出第一个字母(1分)

      44、PHP可以和sql server/oracle等数据库连接吗?(1分)

      45、请写出PHP5权限控制修饰符(3分)

      46、请写出php5的构造函数和析构函数(2分)

      ------------------------------------------------------------------------------

      47、以下请用PHPMYADMIN完成

      (一)创建新闻发布系统,表名为message有如下字段 (3分)

      id 文章id

      title 文章标题

      content 文章内容

      category_id 文章分类id

      hits 点击量 http://5igo.net.cn/news/guo-nei-yao-wen/2010-02-5igo-news-info-82.html

      (二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下 (4分)

      comment_id 回复id

      id 文章id,关联message表中的id

      comment_content 回复内容

      现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面

      文章id 文章标题 点击量 回复数量

      用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0

      (三)上述内容管理系统,表category保存分类信息,字段如下 (3分)

      category_id int(4) not null auto_increment;

      categroy_name varchar(40) not null;

      用户输入文章时,通过选择下拉菜单选定文章分类

      写出如何实现这个下拉菜单

      编程题

      1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

      例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php

      2. 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句

      请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5

      请注意:

      1. 需要处理完整的 html 页面,即不光此 meta 语句

      2. 忽略大小写

      3. ' 和 " 在此处是可以互换的

      4. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行

      5. 注意处理多余空格

      3. 写一个函数,算出两个文件的相对路径

      如 $a = '/a/b/c/d/e.php';

      $b = '/a/b/12/34/c.php';

      计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

      填空题

      1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量____中;而链接到当前页面的URL记录在预定义变量____中。

      2.执行程序段将输出____。

      3.在HTTP 1.0中,状态码 401 的含义是____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为____。

      4.数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____。

      5.PEAR中的数据库连接字符串格式是____。

      6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):____。

      7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。

      8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。

      9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。

      10.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.

      11.SQL中LEFT JOIN的含义是____。如果 tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句____。

      12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____。

      编程题

      13.写一个函数,能够遍历一个文件夹下的所有文件和子文

    展开全文
  • 题目一: <?php ////phpinfo(); error_reporting(0); show_source(__file__); preg_replace($_GET["a"], $_GET["b"], $_GET["c"]); ?> 解题思路:先看preg_replace函数定义 这里用到了一个小...

    题目一:

    <?php
    phpinfo();
      error_reporting(0);
      show_source(__file__);
      preg_replace($_GET["a"], $_GET["b"], $_GET["c"]);
      ?>
    

    解题思路:先看preg_replace函数定义在这里插入图片描述
    这里用到了一个小技巧,用到 /e(有些php版本不支持,我这里是可以的), 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码 ,所以我们这里构造一些命令来绕过代码,如下图所示:
    在这里插入图片描述
    题目二

    <?php 
    phpinfo();
    error_reporting(0);
    show_source(__FILE__);
    
    preg_replace("/\[(.*)\]/e","\\1",$_GET['c']);
    ?>
    

    跟上题的函数一样 这里主要是用了正则表达式\是转义符 .表示匹配所有字符 *通配符 \1的意思是第一个是转意标签 ,而\1 代表 第一个 ( ) 里面部分匹配的字符串。所以我们这里构造一些命令来绕过代码,如下图所示:
    在这里插入图片描述
    题目三

    <?php
    //phpinfo();
    error_reporting(0);
    show_source(__file__);
    
    $a = $_GET['a'];
    $b = $_GET['b'];
    @eval($$a); 
    ?>
    
    
    这题的主要解题点就是有$$a,弄懂它的意思是就能解除上题,$$a可看作$($a)=$b,所以我们这里构造一些命令来绕过代码,如下图所示:
    

    在这里插入图片描述
    题目四:

    <?php
    phpinfo();
    error_reporting(0);
    show_source(__file__);
    
    $a = $_GET['a'];
    eval("var_dump($$a);"); 
    ?>
    

    首先我们先了解var_dump这个函数,此函数是用于打印显示,一个变量的内容与结构,以及类型的信息。而eval 函数则把字符串作为PHP代码执行,所以我们这里构造一些命令来绕过代码,如下图所示:
    在这里插入图片描述
    题目五:

    <?php  
    //get flag
    error_reporting(0);
    show_source(__file__);
    include "flag.php";
    if(isset($_GET['a'])){
        $a = $_GET['a'];
        if(!preg_match("/^\w+$/",$a)){ //这里正则的规则表示取所有的数字或字母或下划线_的字符串
            die("error!");
        }
        eval("var_dump($$a);");
    }
    ?>
    

    这里用到一个小知识,用全局变量来绕过函数,所以我们这里构造一些命令来绕过代码,如下图所示:

    在这里插入图片描述
    题目六:

    <?php 
    phpinfo();
    error_reporting(0);
    show_source(__FILE__);
    
    $a = @$_REQUEST['a'];
    eval("var_dump($a);"); 
    ?>
    
    这里主要要了解$_REQUEST是什么意思:$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得
    

    所以我们这里构造一些命令来绕过代码,如下图所示:

    在这里插入图片描述
    题目七:

    <?php 
    phpinfo();
      error_reporting(0);
      show_source(__file__);
    
      $str="echo \"Hello ".$_GET['a']."!!!\";";
      eval($str);
    ?>
    

    解这题的主要要点是采用截断的思路,所以我们这里构造一些命令来绕过代码,如下图所示:
    在这里插入图片描述
    题目八:

    <?php
      phpinfo();
      error_reporting(0);
      show_source(__file__);
    
      $a = $_GET['a'];
      eval("'".$a."'");
    ?> 
    

    在这里插入图片描述
    题目九:

    error_reporting(0);
    show_source(__FILE__);
    
    $a=$_GET['a'];
    echo `$a`;
    

    这一题主要思路是:反引号`实际上是执行shell_exec(),所以我们这里构造一些命令来绕过代码,如下图所示:

    在这里插入图片描述

    今天的分享就到这里了,如有不足还请各位斧正。

    展开全文
  • PHP面试题目集合

    千次阅读 2007-10-16 10:14:00
    1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php 2. 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,...
  • 来源于个人博客 php 面试题目整理(持续更新) 数据库 mysql 索引的理解 mysql b-tree 与hash 索引的区别 mysql 索引的优化 mysql 存储引擎的理解,例 MyISAM与InnoDB的区别 除了mysql 还用过其它数据库吗? 有...
  • 2019年腾讯PHP程序员面试题目

    千次阅读 2020-06-09 20:05:41
    1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。 PHP 使用了引用计数 (reference counting) GC 机制。 每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当...
  • php面试题目及答案

    千次阅读 2012-06-28 16:55:49
    PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的URL记录在预定义变量(2)中。 答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2.执行程序...
  • php常见的面试题目

    万次阅读 2014-04-30 15:38:50
    PHP是不支持多线程的,可以使用php的flock加锁函数实现。 $fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX)) { // 进行排它型锁定 fwrite($fp, "Write something here\n"); flock($fp, ...
  • 这些题目在今年刚做的毕设题目,这只是整理小部分,前期先更新php/java/net/各 100个吧,后期有时间整理好还会继续在这里面更新的。记得收藏或关注。 一个一个整理,上传有没有很辛苦!!! 都带文档lw1万字+查重+...
  • 腾讯php程序员面试题目

    千次阅读 2010-06-03 23:20:00
    ~ ---------------------------------------------- 华丽的分割线 ----------------------------------------------------   <br />说在前面: 1、以下题目,除了编程任务外其他都需要写在给...
  • 攻防世界题目:simple_php 详细思路

    千次阅读 2020-04-11 15:14:25
    题目:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 点开,发现如下代码 没学过php怎么办… 不着急,一行一行分析<?php ?>百度得知是构成完整php语句,跳过 下一行:show_source(FILE);...
  • 创业型小公司 Php程序员 模拟面试题目
  • php面试常问的题目2

    千次阅读 2019-03-14 09:13:36
    PHP专业面试题汇总 一、PHP基础: 二、数据库部分 三、面向对象部分 四、ThinkPHP部分 五、smarty模板引擎 六、二次开发系统(DEDE、ecshop) 七、微信公众平台开发 八、对于自身掌握的技术描述: 1、PHP...
  • php序列化与反序列化+ctf题目

    千次阅读 2019-08-05 23:12:45
    现在在ctf比赛中PHP的反序列题目出得有一些多,当然,是我感觉的 emmm 之前没有怎么好好去了解这个问题 碰到这类题目的时候都是代码好的同学在做 然后这段时间看了一下这些东西 就写一些东西吧 自己的想法 ...
  • 高级PHP面试题目分享(技术篇)

    千次阅读 2018-09-24 08:11:25
    在找新的工作时,给自己定的方向就是PHP或者Java方面的工作,希望找朝阳行业,这期间经历的面试不多,最终拿到心意的offer,也算达到了自己的预期,在此给大家分享下在面试过程中遇到的一些有意思的题目,供大家参考...
  • 高级PHP面试题目分享(架构篇)

    千次阅读 2018-09-23 22:59:59
    在找新的工作时,给自己定的方向就是PHP或者Java方面的工作,希望找朝阳行业,这期间经历的面试不多,最终拿到心意的offer,也算达到了自己的预期,在此给大家分享下在面试过程中遇到的一些有意思的题目,供大家参考...
  • jsp33001sql阳光小说电子书阅读...题目名称列,可以按CTRL+F搜索需要的题目 jsp33004校园二手交易系统网站servlet-MySQL-同3037.mp4 jsp33005汽车配件购物MySQLservlet新liu2017liu1111.mp4 jsp33006健身网站M...
  • 2019年腾讯PHP程序员面试题目分享

    千次阅读 2020-05-20 11:27:32
    1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。 PHP 使用了引用计数 (reference counting) GC 机制。 每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当...
  • PHP面试题目及其解答

    万次阅读 2006-09-11 00:08:00
    PHP部分1 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用? 传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。2 在PHP中error_reporting这个函数有什么作用? ...
  • 【面试笔试-php】几道php小面试题目

    千次阅读 2012-08-29 17:17:39
    解析:很简单很基础的题目。如果用库函数,可以很简洁: <?php function getCountOfStr($string){ $res = str_split($string); $count = array_count_values($res); arsort($count); return
  • PHP各种各样的面试题目整理

    千次阅读 2017-01-05 19:33:06
    4、 ./configure --with-php-config=/usr/local/php/bin/php-config 5、编译 make 6、编译安装 make install 7、修改php.ini extension=/usr/local/***.so 8、重启php-fpm YUM安装: 1、去PHP的官网下载...
  • PHP常见面试题目深入解答分析(一)

    千次阅读 2009-02-12 16:26:00
    :-) 本文旨在对网上流传很广的部份初/中级PHP开发工程师面试题目做出一些解答.并对这些面试题对面试者的测试意义,以及题目本身做一些较为深入的分析. 也许大量的初/中级PHPer们在面试的时候已经发现,许多公司的...
  • 题目: 思路: 关键是分析PHP代码: $what=$_get['what']———意思是用get方式提交what的值 if($what=='flag') echo 'flag{****}';———要令what变量与字符串‘flag’相等才 得到flag。 所以我们就直接在地址栏中...
  • php 逻辑训练小题目四(附我的答案)

    千次阅读 2015-04-08 23:57:12
    <?php $str="helloyou"; for($i=0;$i($str);$i++){ $arr[]=$str[$i]; } sort($arr); for($i=0;$i($arr);$i++){ echo $arr[$i]; } ?> 【程序41】  题目:海滩上有一堆桃子,五只猴子来分。第一只
  • php 逻辑训练小题目三(附我的答案)

    千次阅读 2015-04-08 23:37:24
    【程序31】 题目:将一个数组逆序...<?php $arr=array("张氏","男",28,"本科"); $arr2=$arr; for($i=0,$len=count($arr);$i<$len;$i++){ $arr[$i]=$arr2[$len-1-$i]; } var_dump($arr); ?> 【程序32】  题目
  • 计算机专业毕业设计题目大全

    千次阅读 2020-06-23 17:43:04
    文章目录计算机专业毕业设计题目大全一、ASP类计算机专业毕业设计题目ASP.NET类计算机专业毕业设计题目Delphi类计算机专业毕业设计题目JAVA类计算机专业毕业设计题目JSP类计算机专业毕业设计题目PHP类计算机专业毕业...
  • 题目: <?php echo -10%3; *结果* -1 分析:其实这道题的知识点是在考模除和正负号的关系,那么我们看一段进阶的代码 <?php echo "10%3=>",10%3; echo ""; echo "-10%3=>",-10%3; echo ""; echo "-10%-3=>",-10%-...
  • 笔试题目

    千次阅读 2011-12-24 16:32:15
    http://www.cocoachina.com/bbs/read.php?tid=44281&keyword=%CA%D4%CC%E2
  • 九度 题目1050:完数

    2014-07-25 14:54:41
    题目来源:http://ac.jobdu.com/problem.php?pid=1050

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,149
精华内容 22,859
关键字:

php题目