php面试题1

作者: 漏诺 | 来源:发表于2017-12-06 17:33 被阅读51次

    1.用 PHP 获取当前时间并打印,打印格式:2006-5-10 22:21:21

    date_default_timezone_set('PRC');

    echo date('Y-n-d H:i:s'); n不带前导0

    echo date('Y-m-d H:i:s'); 默认都是带前导0的。

    12小时制是小写h,24小时制是大写h

    改时区的两种方法

    ① php.ini找到date.time.row=PRC  全改时区为中华人民共和国时区

    ② date_default_timezone_set('PRC');改当前页面的时区

    2.字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?

    字符串转数组

    1)$str='www.baidu.com';

    print_r(str_split($str));//str_split字符串分割

    explode()

    数组转字符串

    2)$arr=array("aaa","bbb","ccc");

    print_r(implode('',$arr)); //join()

    字符串截取

    substr($str,1,10);

    mb_substr   mb_strcut

    字符串替换

    4)$bodytag = str_replace("%body%", "black", "");

    preg_replace();//正则替换

    例如:Linux和php替换成java

    $str="linux is very much php";

    echo preg_replace('/linux|php/','java',$str);

    字符串查找

    strpos

    strrpos

    preg_match 匹配

    preg_match_all

    例如

    截取目录的文件部分

    $str="/web/a/b/index.html";

    //获取斜线的位置

    $pos=strrpos($str,'/');//strrpos获取最后一个斜线

    //echo $pos;//8

    echo substr($str,$pos+1);

    截取目录

    $pos=strrpos($str,'/');

    echo substr($str,0,$pos);

    使用basename,dirname截取目录

    basename 截取目录部分

    dirname 截取目录中的文件部分

    $str="/web/a/b/index.html";

    echo dirname($str);

    echo basename($str);

    案例

    查看所有的p*p

    $str="pap is pbp and pcp";

    preg_match_all('p.p',$str,$ms);

    <pre>

    echo $ms;

    </pre>

    3,解释一下 PHP 的类中: public, protect,private,interface,abstract,final,static 的含义

    public,private,protected修饰类的属性和方法,体现面向对象三大特性的封装特性;封装是指安全级别。

    public  共有的          本类 子类  类的外面

    protected 受保护的  本类,子类

    private 私有的          子类

    interface 接口

    abstract 抽象类

    抽象类是什么?

    含有任意一个抽象方法的类叫抽象类

    没有方法体的方法叫抽象方法【没有大括号】如function a()

    接口中只含有抽象方法。

    final和static是两个关键字

    final 最后的类和方法

    final修饰类和方法,不能修饰属性;代表类是最后一个类,不能有子类;

    static 静态方法和属性;属于类,但是并不依附于对象而生成。如果一个类有static,直接object::方法名;不用实例化,因为不属于对象。

    static修饰属性和方法

    4, 写出下列代码的数据结果

    $date='08/26/2003';   2003/08/26

    $date='08/26/2003';

    echo preg_replace('/(\d+)\/(\d+)\/(\d+)/',$3/$1/$2’,$date);

    5,从表 login 中选出 name 字段包含 admin 的前 10 条结果所有信息的 sql 语句

    select * from login where name like '%admin%' limit 10 order by id;

    6,解释:左连接,右连接,内连接,索引

    左连接:left join,以左表为主导,右表匹配显示。不匹配,用null补全。多表查询

    右连接:right join,以右表为主导,左表匹配显示。

    内连接:inner join,与where条件相同,等于普通多表查询。匹配2个表内,条件相等的值。

    索引:index,像词典中的目录一样,目的是,查找数据更快。

    分为:主键索引,唯一索引,普通索引。

    主键索引:一个表一个主键索引。用于id

    唯一索引:每一列都可以有唯一索引。不允许有相同值。如id

    索引:每一列都可以有普通索引

    案例

    发过帖子的人

    select user.name,post.info from user,post where user.id=post.user_id   普通多表查询

    select user.name,post.info from user inner join post on user.id=post.user_id  内联查询

    左连接 左表都查出来 【所有人都发过什么帖子】

    select user.name,post.info from user left join post on user.id=post.user_id

    右连接 右表都查出来

    select user.name,post.info from post right join user on user.id=post.user_id

    desc select * from user where id=5/G  检索一行

    desc select * from user where user5='user5'/G 检索5行,没有加索引

    添加索引

    alert table user add index in_username(username);//给where条件用的列加索引

    删除索引

    alert table user drop index in_username; 影响又成5行

    7,简述论坛中无限分类的实现原理。

    1.设计无限分类表

    表中有4列  (递归查询)

    id ,name,pid,path

    2.好处

    可以快速找到父分类,子分类,祖先分类。

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

    pathinfo:对应目录

    path_url:对应url参数

    $ref='http://localhost/a/b/index.php';  (文件名中没有?参数)【使用pathinfo】

    $arr=pathinfo($ref);

    echo "<pre>";

    print_r($arr);

    echo "</pre>"

    运行结果:

    array(

       [dirname]=>'http://localhost/a/b

       [basename]=>index.php

       [extension]=>php

      [filename]=>index

    )

    正则比字符串慢

    $ref='http://localhost/a/b/index.php?id=10';

    $arr=path_url($ref);

    echo "<pre>"

    print_r($arr);

    echo "</pre>"

    运行结果:

    array(

    [scheme]=>http

    [host]=>localhost

    [path]=>/a/b/index.php

    [query]=> id=10

    )

    正确做法

    $ref='http://localhost/a/b/index.php?id=10';(文件名中有?参数)【先使用path_url,再使用pathinfo】

    $arr=path_url($ref);

    $path=$arr[path];//取出目录

    $arr2=pathinfo($path);

    echo "<pre>";

    print_r($arr2);

    echo "</pre>";

    9,解释:MVC

    m:model 模型层  数据层  对数据库进行增删改

    v:view 视图层

    c:controller 控制层 逻辑层

    最大优点:实现视图层逻辑层的分离

    由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;

    10,描述一下大流量高并发量网站的解决方案

    1.dns负载均衡【分流到不同机房】

    2.负载均衡服务器

    3.集群服务器

    4.web服务器采用nginx

    5.静态缓存(tp,smarty)

    6.文件数据缓存(tp)

    7.内存数据缓存(memcache,redis)

    8.给数据库加索引

    9.磁盘阵列技术

    ********************************************************************

    集群:防止挂掉,进行替换

    买服务器:阿里云,自己公司

    web服务器,apache同时在线用户是4000人。解决办法,加服务器。

    ********************************************************************

    高并发是由大流量带来的

    高并发是指同一时间打开同一个页面,同时在线的状态,针对视频网站。

    大流量:访问量,访问次数。

    *******************************************************

    Mysql 数据库优化

    1.sql语句(索引优化,语句定位:1.慢查询 2. desc或explain去解析sql语句,分析索引使用

    情况以及扫描行数)

    2.表优化(表引擎使用:myisam 或 innodb)

    3.数据库优化(分库分表或分区)

    4.服务器优化(四种字符集,主从 mysql)

    get与post区别

    get安全性低,传播速度快,有数据大小限制,1024字节

    post安全性高,传播速度慢,没有数据限制。

    如何进行防sql注入

    sql注入是借助sql语句入侵服务器

    1.表单尽量用post提交,表单判断用get。

    2.$_SERVER[HTTP_REFERER]判断提交者的源头。如果是本服务器的ip,则提交;不是,则停止提交。

    3.开启addslashes,防止sql语句的破坏性。php是自动开启的。

    4.密码一定要设置md5加密

    5.服务器本身的安全(web+mysql)

    案例

    a.php是表单,提交到b.php,在b.php进行源头判断。

    b.php

    $path=$_SERVER[HTTP_REFERER];

    $arr=parse_url($path);

    echo "<pre>";

    print_r($arr);

    echo "</pre>";

    运行结果

    array(

    [scheme]=>http

    [host]=>localhost

    [path]=>/test/index.php

    判断host的值

    相关文章

      网友评论

        本文标题:php面试题1

        本文链接:https://www.haomeiwen.com/subject/dutwbxtx.html