PHP进阶架构师的博客

PHP进阶架构师

  • 博客(53)
  • 收藏
  • 关注

原创 百度、腾讯PHP大厂面试经验分享,拿到了百度offer

今天下午来到北京百度科技园进行复试PHP工程师岗位。面试官问了很多问题,因为主要是从事php方面的,所以下面谈的这些面试问题主要都是php方面的,当然其它的语言面试有些问题也会被问到。我大概整理回忆下:如果你经常参加面试的话,你就会发现几乎所有的面试开场白都是进行自我介绍,这是因为一方面面试官是刚从HR那里得到你的信息的,面试之前他可能不太了解你的具体信息,所以他希望你通过自我介绍这个环节,了解一下你的过往经历,还有就是他利用这个时间看下你的简历。经过三面、四面后几家公司等到了百度offer,下面我把面

2020-10-14 16:26:09 4178 16

原创 CSDN最强腾讯T3级PHP高级、架构师视频教程

这次发布一波视频教程福利,适合1-5年进阶人群,因为0基础的可能会听的比较吃力!!!感兴趣的直接看视频目录即可、不感兴趣的,认为PHP差劲的直接忽略就是了(又没吃你家大米,不接受你的装逼):【Laravel框架专题】Laravel框架的生命周期01Laravel目录讲解02Laravel应用程序的初始化03Laravel路由应用04Laravel路由解析05Laravel路由参数06Laravel路由到控制器07Laravel路由分组08Laravel服务加载09Laravel路由校验

2020-09-27 09:14:50 186 1

原创 【2020版PHP高级教程-Swoole4.X从入门到精通全套高级实战】

众所周知,Swoole 和我们传统的 PHP 开发差别是有的,需要理解的概念也是有的。使用目前一些基于 Swoole 的框架开发的话,从开发习惯上和传统的TP 框架相差不多。根据官方介绍它是一个底层通信框架,最大的优势在于:常驻内存,避免重复加载带来的性能损耗,提升海量性能协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件通信PHP 高性能微服务架构成为现实那么很多人学习Swoole都遇到了很多

2020-08-24 12:06:26 338

原创 MYSQL慢查询和日志

一、简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。二、参数说明slow_query_log 慢查询开启状态slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)long_query_time 查询超过多少秒才记录三、设置步骤1.查看慢查询相关参数mysql> show variables like 'slow_query%'

2020-11-26 14:09:08 5

原创 深入理解PHP+Mysql分布式事务与解决方案

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元;事务的ACID特性事务应该具有4个属性:原子性、一致性、隔离性、持续性原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发

2020-11-25 15:44:18 16

原创 php网络编程解析 tcp 粘包/拆包实例

tcp 长链接模式下,使用固定消息头长度的方式进行消息 拆包 ,解决 粘包 问题。固定消息头协议将消息头的前N个字节固定为 消息长度位 ,结合业务场景, 2bytes 或 4bytes ,读取消息时先读取 消息长度位 ,即可按具体的 消息长度 读取 消息内容 。pack/unpack 可以 打包数值至二进制 / 解包二进制至数值 ,具体的模式可以参考pack/unpack 详细用法,这里我们选用固定头长度为 2bytes 来表示 消息体长度 ,最大能表示 2^16 - 1 长度的消息体,不够你就上 4

2020-11-24 10:27:32 26

原创 来说说Nginx的rewrite模块详解

rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块。rewrite模块会根据PCRE正则匹配重写URI,然后发起内部跳转再匹配location,或者直接做30x重定向返回客户端。指令执行顺序首先顺序执行server块中的rewrite模块指令,得到rewrite后的请求URI然后循环执行如下指令如果没有遇到中断循环标志,此循环最多执行10次,但是我们可以使用break指令来中断rewrite后的新一轮的循环(1). 依据r

2020-11-23 11:26:15 32

原创 PHP开发SSO单点登录需要注意的问题

