阅读视图

发现新文章,点击刷新页面。
☑️ ⭐

来简单聊聊 AI Gateway

写在最开始

在当今科技领域,大型语言模型(LLM)和生成式人工智能(AIGC)已成为引领潮流的热门话题。它们的出现不仅颠覆了我们对传统人工智能的认知,还为各行各业带来了前所未有的变革。然而,随着这些技术的广泛应用,如何有效地将这些强大的 AI 模型集成到实际应用场景中,成为了一个亟待解决的问题。在如此背景下,一个名为 AI Gateway 的概念近期被大家所了解,作为一种连接 AI 技术与各类应用的关键平台,它又为当前火热的 AIGC 带来了什么?

本文将详细介绍 AI Gateway 的概念、功能,并通过丰富的应用场景展示其在实际应用中的巨大潜力。通过阅读本文,相信你会对 AI Gateway 有一个全新的认识,并为你在广阔的 AI 世界中探索工具箱增添一个新的技术,那么我们就开始吧。

说说什么是 AI Gateway

提及工业界的实践,要追溯到 Cloudflare 在去年 11 月推出的 AI Gateway 测试版了,Cloudflare 在发布时表示,AI Gateway 可以使 AI 应用更具可监测性、更可靠、可扩展性更强。所以我们首先来回答这个问题,什么是 AI Gateway 呢?

AI Gateway 也被称为大模型网关、AI 网关,是一个用于部署和管理人工智能(AI)模型的平台,在开源社区有对应技术实现。它为用户提供了一种方便的方式来部署和管理 AI 模型,无论这些模型是预训练的模型,还是用户自己开发的模型。AI Gateway 还提供了一种方式,让用户能够在需要的时候轻松地调用这些模型,例如在进行数据分析或开发新的 AI 应用程序时。此外,AI Gateway 还提供了各种工具,可以帮助用户监控模型的性能,以及进行模型的优化。

当然,除了上述功能外,AI Gateway 的特点不仅限于些,它还提供了高度的灵活性和可扩展性,用户可以根据自己的需求选择部署模型的规模,以满足各种业务需求。用户也可以根据自己的需求,调整模型的参数,以满足特定需求。

此外,由于具有对模型的权限管理及实时监控功能,加上可以缓存、重试、调整模型调用优先级等优化措施,AI Gateway 还可以保护数据隐私,稳定、高负载、安全的运行。

AI Gateway 的优势及对比

AI Gateway 和 Gateway

虽然两者不如雷锋和雷峰塔之间的巨大区别,但除了都是某种形式的关卡外,两者在服务对象、应用场景以及主要功能上,都存在不少差异。

如上文所描述,AI Gateway 是一个 AIOps 类平台,作为服务和推理提供者之间的代理,无论模型位于何处,为管理和扩展生成式 AI 工作负载提供了统一的接口。相比之下,Gateway,即传统网关,则更多地用于网络连接和数据传输,是网络连接到另一个网络的“关口”,实现网络互连,是最复杂的网络互连设备。

简单来说,AI Gateway 专注于 AI 模型的集成和管理,而传统网关则侧重于网络连接和数据传输。

AI Gateway 与直接使用大模型

大部分朋友接触 AIGC 应该都是从 chatGPT 开始的,因此,当了解到 AI Gateway 之后,难免不产生疑问,为什么我不直接用大模型呢,还要多走你调用一层?当然,chatGPT 作为一个人工智能对话程序,能够借助自然语言实现人机对话,对终端消费者已经够用了,然而,AI Gateway 作为一个 AI 模型的集成于管理平台,对于开发 chatGPT 这类服务的开发者来说,可能更具吸引力。

AI Gateway 和直接使用大模型之间的主要区别也在于 AI Gateway 提供了一种集中化的接口管理机制,使得应用程序能够更高效、安全地调用多种大语言模型,而直接使用大模型则涉及到与模型的直接交互,会涉及更多的技术细节和复杂性。此外,AI Gateway 还有以下几方面的特点,使得其相比直接使用大模型更具优势。

首先,AI Gateway 作为连接服务和推理提供者之间的代理,无论模型位于何处,为管理和扩展生成式 AI 工作负载提供了统一的接口,这便允许我们通过统一的调用方式,根据自身需要在多个大语言模型之间切换调用,以获得我们的需要。

其次,缓存 API 调用让 AI 应用开发成本更加可控与便捷。通过 AI Gateway,可以对 API 调用进行缓存,这在行业高速发展期,面对 API 调用次数快速增长的背景下,可以快速地节省成本开销以控制研发成本。

AI Gateway 也可以组合一系列技术和策略确保数据隐私,包括加密、访问控制、审计日志等,以保护用户数据不被未授权访问或滥用,达到保护数据隐私的目的。

此外,还有一些 AI Gateway 实现可以通过严格的用户认证和基于角色的访问控制(RBAC)系统,确保只有经过授权的用户才能访问和修改数据模型。这种访问控制机制是防止未经授权人员访问 AI 数据模型的关键。

应用场景与发展趋势

AI Gateway 的应用场景广泛,适用于多种人工智能应用场景,包括自然语言处理、文本生成、语音识别等,无论是个人开发者还是企业级应用,都可以从中受益。相比之下,AI Gateway 可以帮助开发者更好的管理 AI 应用及监控,同时更便捷、高效的实现对多种大语言模型的有效整合与调用,从而满足用户在各类 AI 场景下对于模型选择、策略配置以及数据安全等方面的专业需求。

作为仍在快速发展期的一项 AI 技术平台,AI Gateway 的未来仍有很多可能:

  • 技术创新:AI Gateway 需要在技术底层,继续在提高性能和扩展性方面进行创新,以适应不断增长的 AI 模型和服务需求;
  • 支持更多模型和服务:随着 AI 技术的进步,AI Gateway 也需要不断适配更多先进模型和服务,以满足用户对 AI 体验的更丰富的需求;
  • 增强的安全性和可靠性:AI Gateway 需要加强安全性和可靠性功能,以保护用户数据和模型安全,同时确保服务的稳定运行;
  • 融合更多行业方案:通过与物联网、大数据领域的融合,开拓出更多可以落地具体行业场景的 AI 应用;

写在最后

AI Gateway 在连接 AI 与各类应用中起着至关重要的作用。作为一个崭新的技术平台,它不仅提供了一种简便、高效的方式来集成和管理 AI 模型,同时也在实现 AI 技术与各类应用的无缝对接上发挥了巨大的作用。无论是自然语言处理、图像识别,还是语音合成和推荐系统等各种场景,AI Gateway都能大大提高 AI 技术的应用效率和便利性,从而推动 AI 技术的广泛应用和快速发展。

面向未来,不论是更大范围的 LLM 支持、更精细的查询加速与缓存机制建设、更全面的应用监控与安全防护策略,还是应用层更便捷的操作和低使用门槛,都是 AI Gateway 可以继续努力的方向。

参考

  1. https://blog.cloudflare.com/zh-cn/announcing-ai-gateway-zh-cn
  2. https://github.com/Portkey-AI/gateway
☑️ ☆

基于一次应用卡死问题所做的前端性能评估与优化尝试

问题背景

在上个月,由于客户反馈客户端卡死现象但我们远程却难以复现此现象,于是我们组织了一次现场上门故障排查,并希望基于此次观察与优化,为客户端开发提供一些整体的优化升级。当然,在尝试过程中,也发现了不少适用于通用前端项目开发的一些故障排查与性能评估的手段,于是总结此文,希望可以对读者有所帮助。

需要注意,在本文中所指的客户端均指通过 electron 开发出来的客户端应用,所以本质上还是属于前端应用开发范畴,关于 electron 框架的介绍可以参考 https://www.electronjs.org/

现象复现

在客户那边,反馈过来的现象表现为“系统 CPU 资源未被占满,但客户端在操作一段时间后便卡死无法响应”。起初,我们根据用户的描述尝试在本地复现,但却没有收获;此外,由于客户的网络限制,也不方便频繁的远程连接以方便我们查看现场现象。

考虑到可能是机器部分配置较差(比如显卡)或者网络、机器自身运行软件过多等原因,而我们的开发机器由于要支持本地编译与调试,一般都是顶配机器,于是我们尝试让本机变慢,以模拟复现其现象,简单来看,存在如下几个思路:

  1. 卡死/卡顿复现:最好在虚拟机中操作,虚拟机本身分配资源相对主机较少,再加上 chrome devtools 配置增加延时 throttle 时长,比如500ms;电脑中再开启几个占用 CPU 性能的软件,比如 vscode,firefox 等等,可以一定程度上模拟卡顿现象,不一定稳定复现卡死现象;
  2. 操作卡顿复现:通过频繁的交互操作,制造同时多个请求并发发出的现象,加上 performance 录制,可以一定程度加重渲染进程的负担,以模拟操作卡顿现象;

定位问题

来到客户现场,作为首要尝试,当然是通过 topnetstat 或者 cat /proc/cpuinfo 等命令来查看系统的 CPU、内存与网络的运行状态,但不出所料,这些信息在当前看来并没有太大异常。

由于从系统本身的一些状态上没能找到突破口,我们将目光转向客户端本身,希望在更小的范围内定位问题所在。通过 devtools 查看 netowork、performance 以及 DOM 渲染状态,我们只能发现貌似有些响应耗时过长的接口调用以及较长时长的 long task 任务,这当然需要我们进一步排查。

说到调试排查,首推的当然是 console.log 大法,为了让 log 打印复用,一个简单的技巧是写一个 HOC,以节省在每个地方都写一遍 debug log 的代码:

export const debugRender = <T=any>(BaseComponent: FC<T>) => (props:any) => {
  console.log(`Rendering ${BaseComponent.name} at ${performance.now()}`);
  return <BaseComponent {...props} />;
}

通过添加一些基于经验的断点信息打印,我们发现一些 Modal/Drawer 的显示/隐藏会较为明显的加重页面卡顿甚至到卡死现象上,通过排查代码实现以及查看对应 UI 库的 API 实现,会发现其中 Modal/Drawer 等组件上在隐藏时触发了其对应 DOM 节点的卸载,而在显示时又会重新渲染与插入,由于这些任务都需要在浏览器的渲染进程执行,而当 DOM 节点过多时频繁的节点装载与卸载便会对页面渲染效率产生影响。

于是,第一步便是定位到主要的几个组件,避免其在隐藏时执行 DOM 卸载(保留节点),通过这一步改变,我们直接消除了卡死现象。

部分优化尝试

为了更好的模拟卡顿现象,我们可以通过 chrome devtools 中 performance tab 中的 CPU throttling 配置来模拟卡顿:

在 Windows 高配版机器上,我们先将 CPU 降低配置 4x 情况,然后录制一段操作,从下图中可以看出有明显的任务执行耗时过长 & CPU 占用过高的现象:

以耗时最长的任务中占用时间最长的活动为例,我们搜索一下该关键词可以查到一个讨论 https://stackoverflow.com/questions/39916356/reacterrorutils-invokeguardedcallback-in-react-fires-event-repeatedly-in-ie-brow,简单来说,我们可以尝试优化点击事件不进行冒泡来减少事件的触发,例如:

event.stopPropagation();

通过优化该事件,我们可以一定程度上对事件在 DOM 上的传递 & 调用进行优化,但说到交互事件模型,我们在实际优化尝试时,也需要对 Web API 有些了解,以防用错 Web API 而南辕北辙,比如一个常见的面试题就是对比 Event 上暴露的两个 API stoppropagationstopimmediatepropagation 的用途区别,可别用错了。关于此细节可以参考回答 https://stackoverflow.com/questions/5299740/stoppropagation-vs-stopimmediatepropagation

但假如我们需要针对不同事件切换不同的 API 该怎么办呢,这里可以简单写个函数封装一下,再加个类型守卫来实现,比如如下的伪代码通过传入一个点击回调事件,而后在实际事件触发时通过判断 Event 类型从而调用不同 API 以达到优化效果:

const isMouseEvent = (event: Event | MouseEvent): event is MouseEvent => 'stopImmediatePropagation' in event

export const stopPropagationWrapper = (handleClick: Func) => (event: Event | MouseEvent) => {
  if (isMouseEvent(event)) {
    event.stopImmediatePropagation();
  } else {
    event.stopPropagation();
  }

  handleClick(event);
};

我们继续针对卡顿问题的调用情况进行梳理。从录制的执行队列中选取较长的一个 long task 进行分析,可以看到在模拟卡顿时排名靠前四的调用任务分别如下:

其中 fsync 函数调用时间占第一,而拆分 fsync 的活动调用可以看到主要调用了 fsyncSync:

此处未对 fsync 进一步分析以确定优化策略,但对于 fsync 的作用可以参考如下一段描述:

fsync 函数只对由文件描述符 filedes 指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync 可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。

这说明应用中有可能有数据库读写操作,也可能有文件读写操作,所以如果要进一步优化的话可以从这个方面展开,囿于时间限制,我们继续探索可行的快捷优化方案。

在最初解决卡死问题时,我们看到了过多的 DOM 卸载/挂载现象,但回到前端框架本身,我们也可以用一些常规的手段来减少组件不必要的 rerender,这些方案通常通过仔细阅读 React 文档便可以略知一二,比如在必要的地方增加 memo 以减少不必要的渲染执行,一个示例代码如下:

import {
  FC,
  memo,
} from 'react';

const Detail: FC = ({}) => {
  return (
    <div>Detail</div>
  );
}

export default memo(Detail);

此外,还有什么写法可能会影响 Web 应用的性能呢?闭包。

我们检查了客户端代码仓库里的两个列表文件,发现其中组件包含过多闭包变量,大多数写法是在一些函数定义中直接从上层作用域引用了一些变量进行操作,而不是通过参数传入函数,这样的数据/函数在使用后无法及时释放内存空间,可能会对内存存在持续占用的现象,因此,这也是优化的方向之一。

后续可能的优化空间

在一些 long task 任务的分析中,我们还可以具体定位到代码来进行优化,这里再举一个例子。

通过录制卡死情况下的堆栈调用情况,可以发现有一个 2.7s 任务中包含很多活动,如 Minor GC、react event、fsync、ReactElement 等等,其中 mergeProps 函数调用耗时250+ms。

针对这些函数调用,有些可能是 React 内部实现 API,有些可能是 UI 库 API,所以要想一一优化,也需要逐个分析,看是优化代码的调用与响应方式,还是合并组件 props 的传递与调用。

此外,通过监控 layers 变化情况,也会发现一些 slow scroll rects,这在 chrome 中都会通过红色区域以标注出来,通过定位这些在滚动中可能会造成缓慢的区域并检查代码,也有提升应用性能的可能性,因此,也是优化方向之一。

比如针对我们的场景,通过调整 layer 布局,可以看到虽然 layer 层级很多,但是主要的 slow scroll rects 区域还是集中在主内容区,即分页列表本身。

Electron 注意事项

本来,为了可以针对这些数据进行持续的分析,想从 performance 中将数据下载下来,以便之后有空时继续调试,但由于 Electron 的某些限制或者说是错误,我们目前无法保存 performance tab 下的性能数据到本地以便进行更深入的分析和查看。如果有涉及到 electron 开发的场景,需要注意下这个问题。问题现象详见 issue https://github.com/electron/electron/issues/39818

优化效果

为了提高客户端的性能和用户体验,我们进行了一系列的优化措施。首先,我们分析了卡死现象,包括客户端出现卡死时的 CPU 占用率/JS 堆栈/DOM 节点数情况、虚拟机运行状态等。然后,我们尝试了一些优化措施,如去除Modal/Drawer的 unmountOnExit 配置等。接下来,我们梳理了卡顿问题调用情况,分析了排名靠前的四个调用任务。为了减少组件不必要的rerender,我们在必要的地方增加了 memo。此外,我们还提到了组件中包含过多闭包的问题,以及右键菜单卡顿问题的排查。

由于客户端需求迭代过快,在前端技术上没有做较多的数据监控、性能评估等建设,这都对我们评估用户体验与定位问题产生了影响;此外,由于生产工具链的不完善,在生产环境进行定位与调试都给我们带来了比较大的挑战与时间消耗,这也会是我们持续要跟进与解决的一些开发链路的效率提升工作之一。

通过这些优化,我们希望能够解决客户端卡死问题并改善卡顿现象,并提高用户的使用体验。当然,从具体效果上来看,我们确实在如下两个方面进行了改善:

  1. 交互性能上,问题页面在切换时,即便将 CPU 降低配置 4x 情况下也再无出现卡死现象,卡顿现象有减轻趋势;
  2. 渲染效率上,从数据上看,频繁出现的 500ms-700ms long task 已减为当前观察范围内没有超过 300ms 的 long task,代码执行效率上有较大提升;

以下为优化后效果采样图:

简要总结

通过分析与优化尝试,我们解决了客户端卡死问题,并改善了卡顿现象,但其中暴露出一些编程规范与用法不够优雅的问题还需要在日常中持续完善,这也是这次优化未尽事宜,需要在未来不断排期以彻底解决。

当然,此中涉及到的一些调试与问题定位方法,也不仅局限于客户端的问题排查,而是通用 Web 应用性能评估时调试可以用到的手段,而更深入的研究则要开始涉猎到框架代码等内部函数调用的地方了,这也是本文未涉及部分,有待后续继续研究与定位。

☑️ ☆

2023年终总结

这一年里充满了各种变化,也有不少东西值得记录,比如令人满意的健身打卡,逐步调整的投资仓位,以及通过阅读学习和出行游玩收获的喜悦。

但当我准备动笔记录今天的忙碌故事时,却突然感到思绪断片,不知从何说起。他们就像一段段孤立的片段,突然间收起了各自本该伸出的突触,毫无关联。让我努力编织下,希望可以拼凑出一个完整的年度回忆。

一顿操作猛如虎,最后像个二百五

虽然本就没几年经验,但在我的投资生涯里,很早便认可了“投资是自我认知的变现”这一投资信条。面对年复一年地亏损,我一直保有谦逊的态度,认为这是我对事物认知不够的结果,也是我所需要交的学费。年复一年,而我却越挫越勇。每当我收到工资时,我首先想到的是”我有钱可以增加投资了”,直到钱花光,然后我又开始努力工作,等待下个月的薪资。不断地增加投资,不断触及新低,让我不禁感叹,我自己就是那个最健康、拥有永续现金流的优质资产(在中年危机被裁员之前)。

在不断学习的过程中,我尝试过使用美林时钟来辅助我在当前世界的变化中调整不同资产的投资比例;通过关注恐惧贪婪指数、北上资金动向以及全市场成交量来控制我的资金进出节奏;还构建了自己的价值评分系统,用于评估购买资产和确定应对策略。可惜,直到最后都逃不过“一顿操作猛如虎,最后像个二百五”。

