PHP最新面试题2019

 

1、字符串"0"在PHP和js中转换为布尔值是false还是true

php:false;  php 弱语言 '0'和0一样;

js:true;字符串除了空字符串('')其他都是true(包括' '这种中间有空格的);

2、echo, print,print_r,var_dump 区别

echo 语言结构,并不是真正的函数,可以一次输出多个值,多个值之间用逗号分隔。

print 是函数,只能输出一个值。

print_r 能打印数组,对象。

var_dump 能打印数组,对象,并且带数据类型。

3、程序 $a = "www"; settype($a,'array'); (string)$a; floatval($a); echo gettype($a); 运行后输出结果:

array  原因:settype会改变原值的数据类型,string,floatval属于强制转换,不改变原值的数据类型。

4、用PHP实现冒泡排序算法。

// 控制轮次数
for ($i = 1; $i < count($arr); $i++) {
    控制次数,并判断大小交换位置
    $j = 0; $j < $arr) - $i; $j++) {
        如果当前值大于后面的值
        if ($arr[$j] > $j + 1]) {
             交换
            $temp = $j];
            $j] = $j + 1] = $temp;
        }
    }
}

5、一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的 进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。

 $n猴子个数 $m第几个位置
function fn($n,$m)
{
    将猴子数量放到数组内
    $i < $n + 1; ) {
        $arr[] = $i;
    }
    $i = 0;
    当数组内只剩下一个值跳出数组
    while ($arr) > 1遍历数组,判断当前猴子是否为出局序号,如果是则出局,否则放到数组最后
        if (($i + 1) % $m == 0) {
            当循环次数满足m值 去除掉当前值
            unset(]);
        } else {
            不满足循环次数 放到数组对尾
            array_push($arr,1)">]);
            删除掉当前循环内容
            ]);
        }
        ;
    }
    return $arr;
}
 调用
var_dump(fn(15,7));

6、分表,分区,分库,难点是什么?怎么均匀存储数据?

分表:即把一个很大的表的数据分到几个表中。

分表又分为垂直拆分和水平拆分。

垂直拆分:把字段拆分;可以把不常用的字段放一张表,把大字段放一张表,把常用的字段放一张表。

水平拆分:把表数据拆分;可以通过id取模的方式拆分数据,比如要拆分成100张表,user0,user1,user2......,id%100得到的余数即存储到哪张表。

分表难点:按什么策略来分表;分表后该怎么查询数据(什么情况下该访问哪张表)。

 

分区:所有的数据还在一个表中,但物理存储数据根据一定的规则存放在不同的文件中,文件也可以放到不同的磁盘上。分区的类型:range分区,list分区,hash分区和key分区。

常见分区方式:

1、根据时间间隔分区,比如以年为单位,分区存储数据。

2、根据自增的主键id,hash(id div 10000000) 表示100万数据建立一个分区。

 

分库:把数据分几个库存储。分为垂直分库和水平分库。

垂直分库:根据表来分数据库,同一类型的表一个数据库;比如博客一个数据库,论坛一个数据库。

水平分库:根据某些规则,将同一个表的数据分布在不同的库上;比如根据用户id把用户的博客文章分布在5个数据库上。

7、PHP中单引号和双引号的区别。

在一般情况下,单引号和双引号是可以互通的,但双引号内部变量会解析,而单引号内部变量不解析

8、require()和include()的区别。

都是引入别的页面;

require()出现错误,会终止程序;而include()则会继续执行,并会显示一个错误警告;

在实际项目中,一般使用require_one()更好。

9、PHP中超全局变量,魔术变量,魔术方法:

超全局变量(9个):

参考:https://www.php.net/manual/zh/language.variables.superglobals.php

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

$_SESSION

魔术变量(8个):

__LINE__    文件中的当前行号。

__FILE__    文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

__DIR__     文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

__FUNCTION__    返回该函数被定义时的名字(区分大小写)

__CLASS__    返回该类被定义时的名字(区分大小写)。

__TRAIT__    Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

__METHOD__     返回该方法被定义时的名字(区分大小写)。

__NAMESPACE__    当前命名空间的名称(区分大小写)。

魔术方法:

参考:https://www.php.net/manual/zh/language.oop5.magic.php

10、栈和队列

栈:是允许在同一端进行插入和删除的特殊线性表。

栈也称为先进后出表。

注:线性表是最基本,最简单,也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系。

