202205

GTP-3算法是一种“暴力美学”的胜利: https://blog.csdn.net/mujie2015/article/details/115472443

李志飞把 GPT-3 形容为“一位科科都是高分的全才”。更让人激动的是,这么一个优秀的学生在学习过程中居然是无监督、完全自主驱动的,也就是学习过程它不需要人们提供有答案的练习题来复习测验(微调模型),只要给他无限多的文本序列,就能自动从文本里学到各种知识。

GPT-3 几乎是把整个互联网的浩瀚内容全部读完了。它总共阅读了大约 5000 亿词,模型大概有 1750 亿参数。系统有上万个 CPU/GPU 在 24 小时不间断地“阅读”任何领域的信息,半个月即可读完整个互联网的内容。猛灌数据量,是这个 AI 模型的“暴力”所在。

这个 GPT-3 这么神奇,他都能干什么?他其实可以做很多事情。比如他可以写作文,你给他开一个头,然后他就可以把整个文章写出来。而且他写出的文章句子非常通顺,更关键的是他段落之间逻辑也非常自洽。

网上有人把 GPT-3 写出来的文章和人类写出的文章给另外一个人判断,到底哪些机器写的,哪些是人类写的,其实人已经很难分出来了,所以他基本上可以以假乱真。


Gitlab Handbook
https://about.gitlab.com/handbook/


最近一周的数据

WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)  AND created_at <=  CURDATE()

statsd

https://github.com/statsd/statsd/blob/master/docs/metric_types.md

statsd 的 Timing mertic 不错,能自动统计周期内数据的分位值,均值,累积,标准差等。

glork:320|ms|@0.1

The glork took 320ms to complete this time. StatsD figures out percentiles, average (mean), standard deviation, sum, lower and upper bounds for the flush interval.

https://blog.csdn.net/liuxiao723846/article/details/109036280

percentThreshold

对于timer数据,除了正常的统计之外还会计算一个百分比的数据(过滤掉峰值数据),默认是90%。可以通过percentThreshold修改这个值或配置多个值。例如在config.js中配置:

//分别计算50%和80%的相关值
percentThreshold: [50, 80]

对于百分数相关的数据需要解释一下。以90为例,statsd会把一个flush期间上报的数据,去掉10%的峰值,即按大小取cnt*90%(四舍五入)个值来计算百分值。假如10s内上报以下10个值:

1,3,5,7,13,9,11,2,4,8

则只取10*90%=9个值,则去掉13。百分值即按剩下的9个值来计算。

$KEY.mean_90   // (1+3+5+7+9+2+11+4+8)/9
$KEY.upper_90  // 11
$KEY.lower_90  // 1

注:没有p99等指标。


分析过程:我们调取了 2021 年全年,好买基金 APP 上全部用户自建基金组合的收益表现情况与公募 FOF 的收益情况进行比较发现:

  • 胜率方面: 2021 年实现正收益的自建基金组合占比为 50.9%,同期 95.83% 的 FOF 基金在 2021 年实现了正收益;
  • 盈利能力方面:正收益的自建基金组合中,超 9 成收益集 中在 5% 以内,收益超过 5% 的自建组合占比仅为 3.66%; 同期,有 49.31% 的 FOF 基金收益在 5% 以内,有 45.83% 的FOF基金实现了 5% 以上的收益。

大家怎么看公墓FOF和现在流行的投顾服务,感觉比自己瞎买基金靠谱很多呀,专业的事让专业的人做,选股,择时,仓位管理,止盈止损,再平衡,都不需要自己操心。


一个类 Handler 有 3 个子类 AHandler, BHandler, CHandler 都有个 handle 方法。本来好好的,但突然 AHandler 支持批量操作了,有了一个 handleMany 方法。

下面哪个方案更好一些?

方案 A:

Class Handler                                  方案 B:
    abstract def handleMany(items)
                                                   Class Handler
Class AHandler extend Handler                          abstract handleMany(items): void
    def handleMany(self, items):                       abstract handle(item): void
        for item in items:                             abstract supportMany(): bool
            self.handle(item)
                                                   def main():
    def handle(item)                                   items = getItems()
        # call one by one api                          handler = getHandler()
                                                       if handler.supportMany():
Class BHandler extend Handler                              handler.handleMany(items)
    def handleMany(items):                             else:
        # call bulk api                                    for item in items:
                                                               handler.handle(item)
def main():
    items = getItems();
    handler = getHandler();
    handler.handleMany(items)

在线预览 office 文件, ppt, word, excel

git clone  https://gitee.com/kekingcn/file-online-preview.git
cd file-online-preview
mvn clean package -DskipTests -Prelease
docker build -t keking/kkfileview .
# 修改样式
https://gitee.com/kekingcn/file-online-preview/blob/master/server/src/main/resources/web/ppt.ftl

docker run -it -p 0.0.0.0:8012:8012 keking/kkfileview

Reddit算法分析 https://blog.csdn.net/yzllz001/article/details/54969248

