秘钥凭证 (Proof Key)在OAuth 客户端 Code Exchange 阶段的应用
基于授权码(Authorization code grant
)技术的 OAuth 2.0 客户端容易受到授权码被劫持(interception attack)的风险。本篇文章基于 RFC7636 主要介绍了OAuth 2.0 客户端在 code exchange
(Authz code exchange access token)阶段如何使用秘钥凭证来减缓这种攻击。
基于云服务的 KMS 架构解读
本文主要介绍 Cisco System 使用的一种秘钥管理服务(Key Management Service)架构,该架构旨在标准化KMS 的服务协议,促进完善 KMS 服务提供商的生态系统, 目前该架构还在草案阶段,未纳入 RFC 标准。
SAML 标准协议解读
SAML(Security Assertion Makrup Language
)全称是安全断言标记语言
,是一种基于 XML 格式的开放标准的协议,用于在不同的安全域之间进行身份认证。
TLS 握手协议解析
TLS 是一种密码学的协议,用来保证两个实体之间的会话安全,TLS 是一种位于应用层和传输层之间的协议。本文将会详细描述 TLS 中的握手协议的流程。
观察者模式中Subject在C++中的模板化
本篇将介绍观察者模式中 Subject 类在 C++ 中的模板化的实现。
Template 与 Strategy 模式比较
本篇将分别介绍 Template 与 Strategy 模式。
C++ 中 auto & decltype
C++11 的一个重要特性就是自动类型推导(auto type dedection),通过引入 auto 和 decltype 关键字实现了类型推导,不仅能够方便的获取复杂类型,还能够简化书写,提高编码效率。
C++ 右值引用和移动语义
C++11 引入的右值引用和移动语义,可以避免无谓的复制,提高了程序性能。
C++ lambda 函数
本篇主要描述 lambda 函数以及跟仿函数的关联,最后介绍 lambda 的使用陷阱。
C++ 智能指针
本篇主要描述C++的几种常用智能指针。
C++ 关于单例模式的几种实现
本篇将介绍关于单例模式的几种实现,并分析该模式存在的一些问题。
Factory 工厂模式
本篇将介绍设计模式中的工厂模式,主要讲解简单工厂,工厂方法这两种设计模式。
STL容器的区间成员函数
STL 中容器的插入、删除、赋值都有相应的区间成员函数,相比于单元素的成员函数而言,使用区间成员函数使得代码更加清晰,更加高效。
C++ 中基于谓词的 std::sort 介绍
数据结构于算法中有很多种不同的排序算法,在 C++ 语言中,常见的排序排序算法是 std::sort
, 本篇主要介绍基于谓词的 std::sort
以及常见使用场景。
Linux的动态链接
本篇将详细讲述 Linux 中动态链接的过程,并且分析动态链接库装载时的重定位方法。
Linux的静态链接
本篇将详细讲述 Linux 中静态链接的过程,即链接器如何为目标文件分配在输出文件中的空间和地址,如何进行外部符号的解析与重定位。
Linux的进程虚拟地址空间
本篇将详细讲述Linux中ELF文件的装载过程,介绍进程虚拟地址空间的分布,以及虚拟地址空间载入物理内存的方式。
Linux的系统调用
系统调用是应用程序与操作系统内核之间的接口。本篇主要剖析 Linux 中系统调用的原理,详述系统调用从用户态到内核态的流程。
目标文件的那些事
本篇主要探讨目标文件(Linux中的ELF)的内部结构,并对神秘目标文件一探究竟。
基于redis的分布式锁的实现方案
在不同进程需要互斥的访问共享资源时,分布式锁是一种常用的技术手段。目前主要有几种解决方法,一种是借助于DB的事务来实现,另一种是借助于分布式键值存储系统(例如etcd, zookeeper等)实现。本篇主要介绍如何通过redis实现分布式锁。
创建基于proxy的HTTP(s)连接
最近遇到了几次HTTP(s)如何通过代理访问内网的问题,本篇讲述基于proxy发送/接收HTTP(s)请求的客户端实现方法。
golang中context包
在阅读一些标准库(net、net/http、os/exec)时,经常会遇到context包,大致知道是当做关闭事件触发用的。阅读完GoTeam的文章Go Concurrency Patterns: Context,才更深刻的了解了其设计意图。
分布式存储之Raft协议应用详解
分布式存储之Raft协议
随着Raft一致性算法论文的发表,该协议在分布式领域的应用越来越广泛,大有取代Paxos协议之势。
分布式存储之2PC协议
两阶段提交是很常用的解决分布式事务问题的方式,它可以保证分布式事务的原子性(要么所有参与进程都提交事务、要么都取消事务)。在数据一致性环境下,其代表的含义是:要么所有备份数据同时更改某个数值,要么都不更改,以此来达到数据的强一致性。
分布式存储之CAP原则
深入理解分布式环境需要理解几个基本的概念CAP、BASE、ACID等。本篇以下记录了这几个基本概念及其关系。
分布式存储之数据切片
在大数据时代,稍大型企业的数据量已经达到TB甚至PB级别,显然单机无法存储于处理如此规模的数据量。分布式数据的存储必然涉及到数据的分片,本篇分析了几种常用的数据分片模型。
浏览器缓存
当我们通过浏览器打开一个web页面的时候,浏览器需要从web服务器下载各种资源(网页、脚本、样式表等)。但并不是每次请求都需要从web服务器中获取的,浏览器自身可以设置缓存。本篇将会介绍些浏览器的缓存技术。
服务器并发策略
技术是随着需求的发展而不断前进的,正如服务器的并发量。对于单台服务器而言,资源是有限的,采用何种并发策略最大限度的利用服务器的性能,提高其吞吐量也是值得研究的,本篇将详述服务器的几种并发策略。
PHP动态脚本Opcode
本篇较为深入的讲述了PHP的Opcode缓存原理。简要分析了PHP的脚本跟踪与分析技术。
I/O多路复用
I/O多路复用是常用的服务器I/O模型,包括select/poll/epoll等方式。本篇针对这几种方式的优缺点分别做讲解。
服务器的I/O模型
I/O模型的设计是后台服务能否支持高并发的至关因素。好的服务器性能必然需要良好的IO模型作为支撑。本篇重新复习下服务器常用的IO模型。
Golang — 面向对象语言(方法、接口、匿名组合)
初学Golang时,一直困惑其中的struct类型
是否等同于面向对象中的object, interface
是否等同于多态。下面来好好扒一扒Golang与面向对象的关系。
golang中域名解析问题
在近期的Golang项目中遇到过类似这样的报错信息:lookup www.baidu.com on 10.10.100.1:53 no such host
. 本篇就来说说golang中域名解析遇到的问题。
apache配置与性能
本篇将通过apache的配置项,结合实际应用,直观感受这些配置参数对吞吐量的影响。
ApacheBench(ab)压力测试
通常考察服务器性能都离不开高并发、高吞吐率,本文主要描述了一些基本的概念,并通过ab压测分析其中的影响因素。
golang错误处理(二)
该篇作为系列(二),自然要更深入一层。本文翻译自Error Handling In Go, Part II,作者在该篇中将教我们怎么写自定义error接口,并且根据error如何识别具体的错误。
golang错误处理(一)
Golang中Error作为返回值是很常见的,几乎每个函数返回值都有error的interface。本文翻译自Error Handling In Go, Part I,作者在该篇中对error接口的创建、使用等做了详细描述。
golang参数传递
以前在C/C++中,都知道传参时何时传值、指针、引用。那在Golang中的规则又是怎样的呢?对于参数传递是否有统一的规范呢?本文翻译自Using Pointers In *Go,作者总结出的方法一定让你受益匪浅。
理解golang中的切片
Golang的初学者有时会被slice所困扰,不理解其内部原理,使用起来总是担心是否有复制的开销。 本文翻译自Understanding Slices in Go Programming,作者对其内部原理作了深入分析。相信读完将会有不一样的感受。
Linux防火墙
在工作中常常涉及到防火墙的概念,基本网络不通或者服务无法连接首先就会想到是否是防火墙的原因。当然这里所说的防火墙是Linux系统内核继承的IP信息包过滤系统Netfiter/iptables。
简单分布式服务器框架
最近工作中接触到分布式服务器,现针对学到的作简要概述, 分布式服务器之路刚起步。
setopt简介
在阅读别人的代码时,网络部分经常会遇到setopt
函数,下面关于几个生疏的选项作简要总结。
非阻塞connect
本文总结了关于非阻塞connect的处理细节,实现细节,作简要总结。