摘要:问题描述 FizzBuzz问题:一个大于0的自然数能整除3,将输出“Fizz”;能整除5,将输出“Buzz”;能整除3和5,将输出“FizzBuzz”;否则输出自己。 逆FizzBuzz问题最短序列:已知一个FizzBuzz问题的非数字输出序列,求能获得该序列的最短连续数字序列。如“Fizz”的最短 阅读全文
posted @ 2018-03-13 16:57 熊猫猛男 阅读(561) 评论(0) 推荐(0) 编辑
摘要:HTTP/2 长连接中的数据包是不按请求-响应顺序发送的,一个完整的请求或响应(称一个数据流stream,每个数据流都有一个独一无二的编号)可能会分成非连续多次发送。数据包发送的时候,都必须标记所属的数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧)取消这个数据流。HTTP 1.1 取消数据流的唯一方法,就是关闭TCP连接;HTTP/2 取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。客户端还可以指定数据流的优先级,优先级越高,服务器就会越早响应。 阅读全文
posted @ 2018-02-08 15:53 熊猫猛男 阅读(7212) 评论(0) 推荐(3) 编辑
摘要:1)cat(arcat|erpillar|)匹配 ”cat”, “cataract”, “caterpillar” 中的一个。 2)一次性子组(非捕获子组)和后瞻断言结合使用来指定在目标字符串末尾的有效匹配,比如^(?>.*)(?<=abcd)相对于^.*abcd$更为高效。 3)条件子组(非捕获子组)型如(?(condition)yes-pattern)、(?(condition)yes-pattern|no-pattern),condition是数字(后向引用某个捕捉子组)或字串或断言。(\()?[^()]+(?(1)\))匹配一个没有括号的或者闭合括号包裹的字符序列。 4)命名子组(捕获子组)形如 (?P 阅读全文
posted @ 2018-01-28 16:00 熊猫猛男 阅读(989) 评论(0) 推荐(0) 编辑
摘要:LVS 支持NAT、TUN、DR、FullNAT四种模式,DR模式只支持IP转发,不支持端口转发,因此VS端口必须与RS端口保持一致。要使用FullNAT版,需安装alibaba/LVS: https://github.com/alibaba/LVS 。 安装ipvsadm 1. 先在宿主机上安装并 阅读全文
posted @ 2017-12-18 14:44 熊猫猛男 阅读(2468) 评论(0) 推荐(1) 编辑
摘要:熔断是当某个服务调用慢或者有大量超时现象(过载),系统停止后续针对该服务的调用而直接返回,直至情况好转才恢复调用。这通常是为防止造成整个系统故障而采取的一种保护措施,也称过载保护。很多时候刚开始,可能只是出现了局部小规模系统故障,但后来故障影响的范围越来越大,最终导致了全局性的后果。 阅读全文
posted @ 2017-11-30 21:53 熊猫猛男 阅读(2138) 评论(0) 推荐(1) 编辑
摘要:PHP <7.2 支持多进程而不支持多线程;PHP-FPM 在进程池中运行多个子进程并发处理所有请求,同一个子进程可先后处理多个请求,但同一时间只能处理一个请求,未处理请求将进入队列等待处理。换句话,同一个子进程不具有并发处理多个请求的能力。PHP-FPM为PHP FastCGI提供进程管理方式,可以有效控制进程,平滑重载PHP配置,其master process是常驻内存的。当前(程序)子进程sleep(1)后会延迟1s才继续执行,但其持有的请求是继续有效的, 不能处理新的请求,故这种做法会降低进程池处理并发请求的能力;而且sleep()这种做法并不安全,nginx依然可能出现如下错误: “epoll_wait() reported that client prematurely closed connection, so upstream connection is closed too while connecting to upstream” 阅读全文
posted @ 2017-10-16 19:18 熊猫猛男 阅读(4254) 评论(0) 推荐(0) 编辑
摘要:浏览器同源策略中的同源指协议+域名+端口三者完全一致,其中任何一个不同即为跨域。1. 浏览器同源策略是隔离潜在恶意文件的安全机制,限制信息传递和使用的边界,不是信息的保密机制。以及表单提交都可实现跨域请求,但可能会不同程度受同源策略的限制,因浏览器不同而异; 2. 跨域资源共享(CORS)是一个W3C标准,是在客户端和服务端同时遵循的情况下执行的,整个CORS通信过程,都是浏览器自动完成,在编码上与同源资源共享并无不同(CORS交互中使用WithCredentials除外); 3. 如果客户端不支持跨域资源共享(CORS),则信息的传递和使用将可能受同源策略限制,但服务端返回的任然是正常的HTTP响应; 4. IE未将端口号加入到同源策略的组成部分之中,Chrome 和 Firefox不允许从 HTTPS 的域跨域访问 HTTP。 阅读全文
posted @ 2017-09-17 14:51 熊猫猛男 阅读(1009) 评论(1) 推荐(1) 编辑
摘要:OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 API 进行身份交互的框架,允许客户端根据授权服务器的认证结果最终确认用户的身份,以及获取基本的用户信息;它支持包括Web、移动、JavaScript在内的所有客户端类型;它是可扩展的协议,允许你使用某些可选功能,如身份数据加密、OpenID提供商发现、会话管理 OpenID Connect vs OpenID 2.0:OpenID Connect完成很多与OpenID 2.0相同的任务,是API-friendly,定义了可选的签名和加密的机制;OAuth 1.0a和OpenID 2.0的集成需要扩展,而OpenID Connect协议本身就建立在OAuth 2.0之上 阅读全文
posted @ 2017-09-09 22:40 熊猫猛男 阅读(7960) 评论(1) 推荐(0) 编辑
摘要:递归与栈溢出(Stack Overflow) :递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误;而尾递归优化后,函数的调用栈会改写,只保留一个调用记录,但这两个变量(func.arguments、func.caller,严格模式“use strict”会禁用这两个变量,所以尾调用模式仅在严格模式下生效)就会失真。在正常模式下或者那些不支持该功能的环境中,采用“循环”替换“递归”,减少调用栈,就不会溢出。可见,经尾递归优化之后,性能明显提升。如果不能使用尾递归优化,可使用蹦床函数(trampoline)将递归转换为循环:蹦床函数中循环的作用是申请第三者函数来继续执行未完成的任务,而保证自己函数可以顺利退出。另外,这里的第三者和自己可能是同一函数定义 阅读全文
posted @ 2017-08-10 11:12 熊猫猛男 阅读(610) 评论(0) 推荐(0) 编辑
摘要:UTF-8用1个字节(U+0000~U+007F)来编码所有ASCII字符,并且与ASCII字符表示是一样的,故其与ASCII兼容,而那些ISO Latin-1扩展ASCII字符集的字符(128~255)是UNICODE的子集,但不是UTF-8的子集;其他的字符UTF-8编码将需要2~4个字节,首字节连续的1的个数表示字符编码所需的字节数。“编”的Unicode编码是U+7F16,因此UTF-8需要3个字节来表示,形如1110xxxx 10xxxxxx 10xxxxxx这种格式。 由于UTF-8采用的是变长字符编码,与UTF-16和UTF-32相比,无论是计算字符数,还是执行索引操作效率都不高,因此UTF-8适合在传输数据中使用,可在数据接收完毕后将其转换为UTF-16或UTF-32进行处理,最后再转换回UTF-8(但这转换本身也会有性能损耗);但UTF-8空间足够大,无字节序问题,且容错性高,局部的字节错误(丢失、增加、改变)不会导致连锁性的错误,因为 UTF-8 的字符边界很容易检测出来 阅读全文
posted @ 2017-08-08 09:20 熊猫猛男 阅读(939) 评论(0) 推荐(0) 编辑