这种算法的一个问题是,对于那些有争议的文章(赞成票和反对票非常接近),它们不可能排到前列。假定同一时间有两个帖子发表,文章A有1张赞成票(发帖人投的)、0张反对票,文章B有1000张赞成票、1000张反对票,那么A的排名会高于B,这显然不合理。

结论就是,Reddit的排名,基本上由发帖时间决定,超级受欢迎的文章会排在最前面,一般性受欢迎的文章、有争议的文章都不会很靠前。这决定了Reddit是一个符合大众口味的社区,不是一个很激进、可以展示少数派想法的地方。


Snowflake 雪花算法 https://zhuanlan.zhihu.com/p/142123673

分布式系统中ID生成方案,比较简单的是UUID(Universally Unique Identifier,通用唯一识别码),但是其存在两个明显的弊端:

  • 一、UUID是128位的,长度过长;
  • 二、UUID是完全随机的,无法生成递增有序的UUID。

Snowflake 雪花算法,由Twitter提出并开源,可在分布式环境下用于生成唯一ID的算法。该算法生成的是一个64位的ID,故在Java下正好可以通过8字节的long类型存放。

Snowflake 雪花算法生成的ID不是随机的,而是按时间顺序升序排列的;且可以保证在分布式高并发环境下生成的ID不会发生重复


How can I get past a “Repository is not signed…” message when attempting to upgrade Kali Linux from a mounted disk image?
https://superuser.com/questions/1331936/how-can-i-get-past-a-repository-is-not-signed-message-when-attempting-to-upgr

apt-get install 报错

apt-get update --allow-unauthenticated
apt-get update --allow-insecure-repositories

deb [trusted=yes] file:/media/cdrom0 kali-rolling main contrib non-free

彻底弄懂Redis的内存淘汰策略 https://zhuanlan.zhihu.com/p/105587132

Redis中的内存淘汰策略和过期删除策略 https://www.cnblogs.com/xiaowangbangzhu/p/16159367.html

有人往 redis 里放了大量的内容,还设置了永久不过期,需要设置内存淘汰策略,永久 key 也清理。

Redis中共有下面八种内存淘汰策略:

  • volatile-lru:设置了过期时间的key使用LRU算法淘汰;
  • allkeys-lru:所有key使用LRU算法淘汰;
  • volatile-lfu:设置了过期时间的key使用LFU算法淘汰;
  • allkeys-lfu:所有key使用LFU算法淘汰;
  • volatile-random:设置了过期时间的key使用随机淘汰;
  • allkeys-random:所有key使用随机淘汰;
  • volatile-ttl:设置了过期时间的key根据过期时间淘汰,越早过期越早淘汰;
  • noeviction:默认策略,当内存达到设置的最大值时,所有申请内存的操作都会报错(如set,lpush等),只读操作如get命令可以正常执行;

https://github.com/hexojs/hexo-renderer-markdown-it

hexo 默认的 markdown 解析器,不支持标题自动加锚点,可以用这个插件来解决。

$ npm un hexo-renderer-marked --save
$ npm i hexo-renderer-markdown-it --save

配置如下, 要启用 permalink ,在标题左边会加一个链接,分享这个链接,别人打开后可以直接定位到具体的位置。 另外 level: 2 表示二级标题才会生成链接,一级标题不会。

markdown:
  preset: 'default'
  render:
    html: true
    xhtmlOut: false
    langPrefix: 'language-'
    breaks: true
    linkify: true
    typographer: true
    quotes: '“”‘’'
  enable_rules:
  disable_rules:
  plugins:
  anchors:
    level: 2
    collisionSuffix: ''
    permalink: true 
    permalinkClass: 'header-anchor'
    permalinkSide: 'left'
    permalinkSymbol: '¶'
    case: 0
    separator: '-'

CloudWatch Logs Insights query syntax
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html

cloudwatch 查询语法中的几个常用指标聚合函数

  • avg(fieldName: NumericLogField): The average of the values in the specified field.
  • count_distinct(fieldName: LogField): Returns the number of unique values for the field. If the field has very high cardinality (contains many unique values), the value returned by count_distinct is just an approximation.
  • pct(fieldName: LogFieldValue, percent: number): A percentile indicates the relative standing of a value in a dataset. For example, pct(@duration, 95) returns the @duration value at which 95 percent of the values of @duration are lower than this value, and 5 percent are higher than this value.
  • stddev(fieldName: NumericLogField): The standard deviation of the values in the specified field.

查看 mysql 的数据目录

mysql> show variables like '%datadir%';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| datadir       | /data_xxx/mysql_data_dir/ |
+---------------+---------------------------+
1 row in set (0.00 sec)

自建博客图床
https://blog.csdn.net/dysonya/article/details/123569457

PicGo
https://github.com/Molunerfinn/PicGo/releases
https://picgo.github.io/PicGo-Doc/zh/guide/config.html

可以用阿里云 OSS 或 腾讯云 COS 做存储。配置腾讯云 COS 后,如果提示下面的错误,可尝试切换下 API 的版本,默认是 V5,切换到 V4 就能解决。

