2024年8月26日

如何在 Linux Mint 21/20 上使用 pgAdmin4 安装 PostgreSQL

pgAdmin是一个功能丰富的开源前端管理工具,允许您从 Web 浏览器轻松管理您的PostgreSQL关系数据库。 它提供了一个易于使用的用户界面,简化了数据库和数据库对象的创建和监控。PgAdmin 4是早期pgAdmin工具的改进,可用于 Linux、Windows、macOS 系统,甚至 Docker 容器。 在本教程中,您将学习如何在Linux Mint 21和Linux Mint 20上使用pgAdmin4安装PostgreSQL。 步骤1:在Linux Mint上安装PostgreSQL数据库 1.首先,启动您的终端并使用apt 包管理器更新您的包,如图所示。 $ sudo apt update -y 更新完成后,继续下一步。 由于pgAdmin4为PostgreSQL数据库对象的管理提供了前端界面,因此必须首先安装PostgreSQL。 2.为…
2024年8月26日

Jest Mock 计时器

测试超时的最大障碍之一是等待超时。Jest提供了一种解决方法。 运行所有定时器 假设您正在测试一个程序,该程序会在一段时间后发出一个事件,但您不想等待该事件实际发出的时间太长。Jest 为您提供了通过setTimeout函数立即运行设置的回调的选项jest.runAllTimers。 // This has to be called before using fake timers. jest.useFakeTimers(); it('closes some time after being opened.', (done) => { // An automatic door that fires a `closed` event. const autoDoor = new AutoDoor(); autoDoor.on('closed', done); autoDoor.open(…
2024年8月26日

在 Flow 中使用枚举

如果您曾经接触过更传统的面向对象语言(C、C#、Java),那么您可能见过枚举数据类型。虽然 JavaScript 不支持枚举,但Flow 的类型检查可以弥补这一点。 枚举在哪些地方有用? 假设您正在编写一个处理扑克筹码的程序。筹码的颜色是一个字符串(即“红色”、“蓝色”等)。因此您的Chip类型看起来应该类似于: type Chip = { color: string, }; …创建芯片的函数是: function createChip(color: string): Chip { return { color, }; } 但您要确保它只使用有效的颜色: // This should be valid. createChip('red'); // This should not. createChip('cyan'); // This isn't even a color. createCh…
2024年8月26日

Flow 中的通用函数

Flow从面向对象程序中借鉴的最佳概念之一是泛型的概念。在许多情况下,泛型对于细化类型检查至关重要。 泛型在哪些地方有用? 假设你有一个函数memoize。使用 Flow 类型,它可能看起来像这样: function memoize(func: (key: any) => any): (key: any) => any { const registry = new Map(); return function(key: any): any { let value = registry.get(key); if (typeof value === 'undefined') { value = func(key); registry.set(key, value); } return value; }; } 问题是它会吞噬以下细节func: // Type is (val: number) => bo…
2024年8月26日

流中的参数变化

有时你可能希望函数能够采用不同类型的参数。有点像TypeScript 中的联合类型。让我们看看如何使用Flow来实现。 创建一个接受多种类型参数的函数 这只是列出可能的类型的问题,用|: function capitalize( // `capitalize` can take a string or an array of strings. words: string | Array<string>, // `capitalize` will return an array of strings either way. ): Array<string> { // At this point, Flow does not know if `words` is a string or an array, // so properties or methods specific to those type…
2024年8月26日

流程通用约束

在Flow中,在某些情况下你会想要创建一个通用函数或类,但想要限制可以作为类型参数传递的内容。 通用约束的用途 假设您有一个包装 Map 的类,但在插入之前进行了浅拷贝: class ShallowMap<T> { map: Map<string, T>; constructor() { this.map = new Map(); } get(key: string) { return this.map.get(key); } set(key: string, value: T) { // Make a shallow copy. Flow will give an error on this line. const copy = {...value}; this.map.set(key, copy); } } Flow 不允许您这样做,因为虽然对象可以传播,但其他类型不能: // This…
2024年8月26日

流类型别名

当仅以文字形式书写时,Flow 很快就会变得非常冗长。将重复的类型声明为类型别名通常很有用。 声明类型别名 假设你正在编写函数来操作待办事项列表: // Add a new todo item to `todos` and return the new item. function addTodo( todos: Array<{id: number, name: string, completed: boolean}>, name: string, ): {id: number, name: string, completed: boolean} { // Implementation omitted for brevity. } // Get a todo item from `todos` by `id`. function getTodo( todos: Array<{id: number, na…
2024年8月26日

Flow 中的对象作为地图

尽管Map类型已经出现,但普通对象仍然是表示地图的一种非常常见的方式。为了支持这种模式,Flow 提供了一种非常灵活的方式来表达这一点。 对象映射的用处 假设你想编写一个函数来计算一份购物清单的总价。调用它的方式如下: // This would return 9.5 (4 + 3 + 2.5). getTotalCost({ eggs: 4, fruitSnacks: 3, toothpaste: 2.5, }); 列表可以包含任意数量的项目,因此您无法明确将每个项目声明为属性。此外,您需要确保它只接受数字,因此: getTotalCost({ eggs: 4, toothpaste: 2.5, milk: 'Too much', }); …会出现类型错误。 将类型声明为对象映射 就像 Flow 中的很多东西一样,它非常简单。只需在括号中声明一个类型键并赋予它类型: type Gro…
2024年8月26日

如何使用 Postfix、Dovecot、MySQL 和 SpamAssassin 配置邮件服务器

介绍 在本教程中,我们将在 Ubuntu 12.04 上使用 Postfix、Dovecot、MySQL 和 SpamAssassin 配置邮件服务器。 按照本教程,您将能够添加虚拟域、用户和别名。此外,您的虚拟服务器将免受垃圾邮件中心的侵害。 先决条件 在设置邮件服务器之前,您的 VPS 必须具备以下条件: * 域名正在转发到您的服务器(设置域名) * 安装并配置 MySQL(设置 mysql) * 具有 root 权限的用户(设置新用户- 省略步骤 5) * 配置并识别您的 FQDN(设置 FQDN) 可选:SSL 证书(设置免费签名的 SSL 证书) 可选(以 root 用户身份登录) 以 root 用户身份安装软件包很有用,因为您拥有所有权限。 sudo -i 输入您的用户密码。输入成功后,您将看到该$符号变为#。 步骤 1:安装软件包 apt-get install postfix postfi…
2024年8月26日

如何使用 MySQL 查询分析

介绍 在尝试分析数据库驱动应用程序的整体性能时,MySQL 查询分析是一种有用的技术。在开发中型或大型应用程序时,大型代码库中往往会分布着数百个查询,并且每秒可能会对数据库运行大量查询。如果没有某种查询分析技术,就很难确定瓶颈和应用程序速度变慢的位置和原因。本文将使用 MySQL 服务器内置的工具演示一些有用的查询分析技术。 什么是 MySQL 慢查询日志? MySQL 慢查询日志是 MySQL 发送慢速、可能有问题的查询的日志。此日志记录功能随 MySQL 一起提供,但默认情况下处于关闭状态。记录哪些查询由可自定义的服务器变量决定,这些变量允许根据应用程序的性能要求进行查询分析。通常,记录的查询是执行时间超过指定时间的查询或未正确命中索引的查询。 设置分析变量 设置 MySQL 慢查询日志的主要服务器变量是: slow_query_log G sl…