php
大仙带你飞
活到老,学到老!
展开
-
数据库的分库分表思想,高级工程师必备
前言关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维 度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个...原创 2020-03-04 19:35:47 · 257 阅读 · 0 评论 -
PHP实时消息推送,你在用websocket吗?
前言最近在学习websocket协议,就基于websocket实现了实时消息推送的功能。正文什么是WebSocketWebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术。WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程。其目的是在WebSocket应用和WebSocket服务器进行频繁双向通信时,可以使服...原创 2020-02-28 17:27:25 · 487 阅读 · 0 评论 -
架构之路-微服务
前言要想成为一名优秀的机构师,掌握微服务是必不可少的,那什么是微服务呢?使用微服务有什么好处?下面带大家来了解这个被越来越多人使用的东西。正文什么是微服务微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。一.单体架构1.1什么是单体架构在软件设计的时候经常提到和使用经典的3层模型,即表现层,业务逻...原创 2020-02-28 14:12:22 · 124 阅读 · 0 评论 -
php怎么发送请求你知道吗
前言前端可以发送请求,后端也可以,php里的curl提供了这个操作,下面是我封装的curl,支持post和get方式,大家觉得写得还不错可以直接拿来用哦正文private static function doCurl($url, Array $data = [], $isPost = 0, $header = [], $timeOut = 25, $cookie = '') { ...原创 2020-02-26 18:32:55 · 153 阅读 · 0 评论 -
laravel 使用路由api.php
前言laravel框架是我们常用的框架,前后端分离趋势下api.php的用途越来越大。话不多说,下面实战带大家熟悉他。正文1) 在 文件中: routes/api.php添加:Route::get('fei', 'FeiController@index'); Route::get('/hello', function () { return 'world';...原创 2020-02-26 18:00:48 · 4683 阅读 · 1 评论 -
我们该选择workman还是swoole呢?
前言 php的基于socket的异步框架有哪些呢?我目前见过的就两种,一种是workman框架,一种是基于swoole开发出来的框架。那么两种我们该选择那种呢?正文workermanworkerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用...原创 2020-02-19 11:51:26 · 2456 阅读 · 0 评论 -
php常见的三种框架比较
前言 最近在网上查了一下php的最常用的三种框架tp,laravel,yii2的资料并结合自己的理解总结一下三种框架的优缺点,话不多说请看正文。正文 yii2: 优点:gii蛮不错的,简化了开发流程,可以生成绝大数的代码,开发后台等效率还是蛮高的 缺点:前后端完全的分离的趋势下,yii2前后端的耦合的还是有些重了 laravel:...原创 2020-02-19 11:02:10 · 1140 阅读 · 0 评论 -
吴大仙带你三分钟学会swoole框架
前言最近在学习swoole这个东西,就写点心得吧。基于swoole的开源框架很多,优缺点自己百度,凡是有用到websocket和消费队列选择基于swoole的框架是不错的选择。好吧话不多说,吴大仙就介绍一下swoole的一个简单入门吧正文swoole有两个部分。 一个是PHP扩展,用C开发的,这是核心。 另一个是框架,像yii、TP、Laravel一样,是PHP代码写的。swool...原创 2020-02-14 12:46:03 · 680 阅读 · 1 评论 -
学了框架这么久,你知道laravel与tp的区别的吗?
前言 因为疫情原因,电话面试某扑上市公司,被问到laravel和tp的区别,突然被问这个问题有点措不及防,个人回答的不算太好只答了中间件。面试结束之后查了资料,才发现大部分都知道有用过,临时太紧张了真的想不起来。也是希望各位小伙伴不要轻视基础问题,对每个知识点要多加留意。准备好,面试才会从容不迫。正文1、TP框架:ThinkPhp简单、快速,基于MVC和面向对象,易用性...原创 2020-02-06 15:32:23 · 2757 阅读 · 1 评论 -
面试官问你php协程,你要这样告诉他
多任务 (并行和并发)在讲协程之前,先谈谈多进程、多线程、并行和并发。对于单核处理器,多进程实现多任务的原理是让操作系统给一个任务每次分配一定的 CPU 时间片,然后中断、让下一个任务执行一定的时间片接着再中断并继续执行下一个,如此反复。由于切换执行任务的速度非常快,给外部用户的感受就是多个任务的执行是同时进行的。多进程的调度是由操作系统来实现的,进程自身不能控制自己何时被调度,也就是说...原创 2020-02-06 11:52:19 · 359 阅读 · 0 评论 -
分享个人对多进程和多线程的理解
php开发需要了解进程和线程,因为也会遇到多线程的开发。那什么是进程和线程呢?一起来唠唠吧。内容概要:1、什么是进程2、什么是线程3、进程和线程的关系4、php编程常见的进程和线程一、什么是进程进程是程序执行是的一个实例,进程能够分配给cpu和内存等资源。进程一般包括指令集和系统资源,其中指令集就是你的代码,系统资源就是指cpu、内存以及I/O等。二、什么是线程...原创 2020-02-06 11:35:31 · 273 阅读 · 0 评论 -
什么是php多线程?
PHP在默认的情况下是不支持多线程的,通过安装pthreads扩展,让其参数来指定编译PHP的线程安全方式来使其支持多线程,但是使用的过程中要考虑到线程安全的问题线程是操作系统中进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。今天将要分享的是线程知识是有关于PHP的,具有一定的参考价值,希望对大家有所帮助多线程的理解所谓多线程就是在在一个进程中可以并发多个线程,...原创 2020-02-06 11:25:44 · 1921 阅读 · 0 评论 -
php常用的扩展组件
1)ZendGuardLoader用优化代码的方法来提高php应用程序的执行速度;PHP源码加密;2)ioncube_loadersPHP源码加密;3)php-imagick、php-gmagick图片处理,功能强于GD库4)php-memcached、php-redis数据库缓存,需要调整代码结构5)xcachePHP缓存,不需要调整代码一般会选择xcache+...原创 2020-02-05 20:22:22 · 608 阅读 · 0 评论 -
WebSocket协议?你了解多少?
我们一直使用的http协议只能由客户端发起,服务端无法直接进行推送,这就导致了如果服务端有持续的变化客户端想要获知就比较麻烦。WebSocket协议就是为了解决这个问题应运而生。WebSocket协议,客户端和服务端都可以主动的推送消息,可以是文本也可以是二进制数据。而且没有同源策略的限制,不存在跨域问题。协议的标识符就是ws。像https一样如果加密的话就是wxs。简单实例客户端代码...原创 2020-02-05 20:08:06 · 248 阅读 · 0 评论 -
如何处理负载、高并发?
答:从低成本、高性能和高扩张性的角度来说有如下处理方案:1、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。2、图片服务器分离把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如骑牛等3、数据库集群和库表散列及缓存数据库的并发连接为...原创 2020-02-04 15:55:20 · 1983 阅读 · 0 评论 -
常见的 PHP 安全性攻击
SQL注入:用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。防止:使用mysql_real_escape_string()过滤数据 手动检查每一数据是否为正确的数据类型 使用预处理语句并绑定变量 参数化SQL:是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,用@或?来表示参数。XSS攻击:跨站点脚本攻击,由用户输入一些数...原创 2020-02-04 12:54:16 · 1419 阅读 · 0 评论 -
静态化如何实现的?伪静态如何实现?
1、 静态化指的是页面静态化,也即生成实实在在的静态文件,也即不需要查询数据库就可以直接从文件中获取数据,指的是真静态。实现方式主要有两种:一种是我们在添加信息入库的时候就生成的静态文件,也称为模板替换技术。一种是用户在访问我们的页面时先判断是否有对应的缓存文件存在,如果存在就读缓存,不存在就读数据库,同时生成缓存文件。2、伪静态不是真正意义上的静态化,之所以使用伪静态,主要是为了SE...原创 2020-02-04 12:42:52 · 926 阅读 · 0 评论 -
腾讯的一道面试题
使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串(腾讯)个人解法(仅供参考):<?phpheader("content-type:text/html;charset=utf-8");f...原创 2020-02-04 12:08:25 · 264 阅读 · 0 评论 -
php中WEB上传文件的原理是什么,如何限制上传文件的大小?
上传文件的表单使用post方式,并且要在form中添加enctype='multipart/form-data'。一般可以加上隐藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上传文件的客户端字节限制。可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。使...原创 2020-02-04 12:04:48 · 1261 阅读 · 0 评论 -
面试你讲的清楚OOP吗?
oop是什么?答:oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP具有三大特点1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现...原创 2020-02-04 11:48:38 · 426 阅读 · 0 评论 -
从一个标准url获取文件后缀,你知道怎么处理嘛?
今天面试了一个公司,其中有个面试题就是从标准url获取文件后缀,刚看到 这个题目,就想url是一个字符串,所以获取文件后缀就是截取一段字符串。 本人提供两种方案: //方案一functiongetExt1($url){$arr=parse_url($url);//Array([scheme]=&g...原创 2020-02-04 11:45:14 · 646 阅读 · 0 评论 -
算法-洗牌算法
今天面试了一家公司,要求写洗牌算法,我想这个很简单啊,就是要求输出不同的牌并且牌的顺序尽量分开嘛想了一下代码就出来了(php实现比较简单,其他语言可能复杂一点单思想是一样的),当然了还有很多的算法可以实现,以下为个人代码:<?php/*** 洗牌程序* edit wuhaifei* email 18879388361@163.com* at 2020/2/1*/$ca...原创 2020-02-01 15:59:19 · 321 阅读 · 0 评论 -
与大家分享一下,在workerman开发中遇到的问题与解决方法
在workerman开发过程中,遇到了很多问题,我都总结了一下,与大家分享:如果还不懂的,建议去看看这套教程,希望能帮助到你!1 workerman无法正常访问问题描述:在阿里云ECS上部署了workerman的应用(ECS是专有网络),在ECS安全组里已经允许workerman需要的全部端口,但是外网一直不能正常打开(注,其他服务,比80端口外部是可以用访问的)。telnet连接显示“No...原创 2020-01-13 20:28:13 · 3270 阅读 · 1 评论 -
设计模式-装饰器模式
我们都知道,得到一匹布需要大概这么几步: 1、染色 2、印花 3、裁剪 这种形式在面向对象中怎么实现呢?面向过程【继承模式】实现: 继承模式得到需要的布料,一步一步的加工。 继承的层次越来越深,扩展性差。如果中间加道其他程序,就有些吃力了。<?php header("content-type:text/html;ch...原创 2020-01-08 12:14:07 · 100 阅读 · 0 评论 -
设计模式-策略模式
策略模式 简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果就应用场景来说:例1:比如购买商品需要支付,你可以提供 微信支付、支付宝支付、支付通支付。。。。(不同的支付方式就是不同的策略)例2:购物车对产品的计价,如非vip 按原价计算 、vip按8折计算、有推广积分的可以用100积分抵20块。。。(不同的客户条件计价算法有所不同,只是这里的策略选择是根据登录顾客资料来...原创 2020-01-08 11:54:41 · 134 阅读 · 0 评论 -
设计模式-观察者模式
一.观察者模式特点解释:观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码,而观察者模式实现了低耦合,非侵入式的通知与更新机制二...原创 2020-01-08 10:34:28 · 171 阅读 · 0 评论 -
设计模式-适配器模式
一.适配器模式的特点适配器模式核心思想:把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)--适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则。角色:目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待...原创 2020-01-08 09:59:47 · 248 阅读 · 0 评论 -
设计模式-单例模式
一、三私一公:①、私有静态属性,又来储存生成的唯一对象②、私有构造函数③、私有克隆函数,防止克隆——clone④、公共静态方法,用来访问静态属性储存的对象,如果没有对象,则生成此单例二、关键词instanceof检查此变量是否为该类的对象、子类、或是实现接口。1、一个private的__construct是必须的,单例类不能在其它类中实例化,只能被自身实例化;2、拥有...原创 2020-01-07 22:15:53 · 97 阅读 · 0 评论 -
面试问有哪几种垃圾回收算法,再也不怕了!
可以从不同的的角度去划分垃圾回收算法:一、按照基本回收策略分初级篇引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep):此算法执行分两阶段。第一阶段从引用根节点开始标...原创 2020-01-07 14:21:40 · 236 阅读 · 0 评论 -
为PHP面试而准备的算法题总结
1、插入排序(一维数组)基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。示例:[初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49 ...原创 2020-01-06 18:59:00 · 173 阅读 · 0 评论 -
如何才能让PHP应用性能维持在更高水平
默认情况下安装的PHP类似于在百货商店中购买的常规软件包,但它非常合适,但并不完美。调优的PHP就像是量身定制的装备。但是,应该注意的是,调优PHP只是提高PHP性能和效率的一种手段,它与不良的代码和无响应的API调用无关。php.ini文件PHP 解释器在php.ini文件中配置和调优,此文件的位置在不同的操作系统中是不同的,并且常规命令行对应php.ini和 PHP-FPM 对...原创 2020-01-06 18:50:48 · 263 阅读 · 0 评论 -
工作中常用的正则表达式
一、校验数字的表达式数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$ 正数、负数、和小...原创 2020-01-05 19:16:22 · 112 阅读 · 0 评论 -
php数组函数大全
函数 描述array() 创建数组。array_change_key_case() 把数组中所有键更改为小写或大写。array_chunk() 把一个数组分割为新的数组块。array_column() 返回输入数组中某个单一列的值。array_combine() 通过合并两个数组来创建一个新数组。array_count_values() 用于统计数组中所有值出现的次数。array_d...原创 2019-12-28 18:34:15 · 130 阅读 · 0 评论 -
商品超卖问题,你用PHP如何解决?
商场活动秒杀超卖问题,实际上是商品抢购活动,如果一个商品中有100件库存,但是在抢购过程中有1000人来抢购,那么就会出现并发情况, 最初只有100个库存,但要抢购,人数过多,数据库中将只有100个库存,但是当库存为0时也是有人会成功提交。这是超卖问题。这篇文章是简单的用redis队列来解决超卖问题。redis有list类型,而list类型一个双向链表。我们可以通过push和pop操作从链表的头...原创 2019-12-29 12:40:43 · 1005 阅读 · 0 评论 -
PDO和Mysqli对比分析,你总结归纳一下吧
php操作mysql数据库,大家都知道有三种驱动,mysql mysqli pdo,其中mysql在php7之后被废除了。不是本文重点。咱现在来分析一下mysqli和PDO的区别,下面一张表用来说明他们的区别连接方式// PDO$pdo = new PDO(“mysql:host=localhost;dbname=database”, ‘username’, ‘password’);// ...原创 2019-12-29 12:43:13 · 731 阅读 · 0 评论 -
PHP7带来了哪些重大的变革,你知道吗?
PHP7在性能方面带来的好处,性能上的大幅度提升,可以省机器,可以省钱。 而且还变革了很多新的东西,下面我们一起来看看吧!PHP7带来的新东西1.类型的声明。可以使用字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool),来声明函数的参数类型与函数返回值。declare(strict_types=1);function add(int $a, i...原创 2019-12-29 12:45:24 · 137 阅读 · 0 评论 -
php字符串函数大全
PHP String 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。函数 描述addcslashes() 返回在指定的字符前添加反斜杠的字符串。addslashes() 返回在预定义的字符前添加反斜杠的字符串。bin2hex() 把 ASCII 字符的字符串转换为十六进制值。chop() 移除字符串右侧的空白字符或其他字符。chr() 从指定 ASCII 值返回字符。ch...原创 2019-12-29 14:10:02 · 187 阅读 · 0 评论 -
PHP 使用 Redis
安装开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases。PHP安装redis扩展以下操作需要在下载的 phpredis 目录中完成:$ wget ht...原创 2019-12-28 18:26:24 · 92 阅读 · 0 评论 -
经常遇到的3大Web安全漏洞防御详解:XXS,CSRS以及SQL注入
这篇文章主要给大家介绍最经常遇到的3个:XXS,CSRF, SQL注入。一、XSS漏洞1.XSS简介XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此...原创 2019-12-29 12:48:11 · 751 阅读 · 0 评论 -
这些经典算法面试题你都不会的话,不要去应聘啦!
1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。function king($n, $m){$monkeys = range(1, $n); //创建1到n数组...原创 2019-12-29 16:47:11 · 323 阅读 · 0 评论