StatusCodeError: 403 - "You do not have permission to get URL 'xxx' from this server."

有一点不太好的地方就是 PicGo 帮助文档里写的是使用全局的 SecreId 和 SccreKey,权限上给的有点大,应该新建一个 CAM 子账户,设置只能访问某个对象存储的桶,并生成一对密钥访问 API 更安全一些。

测试一张图片


word count

mysql 里如何统计一个字符串里某个字符出现的次数呢?
https://bookofzeus.com/articles/mysql/count-the-number-of-occurrences-of-a-char-in-mysql/

mysql> select `id`, `url`, LENGTH(`url`) - LENGTH(REPLACE(`url`, '/', '')) as `number` from `url`;
+----+-------------------------------+--------+
| id | url                           | number |
+----+-------------------------------+--------+
|  1 | http://www.thesunrisepost.com |      2 |
+----+-------------------------------+--------+

统计一个文本里单词个数

mysql> set @text=' aa bbb  cccc   ddddd ';select length(REGEXP_REPLACE(TRIM(@text), ' +', ' '))-length(REPLACE(REGEXP_REPLACE(TRIM(@text), ' +', ' '),' ','')) +1 word_count;
Query OK, 0 rows affected (0.00 sec)

+------------+
| word_count |
+------------+
|          4 |
+------------+
1 row in set (0.00 sec)

mysql regex replace

How to do a regular expression replace in MySQL?
https://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql

# for mariadb
SELECT REGEXP_REPLACE("stackoverflow", "(stack)(over)(flow)", '\\2 - \\1 - \\3')
over - stack - flow

# for mysql 8.0
mysql> SELECT REGEXP_REPLACE("stackoverflow", "(stack)(over)(flow)", '$2 - $1 - $3');
+------------------------------------------------------------------------+
| REGEXP_REPLACE("stackoverflow", "(stack)(over)(flow)", '$2 - $1 - $3') |
+------------------------------------------------------------------------+
| over - stack - flow                                                    |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT IF('ABC1' REGEXP 'ABC[0-9]$','ABC','ABC1');
+--------------------------------------------+
| IF('ABC1' REGEXP 'ABC[0-9]$','ABC','ABC1') |
+--------------------------------------------+
| ABC                                        |
+--------------------------------------------+

mysqldump -u user -p database table > dump.sql
find /path/to/dump.sql -type f -exec sed -i 's/old_string/new_string/g' {} \;
mysqlimport -u user -p database table < dump.sql

你可能在一个人面前,一文不值;却在另一个人面前,是无价之宝。做你自己,爱你的人,自然爱你。谨记自己的价值所在,这就是,人活着的道理。

—— 杨绛

投资中不要去追求完美,追求完美的人就算告诉你什么时候买卖你都会失败,因为你总想买在最低卖在最高,结果导致你不是踏空就是坐过山车!退而求其次方为可把握的正道。买在次低位,卖在次高位,我很满足,方可持续。

别人本质上是没办法让你自卑的。让你自卑的是你的想法或内在的自我攻击。

“少研究别人,多提升自己,不是成功来的慢,是你努力的不够狠,努力只能及格,拼命才能优秀。”

其实,大多数餐饮店,顾客根本不在意你装修啥样,弄那么多花样,根本不加分。吃的东西弄干净一点,桌子椅子方便就行,又不是当皇上来了,弄个死沉死沉的太师椅干啥啊?傻乎乎的。

人和人之间最大的差距,不是智商的差距,而是目标清晰度的差距。如果整天不知道自己想要什么,五迷三道,那么实际上是丧失了对生活的热忱。麻木僵硬,行尸走肉;虽然活着,但已经死了。简称:活死人。

我看过90年代的下岗潮、房地产泡沫、感受过08年股灾,从来没有看到过,像现在这么大的裁员、那么多店关闭,以及,今天又看到,这么多银行沦陷。从来没有。

形式很不好了,大家要保全实力:
1、不要贷款
2、不要高消费
3、好好工作
4、积极锻炼
5、好好吃饭、好好睡觉
6、不要借钱给别人
7、不要和别人(包括同事)发生争执
8、多读书、考证、练技能

想的时间越长,就越不想去干。 我猜是大脑对此太熟悉,就以为自己已经干过了。

每个人都有自己的长处,这句话小时候都听过吧?这句话的正确理解是,你总能找到一个方向,让你饿不死能混口饭吃,而不是你踢球不行换了体操就能打进世锦赛奥运会争金牌了。

你的孩子病了,你陷入了繁重的债务。接下来是家里的事,你的另一半花光了所有积蓄,留下孩子和一堆账单离开了你。就别再提什么去夜校学习了。在评价别人之前,要记住努力并不代表所有,而且每个人的努力也并非建立在同样公平的前提之上。——卡罗尔·德韦克《终身成长》


java hello world

Java包的定义及使用
https://www.jianshu.com/p/c798a019f2ec

编码

$ vi Hello.java
package com.ihuhao.demo;