但这并没有阻止我对投资越来越沉迷。今年,在各种空闲时间里,我仍然花了大量时间阅读书籍、观看纪录片与调整资金进入策略,也主要补齐了对2008年金融危机及欧债危机期间世界各国发生的事情与各大央行的应对策略,而对这些历史事件的了解,也让我对当前发生的许多时事有了更敏锐的感触。当然,最深刻的印象仍然是通过真金白银的投入去理解和观察这个世界究竟是如何运行的。

投资是生活的投影

尤记得刚接触投资不久,我便困惑于两个问题,他们是如此明显但我却找不到答案,以至于我开始怀疑自己的信息检索能力。

“为什么有很多关于价值投资的声音都在介绍通过定投降低风险与长期持有,但却很少提及何时卖出与落袋为安?”,这让我很不解,涨的再多,没有在合适的时机卖出,也没法落袋为安啊。而后来,随着“核心资产”泡沫的狂欢在2021年春节后戛然而止,伴随着飞流直下三千尺式的暴跌,那些宣扬十年定投赚十倍之类的响亮声音也从市场上消失了。我逐渐开始明白,这并不是因为市场没有这类声音,而是我一直追逐的都是“跟风”和“主流”,而不是真正的“价值”。

另一个问题,从我开始规律地研究公募基金定期报告以来,无论是谈到跨过刘易斯拐点带来的挑战,漫长的三年疫情带来的创伤,还是面对欧美的科技封锁与孤立,基金经理们貌似都一直坚定地看好中国。我很好奇,这个国度究竟有什么是世界上其他国家所无法企及与不可替代的吗?后来我发现,原来股市是不可以做空的。

再后来,我所遇到的问题也越来越多,但一个个也在不断的探索与学习中得到了解答。虽然我相信权益类资产在长期来看会是最有吸引力的投资标的,但离钱越近的地方聪明人也就越多,这就意味着我需要长期投入、学习与进步。投资就如同生活的投影,预设目标,不断努力、尝试,达到目标、总结与规划,如此反复,而这也是他一直吸引我的原因所在。

为了前方的未知与愉悦,直到最后一页

一本书可能很厚,但一纸书页很薄。每一次翻页都如同一程短暂的摆渡、一场微小的跋涉,身后欧律狄刻的目光仍未消散,远望伊西斯的面纱已然显影。

这是在今年世界读书日,给读者推送我的书摘时,从豆瓣上摘抄的一句话。以前,不论是地铁通勤,还是周末进城,抑或是出远门见朋友,我都时常手捧一个 iPad 会看上几页,就这么零零星星地,每年能看上几十本书。但今年因为运动打卡挤占了原有的时间,加上工作强度增加,以及频繁跑医院,少了很多碎片时间,分配给读书的时间也有所减少。有鉴于此,周末没事时,我时常花上整个整个的半天,用来阅读。期间去过几次图书馆,一呆就是一个下午,除了接水也不起身。安安静静的,啥也不做,就盯着屏幕,希望从字里行间收获快乐。

虽然从时间上相比去年有明显减少,但今年的收获仿佛更加实在,说说几个比较贴切的例子吧。想起年初去医院看病,为了治疗痤疮,前后一共吃了好几个月的药。后来,在阅读《皮肤的秘密》时,我对许多现象以及对待皮肤问题的方式有了新的领悟。当我们的皮肤状况变差时,真的需要那么多昂贵的护肤品来挽救吗?也许不是,也许只需要一些药膏就能解决大部分问题。当然,更重要的是我们不要过度清洁皮肤,保持规律的作息习惯。

当然,由于对身体机理运作以及病菌原理感兴趣,我又淘到了一本《我们为什么生病》。在阅读时,不仅有“疾病不是因为我们弱,而是这个世界有些东西变化太快了”的感慨,还在豆瓣偶遇到张一鸣同学的书评“其实进化论强调:你看到的是结果”。阅读之后,虽然对于癌症、衰老、过敏以及身体机理应对自然变化的机制有了更多了解,但更现实的是,我逐步认识到了时间对世间万物的一视同仁:不论君王庶民,我们都无法与之对抗。在时间面前,我们无论做些什么都无法避免衰老、死亡,而这引发我对生命存在的意义更具象的追求。

经济类书籍每年都必不可少。对经济危机与大萧条研究颇深的伯南克在《行动的勇气》中详细描述了自己在美联储工作的那段经历,从房地产泡沫破裂到雷曼兄弟的大坝决堤,及其引发的全球金融系统崩溃等事件,事无巨细,同时也花了很大篇幅揭示他与保尔森、盖特纳一起协力、果断扑火的各种努力。从全球合作到最终退出量化宽松政策,伯南克感慨到自己还是做了不少努力并卓有成效,他最后为美联储在危机之后所作的努力总结道:

我意识到金融冲击往往是不可预测的,因此还鼓励幕僚们寻找金融体系的结构性弱点,想办法使它更有弹性。这个想法已经体现在了我们的许多改革中,比如要求更高的银行资本充足率,提高银行体系吸收损失的能力。

每当阅读此类书籍,都会让我对世界上各种复杂、高级别的组织更加了解,而满足这些好奇心也是促使我坚持阅读的一大动力。为了前方的未知与愉悦,直到最后一页。

怀旧、养生与散步,是提前步入老年生活的主旋律

作为一个准奔三青年,我仿佛变得越来越怀旧了。还记得从上大学之后开始就再也没看过快乐大本营这类综艺节目了,但今年却一股劲又盯上了很多芒果台的综艺,而且还是反复观看。从时光音乐会到声生不息,从宝岛季到家年华,我发现我非常偏爱音乐类节目。很多耳熟能详的老歌,再配上我“听歌很少关注歌词,而只享受旋律”的习惯,当那一阵阵旋律响起时,仿佛把我又拉回到那些历历在目而有印象深刻的故事中。

今年养成的习性不仅怀旧,而且养老。今年我还尤其喜欢逛公园,奥森、颐和园、北海公园、圆明园、什刹海以及各色大大小小的北京园子都被我逛了个遍,一是趁着天气晴好看看应季花景,再者也是与许久未见的朋友散心聊天、联络感情。

当然,除了养老之外,我还异常养生。我跟朋友说起我每天的生活时,他们都觉得我已经是个新时代的合格健康老头了。每天上班第一件事便是到茶水间泡一杯热茶,按时吃饭,以及没有意外时会规律的去健身房转转练练,晚上也尽量避免熬夜,一有点啥问题也会跑到医院抓个医生问个究竟。周末呢,要没啥事,就到楼下超市买个菜回来做饭,虽然不是什么复杂菜品,但那些健康而平淡的家常味道,已经让我感到非常满足。

刚说到今年经常跑医院,如何形容这个经常呢,我统计了一下截止今天的医保支出,一年23000+,这还是在没有什么大病的基础上的花费。仿佛年龄越大,就越怕死,今年的我,时常因为一些小毛病而频频往医院跑。虽然确实有一些值得一看的小病,在遵循专业医师的建议与处方下,也让自己变得稍微健康一些、好看一些了,但不可否认,还是有一批是来自“怕死焦虑”的变现。上个月我刚体检完,报告上标红了五六项,我辗转反侧,无法理解为什么坚持锻炼的我还有这么多毛病,于是,几个三甲医院一顿约,主任副主任医师一起抢,我一定要搞出个究竟来。不过到头来,好几个科室的医生面对来自我“如果这不是问题,那为什么我有别人没有”的有罪推论式发问,都不耐烦的回复“不要过度焦虑,这些只是个人差异,而不是病症”,终究还是让我宽心了不少。

说到健身,最让我自豪的便是今年里在大部分时间我都持续着高强度的锻炼节奏。从每天游泳打卡,到下班后跑步,以及在同事的辅导下开始器械训练,年末时也参加了几节团课训练。每次运动完,都能明显的感觉自己的状态好了一些,而要不了多久,便又开始期待下一次的健身打卡及其带来的快乐。想起前几天看到一位投资者面对记者采访时说到,因为自己前一天熬夜状态不好,希望摄影师用一些“手段”将自己拍的更得体与优雅些,“一个好的状态与形象,既是对自己、也是对观众的交待”,这是他给的理由。逐渐沉溺于健身的我,非常认同这番话(当然,只是自己长得丑,和他不像而已)。取悦自己,找到自己愿意去做的事情,仿佛是一个奔三青年眼前最重要的事。

冲破黑白灰的人生单色调

今年的我不仅变得异常怕死,同时也希望对自己查漏补缺。今年,我预约过几场心理咨询,也从中获得不少收获。探寻自己在家庭沟通上的一些失控情绪表达,找到内心潜在的一些心理缺陷并尝试修复,而这些都是我以前不曾涉足的领域。

我从原生家庭继承了一些执念,而时常又不自觉将这些执念寄托回他们身上。由于自己的认知仍在不断拓宽,一些强行灌输给他们的想法,在没有得到妥善处理时,便引发了不可避免的矛盾,这通常体现为我的大声说话与争吵。今年看的一本书《原生家庭》,帮助我对亲密关系以及性格缺陷有了更本质的一些理解,虽不至像书中一些案例一样中毒过深,但自己的成长或许也有从原生家庭习惯中隐性的吸到一些“毒气”。他们可能在生活的一些方面上具有闪光点,但却因为用力过猛而导致在其他一些方面上造成失控。与好几个朋友聊天时,他们对我都有相似的形容——能在工作上所向披靡,但回归生活发现很多事情都没有规划和过多想法。而在心理咨询后,我的这种行为被具象成了“由于无法得到满足,而对某些关系进行转移与嫁接”这样的标签。

年中出差成都,约了一个从小玩到大的朋友见面,我们聊了很久直到深夜,差不多绕着成都的高新区转了半个圈,期间探讨了很多事情,包括工作、未来发展、定居以及生活的方方面面,但在最后,他给我了一个标签,“你确实活得非常自律、严谨,就像个机器人,仿佛你的生活里只有黑白灰这三种颜色”。

我一时不知怎么接话,因为他说的确实在理,我只能笑笑,随意找了个借口回应道:“我确实没有什么物欲啊,很多人喜欢通过花钱来达到满足感,但对我不太适用;当然,投资亏钱除外。至于为什么要赚钱,一方面是为了‘安全感’,另一方面呢,也算是一种获胜的姿态吧,可以满足我的好胜心”。

就是这么一个黑白灰人格,既对亲人如此关心甚至到有些焦虑,而又对自己无欲无求、活得过于机械化,这也成为我要在新的一年去努力攻克的课题之一。

写在最后

今年因为经常挂到医院一大早的号而早起,但也因此看到很多往常不曾见到的风景。阳光从树梢穿过,零星撒向地面;骑着单车,听到林间鸟叫、看到小区晨起锻炼的人儿;迎面与一个个充满朝气的少年相遇,从他们眼里真的能看到光。这是令人向往的风景,便也为此努力奋斗。

一点一滴,日积月累,这既是果实,也是漫漫人生。季节更替、时间流转,也望诸君可以缓慢而坚定地前进,去做自己能做的事情。新的一年,好好吃饭,好好锻炼,好好生活。

☑️ ☆

结合 React Fiber 结构与 chrome 插件,谈谈无侵入自动化表单的技术尝试

本文亦有分享 Slides,详见 https://hijiangtao.github.io/slides/s-Common/Technical-Attempt-of-Non-intrusive-Automated-Forms-with-React-Fiber-and-chrome-plugins.pdf 或扫二维码查看。

二维码

前言

作为一名前端工程师,不论你处于什么业务方向,肯定都与表单打过交道,当然如果你是服务端、产品、测试同学,想必也早已接触过表单这类场景。让我们试想一下,如果研发需求的功能测试依赖一个复杂表单的填写而得以继续,那么频繁的表单填写在研发自测和 QA 验证过程中就会占用过多碎片化的时间,此类需要频繁执行以生成测试数据或推进执行流程的事情,简单一想貌似规则可循、可以被工具替代。既然可以自动化来实现,那为什么还要我们一个个手动点呢?

不要着急,这篇文章的目的,就是想与大家分享一下这样一个自驱型技术产品的诞生故事。这其中既包括技术与实现细节,同时也涵盖这个产品的设计过程。

问题初探:表单场景究竟麻烦在哪

首先,让我们来看看表单,到底麻烦在哪了。

从前端开发者视角看去,表单是由一个表单组件包裹多个表单控件组成,用 JSX 语法层层嵌套实现,当需求开发完成后需要自测时,最直接且简便的用法当属用 initialValue 属性或者 form 实例上提供的 API 方法(比如 setFieldsValue API)来赋值;但是等代码部署到开发/测试环境,想要这么灵活的变更初始数据就不太可能了,频繁的发布部署流程会让变更测试成本直线上升。

Untitled

另一方面,在产品测试等同学的眼中,表单并不涉及到代码形态,只是一个有很多输入项的丰富 UI 页面,通过点击、输入、选择等操作,来完成数据的输入,是一个需要消耗一定时间的流程。而当表单项很多时,花费的时间也直线上升。

Untitled

通过抽象,我们可以列举几个从前端角度观察到的例子,以方便我们更熟悉填写表单时涉及到的各类复杂场景:

  1. 对接完产品需求,终于把字段与各类逻辑组装进表单,想自测看看交互效果,简单来做,可以代码写一些 mock 拦截来实现
  2. 功能提测后,为了测试新功能,需要先填一遍复杂表单,造数据,但这个时候 Form 里嵌套 FormList,完成功能开发就用了很久了,现在造数据还需要再来一遍
  3. 每次填写表单,由于某个字段是存储主键,每次填写不能完全一致,即在特定规则下随机生成一些字符串,可能是年龄、中文姓名或者邮箱等
  4. 登陆态过期太频繁,一过期就要重新输入用户名密码再点击按钮登陆一遍,当然,现有的工具中我们可以通过 chrome 的记住密码来实现,但我们仍然需要在填充完成后点击确定按钮进行登录操作

总结来看,以上这些场景按照用途可以汇总成以下几类:

  1. 研发功能开发自测
  2. 测试数据构造
  3. 符合规则的个性化填写
  4. 日常操作,比如登陆

技术调研:开源社区与插件是市场的已有技术实现

在明确了需求之后,在是否需要动手之前,我们需要先调研看看有没有现有技术或者工具可以帮助我们达到目的,毕竟,反复造轮子在哪里都是被抵触的。开发工具的目的是为了解决问题,如果问题已经有了解决方案,我们就不需要自己去实现了。

Untitled

回顾一下表单需求,仔细想想,可能存在几种解决思路呢?首先是辅助工具,比如浏览器插件这种,作为业务开发无感知,无接入成本(无侵入式)的技术方案,其特征也显而易见:

  1. 不依赖 UI 框架,通用性强
  2. 无需具体业务感知,对业务代码无侵入,接入成本低
  3. 识别与填充成功率低,支持控件有限,尤其在当下很多 UI 库针对不同表单控件会有自己的实现(以及事件拦截),只能支持简单的 input 框以及一些 radio 场景
  4. 随机 mock 数据能力有限,在自定义规则集中生成
  5. 不支持页面上表单与事件连续操作,比如派发表单填充后的点击行为

既然无侵入式方案能力有限,那么做些侵入式改造是不是会更加有用呢?比如,通过约定 url 传参或者业务代码内嵌入开关,来允许用户显式控制代码的执行逻辑,这样用户可以在打开页面时对表单做指定的赋值操作,对实际点击行为后触发的回调函数进行调用,这是一个大概的实现思路,其特点罗列如下:

  1. 基于具体表单结构定制,通用性弱
  2. 完美填充,支持全部表单控件
  3. 不支持页面上表单与事件连续操作
  4. 填充数据变更时需重新打包,成本高昂

Untitled

由于辅助工具和侵入式改造都或多或少有些缺陷,熟悉自动化测试的同学肯定会说,这些要做的事情,自动化测试方案不是早就覆盖了吗?是的,自动化测试方案是一个完美的解决方案,基于 puppeteer 或者 e2e 框架,不仅方案通用性强,填充也很准确,但是从开发者以及使用者的便利性角度来看,基于这类方案用户在上手使用时存在成本,研发要实现对应功能成本也相对较高。还记得初衷么,我们是希望有一个可以解决表单场景的工具,我们既希望他能解决一些复杂场景的问题,同时也希望他简单易用成本低。

回顾一下,我们调研过的几个实现思路,能不能把无侵入式改造与高识别率结合?即“取其精华,取其糟粕”。

需求拆解:我们究竟需要一个怎样的工具

做完现有技术调研后,我们来将需求做拆解,从远期来看,我们当然希望有一个不侵入用户代码,却可辅助用户自动化识别页面内存在表单、支持用户自定义 mock 规则生成表单数据进行填充的工具,来帮助我们在各类表单场景中提效。

具体来看,我们将需求细化,希望覆盖这么几个场景:

  1. 接入零成本:开发者不用对当前业务代码做任何改造,零代码侵入便可使用
  2. 表单准确填充:当下很多方案基于 DOM 解析与处理进行实现,通过这类方案进行表单填充,会因为组件库自身实现做了事件拦截或者托管,而导致表单填充很多情况无法生效的情况,而用户在意的大多数字段却无法触发
  3. 表单准确识别:准确获取与开发者完全一致的表单结构,防止 DOM 解析不准确的情况,大多数工具只能解析简单的 input、radio 等场景
  4. 填充内容自定义:支持 mockjs 类语法对填充数据进行自定义构造
  5. 支持事件派发:在登陆场景下,一般除了填充表单外,还可以直接替用户点击「确定」进行登录操作,工具支持增加事件派发,将表单填充和点击等事件一体化流程处理

拆解了需求,就可以规划一步步来实现,将产品需求做成一期、二期不断迭代的交付节奏,我们在这一块遵循和正常产品研发相同的节奏。第一步,当然是识别表单结构,因为只有准确识别到表单,后续的数据构造、表单填充、事件派发才有意义。

技术方案:如何准确识别表单

怎么识别才准确呢?侵入式的方式肯定是最准确的,但我不能每个组件都包一个 wrapper 吧,如果一个项目有100处表单的调用,那我就需要做100次改造,而且从前面的调研来看,我们还是希望从无侵入方案入手,因此,如何提高无侵入识别方案的准确性,成了一个需要攻克的难题。这个时候,让我们先来看看一个面试常被问到的点,从 React Fiber 说起。

