面试题整理

2

、一个数据库的状态是否正常可以从哪些指标看出来,至少列出2个

    答QPS以及IOPS
    正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态。
    (1)QPS(每秒Query量)
    QPS = Questions(or Queries) / seconds
    mysql > show  global  status like 'Question%';

、apache和nginx的特性区别在哪?

    apache是一个请求对应一个线程的模式,不管那个请求是否需要读写都会分配一个线程,而nginx则是异步非阻塞模型,只有当请求需要读写的时候才会拿出来处理。

、问页面请求超时取决于nginx的配置还是PHP-CGI的配置?

    nginx

、PHP中的PEAR是什么?

    PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库

、fastcgi与cgi的区别

    fastcgi和cgi都是协议,fastcgi是管理cgi的

、PHP中常见错误类型?

    1、Notice:这些都是一些非常正常的信息,而非重大错误,甚至有一些都不会展示给用户。
    2、Warning:这类是稍微严重一些的错误,错误会展示给用户,但不影响程序的输出。
    3、Fatal errors:这些是非常严重的错误,比如要访问一个不存在的PHP类。

、http 状态码?

    200 - 服务器成功返回网页
    301 - 永久移动,请求的网页已被永久移动到新位置
    304 - 缓存网页未修改,直接返回内容
    401 - 未授权
    403 -(已禁止) 服务器拒绝请求
    404 - 请求的网页不存在,网页不存在。
    500 - 服务器遇到错误,无法完成请求。
    503 - 服务器暂时不可用,目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。 HTTP 状态代码的完整列表 

、php中定义常量时,const和define的区别?

    define ('Newconstant', 30);
    答:使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
    1、const用于类成员变量的定义,一经定义,不可修改。Define不可以用于类成员变量的定义,可用于全局常量。
    2、Const可在类中使用,define不能
    3、Const不能再条件语句中定义常量
    4、const采用普通的常量名称,define可以采用表达式作为名称
    5、const只能接受静态的标量,而define可以采用任何表达式
    6、const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

、PHP支持多继承吗?

    5.4版本以后可以使用Traits方法实现
    5.4版本不可以。PHP类只能继承一个父类,并用关键字“extended”标识。

、用最简单的语言告诉我PHP是什么?

    PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。

、什么是MVC?

    MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

  Model:数据信息存取层。
  View:view层负责将应用的数据以特定的方式展现在界面上。
  Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

、cookie、session的联系和区别,多台web服务器如何共享session?

    cookie在客户端保存状态,session在服务器端保存状态。但是由于在服务器端保存状态的时候,在客户端也需要一个标识,所以session也可能要借助cookie来实现保存标识位的作用。
    cookie包括名字,值,域,路径,过期时间。路径和域构成cookie的作用范围。cookie如果不设置过期时间,则这个cookie在浏览器进程 存在时有效,关闭时销毁。

如果设置了过期时间,则cookie存储在本地硬盘上,在各浏览器进程间可以共享。

    session存储在服务器端,服务器用一种散列表类型的结构存储信息。当一个连接建立的时候,服务器首先搜索有没有存储的session id,如果没有,则建立一个新的session,将session id返回给客户端,

客户端可以选择使用cookie来存储session id。也可以用其他的方法,比如服务器端将session id附在URL上。

    区别:
    (1).cookie在本地,session在服务器端。
    (2).cookie不安全,容易被欺骗,session相对安全。
    (3).session在服务器端,访问多了会影响服务器性能。
    (4).cookie有大小限制,为3K
    多服务器共享session可以尝试将session存储在memcache中。

、浏览器下载最大并发数

    http1.0   一般在2-6个
    http1.0   一般在4-6个

、 简述POST 和GET传输的最大容量分别是多少?

    POST根据PHP.ini文件配置(默认的是8M)
    GET大小限制在2kb