public class Hello {
    public static void main(String args[]) {
        System.out.println("Hello world !");
    }
}

编译执行

$ javac -d . Hello.java
$ tree
.
├── com
│   └── ihuhao
│       └── demo
│           └── Hello.class
├── Hello.java

$ java com.ihuhao.demo.Hello

打包执行

$ jar -cvf my.jar com
$ rm com -rf
$ java -classpath './my.jar' com.ihuhao.demo.Hello

java 使用第三方库

Maven Repository 网站搜索需要的 jar 包: https://mvnrepository.com/artifact/com.google.code.gson/gson

$ mkdir lib
$ cd lib
$ wget https://repo1.maven.org/maven2/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar
$ cd ..

$ vi GsonTest.java
package com.ihuhao.demo;

import java.util.HashMap;
import java.util.Arrays;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonTest {
    public static void main(String args[]) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        HashMap<String, Object> map = new HashMap<>();
        map.put("name", "wawa");
        map.put("age", 18);
        map.put("skills", Arrays.asList("吃饭", "睡觉", "打豆豆"));

        String json  = gson.toJson(map);
        System.err.println(json);
    }
}

$ javac  -classpath './lib/gson-2.9.0.jar' -d . GsonTest.java
$ java -classpath '.:./lib/gson-2.9.0.jar' com.ihuhao.demo.GsonTest
{
  "skills": [
    "吃饭",
    "睡觉",
    "打豆豆"
  ],
  "name": "wawa",
  "age": 18
}

本地编译的 java 程序,依赖的 JDK 库和编译时用的 java 编译器,都要和生产环境一致,否则运行时会报错。
本地的 Tomcat 版本和 生成环境也要一致。


java arrays

import java.util.Arrays;

public class ArraysTest {
    public static void main(String[] args) {
        int[][] nums = {{1,2},{3,4}};
        System.out.println(Arrays.deepToString(nums));

        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        System.out.println("数字 62出现的位置:"+Arrays.binarySearch(a, 62));
    }
}

vim 开发 java

常见的代码块快捷键:.vim/plugged/vim-snippets/snippets/java.snippets

im
    import java.util.; 
cl
    public class ArraysTest {

    }
main
    public static void main(String[] args) {

    }
sout 
    System.out.println(); 
d.al     
    List<Object> list = new ArrayList<Object>();
d.hm
    Map<Object, Object> map = new HashMap<Object, Object>();

设置 F5 编译运行

$ vim ~/.vimrc
" 当前文件为 java 时 F5 自动编译运行
autocmd FileType java nnoremap <buffer> <F5> :!javac %&&java %:r<CR>

vim 开发 java 最精简配置,写点测试代码,算法代码很方便。


vim 映射

Vimscript 基本映射 https://www.w3cschool.cn/vim/mh1uyozt.html

" 映射普通键
:map - x
" 映射空格
:map <space> viw
" 映射 ctrl + d
:map <c-d> dd

Vimscript 模式映射 https://www.w3cschool.cn/vim/n41ghozt.html

你可以使用nmap、vmap和imap命令分别指定映射仅在normal、visual、insert模式有效。

Vimscript 精确映射 https://www.w3cschool.cn/vim/sxjqcozt.html

Vim提供另一组映射命令,这些命令创建的映射在运行时 不会 进行递归。

:nmap x dd
:nnoremap \ x

每一个map系列的命令都有个对应的noremap命令,包括:noremap/nnoremap、 vnoremap和inoremap。这些命令将不递归解释映射的内容。

该何时使用这些非递归的映射命令呢? 答案是: 任何时候 。

Vimscript Leaders https://www.w3cschool.cn/vim/8y7cnozt.html

:let mapleader = "-"
:nnoremap <leader>d dd

快捷键映射

:nnoremap          <leader>d dd
:nnoremap <buffer> <leader>x dd

表示只在定义它的那个缓冲区中有效。


vim 命令大全

https://www.w3cschool.cn/vim/cjtr1pu3.html


使用Zerotier+Moon结点内网穿透
https://blog.csdn.net/it_LiChengwei/article/details/120934792

zerotier定义了几个专业名词:
PLANET 行星级的服务器,zerotier各地的根服务器,有日本、新加坡等地。
MOON 卫星级服务器,用户自建的私有根服务器,起到中转加速的作用。
LEAF 相当于各个枝叶,就是每台连接到该网络的机器节点。

使用VPS免费搭建Zerotier Moon
https://zhuanlan.zhihu.com/p/405979685

Zerotier可以组建P2P直连虚拟局域网,你可以在公司使用微软自带的远程连接直连自己公司的电脑,访问共享远程控制等。想要P2P访问必须先通过一个中继服务器握手或者转发流量,官方节点速度很慢,所以最好自己搭建Moon节点中继。

Moon节点要求不能DDNS,所以家里公网IP也没法搭,而且由于P2P不成功的话,必需通过Moon中继流量,所以最好使用国内的VPS。


jetty

Jetty 使用教程

