反射是指程序检查自身的能力(尤其是通过类型),它是元编程的一种形式。
Go 的类型系统
反射基于类型系统,因此必须先了解 Go 的类型系统。任何情况下,一个 Go 变量都会包含静态类型和值两个部分。
Hello Jellyyyyyyyyyyyyyy !!
uv
是由 Astral 开发的 Python 工具。在一定程度上是可以取代 pip
、poetry
、pyenv
、twine
、virtualenv
等工具,主要用于做 Python 依赖管理和 Python 版本管理。通过 uv
命令可以完成从运行单个 Python 脚本、项目依赖管理(依赖声明和版本锁定)、虚拟环境管理等几乎所有维护 Python 项目需要的功能。
之前的工具都只负责部分功能,如 pyenv
负责系统上的 Python 版本管理;virtualenv
负责虚拟 Python 环境的创建;pip
负责依赖管理;uv
实现了所有这些功能。当然 poetry
也实现了这些功能,但 uv
说它比 poetry
更快。
为什么 uv 更快?
知道这本书是因为在 B 站看一个博主讲住房和养老金制度时推荐的。当时出于好奇,不动产到底是什么意思?
本以为这本书能带来一些参考,结果发现它是一本纪实文学,由朝日新闻的一系列报道改编而成,主要反映了房地产泡沫破灭后,那些处于不利位置的房产问题。
问题的起因:随着时间推移,日本经历了经济泡沫和房地产泡沫时代,人口和经济逐渐向东京都等大城市聚集。从全国来看,有大量持有成本高于实际价值的不动产,主要有以下几种情况:
当谈论时间时,我们其实是在谈论两件事:时间本身和时间的表示。
正常情况下,时间的流动是单调的,日常需要表达的往往是具体某个时间点(瞬时时间)、以某个或某两个时间点为分界的时间段。
从古至今,人们根据天气周期性变化发明了年;根据月相变化发明了月;根据昼夜交替循环发明了天;时分秒这种在一天以内的时间单位则是由日晷、水钟、机械钟等的发明才得以出现。年月日有强周期性的自然现象,很好区分,因此各种历法系统基本都有年月日,区别仅在于年的划分,称为纪元,比如公历划分为公元和公元前、日本历的民治/令和。天以内的划分则完全看各文明发展程度,比如古人用日晷天分成时辰、用漏刻将时辰分为刻、用水钟将刻分为分,于是农历的最小单位就是分;日本历在明治维新后直接引入西方的时分秒机制。
日常讨论最多的树基本上都是查找树,构建、调整树的目的,都是为了快速地查找。在有限的资源下,谁能够在树的构建和查找上取得更加均衡的性能,谁就会成为最常用的技术。这里说的有限资源,主要是指存储:内存或磁盘。
如果数据集较少,只需要在内存中操作,主要考虑构建和查找树的时间复杂度,这类树的优胜者是红黑树;如果数据集很大,如GB级别,内存不足以存储整个数据集,势必以磁盘为主要存储手段,磁盘IO会是主要问题,减少IO操作是主要目的,这类树的优胜者是B+树。
严格地说,无论红黑树还是B+树,和平衡二叉树(AVL树)没有必然的联系,但考虑到树的平衡对查询的重要性,因此了解构建AVL树的详细步骤也是有必要的。
从树的构建思路上看,有自顶向下和自底向上两种方式。前者和我们最开始学习的树一脉相承,AVL树是自顶向下构建的典型代表;后者天然满足平衡性,且节点、合并的发生频率明显小于自顶向下构建的AVL树,典型代表是B树。
通常在带有登录功能的业务中,我们会向用户(客户端)发放访问凭证,往后一段时间,用户持该凭证即可在应用内畅行。不同应用可能有不同的名字:access_token、token、xxxid,也可能有不同的形式:不透明字符串、JWT等。本文讨论访问凭证的安全性。