、http协议中的post和get有何区别?

    GET用于获取信息,不应该用于修改信息,POST可用于更新修改信息。
    GET可传输数据大小和URL有关,而POST没有限定大小,大小和服务器配置有关。
    GET放在URL中,因此不安全,而pOST传输数据对于用户来说是不可见的,所以相对安全。
    在ajax: post不被缓存,get被缓存所以一般在请求结尾加Math.random();
    SERVER端接受:因为在submit提交的时候是按不同方式进行编码的,所以服务端在接受的时候会按照不同的方式进行接受!
    编码方式:如果传递数据是非-ASCII,那么GET一般是不适应的,所以在传递的时候会做编码处理!

、字符串和数字比较,如题输出应该是?

    $s = 'abc';
    if ($s == 0) {
        echo 'is zero';
    } else {
        echo 'is not zero';
    }
    答案:is zero 因为PHP是弱类型,类型是可以根据赋值改变

、echo count("abc"); 输出什么?

    echo count(null);       答案:0
    echo count(false);      答案:1
    echo count(true);       答案:1
    echo count("abc");      答案:1
    echo count(123);        答案:1

、写个函数用来对二维数组排序。

  array_multisort()

、请写一个函数验证电子邮件的格式是否正确(要求使用正则)

$reg = '#[a-z0-9-_.]+@[\w]{2,}\.[\w]+#is';
$rst = preg_match($reg, '34234wujunzhiai@163.com');
if($rst){
    echo '正确';
}else {
    echo '错误';
}

、用php写出显示客户端Ip与服务器Ip的代码

  答案:客户端 getenv('REMOTE_ADDR');
  服务器端 getenv('SERVER_ADDR'); // gethostbyname('www.baidu.com');

、用最少的代码写一个求3值最大值的函数.

    function get_max($a,$b,$c)
    {
            return ( $a > $b ? $a : $b ) > $c ? ( $a > $b ? $a : $b ) : $c;
    }
    echo get_max(1,2,3);

7、写出 访问 http://www.sina.com.cn 所需的报文头

    md5_file()

、本页地址,当前脚本的名称

    echo $_SERVER[PHP_SELF];

、链接到当前页面的上一页面的 URL 地址:

  echo $_SERVER[HTTP_REFERER];

、echo(),print(),print_ r()的区别

    echo            是php语句, print和print_ r是函数,语句没有返回值,函数可以有返回值(即便没有用)
    print()         只能打印出简单类型变量的值(如int, string)
    print_r()       可以打印出复杂类型变量的值(如数组,对象)

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

    1、pHp缓存
    2、生成html静态页面
    3、使用主辅数据库,把数据库的读写分开
    4、使用负载均衡器和多台服务器

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

  serialize() 序列化

    unserialize()   反序列化

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

    1、pHp程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后pHp会将网页档重新编译,让引入档成为原先网页的一部分。
    2、pHp程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中。
    3、require() :如果文件不存在,会报出一个fatal error.脚本停止执行
    4、include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行
    5、推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

、如何修改SESSION的生存时间.

    方法一:
    将php.ini 中session.gc_maxlifetime 设置为 9999(默认为 1440)重启 apache 即可

    方法二:
    $savepath = "./session_save_dir/";
    $lifeTime = 24 * 3600;
    session_save_path($savepath);
    session_set_cookie_params($lifeTime);
    session_start();

    方法三:
    setcookie() 或session_set_cookie_params($lifeTime) 在pHp中,heredoc是一种特殊的字符串,它的结束标志必须?
    heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串
    <?php
    $str = <<<EOD
    I saw a dog yesterday.
    EOD;
    >
    需要注意的是:
    1、"<<<"后面的EOD是自己定义的标签名称,必须要成对,而且后面要加上分号表示结束。
    2、结束的标签前面最好不要有空格,以免发生错误

、在pHp中error_reporting这个函数有什么作用?

    error_reporting() 用于设置php的侦听错误的级别.[用来配置错误信息回报的等级].

、error_reporting(2047)什么作用?

  答案:相当于 error_reporting('E_ALL'); 输出所有的错误

、检测一个变量是否有设置的函数是?是否为空的函数是?

    isset($a)
    empty($a)

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

    echo $arr[0];

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

    答:echo $a{0} 或 echo substr($a,0,1)

