order_by的语法
order by用于对表进行排序。 详情参见 https://www.postgresql.org/docs/current/queries-order.htmlSELECT select_list FROM table_expression ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }] [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...] 当指定了多个表达式时,后面的值用于根据前面的值对相等的行进行排序。每个表达式后面都可以跟一个可选的ASC或DESC关键字,以将排序方向设置为升序或降序。可选参数NULLS F..
更多长见识,让大家看看什么是垃圾代码
在以前的文章中,在微信群中,我多次强调,写函数的时候,不要把所有参数放到一个大字典里面作为参数到处传,否则时间久了以后,根本不知道字典里面有哪些数据:1234def parse(data): name = data['name'] age = data['age'] xxx = data['xx']上面这样写,对原作者来说确实简单,但是如果代码还有别人来维护,他就根本不知道这个字典里面有哪些数据。必须要一层一层查找调用链,费时费力。但我是真的万万没想到,还有比上面这种写法更傻X的代码。真的可以称得上是垃圾中的垃圾。我们来看看下面这段代码。现在有一个类A,里面有两千多行代码。还有一个类B,里面有三千多行代码。这两个类里面有一些实例方法,有700多行代码。这些我都忍了。更要命的是,初始化类B..
更多一日一技:用一个奇技淫巧把字符串转成特定类型
我们有时候可能会需要把一个字符串转换成对应的类型。例如,把'123'转换为int类型的123;或者把'3.14'转成浮点数3.14。前提条件是不能使用eval或者exec。这是一个非常简单的功能,常规做法直接使用if判断就可以了:123456def convert(data, target_type): if target_type == 'int': return int(data) elif target_type == 'float': return float(data) ...有些同学觉得写if判断麻烦,也可能会用字典来处理:1234567def convert(data, target_type): type_map = { '..
更多一日一技:如何正确为历史遗留代码补充单元测试?
我们知道,在软件工程中,单元测试是保证软件质量的重要手段之一。一个优秀的代码,单元测试的代码量,经常会超过被测试的代码本身。一个理想化的开发团队,可能有三分之二的时间是在写测试,剩下的三分之一时间才是写业务代码。如果你的项目是从一开始就写单元测试,那么你写起来应该轻松又愉快,因为单元测试会促使你的代码自身变成可测试的代码。但如果你接手了一个大项目,里面已经有几十万行代码了,那么给这些代码补单元测试会让你知道什么叫做痛不欲生。你会发现有一些函数,它让你不知道怎么写测试代码。我们来看一个例子:我想测试的是business_code里面,check_data_dup分别返回True或者False的时候,下面代码的逻辑。也就是说,我只关心第18-27行的逻辑。这个时候不关心MySQL和Redis。但是每次测试都要..
更多一日一技:Python如何动态替换对象的方法?
今天有同学在公众号粉丝群问了这样一个问题:他的问题,简单来说,就是想动态替换一个对象的实例方法,简化代码如下:123456789101112class Test: def __init__(self, name): self.name = name def work(self, job): print(f'{self.name}正在{job}')def work(self, job1, job2): print(f'{self.name}正在同时做两个工作,分别是{job1}和{job2}')t = Test('kingname')t.work = work当我们在替换之前,直接运行t.work('job'),效果如下:这个同学期望在替换以后,运行t.work..
更多HCIE Datacom-01.2 IGP高级特性-OSPF-路由控制
简介OSPF的路由控制包括:调整OSPF的接口开销设置等价路由引入外部路由路由聚合缺省路由通告Filter-Policy对发送的LSA进行过滤对ABR Type3 LSA进行过滤设置LSDB中External LSA的最大数量案例本文章参考华为认证系列PPT等价路由当路由表中存在到达同一目的地址,且同一路由协议发现的多条路由时,若这几条路由的开销值(Cost)也相同,那么这些路由就是等价路由,可以实现负载分担。(OSPF选路基本靠Cost值)设备将按照负载分担的方式从多条等价路由发送报文到同一目的地址。 设置进行负载分担的等价路由的最大数量:12[Huawei-ospf-1] maximum load-balancing numberPS:默认为1,不进行等价路由。命令说明:[Huawei-ospf-..
更多Telegarf 通过代理访问 TG API 的几种方式
主要分为客户端代理和服务端代理, 一般情况下只需一个就可以了客户端代理clash 增强模式 / clash tun 模式这种情况下 clash 已经接管了所有流量, 直接启动就可以了, 不需要额外设置http agent需要有一个可以访问的 http 代理, 比如 clash 默认启动的本地 http 代理如果是手动写的 v2 配置文件, 可以参考 在 v2ray 中同时开启 socks 和 http 代理 来手动开启 http 代理服务 12345678const Telegraf = require('telegraf')const HttpsProxyAgent = require('https-proxy-agent')const bot = new Telegraf('bot_token', ..
更多反代Telegram Bot API
必备条件一台能正常访问 TG API 的机器NGINXhttps因为请求 TG API 走的是 HTTPS, 所以这里必须要 HTTPS 反代 核心配置可以自由的把这段 location 添加到已有的 nginx ssl 配置中, 用于实现反代不熟悉的 NGINX 的, 加错了自己修 配置检查, 重载: nginx -t && nginx -s reload1234567891011location ~* ^/bot { ## dns必须写,不然会报502错误 resolver 8.8.8.8; proxy_buffering off; proxy_pass https://api.telegram.org$request_uri; proxy..
更多Ubuntu 局域网广播主机名
背景比如下面的样子, 只显示匿名主机, 不像 windows 一样显示主机名修复步骤因为 smaba 使用的是 netbios 进行发现, 所以就往这方向弄了 修改 hostname 为 .local, 比如 dev.local. hostnamectl set-hostname dev.local修改需广播的主机 hosts 文件, 添加: 127.0.0.1 dev.local 之类的映射安装 netbios 软件: apt install nbtscan扫描内网: nbtscan 192.168.0.1/16路由器更新这个列表可能比较慢, 可以过段时间再回来检查扫描的时候可能会造成网络波动, 需注意… 看到其他的也有说用 mdns 的方式, 安装 avahi 进行多播, 未验证, 详见 Ref..
更多红帽的重复数据删除VDO
简介Virtual Data Optimizer(VDO)以重复数据删除(deduplication)、压缩和精简置备的形式为 Linux 提供内联数据降低。当您设置 VDO 卷时,您可以指定一个块设备来构建 VDO 卷以及您要存在的逻辑存储量。当托管活动的虚拟机或容器时,红帽建议按 10:1 的逻辑与物理比例配置存储:也就是说,如果您使用 1TB 的物理存储,则将其显示为 10TB 的逻辑存储。对于对象存储,如 Ceph 提供的类型,红帽建议使用 3:1 的逻辑与物理比例:1TB 的物理存储将显示为 3TB 的逻辑存储。在这两种情况下,您只需将文件系统放在 VDO 提供的逻辑设备之上,然后直接使用它,或将其作为分布式云存储架构的一部分。由于 VDO 是迅速置备的,所以文件系统和应用程序只会看到使用中的逻..
更多