您的位置 首页 php

PHP面试10佳题

金三银四,金九银十,都是每年离职跳槽的旺季;

钱给够了吗?心委屈了吗?

裸辞一时爽,待业人会慌。

看准机会,说出手时就出手,风风火火高薪走。

以下是朋友面试收集的一些面试题,希望对大伙有帮助。(公众号:倒影Amoy,持续更新ing)

  1. 经典面试50题:

(此题网上搜下,最好多亲手测试写过一遍sql)

2. tp5的生命周期:

 2.1.入口文件:定义应用目录,加载引导文件
 2.2.引导文件,进行一些常量的加载,机制的注册;加载系统常量定义、环境变量定义、注册自动加载机制、注册错误和异常处理机制;执行应用
 2.3.应用类进行一些初始化;加载应用配置、别名定义、行为定义、注册命名空间、加载扩展配置文件、设置默认时区、系统语言包
 2.4.URL检测;获取到请求地址信息,请求必须为PATHINFO格式,否则为非法
 2.5.路由检测;如果开启路由检测,优先将URL与路由进行匹配,匹配成功走调度
 2.6.请求分发;最重要的环节,URL根据不同的调度找到控制器,经过一系列的代码后,得到结果
 2.7.响应输出;return后,就会有response类将结果输出到客户端
 2.8.程序结束;
 2.9.日志一般在生命周期完成的时候写入;
 

3. 去除下划线 首字母大写 (实现 字符串 中”open_door”转换成”OpenDoor”)

ucwords(string) //每个单词首字母大写
ucfirst(string) //字符串第一个字母大写
strtolower(string) //字符串转换成小写
strtoupper(string) //字符串转换成大写
 //方法一
function change($str) {
 $arr =  explode ('_',$str);
 foreach($arr as $key=>$val) {
 $newStar = strtoupper(substr($val,0,1));
 $other = substr($val,1);
 $tarr[] = $newStar.$other;
 }
 return implode("",$tarr);
}
//方法二比较简单
function change2($str) {
 $arr = explode('_',$str);
 foreach($arr as $key=>$val) {
 $tmp = ucfirst($val);
 $tarr[] = $tmp;
 }
 return implode("",$tarr);
}
 

4. 传递赋值和引用赋值

4.1传递赋值

1 $a = 1;
2 $b = 2;
3 $a = $b;
4 echo $a,$b; //结果为:2 2
 

4.2引用赋值

$a = 1;
$b = 2;
$a = &$b; //将$b的地址赋予$a,指向同一块内存地址,则$a与$b的值相等了
$b = 3;
echo $a,$b; //结果为:3 3
unset($b);
echo $a; //结果为:3 
// 变量机制:假如多个变量指向同一地址,取消一个变量,其他变量不受影响 ;
//unset并没有真正销毁变量的作用...仅仅是切断了变量与内存之间的关系,内存只要还被引用着就不会被释放; $b和$a同时指向3,切断其中$b的关系,$a还是指向3,
// 假如将所有指向该地址的变量都取消了,则变量的结果为 null
 

4.3 在PHP中对象的传值默认是引用传值

 class  demo 
{
 public $demo = "aaaa";
}
$demo1 = new Demo();
$demo2 = $demo1;
echo $demo2->demo . "<br />";
$demo1->demo = "bbbb";
echo $demo2->demo . "<br />";
//运行结果为 aaaa bbbb 
 

5. 什么是 析构函数 ,而PHP中对象销毁的方式有哪些

对象的销毁

1.显试销毁: 当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL;

2.隐试销毁:PHP是脚本语言,在代码执行完最后一行时,所有申请的内存都要释放掉;

 class King 
 { 
 public $name = '老王'; 
 public $gender = null; 
 public function __destruct() { 
 echo '没了'; 
 } 
 } 
 $a = new Human(); 
 $b = $c = $d = $a;
 unset($a); 
 //析构函数究竟是触发了几次,是在线上触发,还是在线下触发????
 ## $b = $c = $d = $a;默认引用传值,四个变量指向同一处内存,
 ## unset的时候对象还是被还是其它三个变量使用,
 ## 所以对象并没有被销毁,所以析构函数是在线下触发的(代码执行完了,内存自动释放)
 class King 
 { 
 public $name = '老王'; 
 public $gender = null; 
 public function __destruct() { 
 echo '没了'; 
 } 
 } 
 $a = $b = $c = new Human(); 
 unset($a); 
 unset($b); 
 unset($c); 
 //析构函数究竟是触发了几次,是在线上触发,还是在线下触发????
 ## 三个变量指向同一处内存,
 ## 线上触发;在代码运行完自动释放内存之前由于对象已经没有被任何变量引用所以就自动释放了内存....
 

6. $$两个美元符号赋值

 $a = 'hello';
 $$a = 'world';
 echo "$a ${$a}";
 //结果为hello world
 #第二行可译为:$hello = “world”
 #第三行:$a $hello
 

7.https协议的原理:

8.表达式答题:

 1.问:a大于b成立时:如果a小于c,那么x=c-a否则x=a-c;否则a小于b成立时:如果b小于c,那么x=c-b否则x=b-c:
 答:
 $a>$b ? $x=($a<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);
 2.问:表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
 答:
 select (case when a>b then a else b end ),(case when b>c then b esle c end) from table_name
 

9. 单引号和双引号的差别

 $foo = 2; 
 echo "foo is $foo"; // 打印结果: foo is 2 
 echo 'foo is $foo'; // 打印结果: foo is $foo 
 echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行) 
 echo 'foo is $foo\n'; // 打印结果: foo is $foo\n  
 

10. intval(0.58*100)输出 57

 intval(0.68*100)输出 68 
 intval(0.56*100)输出 56
 intval(0.57*100)输出 56
 intval(0.58*100)输出 57
 intval(0.59*100)输出 59
 // 为什么只是0.57*100和0.58*100会特殊呢?
 ## 简要说来就是:主要是因为 intval 函数的规则是,从第一个数字开始,知道遇到不是数字的字符,结束。
 ## 看似有穷的小数, 在计算机的 二进制 表示里却是无穷的
 # 问:要把小数装入计算机,总共分几步?
 1.转换成二进制 (有可能 丢失精度)
 2.用二进制科学计算法表示
 3.表示成 IEEE 754 形式 (有可能 丢失精度)
  浮点数 的表示(IEEE 754):
 浮点数, 以64位的长度(双精度)为例, 会采用1位符号位(E), 11指数位(Q), 52位尾数(M)表示(一共64位).
 符号位:最高位表示数据的正负,0表示正数,1表示负数。
 指数位:表示数据以2为底的幂,指数采用偏移码表示
 尾数:表示数据小数点后的有效数字.
 0.58 对于二进制表示来说, 是无限长的值(下面的数字省掉了隐含的1)..
 0.58的二进制表示基本上(52位)是: 0010100011110101110000101000111101011100001010001111
 0.57的二进制表示基本上(52位)是: 0010001111010111000010100011110101110000101000111101
 而两者的二进制, 如果只是通过这52位计算的话,分别是
 0.58 -> 0.57999999999999996
 0.57 -> 0.56999999999999995
 浮点数的四舍五入和咱们普通的数学里面的也是不同的,浮点数遇到 5 后,不一定总是入,有时也舍
 

文章来源:智云一二三科技

文章标题:PHP面试10佳题

文章地址:https://www.zhihuclub.com/77794.shtml

关于作者: 智云科技

热门文章

网站地图