PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > 一些常见的php面试题

一些常见的php面试题

小程_武汉_214945
小程_武汉_214945 原创
2020年08月10日 16:19:02 648浏览
  • 谈谈你对MVC的理解
    Model - 数据模型层:通常情况下对数据进行加工,进行一些其他的处理,与数据相关的一些操作都在 Model层 操作。
    View - 视图层:跟用户进行交互的一些界面上的东西。
    Controller - 控制层:用来处理业务逻辑的。

  • 什么是面向对象?它的特征是什么
    面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
    面向对象编程三大特性
    (1).封装性
    简单形象的解释就是,把功能放在一个盒子里,要用到这个功能的时候,打开盒子,取出就可以使用。
    (2).继承性
    子类自动继承一个或多个父类中的属性与方法,并可以重写或者添加新的属性或方法。
    这个特性简化了类和对象的创建,提高了代码的可重用性。
    (3).多态性
    指的是一个类可以创建多个对象,获取不同的结果。

  • public、private、protected的区别详解

    public 表示公有的,类内部外部子类都可以访问;
    private 表示私有的,只有本类内部可以使用;
    protected 表示受保护的,只有本类或子类或父类中可以访问;

  • 如何解决php跨域问题

  1. header("Access-Control-Allow-Origin: *"); * 表示所有
  • echo(),print(),print_r(),var_dump()的区别

    echo可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。echo是php的内部指令,不是函数,无返回值。

    print():函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。只能打印出简单类型变量的值(如int,string),有返回值

    printf():源于C语言中的printf()。该函数输出格式化的字符串。

    print_r()和var_dump()

    print_r()可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印”\n”。因此用var_dump()函数更适合调试。print_r是函数,可以打印出比较复杂的变量(如数组,对象),有返回值

    var_dump()判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

  • 如何实现冒泡排序

  1. class maopao{
  2. public static function paixu($arr){
  3. $len = count($arr);
  4. for ($i = 0; $i < $len -1; $i++) {//循环对比的轮数
  5. for ($j = 0; $j < $len - $i - 1; $j++) {//当前轮相邻元素循环对比
  6. if ($arr[$j] > $arr[$j + 1]) {//如果前边的大于后边的
  7. $tmp = $arr[$j];//交换数据
  8. $arr[$j] = $arr[$j + 1];
  9. $arr[$j + 1] = $tmp;
  10. }
  11. }
  12. }
  13. return $arr;
  14. }
  15. }
  16. $maopao = new maopao();
  17. $arr = [5,9,8,4,3,7,1,25];
  18. $res = $maopao::paixu($arr);
  19. var_dump($res);
  • 如何实现快速排序
  1. class quickSort{
  2. //递归方式 递归指的是在函数内部,调用函数自身的操作。
  3. public function quickSort1($arr)
  4. {
  5. $len = count($arr);
  6. if ($len<2){
  7. return $arr;
  8. }
  9. $min = $max = $base = [];
  10. $base_item = $arr[0];
  11. for ($i=0; $i<$len; $i++){
  12. if ($arr[$i]<$base_item){
  13. $min[] = $arr[$i];
  14. }elseif($arr[$i]>$base_item){
  15. $max[] = $arr[$i];
  16. }else{
  17. $base[] = $arr[$i];
  18. }
  19. }
  20. $min = $this->quickSort1($min);
  21. $max = $this->quickSort1($max);
  22. return array_merge($max,$base,$min);
  23. }
  24. //非递归
  25. public function quickSort($arr)
  26. {
  27. $borderStack[] = [0, count($arr) - 1]; //数组边界
  28. while (!empty($borderStack))
  29. {
  30. $border = array_pop($borderStack);
  31. $left = $border[0];
  32. $right = $border[1];
  33. $pivot = $arr[$left]; // 分界值
  34. while ($left < $right)
  35. {
  36. while ($left<$right && $arr[$right] >= $pivot) $right--;
  37. $arr[$left] = $arr[$right];
  38. while ($left<$right && $arr[$left] < $pivot) $left++;
  39. $arr[$right] = $arr[$left];
  40. }
  41. //$left 等于 $right :
  42. $arr[$left] = $pivot;
  43. if ($border[0] < $left - 1) $borderStack[] = [$border[0],$left-1];
  44. if ($border[1] > $left + 1) $borderStack[] = [$left+1, $border[1]];
  45. }
  46. return $arr;
  47. }
  48. }
  • POST和GET的区别
    get 通过url地址栏提交,长度有限且不安全,会被浏览器缓存
    post 通过表单提交,安全性较高,数据传输量大

  • SESSION 与COOKIE 的区别是什么,请从协议,产生的原因与作用说明?

    HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。于是需要引入一种机制,COOKIE于是就顺应而生。

    Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。

    session依赖于cookie ,如果关闭cookie,则session失效,

    区别:(位置,大小,安全)

    1、cookie 是存放在浏览器端,不同的浏览器存储的cookie数量和数据的大小都不一致。大多数情况下单个域名限制最多保存20个cookie,每个cookie保存的数据不能超过4K。

    2、session存储在服务端,默认是以文件的形式存储,也可以存储在数据库和redis、memcache等缓存内存中。

    3、session是占用的服务器内存,所以内存越大,能存的值就越大,原则上讲无上限,一般用于存储对安全要求较高的重要数据;

    4、设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话

  • 请写出常见的http状态码并解释其含义
    200 OK 请求成功
    204 请求成功,但没有资源可以返回
    301 永久重定向
    302 临时重定向
    303 资源被分配到新的url 用get请求
    400 语法错误
    401 未经许可
    403 拒绝访问 权限问题
    404 无法找到资源
    500 表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误
    503 表示服务器暂时处于超负载或正在进行停机维护,无法处理请求

  • isset() 和 empty() 区别

    isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。

  • 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?

    按值传递:函数范围内对值的任何改变在函数外部都会被忽略

    按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

    优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

  • 在PHP中error_reporting这个函数有什么作用?

    设置 PHP 的报错级别并返回当前级别。

  • @foo()和foo()的区别
    @foo()控制错误输出,foo()正常表达

  • include、require的区别,引用一次可以用什么代替
    include 如果遇到错误 产生警告,程序继续执行
    require 遇到错误 产生报错 程序终止执行
    include_once
    require_once

  • 如何用php获取指定目录下的所有子目录以及文件

  1. function searchDir($path,&$files){
  2. if(is_dir($path)){
  3. $opendir = opendir($path);
  4. while ($file = readdir($opendir)){
  5. if($file != '.' && $file != '..'){
  6. searchDir($path.DIRECTORY_SEPARATOR.$file, $files);
  7. }
  8. }
  9. closedir($opendir);
  10. }
  11. if(!is_dir($path)){
  12. $files[] = $path;
  13. }
  14. }
  15. //得到目录名
  16. function getDir($dir){
  17. $files = array();
  18. searchDir($dir, $files);
  19. return $files;
  20. }
  21. $filenames = getDir('E:\test');
  22. foreach ($filenames as $value){
  23. echo $value.'<br/>';
  24. }
  • 写出php常用的时间函数
  1. time(); //当前时间戳
  2. date('Y-m-d H:i:s'); //当前时间
  3. strtotime();//日期转时间戳
  4. date('Y-m-d H:i:s',strtotime('+1 Months')); //获取下个月的当前时间
  5. date('Y-m-d H:i:s',strtotime('+1 Day')); //获取明天的当前时间
  6. date('Y-m-d H:i:s',strtotime('+1 Week')); //获取下周的当前时间
  7. $weekarray=array("日","一","二","三","四","五","六");
  8. echo "星期".$weekarray[date("w")]; //今天星期几
  9. echo "星期".$weekarray[date("w",strtotime("2020-8-20"))] //指定时间
  10. //获取两个日期之间的相差天数
  11. function between_date1($startdate,$enddate){
  12. $startdate = strtotime($startdate);
  13. $enddate = strtotime($enddate);
  14. return abs(round(($enddate-$startdate)/3600/24)) ;
  15. }
  16. function between_date2($startdate,$enddate){
  17. $datetime_start = new DateTime($startdate);
  18. $datetime_end = new DateTime($enddate);
  19. $days = $datetime_start->diff($datetime_end)->days;
  20. return $days;
  21. }
  • 如何避免截取中文字符出现乱码
  1. $str = mb_substr($str, 0, 2);
  • 如何理解git并写出几个常用命令
    git是分布式版本控制系统
  1. git config --global --list # 查看所有仓库的配置信息
  2. git config --local --list # 查看某个指定范围的仓库的配置信息,执行这个命令需先建立一个仓库
  3. git config --system --list #查看所有系统用户的仓库信息
  4. git config --global user.name '用户名'
  5. git config --global user.email '有效的邮箱地址'
  6. git clone 'http 地址\ ssh 地址' #克隆远程仓库到本地
  7. git init '仓库名字' #创建本地仓库
  8. cat readme.txt #查看文件
  9. git status #查看状态
  10. git push # 上传到远程仓库
  11. git add #上传文件
  12. git log #查看日志
  13. git commit -m '备注信息' # 提交代码到本地仓库
  • 写出几个php常用的字符串函数以及数组函数
  1. //字符串
  2. substr() //字符串截取
  3. str_replace() //字符串替换
  4. strpos() //字符串第一次出现的位置
  5. strrpos() //字符串最后一次出现的位置
  6. strlen() //计算长度
  7. mb_strlen() //中文字符计算长度
  8. trim() //去除字符串首尾空格和特殊字符,并返回处理后字符串
  9. explode() //字符串拆分为数组
  10. strtoupper() //字符串转大写
  11. strtolower() //字符串转小写
  12. strstr("Hello world!","world"); //查找 "world" 在 "Hello world!" 中是否存在,如果是,返回该字符串及后面剩余部分
  13. //数组
  14. array_flip() //交换数组中的键和值
  15. array_slice() //返回数组中被选定的部分
  16. array_unique() //删除数组中的重复值
  17. array_key_exists() //检查指定的键名是否存在于数组中
  18. array_combine() //通过合并两个数组来创建一个新数组
  19. count() //数组长度
  20. array_merge() //把一个或多个数组合并为一个数组
  21. array_pop() //删除数组的最后一个元素(出栈)
  22. array_push() //将一个或多个元素插入数组的末尾(入栈)
  23. array_sum() //返回数组中值的和
  24. array_diff() //比较数组,返回差集(只比较键值)
  25. array_diff_assoc() //比较数组,返回差集(比较键名和键值)
  • 什么是JSON、php相关函数
    JSON是一种轻量级的数据交换格式,是独立的语言。
    json_encode、json_decode
  • 请用jquery写一段ajax请求
  1. $.ajax({
  2. type: 'POST',
  3. url: url,
  4. data: data,
  5. dataType: 'json'
  6. success: function(msg){
  7. console.log(msg)
  8. },
  9. });
  • 对于大流量的网站,采用什么方法来解决访问量问题

1.优化SQL语句 优化索引
2.加缓存,memcached, redis;
3.禁用外部倒链
4.控制大文件的下载
5.主从复制,读写分离
6.分表分库 ,水平拆分,垂直拆分

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议