Jetty 是一个提供 HTTP 服务器、HTTP 客户端和 javax.servlet 容器的开源项目。

export JETTY_HOME="/home/ubuntu/download/jetty-distribution-9.4.46.v20220331"
cd $JETTY_HOME/demo-base/
java -jar $JETTY_HOME/start.jar
java -jar $JETTY_HOME/start.jar --list-modules
java -jar %JETTY_HOME/start.jar --list-config

JETTY_BASE=/tmp/mybase
mkdir $JETTY_BASE
java -jar $JETTY_HOME/start.jar --add-to-startd=http,deploy
cp $JETTY_HOME/demo-base/webapps/async-rest.war webapps/ROOT.war
java -jar $JETTY_HOME/start.jar

jetty、jetty原理、jetty与tomcat区别

jetty特点

  • jetty是异步的,支持更高的并发量
  • jetty更灵活,更加轻量,更容易定制,更高的资源利用率
  • Jetty 默认采用的 NIO 模型,jetty能很好支持长链接
  • 集成简单,应用只要集成jetty,应用就可以快速支持 http 服务

jetty与tomcat区别

  • Jetty 比 Tomcat 架构更加简单。
    • jetty的所有组件都是基于 Handler 来实现,它的主要功能扩展都可以用 Handler 来实现;
    • Tomcat 的整体设计上很复杂,tomcat是基于容器的架构,开发者要想扩展tomcat功能就需要了解tomcat架构,遵循tomcat的规范。
  • jetty比较容易扩展第三方框架,所以也跟容易定制
  • jetty更加轻量可以节省内存
  • tomcat更加稳定、更加成熟,在企业级中占有率很大

C 语言计时

https://blog.csdn.net/fz_ywj/article/details/8109368

  • time_t time(time_t * timer):
    • C 标准库中的函数,可移植性最好,性能也很稳定,但精度太低,只能精确到秒,对于一般的事件计时还算够用,而对运算时间的计时就明显不够用了。
    • 用 difftime 函数可以计算两个 time_t 类型的时间的差值,可以用于计时。用 difftime(t2,t1) 要比 t2-t1 更准确,因为 C 标准中并没有规定 time_t 的单位一定是秒,而 difftime 会根据机器进行转换,更可靠。
  • clock_t clock(void):
    • 该函数返回值是硬件滴答数,要换算成秒,需要除以 CLOCKS_PER_SEC。
    • 可以精确到毫秒,适合一般场合的使用。
  • int gettimeofday(struct timeval *tv,struct timezone *tz);
    • 其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。
    • 使用这种方式计时,精度可达微秒。经验证,在arm+linux的环境下此函数仍可使用。推荐。

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <time.h>
#include <stdio.h>
#include <math.h>
#include <sys/time.h>

int main(int argc, char *argv[])
{
time_t start1, end1;
start1 = time(NULL);
for (int i = 0; i < 300000000; ++i) sqrt(i);
end1 = time(NULL);
printf("time=%f\n", difftime(end1, start1));

clock_t start2, end2;
start2 = clock();
for (int i = 0; i < 300000000; ++i) sqrt(i);
end2 = clock();
printf("time2=%f\n",(double)(end2-start2)/CLOCKS_PER_SEC);

struct timeval start3, end3;
gettimeofday(&start3, NULL );
for (int i = 0; i < 300000000; ++i) sqrt(i);
gettimeofday(&end3, NULL );
long timeuse =1000000 * (end3.tv_sec - start3.tv_sec ) + end3.tv_usec - start3.tv_usec;
printf("time3=%f\n",timeuse /1000000.0);

return 0;
}

$ gcc 042.c -lm && ./a.out
time=3.000000
time2=2.407064
time3=2.460698

把这句翻译成英文:这是小明做的我们和其它公司收入的对比结果。

  • youdao: This is the result of comparing our revenue with that of other companies made by Xiaoming.
  • youdao2: This is xiao Ming do we and other comparison results of the company’s revenues.
  • baidu: This is the result of Xiaoming’s comparison of our income with that of other companies.
  • deepl: This is the result of the comparison of our revenue with other companies made by Xiaoming.
  • google:This is Xiao Ming’s comparison of our revenue with other companies.
  • bing:This is the result of Bob’s comparison of our revenue with other companies.
  • a: This is a revenue comparison made by Xiaoming between our company and other companies.
  • b: this is the result of compare of our and other companies on revenue which is by xiaoming.

大家觉得哪个翻译的好一些。


Nix 会超越 Docker 吗?https://www.163.com/dy/article/H5QCFQGO0511FQO9.html

  • Docker 镜像只是 Docker 提供的一小部分,Docker 为整个容器生态系统提供了工具。 而 Nix 的设计旨在构建可重现的包和环境。
  • 如果你的目的是构建可重现的开发环境,则选用 Nix 更合适。
  • 如果你希望寻找一种方法来构建、打包和部署自己的服务,则 Docker 提供的更丰富的工具更适合你。毕竟,容器乃是如今部署 Web 服务的标准方式。

