简述 cookie 和 session的区别及各自的工作机制,存储位置等,简述 cookie 的优缺点。
Session 文件什么样的
session_start();
$_SESSION['view'] = 1;
$_SESSION['name'] = "Alex";
var_dump($_SESSION);
/*
array(2) {
["view"]=>
int(1)
["name"]=>
string(4) "Alex"
}
*/
➜ ~ sudo ls /var/lib/php/sessions
sess_6bjte47jooqn8aoj3tbpuiufc7 sess_slchsjrrp843johcnenjl69lop
sess_kpievppouhsvh1fos7j66iie0k
➜ ~ sudo cat /var/lib/php/sessions/sess_kpievppouhsvh1fos7j66iie0k
view|i:1;%
➜ ~ sudo cat /var/lib/php/sessions/sess_6bjte47jooqn8aoj3tbpuiufc7
view|i:1;name|s:4:"Alex";%
linux shell 替换字符串的几种方法,变量替换${},sed,awk
➜ ~ a='[email protected]'
➜ ~ echo ${a/qq/baidu}
[email protected]
echo str_replace('world', 'Shangehai', 'Hello world!');
PHP 字符串替换 substr_replace 与 str_replace 函数
explode ( string $delimiter , string $string , int $limit = ? ) : array
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
implode ( string $glue , array $pieces ) : string
implode ( array $pieces ) : string
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
// Empty string when using an empty array:
var_dump(implode('hello', array())); // string(0) ""
HTTP/1.1中,状态码 200 301 304 403 404 500 的含义。
- 200(OK) : 从状态码发出的请求被服务器正常处理。
- 204(No Content) : 服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分【即没有内容】。
- 206(Partial Content) : 部分的内容(如:客户端进行了范围请求,但是服务器成功执行了这部分的干请求)。
- 301(Moved Permanently) : 跳转,代表永久性重定向(请求的资源已被分配了新的URI,以后已使用资源,现在设置了URI)。
- 302(Found) : 临时性重定向(请求的资源已经分配了新的URI,希望用户本次能够使用新的URI来进行访问)。
- 303(See Other) : 由于请求对应的资源存在的另一个URI(因使用get方法,定向获取请求的资源)。
- 304(Not Modified) : 客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回了 304。
- 307(Temporary Redirect) : 临时重定向【该状态码与302有着相同的含义】。
- 400(Bad Request) : 请求报文中存在语法错误(当错误方式时,需修改请求的内容后,再次发送请求)。
- 401(Unauthorized) : 发送的请求需要有通过HTTP认证的认证信息。
- 403(Forbidden) : 对请求资源的访问被服务器拒绝了。
- 404(Not Found) : 服务器上无法找到请求的资源。
- 500(Internal Server Error) : 服务器端在执行请求时发生了错误。
- 503(Service Unavailable) : 服务器暂时处于超负载或者是正在进行停机维护,现在无法处理请求。
干货预警,一篇文章带你彻底搞懂 Laravel 框架的运行原理!!!
走过的,路过的,快来看看laravel设计模式好文章的汇总!
Mysql 中 MyISAM 和 InnoDB 的区别有哪些?
PHP The Right Way PHP之道
除了编码规范之外的各种 PHP 的最佳实践,还包括一些设计模式,安全问题,以及服务部署,Docker 虚拟化以及各种资源。
PHP FIG,PHP 编码规范及标准推荐。
PHP PSR 标准规范
Clean Code PHP,《代码整洁之道》的 PHP 实践。
什么是死锁?怎么解决?
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
常见的解决死锁的方法
1、如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
如果业务处理不好可以用分布式事务锁或者使用乐观锁
数据库的乐观锁和悲观锁是什么?怎么实现的?
数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。实现方式:乐一般会使用版本号机制或CAS算法实现。
两种锁的使用场景
从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。
但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。