、请写出php5权限控制修饰符

    public(公共)
    private(私用)
    protected(继承)

、请写出php5的构造函数和析构函数

    __construct()   构造函数
    __destruct()    析构函数

4、php中web上传文件的原理是什么,如何限制上传文件的大小?

    pHp上传文件默认大小为2M,设置上传大小的配置项是upload_max_filesize,post_max_size设置一次pOST中pHp能接收的最大数据量,应该比upload_max_filesize大。

5、php防止sql注入式攻击,用什么函数转换字符串?

    addslashes();

6、你常用的php字符串函数?

    substr(),strtolower(),ucwords(),ucfirst(),strtoupper(),implode(),explode(),str_replace(),strpos(),strrev()

8、HTTp的通讯协议是?

    TCP

9、php中的文件读写操作,读取文件test.txt中前300字节的内容?

    $handle=fopen("test.txt","r");
    $contents=fread($handle,300);
    fclose($handle);

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

    例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
    答案1:
    function getExt($url){
            $arr = parse_url($url);
            $file = basename($arr['path']);
            $ext = explode(".",$file);
            return $ext[1];
    }

12、php5中魔术方法函数有哪几个,请举例说明各自的用法

    __construct() :实例化对象时被调用;
    __destuct():当删除一个对象或者对象操作终止是被执行;
    __call():调用对象不存在方法时被调用;
    __get():调用对象不存在的属性时被调用;
    __set():设置对象不存在的属性时被调用;
    __toString():打印一个对象时被调用,比如echo $obj,print($obj);
    __clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t;
    __sleep():serialize之前被调用,若对象比较大,想做一些删除在序列化,可以考虑使用该方法;
    __wakeup():unserialize之前被调用,做些对象的初始化;
    __isset():检测对象是否存在属性的时候被调用,如 isset($c->name);
    __unset():unset一个对象属性时被调用,如:unset($c->name);
    __set_state():调用var_export时被调用,用__set_state的返回值作为 var_export的返回值
    __autoload():实例化一个对象时,如果对应的类不存在,在该方法被调用

    魔术常量:
    __LINE__:返回当前行号;
    __FILE__:返回文件的完整路径和文件名,如果用在包含文件里面,则返回包含文件名,自 php4.0.2开始,
    __FILE__总是包含一个绝对路径,而在此前的版本有时候会包含一个相对路径
    __FUNCTION__:返回函数名称(自 php4.3.0新加的)。自php5起本常量返回该函数被定义时的名称,区分大小写,在php4中该值总是小写;
    __CLASS__:返回类的名称,自 php4.3.0新加的,自php5起本常量返回该类被定义时的名称,区分大小写,在php4中该值总是小写的;
    __METHOD__:返回类的方法名。 php5新加的

13、简单说明pHp的垃圾收集机制是怎样的?

    对变量有个引用计数,计数到0时变量被销毁

14、请写一段pHp代码,确保多个进程同时写入同一个文件成功

    代码:
    function writeData($path, $mode, $data){ 
            $fp          = fopen($path, $mode); 
            $retries     = 0;
            $max_retries = 100; 
            do {
                    if ($retries > 0) {
                            usleep(rand(1, 10000));
                    }
                    $retries += 1;
            }while (!flock($fp, LOCK_EX) and $retries <= $max_retries); 

            if ($retries == $max_retries) {
            return false;
            }

            fwrite($fp, "$data\\n");
            flock($fp, LOCK_UN);
            fclose($fp); 
            return true; 
    }

15、你用什么方法检查php脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在

    php脚本的执行效率
    1, 代码脚本里计时
    2, xdebug统计函数执行次数和具体时间进行分析,最好使用工具winCacheGrind分析
    3, 在线系统用strace跟踪相关进程的具体系统调用

    数据库SQL的效率
    sql的explain(mysql),启用slow query log记录慢查询
    通常还要看数据库设计是否合理,需求是否合理等

、microtime和mktime两个函数的区别。

echo microtime();   返回当前时间戳
echo mktime();              取得指定的时间戳