Nix从0到0.1(神奇的包管理工具)https://zhuanlan.zhihu.com/p/392711598

  • Nix作为一个包管理工具,不仅仅完成了管理包的职能,还兼具了快速搭建环境、创建不同版本开发环境的职能,对于需要同一开发工具的同学来说也算是一个很有用的地方吧。
  • 对同一环境会有对应的历史记录,支持版本回滚。
  • Nix支持环境配置文件的编写,在任何一台装有Nix的机器上面都可以实现环境的完美复原,对外部的依赖只有Nix,而且对本身系统所安装的东西影响几乎为零,在我看来安全性也是有所保证的。

Postgresql关于wal日志总结,一文搞清楚它的所有概念和相关操作
https://blog.csdn.net/lusklusklusk/article/details/123603833

简单地说,WAL的核心概念是,对数据文件(表和索引所在的地方)的更改必须在写入了日志文件后这些更改之后才可以写入数据文件,也就是说,描述更改的日志记录被刷新到永久存储之后才可以写数据文件。

使用WAL可以显著减少磁盘写操作的数量,因为只需要将日志文件刷新到磁盘以确保提交事务,而不是事务更改的每个数据文件。日志文件是按顺序写入的,因此同步日志的成本要比刷新数据页的成本低得多。

备注:数据库将脏数据刷到数据文件上,这个动作是随机I/O,性能比写日志的顺序I/O差太多

总结

  • WAL即Write Ahead Log预写式日志,简称wal日志,相当于oracle中的redo日志。只是oracle中redo是固定几个redo日志文件,然后轮着切换去写入。pg中wal日志是动态切换,单个wal日志写满继续写下一个wal日志,连续不断生成wal日志。
  • 单个WAL文件的大小,默认为16MB,参数是wal_segment_size,可以理解为PG把Wal日志存储到N个大小为16M(默认值)的WAL segment file,一般不做更改
  • 如果使用了 WAL 归档,旧的段在被归档之前不能被不能删除或回收,直到它们被归档。如果WAL归档跟不上WAL生成的速度,或者archive_command重复失败,旧的WAL文件将在pg_wal中累积,直到问题解决。
  • 如果max_wal_size和wal_keep_segments没起作用导致wal_pg目录下面的wal日志文件不自动删除从而越来越多,原因主要是负载过重、archive_command失败或wal_keep_segments设置过高
  • 正常情况下pg_wal目录下的wal文件为在线WAL日志,不能删除,删除后如果遇到数据库重启则会丢失数据
  • pg_wal日志没有设置保留周期的参数,即没有类似mysql的参数expire_logs_days,在检查点之后,当旧的wal日志文件不再需要时,它们将被删除或回收(按编号顺序重命名为将来的段)。
  • PostgreSQL在写入频繁的场景中,会产生大量的WAL日志,而且WAL日志量会远远超过实际更新的数据量,这就叫做“WAL写放大”,产生的原因主要有以下两点。说个题外话当年Uber也是这个原因之一把pg切换成了mysql,参见https://eng.uber.com/postgres-to-mysql-migration/
    • full page writes,PostgreSQL会在一个checkpoint检查点之后的页面的第一次修改期间将每个页面的全部内容写到Wal文件
    • update时如果新记录位置发生变更,索引记录也要相应变更,这个变更也要记入WAL。而索引记录的变更又有可能导致索引页的全页写,进一步加剧了把内容写到Wal文件。

PostgreSQL之wal_keep_segments参数
https://blog.csdn.net/qq_35462323/article/details/115381735


what does %WCPU column mean in TOP output ?
https://community.hpe.com/t5/HP-UX-General/what-does-WCPU-column-mean-in-TOP-output/td-p/3011779

%WCPU is “Weighted CPU (central processing unit) percentage”

%CPU is “Raw CPU percentage. This field is used to sort the top processes”.

The %WCPU is just a ‘forecast’ value for the process. It really has no real world value. It’s value is totally controlled by the scheduler.

The man page for top(1) indicates that %CPU is the “Raw CPU percentage. This field is used to sort the top processes”.

Well, the %CPU is the total percentage without the ‘forecast’ factor built-in, such as a ‘raw value.’


PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)
https://blog.csdn.net/weixin_34102807/article/details/90588528

资源分为多个维度,CPU,内存,IO等。如何能了解各个维度层面的TOP SQL呢?

pg_stat_statements插件可以用于统计数据库的资源开销,分析TOP SQL。


一分钟抓一次耗费CPU最高的进程

1
2
3
4
5
6
7
8
9
10
11
$ cat cron_cpu_stat.sh
date
ps -Ao pid,pcpu,pmem,cmd --sort=-pcpu | head -n 10
echo '==================='

$ sudo touch /var/log/cpu_stat.log
$ sudo chown $USER /var/log/cpu_stat.log
$ ls -l /var/log/cpu_stat.log
$ crontab -l
* * * * * cd /home/ubuntu && bash cron_cpu_stat.sh >> /var/log/cpu_stat.log 2>&1
$ tail -f /var/log/cpu_stat.log

