面试知识记录

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,

猜你喜欢

转载自www.cnblogs.com/yudubujue/p/11819362.html