201906-12 PHP7中的异常与错误处理 HOT PHP中的Exception,Error,ThrowablePHP中将代码自身异常(一般是环境或者语法非法所致)称作错误 Error,将运行中出现的逻辑错误称为异常 Exception错误是没法通过代码处理的,而异常则可以通过 try/catch 来处理PHP7中出现了 Throwable 接口,该接口由 Error 和 Exception 实现,用户不能直接实现 Throwable 接口,而只能通过继承 Exception 来... 继续阅读 >
201906-12 Api接口设计注意事项 HOT 设计接口是一件容易的事,也是件困难的事。设计接口每个人都会,每个人都能设计,也由此产生了各种各样的理念的接口。工作这么多年,我也很有感悟。很多人会说,设计接口多么简单,只要命名好,然后联调通了,上线可以调用就行了。特别是非互联网行业的人,这里没有歧视的意思。因为互联网行业和传统行业太多不一致性决定了这种思想的产生。 继续阅读 >
201906-11 RBAC用户角色权限设计方案 HOT 有人认为设计用户组时还需要为用户添加用户组以及为用户组添加权限,这和直接对单个用户添加权限异曲同工.但是当需要给已经存在的用户赋予权限时,如果之前使用了用户组这样的设计模式,那么便可以直接在用户组中赋予权限,不必去给每个用户赋予权限.而且使用用户组也是体现用户层级关系的一种结构,所以个人认为使用用户组是有必要的. 继续阅读 >
201906-11 负载均衡原理的解析 HOT 开头先理解一下所谓的“均衡”不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就是希望所有服务器都不要过载,并且能够最大程序地发挥作用。一、http重定向当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL... 继续阅读 >
201906-11 稳了!这才是cookie,session与token的真正区别 HOT Tokens能够创建与其它程序共享权限的程序。例如,能将一个随便的社交帐号和自己的大号(Fackbook或是Twitter)联系起来。当通过服务登录Twitter(我们将这个过程Buffer)时,我们可以将这些Buffer附到Twitter的数据流上(we are allowing Buffer to post to our Twitter stream)。 继续阅读 >
201906-11 Redis实现订阅发布与批量发送短信 HOT Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。直接点,你可以理解为我关注了你,你发布了信息,文章等,我就可以立马收的到。 继续阅读 >
201906-10 经典面试题:如何保证缓存与数据库的双写一致性? HOT 只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 继续阅读 >
201906-10 PHP中traits的作用和使用 HOT php是一种单一继承的语言,我们无法像java一样在一个class中extends多个基类来实现代码重用,现在Traits能解决这一代码重用的问题,它能让开发者在多个不同的class中实现代码重用。 继续阅读 >
201906-06 除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等 HOT Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。 继续阅读 >
201906-05 知乎千万级高性能网关是如何搭建的? HOT 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你们在直播弹幕里不约而同的666,它们的背后都离不开长连接技术的加持。每个互联网公司里几乎都有一套长连接系统,它们被应用在消息提醒、即时通讯、推送、直播弹幕、游戏、共享定位、股票行情等等场景。而当公司发展到一定规模,业务场景变得更复杂后,更有可能是多个业务都需要同时使用长连接系统。业务间分开设计长连接会导致研... 继续阅读 >
201906-05 Laravel 底层是如何处理 HTTP 请求的? HOT 总体流程Web服务器对HTTP请求的处理流程大体上都是这样的:在某个端口监听请求,请求进入后运行程序,然后将程序运行结果以响应的形式发送出去。基于Laravel框架构建的Web应用处理HTTP请求的流程也是如此。所有HTTP请求都会被转发到单入口文件 public/index.php,处理HTTP请求的核心代码如下(忽略HTTP请求处理之外的代码):在上面这段程序中,首先会创建一个 Application 实例,作为... 继续阅读 >
201906-04 PHP生成器的创建和使用 HOT 1、概述生成器是PHP5.5引入的新特性,但是目测很少人用到它,其实这是个非常有用的功能。生成器和迭代器有点类似,但是与标准的PHP迭代器不同,PHP生成器不要求类实现Iterator接口,从而减轻了类的开销和负担。生成器会根据需求每次计算并产出需要迭代的值,这对应用的性能有很大的影响:试想假如标准的PHP迭代器经常在内存中执行迭代操作,这要预先计算出数据集,性能低下;如果要使用特定方式计算大量数据,如操作Excel表... 继续阅读 >
201906-04 PHP实现SSO单点登录步骤 HOT 一、什么是单点登录SSO(SingleSign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。二、单点登录解决了什么问题解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。 例如C... 继续阅读 >
201906-04 PHP代码安全有必要了解下 HOT SQL注入攻击者通过构造恶意SQL命令发送到数据库,如果程序未对用户输入的SQL命令执行判断过滤,那么生成的SQL语句可能会绕过安全性检查,插入其他用于修改后端数据库的语句,并可能执行系统命令,从而对系统造成危害例如删除id为1的帖子,sql如下:如果有人在提交post_id时输入1OR1,你的语句会组合成这样:一般比较常出现在原生的SQL操作,框架一般会解决这方面的问题。通常采用参数控制或过滤特殊字符... 继续阅读 >
201906-04 MySQL 到底是怎么解决幻读的? HOT 一、什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读。而多出来或者少的哪一行被叫做幻行。二、为什么要解决幻读在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性。三、MySQL是如何解决幻读的如果你看到了这篇文章,那么我会默认你了解了脏读、不可重复读与可重复读。1.多版本并发控制(MVCC)(快照读/一致性读)多数数据库都实现了多版本并... 继续阅读 >
201906-03 为什么Redis 是单线程却能支撑高并发? HOT 最近在看UNIX网络编程并研究了一下Redis的实现,感觉Redis的源代码十分适合阅读和分析,其中I/O多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种I/O模型为什么Redis中要使用I/O多路复用这种技术呢?首先,Redis是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以I/O操作在一般情况下往往不能直接返回... 继续阅读 >
201906-03 Laravel5实现的RBAC权限管理操作示例 HOT 根据不同的权限,在菜单栏显示不同的功能,只对菜单进行了限制,若对路由也进行限制,可以根据菜单的例子,请自行完善,开发。下面请认真学习一下laravel的RBAC设计1、建表(用户表、角色表、权限表、用户角色表、角色权限表)CREATE TABLE IF NOT EXISTS mr_role(id int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增id',name varchar(30) NOT N... 继续阅读 >
201906-03 workerman定时任务 HOT 一、下载workermanhttps://www.workerman.net/download二、下载workerman/mysqlhttp://doc3.workerman.net/6402011、定时函数为匿名函数(闭包)use \Workerman\Worker;use \Workerman\Lib\Timer;require_once './Workerman/Autoloader.php';$task = new Worker();// 开启多少个进程运行定时任务,注意多进程并发问题$task->count = 1;$task->onWorkerStart ... 继续阅读 >
201906-03 PHP实现下载与压缩文件的封装与整理 HOT 1、PHP实现打包zip并下载功能$file_template = FCPATH.'canddata/cand_picture.zip';//在此之前你的项目目录中必须新建一个空的zip包(必须存在)$downname = $card.'.zip';//你即将打包的zip文件名称$file_name = FCPATH.'canddata/'.$card.'.zip';//把你打包后zip所存放的目录$result = copy( $file_template, $file_name );//把原来项目目录存在的zip复制一... 继续阅读 >
201906-01 Mysql数据库的分布式锁有哪几种? HOT 悲观锁Mysql实现分布式悲观锁:直接创建一张锁表,然后通过操作该表中的数据来实现了。当我们要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。创建这样一张数据库表:CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `method_name` varchar(64) NOT NULL&nb... 继续阅读 >
201906-01 整理了Git遇到错误时如何解决的一些坑 HOT 在工作中,你总是与代码打交道,上传代码的时候,相信你不是用svn,就是用Git版本控制器,下面是最近这几天整理下来经常会遇到的Git的一些错误的解决访问,希望能帮助到你。 继续阅读 >