html链接rel属性介绍:external nofollow noreferer noopener

target="_blank"在新窗口中打开链接。rel external表明这是个外部链接。rel noreferer会不发送当前站点地址作为referer。rel nofollow告诉爬虫不要跟踪这个链接。rel noopener表示在新的进程中打开页面,提高性能和解决安全隐患。hexo-autonofollow插件做外链优化。

聊聊sleep(0)和Thread.yield()

sleep(0)和yeild的行为,受具体的jvm版本和os影响。sleep(0)通常会是yeild的语义,放弃该线程拥有的剩余时间片,并且通知调度器选择合适的线程使用。

java wait()和sleep()的区别

wait要在同步代码中使用,否则抛出IllegalMonitorStateException;sleep可以在任何地方使用。wait释放监视器锁(monitor lock),sleep不会。wait可以被notify、notifyAll唤醒,sleep不能。

linux select epoll poll 简介

select使用数组实现,最大长度受限于FD_SETSIZE。poll和epoll使用数组实现,没有限制。select和poll都要把数据从内核空间复制到用户空间,epoll使用mmap映射,不需要复制。select和poll是水平触发,epoll支持边缘触发。select和poll每次都要检查所有打开的FD,epoll可以只检查活跃的FD。

reactor模式

reactor模式基于IO多路复用模型。acceptor线程负责和client建立连接。由同步事件分离器检查就绪IO通道,并且交给NIO线程池负责处理IO读写请求。

io模型

Linux io的5种模型:阻塞IO,非阻塞IO,IO多路复用,信号驱动IO,异步IO。非阻塞IO返回EWOULDBOLCK错误码。IO多路复用使用select或者epoll函数。信号驱动IO安装信号处理器后立即返回。异步IO,数据就绪后由内核复制到用户空间。

微服务治理:服务注册和发现

微服务治理,首先要解决服务注册和发现问题。核心功能是服务注册、发现、下发变更。服务发现包括客户端模式和服务端模式。根据实现的不同,注册中心的实现可以是CP或者AP。实现上要考虑优雅上线、优雅下线、注册中心容灾、注册中心性能等问题。

travis ci跳过触发构建

travis跳过构建,可以在脚本使用TRAVIS_COMMIT_MESSAGE变量判断;或者以[skip keyword]形式提交commit message

nginx配置多个TLS证书,以及TLS SNI简介

nginx多个证书配置,在各自server增加证书即可。TLS SNI机制用于解决告诉服务器使用哪个域名的证书。TLS v1.2的SNI是明文传输,会被截获、甚至干扰https连接,这是sni审查。TLS ESNI在v1.3提出,使用公共安全host建立连接再传输真实域名。这个技术叫域前置(domain fronting)。

使用wireshark抓包tls 1.2握手

使用wireshark对tls握手过程抓包。change cipher spec发生在双方。encrypted handshake message阶段表明握手结束,发送验证消息。