我们都知道,Virtual DOM 是对真实 DOM 的模拟,也是一棵树,通过 Diffing 算法和老树对比,得到差值,再同步给视图要修改哪些部分。Fiber 是对 React 核心算法的重构,Fiber 对象是一个用于保存「组件状态」、「组件对应的 DOM 的信息」、以及「工作任务 (work)」的数据结构,Fiber node 是 Fiber 对象的实例。

先不看 React Fiber 树的实现方式,如果我们自己来实现一遍,大抵会想到两种思路:数组或者链表。数组的组织方式可能更符合我们的直觉,但是想一想在这个树如果我们要查找遍历、调整结构(分割、替换节点)或者随时重建新树,链表的方式似乎更加灵活,事实上,React 也是这么做的。

Fiber 树的组织与遍历

我们先整体来看一下遍历过程。Fiber 树的遍历需要一个指针指向当前遍历到的节点,workInProgress 就是这个指针,进一步是 performUnitOfWork 的 next 指针,遍历在指针为 null 的时候结束。

next 先从 beginWork 获取,如果有则直接将当前遍历的指针 workInProgress 指向 next;如果没有,就到 completeUnitOfWork 中进一步处理。这里 beginWork 是“递”,即不停向下找到当前分支最深叶子节点的过程;completeUnitOfWork 是“归”,即结束这个分支,向右或向上的过程。

Untitled

关于 performUnitOfWork 的更完整代码详见 https://github.com/facebook/react/blob/c1d414d75851aee7f25f69c1b6fda6a14198ba24/packages/react-reconciler/src/ReactFiberWorkLoop.new.js#L2051-L2077

在递归过程中,beginWork 过程比较简单,大体上是在深度优先搜索中,对遍历到的节点进行 component 更新处理,然后返回第一个字节点,这里就不介绍,我们看看 performUnitOfWork 的具体逻辑。

在“归”的过程中,我们需要避免遍历造成死循环,即若我们向下遍历时遇到的节点,在向上过程中出现时,我们不应该让其再次进入 beginWork。

completeUnitOfWork 内部又创建了一层循环,搭配一个向上的新指针 completeWork,然后循环该指针节点,如果有兄弟节点就更新当前遍历到的节点指针,返回交还给外层循环;没有就向上到父节点继续循环,直到新指针为空(即已经到达根节点);最后再处理标记最顶层的根节点处理状态。

Untitled

关于 completeUnitOfWork 的更完整代码详见 https://github.com/facebook/react/blob/c1d414d75851aee7f25f69c1b6fda6a14198ba24/packages/react-reconciler/src/ReactFiberWorkLoop.new.js#L2173-L2271

整个遍历流程示意图可以参考《如何理解 React Fiber 架构? - 几木的回答》中的贴图

Untitled

Fiber 树的构建与 Diffing

Fiber 树是边创建边遍历的,每个节点都经历了「创建、Diffing、收集副作用(要改哪些节点)」的过程。其中,创建、Diffing要自上而下,因为有父才有子;收集副作用要自下而上最终收集到根节点。—— https://www.zhihu.com/question/49496872/answer/2517859568

在 React 中,同时最多会存在两颗树,一个是当前被渲染出来的 Fiber 树,称为 current,另一个是正在构建的 Fiber 树,称为 workInProgress,上文中提到的遍历均在后者身上进行。

找到两棵任意的树之间的最小的差异是一个复杂度为 O(n3) 的问题,React Diff 算法通过一些假设,最终达到了接近 O(n) 的复杂度。

这里提到的假设主要包含以下几点:

  1. 假设一:不同类型的两个元素将产生不同的树,遇此情况时 React 会拆卸原有节点并且建立新的节点(触发重建流程)。
  2. 假设二:默认情况下,在 DOM 节点的子节点上递归时,React 只会同时遍历两个子节点列表,并在存在差异时生成一个更新操作。
  3. 假设三:用户给每个子节点提供一个 key,标记它们“是同一个”,在有 key 的情况下能保证二者都复用仅做移动,但无 key 就会造成两个不必要的卸载重建。

副作用与收集过程

Fiber 树的构建以及 Diffing 都是同时进行的,不是说构建完 Fiber 树之后再开始 Diffing 寻找差距。同样的,两棵树 Diffing 的过程中,就已经决定了哪些旧节点需要复用、删除、移动,哪些新节点需要创建,这些操作会以 Effect 的形式挂到节点上,他们随着 Diffing 过程同步完成收集。

由于需要保证所有后代节点的副作用信息,副作用的收集有两个约定:

  1. 副作用是向上收集的,每次在 completeUnitOfWork 中循环经过一个节点时,会同时合并后代节点的 effectList 以及自己的 effectList;
  2. 副作用同样采用链表的方式存储,并通过 fisrtEffect —> nextEffect —> lastEffect 的关系串联起来,但此链表与 Fiber 树的链表结构没有关系;

关于副作用以及 Host 实例更新的更多细节,本文不再深入,此时,让我们重新回到最初的目标,即识别表单上来。

利用 Fiber 识别表单

关于 React Fiber 相关的知识补充,我们就讲到这里。接下来,我们看看如果利用 Fiber 来识别表单,这主要分为三步:

  1. 从 DOM 中找到目标 form 元素
  2. 获取有效的 Fiber 实例
  3. 读取目标属性值,解析表单结构

下方代码解释了我们如果从指定 form 元素中提取 Fiber 实例的过程。

/**
 * 获取 Fiber 实例
 * @param dom
 * @param traverseUp
 */
function getFiberInstance(dom: HTMLElement, traverseUp = 0) {
  if (!dom) {
    return null
  }

  const key = Object.keys(dom).find((key) => {
    return (
      key.startsWith("__reactFiber$") || // react 17+
      key.startsWith("__reactInternalInstance$")
    ) // react <17
  })
  const domFiber = dom[key]
  if (domFiber == null) return null

  // react <16
  if (domFiber._currentElement) {
    let compFiber = domFiber._currentElement._owner
    for (let i = 0; i < traverseUp; i++) {
      compFiber = compFiber._currentElement._owner
    }
    return compFiber._instance
  }

  // react 16+
  const getCompFiber = (fiber) => {
    let parentFiber = fiber.return
    while (typeof parentFiber.type == "string") {
      parentFiber = parentFiber.return
    }

    return parentFiber
  }
  let compFiber = getCompFiber(domFiber)
  for (let i = 0; i < traverseUp; i++) {
    compFiber = getCompFiber(compFiber)
  }

  return compFiber
}

当我们拿到 Fiber 实例后,那么 UI 库的部分属性就可以通过 Fiber 实例暴露出来,比如 setFieldsValue 等,此时,我们即可以轻松的拿到表单本身的结构,此部分暂略。

工具完善:构造数据与表单填充

我们再来回顾一下,对于表单来说,我们都需要构造些什么数据来作为填充数据:

  1. 固定取值:填入,每次填入相同值即可,无需特殊处理
  2. 规则取值:每次填入的字段都需要取一个符合相同规则但取值不同的数值
  3. 指定集合:针对单选、多选等场景,需要从指定选项中随机选取一个填入
  4. 时间取值:在有效的时间范围内随机生成一个时间串
  5. 布尔取值:checkbox、radio 等组件实际取值为 true/false 二选一
  6. ……

让人开心的是,除了基于已知选项集合的数据和固定值外,其他类型数据都可以通过类似 mock.js 的规则来描述生成规则,而固定值和已知集合,我们暂且先让用户自己手动填写就好了。

需要注意的是,除了表单填充外,我们最开始还提到希望在表单完成填充后能够辅助用户对按钮进行点击操作,即事件派发能力,所以在表单填充上,我们至少要解决这两个问题:

  1. 多步操作:表单存在字段之间的联动,无法一次完成赋值
  2. 填充与事件组合:表单填充完下一步可能就是点击事件

关于这一部分,更多是在产品功能完善上的思考,而非技术调研上的难点,下面贴一张流程图来解释工具的工作流程:

Untitled

工程开发:功能集成与插件开发

在完成了需求收集、技术调研以及分步骤拆解实现后,貌似大部分难题我们都获得了答案,接下来要做的便是另一方面,在一个单独的工具中将这些功能集成,当下最合适的方式应该是通过浏览器插件来实现它,插件形式上小巧,但借助 chrome API 以及共享 DOM,我们又能拥有强大的能力。

Untitled

现代化的插件开发体验

开发过浏览器插件的同学,想必都感受过 chrome 开发文档与当下现代开发方式格格不入的开发体验,手写 JavaScript、HTML 以及 manifest 声明文件,貌似开发流程还停留在刀耕火种的时代,作为一名开发者,我不仅希望我的产品体验良好,也希望开发流程更加现代化,具体来说,对于插件开发,开发工作流至少得满足如下几个方面吧:

  1. 代码构建打包
  2. TypeScript + React 支持
  3. 插件声明 manifest.json 自动生成
  4. 跨 script 持久化存储
  5. 不同 script 间 (content script / background / popup) 通信

幸运的是,我们也不用完全从头改造插件的开发工作流,当下已经有开源框架在做相关的事情了,我们可以直接用上,比如 plasmo,他使得我们可以像开发 React 项目那样开发一个 chrome 插件。

当然,我们确实需要额外关注几点,考虑到工具开发过程中遇到的几个难点,我这里着重强调下插件通信以及插件安全。

插件通信方案简介

通信是这个工具绕不开的一个功能点。举几个例子,比如 popup UI 和 content script 之间需要通信,以控制 content UI 的展示与否;比如插件脚本与 MAIN 的通信,以控制在页面内执行特定的脚本以收集一些信息;比如 content script 与 background script 之间的通信,以控制插件在后台需要做的一些计算处理逻辑等等。

为了实现这些功能,需要选择合适的通信方案。好在大多数 Web 通信方案都可以直接用在插件上,此外,插件还可以额外调用一些 chrome API 来触发特定的通信事件,简单来说,存在这么几种方案:

  1. 通用的通信机制,通过 postMessage 广播消息
  2. 非广播传递,MessageChannel 传递消息
  3. 通过 chrome API 进行消息通信
    1. chrome.devtools. inspectedWindow.eval
    2. chrome.tabs.sendMessage
    3. chrome.tabs.connect
    4. chrome.extension.getBackgroundPage
    5. ……

其中,关于跨线程通信相关的技术方案,我在《Service Worker 实践指南》一文中有详细介绍,感兴趣的同学可以查阅 https://hijiangtao.github.io/2021/04/13/Service-Worker-Practical-Notes/

插件安全问题汇总

由于浏览器对插件安全的设计,插件虽然可以通过 HTML/JavaScript/CSS 来编码开发,但其在运行上还存在一些安全限制,从我的开发过程来看,具体有这么三个方面值得注意:

  1. 插件权限:chrome 插件在运行中涉及到的权限调用需要在 manifest permissions 中声明
  2. script 对 chrome API 权限:content scripts 中只允许如下几类 chrome.***.api 调用
    1. chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest)
    2. chrome.i18n
    3. chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage)
    4. chrome.storage
  3. 共享 DOM 权限:content scripts UI 部分不支持针对 DOM 的 Expando 属性的共享

工具功能集成

解决完插件开发的问题后,我们接下来需要做的便是,作为一个产品经理,去思考我们的产品在面世之前需要完成哪些功能的集成,比如:

  1. 支持表单自定义 mock 规则生成填充数据
  2. 不同规则适配不同页面地址
  3. 配置数据的导入与导出
  4. 表单识别后的规则提取与拆分
  5. 支持自定义事件组合
  6. ……

总结

表单类形态在开发场景中非常常见,如果研发需求的功能测试依赖一个复杂表单的填写而得以继续,那么频繁的表单填写在研发自测和 QA 测试中就会占用过多碎片化的时间,此类需要频繁执行(以生成测试数据或推进执行流程)但规则可循的场景如果可以被工具替代,那么将可以极大的提升产研研发效率。

从远期目标来看,我们需要有一个不侵入用户代码,但可辅助用户自动化识别页面内存在表单,并支持用户自定义 mock 规则生成表单数据进行填充的工具,涵盖各类表单场景。

相比现有社区的方案中,有几个明显的优势/改善点,使得该类工具具有广泛的应用场景:

  1. 不依赖代码侵入,对开发人员无接入成本;
  2. 识别准确率高,理论情况下可以达到100%,不受前端框架以及 UI 开源库的选型影响;
  3. 数据构造灵活,可以完全自定义规则,生成中英文、数字、日期等各类数据,做到随机+灵活;
  4. 支持事件派发,支持多步骤表单填充,拥有组合能力;
  5. 使用者无需额外的软件安装,通过浏览器插件的方式使用,简单易用,成本低;

但从当下做起,通过技术调研,我们发现当下社区中并不存在一个低成本、无侵入且高准确性的工具,于是借助 React Fiber 结构以及浏览器插件的能力,我们先期实现了一个无侵入式、高准确性的表单识别和填充工具,更多功能会在后续迭代中不断完善。

参考

  1. https://xyy94813.gitbook.io/x-note/fe/react/react-diff-algorithm
  2. https://www.zhihu.com/question/49496872/answer/2517859568
☑️ ⭐

《四千周》读书摘要

“人这一辈子太短了,短到荒唐,短到可怕,短到没礼貌”

在网友的推荐下,最近在看《四千周》。虽然从书名上看,有点口水或者畅想榜的嫌疑,但实际上可能不少朋友读完后也会由此感想。不过好在书内容不多,可以快速浏览一遍,也不大费时。

以下摘录整理一下文末给出的帮助你接纳人生有限性的十个工具,附上部分摘要描述:

1. 划定边界:采用”定量”的生产力策略

许多工作建议都隐含着这样的承诺:它可以帮你完成所有重要的事情。但这根本不可能,而且为此奋力挣扎只会让你更忙。更好的办法是首先就假设艰难的选择是不可避免的,然后集中精力做好选择。限制手头的工作数量这样的策略肯定有用,但最简单的办法是保留两个待办清单,一个采用”开放式”,另一个采用”封闭式”。在开放式清单中列出你手头的所有事情,它肯定会非常长,长到让人感觉可怕。幸运的是,你并不需要处理这个待办清单,你要做的是将开放式清单中的任务放进有数量限制的封闭式清单中(最多十个)。你需要遵守一条规则:只有完成一项任务,才能往里面添加新的任务(或许你还需要第三个清单,列出需要等待别人给你答复的”搁置”任务)。

2. 专注一事:在完成一项工作前有意推迟其他工作

同样的道理,你需要一次只专注于一个大项目(最多在一个工作项目之夕卜,加上一个非工作项目),完成之后才能进行下一个项目。

3. 要事优先:提前决定放弃哪件工作

你永远有短板,这不可避免,因为人的时间和精力是有限的。但是,策略性的表现不佳(提前计划好哪些方面你不需要做得很好),最大的好处就是你可以集中使用有限的时间和精力。

4. 注重完成:关注已经完成的事,而不是只关注尚未完成的事

真要说的话,完成所有工作的追求可谓永无止境,因此你很容易就会绝望且自怨自艾:在所有工作完成之前,你无法自我感觉良好,但工作永远都有,这意味着你永远无法让心态变好。

5. 聚焦关注:把有限的注意力集中起来

为了有所作为,必须将有限的关注集中起来。

6. 拥抱乏味:选择枯燥且用途单一的技术

你可以将设备变得尽量枯燥一首先,删掉社交媒体应用程序,如果你愿意,甚至可以删掉电子邮件,然后将屏幕从彩色模式切换到黑白模式。”转为黑白模式后,我并不会一下子变成另一个人,但感觉自己可以更好地控制手机了。它现在看起来像是工具,而不是玩具。

7. 寻找新意:更深入地体验日常生活

随着时间一年年过去,体验变成了例行公事。对抗这一现象的常规建议是用各种新奇的经历填满生活。这确实有效,但它很可能导致另一个问题,也就是”存在的应接不暇”。寻找新奇感不是去做完全不同的事情,而是更深入地投入现有以下是重新排版并转换为Markdown格式的文本:

8. 保持好奇:做人际关系的”研究员”

保持好奇心是与他人建立深入联系的关键。当你与他人交流时,保持开放的心态,关注他们的故事、兴趣和观点。将人际关系视为一个不断学习和探索的过程,你将能够建立更加丰富和有意义的连接。

9. 即时慷慨:立刻释放你的善意

善意和慷慨是让人与人之间关系更加和谐的重要因素。不要等待”合适的时机”或条件,立即表达你的善意和慷慨。无论是一句赞美的话语、一份小礼物还是一项帮助,即时慷慨将为他人带来积极的影响,同时也增强了你与他人之间的联系。

10. 静默无为:练习什么都不做

严格来讲,什么都不做是根本不可能的:只要你还活着,就一直在呼吸,身体也会保持某些姿势,等等。因此,训练自己”什么都不做”指的是训练自己抵制冲动,不去控制周围的人和事,让事情呈现其原本的样子。这种静默无为的练习可以帮助你培养内心的宁静和平和,同时减少无谓的忧虑和焦虑。

豆瓣地址 https://book.douban.com/subject/36093214/

简介:如果能活到80岁,你在地球上的时间也只是勉强超过4000个星期。人生不应只是快进,知名的《卫报》心理学专栏作家奥利弗·伯克曼借鉴了古代和当代哲学家、心理学家及精神导师的见解,摒弃了现代人对“完成所有事情”的徒劳迷恋,将肤浅的高效解决方案放在一边,向读者介绍了通过接纳时间和自我的有限性构建有意义生活的方法,将我们从无休止的时间传送带上解救出来,摆脱焦虑、分心、缺乏耐心等消极状态,重新认识真正的自我,选择你想要的活法。

☑️ ☆

风雨过后见彩虹:公募基金2022年度报告摘录与解读

去年,我通过问答的形式将阅读完公募基金年报后的一些感想进行了总结,详见《十问十答,从公募基金年报中读懂未来》。如今,已过去一年,按照《公开募集证券投资基金信息披露管理办法》规定,所有公募基金过去一年的年报也已经全部生成,我计划今后将其作为一个年更栏目发表于个人博客,暂且就叫《时间的朋友》吧。那么,接下来就让我们开始2023年版的报告解读吧。

过去一年都发生了什么

大家都在说去年很难,俄乌地缘冲突、海外货币紧缩、疫情扩散等等关键词,可能很深刻的印在了大家的心海,但这些困难关联到资本市场的变动究竟有多难、难在哪,饶刚经理给我们完整梳理了一番:

