自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 干货预警,一篇文章带你彻底搞懂 Laravel 框架的底层运行原理!!!

前言知其然知其所以然,刚开始接触框架的时候大不部分人肯定一脸懵逼,不知道如何实现的,没有一定的基础知识,直接去看框架的源码,只会被直接劝退,Laravel 框架是一款非常优秀的 PHP 框架,这篇文章就是带你彻底搞懂框架的运行原理,好让你在面试的过程中有些谈资(吹牛),学习和研究优秀框架的源码也有助于我们自身技术的提升,接下来系好安全带,老司机要开始开车了!!!准备知识熟悉 php 基本知识,如常见的数组方法,闭包函数的使用,魔术方法的使用熟悉 php 的反射机制和依赖注入熟悉 php 命名空间

2020-12-22 16:43:43 1208

原创 关于Git命令之cherry-pick的使用

一、前言对于多分支的代码库,将代码从一个分支转移到另一个分支是一个常见的需求。这个时候就得分为两种情况。一种情况是:你需要这个分支上面的所有代码,那就采用合并,直接使用git merge或者git rebase命令即可。另外一种情况就是,你只需要这个分支上面的某些提交,那就需要采用gii cherry-pick的命令,这个操作在日常开发的工作中,也是非常的常用,需要我们记住和学习。最近在工作中就遇到了类似的问题,一个开发分支上修改了代码,需要上线,但是当前分支上还在开发其他的功能,不能直接合并到rel

2020-08-21 11:25:53 1403

原创 一些非常好用的laravel框架扩展包你还不知道么?

前言自从有了 composer 包管理工具,出现大量优秀的扩展包,让我们可以解放双手,大大提高我们的开发效率,有了更多的时间去 enjoy life and accompany family,下面我将会列出工作中用到的一些扩展包,希望对大家有所帮助,我不会给出详细的使用说明,大家在使用之前最好先去看下官方的文档,以文档为主,show time,enjoy!!!扩展包1、PHP 导出百万级数据到表格简介:PHP 导出是一个比较常见的功能,但常规的导出却有一个内存瓶颈,导致速度慢,甚至会将整个服务给挂

2020-12-24 13:55:42 756 2

原创 接口和抽象类的区别你真的知道吗?

前言在刚开始学习面向对象语言时,一定会学到抽象类和接口,它们之间的区别又是什么呢?什么时候该用抽象类?什么时候该用接口呢?抽象类和接口的语法特性抽象类可以被继承但是不能够被实例化,抽象类中可以有抽象方法和普通方法,某个类继承抽象类必须实现抽象类中的抽象方法。接口不能包含属性,只能声明方法,方法不能包含具体的实现,类实现某个接口的时候,必须实现接口中的所有方法。抽象类和接口存在的意义抽象类是对成员变量和方法的抽象,是一种 is-a 的关系,是为了解决代码复用的问题。接口仅是对方法的抽象,是一种 ha

2020-10-09 10:45:04 203

原创 深入理解Laravel框架Composer自动加载机制

前言自动加载文件是一个框架的核心,在很久之前没有引入 composer 包管理之前,引入代码文件都是直接通过 require 和 include 的方式,在项目很小的时候,问题不是很大,但是对于一个庞大的项目来说,这种引入方式,使得代码结构混乱不堪,难以维护,基于Psr规范的 composer 很好的解决了这个问题,下面基于 Laravel 框架的源码分析 Composer 自动加载的原理。Composer 源码分析启动define('LARAVEL_START', microtime(true))

2020-09-22 15:52:22 1068

原创 PHP中ArrayAccess用法小结

概述在学习 laravel 框架或者其他的框架的源码中,你会经常看到 ArrayAccess 的身影,那它到底有什么用处呢?其实实现这个类可以让我们以调用数组的方式来调用对象的属性,十分的方便,如果你不理解这个类的用法,那你就很难理解 laravel 框架中门面模式的实现。详解请看下面的这段代码,Foo 类实现了 ArrayAccess 接口中的四个方法,请仔细看看这些方法的内部实现代码,你可能会会问,这些代码有什么用?如果问,那就是没用,随便怎么写,按照自己的需求来,接口中这四个方法的内部实现其实和

2020-09-18 15:28:40 130

原创 大厂面试常见问题之缓存穿透、缓存击穿和缓存雪崩

概述redis 是一个高性能的基于内存的非关系型数据库,我相信在互联网工作的程序员,对 redis 都不会太陌生,redis 在日常的工作中,用的非常广泛,应用场景非常之多,比如:缓存、排行榜、计数器、简单的消息队列和 session 共享等等。任何事物都有两面性,redis 在使用中也存在一些问题,比如缓存穿透、缓存击穿和缓存雪崩等等。缓存穿透定义客户端支持的发起对不存在 redis 中的数据的请求,导致请求直接落到数据库中,对数据库产出压力解决方案接口层进行参数检验,如果 id 是从0开始

2020-09-18 15:25:53 184

原创 crontab定时任务小结

