什么是TLS False Start?
在 TLS 协商第二阶段,浏览器发送 ChangeCipherSpec 和 Finished 后,立即发送加密的应用层数据,而无需等待服务器端的确认。
如何启用TLS False Start?
- 需要支持
NPN/ALPN - 服务器端配置支持前向安全(
Forward Secrecy)
ALPN(Application-Layer Protocol Negotiation)应用层协议协商, 当单个服务器端口号(例如端口 443)上支持多个应用程序协议时,客户端和服务器需要协商用于每个连接的应用程序协议。希望在不增加客户端和服务器之间的网络往返次数的情况下完成此协商,因为每次往返都会降低最终用户的体验。
ALPN 作为 TSL的扩展,客户端会将支持的应用程序协议列表作为 TLS ClientHello 消息的一部分发送给服务器,服务器选择一个协议,并将所选协议作为 TLS ServerHello 消息的一部分发送给客户端。因此,可以在 TLS 握手中完成应用协议协商,而无需添加网络往返,并且允许服务器根据需要,将不同的证书与每个应用协议相关联。
join 和 detachjoin 或者 detach 只能调用一次
当调用 join 或者 detach 之后会将持有的线程ID置为 0, 再次调用会抛异常。
1 | void |
_id文档主键 _id 是每篇文档必备的字段,具有以下特性:
ObjectId当我们不提供主键,MongoDB 自动为我们生成的默认对象主键 ObjectId
12 字节 idObjectId 默认值
1 | test> ObjectId() |
手动设置 ObjectId 的值
1 | test> ObjectId("123456789011123456789011") |
提取 ObjectId 的创建时间
1 | test> ObjectId("123456789011123456789011").getTimestamp() |
1 | db.<collection>.createIndex(<keys>, <options>) |
<keys> 文档指定了创建索引的字段<options> 创建索引的参数和设定索引的特性1 | db.accountWithIndex.createIndex({name: 1}) |
1 | db.accountWithIndex.createIndex({name: 1, balance: -1}) |
1 | db.accountWithIndex.createIndex({currency: 1}) |
1 | db.accountWithIndex.getIndexes() |
在 macOS 上,动态链接器使用特定的路径变量来解析运行时的库位置。这些路径变量包括:绝对路径、 @executable_path、@loader_path 和 @rpath。
对于安装在系统中共享位置的框架很有用,一般是 /Library/Frameworks/xxx、 /usr/lib/xxx, 但是查找嵌入在应用内部的动态库就很难使用,应用安装的位置都不固定,所以引出新的方式。
@executable_path 是用于指代当前正在执行的程序或应用的路径。当你的应用程序或其动态库需要引用位于与可执行文件相同路径(或其子目录)下的其他动态库时,这会非常有用。