zoukankan      html  css  js  c++  java
  • php常见面试题(未完待更)

    一、    时间
    1.获取当前时间
    date_default_timezone_set('PRC');
    echo date('Y-m-d H:i:s');
     
    2.获取前一天此时时间
    date_default_timezone_set('PRC);
    echo date('Y-m-d H:i:s',strtotime('-1 day'));
     
    3.cookie和seeion的区别与联系
    区别:
    ①cookie数据存放在用户的浏览器上,session数据存放在服务器上。
    ②cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,所以考虑到安全应当使用session。
    ③session会在一定时间内保存在服务器上。当服务器访问增多时,可能产生的SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。
    ④单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
    ⑤所以个人建议:将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中
     
    联系:
    ①session是通过cookie来工作的,Session数据保存在服务器端的文件(默认保存)或数据库中,客户端通过访问cookie或者URL来获得session_id ,而session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,之后通过它来获得服务端的数据
    ②因为session_id是唯一记录到数据库中的,所以,在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过session_id就可以查找到用户上次加入购物车的商品。
    ③存储session id的方式:i. get或post   ii.cookie(应用广泛)
     
    4.多台web服务器如何共享session?
    解决办法:第一步,必须做到多台服务器共享客户端的 SESSION ID,第二步,还必须共享服务器端的 SESSION数据
     
    第一步:要共享客户端的session id,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的。
     
    第二步,共享服务器端的session数据实现方式
     
    方法一:
    ① 将session数据存放到数据库中,使得各个服务器可以对其访问   注意:由于经常会对表进行删除操作,所以使用optimize table 表名,用该语句进行sql优化,对表进行碎片整理,去除空洞
    ②问题:如果网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,这样效率就会明显降低。考虑到 SESSION 数据一般不会很大,可以尝试用C/Java 写个多线程的程序,用 HASH 表保存 SESSION 数据,并通过 socket 通信进行数据读写,这样 SESSION 就保存在内存中,读写速度应该会快很多。另外还可以通过负载均衡来分担服务器负载。(用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。)
    方法二:
    在获取session数据将其放到cookie中,其他服务器使用时先检查客户端是否存在该session,若有再取出(该方法容易被用户禁用且容易被伪造存在安全隐患)
    方法三:(推荐使用)
        利用memacache同步session,它把web服务器的内存组合为一个内存池,这样其他的服务器都可以访问(缺点:内存块有大小之分,容易产生内存碎片)
     
    5.http协议中的post和get有何区别?
    ①GET用于获取信息,POST可用于更新修改信息
    ②GET放在URL中,因此不安全,而POST传输数据对于用户来说是不可见的,所以相对安全
    ③在ajax: post不被缓存,get被缓存,所以一般在请求结尾加Math.random();
    ④SERVER端接受:因为在submit提交的时候是按不同方式进行编码的,所以服务端在接受的时候会按照不同的方式进行接受编码方式:如果传递数据是非-ASCII,那么GET一般是不适应的,所以在传递的时候会做编码处理
     
    6.php中web上传文件的原理是什么,如何限制上传文件的大小?
    打开php.ini,
    参数 设置 说明
    file_uploads on      是否允许通过HTTP上传文件的开关。默认为ON即是开
    upload_tmp_dir     文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
    upload_max_filesize 8m 望文生意,即允许上传文件大小的最大值。默认为2M
    post_max_size 8m 指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
     
    说明
    一般地,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题
    但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。
    max_execution_time 600 每个PHP页面运行的最大时间值(秒),默认30秒
    max_input_time 600 每个PHP页面接收数据所需的最大时间,默认60秒
    memory_limit 8m 每个PHP页面所吃掉的最大内存,默认8M
    把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了
     
    7.遍历一个文件夹下所有文件夹与文件
    <html>
        <head>
            <title>遍历文件夹及文件</title>
            <meta http-equiv="Content-type"content="text/html;charset=utf-8">
        </head>
    <?php
     function showDirectoryFile($path){
        $handle = opendir($path);
        while($file = readdir($handle)){
            if($file=="."||$file=="..") continue;
            $newFilePath = $path.DIRECTORY_SEPARATOR.$file;
            if(is_dir($newFilePath)){
     
                echo "文件夹:".$newFilePath."<br>";
                showDirectoryFile($newFilePath);
            }
            if(is_file($newFilePath))
                echo '文件'.$newFilePath."<br>";
                echo '<br>';       
        }
        closedir($handle);
    }
    showDirectoryFile("C:wampwww");
    ?>
    </html>
     
    8.计算两个日期的时间差
    $a='2012-12-31';
        $b='2013-1-3';
        echo floor((strtotime($b)-strtotime($a))/(24*60*60));
     
    9.取出路径后缀
        //方法一:explode(分隔符,字符串)
        $url='www.test.com/index.php';
        $arr=explode('.',$url);
        $postion=count($arr)-1;
        echo $arr[$postion].'<br>';
        echo end($arr);
     
        //方法二:pathinfo() 返回一个关联数组包含有 path 的信息,包括以下的数组单元:dirname,basename 和 extension。
        print_r(pathinfo($url,PATHINFO_EXTENSION ));//能处理特殊情况
        $info=pathinfo($url);
        echo $info['extension'];
        //方法三:strrchr()函数的作用是:
        //查找一个字符串在另一个字符串中 末次 出现的位置,并返回从字符串中的这个位置起,一直到字符串结束的所有字符;
        //如果未能找到指定字符,那么函数将返回False。
        echo substr(strrchr($url,'.'),1);//echo substr($url,strrpos($url,'.')+1);
        echo substr($url,strrpos($url,'.')+1);
     
    9.PHP如何防止sql注入
    方法一:使用预编译语句,绑定变量
    $query=”insert into myCity  (Name, CountryCode, District) values(?,?,?)”;
    $stmt=$mysqli->prepare($query);
    $stmt->blind_param(“sss”,$var1,$var2,$var3);
    $var1=’jack’;
    $var2=’china’;
    $var3=’sdkjfdd’;
    $stmt->execute();
     
    方法二:使用存储过程(先将sql语句定义在数据库中且尽量避免存储中使用动态的sql)
     
    方法三:输入过滤和编码处理
     
    方法四:检查数据类型
     
    方法五:使用安全编码函数
     
    方法六:从数据库角度来说,要使用最小权限原则
     
    10.简述MVC
        MVC设计模式:
    M 模型 是应用程序中用于处理数据逻辑的那部分,V视图 是应用程序中用于处理数据显示的那部分,C控制器 是应用程序中用于处理用户交互的那部分
    MVC框架:
    强制使应用程序的的输入、处理、输出分开,M 表示企业数据和业务逻辑,多个视图可以同一个模式,减少了代码的重复性。V 表示用户交互的界面,是一种输出方式且能有用户操作。C 表示接受用户的输入并调用模型和视图完成用户的需求。
     
    11.echo(),print(),print_r()的区别
    echo 可以打印多个字符串类型
    print()只能打印一个字符串类型
    print_r() 可以打印复合型 数组,对象等
    其中echo与print是PHP语句没有返回值,print_r是PHP函数有返回值
     
    12.字符串反转
    <?PHP
        
        function getRev($str,$encoding='utf-8'){
            $result = '';
            $len = mb_strlen($str);
            for($i=$len-1; $i>=0; $i--){
                $result .= mb_substr($str,$i,1,$encoding);
            }
            return $result;
        }
        $string = 'OK你是正确的Ole';
        echo getRev($string);
    
    ?>
     
    13.复选框的type属性值:checkbox
     
    14. mysql_info() 函数返回最近一条查询的信息。
     
    15.array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
     
    16.事务是什么?
    事务是执行一个或一组操作时,这些操作在数据库中作为一个整体全部执行或者全部不执行,它具有原子性(也就是说一个事务中的所有操作不可分离)、一致性(必须使数据库处于一致性)、孤立性(未完成的事务不能被其他的用户所见)、持续性(事务一旦提交,就是永久且持续的)。
     
    17.Mysql问题
    ① 某内容管理系统中,表message有如下字段
    id 文章id
    title 文章标题
    content 文章内容
    category_id 文章分类id
    hits 点击量

    创建上表,写出MySQL语句
     

    2. 同样上述内容管理系统:表comment记录用户回复内容,字段如下
    comment_id 回复id
    id 文章id,关联message表中的id
    comment_content 回复内容
     


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

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

    用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
     
    select message.id,message.title,message.hits,count(comment.id) as comment  from message,comment where message.id=comment.id group by comment.id order by c omment desc;
     
  • 相关阅读:
    【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal
    【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal
    【leetcode】236. Lowest Common Ancestor of a Binary Tree
    【leetcode】235. Lowest Common Ancestor of a Binary Search Tree
    【leetcode】352. Data Stream as Disjoint Intervals
    【leetcode】897. Increasing Order Search Tree
    【leetcode】900. RLE Iterator
    BEC listen and translation exercise 26
    BEC listen and translation exercise 25
    BEC listen and translation exercise 24
  • 原文地址:https://www.cnblogs.com/lantian00/p/5267573.html
Copyright © 2011-2022 走看看