2022年无论国内还是国外都出现了诸多超预期的因素,比如欧美发达国家货币政策超预期收紧、俄乌冲突、国内疫情反复等,从而导致宏观经济和资产的波动均明显放大, 其中“海外通胀超预期”和“内需疲弱”成为全年牵引资产价格的核心线索:复盘来看,在年初美欧等地区逐渐宣布经济正常化+俄乌冲突之下,供需因素共振导致大宗价格飙涨,海外高通胀压力之下,美联储3月开启加息进程,6月以来连续4次75BP的加息创下历史最快加息纪录,美元指数也一度上行至近20年来高位。而国内在房地产信用风险与疫情反复等因素扰动下,经济运行面临更大不确定性和挑战,内需疲软这一主要矛盾逐步显现并贯穿全年。 ——睿远稳进配置两年持有期混合型证券投资基金 2022 年年度报告

而回顾资本市场的实际变动,以4月、11月为两个关键时点,张清华经理也为我们做了详尽的事件梳理:

2022 年的市场值得审视与反思。回顾历史,我们极少经历如此长时期“弱现实”与“强预期”的对立,预期相对于基本面更难以研究与分析,这对投资带来了极大的挑战。从各种复杂的信息中提炼出市场的主要矛盾并迅速做出调整应对,就显得尤为重要,这需要我们时常审视自己的组合是否规避了极端配置、是否保持足够的灵活性以应对各种可能发生的情形、对未来路标的挑选与迭代是否有效。另外,在理财净值化大背景下,11 月债券市场大幅调整引发了银行理财赎回的负反馈,机构行为对市场价格造成如此剧烈的影响,且影响的时长与幅度均超出预期。市场的一致预期与投资者的一致行动,很容易形成过度拥挤的交易,并可能短期内对市场价格造成超预期的巨大波动,这需要我们对市场更加心存警惕。 ——易方达裕丰回报债券型证券投资基金 2022 年年度报告

再往前,我们或许可以跟着焦巍经理复盘过去三年的操作以对过去的三年都做一个总结:

首先我们在行业的配置调整过程中,随着白酒在 2021 年年初估值和基本面的同时见顶,不断加仓了医药中的消费部分和创新药产业链。随着医药行情在 2021 年 6 月的见顶,我们在 2022 年对医药的调整是滞后和被动的。本基金对医药的 CRO 的减仓始于 2022 年一季度,而同时对中药的加仓则标的没能集中在受益行业。唯一能够在底部加仓并坚持的是医美部分的投资,整体而言,医药部分的投资对本基金的消费部分造成了拖累,而这正是由于 2021 年年初为了避免白酒的估值见顶进行的资产迁移所致

……其次,在 2021 年年末面对 2022 年布局时,出于对医药现有模式的考虑,本基金小幅配置了军工和半导体行业,这部分投资在 2022 年一季度就证明是失败的,我们随后尽管进行了清仓,但实质上的损失是存在的。

……第三,我们在某些消费的投资确实在估值过高时没有减持,而在熊市中,高估值叠加基本面的不达预期,造成了其贝塔效应远远大于调整过的低估值公司。——银华富裕主题混合 2022 年年度报告

继续做时间的朋友

我们都说要长期持有,但是什么才叫长期持有呢,或许”保持较高的持股集中度和组合延续性”会是可选答案之一:

报告期内,本基金投资策略上有以下一些特点……前十大股票在基金的净值占比处于45-50%的区间,前二十大股票的净值比例,上半年超过70%,下半年该比例提高到77%左右。重点公司中约40%的持有周期伴随着产品成立至今,“找到一批优秀公司,分享其成长过程中创造的价值”一直是我们搭建组合的理念。 ——睿远成长价值混合型证券投资基金 2022 年年度报告

而除了一些论点外,投资仍旧需要合适的方法辅以帮助,张坤经理在年报中也给出了其对投资这场”无限游戏”的一些生存之法:

很多时候,那些不可知的概括性论断吸引了我们的注意力,而让我们忽视了具体的、可知的、有作用的分析。仅仅因为担忧短期经济形势的变化或者规避股市的短期波动,从而放弃买入甚至卖出一家具有长期盈利能力的公司,并不可取,这实质上是用一项不确定的原因去否定了一件更确定的事情。……考虑一个投资者通常要面对数十年投资生涯,建立稳定的投资体系,保持平和的心态,避免无效的对时间和财富的浪费,以及持续不断学习复用性强的知识,才更有希望在这场无限博弈中不断积累复利。——易方达优质精选混合型证券投资基金 2022 年年度报告

此外,投资也是我们认知的变现,通过了解、判断以及制定应对策略,最终我们的观点会在资本市场付诸实践,并通过真金白银来证其真伪,关于投资持有期以及布局行业上,王崇经理给出了自己的观点:

从未来两、三年的视角看,经过一年多股价的回调,大部分公司股票估值已具备价格优势,甚至存在部分竞争力突出的公司股价估值合理或偏低。拉长投资视角,目前“强预期、弱现实”并充满迷茫的经济和市场低迷阶段可能给中长期投资人提供比较好的布局机会,未来几年有望实现不错的年化收益率。

后续本基金将继续坚守能力圈,积极寻找消费、服务、软件和汽车零部件等行业内估值合理的优质公司股票做中期布局,努力为基金持有人创造较好回报。——交银施罗德新成长混合型证券投资基金 2022 年年度报告

还有一些基金经理会在年报中描述未来投资方向时会带些理想主义色彩,对未来生活和社会的技术发展做一些”预测与展望”:

具体而言,在移动互联网兴起以来,生产关系(商业模式)的优化主导着社会的进步,而生产力(技术)进步缓慢,在这个大背景下,我们将持续看好有望实现生产力突破的领域,比如更深度能源变革(碳捕获、利用与封存技术,更远期的核聚变技术等)、合成生物学、人工智能等。此外,如果跳出地球这个系统,星空、星际探索将让我们获得系统外的劳动资料和劳动对象,虽然还比较早期,但我们也会积极寻找相应的机会。——易方达瑞程灵活配置混合型证券投资基金 2022 年年度报告

未来的路该如何走

我们都知道2023年经济肯定会复苏,但是复苏到多大强度呢,有基金经理表示乐观:

我们认为股票市场有望迎来新一轮上行周期。2022 年困扰市场的因素主要有美联储引领下的全球货币紧缩、国内受到新冠疫情冲击、地缘政治冲突带来的市场风险偏好下降,而这些因素在四季度均出现逆转,资产定价面临重估。新冠病毒毒性降低后,及时调整防疫政策使得经济发展前景变得清晰。只要外部环境正常化,凭借中国人民的勤劳和智慧,任何困难都可以被克服。——景顺长城绩优成长混合 2022 年年度报告

但也有基金经理提示,或许我们不能过于乐观:

展望2023年,中国经济预计将呈现恢复性增长。政策已经把促进内需和经济增长放在首要位置,我们预计经济的下行风险已大幅下降,但复苏过程可能仍然存在波折,一些长短期因素会持续对经济复苏进程带来不确定性,政策及其给予的信心可以托底经济,但经济复苏的强度和节奏仍需观察。 ——睿远均衡价值三年持有期混合型证券投资基金 2022 年年度报告

此外,还需要知道一点,任何外有经验都不能直接生搬硬套运用在国内,中国地大物博,我们的发展道理放在全世界范围内都没有完全可靠可以照搬的案例,我们还是要坚持走中国特色社会主义道路,而擅长债券投资的胡剑经理也给出了类似的观点:

展望未来,中国经济进入后疫情时代,经济基本面企稳回升的方向是确定的。

……从海外经验看,消费反弹前三个月最为强劲,后续或跟随疫情反复有一定波动,但消费增长以及服务业的复苏带动整体经济向上的大趋势毋庸置疑。然而中国疫后的经济复苏又不能照搬海外经验。其中一方面是供给侧情况反差较大,海外疫情结束后一般都面临供给不足并拉动商品价格上涨的压力,而中国则不一样,由于疫情期间三年来供应链并未受损,且制造业投资较为积极,较低的产能利用率以及多余的工业产成品库存使得市场供大于求的状态在疫后可能会持续一段时间。

另一方面疫情期间的中国经济,遭受了疫情带来的前所未有的影响,还经历了地产行业收缩和平台经济整改等一连串收缩性事件,但随着政策调整的不断完善,如果能成功逆转这些因素带来的影响,则经济将会在未来疫情修复过程中迎来多重利好的共振。

需要重视的是,今年是二十大会议后的首年,二十大历史性地将实施扩大内需战略视作应对外部冲击、稳定经济运行的有效途径。这使得我们可以对支持经济增长的政策抱有更高的预期,使经济增速向上的弹性也更值得期待。——易方达岁丰添利债券型证券投资基金 2022 年年度报告

中国经济自2010年跨越刘易斯拐点之后,劳动力报酬占比上升伴随着经济总量的增长推动了消费的持续增长,带来了2010年到2020年经济增长的黄金时期。很多知名投资者一直在说要相信国运,要相信未来,但也就这两三年,从双减政策公布开始,到经历了互联网平台企业的持续性裁员、及各行各业艰难生存不敢扩张之后,我们或许都对未来有了不少担忧。可能这时候有些投资者会告诉我们要更加乐观一些,要逆向投资,但事实上我们可能确实需要持续性保持谨慎:

产业转移带来的海外竞争使得中国劳动力报酬很可能在未来一段时间处于停滞甚至下降,经济增速下降,很多行业的需求增长将大幅放缓,行业的周期属性将超过成长属性。而过去很多年的行业整合,龙头公司的市场份额已经较高,虽然企业护城河仍然宽广,但如果缺乏第二成长曲线,龙头企业的收入和利润也会呈现增速下行、周期波动加大。 ——睿远均衡价值三年持有期混合型证券投资基金 2022 年年度报告

中概人中概魂,我们单独再将中概股的发展趋势拉出来说说:

展望 2023 年,中国经济增速有望领跑全球主要经济体,财政和货币政策工具相对充足,稳增长措施也将逐步发力。短期来看,需要关注全球金融条件和海外中概股公司的业绩披露。中长期来看,价格的中枢由行业未来发展前景和上市公司业绩基本面决定。中证海外中国互联网 50 指数的成份股是境外上市的中国互联网企业中总市值及流动性综合排名最好的头部公司,是中国数字经济和平台经济领域的代表性企业。伴随未来中国经济的企稳和消费的复苏,中国互联网公司也有望迎来持续、良性健康的发展局面。——易方达中证海外中国互联网 50 交易型开放式指数证券投资基金 2022 年年度报告

当然,看完了国内,我们可能也可以扩大到国外看看,毕竟国外的经济衰退如果板上钉钉,势必会影响我们的外需:

美国经济回落的幅度,取决于美联储愿意为控制通胀而牺牲经济的程度,而这也对应着美联储后续加息的高点以及高利率持续的时间。根据美联储主席鲍威尔介绍,美国目前所面临的通胀压力,主要来自于三点,一是核心商品通胀率;二是住房服务通胀率;三是住房以外的核心服务通胀率。首先,核心商品通胀率,随着美国巨额财政补贴的消耗以及供应链问题缓解,核心商品通胀率已经从非常高的水平下降且未来将延续下降趋势;其次,住房服务通胀率,由于租约重置滞后于房价涨幅半年时间,所以过去一年时间房租均呈现上升趋势,随着美联储加息美国房价已然下跌,这会反映到2023年通胀中,所以住房服务通胀率在2023年也是趋于下降;最后,住房以外的核心服务,主要涵盖了从医疗保健和教育到理发和招待等广泛的服务,劳动力市场是理解这一类别通胀的关键。目前来看,疫情期间致使美国劳动力缺口大约为350万人次,其中200万人是由于超额退休所致,而150万则是由净移民人数骤减和疫情期间死亡人数激增所致。所以综合来看,2023年美国通胀趋势向下只是还高于2%长期中枢目标。通胀的压力主要体现在劳动力市场端,要不然增加劳动供给,要不然美联储加息抑制劳动需求。

找到与自己风格匹配的产品

你适合什么样的基金产品?与其抓着基金名称或者抓阄乱选,不如看看你的投资理念、趋势把握与基金经理是否相似,只有合适自己的才是最好的,我在这摘录几位经理的观点,其中不乏”捡石头”者:

朱少醒

我们并不具备精确预测市场短期走势的可靠能力,理性的长期投资者应该做的是以合理的价格耐心收集前景远大的优秀公司的股票,等待公司自身创造价值的实现和市场情绪在未来某个时点的回归。个股选择层面,本基金偏好投资于具有良好“企业基因”,公司治理结构完善、管理层优秀的企业。——富国天惠精选成长混合型证券投资基金(LOF) 二 0 二二年年度报告

林虎、李中阳

组合将保持中性偏短久期,维持偏高杠杆水平,以中短期限高等级信用债为底仓品种,获取票息收益和骑乘收益。同时,组合将根据对基本面和货币政策的判断,结合对机构行为的分析,适当逆势操作利率债和中长期限信用债,灵活调节组合久期,增厚收益。——易方达安心回馈混合型证券投资基金 2022 年年度报告

姚志鹏

当下,电动车、计算机、军工和医药等行业在市场悲观预期下大部分行业都跌到了十年估值最低的区间,同时符合中国经济未来新时代下安全和发展的需求,当下市场更多在贪婪的追逐稳增长的老经济,对于新经济的偏见则导致了这些资产再度出现了较好的估值水平,我们将继续在这些资产中寻找中期能够推动中国经济复苏的那些优秀企业,在当下市场的低潮中积极配置。

凡事有利有弊,我们一直以来是坚持寻找战略方向的大空间行业、寻找趋势上行和头部企业的思路在进行投资。这样的方法在市场恐慌的 2022 年遇到了较大的波动和挫折,投资者对于经济前景呈现出比较负面的情绪,估值收缩幅度非常大。而我们的方法更多是通过产业和企业的盈利增长来获取价值增长。这种方法比较依赖于产业机会的挖掘和获取以及投资者信心的维持。——嘉实新能源新材料股票 2022 年年度报告

葛兰

伴随我国居民人均收入及认知水平快速提升,医疗服务以及消费性医疗的需求仍在快速增长且未得到充分满足,未来空间依然巨大,这些公司的价值终将有公允的市值体现。

整体而言,短期市场波动难以避免,但中长期而言,我们继续看好医药生物板块的配置价值,我们也将继续努力为持有人创造长期投资回报。——中欧医疗健康混合型证券投资基金 2022 年年度报告

刘涛

2023 年一季度,国内经历首轮感染高峰,春节后生产和出行逐步恢复,货币政策呵护资金面,两会前后财政和宽信用政策继续落地,债市震荡偏熊。二季度至三季度,经济从衰退转为复苏,地产基本面或初现修复迹象,货币政策或由松转平,利率调整压力或加大。四季度,海外衰退形成,国内财政和宽信用政策力度或减弱,可以等待复苏至顶带来的超跌机会。——鹏华丰禄债券 2022 年年度报告

秦毅

今年引发市场巨幅调整的原因,多为俄乌冲突、奥密克戎疫情等突发性事件,难以事先做出准确判断,情绪的冲击更多于基本面的影响。因此,本组合在仓位方面并未做出过多调整,基本保持了原先的仓位水平。

……个股配置方面,本产品始终坚持深度研究、精选个股的原则,尽管市场波动较大,我们仍然坚持这一理念,选择投资未来最有投资价值的标的。——泓德泓华灵活配置混合型证券投资基金2022 年年度报告

谢治宇

未来我们一方面在周期逻辑向上时寻找好的投资机会;另一方面在电子、半导体、消费等行业中寻找风险收益比长周期合理的品种进行组合配置,以为投资者创造合理的中长期价值为首要宗旨。——兴全合宜灵活配置混合型证券投资基金(LOF)2022 年年度报告

石雨欣

报告期内,本基金继续按照“固收+”策略布局投资,仓位维持中性水平,风格均衡偏成长,稳健参与市场结构性机会。债券部分以高等级信用债配置为主,阶段性参与利率债的波段交易投资机会,择机配置商业银行金融债,灵活调整组合久期,积极防范信用风险。——华安安康灵活配置混合型证券投资基金 2022 年年度报告

林英睿

事实上,由于股价改变的基本动力是投资者的决策和行为认知发生改变。因此市场的独立思考者越少,市场就越容易累积风险而被群体的反身性定价。对于投资人而言,能够有多种底层思路不一样的投资策略供选择是真正能系统性提高夏普的路径。分散化的核心在于低相关而不是数量多,而能从低相关获益的核心在于时间价值。这是市场上一种最普遍但又最昂贵的价值。——广发多策略灵活配置混合型证券投资基金 2022 年年度报告

丘栋荣

从股息率与10年国债到期收益率比值看,息债比基本处于2009年以来的最高区域。估值水平至极低位置,往往是价格压至极限的表现,再结合风险溢价水平、个股组合可得性等维度的比较,股票性价比最为突出之时,代表着系统性机会,需要坚定和果敢,燃起希望去把握投资最好的时候。——中庚价值领航混合型证券投资基金 2022 年年度报告

☑️ ☆

北漂青年的租房维权日记

这么些年,租过二房东、小中介的房子,也租过大平台的房子,但第一次遇到需要扯皮才能退租的”黑中介”,可能是第一次住”郊区”没有经验,也可能是正好遇上了地头蛇,在各种折腾下好歹是完成了第一次系统性维权,于是将所有尝试和行动记录于此,希望帮到有缘人。

黑心二房东、黑中介虽然身份各异,但在上演赖皮故事时,情节都很类似,要么是弄脏了墙体、搞坏了家具,但可能这些问题在起租时就有,只是当时对方承诺没啥问题,此外还有一些比如说家里卫生没搞干净而因此扣钱,最差的还有压根就不理你,就是赖着不给退房租,这也是我这次遇到的情况。租客在这种情形下通常作为弱势群体,需要耗费不少时间和精力长期和黑中介周旋,才能要回属于自己的权益。而这也是一部分黑中介看中的,等着你最后放弃繁琐的维权过程,那么他就可以白赚一笔押金,长此以往,从租客身上额外赚取一笔不义之财。

本文根据个人经历,言简意赅罗列一下关于一个普通北漂青年的租房维权经历,主要的注意事项分为三部分,分别是签署合同的注意事项、可尝试的几类维权方案以及其他提示。

合同签署注意事项

租房与房东/中介签合同时,需要注意一些事项,比如合法出租人身份证明、合同条款、房屋交付状态记录以及资金转账等细节,如下一一罗列:

1 / 合法出租人与房屋信息确认

确认房屋具体位置,以及对方为合法出租人,可以采取的行动比如让对方出示房产证、房东的身份证(身份证地址和房屋地址须一致)、业主证明(通常由居委会或物业出具)、回迁证、安置协议、购房合同或者建设规划许可证等等,这些信息有助于帮你规避假房源,同时也能一定程度上帮你在维权时确定诉讼主体。

2 / 合同内出租人、承租人信息与责任条款确认

