自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 这些术语关乎你的程序执行效率

Cache 与 Memory由于CPU的速度远高于Memory,Cache 是位于CPU与内存(Memory,RAM)之间的临时存储器,它的容量比内存小但交换速度快,寄存了RAM位置的地址及数据内容。当CPU要读取RAM位置数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就从Memory中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中。对

2017-10-22 20:25:33 351

原创 多任务应用系统构建模式

计算密集型任务要进行大量的计算,消耗CPU资源,如视频解码等,启用与CPU核心数相同的并行任务数可最大化利用CPU资源和加快任务的执行;IO密集型任务,如网络、磁盘IO等,CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度),任务数适当增多,CPU效率将提高。实现多任务有如下几种模式:多进程模式:在多核CPU上运行多个进程(数量与CPU核

2017-10-20 16:08:52 588

原创 PHP开发要点与技巧总结(一)

Lambda表达式(匿名函数)实现了一次执行且无污染的函数定义,是抛弃型函数并且不维护任何类型的状态。闭包在匿名函数的基础上增加了与外部环境的变量交互,通过 use 子句中指定要导入的外部环境变量。C字符串以空字符('\0')为结束标志,这使得C字符串不能保存像图片、音频、视频、压缩文件这样的二进制数据,反之则称作二进制安全的。这个概念在PHP中经常提到,此处只做个简单解释。下面是Redis 简单动态字符串(SDS)的实现,它是二进制安全的。删除引用,触发相应变量容器refcount减一,但在函数中的行为会

2017-10-18 20:49:52 761

原创 PHP-FPM进程池探秘

PHP 7.2以前的版本只支持多进程而不支持多线程;PHP 7.2+ pthreads 扩展提供了Thread、Worker、Threaded 对象,使得创建、读取、写入以及执行多线程成为可能,并可以在多个线程之间进行同步控制;pthreads 多线程开发也仅限于命令行模式,不能用于 web 服务器环境中。PHP-FPM 在进程池中运行多个子进程并发处理所有连接请求。通过 ps 查看PHP

2017-10-16 19:53:06 1005

原创 再读设计模式七原则

GOF《设计模式》一书中提出了七条设计原则,七原则是一种理想状态的表达,但实际项目开发中可能会不得不打破这些原则的限制。1. 单一职责原则(Single Responsibility Principle, SRP): There should never be more than one reason for a class to change. 言下之意做到类只承担单一职责(最细粒度)也就能尽可...

2017-09-25 20:38:53 365

原创 WEB跨域资源共享:Cross-origin Resource Sharing(CORS)

浏览器同源策略中的同源指协议+域名+端口三者完全一致,其中任何一个不同即为跨域1. 浏览器同源策略是隔离潜在恶意文件的安全机制,限制信息传递和使用的边界,不是信息的保密机制。<img><script><link>以及表单提交都可实现跨域请求,但可能会不同程度受同源策略的限制,因浏览器不同而异;2. 跨域资源共享(CORS)是一个W3C标准,是在客户端和服务端同时遵循的情况下执行的,整个CORS通信过程,都是浏览器自动完成,在编码上与同源资源共享并无不同(CORS交互中使用WithCredentials除

2017-09-17 19:45:09 2861

原创 OpenID Connect:OAuth 2.0协议之上的简单身份层

OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 API 进行身份交互的框架,允许客户端根据授权服务器的认证结果最终确认用户的身份,以及获取基本的用户信息;它支持包括Web、移动、JavaScript在内的所有客户端类型;它是可扩展的协议,允许你使用某些可选功能,如身份数据加密、OpenID提供商发现、会话管理OpenID Connect vs OpenID

2017-09-10 07:46:01 3261

原创 JavaScript 开发总结(一)

递归与栈溢出(Stack Overflow) :递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误;而尾递归优化后,函数的调用栈会改写,只保留一个调用记录,但这两个变量(func.arguments、func.caller,严格模式“use strict”会禁用这两个变量,所以尾调用模式仅在严格模式下生效)就会失真。在正常模式下或者那些不支持该功能的环境中,采用“循环”替换“递归”,减少调用栈,就不会溢出。可见,经尾递归优化之后,性能明显提升。如果不能使用尾递归优化,可使用蹦床函数

2017-08-10 13:28:53 544

原创 Unicode 与 Unicode Transformation Format(UTF-8 / UTF-16 / UTF-32)

由于UTF-8采用的是变长字符编码,与UTF-16和UTF-32相比,无论是计算字符数,还是执行索引操作效率都不高,因此UTF-8适合在传输数据中使用,可在数据接收完毕后将其转换为UTF-16或UTF-32进行处理,最后再转换回UTF-8(但这转换本身也会有性能损耗);但UTF-8空间足够大,无字节序问题,且容错性高,局部的字节错误(丢失、增加、改变)不会导致连锁性的错误,因为 UTF-8 的字符边界很容易检测出来

2017-08-08 13:46:34 768

原创 Standard PHP Library(SPL)中的数据结构

SPL提供了一组标准数据结构。SplDoublyLinkedList Class:双向链表(DLL)是在两个方向上相互链接的节点列表。当底层结构是dll时,迭代器的操作、对两端的访问、节点的添加或删除均是O(1),为堆栈和队列提供了良好的实现SplDoublyLinkedList::add — Add/insert a new value at the specified indexSp

2017-07-17 09:27:56 240

原创 PHP中的数据结构:DS扩展

PHP7以上才能安装和使用该数据结构扩展,安装比较简单:1. 运行命令 pecl install ds2. 在php.ini中添加 extension=ds.so3. 重启PHP或重载配置 Collection Interface:包含本库中所有数据结构通用功能的基本interface。 It guarantees that all structures are traversa

2017-07-17 09:27:53 548

原创 关于Lumen / Laravel .env 文件中的环境变量是如何生效的

.env 文件可自定义其他任何有效的环境变量,并可通过  调用 env() 或 $_SERVER 或 $_ENV  来获取该变量。那么env()是如何加载到这些变量的呢?在Lumen的vendor/laravel/lumen-framework/src/helpers.php中,我们可以发现env函数是这样被定义的:if (! function_exists('env')) { /**

2017-07-17 09:27:48 2467

原创 PHP垃圾回收机制

实现垃圾回收机制的整个原因是为了通过清理循环引用的变量来节省内存占用。引用计数:php变量存在一个叫"zval"的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息:is_ref和refcount。is_ref是个bool值,用来标识这个变量是否是属于引用集合,php引擎才能把普通变量和引用变量区分开来;refcount用以表示指向这个zval变量容器的变量个数

2017-07-17 09:27:46 791

原创 排序算法系列

基于比较排序算法时间下限为O(nlogn),计数排序时间复杂度O(n)。  在待排序列基本有序的情况下,直接插入排序是最佳排序算法;快速排序的效率一般情况下都比较高,但在待排序列基本有序的情况下,时间复杂度接近 O(n2);归并排序效率仅次于快速排序,是稳定排序,经常用于多个有序的数据文件归并成一个有序的数据文件以及求解逆序对数,最好、最坏、平均时间复杂度均为O(nlogn),空间复杂度为O(n

2017-07-17 09:27:41 346

原创 关于Javascript循环体变量声明与初始化的效率问题

针对循环体变量声明与初始化的效率问题,将执行的简单测试代码如下:function test(n) { console.time('Internally initialized'); for (let i = 0; i ) { let a = i; } console.timeEnd('Internally initialized');

2017-07-17 09:27:36 556

原创 求最短路径算法系列

一 . 动态规划算法  适用于求解多阶段决策过程中的最优化问题,必须满足最优化原理、无后效性和重叠性。使用动态规划只需要多项式时间复杂度,因此它比回溯法、暴力法等要快许多。划分阶段:  求解最短路径:     过程指标函数基本方程(和):  Javascript实现算法:/** * 示例:s = {* 4:{s:{C1:

2017-07-17 09:27:31 296

原创 Nginx上部署HTTPS + HTTP2

Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev(或者OpenSSL),且ln -s /usr/lib/x86_64-linux-gnu/libssl.so  /usr/lib/,然后在编译配置Nginx时要指定--with-http_ssl_module和--with-http_v2_module。另外,若要在本地运行openssl命令,要安装OpenS

2017-07-17 09:27:26 2349

原创 OAuth 2.0 / RCF6749 协议解读

OAuth是第三方应用授权的开放标准,目前最新版本是2.0,以下将要介绍的内容和概念主要来源于该版本。恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 。  四种角色定义:Resource Owner:资源所有者,即终端用户Resource server:资源服务器,即提供资源存储访问一方Client:通常指第三方应用Authorization server

2017-07-17 09:27:21 612

原创 OAuth 2.0: Bearer Token Usage

Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源,任何Bearer持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密key。一个Bearer代表授权范围、有效期,以及其他授权事项;一个Bearer在存储和传输过程中应当防止泄露,需实现Transport Layer Security (TLS);一个Bearer有效期不能过长,过期后可用Refresh T

2017-07-17 09:27:16 2832

原创 HTTP认证模式:Basic and Digest Access Authentication

一. Basic 认证  客户端以“ : ”连接用户名和密码后,再经BASE64编码( Base64 Content-Transfer-Encoding )通过Authorization请求头发送该密文至服务端进行验证,每次请求都需要重复发送该密文。可见Basic认证过程简单,安全性也低,存在泄露个人账号信息以及其他诸多安全问题,最好在实现了Transport Layer Security (T

2017-07-17 09:27:11 1660

原创 MySQL 事务与锁机制

  下表展示了本人安装的MariaDB(10.1.19,MySQL的分支)所支持的所有存储引擎概况,其中支持事务的有InnoDB、SEQUENCE,另外InnoDB还支持XA事务,MyISAM不支持事务。锁可以通过SQL语句(如 LOCK TABLES )显式申请,也可以由InnoDB引擎自动为你获取。下文将讨论InnoDB和MyISAM在事务与锁定方面的相关话题ENGINESUPPORTCOMM...

2017-07-17 09:27:07 252

原创 Laravel框架一:原理机制篇

Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点。 一. 请求周期  Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。注册类文件自动加载器:Laravel通过composer进行依赖管理,并在bootstrap/autoload.php中注册了Composer Auto Loader (PSR-4),应

2017-07-17 09:27:02 365

原创 PHP对象相关知识点的总结

对象传递:一种说法是“PHP对象是通过引用传递的”,更准确的说法是别名(标识符)传递,即它们都保存着同一个标识符(ID)的拷贝,这个标识符指向同一个对象的真正内容,与引用(&)有质的区别,请比较下例中行11和行18的输出结果。 1 php 2 class A { 3 public $foo = 1; 4 } 5 6 $a = new A; 7 $b = $a;

2017-07-17 09:26:57 209

原创 Docker笔记二:Lumen + Redis

Lumen 基于 Laravel 打造,专为构建微服务和 APIs 而生;Redis 与 Memcached 均为常用的 key-value 内存对象缓存服务(系统),免费开源,Redis 支持持久化,但Memcached 不支持持久化,Redis 与 Memcached 均可进行集群化部署。Lumen与Redis服务端通信可通过Predis(PHP库)或者PhpRedis(PHP的C扩展)来实现

2017-07-17 09:26:50 1083

原创 ECMAScript 6新特性简记

ECMAScript 6.0是JavaScript语言的2015年6月的发布版。一.let和const命令let:用来声明变量,用法类似于var,但是只在let命令所在的代码块内有效。var a = [];for (let i = 0; i ) { a[i] = function () { console.log(i); };}a[6](); // 6con

2017-07-17 09:26:45 430

原创 Tsung:开源多协议分布式负载&amp;压力测试工具

Main featuresHigh Performance: the load can be distributed on a cluster of client machinesMulti-protocols using a plugin system: HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP , XMPP/Jabber, BOSH, MQT

2017-07-17 09:26:38 443

原创 关于递推算法求解约瑟夫环问题P(n,m,k,s)

因为第一个出圈者是k+m-1,则下一个起始报数者k+m,原圈可增加一套新编号a,用1表示k+m,2表示k+m+1,依此类推,n则表示k+m-1,于是原圈又可对应至新环:1,2,......,n-1,n ------ ①。 2. 因为k+m-1将出圈,即①中n将出圈,余下n-1人,于是有:1,2,......,n-1 ------ ②,对②求P(n-1,m,1),则P(n > 1,m,k) = (P(n-1,m,1)

2017-04-16 16:01:56 1505

原创 Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

在编辑Dockerfile过程中参考了以下相关范例:https://hub.docker.com/_/php/、https://hub.docker.com/_/mysql/、https://hub.docker.com/_/nginx/。在build镜像时可能报出异常“containerd: container not started”,此时可能需要重启containerd或系统。要删除某些无用...

2017-01-04 19:54:32 11268

原创 Ubuntu / linux 下创建Wi-Fi热点 以AP模式互联共享网络宽带

首先要申明AP(Access-Points) 模式不等于Ad-hoc 模式, 要创建Wi-Fi热点与其他终端设备如智能手机互联共享宽带连接,需启用无线网络(无线网卡)。ip neighbor 可查看网络连接客户端,下面是在Ubuntu Kylin 16.04下的具体操作步骤:一.打开网络连接: 选择“增加”->选择类型“Wi-Fi”二.设置Wi-Fi:SSID是识别该网络访问点的标识三.设置Wi-Fi密码四.设置IPv4/IPv6五.开启自动连接网络:以后开机该Wi-Fi热点自动开启六.连接到隐

2017-01-04 16:40:07 2995

空空如也

空空如也

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

TA关注的人

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