How to Check Cron Logs on Ubuntu 18.04
https://linoxide.com/check-cron-logs-ubuntu/

ubuntu 上单独查看 crontab 的日志

sudo vi  /etc/rsyslog.d/50-default.conf

    cron.* /var/log/cron.log

sudo systemctl restart rsyslog

tail -f /var/log/cron.log

一组语料,如何提取出现频率最高的短语,而不是单词,比如

good morning Sir.
good morning teacher.
good morning class.
good afternoon Sir.
good afternoon teacher.

我要得到出现次数最多的 top 2 的短语 “good morning” 和 “good afternoon”
而不是出现次数最多的 top 2 的单词 “good” 和 “morning”

算法复杂度大概是多少?


计算一组数据的分散程度

How to Calculate the Coefficient of Variation in Python
https://www.statology.org/coefficient-of-variation-in-python/

Python统计学(四)——离散性测度
https://zhuanlan.zhihu.com/p/344919136

  • 极差的概念很容易理解,一个样本中最大与最小观测值之间的差异称为极差(range)
  • 平均离差就是样本中全部数值与它们均值变动的平均数量来度量离散程度。
  • 分位数也叫百分位数,最常使用的有四分位数(25,50,75),五分位数(20,40,60,80)和百分位数(10,20,30,…,90)。
  • 方差和标准差是日常统计中应用非常广泛而且频繁的指标之一
  • 方差的量纲是原数据量纲的平方,标准差的量纲跟原数据的量纲是一样的,这就是为什么标准差运用得比方差更广泛。但是,在不同量纲的数据之间做比较时,标准差就不能使用了,因为单位都不一样,不用简单作比较。这个时候变异系数(coefficient of variation, CV)就派上用场了。变异系数就是标准差除以均值的百分比,变异系数是一个无量纲的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> np.std([2,2,2,2,2])
0.0
>>> np.std([8,2,0,0,0])
3.0983866769659336
>>> np.median([2,2,2,2,2])
2.0
>>> np.median([8,2,0,0,0])
0.0
>>> cv = lambda x: np.std(x, ddof=1) / np.mean(x) * 100
>>> cv([2,2,2,2,2])
0.0
>>> cv([8,2,0,0,0])
173.20508075688772

Python统计学(三)——位置测度
https://zhuanlan.zhihu.com/p/344780317

  • 样本均值(算术平均数)
  • 加权平均数是算术平均数的一种特殊情形。当有几个相同数值的观测值时,算术平均数就会变成加权平均数。
  • 中位数:将一组数据从最小到最大、或者从最大到最小排序以后,位于中点的数值。
  • 众数:在一个样本的所有观察值中,发生频率最大的一个值称为样本的众数。
  • 几何平均数在商业、工业、金融当中应用非常广泛,特别是涉及到随时间推移的平均变动时,几何平均数就派上用场。比如计算营业额增长率、复利、GDP等。
  • 调和平均数仅适合于有限数量的应用情形,比如计算股票的平均成本等。它是对于观测值的倒数进行求和后再求平均,最后将平均值求倒数后得到。

Python统计学(五)——切比雪夫、偏度及峰度
https://zhuanlan.zhihu.com/p/346810231

  • 当得知样本观察值呈正态分布时,可以用前面的正态经验法则来评估数据大约有多大比例集中在什么范围内;当然,如果不清楚数据分布情况,或者数据分布不是正态分布,那么我们可以利用切比雪夫定理来做评估。
  • 一个分布如果不对称,则被称为偏度。分布有对称、正偏(右偏)、负偏(左偏)。正偏的分布表现出右侧长尾,负偏的分布具有左侧长尾。正偏的单峰分布,其众数要小于中位数,而中位数又小于均值;负偏的单峰分布刚好相反。
  • 一个分布如果不对称,则被称为偏度。分布有对称、正偏(右偏)、负偏(左偏)。正偏的分布表现出右侧长尾,负偏的分布具有左侧长尾。正偏的单峰分布,其众数要小于中位数,而中位数又小于均值;负偏的单峰分布刚好相反。
  • 峰度是一个统计度量指标,它告诉我们一个分布的峰值比正态分布更高还是更低。标准差越小,曲线越陡;标准差越大,曲线越平缓。
  • 一个分布的峰值如果比正态分布要大,称其为尖峰的(leptokurtic),一个分布的峰度如果等于正态分布,称其为中峰的(mesokurtic),一个分布的峰度如果比正态分布要小,称其为低峰的(platykurtic)。
  • 对于所有正态分布来说峰度等于3,许多统计软件会给出超额峰度(excess kurtosis),也就是峰度减去3之后的值。一个正态分布或者其他中峰分布的超额峰度为0, 一个尖峰分布的超额峰度大于0,一个低峰分布的超额峰度小于0。
  • 标准差会影响正态分布曲线的高度,值均的不同会让曲线进行左右平移。

Statsmodels 统计包之 OLS 回归
https://blog.csdn.net/qq_17119267/article/details/79108333