签署合同时,需确认出租人(对方)与你的信息准确,比如需要对方出示个人身份证,或者公司营业执照等,租房合同上须确认双方的姓名(法定负责人)、证件号码、通讯地址、联系电话等有效信息,这些信息在你需要维权时,也方便警察联系或者司法机关发送传票。

合同签署中很多条款要看仔细,比如提前退租等双方的责任等、比如房东是否允许房屋内养宠物、比如房东临时要求租客搬离的赔偿等等。关于这方面,建议采用北京住建委、市监督管理局制定的《北京市住房租赁合同示范文本》来签署,如果有合同模版中的未尽事宜,可以另写条款签署进行补充。

3 / 房屋交付状态记录留存

关于房屋交付时的状态,比如水电燃气的读数、墙面家具的使用状态等,建议在租住前都留有视频或者照片进行记录,并在可能的情况下将对方已知晓的证明材料(比如对话等)记录,方便后期退租时起纠纷时用于佐证。

房屋本身在使用过程中就存在损耗,不可能越住越新,如果退租时这部分如果出现了扯皮,除了列举自己拍照的证据外,也可以依据《中华人民共和国合同法》、《家用电器安全使用年限细则》等法律进行举证,虽然一些细则没在我们签署的合同中列举详尽,但我们签订的合同的前提是必须符合国家的法律,所以请不用过多担心。

4 / 租金交付与押金监管

关于房租和押金的交付,在尽可能的情况下要求对方通过北京房地产中介行业协会建立的专用账户进行托管,但这一点对于大部分小中介来说,是比较难实现的,不做强求。但关于房租和押金的交付,仍有一些可以统一注意的事情,比如避免线下交易,尽量采用微信、支付宝或者银行卡转账,也记得备注一栏写明这笔汇款的用途和目的。这年头大部分平台都已经实名制了,后续如果遇到纠纷,在报警或者起诉时,即便对方隐藏自己身份,你也可以凭相关证明比如调用函,去要求对应支付平台或者银行出具对方的实际身份信息。

5 / 双方文字沟通证据留存

平时跟对方的沟通,比如微信聊天记录、电话录音、纸质合同、纸质收据、欠条等等,也都可以留存,这些也是证据。微信聊天记录也是被法律认可的证据材料之一,只要尽可能保证你所提供的证据能通过一致性核对即可。

租房维权渠道列表与检举方案

留下一些必要的证明材料是以防万一,但如果真走到需要维权的那一步,也不用太过担心,随着国家的日益发展与法律完善,很多维权方案都相比以前便捷了不少,比如你甚至可以通过人民法院线上小程序进行线上材料提交与起诉,接下来一一列举一些维权途径,从前往后排序既考虑了维权的难易程度,也兼顾了一些维权方案的有效性,但无具体效用排名:

1 / 纳税服务热线12366、发票开具与偷税纳税举报

在这一环节,你需要记住纳税服务热线12366以及北京市税务局官方网站 http://beijing.chinatax.gov.cn/

在涉税检举上,你有两个举报途径。个人只要产生经营行为都需要纳税,纳税是公民的义务。只是平时租房我们多数人不会向对方索取发票,但双方签订了合同并有转账付款记录,对方未开具发票,这本身就不合规,我们可以通过电话或者网上进行举报。

此外,这类黑中介只要一旦有问题,那么其背后的公司或者个人多数存在不止一例的偷税漏税行为。但需要注意的是,电话举报无法进行详细材料(比如转账记录、对方身份信息等)举证,所以关于偷税漏税的检举,需要访问税务局官方网站进行举证举报。

要记住,在这一环节,只要你有双方签署的合同、转账记录以及对方的姓名和身份证号,就可以进行举报,在完成举报后会有一个回执编号,在完成处理后你可以登录查询结果,同时也会收到电话回访。

2 / 市民热线12345黑中介举报专线

北京市住建委会同市公安局、市工商局、市非紧急救助服务中心等部门,早已依托北京市12345政府服务热线,开通打击“黑中介”投诉举报专线。

你可以自行判断你的出租房是否存在如下问题,比如:发现中介机构存在无照经营、未备案;打隔断出租;哄抬房租、恶意克扣租金、押金;发布虚假广告、虚假房源信息;采取威胁、恐吓等暴力手段或采取堵锁眼、断水断电、辱骂骚扰、言语恐吓等软暴力行为驱逐承租人、强行收取各类费用等侵害群众利益等行为。这些问题,都可以通过热线直接进行投诉举报。

12345热线全年无休,7✖️24小时在线,随时可以进线举报。12345的处理方案包含依法予以高限处罚、注销备案、停业整顿直至吊销营业执照等,对于涉及刑事犯罪的“黑中介”还可能移送公安部门。

但对于12345举报渠道来说,举报黑中介成功的前提是对方需要为”中介”身份,如果你们是个人之间签署的合同,那属于民事纠纷,12345不会受理。

3 / 消费者投诉平台12315与中介举报

作为消费者,如果你的合同通过中介平台签署,那么在平台不作为时,作为撮合中间人,你也可以举报对方收费未尽到服务责任,这可以在12315进行举报。登陆平台后,你可以通过搜索公司名称查询到对应企业的编号以及管辖单位,剩下的就是继续罗列你认为有用的证据,提交,然后等待调解。12315在核实情况后会通知相关企业进行处理。一般来说,一些企业提供绿色调解通道,选择此项可以允许企业直接和用户进行沟通,这样快速高效一些,但是否采用需要根据你自己的情况和偏好进行选择。

但这种渠道也只是进行调解,不具备强制执行的权力,所以如果没有效果,还是需要继续走法律途径进行维权。

4 / 违法房屋出租多渠道举报

群租房、违规打隔断、房屋消防不过关等现象,是很多违法房屋出租的特征,如果你租房的中介存在打隔断、在房屋内向过多人进行出租的行为,你可以对这类违法房屋出租行为进行举报。打隔断的举报一般会在三日内核实,如果确实存在问题,会限期要求房屋恢复原状,否则会进行罚款。

关于群租房,有的地方有专门的群租举报电话,在北京,你可以通过居委会、街道办事处、派出所以及12345进行检举揭发。检举渠道很多,而这一条也很好实施,也不需要对方电话、联系方式等,你需要记住的只是房屋的具体地址,提供给居委会、街道或者派出所。

5 / 派出所报案与纠纷调解

当你与中介/房东产生争执时,比如对方不退押金,可以报警对方侵占财产。一般联系了派出所之后,民警会接入协调,大部分小中介、黑中介到了这一步都不会继续折腾下去了,会退还押金。

但需要注意的是,因为民警只是调解而不会有更进一步的强力措施,所以一些老油条黑中介也不会理睬,也可能难以通过派出所渠道达成调解一致。所以,此后,可能还需要继续走法律渠道。

6 / 人民法院服务热线12368与法院起诉

走到法院这条路,你需要准备的是对方的身份证号、姓名、电话和通讯地址信息。如前文所述,如果没有身份证号可以让法院出个调用函申请,然后通过你的转账记录平台(比如支付宝、微信等)调出对方身份进行起诉。同时,也再次强调,租房签署合同时一定要留意对方的身份证号和姓名,以免扯皮时不知道对方实际身份,难以维权。

在这一环节,记住两个热线,一个是12368法律诉讼服务热线,一个是12348法律援助热线。前者可以咨询法院信息、个人起诉流程等内容,后者可以针对起诉环节、起诉状材料准备等信息进行详尽的咨询。

一旦在法院打官司,对应房屋便不能再出租。起诉流程也不用去法院这么麻烦,人民法院有对应的小程序,你在注册后实名认证一下,然后上传起诉状、提交材料、费用等,便可以完成线上起诉。大部分租房涉及的资金纠纷都属于民事纠纷,起诉费用不高,几十块钱,你可以在起诉状中要求被告支付对应费用。

如果打官司第一次可能人家不服,还要上诉,但你手上有合同、转账记录以及自己留存的证据,对方要真这么做也只是拖延时间。执行的时候对方如果拖着不给的话,可以申请强制执行,如果对方仍未归还相应金额,会被列入失信名单,这会影响到他的部分消费以及子女。

关于租房的一些其他事宜

文中列举了部分维权渠道,但相关证据列举未面面俱到,关于未尽事宜读者如果存疑可以多多研究《北京市住房租赁条例》,并在区分个人与中介问题基础上,找对应单位进行举报和维权,条例并没有指定唯一的受理单位,但条例中仍存在不少有待发现的举报细则,比如二房东转租房屋数不能超过规定等。

不论维权成本高低,但碰到此事,至少还是需要耗费我们一些精力和时间去处理的,此外还会影响到你至少一段时间内的心情,这种潜在损失是不可估量的。

不少朋友可能会认为此类维权经历不值得,而希望在租房的源头给出建议,大致分为几类:

  1. 租房时尽量选择贝壳、链家等大平台进行咨询和签约,大平台虽然价格贵一些,但在规范性上一般都有保证,且小中介明面上便宜些,但隐藏杂费可能更多;
  2. 如果有能力的范围内,可以考虑买房,以代替租房,提升生活品质,减少不必要的扯皮,为快乐生活留存更多精力;
  3. 租房尽量离上班地近一些,省下的时间可以做很多有意义的事情,比如健身、阅读与休息。

但非常现实的一点,如果你完全富有余力可以在市中心租一套大平台自营的两居室,确实麻烦会大大减少,但对于大多数北漂来说,还是普通打工人居多,仍需要在租房时稍作考虑,平衡一下性价比。”年轻人的时间很宝贵,不要太看重钱,多花些钱节省些通勤,去做些更有意义的事情”的建议虽好,但并非所有人都适用。大家还是应该根据自身现状进行调整。

写在最后

起初租到回龙观是因为公司有班车,从出门到公司,自己走路时间一共不超过5分钟,再加上从未来过这片地区,在充满好奇的情况下便有了第一次尝试。而这次经历,也驱使我再次回到公司附近租房,选择头部平台、签署标准合同,用适当的金钱换取省心的服务。

最后附上各类维权渠道的联系方式与信息,当然还是希望大家永远用不到,祝好。

  1. 市民服务热线 / 黑中介举报专线 - 12345
  2. 法律诉讼服务热线 - 12368
  3. 法律援助热线 - 12348
  4. 纳税服务热线 - 12366
  5. 国家税务总局北京市税务局 - http://beijing.chinatax.gov.cn/
  6. 消费者投诉热线 - 12315
  7. 全国12315互联网平台 - https://www.12315.cn/
  8. 微信小程序 - 人民法院在线服务北京
  9. 北京法院电子诉讼平台 - http://sspt.bjcourt.gov.cn/bcourt
  10. 北京市住房租赁条例 - http://www.beijing.gov.cn/zhengce/zhengcefagui/202208/t20220823_2797935.html
  11. 北京市住房租赁合同示范文本等材料下载地址 - http://zjw.beijing.gov.cn/bjjs/zwfw/xzzx/index.shtml
☑️ ⭐

隧道尽头是光亮:基金经理如何看待2023

(〇)

根据《公开募集证券投资基金信息披露管理办法》规定,公募基金需要定期披露季报、半年报、年报等信息,其中与该披露规定相关的几条规定摘录如下:

第十六条 基金管理人应当在每年结束之日起三个月内,编制完成基金年度报告,将年度报告登载在规定网站上,并将年度报告提示性公告登载在规定报刊上。基金年度报告中的财务会计报告应当经过符合《证券法》规定的会计师事务所审计。

第十七条 基金管理人应当在上半年结束之日起两个月内,编制完成基金中期报告,将中期报告登载在规定网站上,并将中期报告提示性公告登载在规定报刊上。

第十八条 基金管理人应当在季度结束之日起十五个工作日内,编制完成基金季度报告,将季度报告登载在规定网站上,并将季度报告提示性公告登载在规定报刊上。

第十九条 基金合同生效不足两个月的,基金管理人可以不编制当期季度报告、中期报告或者年度报告。

截至今日,公募基金2022年Q4季报基本披露完毕,让我们摘录几篇具有特色的报告,从中一窥基金经理对2023行情的展望。

(一)

人工智 能的进步日新月异,自动驾驶、人型机器人、ChatGPT等等人工智能的应用已经为投资 者熟悉,人工智能的发展一定会对人类社会产生巨大影响,我们熟知的商业模式可能会 被颠覆。我们处在如此多变的年代,使得投资既充满挑战又充满学习的动力,如何在坚 持价值投资理念的同时拥抱不确定的未来,如何在宏大叙事中辨别风险和机会,我们需 要不断学习、思考并作出行动调整。

——睿远均衡价值三年持有期混合型证券投资基金 2022 年第 4 季度报告

(二)

经历了一年以上的股票市场下跌后,我们能够看到各种主要指数的估值水平, 股债收益率差等宏观指标,比 4 月底的状态更接近熊市底部,历史上只有 08 年,12 年底和 18 年 底与之接近。这样的估值水平已经反映了市场投资者相当程度的悲观预期,短期由于疫情对于生 活和生产的冲击,市场仍然没有选择出清晰的方向来聚焦,但是恰恰是这种市场的迷茫才造就了 目前成长类资产为代表的优秀资产处于历史上比较极端的低估状态

……

23 年就像穿越了隧道尽头的微光,经历了经济走弱和市场的下跌,市场有望逐步休养生息,迎来新的 希望。

2022 年是全球资本市场遇到剧烈波动的一年,市场的大幅波动打击了投资者的信心,黑暗的隧道终有 尽头,资本市场穿越 2022 年的波动,我们相信隧道尽头是光亮。

——嘉实新能源新材料股票 2022 年第 4 季度报告

(三)

当下我们正处于后疫情时代的起点,且是二十大会议后的首年,我们认为未来几 个重要的方向是相对确定的。首先,疫情管控政策放开的大趋势不会发生变化,而由此带来的消费端恢复是大概率事件。这使得未来一段时间经济基本面的变化方向不利 于债券市场,而有利于股票市场。

——易方达岁丰添利债券型证券投资基金 2022 年第 4 季度报告

(四)

短期来看,全球金融条件和境内外产业发展及监管政策等因素仍有可能对海 外中概股价格和估值水平造成扰动。中长期来看,价格的中枢由行业未来发展前 景和上市公司业绩基本面决定。中证海外中国互联网 50 指数的成份股是境外上 市的中国互联网企业中总市值及流动性综合排名最好的头部公司,是中国数字经 济和平台经济领域的代表性企业。伴随未来中国经济的企稳和消费的复苏,中国 互联网公司也有望迎来持续、良性健康的发展局面。

——易方达中证海外中国互联网 50 交易型开放式指数证券投资基金 2022 年第 4 季度报告

(五)

面对充满不确定性的未来, 估值是最好的保护,当前传统行业估值水平大多处于历史最低点附近,后续经济回暖有 望推动估值和业绩修复,而高成长行业在2022年普遍经历了业绩消化估值的过程后,当 下估值性价比也处于近年来的较高水平,在高质量发展的大背景下,未来业绩的持续释 放依然值得期待。

——睿远稳进配置两年持有期混合型证券投资基金 2022 年第 4 季度报告

(六)

投资者在市场中注定是孤独的,需要时刻保持一种克制而理性的心理状态, 不需要大量的行动,而是极大的耐心,坚持投资原则,等到机会时全力出击,然 后就是耐心的等待。我们内心真正相信的投资体系有助于我们平静的度过市场的 动荡期,从而不至于被情绪接管投资操作。

……

相比 2022 年,这三个方面的宏观风险因素在 2023 年都得到了相当的改观,这也 为我们自下而上选择优质公司提供了更加平稳的环境。此外,我们认为不少优质 企业的内在价值在 2022 年有了一定幅度的提升,但股票价格却有所下跌,这种 价值和价格的反向运动为长期投资者提供了更好的赔率。

——易方达优质精选混合型证券投资基金 2022 年第 4 季度报告

(七)

2022 年四季度,市场整体处于震荡状态,各类指数窄幅波动。市场参与者 的预期逐渐从极不确定恢复正常,也从极度悲观的泥沼中脱身。

回望 2022 年,组合获得超额收益的本质是主要矛盾方向上的判断正确:市 场更习惯于线性递推,我们倾向于去思考硬约束条件的边界。虽说“应然不来自 于实然”,但在 2022 年产生超额收益还是有运气成分。

……

展望 2023 年,组合很难再度获得类似方向判断上的超额收益,大家观点的不同可能主要体现在节奏和力度上。因此我们提醒持有人在未来要降低对超额收 益的期待。

——广发多策略灵活配置混合型证券投资基金 2022 年第 4 季度报告

(八)

海外经济逐渐步入衰退,通胀则取决于利率高位的 时间和失业率的抬升。内外的经济、政策、节奏的错位,将使得投资目光更多的聚焦于 国内,政策重心回到经济,由中长期供给侧转向扩内需,短期核心在于激发市场信心, 让经济重启进入良性循环。不拘于目前偏弱的经济现实,不妨对经济前景展开一定程度 的想象,低基数下的努力容易超预期,消费地产也有足够必要条件去实现一定的弹性幅 度。相应的在股票投资中,当疫情影响未来减弱,而基本面容易超预期,应从低风险偏 好转向积极预期经济弹性。基本面与股票定价的错位,对应了时间和空间上的机会。

——中庚价值领航混合型证券投资基金 2022 年第 4 季度报告

(完)

隧道尽头是光亮,让我们期待2023权益市场的表现,新春快乐。

☑️ ☆

2022年终总结

想了许久,竟有些迷茫,不知今年的故事该从何提起。这一年光阴,仿佛由各类不同的故事拼凑而成,有欢笑、快乐,也有痛苦、沉思,但最终似乎都化成一条线,藏匿于时光里,平复于内心深处,再也无法泛起波澜。

这一年里,无数人的生活变得困难,不少面孔也永远停在了2022,我们似乎不再会像去年那样,虽身处困境,但仍对未来怀有憧憬、对明天抱有希望,暴躁、失望、迷茫充斥我们眼眸。但最戏剧化的也是生活本身,本以为身处绝境之际、再无反转可能,却被一记刺眼的阳光毫无征兆刺穿,那光亮甚至让人觉得不太真实。毕竟,谁能想到春节时大家为了回家还搞得跟偷渡一样,而到年底大家却因为自己还健康而郁闷焦虑。

但不管怎么说,挑挑拣拣,还是能拾的一些值得记录的片段。

人生的意义究竟是什么

三月是告别的日子,10年来第一次赶在春天回家,告别的那天,好大好大的雨,一直下个不停,我也分不清打湿衣服的究竟是雨水还是泪水。虽然是每个人都无法回避的话题,但不论做再多的准备工作,等生死离别那一刻真正到来,万千思绪涌上心间仍难以接受。小时候不懂事,可能哭一阵就能淡下去,但随着成长,如今再次经历,我只感到深深的无助与难受,“如果说终要离别,那为什么当初要想见?”

