1. Get与post两种方式?
ans:
GET->通常用于查询,参数可见不安全,且传值支持的大小不能超过2kb,效率高。
post-> 通常用于修改保存数据,参数不可见比较安全。javascript
2. AJAX的优点是什么?
ans:ajax是异步传输技术,能够经过javascript实现,也能够经过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提升了用户体验。php
3.path相关:html
pathinfo:解析文件(文件名及扩展)java
path_url:解析URL(文件名及路由及参数)mysql
4.left join 与 right joinnginx
left join: 先找出左表全部匹配的数据,右边不匹配的为null程序员
5.如何无限分类ajax
id,parentid,path(相对路径)正则表达式
6. 安全对一套程序来讲相当重要,请说说在开发中应该注意哪些安全机制?
ans:①防远程提交;②防SQL注入,对特殊代码进行过滤;③防止注册机灌水,使用验证码;sql
7. 如何防sql注入?
ans:
SQL注入攻击是黑客对数据库进行攻击的经常使用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者能够在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。
主要两阶段防止:1.用户输入时候的数据校验 2.查询数据库时候的转义。3.尽可能不要用mysql_error来抛出错误(错误信息进行封装)
(1)查询条件尽可能使用数组方式,这是更为安全的方式(post提交);
(2)若是不得已必须使用字符串查询条件,使用预处理机制?;
(3)开启数据字段类型验证,能够对数值数据类型作强制转换;(3.1版本开始已经强制进行字段类型验证了)(safe_mode = on 在php ini 中设置)
(4)使用自动验证和自动完成机制进行针对应用的自定义过滤;(magic_quotes_gpc = on) 对sql 查询进行转换
(5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。
(6)addslashes(特使字符转义) 防止sql注入。
用户输入校验:
/*
过滤用户代码
*/
function security($str){
$str = trim($str); //清理空格
$str = strip_tags($str); //过滤html标签
$str = htmlspecialchars($str); //将字符内容转化为html实体
$str = addslashes($str);
return $str;
}
8. XSS 与 CSRF?
XSS:跨站脚本(cross—site script)发生在客户端,修复方式和防止sql注入相似
ans:注入脚本的一种,例如提交评论中参杂javascript脚本,若是服务器没有进行过滤或转移这些脚本
CSRF:跨站请求伪造(Cross_site_request_forgery) 发生在服务端(伪形成合法用户请求)(缓存中的session_id)
CSFR攻击就是相似复制用户的session_id来冒充合法用户
9.php正则函数
php正则匹配掉js代码';
$preg = "/<script[\s\S]*?<\/script>/i";
$newstr = preg_replace($preg,"",$str,3); //第四个参数中的3表示替换3次,默认是-1,替换所有
$newstr = preg_match($resg,$str,$newstr);
echo $newstr;
10. SESSION与COOKIE的区别?
ans:
①存储位置:session存储于服务器,cookie存储于浏览器
②安全性:session安全性比cookie高
③session为‘会话服务’,在使用时须要开启服务,cookie不须要开启,能够直接用
11. PHP处理数组的经常使用函数
ans:
①array()建立数组;
②count()返回数组中元素的数目;
③array_push()将一个或多个元素插入数组的末尾(入栈);
④array_column()返回输入数组中某个单一列的值;
⑤array_combine()经过合并两个数组来建立一个新数组;
⑥array_reverse()以相反的顺序返回数组;
⑦array_unique()删除数组中的重复值;
⑧in_array()检查数组中是否存在指定的值
12. PHP处理字符串的经常使用函数?
ans:
①trim()移除字符串两侧的空白字符和其余字符;
②substr_replace()把字符串的一部分替换为另外一个字符串;
③substr_count()计算子串在字符串中出现的次数;④substr()返回字符串的一部分;
⑤strtolower()把字符串转换为小写字母;
⑥strtoupper()把字符串转换为大写字母;
⑦strtr()转换字符串中特定的字符;
⑧strrchr()查找字符串在另外一个字符串中最后一次出现;
⑨strstr()查找字符串在另外一字符串中的第一次出现(对大小写敏感);
strrev()反转字符串;
strlen()返回字符串的长度;
str_replace()替换字符串中的一些字符(对大小写敏感);
print()输出一个或多个字符串;
explode()把字符串打散为数组;
is_string()检测变量是不是字符串;
strip_tags()从一个字符串中去除HTML标签;
mb_substr()用来截中文与英文的函数
strpos 查找字符串所在位置
13. 经常使用的魔术方法有哪些?
__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。好比 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
14. serialize与unserialize的认识?
ans:
serialize:将内存数据转化为字符串,写入硬盘 __sleep
unserialize:将字符串转为内存数据如php变量 __wakeup
15. include 与 require 的区别?
include:根据流程引入,且不存在流程也能正常进行。 有返回值
requeire:无论放在哪都是最早引入该文件,若是不存在则会报错。 无返回值
include_once :只引入一次,若是引入过则不在引入。
requeire_once :只引入一次,若是引入过则不在引入。
16. 什么是composer能够解决自动加载类?
ans:
Composer 是 PHP 的一个依赖管理工具,"快速安装类库"。工做原理就是将已开发好的扩展包从 packagist.org composer仓库下载到咱们的应用程序中,并声明依赖关系和版本控制。
composer命令:
composer list 列出全部可用的命令
composer init 初始化composer.json文件(就不劳咱们本身费力建立啦),会要求输入一些信息来描述咱们当前的项目,还会要求输入依赖包
composer install 读取composer.json内容,解析依赖关系,安装依赖包到vendor目录下
composer update 更新最新的依赖关系到compsoer.lock文件,解析最新的依赖关系而且写入composer.lock文件
composer search packagename 搜索包,packagename替换为你想查找的包名称
composer require packagename 添加对packagename的依赖,packagename可修改成你想要的包名称
composer show packagename
composer self-update 更新 composer.phar文件自身
composer dump-autoload --optimize 优化一下自动加载
17. PHP7 和 PHP5 的区别,具体多了哪些新特性?
ans:
性能提高了两倍(
由于:变量存储字节减少,减小内存占用,提高变量操做速度
改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,下降了内存占用、提高了 cpu 缓存命中率
改进了函数的调用机制,经过优化参数传递的环节,减小了一些指令,提升执行效率)
结合比较运算符 (<=>)
标量类型声明
返回类型声明
try...catch 增长多条件判断,更多 Error 错误能够进行异常处理
匿名类,如今支持经过new class 来实例化一个匿名类,这能够用来替代一些“用后即焚”的完整类定义
18. PHP 的设计模式?
1. 单例模式(重点):
ans:实例化出来的对象是惟一的。
why: 当存在大量数据库操做时,能够避免大量new对象,减小数据库链接
implement: 私有化实例,私有化构造方法,私有化克隆方法,公有化静态获取实例的方法(getinstant)
2. 工厂模式(重点)
ans:创建一个工厂来根据所需建立对象(解决紧耦合:改一个类就要改不少其余调用的地方)。
工厂模式分为:简单工厂模式,工厂方法模式,抽象工厂模式
3. 观察者模式(重点)
4. 依赖注入(重点)
19. 依赖注入实现原理?
ans:实现低耦合高扩展。
依赖注入DI:应用程序依赖容器建立并注入到所需的外部资源
控制反转IOC:容器控制应用程序,由容器反向的向应用程序注入应用程序所须要的外部资源
依赖注入就是组件经过构造器,方法或者属性字段来获取相应的依赖对象。
为何用依赖注入:解决高耦合。
注入的途径:construct注入,set注入
20. 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
if(isset($_POST['action']) && $_POST['action']==’submitted’){
$email=$_POST['email'];
if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){
echo“电子邮件检测失败”;
}else{
echo“电子邮件检测成功”;
}
}
21. sql注入之预处理(pdo)?
22. 防止盗链?
1.服务器防止: apach 或 nginx 作rewrite(重定向) 基于源来作判断防止盗链(防止别的网站请求咱们网站的资源)
2.代码防止: $_SERVER[‘HTTP_REFERER’] 判断是否来自咱们网站的请求(经过判断域名和ip)
因此通常来讲,只有经过 <a></a> 超连接以及 POST 或 GET 表单访问的页面,$_SERVER['HTTP_REFERER'] 才有效。
23 echo true =>1
echo false => 空
echo 默认打印十进制 echo012 => 18
print 非函数
eval():将字符串表达式执行
$str = '$a = 1+1;' 注意要加上封号
echo eval($str);
24. 跨域问题?
常见跨域方式:
1.JSONP(只支持get)
2.空iframe加form
3.CORS:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)跨域资源共享 CORS 详解。看名字就知道这是处理跨域问题的标准作法。CORS有两种请求,简单请求和非简单请求。
例子:
header('Access-Control-Allow-Origin: http://*.baidu.com'); //设置http://*.baidu.com容许跨域访问
4.Nginx代理设置