php2017面试题
1.写出创建多级目录的函数(新浪校招)
function mkdirs($dir,$chmod)
{
if(is_dir($dir)){
return "目录已存在";
}
if(mkdir($dir,$chmod,true)){
return "成功";
}
return "失败";
}
echo mkdirs('./aa/bb/cc',777);
2.函数内部 static 和 global 关键字的作用、
$b =1;
function foo()
{
static $a = 1;
global $b;
$b = $b++;
return $a++;
}
echo $b;
echo foo();
echo foo();
3.子类重写父类的 protected 方法有什么限制?或者说有什么要遵守的规则?
php 继承 子类的权限只能放大
4.谈一谈 PHP 开源框架 CI,ThinkPHP,Laravel 的优缺点及选型依据
问这个题目的面试官都是脑残
5.Memcache 和 Redis 的读写性能(qps)如何?两者优缺点?Redis 支持哪些数据类型?Redis 如何持久化?
6.使用 PHP 下载网络图片,有哪些方法?
1.file_get_contents($file_url);
2.使用CURL
3..使用fopen
7。什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?
CGI是HTTP Server和一个独立的进程之间的协议,把HTTP Request的Header设置成进程的环境变量,HTTP Request的正文设置成进程的标准输入,而进程的标准输出就是HTTP Response包括Header和正文。
FASTCGI是和HTTP协议类似的概念。无非就是规定了在同一个TCP连接里怎么同时传多个HTTP连接。这实际上导致了个问题,有个HTTP连接传个大文件不肯让出FASTCGI连接,在同一个FASTCGI连接里的其他HTTP连接就傻了。所以Lighttpd? 引入了 X-SENDFILE
php-fpm就相当于是Apache+mod_php。无非php-fpm自带了FASTCGI Server,而Apache是HTTP Server。
8.什么是 CSRF 攻击 ?XSS 攻击?如何防范?
XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
CSRF
1、使用token进行验证。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。(使用GET或POST方法加TOKEN)
2、验证HTTP Referer字段。HTTP Referer字段,记录该HTTP请求的来源。如果来源是外部,那么就拒绝这个请求。(这个方法不安全,可以篡改HTTP Referer字段)
3、一般框架,像ThinkPHP、laravel有表单令牌可以做防范。
XSS
最简单的办法,过滤输入。对用户的输入,可以使用htmlspecialchars()等函数进行过滤转义,当然,一些文件上传等,也可能会造成此攻击,要限制上传文件的类型,比如只能传图片等。
9.列举常用的设计模式并说明?单例模式,观察者模式等等
单例 常见的就是数据库操作类~ 观察者 一般应用于一对多处理吧
观察者 定义两个接口 一个观察者 一个被观察者 被观察者 定义一个方法接收多个 观察者的对象循环调用同名方法
代理模式 就是在另一个构造 方法里面 new 另一个对象
10.