无论是年初排除艰难险阻也要回家的担忧,还是清明前慌张收拾行李飞奔回家,抑或是后来定期给奶奶打电话问候,一直伴随着自己的,经常是那不断回忆的各种片段与故事,沉重、无奈、时而崩溃。每当此时,我又寄希望自己是一个没有感情的机器,那该多好,这样就不会对告别这一残忍无比的仪式而有任何感受与负担。

也许是受到离别的影响,除了哀思,我也更多开始思考人生(生活)的意义究竟是什么。虽然仍没得出答案,但是保持健康的身心,肯定是目标之一。下半年,由于对跳槽的担心,加上前同事的鼓励,我迅速重启了高强度、重复性的健身计划,周末、节假日与周中,游泳、跑步来回交替。但运动在我这似乎不起作用,身体不但没有更加硬朗,反而导致往返医院的频次成倍增加,仅就发烧一项,便在短短不到半年里重复了四次,每次还都有不同的曲折故事。

就拿八月底那次急性炎症发作来说,我在硬撑了一天后去医院就诊,本来已经有所拖延,但到医院后不仅没得到及时治疗,反而因为体温发热而被关在发热门诊半天,而这只是为了确认我是否感染了新冠。

随后的几天,每天在急诊大楼内往返,固定的开药、拿药、抽血、输液流程,逐渐熟悉,直到心疼自己,“男子汉,再多艰难险阻都要自己扛下去”。由于打点滴时做不了太多事,无法处理工作,也无心玩手机或是与别人交谈,但却对吊瓶里的液体极其好奇,心里一直在测算和校准那瓶液体的结束时间。早出晚归的打点滴时光,是我这一年里最闲的时候,那几天的修养身息不仅让身体快速恢复,更使自己有精力好好观察“急诊室”这个曾经对我来说极其陌生的地方。

太多次穿梭于急诊通道两旁,看到一些病人在家人的陪伴下急促喘息着,而更多却是一个个插满各类监测针管躺在移动病床上的身影。无数个痛苦面孔持续性扑入眼帘,如此反复,实在让人看的实在揪心。这让我又联想到无数次从咨询中读到996的新闻,为什么我们中的大多数都知道健康重要,但却要等到失去健康,才开始懂得珍惜呢?

生活缝缝补补,股市挥金如土

今年比以往都更愿意观察世界,最直接的表现是我更加好学了。那不是在学校里为了应试而摸索做题的套路,而是对周遭生活、社会发展、世界运转的各类好奇。从不断变化的世界秩序到大类资产与宏观经济的分析,每当我刚弄懂一个概念,随之而来的是更多勾起我兴趣的名词和故事,时间仿佛格外不够用。

今年读了不少经济类书籍,从《置身事内》、《周期》、《原则:应对变化中的世界秩序》到《追寻价值之路》、《非理性繁荣》、《金融的本质》等等,相比前两年满头雾水、针对各类名词几乎都不明白的小白状态,如今我仿佛可以更加具有针对性的选择书籍,来填充壮大自己的知识框架了,这也帮助我可以不断从新闻、财报以及分析报告中汲取对自己有用的讯息。

光说不练假把式,投资当然需要投入真金白银去试试。而关于实际的投资收益,今年无疑是交学费的大年,按照大家的说法,就是近半年的工白打了。那句俗语怎么说来着?“生活缝缝补补,股市挥金如土”,虽然亏损较多,但好在心态相对平稳了许多,高情商说法是“面对市场上无处不在的风险与机会,我似乎能更好的平衡预期与行动了“,低情商说法是”躺平了“。

身边还是有不少朋友唯“梭哈“论,永远满仓、永远热泪盈眶,而经历了这两年的过山车式波动,风险控制越来越成为我主要关注的风险点。虽然过于关注风险无疑会丧失相遇爆发性成长机会的可能,但很多事情都没法两全其美,而我依旧认为,在这个市场里我们可以赚100倍、1000倍,但亏损只要一次,就可以归零。既然市场上从来不缺赚钱的机会,那也就不必过于着急,保持清醒,保持在场。

前些年,国产替代、核心资产、喝酒吃药、新能源革命等概念轮番上阵,“投资大神”不断涌现,而随着通胀抬头到失控、供应链紧张与全球流动性快速收紧,市场又变得异常清净。总的来说,投资还是一个逆人性的事情。大家蜂拥而至时从来不会是最好的布局时机,而当资本市场门庭冷落时却鲜有人冷静加仓布局,我认为此刻恰是供我们回顾自身投资目标与计划的绝佳时刻。

长期持续的接触投资,让我对理性和纪律有了更深的认识,我相信这些学识与见解,终有一日会在生活的某些不经意方面上得以变现。

又是开猿节流、降本增效的一年

往年可能花些篇幅谈及工作,有时说说工作上的收获,有时则是些对未来的憧憬,今年我却想正式聊聊“裁员与跳槽”,让我谈上几句。

随着疫情反复、针对资本无序扩张的强监管持续,各大互联网平台的发展开始显现颓势,降本增效成了各大公司的核心 OKR,裁员的“传闻”贯穿整个2022。从 BAT 到各大互联网小厂,无一幸免。即便当下民营经济与平台经济已被重新提起,但行业萧条的现状依旧没到达转机时刻。去年的我还因为没有裁到自己而“倍感悲伤”,今年终于圆梦。那句常在耳边响起的话怎么说来着,“我们都是时代里渺小的一粒尘埃”。

既有裁员,就会有跳槽。我实在反感充满不确定性却收益渺茫、那仍人宰割的等待,于是尽快扭转处境是唯一能做的事。从准备简历、刷题、投递机会、面试到入职,我执行了一次相比过去几年都更加高效的计划与决定。

经历过几次跳槽后,我更加明白一个合适与紧凑的 landing 过程对于新员工站稳脚跟与后续发展有多重要,趁着自己还没成为老油条,还留存些干劲,从入职开始我就主动找管理者沟通、了解需求、熟悉团队习惯与氛围、以及寻找适合自己发挥的地方。也不知从何时养成的习惯,虽然职位序列是技术岗,但最近几次工作刚入职做的第一件事都是一边开发需求一边撰写专利,自己仿佛变成半个文书工作者。当然,我还也是写了很多代码的。

团队里有不少自己从未接触过的方向,有趣的事情很多,同事们也都各自身怀绝技。本想着一手需求,另外留一手与大家打成一片,无奈需求激增,还没有时间继续深入了解大家正在做的事情,便湮没于写不完的业务中。关于这些,待我日后熟悉后,继续写成博客给大家介绍。

健健康康、快乐奔三

还记得小时候给同学们写纪念册,或者在一些申请表上填写个人信息时,都有一项是「个人兴趣」,说实话,长期以来我都没有什么兴趣,以致很长一段时间里我都只是单纯的挑一些相对熟悉的名词填上,比如唱歌、书法、画画,但每次遇到这种场景都让我觉得些许生硬。

说来也巧,经过这几年不自觉的坚持与尝试,阅读这个习惯算是彻底融入了我的日常,而逛书店也成为了我周末的经常性项目,时不时从书架上淘到几本感兴趣的新书,在豆瓣将其标记一下,便会让我开心好几天。

另一个养成的兴趣是游泳,从2020年至今,虽然疫情反复,健身房时常关门,但我终于还是在今年完成了第一百次打卡,游泳似乎也成为了我生活不可或缺的一部分。这项运动既能令人放松、锻炼身体,同时还能允许我短暂放空自己、做些纯粹的思考,要知道,这些年来一些工作上的亮点思路都是我在泳池里想到的。要说周末睁眼后最期待的事情,便是收拾装备出门去健身房了。

还有不到两年就要迈向下一个十年,给自己立了个口号:健健康康、快乐奔三。

未来还会变好吗

这几年世界幻化万千,我时常疑惑究竟是我更加努力的观测周遭还是世界正在以急剧熵增的速度走向失控,导致我对于很多“不可思议”的发生而不可思议。

政治、经济、文化、公共卫生等各领域的巨变,每天都刷新一个新模样,我们在参与书写历史的同时,也在一遍遍见证新历史的诞生。

你说未来会变好吗,借着俗语“悲观者往往正确,乐观者往往成功”的提醒,我时常告诫自己,万物皆有周期,在时间的长河里耐心等待未来的剧本轮番上演,但我对这个问题的深层是没有答案的。再长的历史也没法简单推演到未来,哪怕只是肉眼可见的明天。

二战结束才多久人们早已忘了战争的残酷,民主与开放才起步多少年,极端主义又开始甚嚣尘上。

不说太宏观,即便就是身边琐事,也足够我们精疲力尽了。就在不久前,因为防控政策的调整,大家开始欢呼新冠三年终将成为过去式,但随之而来的大面积感染、医疗等资源供应紧张,加上新毒株的持续检出,仿佛都在告诉我们,三年前那个时代,我们再也回不去了。

回不去了,但我们仍然要向前看。前阵子看到一位博主的签名,有点感触,于是,我也粗浅来组合:

  1. 认知杠杆:通过不断的学习、观察、交流以塑造自己立体的世界观,完善自我认知水平;
  2. 时间杠杆:认真安排、规划时间,用各类促进自我提升的方法以及充实的生活将其填充;
  3. 财务杠杆:通过工作、规划和投资,克服人性弱点,培养长期复利投资能力,以扩充自己的财务实力,满足个人、家庭经济所需与投资目标;

三者相乘,为最终的人生杠杆。希望自己可以更好的控制生活、工作与家庭,明年有更多具体的故事落笔于年终。

写在最后

2022是复杂、艰难、令人感慨的一年,为扛过这一切的你我喝彩。站在当下,虽无数身影早已疲于奔命、鲜有畅想未来,但我仍愿更加乐观一些去迎接未来。同样地,祝君好运。

☑️ ☆

新型冠状病毒感染日记暨读者朋友QA发布会

感染记录

因为看到游泳馆开门营业了,但是需要48小时核酸证明,于是上周四出门做了个核酸,就是这唯一一次不到10分钟的出门经历,让我🐑了。因为想游泳于是做核酸,然后做核酸阳了,不能游泳,我属于是那个纯纯的大怨种了。

七天里,体温监测如下,从开始发热到最后稳定退烧,还是花了3天多的时间,其中仍能观测到发热的最后一天出现了退烧与重新发热反复的现象;此外,直到今天,还是会有偶尔的体温达到37度以上的情况,有可能跟带病上班、没有得到充足休息有关,大家可以参考:

七天里,症状有三,发烧(发热)、感冒(鼻涕、鼻塞)、咳嗽(上呼吸道不舒适),再加上我自己臆测的整体不舒适感,这七天的症状大致可以量化如下,可以看到第四天至第五天真的是雪上加霜般的痛苦,但到今天仍然有咳嗽,这说明病情并没有完全消去,由于本人只服用了退烧类药物,所以其他症状都得靠免疫系统硬扛,直到康复:

药物治疗、饮食作息与建议

  1. 虽然高烧与咳嗽时没法安静休息,但还是要尽可能多抓住时机睡觉休息,让体能恢复,继续与病毒战斗。
  2. 多喝水,帮助代谢。建议温水,避免开水,如果问为什么避免开水,两个字——烫嘴。
  3. 多喝奶吃鸡蛋补充蛋白质,蛋白质在体内转为氨基酸,可以被转为抗体及能量,供机体继续工作。
  4. 退烧药可以考虑布洛芬或者泰诺,单一用药勿混用,查看药品说明书后严格按照剂量和方法服用;在服用了退烧药的基础上,还出现持续性高烧3天及以上时,请勿拖延、及时就医。
  5. 多吃瓜果蔬菜,可以考虑蜂蜜水或者电解质水,除了补充身体能量外,可能对缓解咳嗽以及恢复体力会有所帮助。
  6. 生病期间远离色情网站,众所周知有些运动会降低身体抵抗力。
  7. 别相信什么早得早好,毒株各种变异,根本不存在什么“得一次至少管半年”的现象,在这场漫长战役中,尽量做好个人防护,避免感染。
  8. 当下,物资储备计划依旧有效,我曾在食品储备计划中简单提及了关于医护和药品的储备清单,详见《食物储备清单》;另外,考虑到疫情对物流和供应链的冲击,日常食物等储备也是有必要的。
  9. 当下,在身体健康、没有症状的时候,可以适量根据家中人员数量按比例配比一些药品,以防持续的病情高峰对药品供给冲击,而导致家人所需药品无法及时得到满足的情况;我们知道,供需终会平衡,但高峰期的平稳度过还依赖有备无患的一些计划。
  10. 别想着休息的时候可以追剧、看书什么的,我的经历告诉我,那个时候虽然睡不踏实,但是确实连睁眼都累;多祈祷自己的免疫系统努力战斗吧。

Q&A

经过前期读者朋友们纷纷来信表述了自己内心对病毒的一些疑惑(其实没有人来信,都是我自己杜撰的),本人特此挑选了一些具有代表性的问题,在此一并解答,希望能帮助到大家。

问:我已经服用了布洛芬/泰诺,我可以拿感冒灵等冲剂辅助治疗吗?

答:能不能治好新冠不知道,但吃错了可以直接给你人送走。老老实实吃单一成分退烧药吧,别相信什么退烧/治病妙法,相信病理学,相信科学。

问:居家治疗期间不能锻炼了,身体抵抗力变差怎么办?

答:不会的,等到第4天左右你就会开始咳嗽,到时候能帮助你咳出腹肌。

问:兄弟姐妹们,有没有头一天烧到38度吃完布洛芬第二天退烧到35.5度的?

答:你的免疫系统很久没战斗了吧,这次战斗干上头了吧。

问:🐑了之后有什么忌口吗?

答:不能吃🐑肉。

问:我抗原也囤好了,药也买好了,家里也收拾干净了,就等病毒来访了,但就是还没阳怎么办?

答:别怕,虽然你没阳,但可以看看你的股票账户,说不定早就阴了。

问:🐑了之后你们嘴里会有苦的感觉吗?

答:一般来说,嘴里会苦是生病的正常症状,但也不排除有些人嘴里会变甜,喝水都觉得甜;如果不仅嘴里苦,干啥都苦,那可能不是生病带来的,而是生活带来的,摔!

人体体温调节机制与发热退烧原理概述

人体正常体温调节机制

人的体温调节中枢位于下丘脑,其特殊的神经组织可时刻检测人体的温度,并且带有已经设定好的“体温调定点”。简单来说,当体温高于体温调定点时,机体促进散热;相反,当体温较低时,机体会促进产热、减少散热。

当周围温度过高时,热感受器会被激活,进而将信息传递到大脑。当体温调节中枢的温度高于体温调定点时,其前半部分就会兴奋,通过神经系统引发人体血管扩张和排汗机能,以达到散热、降低体温的目的。这些机能主要包括增加血流量和增加排汗。增加血流量能够使血液的热量更多地通过皮肤与外界环境进行热量交换,从而将热量排出体外。如果还不足以降低温度,下丘脑则会通过多种机制调节,导致皮肤出汗,通过汗液的蒸发强行将热量带走。

当周围温度过低时,下丘脑的后半部分同样会从冷感受器接收信号,进而兴奋,并同样通过神经系统引起人体的多种机能运作,增加产热、减少热量损失,从而使体温升高。人体主要通过收缩毛细血管,减少血液与外界的热量交换,来减少热量散失。当这种方法不足以使体温升高时,人体就会通过冷颤等方式,提高细胞的代谢率,进而增加产热。

人体的体温就是通过以上两种方式的相互配合、相互作用,才能长久维持在一个稳定的水平。

炎症及发热原理

炎症反应,细胞膜磷脂在磷脂酶PLA2作用下释放花生四烯酸(AA),花生四烯酸经COX作用生成前列腺素(PG)和血栓素(TXA2),然后又有一系列酶的作用生成白三烯(LG)、脂氧素、羟基环氧素等炎症因子。前列腺素(PG)在炎症反应中活性很强,与白三烯一起诱导炎症细胞,趋化炎症介质,诱导免疫系统产生瀑布式连锁反应。

其中,前列腺素E2会让体温升高,另外前列腺素E2还会造成肌肉、骨骼、关节疼痛,也就是身体发热时经常会出现全身疼痛的缘故。

退烧药及其原理

退烧药是一种能降低体温、减缓发烧症状的药物。大多数退热药都有其他用途。例如美国最常见的退热药通常是布洛芬和阿司匹林,它们主要是当作镇痛药来使用的非甾体抗炎药,但也具有解热作用。

由于发烧是身体免疫反应的一部分,因此对此类药物的使用存在一些争论。

其中,以布洛芬举例,其退药原理与它的药物反应有关,人体体温调节受下丘脑控制,当布洛芬的药物反应作用于下丘脑时,下丘脑就会做出反应调低体温。

布洛芬属于非甾体类的抗炎镇痛药,是环氧化酶的抑制剂,服用后通过药物反应来抑制大脑中下丘脑花生四烯酸代谢成前列腺素E2的生成,同时还能一些抑制一些细胞因子的生成、释放,而这些细胞因子是机体致热原之一,如肿瘤坏死因子,从而发生退热效应。

简而言之,布洛芬能抑制前列腺素的合成,具有镇痛、解热和抗炎的作用。

其他参考

  1. 食物储备清单
  2. 防疫日记
  3. 国务院应对新型冠状病毒肺炎疫情联防联控机制综合组《新型冠状病毒肺炎防控方案(第九版)》
  4. 世界卫生组织的《康复指导手册:COVID-19相关疾病自我管理(第二版)》
☑️ ☆

食物储备清单

本计划因为个人常识所限,可能存在缺漏,如有偏差后续会纠偏补充,如有迭代会及时更新至 https://hijiangtao.github.io/

平衡膳食摄入量总览

整体可以参照《中国居民平衡膳食宝塔(2022)》进行全面的物资食品储备,方便计算每天各类营养摄入量。

各类食物储备清单

储备清单简介

本章节主要根据居家隔离生活状态,对各类食品储备的分类、详情、存储期以及分级别储备方案进行详细描述,推荐建议上受限于个人常识,可能存在局限。在实际储备量上可参考《中国居民平衡膳食宝塔》,再辅助以特定时间区间进行购买储备。

以成年人一日三餐为例,其中早餐以豆奶制品和面食为主,剩余两餐为正餐,建议分为三个阶段:

  1. 第一周,即2*7=14餐,尽量接近平时正常饮食,储备食品可不考虑较长保质期;
  2. 第二周至第三周,即2*7*2=28餐,需要考虑中长期可保存的食物,各类营养需维持均衡;
  3. 第四周,即2*7=14餐,以长期可保存的食物为主,重点关注维持基本营养摄入;