一、单点登录系统开发需要注意的问题1.单点登录系统需要支持jsonp请求?单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉及跨域问题,因此需要单点登录系统支持jsonp消息转换,即能正确处理跨域请求。否则,请求接收到的数据解析失败,chrome debug中提示“Uncaught SyntaxError: Unexpected token <”。2.超时问题我们提供的CAS开源单点登录SSO组件,它部署节点主要有2个:SSO服务器(部署内

2020-11-20 14:44:48 107 2

原创 用PHP实现一些常见的排序算法

1、冒泡排序:两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。function maopaoSort ($list){ $len = count($list); for ($i = 0; $i < $len - 1; $i++) { for ($j = 0; $j < $len - $i - 1; $j++) { if ($list[$j] > $list[$j + 1]) {

2020-11-19 15:15:21 130 1

原创 来讲一讲php的单例模式及应用场景

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了)好多没怎么使用过的人可能会想,单例模式感觉不怎么用到,实际的应用场景有哪些呢?以下,我将列出一些就在咱们周边和很有意义的单例应用场景。Windows的Task Manager(任务管

2020-11-18 10:45:46 954 5

原创 PHP定界符的使用既注意事项

使用定界符<<< 的注意事项定界符标识必须前后一致可以任意定义定界符标识,比如 echo html div ,尽量选用有意义的标识符,并遵循某类命名规范。开头标识后不能跟任何字符,空格也不可以,换行后再跟要输出的文本。结束标识(其后紧跟一个分号;)前后都不可有任何字符,即结束标识要顶头写,且独占一行,其后除紧跟分号外,不能有任何字符(空格也不可以)最后要注意的是,结束标识所在行不能成为脚本的最后一行,其下必须有空行或者其他代码行,否则报错。实例如下:<?php//格式

2020-11-17 10:47:15 40

原创 炒鸡简单的PHP实现消息实时推送功能

本文实例讲述了PHP实现的消息实时推送功能。分享给大家供大家参考,具体如下:入口文件index.html<!DOCTYPE HTML><html><head> <title>反ajax推送</title> <style> .send{color:#555;text-align: left;} .require{color:blue;text-align: right;} .content_box{

2020-11-16 15:01:45 97

原创 PHP程序员需要懂的两种日志

前言作为一名程序员,比码代码还重要那么一点点的东西就是日志的分析和查询。下面列出常见日志及设置方法。php-fpm 慢日志php慢日志需要在php-fpm.conf设置,如果使用源码包安装默认请执行下面命令cp php-fpm.conf.default php-fpm.conf默认通过源码包编译安装php目录应在/usr/local/php目录下,如果你通过yum或者其他方式安装,不清楚或不知道php具体安装目录,可以使用find / -name php-fpm.conforphp

2020-11-14 15:54:32 68

原创 php高并发问题思路

qps多少才算高并发首先是无状态前端机器不足以承载请求流量,需要进行水平扩展,一般QPS是千级。 然后是关系型数据库无法承载读取或写入峰值,需要数据库横向扩展或引入nosql,一般是千到万级。 之后是单机nosql无法承载,需要nosql横向扩展,一般是十万到百万QPS。 最后是难以单纯横向扩展nosql,比如微博就引入多级缓存架构,这种架构一般可以应对百万到千万对nosql的访问QPS。 当然面向用户的接口请求一般到不了这个量级,QPS递增大多是由于读放大造成的压力,单也属于高并发架构考虑的范畴。PV

2020-11-12 16:47:16 1293 7

原创 PHP队列的实现和操作步骤详解

队列是一种特殊的线性表,它只允许在表的前端,可以称之为front,进行删除操作;而在表的后端,可以称之为rear进行插入操作。队列和堆栈一样,是一种操作受限制的线性表,和堆栈不同之处在于:队列是遵循“先进先出”原则,而堆栈遵循的是“先进后出”原则。队列进行插入操作的端称为队尾,进行删除操作的称为队头,只允许在队尾进行插入操作,在队头进行删除操作。队列的数据元素又称为队列元素,在队尾中插入一个元素称为入队,在队头删除一个元素称为出队。具体实现参考代码:代码:<?php/*** php队列算法

2020-11-11 16:54:31 65 1

原创 PHP中的异常处理机制

1、异常概述异常(Exception)是一种错误处理机制,用于在指定的错误发生时改变脚本的正常流程。当异常被触发时,当前代码状态被保存,代码执行被切换到预定义的异常处理器函数(如果有)根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本2、异常的基本使用当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 “catch” 代码块。如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么

2020-11-10 11:04:41 370 6

原创 位运算在 PHP 实际项目当中的高级运用

来回顾一下这些基础知识,同时也会讲位运算在 PHP 实际项目当中的高级技巧。一、位运算知识回顾PHP 手册当中,专门对位运算及位运算符进行了使用介绍。1) 按位与运算符:&之所以称为位运算,指的是在运算过程中,我们会把两组需要位运算的数值进行二进制化,然后两组二进制的数字从低位向左对齐。这里的位指的是二进制数字的位置。而按位与运算符指的是两组数值每一位相与,同为 1 则 结果为 1,否则为 0。看 PHP 示例:echo 1 & 3; // 输出:1为什么会输出 1 呢?那

2020-11-09 15:46:10 57 1

原创 教你在docker中实现安装php拓展

一:php核心拓展包安装在docker中安装的php有一些核心的拓展包,他们一般放置在/usr/src/php/ext/目录下如下:docker exec -it php /bin/bash #进入php容器cd /usr/src/php/ext/dir如下展示的就是php的核心拓展包安装方式:#相关依赖安装apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcryp

2020-11-06 17:21:56 357 2

原创 nginx调用php-fpm的工作原理

nginx如何调用php采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。这一步对新手而言一般需要网上查资料,对于一般的熟手而言,也有不少同学并没有搞透彻为何要如此这般配置。本文的主要内容为如何在nginx server中正确配置php调用方法,以及配置的基本原理。一、nginx+php

2020-11-06 10:08:49 64

原创 PHPer需要用的shell常用命令(收藏)

前言使用Linux shell是一些程序员每天的基本工作,但我们经常会忘记一些有用的shell命令和技巧。当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务。需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件。下面话不多说了,来看看详细的内容吧。检查远程端口是否对bash开放:echo >/dev/tcp/8.8.8.8/53 && echo "open"让进程转入后台:Ctrl + z产生随机的十六进制数,其中n是字符数:openssl r

2020-11-04 10:31:02 962 4

原创 详解PHP的内存管理机制与垃圾回收机制

一、内存管理机制先看一段代码:<?php//内存管理机制var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存$a = "laruence";var_dump(memory_get_usage());unset($a);var_dump(memory_get_usage());//输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同)://int 240552//int 240720//in

2020-11-02 17:16:18 322 6

转载 php异步编程是怎样的?

前言传统的 php-fpm 一个进程执行一个请求,要达到多少并发,就要生成多少个进程。更糟糕的是每次请求都需要重新编译执行,导致并发一直上不来。因此出现了 Swoole 和 WorkerMan 两个国内流行的常驻内存框架。这两个框架原理都是通过事件循环,让程序一直停留在内存,等待外部请求,达到高并发。为什么需要异步先来看一个例子在工作目录下新建文件 slowServer.php<?phpsleep(5); // 5秒后才能返回请求echo 'done';开启服务$ php -S l

2020-11-02 10:43:29 78 1

原创 nginx 优化的六点方法

一.优化Nginx并发量[root@proxy ~]# ab -n 2000 -c 2000 http://192.168.4.5/Benchmarking 192.168.4.5 (be patient)socket: Too many open files (24) //提示打开文件数量过多修改Nginx配置文件,增加并发量[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf.. ..worker_proc

2020-10-31 10:47:54 70

原创 六种php加密解密方法讲解

看代码演示:<?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted;

2020-10-30 11:25:21 335 1

转载 利用laravel框架安装rabbitMQ

laravel框架的版本是5.81 laravel添加rabbitMQ2 composer require vladimir-yuldashev/laravel-queue-rabbitmq3composer update在config/app.php文件中,providers数组中添加VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::class,在app/config/queue.ph.

2020-10-29 11:17:13 80

原创 教你php利用redis实现消息队列解析

php+redis消息队列是php+mysql性能不足时的一个中间间处理方案。通过这个中间的处理,保证的数据的可用性和准确性。用于服务器瞬间请求大,数据库压力大的情况。如并发量大导致的超卖、并发量大导致的数据重复情况。流程:php接受请求和数据 -> php把数据写入redis队列中(入队) -> shell定时调用php读取队列数据写入mysql(出队)实现代码:入队:inqueue.php<?php$redis = new redis();$redis->connec

2020-10-28 15:26:48 952 8

原创 从PHP底层源码看 PHP 7 数组的实现

本文所用源码为 PHP 7.4.4 的版本。PHP 7 数组概述PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。 —— PHP 官方文档中文版这里主要关注两个点:key 可以是整数,也可以是字符串。Float、Bool、Null 类型的 key 会被转换为.

2020-10-27 11:19:06 405 3

原创 基于redis的分布式锁详解

在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现。固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效率高。redis锁失效的情况:客户端1从master节点获取了锁master宕机了,存储锁的key还没来得及同步到slave节点上slave升级为master客户端2从新的master上获取到同一个资源的锁于是,客户端1和客户端2同事持有了同一个资源的锁,锁的安全性被打破。如果我们不考虑这种极端情

2020-10-26 11:38:37 4425 14

原创 PHP网络编程:TCP和UDP的总结

TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致T

2020-10-23 11:02:56 67

原创 PHP多进程解析

我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守护进程时,多进程的优势不用多说。PHP的多线程也曾被人提及,但进程内多线程资源共享和分配的问题难以解决。PHP也有多线程想关的扩展 pthreads ,但据说不太稳定,且要求环境为线程安全,所用不多。追求高性能可用Swoole协程编程即可!要实现PHP的多进程,我们需要两个扩展 pcntl和 posix,安装方法

2020-10-13 16:23:14 85

原创 年薪50万PHP开发在腾讯是什么水平?

前两天和在腾讯的朋友聊了聊技术,我和他认识多年,在后端开发上经常切磋和交流。他在腾讯级别是(10级)!于是有了这篇文章,腾讯10级的程序员到底需要掌握哪些技术点!我也算是IT行业的老鸟了!从毕业进入腾讯的初级程序员做起,到现在的10级,一路走来感触颇多,前期对某个语言或者技术种类一定要专精成为这个领域的专家!举个栗子:每一个技术方向的背后都包含了众多技术细节,以开发一个分布式系统来说,需要分布式存储/数据库/缓存、中间件、RPC、消息系统、分布式一致性处理等多种技术。怎么去解决这些问题呢?1、 能够

2020-09-23 14:59:58 337

原创 B站最强PHP高级|PHP架构师腾讯T3高级架构全套实战教程

PHP架构师全套教程,点击下方视频观看 B站最强PHP高级|PHP架构师腾讯T3高级架构全套实战教程

2020-09-14 15:14:49 559 3

原创 PHP+MySQL消息队列

消息队列:在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。如图所示:在不使用消息队列的情况下,用户的请求数据直接写入数据库,再高并发的情况下,会对数据库造成巨的压力,同时也使得响应延迟加剧。在使用消息队列后,用户请求的数据发送给消息队列后立即返回,再由消息队列的消费者进程(通常情况下,该进程独立部署在专门的服务器集群上)从消息队列中获取数据,异步

2020-06-11 10:58:59 229

原创 PHP架构师技术-亿级pv多级缓存并发架构案例分析(负载限流算法、去重、延迟队列)

PHP架构师技术-亿级pv多级缓存并发架构案例分析(负载限流算法、去重、延迟队列)

2020-06-09 08:56:58 213

原创 PHP高级进阶教程-2020年大厂面试必备Redis入门到高并发秒杀、Redis分布式锁、接口限流实战教程

PHP高级进阶教程-2020年大厂面试必备Redis入门到高并发秒杀、Redis分布式锁、接口限流实战教程

2020-06-06 13:34:28 393

原创 使用xdebug对php做性能分析调优

安装 xdebug推荐使用 pecl 安装扩展pecl install xdebug注:可以选择版本, https://pecl.php.net/package/xdebug启用和配置如果不知道php的配置文件,可以用 php --ini 查看启用 xdebug,添加一个独立的 ext-xdebug.ini 到 php 的配置目录[xdebug]zend_extension="xdebug.so"# profiler功能的开关,默认值0,如果设为1,则每次请求都会生成一个性能报告文件。

2020-06-03 17:43:05 259

原创 C++类的定义和对象的创建详解

类和对象是 C++ 的重要特性,它们使得 C++ 成为面向对象的编程语言,可以用来开发中大型项目,本节重点讲解类和对象的语法,如果你对它们的概念还不了解,请先阅读《C++类和对象到底是什么意思》。类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。有些教程将类的成员...

2020-03-11 11:44:23 225

原创 C++函数重载详解

在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:void swap1(int *a, int *b); //交换 int 变量的值void swa...

2020-03-11 10:35:44 177

原创 C++ inline内联函数详解

函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。一个 C/C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 mai...

2020-03-11 10:18:51 252

原创 C++ new和delete运算符简介

在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。如下所示:int p = (int) malloc( sizeof(int) * 10 ); //分配10个int型的内存空间free§; //释放内存在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。用 n...

2020-03-11 10:07:24 168

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除