画江湖之面试篇 [第一篇] tip:基础是每个程序员必须的

krisji 带你分析以往php面试题,各位小伙伴们赶紧上车咯~

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

大家觉得是不是狠easy~ no 前面有个坑 仔细看5-10 这是什么? 记住必须答成这种格式~

答案看下面区域:

date_default_timezone_set('PRC');//设置中国区域
echo date('Y-n-d H:i:s');//仔细看`n-d` 对应就是输出5-10 而不是10-5

第二题:

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

这道题呢?主要考察大家的基础好不好 接下里我带你们一起写一下

答案看下面区域:

1 字符串转数组

$str='www.baidu.com';
print_r(str_split($str));//第一种按照长度 去切割字符串变成数组
var_dump(explode('.',$str));//第二种 用explode 按照某个字符串 去切割这个字符串变为数组

2 数组转字符串

$arr=array("aaa","bbb","ccc");
print_r(implode('',$arr)); //join() 这个函数不知道小伙伴们用过没有 其实join() 函数是 implode() 函数的别名 没什么区别!

3 字符串截取

substr($str,1,10); 
mb_substr mb_strcut//这2个函数 后面是为了解决中文乱码的问题

4 字符串替换

$bodytag = str_replace("%body%", "black", "<body text='%body%'>"); 

preg_replace();//这个函数是通过正则去替换咯 看下方事列
$string = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';//写入正则格式 不会正则自己去补充
$replacement = 'runoob ${2},$3';//${} 代表你要替换的哪个元素
echo preg_replace($pattern, $replacement, $string);

5 字符串查找

preg_match()//正则查找 返回的是匹配的次数 看下方事列
//模式分隔符后的"i"标记这是一个大小写不敏感的搜索
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "查找到匹配的字符串 php。";
} else {
    echo "未发现匹配的字符串 php。";
}

preg_grep() //函数用于返回匹配模式的数组条目。 看下方事列
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮点数的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array);

strstr() //函数搜索字符串在另一字符串中的第一次出现。看下方事列
查找 "Shanghai" 在 "I love Shanghai!" 中的第一次出现,并返回字符串的剩余部分:
echo strstr("I love Shanghai!","Shanghai");
Shanghai!

strpos() //函数查找字符串在另一字符串中第一次出现的位置 记住返回是int 就是索引的位置
strrpos() //函数查找字符串在另一字符串中最后一次出现的位置 记住返回是int 就是索引的位置

第三题:

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

这道题呢?主要考察大家对面向对象的基础理解

答案看下面区域:

1)protected 被保护的 
2)public 公有的 
3)private 私有的 
4)interface 接口 
5)abstract 抽象类 
6)final 最后的类和方法  //这个大家不知道用的多不多 特别解释下 final定义的类不能被继承
7)static 静态方法和属性

第四题:写出下列代码的数据结果?

这道题呢?主要考察大家对正则的理解 和对 PHP函数的理解

答案看下面区域:

$date='08/26/2003'; 
echo preg_replace("/([0-9]+)\/([0-9]+)\/([0-9]+)/","\${3}/\${1}/\${2}",$date); 
输出为2003/08/26 记住正则这个()代表子表达式 代表要匹配的子元素

第五题:

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

这道题呢?主要考察大家对sql 语句的基础掌握

答案看下面区域:

select * from login where name like "%admin%" limit 10;

第六题:简述论坛中无限分类的实现原理?

这道题呢?主要考察大家对mysql 的建表理解

建立以下字段:id name pid path 其中pid 就是指向父类的id

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

这道题呢?主要考察大家对php 函数的掌握


$str="http://www.test.com.cn/abc/de/fg.php?id=1";//先定义一个字符串
$str2=getExt($str);
echo $str2;
function getExt($url){
    $arr = parse_url($url);//通过此函数解析url 地址

//    var_dump($arr);
    /*
     * array(4) {
          ["scheme"]=>
          string(4) "http"
          ["host"]=>
          string(15) "www.test.com.cn"
          ["path"]=>
          string(14) "/abc/de/fg.php"
          ["query"]=>
          string(4) "id=1"
        }
     */
    $file = basename($arr['path']);//显示带有文件扩展名的文件名
    var_dump($file);
        /*
         * string(6) "fg.php"
         */
    $ext = explode(".",$file);//最后通过此函数切割字符串
    return $ext[1];//取出第一个就是后缀咯~
}

第八题:描述一下大流量高并发量网站的解决方案?

这道题呢?主要考察处理过高并发能力

对比现实中饭店一下子同一个时间段来吃饭 比方中午
1 把这个店面面积扩大点,增加同时吃饭人数
   服务器优化:我们把apache服务器只支持(3000并发)可以换成nginx服务器(3w并发)
2 多找点服务员和厨师嘛  
   服务器优化:修改apache,nginx的默认配置,把其中的并发数调到最高嘛
3 多开一些店 连锁店
   服务器优化:多增加几台服务器同时对客户提供网络服务 lvs nginx 做负载均衡
4 限时客户在我们店吃饭的时间 不能让他们吃完还打牌把
   服务器优化:减少客户在服务器上的连接断开时间 比方mysql 的连接断开时间 wait_timeout这个参数最多的连接时间 不能让客户恶意一直连着
5 给厨师培训 减少他的上菜时间
   那就要给php代码做优化
6 让厨师叫手下把菜提前做好 放到冰箱里面
   redis 缓存 文件缓存

第九题:如何设计或配置 Mysql,才能达到高效使用的目的?

这道题呢?主要考察处理过mysql 优化

1 mysql服务器主从配置 降低单机下mysql的负载 可以读写分离
2 表分区
3 索引优化 用desc 或者开启慢查询日志解析sql语句 看哪个字段是否需要优化
4 分库分表 进行垂直拆分和水平拆分

第十题:如何进行防 SQL 注入?

这道题呢?主要考察如何处理安全措施

1 表单尽量用 post 提交,核心用户验证都走 post,避开 get容易暴露客户数据
2 使用HTTP_REFERER 检查源文件是否来自本系统
3 开启addslashes在特殊符号前加\
4 使用htmlspecialchars对字符串转实体
5 用户授权登录
6 使用PDO
本作品采用《CC 协议》,转载必须注明作者和本文链接
附言 1  ·  5年前

【不阶段的更新~每次更新10道面试题】

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

非常好,加油更新!

5年前 评论
  1. ..
    echo date('Y-n-d H:i:s'); // 2019-3-21 16:26:15
    echo date('Y-m-d H:i:s'); // 2019-03-21 16:26:15
    这里 m 和 n 的区别是:使用 n 的话数字表示的月份,没有前导零
  2. 第三题多处写错应为: protected
5年前 评论

已修正 :blush:

5年前 评论

ok~记得关注

5年前 评论

给厨师培训 减少他的上菜时间

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!