美文网首页PHPMQ
【建议收藏】php面试常问面试题总结

【建议收藏】php面试常问面试题总结

作者: it阿布 | 来源:发表于2020-09-30 16:12 被阅读0次

    结合实际 PHP 面试,汇总自己遇到的问题,以及网上其他人遇到的问题,尝试提供简洁准确的答案

    1、echo、print、print_r、var_dump 区别

    • echo和print是语言结构、print_r和var_dump是普通函数

    • echo:输出一个或多个字符串

    • print:输出字符串

    • print_r:打印关于变量的易于理解的信息

    • var_dump:打印关于变量的易于理解的信息(带类型)

    2、单引号和双引号的区别

    双引号可以被分析器解析,单引号则不行

    3、isset 和 empty 的区别

    • isset:检测变量是否已设置并且非 NULL

    • empty:判断变量是否为空,变量为 0/false 也会被认为是空;变量不存在,不会产生警告

    4、static、self、$this 的区别

    • static:static 可以用于静态或非静态方法中,也可以访问类的静态属性、静态方法、常量和非静态方法,但不能访问非静态属性

    • self:可以用于访问类的静态属性、静态方法和常量,但 self 指向的是当前定义所在的类,这是 self 的限制

    • base64

      25、ip2long 实现

      ip2long
      124.205.30.150=2093817494
      
      list($p1,$p2,$p3,$p4) = explode(',','124.205.30.150');
      
      $realNum = $p1<<24+$p2<<16+$p3<<8+$p4;
      

      26、MVC 的理解

      MVC 包括三类对象。模型 Model 是应用对象,视图 View 是它在屏幕上的表示,控制器 Controller 定义用户界面对用户输入的响应方式。不使用 MVC,用户界面设计往往将这些对象混在一起,而 MVC 则将它们分离以提高灵活性和复用性

      27、主流 PHP 框架特点

      Laravel

      易于访问,功能强大,并提供大型,强大的应用程序所需的工具

      • 简单快速的路由引擎

      • 强大的依赖注入容器

      • 富有表现力,直观的数据库 ORM

      • 提供数据库迁移功能

      • 灵活的任务调度器

      • 实时事件广播

      Symfony

      • Database engine-independent

      • Simple to use, in most cases, but still flexible enough to adapt to complex cases

      • Based on the premise of convention over configuration--the developer needs to configure only the unconventional

      • Compliant with most web best practices and design patterns

      • Enterprise-ready--adaptable to existing information technology (IT) policies and architectures, and stable enough for long-term projects

      • Very readable code, with phpDocumentor comments, for easy maintenance

      • Easy to extend, allowing for integration with other vendor libraries

      CodeIgniter

      • 基于模型-视图-控制器的系统

      • 框架比较轻量

      • 全功能数据库类,支持多个平台

      • Query Builder 数据库支持

      • 表单和数据验证

      • 安全性和 XSS 过滤

      • 全页面缓存

      ThinkPHP

      • 采用容器统一管理对象

      • 支持 Facade

      • 更易用的路由

      • 注解路由支持

      • 路由跨域请求支持

      • 验证类增强

      • 配置和路由目录独立

      • 取消系统常量

      • 类库别名机制

      • 模型和数据库增强

      • 依赖注入完善

      • 支持 PSR-3 日志规范

      • 中间件支持

      • 支持 Swoole/Workerman 运行

      28、对象关系映射/ORM

      优点

      • 缩短编码时间、减少甚至免除对 model 的编码,降低数据库学习成本
      • 动态的数据表映射,在表结构发生改变时,减少代码修改
      • 可以很方便的引入附加功能(cache 层)

      缺点

      • 映射消耗性能、ORM 对象消耗内存
      • SQL 语句较为复杂时,ORM 语法可读性不高(使用原生 SQL)

      29、链式调用实现

      类定义一个内置变量,让类中其他定义方法可访问到

      30、异常处理

      set_exception_handler — 设置用户自定义的异常处理函数

      使用 try / catch 捕获

      31、如何实现异步调用

      $fp = fsockopen("blog.maplemark.cn", 80, $errno, $errstr, 30);
      if (!$fp) {
          echo "$errstr ($errno)<br />\n";
      } else {
          $out = "GET /backend.php  / HTTP/1.1\r\n";
          $out .= "Host: blog.maplemark.cn\r\n";
          $out .= "Connection: Close\r\n\r\n";
          fwrite($fp, $out);
          /*忽略执行结果
          while (!feof($fp)) {
              echo fgets($fp, 128);
          }*/
          fclose($fp);
      }
      

      32、多进程同时写一个文件

      加锁、队列

      33、PHP 进程模型,进程通讯方式,进程线程区别

      消息队列、socket、信号量、共享内存、信号、管道

      34、PHP 支持回调的函数,实现一个

      array_map、array_filter、array_walk、usort

      is_callable + callbacks + 匿名函数实现

      发起 HTTP 请求有哪几种方式,它们有何区别

      cURL、file_get_contents、fopen、fsockopen

      35、php for while foreach 迭代数组时候,哪个效率最高

      36、弱类型变量如何实现

      PHP 中声明的变量,在 zend 引擎中都是用结构体 zval 来保存,通过共同体实现弱类型变量声明

      37、PHP 拓展初始化

      • 初始化拓展
      $ php /php-src/ext/ext_skel.php --ext
      
      • 定义拓展函数
      zend_module_entry 定义 Extension name 编写 PHP_FUNCTION 函数
      
      • 编译安装
      $ phpize $ ./configure $ make && make install
      

      38、如何获取扩展安装路径

      39、垃圾回收机制

      引用计数器

      40、Trait

      自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait

      41、yield 是什么,说个使用场景 yield、yield 核心原理是什么

      一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值

      42、traits 与 interfaces 区别 及 traits 解决了什么痛点

      43、如何 foreach 迭代对象、如何数组化操作对象 在这里插入图片描述 在这里插入图片描述


      更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

      以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的 PHP技术交流群

    相关文章

      网友评论

        本文标题:【建议收藏】php面试常问面试题总结

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