控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递(注入)给它。
运维-Laravel 开发文档
Laravel 是一个由Taylor Otwell所创建,免费的开源[3] PHP Web 框架,旨在实现的Web软件的MVC架构,并作为CodeIgniter的替代方案。
运维-Laravel Homestead 开发环境
Laravel Homestead 实际是一个打包好各种 Laravel 开发所需软件和工具的 Vagrant 盒子(关于 Vagrant 盒子的释义请参考 Vagrant 官方文档),该盒子为我们提供了一个优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、Composer、Nginx、MySQL、Memcached、Redis、Node 等其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!
杂项-碎片资料整理
当你在浏览器地址栏输入一个URL后回车,浏览器做了什么?
1、浏览器的url请求
2、递归寻找DNS服务器
3、连接目标IP并建立TCP连接
4、向目标服务器发送http请求
5、web服务器接收请求后处理
6、web服务器返回相应的结果【无效、重定向、正确页面等】
7、浏览器接收返回的http内容
================================前端解析分割线===========================================
8、开始解析html文件,当然是自上而下,先是头部,后是body
9、当解析到头部css外部链接时,同步去下载,如果遇到外部js链接也是下载【不过js链接不建议放在头部,因为耽误页面第一展现时间】
10、接着解析body部分,边解析边开始生成对应的DOM树,同时等待css文件下载
11、一旦css文件下载完毕,那么就同步去用已经生成的DOM节点+CSS去生成渲染树
12、渲染树一旦有结构模型了,接着就会同步去计算渲染树节点的布局位置
13、一旦计算出来渲染的坐标后,又同步去开始渲染
14、10-13步进行过程中如果遇到图片则跳过去渲染下面内容,等待图片下载成功后会返回来在渲染原来图片的位置
15、同14步,如果渲染过程中出现js代码调整DOM树机构的情况,也会再次重新来过,从修改DOM那步开始
16、最终所有节点和资源都会渲染完成
=========================================分析结束分割线==============================================
17、渲染完成后开始page的onload事件
18、整个页面load完成
Redis主从复制
1 | 1:当一个从数据库启动时,会向主数据库发送sync命令, |
Mysql主从复制原理及流程
1 | 1) I/O 线程向主库发出请求 |
MAC 取消开机启动项
1 | - 通过系统设置 |
parallels 虚拟机 windows 忘记密码重置
1 | https://docs.virtuozzo.com/virtuozzo_7_command_line_reference/managing-virtual-machines/prlctlvm.html |
运维-SSR安装
SSR服务器
1 | https://github.com/shadowsocksr-backup/shadowsocksr/tree/manyuser |
SSR客户端
1 | ShadowsocksX-NG |
SSR配置
./mudb.json 配置
1 | [ |
SSR命令
1 | # 开启服务并记录日志 |
Python-WingIDE安装破解
Wingware的Wing Python IDE集成开发环境系列是专门为Python编程语言创建的。这些轻量级但功能齐全的Python IDE旨在加快编写,调试和测试代码的速度,减少编码错误的发生率,并使Python代码更易于理解和导航。
php-redis开发手册
一、Redis 连接与认证
1 | 连接参数:ip、端口、连接超时时间,连接成功返回 true,否则返回 false |
二、String 操作
1 | 设置键值:成功返回 true,否则返回 false |
三、Hash 操作
1 | 为 hash 表中的字段赋值。成功返回 1,失败返回 0。若 hash 表不存在会先创建表再赋值,若字段已存在会覆盖旧值。 |
四、List 操作
1 | 从 list 头部插入一个值。 |
五、Set 操作
1 | 将一个元素加入集合,已经存在集合中的元素则忽略。若集合不存在则先创建,若 key 不是集合类型则返回 false,若元素已存在返回 0,插入成功返回 1。 |
六、Zset 操作
1 | 将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。 |