crontab 定时任务通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或者 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或者数据备份的工作,在日常工作中用的非常的广泛。crontab 命令格式分 时 日 月 周 要运行的命令第一列分钟0~59第二列小时0~23(0表示子夜)第三列日1~31第四列月1~12第五列星期0~7(0和7表示星期天)第六列要运行的命令实例* * * *

2020-09-10 11:51:18 703

原创 Nginx和PHP-FPM通信机制小结

CGI协议与FastCGI协议每种动态语言(PHP,Python等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI(Common Gateway Interface) 通用网关接口协议就是用来使解释器和服务器可以互相通信。PHP文件在服务器上的解析需要用到PHP解析器,再加上对应的 CGI 协议,从而可以使服务器可以解析PHP文件。由于CGI的机制是每次处理一个请求,fork一个进程,等请求处理完成后,再去 kill 这个进程,在实际应用中比较浪费资源,于是就出现了 CGI 的改良版本 Fa

2020-09-08 12:18:27 200

原创 一分钟搞懂nginx之location匹配和转发规则

前言location 匹配路由转发是nginx配置中最常见的配置,最近正在学习相关的知识,记录一下。location配置规则匹配规则=严格匹配,如果请求匹配这个location,则停止搜索并且处理这个请求~区分大小写匹配(可用正则表达式)~*不区分大小写匹配(可用正则表达式)!~区分大小写不匹配!~*区分大小写不匹配^~前缀匹配@“@” 定义一个命名的location,使用在内部定向时/通用匹配location匹配顺序

2020-09-04 11:41:15 3554

原创 深入了解Laravel框架之容器技术

一、前言在 laravel 框架中,如果问什么是设计最巧妙也是最需要掌握的内容,毫无疑问的就是服务容器。laravel 框架之所以能够具备低耦合、易扩展和可重用的优秀特性,也正是因为有了容器。如果将整个 laravel 框架比喻成一个人,那么服务容器就是相当于人的大脑,其重要性不言而喻。下文就对 laravel 框架中的容器相关源代码进行解析,原文较长,但是我相信看完必然会有所收获。二、源码解析在 laravel 框架中,服务容器是通过 Illuminate\Container\Container

2020-08-29 16:00:02 555

原创 一分钟搞懂设计模式之模板方法模式

一、模板方法模式的定义模板方法是在一个算法中定义一个算法的骨架,具体的实现延迟到子类中去实现。模式方式可以使得子类在不改变算法结构的情况下,重新定义算法某些步骤的实现。看到 “设计模式” 我们往往感觉高深莫测,其实模板方法模式非常之简单,我们只需要关心一个方法而已。二、模板方法的使用场景当算法的实现的骨架或者步骤是相对固定的,而其中某些实现方法的步骤是不一样的时候,就可以使用模板方法模式。多个子类有共同的方法,并且逻辑基本上相同。重要复杂、核心的方法可以设计为模板方法,周边的相关的细节

2020-08-28 18:50:57 222

原创 关于Git分支模型的思考

现状现有分支 feature,develop (测试),release (沙箱),master(生产)提交的顺序为 master -> feature -> develop -> release -> master问题目前develop的代码一定会被提交到release,同时很多时候为了测试和前后端联调,需要临时把代码合并到 develop 分支上面去,就会导致临时测试的代码会被裹挟到 release 分支上面去,导致沙箱环境代码被污染,所以测试分支的代码需要和沙箱环境的代

2020-08-25 15:20:11 239

原创 分分钟让你了解依赖注入和控制反转

前言在面试过程中,我们常常会被问到框架的源代码和原理,而这对于刚刚毕业不久的开发人员,经常都是一脸懵逼,而这几乎离不开依赖注入和控制反转,几乎市面上的每种语言的每个框架都会实现了容器技术,为了提高代码的高内聚和低耦合,实现代码的高度复用,提高代码的可维护性和可扩展性,所以其重要性不言而喻,今天分分钟让你理解什么叫做依赖注入和控制反转,看完还不理解的,你尽管骂我渣男,反正我也不会承认的,哈哈哈。。。,铺垫到此结束,下面我们开始表演吧,俗话说:talk is cheap,show me code,show

2020-08-21 11:32:17 185

原创 通过变量指定少量用户实现AB测试(灰度测试):split_client模块

前言灰度测试或者AB测试,这个概念我相信大家都不陌生了,也是互联网公司常见的迭代方式。最近公司有个很老的SDK项目,完全的面向过程方式,很难维护和管理,所以决定在此基础上对此SDK项目进行重构,使用面向对象风格编写代码,经过大概两周的努力,顺利迁移sdk项目,但是目前还有项目在使用以前的SDk,此时需要一个过渡方案,一部分用户还是正常使用以前的SDK,而一部分少量的用户直接走新的接口,最终我们采用了nginx的split_client模块进行灰度测试。配置实例nginx中http配置段split_c

2020-08-21 11:30:18 471

空空如也

空空如也

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

TA关注的人

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