队列:是一种特殊的线性表。特殊之处在于只允许在前端进行删除操作,在表的后端进行插入操作。

队列也称为先进先出表。

11、对称加密和非对称加密

对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。 

常见的对称加密算法:DES,AES,3DES等等。

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 

常见的非对称加密算法:RSA,ECC(移动设备用),DSA(数字签名用)

12、时间复杂度和空间复杂度

算法复杂度分为时间复杂度和空间复杂度。

其作用:时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

13、抽象类和接口的区别

参考:https://blog.csdn.net/sunlylorn/article/details/6124319

14、PHP创建多级目录

function makedir($pathif (is_dir()){
        echo "目录已存在";
    } {
        $res = mkdir($path,0777,true);
        $resecho "创建成功";
        } echo "创建失败";
        }
    }
}

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

function writeData($filepath,1)">$data)
{
    $fp = fopen(以追加的方式打开文件,返回的是指针
    do {
        usleep(100);    暂停执行程序,参数是以微秒为单位的
    } while (!flock($fp,LOCK_EX));  LOCK_EX 取得独占锁定(写入的程序)进行排它型锁定 获取锁 有锁就写入,没锁就得
    fwrite($data . "\n");   以追加的方式写入数据到打开的文件
    LOCK_UN 释放锁定(无论共享或独占)。
    fclose($fp);  关闭打开的文件指针
    ;
}

16、PHP的is_writeable()函数存在Bug,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写。

下面是CodeIgniter 中的is_really_writable函数解决方案,详见函数注释

其中bug存在两个方面,

1、在windowns中,当文件只有只读属性时,is_writeable()函数才返回false,当返回true时,该文件不一定是可写的。

如果是目录,在目录中新建文件并通过打开文件来判断;

如果是文件,可以通过打开文件(fopen),来测试文件是否可写。

2、在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。

读取配置文件是否safe_mode是否开启。

/**
 * Tests for file writability
 *
 * is_writable() returns TRUE on Windows servers when you really can't write to
 * the file,based on the read-only attribute. is_writable() is also unreliable
 * on Unix servers if safe_mode is on.
 *
 * @access private
 * @return void
 */
if ( ! function_exists('is_really_writable')) {
    function is_really_writable($file)
    {
         If we're on a Unix server with safe_mode off we call is_writable
        if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSEreturn is_writable();
        }
 
         For windows servers and safe_mode "on" installations we'll actually
        // write a file then read it. Bah...
        )) {
            $file = rtrim($file,'/') . '/' . md5(mt_rand(1,100) . ));
 
            $fp = @) {
                ;
            }
 
            $fp);
            @chmod( DIR_WRITE_MODE);
            @unlink();
            TRUEelseif (!is_file($file) OR (;
        }
 
        ;
    }
}

17、php中去除一个字符串中非字母部分

preg_replace('/[^a-z]/i','',1)">$str);

18、将一个字符串去除字符串中非字母部分,并将字符串中’_‘号后面首字母和字符串首字母大写,如a2b_ab23c得到AbAbc。

function getStr($str [^a-z]用来匹配任何不在a和z之间的字符,i表示不区分大小写。
    $str = preg_replace('/[^a-z_]/i',1)">);
    $arr = explode('_',1)">);
    foreach($arr as $key=>$value){
         ucfirst()首字母大写
        $key] = ucfirst();
    }
    implode('',1)">echo ;
}
getStr('a2b_ab23c');

19、使用js实现进入一个页面10s后弹出提示框,提示框内容为‘hello world’。

setTimeout("alert('hello world')",10000)

20、写一个sql语句查询表A中user_name字段重复出现两次以上的所有数据。

SELECT user_name,COUNT(user_name) AS num 
        FROM A GROUP BY user_name HAVING num >=2;

注意

  • having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
  • where肯定在group by 之前。
  • where后的条件表达式里不允许使用聚合函数,而having可以。

21、redis内存满了之后怎么处理的

参考博客:https://blog.csdn.net/qq_28018283/article/details/80764518

如果达到设置的上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将Redis当缓存来使用配置淘汰机制,当Redis达到内存上限时会冲刷掉旧的内容。有5中内存淘汰机制,具体看参考博客。

22、PHP互换两个变量值的方法(不用第三变量)

