PHP后端面试题

分享下频繁出现的php后端面试笔试题简单描述php8,php7以及之前版本的区别php-fpm fast-cgi cgi 的关系self,this,static分别代表着什么,在什么场景下使用程序中出现高热点数据时会遇到什么问题,怎么解决导出或导入百万级数据会出现什么样的问题,怎么解决在 mvc 中 controller , model , logic , service 之间的关系以及使用场景简单描述下控制翻转,依赖注入,和容器实现原理Db和Model的区别workman和swoole的区别简述几个设计默认以及是实现原理mysql中 innodb 和 myisam 的区别以及使用场景mysql 常用数据库引擎有哪些mysql中 utf8和utf8mb4的区别mysql中 超长度数据段如何根据完整数据快速查询主键、外键和索引的区别简单描述下联合索引和索引mysql常见优化方式简单描述下悲观锁和乐观锁会员表无限级关系储存解决方案简单描述redis和mongodb,memcacahe有什么区别以及常见使用场景redis单线程有什么优势和缺点简单描述下队列实现原理系统大流量解决方案请...

PHP 2023-01-09 AM 522次 0条

PHP常见机试题

记录下频繁出现的php基础面试题时间计算$starttime为手动输入 如: 2020-10-101.1 计算出来 $starttime 的当月开始时间 1号0点0分0秒的时间戳1.2 计算出来 $starttime 的上月开始时间 1号0点0分0秒的时间戳1.3 计算出来 $starttime 的上上月开始时间 1号0点0分0秒的时间戳1.4 计算出来 $starttime 的上上月结束时间最后一天号23点59分59秒的时间戳字符串处理2.1 字符串双向替换如: 我喜欢你 替换为 你爱我 分别替换了 我,你,爱和喜欢2.2 将任意英文字符串转换为小驼峰如: My is name 或者 My_is_name2.3 计算任意两个字符串的相似度百分比数据爬虫3.1 爬取任意网页单页面图片到本地3.2 爬取并过滤单页面所有图片标签并替换为

PHP 2023-01-04 AM 508次 0条

