1、相同商品ID的属性不同,怎么办??
商品表中的属性存成一个集合,属性表
2、购物车的实现原理
分两种情况:
1、用户没有登录,将数据存储在cookie中,若用户登录,再将cookie中的数据转存到数据库。
2、用户登录后,将数据直接存储到数据库。
3、RBAC权限管理
基于角色的权限访问控制(Role-Based Access Control)
五张表:两个中间表 admin、role、rule、admin_role、role_rule
三张表:一个中间表
通过代码控制不同的管理员是否能够访问某个方法的过程就是权限控制。
RBAC(Role-Based AccessControl,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。
4、短信验证码如何防止短信轰炸??
JS客户端验证验证
手机号限制短信条数(计数器)
5、数据库优化从哪几个方面做??
1、设计数据库方面
2、建立索引
3、读写分离
4、缓存
6、优化MySQL的查询
1、避免全表查询,给相应字段建立索引
2、避免查询语句过长,分批查询。
3、where后面不能有函数运算
4、左原则like第一个字段要有索引
5、在where和group by后面建立索引
7、Redis实用案例--抢购秒杀、计数器、推荐、收藏案例
秒杀:
使用Redis的list链表,pop操作,即使是很多用户同时到达也是依次执行
1、现将商品表的库存存入队列
2、抢购开始,设置库存的缓存周期
3、客户端执行下单操作,下单前判断redis队列库存量
8 单例模式和工厂模式
我用php大部分操作都是和各种数据库打交道,包括mysql,redis,memcache等各种关系型和非关系型数据库,所以一个应用中会 存在大量连接数据库的操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都 是对数据库的一种极大考验和浪费。
需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量)
构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义
必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用
//设计模式
//单例模式 都是使用同一个对象
//class Ren
//{
// public $name;
// private static $dx; //存储对象
//
// private function __construct()
// {
//
// }
//
// public static function DuiXiang()
// {
// if(empty(self::$dx))
// {
// self:;$dx=new Ren();
// }
// return self::$dx;
// }
//}
//
//$r= Ren::DuiXiang();
//把构造函数变为私有
//做了一个方法来间接造对象
//在该方法里面加限制
工厂类
是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加灵活,熟练掌握工厂模式高级PHP开发人员是很重要的。
工厂模式通常用来返回符合类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应实例化哪一个类,例如,可以使用这样的提供者来扩展一个类,而不需要重构应用程序的其他部分,从而使用新的扩展后的名称 。
通常,工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,工厂方法可以任意命名,这个静态还可以接受任意数据的参数,必须返回一个对象。
class
YunSuan
{
public
$a
;
public
$b
;
function
Suan()
{
echo
"对两个数进行运算"
;
}
class
gongchang
{
//功能 : 给一个参数,返回一个对象
static
function
chanpin(
$name
)
{
switch
(
$name
)
{
case
"'+"
:
return
new
jia();
break
;
case
"-"
;
return
new
jian();
break
;
}
}
}
$a
=gongchang::chanpin(
"+"
);
PHP防sql注入方法 htmlspecialchars addslashes
预定义字符是:
单引号(')
双引号(")
反斜杠(\)
NULL
可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
htmlspecialchars()将特殊字符转成 HTML 格式。将特殊字符转成 HTML 的字符串格式 ( &....; )。最常用到的场合可能就是处理客户留言的留言版。
& (和) 转成 &
" (双引号) 转成 "
< (小于) 转成 <
> (大于) 转成 >
只转换上面的特殊字符,并不会全部转换成 HTML 所定的 ASCII 转换。
防注入方法(https://blog.csdn.net/snow_love_xia/article/details/79782118)
13、PHP语言的一大优势是跨平台,什么是跨平台?
PHP的运行环境最优搭配为Apache+mysql+PHP,此运行环境可以在不同操作系统(例如windows、linux等)上配置,不受操作系统的限制,所以叫跨平台
14. 安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?
①防远程提交(token机制);②防SQL注入,对特殊代码进行过滤;③防止注册机灌水,使用验证码;
15 慢查询日志
Slow Query日志,虽然帮助你记录了那些执行过了的SQL语句。但它不是万能的,意义可能没有你想象的那么大。它只告诉了你哪些语句慢,但是为什么慢?具体 原因,还是需要你自己去分析,不断的调试 。
其实通过慢查询日志来分析是一种比较简单的方式,如果不想看日志,可以借助工具来完成,
一个语句是否用到索引如何判断 explain sql