您可视当下环境变动而调整,储备42-56餐必须物品。以下,单独介绍各个大类物资的储备建议。

必需品大类清单

粮食类

有条件可考虑真空小包装类产品,保质期长

  1. 未加工品
    1. 大米、面粉、玉米(粒)
    2. 小米、各色糙米、燕麦、藜麦等全谷杂粮
  2. 加工品
    1. 燕麦片(即食、非即食都可)、五谷杂粮烘烤粉、挂面、河粉、意面等
  3. 其他低优先级类别,可考虑烘焙品
    1. 低筋面粉、高筋面粉、玉米淀粉、糯米粉、木薯粉等常用的一些材料,包括黄油、玉米油、绵白糖等

蛋、奶类与豆制品

  1. 新鲜鸡蛋,每人每天一个鸡蛋,可以常备2周的量(保存期是室温2周,冷藏6周,整蛋煮熟无裂纹,室温可存放3天,冰箱7天)
  2. 少量咸鸭蛋、皮蛋、罐头鹌鹑蛋(不如全蛋营养好,保质期长,可增加蛋白质供应)
  3. 奶类可以考虑每人每天摄入200-300克,以下组合使用
    1. 冷藏奶,巴氏奶和酸奶,存一周的量
    2. 常温奶,存半个月的量
    3. 奶粉,两罐
    4. 其他低优先级类别,可考虑酸奶机,买菌粉做酸奶。在全脂奶粉或全脂奶的基础上,加点脱脂奶粉来加强蛋白质,就能享受到浓稠高蛋白酸奶。
  4. 豆制品可以考虑每人每天摄入100克
    1. 水豆腐,存一周,如要多存,可做成冻豆腐
    2. 豆腐皮/豆腐丝/豆腐千张,素鸡/素肉,可冷冻存放三个月
    3. 干豆制品,随时水发:腐竹、千豆皮、素鸡翅等

肉类和鱼虾

  1. 每人每天50-100克,分装冷冻保存,每包量可正好够吃一至两次,不要反复化冻,每袋标注好名称和日期,方便搜索
  2. 瘦肉切成扁平块状,利于节约空间
  3. 整鸡整鸭形状不规则,可以切割后保存或者买分部位产品
  4. 鱼虾,可买整的,如要节约冷冻室空间,可买鱼成块和虾仁的产品
  5. 其他,可搭配购买常温存放的熟食,但营养价值低,少量买,偶尔换换口味即可:袋装酱牛肉、烧鸡、铁皮鱼肉罐头、午餐肉、火腿肠、香肠、腊肉等。

水果

  1. 每人每天200-400克
  2. 耐放的可考虑苹果、梨、橙子、柚子等,可以买2-4周的量
  3. 其他水果,如枣、香蕉,3天左右量
  4. 其他考虑项包含水果干,如葡萄干、枣、杏仁之类,易保存,小袋密封保存

蔬菜

  1. 每人每天300-500克
  2. 新鲜类
    1. 大白菜、包菜、紫甘蓝、洋葱、土豆等,存储时间长,可多备,用纸和塑料袋包好放阴凉处,不要见光即可
    2. 绿叶子菜,用吸水纸包好,再放保鲜袋中,放入冰箱,可保持至少3天有好的状态
    3. 茄子、胡萝卜、萝卜、藕等蔬菜,保鲜膜包起来可延长保存期
    4. 西兰花、菜花、莴笋、青椒等,消毒切口,再放袋子;如果用融化的蜡封住切口,保存期可延长
    5. 葱姜蒜用锡纸包起来,不见光,阴涼处存放
    6. 菌菇类,沸水烫一下,分装小袋,冷冻保存
  3. 常温存放类
    1. 干制蔬菜,梅菜干、萝卜干、豆角千、干海带、黄花菜等
    2. 罐头蔬菜,罐头蘑菇、罐头西红杮丁等
    3. 袋装蔬菜,袋装水煮笋等
    4. 干制菌类,干木耳、干银耳、干香菇等
  4. 冷冻类
    1. 速冻豌豆/蚕豆/胡萝卜丁/玉米粒等。可购买,可自制,洗净切好,沸水焯烫半分钟,捞出晾凉,分装冷冻

油脂和调味品

  1. 盐、醋、生抽、老抽、料酒、食用油是必备品;充足情况下,油可备两种,一种凉拌、一种炒菜
  2. 各种香辛料、葱油、花椒油、蒸鱼豉油、蚝油等,饭菜增香
  3. 各类非必需酱料,可考虑鸡精、浓汤宝、下饭酱、芝麻酱、烧烤酱、辣椒酱、沙拉酱、黑椒汁等复合调味品,丰富口感
  4. 其余参考,芡粉、酵母粉、泡打粉、小苏打,面食必备

增强与耐储存大类清单

速冻和速食食品

  1. 速冻饺子、包子、馒头、汤圆、粽子等,适当备一点,调剂口味
  2. 方便面、方便米粉,少备、调剂口味
  3. 罐头、八宝粥、即食米饭、压缩饼千,少存,应急用
  4. 零食,非必须品,少存,即使存,找一些健康的

坚果油籽

  1. 每人每天25克
  2. 油籽
    1. 花生、黄豆、黑豆、芝麻、葵花籽等
    2. 其他备选方案,可参考烤黄豆、烤花生、炒瓜子等,无需大量食用
  3. 坚果
    1. 核桃、榛子等;考虑带壳的末加工产品,比零食包装健康,且更耐储存

其他清单

营养增补剂

  1. 复合B族维生素小药片
  2. 维生素C小药片
  3. 维生素AD胶囊
  4. 复合维生素片

基本药品与防护消毒类

  1. 酒精、洗手液、医用外科口罩等
  2. 创可贴、感冒药、消炎药、拉肚子药

基本居住环境

  1. 水、电、煤气缴费
  2. 自住房屋房屋续租
  3. 空调、暖气等极端条件下保温降温设备

参考

  1. http://dg.cnsoc.org/
  2. https://www.mem.gov.cn/kp/shaq/202011/t20201129_372149.shtml
  3. https://www.metro.tokyo.lg.jp/chinese/guide/bosai/index.html
☑️ ☆

网络安全科普:奇妙的 SSL/TLS 证书(基础篇)

零、前言

如果某个网站受 SSL 证书保护,其相应的 URL 中会显示 HTTPS(超文本传输安全协议)。单击浏览器地址栏的小绿锁,即可查看证书中的详细信息。但你是否曾好奇过一本证书是如何诞生的,以及 HTTPS 背后的 SSL/TLS 是如何在工作过程中发挥功效以保证通信安全的,什么是 CA、PCA,什么又是证书链和 X.509……

在参与了一段时间的证书业务开发后,我将个人的一些理解和学习总结如下,希望这一篇文章,可以帮到正在或将要学习 SSL/TLS 证书的你。

该网络安全科普系列一共分为上下两篇文章,除去前言、参考外,第一篇章为基础篇(第一章至第五章),第二篇章为进阶篇(第六章至第八章),第三篇章即“总结”会对全文结构和书写内容进行总结与梳理。 此前未曾了解过 SSL/TLS 证书的同学可以从第一篇章开始看起,如果有一部分基础想深入的同学可以直接从第二篇章开始阅读。两篇文章均完成撰稿,地址如下:

  1. 网络安全科普:奇妙的 SSL/TLS 证书(基础篇)
  2. 网络安全科普:奇妙的 SSL/TLS 证书(进阶篇)

本文为奇妙的 SSL/TLS 证书第一篇章——基础篇,以下开始正文。

Untitled

一、术语表

为了方便大家阅读,特在此章将全文涉及到的一些网络安全与数字证书领域的专业术语进行整理,整理此术语表供大家查阅。

简称 英文全称 中文全称
CA Certificate Authority / Certification Authority 证书颁发机构
SSL Secure Sockets Layer 安全套接字层协议
TLS Transport Layer Security 传输层安全性协议
EV SSL Extended Validation SSL Certificates EV 证书,又名扩展验证证书
OV SSL Organization Validated SSL Certificates OV 证书,又名组织验证证书
DV SSL Domain Validated SSL Certificates DV 证书,又名域验证证书
Wildcard SSL Wildcard SSL Certificate 通配符证书
MDC Multi-Domain Certificates 多域 SSL 证书
UCC Unified Communications Certificate 统一通信证书
TLD Top-level domain 顶级域
PKI Public key infrastructure 公钥基础设施
PCA Private Certificate Authority 私有证书颁发机构,又名私有 CA
HTTP Hypertext Transfer Protocol 超文本传输协议
HTTPS Hypertext Transfer Protocol Secure 超文本传输安全协议
- Public key 公钥
- Private key 私钥
X.509 - 密码学里的公钥证书格式标准
CSR Certificate signing request 证书签名请求
OCSP Online Certificate Status Protocol 在线证书状态协议
CSP Cryptographic Service Provider 加密服务提供商

二、什么是 CA、证书及其分类

CA 证书、SSL 证书及其区别

CA 证书是由 CA 颁发的电子证书,又被称为数字证书,证书主要包含证书拥有者的身份信息,CA 机构的签名,公钥和私钥。 CA 证书是一串能够表明网络用户身份信息的数字,提供了一种在计算机网络上验证网络用户身份的方式,因此数字证书又称为数字标识。

SSL 证书是一个数字证书,用于认证网站的身份并启用加密连接。SSL 代表安全套接字层,这是一个安全协议,可在 Web 服务器和 Web 浏览器之间创建加密链接。

关于 CA 证书和 SSL 证书之间的关系,其实某种意义上,大家会将其认为等价,不过稍有不同:CA 是证书颁发机构,由 CA 机构颁发的证书都可以成为 CA 证书,SSL 证书只是 CA 机构颁发证书的其中一种。

SSL 证书类别

SSL 证书根据验证级别主要分为六种类型:

  1. 扩展验证证书 (EV SSL): 这是等级最高、最昂贵的 SSL 证书类型。它倾向于用于收集数据并涉及在线支付的高知名度网站。安装后,此 SSL 证书在浏览器地址栏上显示挂锁、HTTPS、企业名称和国家/地区。在地址栏中显示网站所有者的信息有助于将网站与恶意网站区分开。要设置 EV SSL 证书,网站所有者必须经历标准化的身份验证过程,以确认他们已获得该域的专有权利的合法授权。EV SSL证书遵循全球统一的严格身份验证标准,是目前业界安全级别最高的顶级(Class 4级)SSL证书。常见客户为金融、银行等。
  2. 组织验证证书 (OV SSL): 此 SSL 证书版本具有与 EV SSL 证书类似的保证级别,这是因为,要获得此证书,网站所有者需要完成实质性的验证过程。此类型的证书也会在地址栏中显示网站所有者的信息,以区别于恶意网站。OV SSL 证书往往是价格第二高的证书(仅次于 EV SSL),其主要目的是在交易期间对用户的敏感信息进行加密。商业或面向公众的网站必须安装 OV SSL 证书,以确保共享的任何客户信息都得到保密。对于政府、学术机构、无盈利组织或涉及信息交互的企业类网站来说使用DV证书。
  3. 域验证证书 (DV SSL): 获得此 SSL 证书类型的验证过程是最简单的,因此,域验证 SSL 证书提供了较低程度的保证和最低程度的加密。它们通常用于博客或信息类网站,即,不涉及数据收集或在线支付的网站。此 SSL 证书类型是成本最低、获取速度最快的证书之一。验证过程仅要求网站所有者通过答复电子邮件或电话来证明域所有权。浏览器地址栏仅显示 HTTPS 和一个挂锁,没有显示公司名称。
  4. 通配符 SSL 证书: 通配符 SSL 证书使您可以在单个证书上保护基本域和无限的子域。如果您有多个要保护的子域,那么,购买通配符 SSL 证书要比为每个子域购买单独的 SSL 证书便宜得多。通配符 SSL 证书的公用名中带有星号 *,其中,星号表示具有相同基本域的任何有效子域。常见客户为个人博客等。
  5. 多域 SSL 证书 (MDC): 多域证书可用于保护许多域和/或子域名。这包括完全唯一的域和具有不同 TLD(顶级域)的子域(本地/内部域除外)的组合。例如:example.com、a.org、this-domain.net;默认情况下,多域证书不支持子域。如果您需要使用一个多域证书来保护 www.example.com 和 example.com,那么,在获取证书时,应同时指定两个主机名。
  6. 统一通信证书 (UCC): 统一通信证书也被视为多域 SSL 证书。UCC 最初的设计意图是保护 Microsoft Exchange 和 Live Communications 服务器。如今,任何网站所有者都可以使用这些证书,以允许在一个证书上保护多个域名。UCC 证书经过组织验证,并在浏览器上显示挂锁。UCC 可以用作 EV SSL 证书,它会显示为绿色的地址栏,为网站访问者提供最高等级的保证。

注:EV/OV/DV 为根据不同验证强度而指定的不同证书类型;此外,DV/OV SSL 证书均有支持通配符(泛域名)的 SSL 证书,但是 EV 不支持,如果需要达到相似的目的,那么需要使用 MDC,即多域 SSL 证书,MDC 为 EV 类型;DV/OV/EV 三种等级的 SSL 证书均可支持签发 UCC SSL证书。

如何在日常浏览中区分 SSL 证书类别

根据证书类别的不同定义,我们可以通过证书字段比如组织(Organization)、公用名/域名(Common Name)等信息来对证书类别进行区分,但若我们只是普通用户,日常访问网站时能有什么办法对证书类别进行区分吗?这里介绍一些简单的方法。

在这里,我们以 DV、OV、EV 的区分举例。

首先,区分 DV 和 非 DV 证书比较简单,由于 OV 和 EV 证书均需要更高级别的验证,即验证组织信息,所以我们可以通过点击浏览器地址栏旁的小锁,并打开其中的证书信息来判断,若是颁发对象中“组织(O)”字段为空,则为 DV 证书,否则则不是。

Untitled

其次,对于 EV 和 OV 证书,我们在详细信息的主题背景一栏中,可以发现 EV 证书比 OV 证书多了很多其他信息,最明显的区别是显示了序列号等信息,这是EV证书特有的字段。这是区分 EV 和 OV 证书的第一个方法。

Untitled

此外,不同浏览器针对 EV 都有不同程度的提醒,以 chrome 为例,当你点击地址栏旁的小绿锁时,若数字证书为 EV 类型,证书状态下方会有一行小字显示其“颁发对象”具体信息。

Untitled

CA 分类与 PCA

按照颁发机构及受信状态不同,CA 可以分为两类:一类是受信任的 CA,也称商业 CA,是为申请证书的企业组织颁发数字证书的权威性第三方机构,并管理最终用户数据加密的公共密钥和证书;另一类为私有 CA,私有证书颁发机构(也称私有 PKI)是内部 CA,通常存在于大型企业中,企业自己创建、颁发数字证书,所以也称为自建 CA。

私有证书管理(Private Certificate Authority,PCA)是一个私有CA和私有证书管理平台。它允许用户建立自己完整的CA层次体系并使用它签发证书,实现了在组织内部签发和管理自签名私有证书。主要用于对组织内部的应用身份认证和数据加解密。

PCA 服务适用于企业对内使用和企业合规使用两种场景:

  • 企业对内使用:一般用于不涉及监管、行业规范等要求,仅涉及企业内部应用数据需要密码技术提供加密的场景。企业内部应用(例如,内部的OA、HR等系统)可以使用PCA服务的密码技术进行应用间数据安全传输、数据加解密和身份认证。
  • 企业合规使用:一般应用于密评或者要求满足电子认证服务相关要求的场景,例如,银企直连、电子签名等。

Untitled

三、证书内容、格式与证书链

证书内容

Untitled

我将证书信息主要分为三类,主要包含:

  1. 被颁发者信息:颁发的域名、关联子域以及所颁给的个人、企业、组织信息等等
  2. 证书机构信息:证书颁发机构名称、数字签名等等
  3. 证书信息:证书的版本号、序列号、签名算法、签发日期、到期日期、公钥等等

证书格式标准 X.509

X.509 是密码学里公钥证书的格式标准。X.509 证书已应用在包括 TLS/SSL 在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509 证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构 CA 的签名,也可以是自签名)。我们所说的 CA 颁发的证书或者 SSL/TLS 证书指的都是符合 X.509 格式的证书。

另外,X.509 有多种常用的扩展名,比如 .pem、.cer、.crt、.der 等等。其中一些格式只能保存证书,比如 .cer、.der 等,其他一些格式还可以用于其它用途,就是说具有这个扩展名的文件可能并不是证书,比如说可能只是保存了私钥。

Untitled

SSL 证书链

证书包含的内容可以概述为三部分,用户的信息、用户的公钥、还有CA中心对该证书里面的信息的签名。我们在验证证书的有效性的时候,会逐级去寻找签发者的证书,直至根证书为结束,然后通过公钥一级一级验证数字签名的正确性。这里一系列的证书,便是证书链。

从组织结构来看,证书链是从终端用户证书到其后跟着的一系列 CA 证书,而通常最后一个(即根证书)是自签名证书,并且有如下关系:

  1. 在证书链上除最后一个证书外,证书颁发者等于其后一个证书的主题。
  2. 除了最后一个证书,每个证书都是由其后的一个证书签名的。
  3. 最后的证书一般由操作系统直接内置,可以直接信任。

证书链可以用于检查目标证书(证书链里的第一个证书)里的公钥及其它数据是否属于其主题。检查是这么做的:用证书链中的后一个证书的公钥来验证它的签名,一直检查到证书链的尾端,如果所有验证都成功通过,那个这个证书就是可信的。

在此过程中,涉及到的证书包含如下几类:

  1. 叶子证书,即最终的实体证书。
  2. 中间证书,全称为中间证书颁发机构,是证书颁发机构(CA)为了自我隔离而颁发的证书。 其作用是通过中间证书的私钥来签署最终用户 SSL 证书,通过中间根对另一个中间根进行签名,然后 CA 使用它来对证书进行签名。
  3. 根证书,证书颁发机构的自签名根证书。它的颁发者和主题是相同的,可以用自身的公钥进行合法认证。证书认证过程也将在此终止。

交叉证书

交叉证书的应用场景是这样的:假如现在小白成为一个新的根CA机构,那小白签发的证书想要浏览器信任的话,小白的根证书就需要内置在各大操作系统和浏览器中,这需要较长时间的部署,那在没有完全部署完成之前,小白签发的证书怎么才能让浏览器信任呢,这就需要用到交叉证书了。