16、求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
  $begin = strtotime('2007-2-5');
  $end = strtotime('2007-3-6');
  echo ($end-$begin)/(24*3600);

17、用php打印出前一天的时间格式是YYYY-MM-DD HH:II:SS

    echo date('Y-m-d H:i:s', time()-24*3600);
    echo date('Y-m-d H:i:s', strtotime('-1 day'));  前一天
echo date('Y-m-d H:i:s', strtotime('-1 second'));
echo date('Y-m-d H:i:s', strtotime('-1 minute'));
echo date('Y-m-d H:i:s', strtotime('-1 hour'));
echo date('Y-m-d H:i:s', strtotime('-1 day'));
echo date('Y-m-d H:i:s', strtotime('-1 week'));
echo date('Y-m-d H:i:s', strtotime('-1 month'));
echo date('Y-m-d H:i:s', strtotime('-1 year'));
  1. 请写一个函数,实现以下功能:
      字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。

  function str_change($str) {

      $str = str_replace ('_', ' ', $str);
      $str = ucwords($str);
      $str = str_replace (' ', '', $str);
      return $str;
    }

4、请简述操作系统的线程与进程的区别。列举LINUX下面你使用过的软件?
5、熟悉memcache/redis、MVC/REST架构、模板引擎、中间件的原理与应用者优先;
6、熟悉TCP/IP、HTTP协议者优先;

===============算法=====================
1、请使用伪语言结合数据结构冒泡排序法对以下一组数据进行排序 10 2 36 14 10 25 23 85 99 45。

$a = array(10,2,36,14,10,25,23,85,99,45);
$count = count($a);
for($j=1; $j<$count; $j++){
    for($i=0; $i<$count-$j; $i++){
        if($a[$i] > $a[$i+1]) {
            $t = $a[$i] ;
            $a[$i] = $a[$i+1] ;
            $a[$i+1] = $t ;
        }
    }
}
print_r($a);

============Mysql==========================

、mysql_fetch_row 和mysql_fetch_array之间有什么区别?

    mysql_fetch_row()               从结果集中取得一行作为枚举数组
    mysql_fetch_array()             从结果集中取得一行作为关联数组,或数字数组,或二者兼有

、MYSQL取得当前时间的函数是?,格式化日期的函数是

    now() DATE_FORMAT(date , format)
    select now();
    select curdate();
    select curtime();

1、请简述数据库设计的范式及应用。
  一般第3范式就足以,用于表结构的优化,这样做既可以避免应用程序过于复杂同时也避免了SQL语句过于庞大所造成系统效率低下

    1NF:原子性 字段不可再分,否则就不是关系数据库; 
    2NF:唯一性 一个表只说明一个事物; 
    3NF:每列都与主键有直接关系,不存在传递依赖; 

  ANSWER:
  第一范式:若关系模式R的每一个属性是不可再分解的,再属于第一范式。
  第二范式:若R属于第一范式,且所有的非码属性都完全函数依赖于码属性,则为第二范式。
  第三范式:若R属于第二范式,且所有的非码属性没有一个是传递函数依赖于候选码,则属于第三范式

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

    id 文章id
    title 文章标题
    content 文章内容
    category_id 文章分类id
    hits 点击量
    答:
    CREATE TABLE `message`(
            `id` int(10) NOT NULL AUTO_INCREMENT,
            `title` VARCHAR(200) default NULL,
            `content` text,
            `category_id` int(10) NOT NULL,
            `hits` int(20),
            PRIMARY KEY(`id`)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

    name              score
    张三   语文   59 
    张三   数学   80
    张三   英语   33
    李四   语文   50
    李四   数学   50
    李四   英语   58
    王五   语文   88
    王五   数学   90
    答:select name,sum(score<60) as gk,avg(score) as pj from student group by name having gk>=2;

============Javascript==========================

、JS表单弹出对话框函数是?获得输入焦点函数是?

    弹出对话框: alert(),prompt(),confirm()
    获得输入焦点 focus()

你可能感兴趣的

载入中...