安装Flutter
scoop install flutter
喵个咪的博客scoop install flutter
ifconfig
简单是一件非常困难的事!而深思熟虑的简单,可以给我们与学习最多的思考
Protocol Buffer 的第 3 版删除了一些特性(required, optional...),并且在默认值的设计上,做出了一个看起来很危险的重要决定。乍看之下匪夷所思,网路上也引起多人讨论。通常这种去掉重要功能的决定,都有非常的理由,尝试理解别人的设计,可以让我们看得更远。现在,就让我们尝试从google的角度,思考一下Protocol Buffer的设计吧!
大数据时代,数据的来源极其广泛,各种类型的数据在快速产生,数据也是爆发性增长。从数据的产生,通过加工融合流转产生新的数据,到最终消亡,数据之间的关联关系可以称之为数据血缘关系。在数据中台的大背景下,数仓的开发者经常需要解决以下问题:
面对成百上千张的数据表,不知道该如何关联,也不知道这些表具有什么业务价值
执行过长,慢的无法忍受的SQL脚本,却不敢轻易进行整改
数据表是否包含机密数据需要被清理,以及这些机密数据是否被转存导致权限放大
其实,以上的这些问题都可以统一归类为数据发现问题。大部分企业会针对离线数仓任务进行SQL分析,构建表和字段的血缘关系,数据发现包括但不限于: 数据 表/列的业务分类分级和机密字段识别等。
BI全称:商业智能(Business Intelligence),在传统企业中,它是一套完整的解决方案。将企业的数据有效整合,快速制作出报表以作出决策。商业智能BI在数据架构中处于前端分析的位置,其核心作用是对获取数据的多维度分析、数据的切片、数据的上钻和下钻、cube等。通过ETL数据抽取、转化形成一个完整的数据仓库、然后对数据仓库的数据进行抽取,而后是商业智能的前端分析和展示。
BI工具主要有两种用途。一种是利用BI制作自动化报表,数据类工作每天都会接触大量数据,并且需要整理汇总,这是一块很大的工作量。这部分工作可以交给BI自动化完成,从数据规整、建模到下载。
别名采样方法分为两个步骤:
Flutter 上的 WebRTC 通常通过flutter_webrtc 库实现,该库包含 Flutter 支持的所有平台所需的 WebRTC 代码。该插件抽象出了 WebRTC 中几个难以实现的部分,本文构建的应用程序基于插件中给出的示例代码。
在本教程中,我们将向 Flutter 应用程序添加基于 WebRTC 的通话解决方案。
必须设置各种组件才能实现完整的视频通话体验。第一个是将基础 WebRTC 插件添加到您的 Flutter 应用。在本课中,我们仅关注 Android 和 iOS,但请注意,可能需要进行额外设置才能在其他平台上设置类似的体验。
Sass在v4.3.0版本之前都是使用的node-sass,而node-sass的底层依赖 libsass,libsass是一个原生库,因此,在Windows下面需要强制用户必须安装python2和Visual Studio才能编译成功。这并不是一件很友好的事情,而且经常导致编译不成功。
ERROR error when starting dev server: 11:51:39
Error: listen EACCES: permission denied 0.0.0.0:3100
at Server.setupListenHandle [as _listen2] (node:net:1723:21)
at listenInCluster (node:net:1788:12)
at Server.listen (node:net:1876:7)
用户画像建模其实就是对用户“打标签”,从对用户打标签的方式来看,一般分为3种类型:①统计类标签;②规则类标签;③机器学习挖掘类标签。
下面我们介绍这3种类型的标签的区别:
统计类标签
这类标签是最为基础也最为常见的标签类型,例如,对于某个用户来说,其性别、年龄、城市、星座、近7日活跃时长、近7日活跃天数、近7日活跃次数等字段可以从用户注册数据、用户访问、消费数据中统计得出。该类标签构成了用户画像的基础。
规则类标签
该类标签基于用户行为及确定的规则产生。例如,对平台上“消费活跃”用户这一口径的定义为“近30天交易次数≥2”。在实际开发画像的过程中,由于运营人员对业务更为熟悉,而数据人员对数据的结构、分布、特征更为熟悉,因此规则类标签的规则由运营人员和数据人员共同协商确定;
机器学习挖掘类标签
该类标签通过机器学习挖掘产生,用于对用户的某些属性或某些行为进行预测判断。例如,根据一个用户的行为习惯判断该用户是男性还是女性、根据一个用户的消费习惯判断其对某商品的偏好程度。该类标签需要通过算法挖掘产生。
sudo apt update; sudo apt upgrade;
sudo apt install cmake;
以往前端实现文件上传到服务端,常用方案为 HTTP 上传或 FTP 上传,但这两种方式均存在明显短板:HTTP 上传易受网络波动影响,可靠性较差;FTP 配置复杂且安全性不足。随着对象存储服务(Object Storage Service, OSS)的普及,这一问题得到了有效解决。 对象存储(基于对象的存储)是一种专为海量非结构化数据设计的存储架构。与传统存储不同,它将数据封装为独立对象,捆绑元数据和唯一标识符,便于快速查找与访问。OSS 提供与平台无关的 RESTful API 接口,支持在任意应用、任意时间、任意地点存储和访问各类数据。
目前主流的开源 OSS 方案包括 MinIO和Ceph。其中 MinIO 凭借轻量、易用、兼容 S3 接口等优势,使用率持续攀升,成为开源对象存储的首选方案之一。本文将详细介绍如何基于 JavaScript/TypeScript 前端实现文件上传到 MinIO。
// 验证IP有效性
function isValidIP(ip: string): boolean {
const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
return reg.test(ip);
}
TimescaleDB是基于PostgreSQL的时序数据库插件,完全继承了PostgreSQL的功能,TimescaleDB是一个开放源代码的时间序列数据库,针对快速提取和复杂查询进行了优化。它使用“完整的SQL”,并且与传统的关系数据库一样易于使用,但是扩展的方式以前只适用于NoSQL数据库。与这两种方案(关系型和NoSQL)所要求的权衡相比,TimescaleDB为时间序列数据提供了两种方案的最佳选择:
docker pull bitnami/elasticsearch:latest
docker run -d \
--name elasticsearch-test \
-p 9200:9200 \
-p 9300:9300 \
-e ELASTICSEARCH_USERNAME=elastic \
-e ELASTICSEARCH_PASSWORD=elastic \
-e xpack.security.enabled=true \
-e discovery.type=single-node \
-e http.cors.enabled=true \
-e http.cors.allow-origin=http://localhost:13580,http://127.0.0.1:13580 \
-e http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization \
-e http.cors.allow-credentials=true \
bitnami/elasticsearch:latest
docker pull appbaseio/dejavu:latest
docker run -d \
--name dejavu-test \
-p 13580:1358 \
appbaseio/dejavu:latest
http://localhost:13580/
时间戳(Timestamp) 也被称作为 Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从世界协调时间(Coordinated Universal Time,即UTC)或称 格林威治时间的 1970年01月01日00时00分00秒(00:00:00 GMT) 起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。
3月24日上午10点30分左右,罗某保存了贩卖机上原本的收款码,并将两张伪造二维码贴在了口罩自动贩卖机上。只要有人扫码,他支付宝收到转账,就用自己手机扫一下事先拍好的贩卖机二维码照片完成购买,这样虽然有个时间差,但顾客也能拿到口罩,自己又轻松赚到了差价,为了以假乱真,罗某还设置了首单减一块钱的优惠,买一个口罩需要14元,两个29元。截止到24日下午6时,贩卖机上的二维码被民警发现并撕除,罗某通过此方法共非法获利74元。
基准测试(benchmark)是针对系统设计的一种压力测试,目标是为了掌握系统的行为。
利特尔法则(英语:Little's law),基于等候理论,由约翰·利特尔在1954年提出。利特尔法则可用于一个稳定的、非占先式的系统中。
利特尔法则可用来确定在途存货的数量。此法则认为,系统中的平均存货等于存货单位离开系统的比率(亦即平均需求率)与存货单位在系统中平均时间的乘积。
利特尔法则的公式描述为:
Lead Time(产出时间) = 存货数量 × 生产节拍 或 TH(生产效率) = WIP(存货数量) / CT(周期时间)
第一次使用Selenium后,在循环处理时,我遇到了一个莫名其妙的错误,我被卡住了一阵子,故而我留下本文作为备忘录。
stale element reference: element is not attached to the page document
RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
RBAC 认为授权实际上是 Who 、What 、How 三元组之间的关系,也就是 Who 对 What 进行 How 的操作,也就是“主体”对“客体”的操作。
我交谈过的大多数开发人员最终都会谈论 REST,他们都希望构建尽可能最好的 REST API。这当然会引发关于什么是好的 REST API 的常见讨论,或者您应该如何确保您的 API 是 REST风格的。有时,气氛会很紧张,所以我决定写一篇文章来解决这个问题。
这篇文章旨在收集我所认为的 REST 背后的主要设计原则。我当然会更新该文档,以反映我的任何不足或任何可以帮助任何有疑问的人的新想法。
REST 或“表述性状态传输”是一种架构风格,它定义了 Web 服务的设计和行为方式。REST 定义了一组必须遵循的约束,以便在互联网上的系统之间提供更好的互操作性。遵循这些原则的 Web 服务被认为是 REST风格的。
有需求,Key到期的时候需要一个通知给服务器端用于感知数据的改变。刚好Redis提供了一个Keyspace Notifications功能,可以让服务器端监听某个Key的到期事件。
官方文档说,这个功能是很耗费CPU的,所以,默认是关闭的。需要开启的话,可以使用命令:
config set notify-keyspace-events KEA
| Name | Version | Roles | Handshake |
|---|---|---|---|
| Microsoft's MsQuic | draft-27/28/29/30/31/32 | client, server | TLS 1.3 RFC |
| Facebook's mvfst | draft-29 | library, client, server | TLS 1.3 |
| Google's Chromium | Q043, Q046, Q050, T050, T051, draft-27, draft-29 | library, client, server | QUIC Crypto, TLS |
| ats (Apache Traffic Server) | draft-29 | client. server | TLS 1.3 |
| LiteSpeed's lsquic | Draft-32, Draft-29, Draft-28, Draft-27, Q043, Q046, and Q050. | library, client, server | QUIC Crypto, RFC 8446 |
| ngtcp2 | draft-29, draft-30, draft-31, and draft-32 | library, client, server | TLSv1.3 (RFC 8446) |
| Cloudflare's nginx-cloudflare | draft-27, draft-28, draft-29 | server | TLSv1.3 (RFC8446) |
| picoquic | draft-32/31/30/29/28/27 | library and test tools, test client, test server | TLS 1.3 (using picotls) |
| Pluginized QUIC | draft-29 | library, client, server | TLS 1.3 (using picotls) |
| quant | draft-33, draft-34, v1 | library, client, server | TLS 1.3 |
| Fastly's quicly | draft-27 | client, server | TLS 1.3 (final) |
| nginx-quic | draft-27 .. draft-32 | server | TLSv1.3 (RFC8446) |
| Alibaba's xquic | draft-29 | library | TLSv1.3 |
| Google's quiche | draft-29 | library | TLSv1.3 |
6是运行时和CLI都在一起,7则拆分开来了。
pnpm install -D protobufjs
pnpm install -D protobufjs-cli
要将Protobuf协议生成目标语言的代码,必须要通过生成器protoc来实现,protoc是通过插件机制来实现各种语言的生成功能。
| 插件名 | 生成文件名 |
|---|---|
| protoc-gen-go | XXXXX.pb.go |
| protoc-gen-go-grpc | XXXXXX_grpc.pb.go |
| protoc-gen-go-http | XXXXXX_http.pb.go |
| protoc-gen-go-errors | XXXXXX_errors.pb.go |
| protoc-gen-validate | XXXXXX.pb.validate.go |
| protoc-gen-openapiv2 | XXXXXX.swagger.json |
| protoc-gen-openapi | openapi.yaml |
Prometheus有4大指标类型(Metrics Type),分别是:
计数器表示一种单调递增的指标,除非发生重置的情况下下只增不减,其样本值应该是不断增大的。
例如,可以使用Counter类型的指标来表示服务的请求数、已完成的任务数、错误发生的次数等。
仪表盘类型代表一种。它可以理解为状态的快照,Gauge通常用于表示温度或者内存使用率这种指标数据,也可以表示能随时增加或减少的“总数”,例如当前并发请求的数量node_memory_MemFree(主机当前空闲的内容大小)、node_memory_MemAvailable(可用内存大小)等。在使用Gauge时,用户往往希望使用它们等。
create table public."user" (
id integer primary key not null, -- id
create_time bigint, -- 创建时间
update_time bigint, -- 更新时间
delete_time bigint, -- 删除时间
created_at TIMESTAMP, -- 创建时间
updated_at TIMESTAMP, -- 更新时间
deleted_at TIMESTAMP -- 删除时间
);
交叉表(Cross Tabulations) 是一种常用的分类汇总表格。利用交叉表查询数据非常直观明了,被广泛应用。交叉表查询也是数据库的一个特点。
在统计学中,交叉表是矩阵格式的一种表格,显示变量的(多变量)频率分布。交叉表被广泛用于调查研究,商业智能,工程和科学研究。它们提供了两个变量之间的相互关系的基本画面,可以帮助他们发现它们之间的相互作用。卡尔·皮尔逊(Karl Pearson)首先在“关于应变的理论及其关联理论与正常相关性”中使用了交叉表。
多元统计学的一个关键问题是找到高维应变表中包含的变量的(直接)依赖结构。如果某些有条件的独立性被揭示,那么甚至可以以更智能的方式来完成数据的存储。为了做到这一点,可以使用信息理论概念,它只能从概率分布中获得信息,这可以通过相对频率从交叉表中容易地表示。
在我的 SQL 之旅的早期,我认为在数据库中搜索一段文本主要涉及这样的查询:
SELECT col FROM table WHERE col LIKE '%some_value%';
中文:
ping www.baidu.com -n 3
正在 Ping www.a.shifen.com [120.232.145.185] 具有 32 字节的数据:
来自 120.232.145.185 的回复: 字节=32 时间=45ms TTL=49
来自 120.232.145.185 的回复: 字节=32 时间=627ms TTL=49
来自 120.232.145.185 的回复: 字节=32 时间=49ms TTL=49
120.232.145.185 的 Ping 统计信息:
数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 45ms,最长 = 627ms,平均 = 240ms
一开始我走入了误区,应该从Protobuf生成dts,但是,现在来看,通过OpenAPI文档生成dts文件会更好一些。
首先,Protobuf对于前端来说,知识面几乎没有交集。你要找出知道Protobuf的前端,这并不是一件很容易的事情。但是,你要问前端OpenAPI,Swagger,他一定能够会告诉你,必须的知道。
其次,Protobuf通常都是后端定义,后端使用,要开放VSC的权限给前端,有时候会是一个很艰难的问题。那么,现实是,通常生成的工作都要后端去做——这就给工作中带来了极大的不便。
综上,通过Protobuf生成dts其实并不是一个明智之举。
go get github.com/Azure/azure-sdk-for-go
OLTP 和 OLAP:这两个术语看起来相似,但指的是不同类型的系统。在线事务处理 (OLTP) 实时捕获、存储和处理来自事务的数据。在线分析处理 (OLAP) 使用复杂的查询来分析来自 OLTP 系统的汇总历史数据。
OLTP 是指Online Transactional Processing 的简称,这个词中 Transactional 是非常重要的,代表的是说他的处理通常包含了读以及写,通常OLTP 是指系统能够处理大量的更新以及新增的查询。所以在传统的OLTP 系统中,数据的正确性以及一致性是首要要达到的目标之一。所以一般的OLTP 中会常常听到ACID (Atomatic, Consistent, Isolated, Durable) 合规。这代表他们遵循着一个事务(Transaction) 完成后才会执行下一笔,确保整个系统的数据一致性。
| 提供商 | 搜索地址 | registry地址 |
|---|---|---|
| 淘宝 | https://npmmirror.com/ | https://registry.npmmirror.com |
| 腾讯云 | http://mirrors.cloud.tencent.com/npm/ | |
| 华为云 | https://mirrors.huaweicloud.com/repository/npm | |
| 浙江大学 | http://mirrors.zju.edu.cn/npm/ | |
| 南京邮电 | https://mirrors.njupt.edu.cn/nexus/repository/npm/ |
SSL(安全套接字层) 及其后继者 TLS(传输层安全性) 是用于在联网计算机之间建立经过身份验证和加密的链接的协议。 尽管SSL协议已随着以下版本的发布而被弃用 TLS 1.0,在1999年,将这些相关技术称为“ SSL”或“ SSL /TLS。” 最新版本是 TLS 1.3,定义于 RFC 8446 (八月2018)。
Last Will and Testament(LWT,遗嘱消息)其作用是当客户端异常断开(如网络中断)时,EMQ X 自动发布一条预设的遗嘱消息,通知系统该用户离线。
该消息由MQTT的服务端(Broker)发出。
该消息,在客户端正常离线的时候不会被发出,只有客户端非正常断开网络连接的时候才会发出。
LWT的Topic设计上,从两个维度设计分别为:
user/status/{user_id}device/status/{device_id}机器学习 (ML) 是人工智能 (AI) 的一部分,属于计算科学领域,专门分析和解释数据的模式及结构,以实现无需人工交互即可完成学习、推理和决策等行为的目的。简单来说,机器学习即支持用户向计算机算法馈送大量数据,然后让计算机分析这些数据,并仅根据输入数据给出数据驱动型建议和决策。如果算法识别出任何更正,它会整合更正信息,改进未来决策。
机器学习由三个部分组成:
`Markdown` 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。
当前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如:GitHub、简书、知乎等
推荐使用Typora,官网:https://typora.io/
在Windows 上有「Delete」跟「Backspace」两个按键,一个是往左删除字符,一个是往右删除字符;可是在Mac 上却只有一个delete 键,要怎样灵活的用它,让它变得跟Windows 一样好用呢?

fn + delete 可以让光标向右边删除文字,跟Windows 的 del 键功能一样。
nm
# 查看静态库或动态库定义了哪些函数
nm -n --defined-only xxxx.a
nm -g -C --defined-only xxxx.so
nm -D xxxx.so
# 显示hello.a 中的未定义符号,需要和其他对象文件进行链接.
nm -u hello.o
# 在 ./ 目录下找出哪个库文件定义了close_socket函数.
nm -A ./* 2>/dev/null | grep "T close_socket"
FileReader的使用机会很多,但是它是异步的,因此很容易出现回调地狱。
我们可以使用async/await特性,它允许我们以同步的方式调用异步代码。
export async function readTextFile(file: File) {
const reader = new FileReader();
reader.readAsText(file);
return new Promise((resolve, reject) => {
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
});
}
export async function readBinaryFile(file: File) {
const reader = new FileReader();
reader.readAsArrayBuffer(file);
return new Promise((resolve, reject) => {
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
});
}
export async function readAsText(file: File) {
const reader = new FileReader();
reader.readAsText(file);
return new Promise((resolve, reject) => {
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
});
}
| 快捷键 | 说明 |
|---|---|
| Ctrl + Tab(^ Tab) | 切换标签页(还要进行此选择,效率差些) |
| Ctrl + E(⌘ E) | 查看最近打开的文件 |
| Ctrl+B 或 Ctrl+单击 (⌘ B 或 ⌘ + 单击) | 立即跳转到符号的定义 |
| Ctrl + Alt + B | 立即跳转到符号的实现 |
| Ctrl + Shift + T (⇧ ⌘ T) | 跳转至测试 |
| Ctrl + Alt + F7 (⌘ ⌥ F7) | 显示用例 |
| Shift + Shift(⇧⇧) | 快速查找任意内容 |
| Ctrl + Shift + A | 快速查找并使用编辑器所有功能(必记) |
| Ctrl + N (⌘ O) | 快速查找类 |
| Ctrl + Shift + N (⌘ ⇧ O) | 通过文件名快速查找工程内的文件(必记) |
| Ctrl + Shift + Alt + N (⌘ ⇧ ⌥ O) | 通过一个字符快速查找位置(必记) |
substr替换成slice;
用来表示你认为是天生一对的两个角色。
ex.
通常用在与朋友道别的时候。平常我们可能会祝愿对方有个美好的一天,但比较熟的朋友之间说DFTBA 反而有种戏谑趣味感。
ex.
Qt(发音同 “cute”)是一套跨平台的 C++ 应用程序开发框架,由挪威公司 Trolltech(后被诺基亚、Digia 收购,现为 The Qt Company)开发,核心目标是让开发者用 “一次编写,到处运行”(Write Once, Run Everywhere)的方式,高效开发出在不同平台上(Windows、Linux、macOS、Android、iOS、嵌入式系统等)具有一致功能和体验的应用程序。
官方下载网址:http://download.qt.io/
Dexie.js 是对前端本地数据库 IndexedDB 的 API 进行封装的轻量级库,它简化了 IndexedDB 复杂的原生操作,提供了更简洁、直观的语法,便于开发者快速实现前端本地数据的持久化存储。
前端常见的本地存储方案(Cookie、LocalStorage、SessionStorage)均存在存储容量限制,无法满足大数据量的存储需求。IndexedDB 作为浏览器原生的本地数据库,具备大容量存储优势,具体对比如下:
在项目的android目录下执行以下命令:
keytool -genkey -v -keystore ./app_key.jks -keyalg RSA -keysize 4096 -validity 10000 -alias flutter_key
使用以下命令安装编译 OpenCV 所需的所有依赖项:
yum groupinstall "Development Tools" -y
yum install cmake3 gcc gtk2-devel numpy pkconfig -y
LLVM项目是一个模块化的、可重用的编译器和工具链集合。尽管它的名字-LLVM与传统虚拟机(low level virtual machine)名字相似。但“LLVM”这个名字本身不是一个缩略词,它就是这个项目的全称。所以,不要再把LLVM叫做low level virtual machine。
LLVM开始于伊利诺斯大学的一个研究项目。目的是提供一个现代的、基于SSA的、能够支持任意静态和动态编译的编程语言的编译策略。此后,LLVM成长为伞项目下的一个子项目。其中许多是被广泛用于各种各样的商业生产和开源代码项目以及学术研究中。LLVM项目源码采用“Apache 2.0许可协议”。
Headless CMS 是一种 内容管理系统(Content Management System),它将【头部Head】表示层(内容呈现的地方)与【身体Body】后端(内容管理的地方)分离开来。即,把表示层和后端信息层分离开了。
这样,我们可以根据需要在 Web、移动和数字媒体平台上重复使用和重新混合内容。您甚至可以在印刷品中重复使用您的内容。
与格式无关的内容为所有参与者(作者、开发人员和用户)提供了变革性的体验。
git submodule add <url> <path>
git config --global http.proxy http://127.0.0.1:1080
之前,都是找的Andriod的文件,但是,这很麻烦,因为需要Root,不然无法访问。找到文件,拷贝也是一件很麻烦的事情。
现在,电脑版的微信也是可以使用小程序的,所以,从电脑上去寻找小程序的资源就变得切实可行。
首先,它有两个路径:
C:\Users\{Windows用户名}\Documents\WeChat Files\Applet\{小程序ID}
// 列数 -> 列字母
function ColumnNumberToName(num: number): string {
if (num < 1 || num > 16384) {
return ''
}
if (num > 26) {
const digit1 = String.fromCharCode((num - 1) / 26 + 64)
const digit2 = String.fromCharCode(((num - 1) % 26) + 65)
return digit1 + digit2
} else {
return String.fromCharCode(num + 64)
}
}
// 列字母 -> 列数
function ColumnNameToNumber(name: string): number {
let num = 0
if (name.length == 1) {
num = Number(name[0].charCodeAt(0)) - 64
} else if (name.length == 2) {
num = (Number(name[0].charCodeAt(0)) - 64) * 26 + Number(name[1].charCodeAt(0)) - 64
}
return num
}
console.log(ColumnNumberToName(1))
console.log(ColumnNumberToName(26))
console.log(ColumnNumberToName(27))
console.log(ColumnNameToNumber('A'))
console.log(ColumnNameToNumber('Z'))
console.log(ColumnNameToNumber('AA'))




所谓的汉字注音,就是给汉字上方加注拼音。

在Office里面,这个功能叫做 “拼音指南”(Phonetic Guide)。

拼音指南一次只能够处理最多30个字,一篇文章不可能只有30个字,上百个字是很正常的,人工处理就会很累。所以,需要做到自动化,做到自动化有两种方式可以做到:
| 注释名 | 核心作用说明 | 适用场景细分 | VSC | VS | JetBrains | 优先级建议 |
|---|---|---|---|---|---|---|
| TODO | 功能未实现(尚未启动开发) | 新需求、未动工的模块 / 接口 | [x] | [x] | [x] | 中 - 高 |
| TODO:HIGH/MID/LOW | 带优先级的未实现功能 | 需区分紧急程度(如 HIGH = 迭代必做,LOW = 后续优化) | [] | [] | [x] | 自定义 |
| UNDONE | 功能未完成(已开发部分,待收尾) | 开发中被打断、需补充细节 / 边界处理的功能 | [] | [x] | [] | 中 |
| FIXME | 已发现明确 Bug,需修复 | 可复现、定位清晰的缺陷(含潜在风险未复现的问题) | [] | [] | [x] | 高 |
| FIXME:URGENT | 紧急 Bug 修复 | 线上故障、阻塞测试的核心流程缺陷 | [] | [] | [x] | 最高 |
| BUG | 已确认的具体缺陷 | 区别于 FIXME:更侧重 “已复现 + 影响范围明确” 的 Bug(如 “用户 ID>1000 时查询失败”) | [] | [] | [] | 高 |
| HACK | 临时解决方案 / 取巧实现 | 功能可用,但代码不优雅(如硬编码、规避框架限制),待重构 | [] | [x] | [] | 中 |
| XXX | 待优化问题(设计 / 实现不规范) | 非紧急缺陷,如命名不规范、冗余代码、逻辑可简化(优先级低于 HACK/FIXME) | [] | [] | [] | 低 - 中 |
| UnresolvedMergeConflict | 未解决的代码合并冲突 | Git 合并分支时产生的冲突,需手动对比处理 | [] | [x] | [] | 最高 |
| NOTE | 重要说明 / 备注 | 记录设计思路、依赖条件、使用限制(如 “依赖第三方 SDK v2.3.0,升级需改签名”) | [] | [] | [x] | - |
| DEPRECATED | 已废弃的代码 / 接口 | 不建议继续使用,后续版本会删除(需标注替代方案) | [] | [] | [x] | - |
| REVIEW | 需代码审查 / 复核 | 复杂逻辑、高风险模块(如权限控制、支付流程),需团队复核 | [] | [] | [] | 中 |
| OPTIMIZE | 性能 / 结构优化 | 代码可运行,但效率低(如 O (n²) 循环)或结构混乱,需重构 | [] | [] | [] | 低 - 中 |
sudo apt-get install libgtest-dev
该快捷方式在键盘图中称为“相关符号”。
Ctrl + Cmd + Up
Ctrl + Alt + Home