简单来说,交叉证书会利用已有根 CA 的来为新 CA 签发一个交叉证书,在这个交叉证书里主题是新 CA 根证书信息,但是签发者是已有的根 CA。由于篇幅所限,本文不再针对交叉证书的具体工作原理进一步探究。

关于这部分的描述可以参照 Let’s Encrypt 的证书链示意图,或者参考文章 https://scotthelme.co.uk/cross-signing-alternate-trust-paths-how-they-work/

Untitled

四、证书工具与其他概念

CSR 生成与解析

证书签名请求,全称 Certificate signing request,在公钥基础设施(PKI)系统中,证书签名请求(也称为 CSR 或证书请求)是从申请人发送到公钥基础设施的证书颁发机构以申请数字身份证书的消息。它通常包含应为其颁发证书的公钥、识别信息(例如域名)和完整性保护(例如数字签名)。

通常情况下,在申请一本证书时,证书申请者在申请数字证书时由 CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把 CSR 文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

通过我们的证书工具,你可以填入必要的信息以生成一个符合规格的 CSR 信息及对应密钥;当然,当你拿到一串 CSR 明文后,你也可以逆向将其解析,以得到其中的域名、企业、部门等信息。

Untitled

PKI

公钥基础设施(PKI)是创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的一组角色、策略、硬件、软件和程序。在密码学中,PKI 是一种将公钥与实体(如人和组织)的相应身份绑定的安排。

OCSP、OCSP Stapling 与证书吊销

在线证书状态协议(英语:Online Certificate Status Protocol,缩写:OCSP)是一个用于获取 X.509 数字证书撤销状态的网际协议。

由数字证书认证机构运行的 OCSP 服务器会对请求返回经过其签名的证书状态信息,分别为:正常(Good)、已废除(Revoked)、未知(Unknown)。如果有无法处理的请求,则会返回一个错误码。OCSP 在极端情况下可能遭受来自中间人的重放攻击。

当我们一直在讨论从 HTTP 切换到 HTTPS 之后的安全性保证,但是切换之后连接变慢也是真实存在的一个问题,影响其中速度之一的因素便是 OCSP 状态查询。由于 OCSP 要求浏览器直接请求第三方 CA 以确认证书的有效性,当客户端访问 OCSP 服务器延时较高时,打开链接的速度就会相对变慢,从而影响访问体验。而对于 CA 来说,它也因为客户端的查询而知道哪些用户访问了哪些网站,这在隐私性上也存在问题。

为了解决访问速度以及保护隐私,OCSP Stapling 应运而生。OCSP Stapling,又名 TLS 证书状态查询扩展,其原理是:网站服务器将自行查询 OCSP 服务器并缓存响应结果,然后在与浏览器进行 TLS 连接时返回给浏览器,这样浏览器就不需要再去查询了。

证书吊销指在证书到期前,将已经签发的证书从签发机构处注销。通过我们的证书工具,你可以将想查询的域名输入,点击查询,便可得到该域名下的证书序列号、吊销信息以及吊销时间等信息。

其他

在我们的日常浏览中,我们肯定看到过各类因为 SSL 证书状态无效/错误而被浏览器提示的场景页面,这里有一个网址提供有针对 SSL 证书各类错误状态的验证体验,感兴趣的话也可以移步 https://badssl.com/ 进行查看。

五、总结

全文在个人经过一段时间的实践后,并结合自身理解和学习进行总结,希望带大家了解关于 SSL/TLS 证书的方方面面。

从文章结构上看,正文主体部分一共分为八个章节。其中第一篇章为基础篇,我们首先为全文提到的术语进行了归纳总结,而后从 CA、证书及其分类开始对证书进行正式介绍,之后对证书内容、证书格式、证书链及交叉证书进行了详细的阐述,本部分最后一章提及了一些实用的证书工具并对相关概念进行释义;第二篇章为进阶篇,以“什么是 SSL/TLS 及其工作原理”开篇,然后通过证书、HTTPS 两个大方向来分别来介绍 SSL 证书是如何保证通信安全的。

本文为该网络安全科普系列的第一篇——基础篇,地址为 https://hijiangtao.github.io/2022/11/16/Dig-Out-All-Secrets-Behind-TLS-Certificate-One/。关于第二篇的详细内容可以移步 https://hijiangtao.github.io/2022/11/16/Dig-Out-All-Secrets-Behind-TLS-Certificate-Two/ 进行查看。正文部分到此结束,文中若有描述不准确的地方,还望指出,欢迎讨论交流。

参考

  1. https://en.wikipedia.org/wiki/Public_key_infrastructure
  2. https://en.wikipedia.org/wiki/X.509
  3. https://www.cloudflare.com/zh-cn/learning/ssl/what-is-https/
  4. https://zhuanlan.zhihu.com/p/36981565
  5. https://zhuanlan.zhihu.com/p/60033345
  6. https://www.cnblogs.com/xdyixia/p/11610102.html
  7. https://www.websecurity.digicert.com/zh/cn/security-topics/what-is-ssl-tls-https
  8. https://badssl.com/
  9. https://www.ssl2buy.com/wiki/how-to-view-ev-ssl-certificate-details-in-chrome-77
  10. https://scotthelme.co.uk/cross-signing-alternate-trust-paths-how-they-work/
☑️ ☆

网络安全科普:奇妙的 SSL/TLS 证书(进阶篇)

零、前言

如果某个网站受 SSL 证书保护,其相应的 URL 中会显示 HTTPS(超文本传输安全协议)。单击浏览器地址栏的小绿锁,即可查看证书中的详细信息。但你是否曾好奇过一本证书是如何诞生的,以及 HTTPS 背后的 SSL/TLS 是如何在工作过程中发挥功效以保证通信安全的,什么是 CA、PCA,什么又是证书链和 X.509……

在参与了一段时间的证书业务开发后,我将个人的一些理解和学习总结如下,希望这一篇文章,可以帮到正在或将要学习 SSL/TLS 证书的你。

该网络安全科普系列一共分为上下两篇文章,除去前言、参考外,第一篇章为基础篇(第一章至第五章),第二篇章为进阶篇(第六章至第八章),第三篇章即“总结”会对全文结构和书写内容进行总结与梳理。 此前未曾了解过 SSL/TLS 证书的同学可以从第一篇章开始看起,如果有一部分基础想深入的同学可以直接从第二篇章开始阅读。两篇文章均完成撰稿,地址如下:

  1. 网络安全科普:奇妙的 SSL/TLS 证书(基础篇)
  2. 网络安全科普:奇妙的 SSL/TLS 证书(进阶篇)

本文为奇妙的 SSL/TLS 证书第二篇章——进阶篇,以下开始正文。

Untitled

一、关于 SSL/TLS 的来龙去脉

现在的网站都推荐使用 SSL 证书来确保用户数据的安全,验证网站的所有权,防止攻击者创建虚假网站版本,以及将信任传达给用户。

如果网站要求用户登录、输入个人详细信息(例如其信用卡号)或查看机密信息(例如,健康福利或财务信息),则必须对数据保密。

SSL/TLS 是什么

SSL(Secure Socket Layer)是指安全套接字层,简而言之,它是一项标准技术,可确保互联网连接安全,保护两个系统之间发送的任何敏感数据,防止网络犯罪分子读取和修改任何传输信息,包括个人资料。TLS(Transport Layer Security,传输层安全)是更为安全的升级版 SSL。

TLS 1.0 版实际上最初作为 SSL 3.1 版开发,HTTPS 是在 HTTP 协议基础上实施 TLS 加密,所有网站以及其他部分 web 服务都使用该协议。因此,任何使用 HTTPS 的网站都使用 TLS 加密。

Untitled

为什么需要 SSL/TLS

两者创建的目的都是提高网络中数据访问的安全性,因为在 http 携带需要传送的数据,数据没有任何的保护,是容易被黑客拦截下来的;使用了 SSL/TLS 之后,因为数据被非对称加密手段加密了,即使被截获,也是获取不到信息的。

TLS 协议实现的功能有三个主要组成部分:加密、认证和完整性。

  • 加密:隐藏从第三方传输的数据。
  • 身份验证:确保交换信息的各方是他们所声称的身份。
  • 完整性:验证数据未被伪造或篡改。

SSL/TLS 是如何工作的

网站或应用程序要使用 TLS,必须在其源服务器上安装 TLS 证书(由于上述命名混淆,该证书也被称为 SSL 证书),而 TLS 连接是通过一个称为 TLS 握手的流程启动的,在这个过程中用户设备会和服务器交换确定信息,这些信息包括要使用的 TLS 版本、密码套件、TLS 证书、会话密钥等等。

而在浏览器端,当用户访问服务器页面的时候,浏览器会检查服务器的 SSL/TLS 许可是不是可用的,不可用的话,会提醒用户,这个网站不安全,也就是访问的数据可能被黑客截获;此时用户可以根据判断来不访问这个界面;许可都齐全的话,便可以安全的进行数据交互。

具体来说,SSL/TLS 在工作流程中通过如下三个方面保证安全性:

  • 通过 CA 体系交换 public key
  • 通过非对称加密算法,交换用于对称加密的密钥
  • 通过对称加密算法,加密正常的网络通信

SSL 证书、SSL/TLS、HTTP 和 HTTPS 的关系

TLS 已经完全的代替掉 SSL 了,所以只推荐 TLS;目前的 SSL 证书许可,下发的其实都是 SSL/TLS 证书。

HTTP 是超文本传输协议,信息是明文传输;HTTPS,也称作 HTTP over TLS,则是具有安全性的 SSL 加密传输协议。

HTTPS 协议需要到证书颁发机构 (Certificate Authority,简称 CA)申请证书,通过数字证书管理服务完成证书购买、申请,并将证书部署到您的 Web 服务器后,Web 服务将会通过 HTTPS 加密协议来传输数据。

二、证书与安全

信息加密与算法标准

在介绍证书的加密方式前,我们来回顾下都有哪些数据的传输方式。

  1. 明文传输: HTTP协议是明文传输的,明文就是未被加密过的原始数据,解析传输数据包中截获到的内容便可直接获知传输的内容是什么。
  2. 对称加密: 加密和解密的秘钥使用的是同一个,通常用来加密消息体。常见的对称加密算法包含有 AES、DES、3DES、TDEA、Blowfish、RC4、RC5、IDEA 等等。由于加密算法是公开的,若要保证安全性,密钥不能对外公开。
  3. 非对称加密: 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。常见的非对称加密算法包含有 RSA、DSA/DSS、Elgamal、Rabin、D-H、ECC 等等*。
  4. 单向加密摘要: 哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。

*注:文中虽然提到“常见的非对称加密算法包含有 RSA、DSA/DSS、ElGamal、Rabin、D-H、ECC 等等”,但在实际实践中由于安全性及用途等区别,仍会有一些出入,在此作简单解释:其中 RSA、ECC 是生成 SSL/TLS 证书所使用的主要算法;DSA 即数字签名算法,被美国国家标准局用来做DSS数据签名标准,在安全性上存在隐患;D-H 算法作为密钥一致协议,作为确保共享 KEY 安全穿越不安全网络的方法理论;ElGamal 加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法;Rabin 算法是一种基于模平方和模平方根的非对称加密算法。

TLS/SSL 的功能实现主要依赖于三类基本算法散列(哈希)函数 Hash对称加密非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列(哈希)函数验证信息的完整性。

具体来说,hash 主要用来生成签名,签名是加在信息后面的,可以证明信息没有被修改过。一般对信息先做 hash 计算得到一个 hash 值,然后用私钥加密(这个加密一般是非对称加密)作为一个签名和信息一起发送。接收方收到信息后重新计算信息的 hash 值,且和信息所附带的 hash 值解密后进行对比。如果一样则认为没有被修改,反之则认为修改过,不做处理。

除了上面提到的算法外,常见的公有云厂商售卖中还会提供一种叫 SM 的加密方式,即国密算法,即国家商用密码算法。这是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。国密算法主要有 SM1,SM2,SM3,SM4。

从签发过程来看如何确保证书的安全性

要完成一本证书的签发与使用,通常包含如下流程:

  1. 首先,需求方向第三方机构 CA (中间 CA,或者是供应商代理)提交公钥、组织信息、个人信息(域名)等信息并申请认证,私钥自己保存不做提交;
  2. CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
  3. 如信息审核通过,CA 会向申请者签发认证文件,即 TLS/SSL 证书。 颁发的证书中会包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
  4. 签名的产生算法在上文也提到过,这里再简要介绍一下:首先,使用散列函数计算公开的明文信息的信息摘要;然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;
  5. 此后,需求方便可将证书存放在服务器上,当用户从客户端向服务器发出请求时,服务器可以返回证书文件;

Untitled

三、HTTPS 与安全

什么是 HTTPS

超文本传输协议安全 (HTTPS) 是 HTTP 的安全版本,HTTP 是用于在 Web 浏览器和网站之间发送数据的主要协议。HTTPS 并不是独立于 HTTP 的协议。它只是在 HTTP 协议的基础上使用 TLS/SSL 加密。HTTPS 经过加密,以提高数据传输的安全性。

HTTPS 使用加密协议对通信进行加密。该协议称为传输层安全性 (TLS),但以前称为安全套接字层 (SSL)。该协议通过使用所谓的非对称公钥基础架构来保护通信。这种类型的安全系统使用两个不同的密钥来加密两方之间的通信:

  1. 私钥 - 此密钥由网站所有者控制,并且如读者所推测的那样,它是私有的。此密钥位于 Web 服务器上,用于解密通过公钥加密的信息。
  2. 公钥 - 所有想要以安全方式与服务器交互的人都可以使用此密钥。用公钥加密的信息只能用私钥解密。

Untitled

从 HTTPS 工作流程再谈安全性

结合上文提到的证书签发过程中,我们继续结合 HTTPS 的工作流程来看看如何通过证书保证通信的安全性:

  • 当客户端向服务端发送请求,请求中会向服务器提供以下信息:客户端支持的协议版本,比如TLS 1.0 版;
  • 服务器返回经过 CA 认证的数字证书,证书里面包含了服务器的 public key;
  • 客户端读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
  • 客户端然后验证证书相关的域名信息、有效时间等信息;
  • 客户端会内置信任 CA 的证书信息(此处一般指顶级 CA 的自签根证书,包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法;
  • 客户端在完成对数字证书的验证后,用自己浏览器内置的 CA 证书解密得到服务器的 public key;
  • 客户端用服务器的 public key 加密一个预主密钥(这个密钥将在之后结合随机数等信息被用于客户端和服务端各自生成用于网络通信的对称密钥),传给服务器。因为只有服务器有 private key 可以解密,所以不用担心中间人拦截这个加密数据而获取其中的密钥信息;
  • 服务器拿到这个加密的密钥,解密获取信息,再依据双方约定好的参数生成对称加密密钥,并以此和客户端完成接下来的网络通信;

为什么 HTTPS 是安全的

HTTPS安全是由一套安全机制来保证的,主要包含这4个特性:机密性、完整性、真实性和不可否认性

  • 机密性是指传输的数据是采用 Session Key(会话密钥)加密的,在网络上是看不到明文的。
  • 完整性是指为了避免网络中传输的数据被非法篡改,使用 MAC 算法来保证消息的完整性。
  • 真实性是指通信的对方是可信的,利用了 PKI(Public Key Infrastructure 即「公钥基础设施」)来保证公钥的真实性。
  • 不可否认性是这个消息就是你给我发的,无法伪装和否认,是因为使用了签名的技术来保证的。

四、总结

全文在个人经过一段时间的实践后,并结合自身理解和学习进行总结,希望带大家了解关于 SSL/TLS 证书的方方面面。

从文章结构上看,正文主体部分一共分为八个章节。其中第一篇章为基础篇,我们首先为全文提到的术语进行了归纳总结,而后从 CA、证书及其分类开始对证书进行正式介绍,之后对证书内容、证书格式、证书链及交叉证书进行了详细的阐述,本部分最后一章提及了一些实用的证书工具并对相关概念进行释义;第二篇章为进阶篇,以“什么是 SSL/TLS 及其工作原理”开篇,然后通过证书、HTTPS 两个大方向来分别来介绍 SSL 证书是如何保证通信安全的。

本文为该网络安全科普系列的第二篇——进阶篇,地址为 https://hijiangtao.github.io/2022/11/16/Dig-Out-All-Secrets-Behind-TLS-Certificate-Two/。关于前一篇的详细内容可以移步 https://hijiangtao.github.io/2022/11/16/Dig-Out-All-Secrets-Behind-TLS-Certificate-One/ 进行查看。正文部分到此结束,文中若有描述不准确的地方,还望指出,欢迎讨论交流。

附:术语表

简称 英文全称 中文全称
CA Certificate Authority / Certification Authority 证书颁发机构
SSL Secure Sockets Layer 安全套接字层协议
TLS Transport Layer Security 传输层安全性协议
EV SSL Extended Validation SSL Certificates EV 证书,又名扩展验证证书
OV SSL Organization Validated SSL Certificates OV 证书,又名组织验证证书
DV SSL Domain Validated SSL Certificates DV 证书,又名域验证证书
Wildcard SSL Wildcard SSL Certificate 通配符证书
MDC Multi-Domain Certificates 多域 SSL 证书
UCC Unified Communications Certificate 统一通信证书
TLD Top-level domain 顶级域
PKI Public key infrastructure 公钥基础设施
PCA Private Certificate Authority 私有证书颁发机构,又名私有 CA
HTTP Hypertext Transfer Protocol 超文本传输协议
HTTPS Hypertext Transfer Protocol Secure 超文本传输安全协议
- Public key 公钥
- Private key 私钥
X.509 - 密码学里的公钥证书格式标准
CSR Certificate signing request 证书签名请求
OCSP Online Certificate Status Protocol 在线证书状态协议
CSP Cryptographic Service Provider 加密服务提供商

参考

  1. https://en.wikipedia.org/wiki/Public_key_infrastructure
  2. https://en.wikipedia.org/wiki/X.509
  3. https://www.cloudflare.com/zh-cn/learning/ssl/what-is-https/
  4. https://zhuanlan.zhihu.com/p/36981565
  5. https://zhuanlan.zhihu.com/p/60033345
  6. https://www.cnblogs.com/xdyixia/p/11610102.html
  7. https://www.websecurity.digicert.com/zh/cn/security-topics/what-is-ssl-tls-https
  8. https://badssl.com/
  9. https://www.ssl2buy.com/wiki/how-to-view-ev-ssl-certificate-details-in-chrome-77
  10. https://scotthelme.co.uk/cross-signing-alternate-trust-paths-how-they-work/
❌