1.单例模式
单例模式的特点是三私一公
三私分别是:私有的静态成员属性,私有的构造方法,私有的克隆方法
私有的成员属性是:保存类的唯一实例
私有的构造方法是:
防止外部程序
new
一个对象从而失去单例的意义
私有的克隆方法:
防止对象被克隆。
使用单例模式的场景:
大家都知道想调用一个类,必须用到
new
,但是每次
new
都会耗费内存资源以及系统资源,并且每次打开和关闭数据库都是对数据库的一种巨大的考验,所以单例模式会经常用到数据库操作中。
2.redis与memcache的异同
memcache运行速度快,并且便于水平扩展,它是把数据存到内存中,每个value值最大限制是2M。
redis是支持持久化缓存,而且也支持缓存多种数据结构,例如:资源型,set,zset,list,哈希,每个value值最大限制是1G,并且是存在磁盘上的,开机关机后可以再次使用,操作都是原子性的,并且可以支持多数据库。
3,session与cookie
每个cookie最多可以存4K,cookie是存在客户端的
Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型,session是存在服务器的
sessionid是存在cookie里面的
4.mysql的主从复制:
从数据库会产生两个线程,一个是I/O线程,另一个是mysql线程
i/o会去请求主数据库的belog日志,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
5.session共享
session共享是因为负载均衡而产生的一种方法,为什么呢。为什么负载均衡是至少二个服务器相互运行,从而造成了session的一方不存在的现象,所以便产生了session共享。
session共享可以分为三种方法,一种是将session存到数据库中,一种是将session存到redis中,另一种则是存到cookie里。
6.支付宝即时到账
支付宝即时到账的最大的特点:便是有两个通知,一个是异步通知,另一个则是同步通知。
同步通知则是前台所显示的一些效果,例如页面显示支付成功等一些通知。
异步通知则是在后台删除库存等一些数据操作。
具体操作以及说明支付宝文档和SDK也有明确写明。
7.负载均衡
负载均衡分为四种:
一种是DNS负载均衡
一种是软负载均衡
一种是硬件负载均衡
一种nginx负载均衡
DNS负载均衡是一种最常见,最简单的负载均衡了,它是按地理级别形成的一种负载均衡
它的优点是:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;
它的缺点就是:太过耗费IP资源,可能会造成用户访问网址失败。
软负载均衡(不再做详细介绍,自己去查资料)
硬件负载均衡
优点:性能高于软件,并且安全系数较高,而且较为稳定
缺点:就是价格太贵了
nginx负载均衡
Ngnix是一款轻量级的Web服务器/反向代理服务器
nginx负载均衡有常见的几种策略:
轮询
加权轮询
ip_hash
least_conn 最少连接
8.抽象类与接口类
抽象类与接口类都不能被直接实例化
抽象类只能通过继承使用,并且抽象类里面定义的一些方法,在子类中必须实现。
抽象类的关键字是
abstract
(定义抽象类),
extends
(继承)
接口呢,接口要通过
implements
操作符来实现
类中必须实现接口中定义的所有方法,否则会报一个致命错误。
类可以实现多个接口,用逗号来分隔多个接口的名称。
下面是实例(仅供参考)
<?php
interface
iTemplate
{
public
function
setVariable(
$name
,
$var
);
public
function
getHtml(
$template
);
}
class
Template
implements
iTemplate
{
private
$vars
=
array
();
public
function
setVariable(
$name
,
$var
)
{
$this
->vars[
$name
] =
$var
;
}
public
function
getHtml(
$template
)
{
foreach
(
$this
->vars
as
$name
=>
$value
) {
$template
=
str_replace
(
'{'
.
$name
.
'}'
,
$value
,
$template
);
}
return
$template
;
}
}
9.mysql的事务回滚
事务回滚通常运用于银行转账:例如一方若没有转入或者转出钱,事务回滚就会把一切回到最初的样子,从而不会造成用户的经济损失。
事务回滚的饿三个关键字:
begin 开始一个事务
rollback 事务回滚
commit 事务确认
下面是实例(仅供参考)
$conn
= mysql_connect(
'localhost'
,
'root'
,
'root'
)
or
die
(
"数据连接错误!!!"
);
mysql_select_db(
'test'
,
$conn
);
mysql_query(
"set names 'GBK'"
);
mysql_query(
"BEGIN"
);
$sql
=
"INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')"
;
$sql2
=
"INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')"
;
$res
= mysql_query(
$sql
);
$res1
= mysql_query(
$sql2
);
if
(
$res
&&
$res1
){
mysql_query(
"COMMIT"
);
echo
'提交成功。'
;
}
else
{
mysql_query(
"ROLLBACK"
);
echo
'数据回滚。'
;
}
mysql_query(
"END"
);
10,git与svn的区别
git有分布式而svn没有
git的分支与svn的分支不同
git没有全局版本号
git保存数据的完整性要强于svn
git是用元数据保存内容的,而svn是用文件保存的
11.mysql的优化
如果查询结果只有一条数据,尽量要用limit 1
要查询某个字段,要精确到select 字段名
要在经常搜索的字段加上索引(索引分为唯一索引,组合索引,主键索引(是特殊的唯一索引,不允许有空值),以及普通索引 )
尽量不要使用order by(排序)
尽量将字段设为 not null
固定长度的表查询更快(char与varchar)
以及采用分区或分表。
12.接口的安全验证
在我的认知方面接口有五种:
一种是公共接口
一种是接口参数加密接口
一种是接口参数加密,时效验证
一种是接口参数加密,时效验证,私钥
最后一种是接口参数加密,时效验证,私钥,https。
13.静态与伪静态
需要先把网站的页面总结出来,分为多少个样式,然后把这些页面做成模板
,生成的时候需要先读取源文件然后生成独立的以.html结尾的页面文件
静态的优点是:
加快了反应的效率
防止了黑客的攻击
方便了搜索的引擎的抓取
缺点是:
占用了太多的空间
不好调试
伪静态:
伪静态的优点是:
使得黑客找不到具体的动态网址,
占用的内存少,
减少url的长度,
维护方便
缺点是:
伪静态文件太多的话会造成cpu的超负荷
14.linux杀死进程
ps -ef| grep 进程名称 获得进程号
kill 进程号 杀死进程
先写那么多,后期完善!!!