function exchange()
{
    *
     * 双方变量为字符串或者数字时,可用此交换方法
     * 使用异或运算
     */
    $a = "This is A";  a变量原始值
    $b = "This is B";  b变量原始值
    echo '交换之前 $a 的值:' . $a . ',$b 的值:' . $b,'<br>';  输出原始值
    *
     * 原始二进制:
     * $a:010101000110100001101001011100110010000001101001011100110010000001000001
     * $b:010101000110100001101001011100110010000001101001011100110010000001000010
     *
     * 下面主要使用按位异或交换,具体请参照下列给出的二进制过程,
     $a = $a ^ $b;  此刻$a:000000000000000000000000000000000000000000000000000000000000000000000011
    $b = $b ^ $a;  此刻$b:010101000110100001101001011100110010000001101001011100110010000001000001
     此刻$a:010101000110100001101001011100110010000001101001011100110010000001000010
    echo '交换之后 $a 的值:' .  输出结果值
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


前段时间专心面过腾讯,经过了N轮的技术面,结果还是挂了,但没挂在技术面,比较欣慰,回来之后写一点总结,以供有梦想进入腾讯做后台服务器开发的同学参考,本文章为胡成精心总结,胡成原创,copy和转载请通知
1)tcp三次握手的过程,accept发生在三次握手哪个阶段?2)Tcp流, udp的数据报,之间有什么区别,为什么TCP要叫做数据流?3)const的含义及实现机制,比如:const int i,是
1.get,post 的区别 1、GET在浏览器回退时是无害的,而POST会再次提交请求。2、GET产生的URL地址可以被Bookmark,而POST不可以。3、GET请求会被浏览器主动cache,而
1、优化 MYSQL 数据库的方法 (1) 选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置 NOT NULL, 例如’省份,性别’, 最好设置为 ENUM (2) 使用连接(JOIN)来
程序员找工作必备 PHP 基础面试题​ 程序员找工作必备 PHP 基础面试题(二) 1. 写出下面的程序输出的结果 $str=&quot;cd&quot;; $$str=&quot;abcde&quo
1、我们知道&#160;autoload 可以实现类的自动载入,如何把一个类 splDemo 的方法&#160;autoload 注册成为一个__autoload (关键词:spl) abstract
程序员找工作必备 PHP 基础面试题​ 程序员找工作必备 PHP 基础面试题(二)​ 程序员找工作必备 PHP 基础面试题 (三) 一、在 HTTP1.0 中,状态吗 500 的含义的是什么?如果返回
2020年PHP 面试问题(一) 2020年PHP 面试问题(二) 一.数据库三范式 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是对记录的惟一性约束,要求
一.什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系? CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求通过WE
1.PHP 如何实现不用自带的 cookie 函数为客户端下发 cookie。对于分布式系统,如何来保存 session 值。 这个题有点绕。考的还是 COOKIE 和 SESSION 的基础知识。服
1、PHP 语言的一大优势是跨平台,什么是跨平台? PHP 的运行环境最优搭配为 Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如 windows、Linux 等)上配置,不受操作
如何直接将输出显示给浏览器? 将输出直接显示给浏览器,我们必须使用特殊标记 &lt;?=and?&gt;。 PHP 是否支持多重继承? PHP 只支持单继承。PHP 的类使用关键字&#160;exte
1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redi
原文链接 分享:[分享] 大环境下瑟瑟发抖辞职的第二天,拿了两个 offer 面试题解析 看你简历里也有用过 Go,Go 和 PHP 在运行的时候有什么区别和优势? 题主原回答:PHP 每个请求进来时
推荐视频:面试10家公司,收获9个offer,2020年PHP 面试问题 第一阶段1-2年 我认为1-2年对于PHP程序员来说是第一个门槛,这一阶段菜鸟正式从理论迈向企业级开发。我们知道如何使用工具、
1、什么是rabbitmq 采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦 2、为什么要使用rabbitmq 1. 在分布式系统下具
前言 日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题。 面试10家公司,收获9个offer,2020年PHP 面试问题 一
是什么 ,在什么地方用,注意什么,特点,如何配置(相关关联),出现的问题(缺点),引出解决办法或另一种方法-PHP:Hypertext Preprocessor一、get和post的区别1. get是从服务器上获取数据,post是向服务器传送数据。2. get是把参数数据队列加到提交表单的ACTIO
Php1、表单中get与post提交方法的区别?答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.2、session与cookie的区别?答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_d