美文网首页
3.2 PHP基础

3.2 PHP基础

作者: MelodyOf流沙 | 来源:发表于2021-03-22 16:56 被阅读0次

    PHP

    • 写一个email和手机号的正则表达式
    $str = '123456@qq.com';
    $pattern = "/^[a-zA-Z0-9-]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9_-]+)+$/";
    preg_match($pattern, $str, $match);
    print_r($match['0']);
    $str = '13299803211';
    $pattern = "/^1(3|4|5|6|7|8|9)\d{9}$/";
    preg_match($pattern, $str, $match);
    print_r($match['0']);
    
    • foo()和@foo()之间有什么区别?
      参考答案:
      @代表所有warning忽略

    • 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
      参考答案:
      按值传递:函数范围内对值的任何改变在函数外部都会被忽略 按引用传递:函数范围内对值的任何改变在函数外部
      也能反映出这些修改 优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和数组和对象来说,这将会是
      一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

    • TCP怎么建立连接?
      参考答案:
      TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN, ACK。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。第一次
      握手:建立连接时,客户端发送SYN包(SEQ=x)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:
      服务器收到SYN包,必须确认客户的SYN(ACK=x+1),同时自己也送一个SYN包(SEQ=y),即SYN+ACK包,此时服务器进
      入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1),此包发送完
      毕,客户端和服务器时入Established状态,完成三次握手。

    • 常用的魔术方法有哪些?举例说明(靠记)

    参考答案:
    __construct() 实例化类时自动调用。
     __destruct() 类对象使用结束时自动调用。
     __set() 在给未定义的属性赋值的时候调用。
     __get() 调用未定义的属性时候调用。
     __isset() 使用isset()或empty()函数时候会调用。
     __unset() 使用unset()时候会调用。
     __sleep() 使用serialize序列化时候调用。 
    __wakeup() 使用unserialize反序列化的时候调用。
    __call() 调用一个不存在的方法的时候调用。 
    __callStatic()调用一个不存在的静态方法是调用。
     __toString() 把对象转换成字符串的时候会调用。比如 echo。
     __invoke() 当尝试把对象当方法调用时调用。 
    __set_state() 当使用var_export()函数时候调用。接受一个数组参数。 
    __clone() 当使用clone复制一个对象时候调用。
    
    • session与cookie的区别?
      参考答案:
      1、cookie数据存放在第三方应用的浏览器上,session数据放在服务器上。
      2、cookie不是很安全,别人可以分析存放在本地的COOKIE,进行COOKIE欺骗,考虑到安全应当使用session。
      3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方
      面,应当使用COOKIE。
      4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
      5、所以个人建议: 将登陆信息等重要信息存放为SESSION 其他信息如果需要保留,可以放在COOKIE

    • 请说说对php中final 关键字的理解
      参考答案:
      PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为
      final,则不能被继承。

    • 你用过哪些PHP设计模式?
      参考答案:
      1、工厂模式
      建立一个工厂(一个函数或一个类方法)来制造新的对象
      工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如
      果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。
      2、单例模式
      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
      单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡
      的驱动程序常被设计成单例。
      单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。
      单例模式有以下3个特点:
      1.只能有一个实例。
      2.必须自行创建这个实例。
      3.必须给其他对象提供这一实例。
      那么为什么要使用PHP单例模式?
      PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句
      柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。
      3、观察者模式
      1:观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。 2:场景:一
      个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。当更新的逻
      辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。 3:观
      察者模式实现了低耦合,非侵入式的通知与更新机制。 定义一个事件触发抽象类。
      4、适配器模式
      将各种截然不同的函数接口封装成统一的API。 PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式
      统一成一致,使不同的数据库操作,统一成一样的API。类似的场景还有cache适配器,可以将
      memcache,redis,file,apc等不同的缓存函数,统一成一致。 首先定义一个接口(有几个方法,以及相应的参数)。然
      后,有几种不同的情况,就写几个类实现该接口。将完成相似功能的函数,统一成一致的方法。
      5、策略模式
      策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。
      策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强大,因为这个设计模式本身的核心思想就是面
      向对象编程的多态性思想。
      策略模式的三个角色:
      1.抽象策略角色
      2.具体策略角色
      3.环境角色(对抽象策略角色的引用)
      实现步骤:
      1.定义抽象角色类(定义好各个实现的共同抽象方法)
      2.定义具体策略类(具体实现父类的共同方法)
      3.定义环境角色类(私有化申明抽象角色变量,重载构造方法,执行抽象方法)
      就在编程领域之外,有许多例子是关于策略模式的。例如:
      如果我需要在早晨从家里出发去上班,我可以有几个策略考虑:我可以乘坐地铁,乘坐公交车,走路或其它的途径。
      每个策略可以得到相同的结果,但是使用了不同的资源。
      6、注册模式
      注册模式,解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,在需要使用的时候,
      直接从该数组上获取即可。将对象注册到全局的树上。任何地方直接去访问。

    • 如何解决超卖问题
      参考答案:
      1.悲观锁
      2.乐观锁
      3.队列术
      4.分布式锁

    • 谈谈对MVC的认识?
      参考答案:
      核心思想是:视图和用户交互通过事件导致控制器改变 控制器改变导致模型改变 或者控制器同时改变两者 模型改变
      导致视图改变 或者视图改变 潜在的从模型里面获得参数 来改变自己。他的好处是可以将界面和业务逻辑分离。
      Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服
      务中会根据不同的业务需求,更新业务模型中的数据。
      View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在View视图层输
      入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理。
      Contorller(控制器),Contorller是用来处理用户 输入数据,已经更新业务模型的部分。控制器中接收了用户与界
      面交互时传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态。

    • 说下你对PHP中trait的理解
      参考答案:
      自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。 Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够
      自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免
      传统多继承和 Mixin 类相关典型问题。
      Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承
      增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。

    • 请你说说对OOP思想的理解
      参考答案:
      面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条
      基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。 核心思想:封装,继承,多态. OOP
      达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数
      据和向其它对象发送信息。

    • 一个100G的大文件,里面存储了电话号码,文件格式如下:
      15112345678 15112345679 15112345680 15112345681 15112345682
      如何确认电话号码15112345680是否在文件中?

    1. 使用linux自带的shell_exec方法去grep
    2. 使用fseek和fread进行文件读取(超大文件读取适合)
    • PHP实现协程的方式是什么?
      参考答案:
      yield

    • 如何解决PHP内存溢出问题?
      参考答案:
      1、ini_set('memory_limit','500M');
      2、unset使用完毕的变量
      3、分批处理,避免生成大数组

    • PHP的垃圾回收机制(GC)中的zval变量容器是干啥用的?
      参考答案:

    引用计数器,如果按着了xdebug,可以打印出
    <?php
    $a = "new string"; 
    $c = $b = $a; 
    xdebug_debug_zval( 'a' ); 
    unset( $b, $c ); 
    xdebug_debug_zval( 'a' ); ?>
    以上例程会输出:
    a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
    
    • PHP5与PHP7的区别
    1. 异常分为了Error和Exception
    2. PHP7比PHP5.0性能提升了两倍
      2.1、变量存储字节减小,减少内存占用,提升变量操作速度
      2.2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
      2.3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
    3. 声明返回类型
    4. 新增加了结合比较运算符
    5. 新增一些新的语法糖

    PHP8

    • 新增JIT(即时编译) 性能提升
    • 新增语法

    相关文章

      网友评论

          本文标题:3.2 PHP基础

          本文链接:https://www.haomeiwen.com/subject/xxnzcltx.html