解决tp5,tp6,fastadmin框架api或者其他模块获取不到语言包问题

 分享下解决了在 api 模块或者其他任意自定义模块 模型获取不到语言包无法转换或者多模块公用一个语言包问题示例 主要默认加载了admin模块下的语言包 在基类或者当前类里面加入即可public function __construct($data = []) { parent::__construct($data); $this->loadlang(mb_strtolower(class_basename(static::class))); } /** * 加载语言文件 * @param string $name */ protected function loadlang($name) { $name = Loader::parseName($name); $name = preg_match("/^([a-zA-Z0-9_\.\/]+)\$/i", $name) ? $name : 'index'; $lang = request()->langset(); $lang = preg_match("/^([a-zA-...

PHP,解决方案 2022-11-09 PM 583次 0条

redis管理key任意分割符层次算法

 简单研究了下市面上Redis管理器key分隔符算法的时间下面分享下.效果 下面展示了其他redis管理器的效果和我们要实现的目标效果常见效果目标实现效果实现算法可以看到上面通过冒号分割符将 key 分割成层级目录方便管理查看.实现步骤scan获取redis指定数量key循环遍历所有key指定转换分割符号 : 或者其他符号为数组判断数组是否有多个只存在一个则直接赋值键存在多个则赋值引用类型到临时变量然后循环赋值键到临时变量 难点在于 & 引用类型的理解实现算法$iterator = null; $all_keys = $redis->scan($iterator, $search, 1000); $keys = []; foreach ($all_keys as $datum) { $key_array = explode(':', $datum); if (count($key_array) > 1) { $keys_temp = &$keys; foreach ($key_array ...

PHP,解决方案 2022-10-28 PM 562次 0条

php中php-fpm fast-cgi cgi 的关系

cgicgi 是一个协议,跟进程无关,比如说 web server (nginx) 接收到一个 php 的网络请求,此时 nginx 需要根据配置文件,去找 php 的解析器,经过简单处理,将请求的一些信息交给 php 解析器,此时就规定了要传那些协议,还有以什么样的格式传输,这个标准就叫做 cgi 协议php 解释是实现了这个协议的 cgi 程序,nginx 将这些内容交给 php 解释器后,读取 php.ini 等初始化环境,然后处理数据,最终转换成符合这个协议的数据流交给 nginx, 最终返回给浏览器fast-cgi fast-cgi 管理 cgi 程序fast-cgi 是一个常驻进程的程序,与 cgi 为每个 web 请求建立一个进程不同的是,fast-cgi 在 web server 启动的时候会同时启动多个 cgi 程序,这样当进来动态页面请求的时候,就可以将数据流交由 fast-cgi 进程管理器,这样做的好处就是 web server 可以处理更多的请求,并且解析 php.ini 这些工作只进行一次,提高响应速度如图所示php-fpm php-fpm 管理 cg...

PHP 2022-10-27 PM 501次 0条

代码参数注释大全

 本文主要记录代码参数注释大全方便参考查看标明作者@author@author 张三 提供给第三方使用的接口@api@api xxxx参数@param @param array 参数名 描述返回值@return@return string待办@todo@todo 这里是待办版本号@version@version 1.0.0文档继承@inheritdoc类属性@property@property array $auth 描述只读属性@property-read@property-read array $auth 描述只写属性@property-write@property-write array $auth 描述常量@const@const APP过期方法@deprecated示例@example标识类是终态, 禁止派生@final指明引用的全局变量@global标识类、方法、属性是静态的@static忽略@ignore限内部使用@internal协议@license@license MIT链接,引用文档等@link@link http://www.xxx...

PHP,其他 2022-09-02 PM 558次 0条

缓存三贱客

无处不在的缓存缓存在计算机系统是无处不在,在CPU层面有L1-L3的Cache,在Linux中有TLB加速虚拟地址和物理地址的转换,在浏览器有本地缓存、手机有本地缓存等。可见,缓存在计算机系统中有非常重要的地位,其主要作用是提高响应速度、减少磁盘访问等。高并发系统中的缓存一句话概括缓存系统在高并发系统中的地位的话就是如果高并发系统是烤羊肉串,那么缓存系统就是那一撮孜然。缓存系统的作用缓存系统在高并发系统的作用很大,在某种程度上可以说没有缓存系统很难支撑高并发场景。基于机械磁盘或SSD的数据库系统,一般来说读写的速度远慢于内存,因此单纯磁盘介质的数据库无法支撑很高的并发,可以简单认为缓存是保护磁盘数据库的重要屏障。对于一些基于LSM的存储引擎数据库来说,随机写改为顺序写速度提升很大,但是随机读仍然是个问题,所以缓存系统是很有必要的如:NessDBleveldbhbase其核心思想的核心就是放弃部分读能力,换取写入的最大化能力。缓存系统访问流程实际场景也是读多写少,看看请求是如何得到响应的,简单看下交互流程:请求到达之后,业务线程首先访问缓存,如果缓存命中则返回如果未命中则继续请求磁...

PHP,解决方案,其他 2022-06-01 PM 822次 0条

使用composer更新引用包404问题2022年3月29号

 就在 2022年3月29号 我们使用 composer 来 require 使用第三方包或更新 composer包 会出现大面积404问题。异常信息 [Composer\Downloader\TransportException] The "https://mirrors.aliyun.com/composer/p/provider-2017%2477f874a1ea778d1061dc0376ee5bb78089142e6d0933b308200c290eb53e7af4.json" f ile could not be downloaded (HTTP/1.1 404 Not Found) 解决composer包404问题 原因是因为composer已经逐渐废弃v1版本,我们只需要将composer升级到v2版本即可解决。composer升级到2.x版本和降级

PHP,解决方案 2022-03-30 AM 1229次 0条

最新jetbrains全家桶及phpstorm激活方法支持全系列全版本支持更新永久有效

  继 IDE Eval Reset 失效后,今天我们分享一个最新的jetbrains全家桶及phpstorm激活方法,并且支持全系列,全版本可更新使用并且有效。 我们知道 jetbrains 家的产品用过的都知道非常好用,其中包括 phpstorm , goland , pycharm , webstorm , intellij idea 等等这些都是非常强大及好用的开发工具,但是奈何 jetbrains 系列的工具都是要收费激活的虽然淘宝上有便宜的 学生邮箱 和 破解版 但是这些非常 容易被封 ,博主已经入了两次淘宝的坑了。 博主之前分享的 phpstorm及jetbrains永久免费激活工具插件无限试用使用 奈何对2021年6月份之后的版本已经无效了,插件的开发者已经停止对激活插件的更新了所以说2021年6月份之后的版本就不能再使用了。最新jetbrains全家桶激活方法 原理是我们主要通过代码搜索其他授权服务器进行永久激活激活。方式一 通过censyshttps://search.censys.io/主要用到的代码services.http.response.head...

PHP,软件工具,Golang,前端,解决方案 2022-03-23 AM 18486次 0条

swoole 处理 has already been bound to another coroutine xxx异常

 分享下之前在使用swoole开发项目时遇到的swoole协程问题。swoole 异常信息 P Fatal error: Uncaught Swoole\Error: Socket#37 has already been bound xxxPHP Fatal error: Uncaught Swoole\Error: Socket#37 has already been bound to another coroutine#19895, reading of the same socket in coroutine#19896 at the same time is not allowed in /www/wwwroot/default/vendor/xxx.php:34 Stack trace: xxxxxxxxxx问题分析 从日志看像是同一个Socket链接不能同时存在于不同的协程里面,也就是不能夸协程使用mysql,redis同一条连接对象。问题处理 知道问题就好处理了可以使用swoole channel 实现一个连接池如下:Channelprivate static ...

PHP,解决方案 2022-02-22 PM 1548次 0条