target="_blank"在新窗口中打开链接。rel external表明这是个外部链接。rel noreferer会不发送当前站点地址作为referer。rel nofollow告诉爬虫不要跟踪这个链接。rel noopener表示在新的进程中打开页面,提高性能和解决安全隐患。hexo-autonofollow插件做外链优化。
sleep(0)和yeild的行为,受具体的jvm版本和os影响。sleep(0)通常会是yeild的语义,放弃该线程拥有的剩余时间片,并且通知调度器选择合适的线程使用。
wait要在同步代码中使用,否则抛出IllegalMonitorStateException;sleep可以在任何地方使用。wait释放监视器锁(monitor lock),sleep不会。wait可以被notify、notifyAll唤醒,sleep不能。
select使用数组实现,最大长度受限于FD_SETSIZE。poll和epoll使用数组实现,没有限制。select和poll都要把数据从内核空间复制到用户空间,epoll使用mmap映射,不需要复制。select和poll是水平触发,epoll支持边缘触发。select和poll每次都要检查所有打开的FD,epoll可以只检查活跃的FD。
reactor模式基于IO多路复用模型。acceptor线程负责和client建立连接。由同步事件分离器检查就绪IO通道,并且交给NIO线程池负责处理IO读写请求。
Linux io的5种模型:阻塞IO,非阻塞IO,IO多路复用,信号驱动IO,异步IO。非阻塞IO返回EWOULDBOLCK错误码。IO多路复用使用select或者epoll函数。信号驱动IO安装信号处理器后立即返回。异步IO,数据就绪后由内核复制到用户空间。
微服务治理,首先要解决服务注册和发现问题。核心功能是服务注册、发现、下发变更。服务发现包括客户端模式和服务端模式。根据实现的不同,注册中心的实现可以是CP或者AP。实现上要考虑优雅上线、优雅下线、注册中心容灾、注册中心性能等问题。
travis跳过构建,可以在脚本使用TRAVIS_COMMIT_MESSAGE变量判断;或者以[skip keyword]形式提交commit message
nginx多个证书配置,在各自server增加证书即可。TLS SNI机制用于解决告诉服务器使用哪个域名的证书。TLS v1.2的SNI是明文传输,会被截获、甚至干扰https连接,这是sni审查。TLS ESNI在v1.3提出,使用公共安全host建立连接再传输真实域名。这个技术叫域前置(domain fronting)。
使用wireshark对tls握手过程抓包。change cipher spec发生在双方。encrypted handshake message阶段表明握手结束,发送验证消息。