jupyter 里输出表格

1
2
3
4
5
6
7
from IPython.display import HTML, display
import tabulate
table = [["Sun",696000,1989100000],
["Earth",6371,5973.6],
["Moon",1737,73.5],
["Mars",3390,641.85]]
display(HTML(tabulate.tabulate(table, tablefmt='html')))

How do I output lists as a table in Jupyter notebook?
https://newbedev.com/how-do-i-output-lists-as-a-table-in-jupyter-notebook

tabulate:在 Python 中可如此优雅地创建表格
https://zhuanlan.zhihu.com/p/485136394


How we improved DNS record build speed by more than 4,000x
https://blog.cloudflare.com/dns-build-improvement/


python matplotlib 双y轴图像实现
https://blog.csdn.net/weixin_48964486/article/details/124134584

其中第一个坐标系正常创建,第二个坐标系则使用专有的 twinx() 方法创建。因为有了两个 y 轴,如果再简单地使用 plt.ylabel() 等方法,则只能操作到左轴,而影响不到右轴。

data1 = [random.randint(1,50) for x in range(10)]
data2 = [random.randint(1,1000) for x in range(10)]

fig = plt.figure(figsize=(10, 8))

ax1 = fig.add_subplot(111)
ax1.set_ylabel('左 Y 轴')
ax1.plot(data1)

ax2 = ax1.twinx()
ax2.plot(data2, color='#3399ff', linestyle='--', marker='o', linewidth=2)
ax2.set_ylabel('右 Y 轴')

plt.show()

数学

实践线性规划:使用 Python 进行优化
https://bbs.huaweicloud.com/blogs/317032

线性规划是数学规划中使用的一组技术,有时称为数学优化,用于求解线性方程组和不等式系统,同时最大化或最小化某些线性函数。它在科学计算、经济学、技术科学、制造、运输、军事、管理、能源等领域很重要。

用python解决线性规划
https://bbs.huaweicloud.com/blogs/317032

Numpy中np.dot与np.matmul的区别
https://blog.csdn.net/ACTerminate/article/details/96151132

python实现最小二乘法
https://www.csdn.net/tags/MtTaIg1sMDc5MTQtYmxvZwO0O0OO0O0O.html

Python最小二乘法拟合与作图
https://www.jianshu.com/p/8850b94ec61c

线性代数下的最小二乘法及numpy运算案例
https://zhuanlan.zhihu.com/p/369173593

def least_squares(x,y):
    ones = np.ones((len(x)))
    A = np.c_[ones,x]
    ATA = A.T.dot(A)
    ATb = A.T.dot(y)
    inv_ATA = np.linalg.inv(ATA)
    solution = inv_ATA.dot(ATb)
    return solution

Python手工实现朴素贝叶斯分类及预测
https://zhuanlan.zhihu.com/p/486313053

简洁高斯朴素贝叶斯分类原理及python实现
https://blog.csdn.net/qq_45656248/article/details/118796503
https://baijiahao.baidu.com/s?id=1691227678810779479&wfr=spider&for=pc

这是每个数据科学职业生涯开始时的经典:朴素贝叶斯分类器。或者更应该说是朴素贝叶斯分类器家族,因为它们有很多种风格例如,有多项式朴素贝叶斯,伯努利朴素贝叶斯,还有高斯朴素贝叶斯分类器,每个分类器在一个小细节上都不同,我们会发现:朴素贝叶斯算法在设计上非常简单,但在许多复杂的实际情况下被证明是有用的。

Numpy实现NaiveBayes(朴素贝叶斯)
https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/121558563

numpy实现朴素贝叶斯模型(高斯分布)
https://www.jianshu.com/p/efa980944235

数值分析-雅克比迭代法
https://blog.csdn.net/ITGGU/article/details/122169136


postgree 的终端工具 psql 里输入 \x on 可以让输出结果按列显示,相当于 mysql client里的 \G


蒙特卡洛模拟股票曲线,设置均值,标准差,以及跳空高开和跳空低开的概率
https://github.com/boyac/pyOptionPricing

用python动手实践与学习大数定律与中心极限定理
https://zhuanlan.zhihu.com/p/394395551

各种分布的随机数生成器
https://numpy.org/doc/stable/reference/random/generator.html#distributions
https://blog.csdn.net/weixin_42029738/article/details/81977492

离散分布的相关对象,每个对象有概率质量函数,累计分布函数,百分位函数,分布描述这些
https://docs.scipy.org/doc/scipy/reference/stats.html#discrete-distributions

  • rvs(n, p, loc=0, size=1, random_state=None) Random variates.
  • pmf(k, n, p, loc=0) Probability mass function.
  • cdf(k, n, p, loc=0) Cumulative distribution function.
  • ppf(q, n, p, loc=0) Percent point function (inverse of cdf — percentiles).
  • stats(n, p, loc=0, moments=’mv’) Mean(‘m’), variance(‘v’), skew(‘s’), and/or kurtosis(‘k’).