php7新特性的理解和比较
1. null合并运算符(??)
2.define() 定义常量数组
3. 组合比较符(<=>)
4. 变量类型声明,返回值类型声明
5.允许new class {} 创建一个匿名的对象.
6.unserialize()函数:过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据,
7.CSPRNG 函数提供一种简单的机制来生成密码的随机数.use 语句,
8.新增加intdiv()函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整,
9.PHP7 错误处理大多数错误被作为Error异常抛出
10.函数语法修改 例如grep_replace 修饰符e 被删去。
单例模式
class Singleton
{
private static $instance = null;
private function __construct()
{}
//对外提供一个静态方法
public static function getInstance(): Singleton
{
if (self::$instance === null) {
//如果没有,则创建当前类的实例
self::$instance = new self();
}
return self::$instance;
}
1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化
主键索引和非主键索引的区别
非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。
1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。
2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。
视频流处理
<?php function GetMp4File($file) { $size = filesize($file); header("Content-type: video/mp4"); header("Accept-Ranges: bytes"); if(isset($_SERVER['HTTP_RANGE'])){ header("HTTP/1.1 206 Partial Content"); list($name, $range) = explode("=", $_SERVER['HTTP_RANGE']); list($begin, $end) =explode("-", $range); if($end == 0){ $end = $size - 1; } }else { $begin = 0; $end = $size - 1; } header("Content-Length: " . ($end - $begin + 1)); header("Content-Disposition: filename=".basename($file)); header("Content-Range: bytes ".$begin."-".$end."/".$size); $fp = fopen($file, 'rb'); fseek($fp, $begin); while(!feof($fp)) { $p = min(1024, $end - $begin + 1); $begin += $p; echo fread($fp, $p); } fclose($fp); } GetMp4File("demo.mp4");
方法主要是将视频拆分成N个碎片,每份1KB,此方法缺陷是用户在观看视频是会不断向服务器读取视频
大文件上传,文件上传验证损坏,大小,格式
1,修改服务端上传的限制配置;Nginx 以及 PHP 的上传文件限制 不宜过大,一般5M 左右为好;
2,大文件分片,一片一片的传到服务端,再由服务端合并。这么做的好处在于一旦上传失败只是损失一个分片而已,不用整个文件重传,而且每个分片的大小可以控制在4MB以内,服务端限制在4M即可。
https://www.cnblogs.com/songsu/p/11504547.html
ajax的实现原理
1.使用CSS和XHTML来表示。
2. 使用DOM模型来交互和动态显示。
3.使用XMLHttpRequest来和服务器进行异步通信。
4.使用javascript来绑定和调用。
AJAX 的核心是 XMLHttpRequest 对象。Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎自己来做,,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
大并发下优化页面内存数据
图片处理,裁切
$image = "jiequ.jpg"; // 原图 $imgstream = file_get_contents($image); $im = imagecreatefromstring($imgstream); $x = imagesx($im);//获取图片的宽 $y = imagesy($im);//获取图片的高 // 缩略后的大小 $xx = 140; $yy = 200; if($x>$y){ //图片宽大于高 $sx = abs(($y-$x)/2); $sy = 0; $thumbw = $y; $thumbh = $y; } else { //图片高大于等于宽 $sy = abs(($x-$y)/2.5); $sx = 0; $thumbw = $x; $thumbh = $x; } if(function_exists("imagecreatetruecolor")) { $dim = imagecreatetruecolor($yy, $xx); // 创建目标图gd2 } else { $dim = imagecreate($yy, $xx); // 创建目标图gd1 } imageCopyreSampled ($dim,$im,0,0,$sx,$sy,$yy,$xx,$thumbw,$thumbh); header ("Content-type: image/jpeg"); imagejpeg ($dim, false, 100);
imageCopyreSampled函数
jQ$,符号,
$代表的就是jQuery,$ 实际上表示的是一个函数名.
三种以上居中布局
1、设置position:absolute;和transform:traslate(x,y)实现水平垂直居中
2、绝对定位,配合top:0;bottom:0;和margin:auto进行垂直居中
3、针对文本,通过display:flex;配合align-items和justify-content实现文本居中
position五种
https://www.jianshu.com/p/88771619077e
js的原型链
1、__proto__ 是原型链查询中实际用到的,它总是指向 prototype;
2、prototype 是函数所独有的,在定义构造函数时自动创建,它总是被 __proto__ 所指。
所有对象都有__proto__属性,函数这个特殊对象除了具有__proto__属性,还有特有的原型属性prototype。prototype对象默认有两个属性,constructor属性和__proto__属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。
闭包
「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。闭包常常用来「间接访问一个变量」。换句话说,「隐藏一个变量」。
!function(){ var lives = 50 window.奖励一条命 = function(){ lives += 1 } window.死一条命 = function(){ lives -= 1 } }()
那么在其他的 JS 文件,就可以使用 window.奖励一条命() 来涨命,使用 window.死一条命() 来让角色掉一条命。
清除浮动问题,
父级div定义 伪类:after 和 zoom
.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}
.clearfloat{zoom:1}
js this箭头函数的指向问题
var x = 11; var obb = { x: 222, y: { x:333, obc: function f() { console.log(this) var x = 111; var obj = { x: 22, say: () => { console.log(this.x); } } obj.say() } } } obb.y.obc()
输出结果是333
箭头函数没有this,剪头函数的this是继承父执行上下文里面的this ,这里箭头函数的执行上下文是函数f(),所以它就继承了f()的this,