- concurrency(并发) and parallellism(并行)
- distribution/分布式
- design patterns
- algorithm and datastructure
- awesome xxx and mark
- leetcode
- blogs
- tool
- serverless
- 统计
并发就是可同时发起执行的程序,指程序的逻辑结构; 并行就是可以在支持并行的硬件上执行的并发程序,指程序的运⾏状态。
换句话说,并发程序代表了所有可以实现并发行为的程序,这是一个比较宽泛的概念,并行程序也只是他的一个子集。 并发是并⾏的必要条件;但并发不是并⾏的充分条件。 并发只是更符合现实问题本质的表达,目的是简化代码逻辑,⽽不是使程序运⾏更快。 要使程序运⾏更快必是并发程序加多核并⾏。
简言之,并发是同一时间应对(dealing with)多件事情的能力;并行是同一时间动手做(doing)多件事情的能力。
- ppt:Go并发编程
- repo:深入go并发编程
- post:并发编程导论
- [深入理解计算机系统]
共识是可容错系统中的一个基本问题:即使面对故障,服务器如何在共享状态上达成一致? 这个问题出现在需要提供高可用性且不能在一致性上妥协的各种系统中
- raft,中文翻译 Paxos共识算法复杂且难以理解.在设计Raft时,作者通过分解(Raft分离了领导者选举,日志复制,和安全性)和 状态空间缩减(Raft减少了不确定程度和服务器彼此之间不一致的方式)提高可理解性. 节点状态: 领导者,跟随者,候选人.
- raft,in English
- raft,可视化
sort/search/bitmap
tree/list/array
- awesome-go-cn,Go框架、库和软件的中文收录大全
- 开发者头条,博客/公众号各种站点资讯,提供订阅服务
- 架构师
- github 资讯
- repo: algorithm & data structure
- repo: it资料大全
- repo: k8s-tutorials
- bytebytego: system design interview
- bytebytego: Newsletter
- mysql 8.0 document
- repo: TiDB Talent-Plan,分布式数据库,分布式系统
- 极客时间 丁奇 Mysql45讲
- SQL 审核查询平台
- mysql 日期相关函数
- 知乎专栏,mysql 优化
- TiDB技术月刊
- repo: 电子科技大学,分布式存储
- sql for devs,许多sql可以实现的feature和sql优化建议
- 可以在RDB里使用JSON字段存储复杂的数据结构,同时兼顾安全性和规范
mysql的JSON总体上分为JOSN_ARRAY 和 JSON Object两块
参考:
- 数组长度,JSON_LENGTH
- 值搜索,JSON_SEARCH
-
too many connections 优化方案(确认不是由于没有关闭连接导致的后),通过合理设置参数(减少Sleep的连接,防止大量Sleep的连接占满)
- interactive_timeout The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect().
- wait_timeout The number of seconds the server waits for activity on a noninteractive connection before closing it.
- max_connections:控制最大连接数
- max_user_connections:控制单个用户的最大连接数
- gorm,database/sql连接池,参数设置
- SetMaxOpenConns(_dbMaxOpenConns) 最大连接数
- SetMaxIdleConns(_dbMaxIdleConns) 最大空闲连接数
- SetConnMaxLifetime(_dbMaxLifeTime) 最大生命周期
- SetConnMaxIdleTime(_dbMaxIdleTime) 最大空闲时间
- effective go
- go code review
- go basic,Golang基础框架图
- repo: gostl,implement datastructure and algorithm with go
- goroutine pool,限制goroutine数量
- go 零拷贝,pipe pool,原理:系统调用splice+pipe,其他实现:HAProxy
profile通常分为:追踪型(追踪提前设定的事件,如函数调用,含税退出)/采样型
go支持的profile有:cpu/memory/block/goroutine
go的cpu profile在Linux系统使用信号中断(SIGPROF signal)采集运行数据.
SIGPROF signal: This signal typically indicates expiration of a timer that measures both CPU time used by the current process, and CPU time expended on behalf of the process by the system. Such a timer is used to implement code profiling facilities, hence the name of this signal. go通过SIGPROF注册回调函数每10ms采集一次. 需要注意的是:统计时间与用户体验到的时间通常不同,profile notes,例如一次http请求耗时100ms(数据库耗时95ms,cpu5ms)
memory profile同样基于采样生成
- go doc,profile&trace
- profiling go programs
- profile go profile原理
- Go Profiler Internals
- repo go-profiler-notes go profile
日志是程序的重要组成部分,好的日志能帮助我们快速排查/定位/解决问题,记录现场信息
一个好的Logger应该提供以下能力:
- 支持把日志写入到多个输出流中,比如可以选择性的让测试、开发环境同时向控制台和日志文件输出日志,生产环境只输出到文件中。
- 支持多级别的日志等级,比如常见的有:TRACE,DEBUG,INFO,WARN,ERROR 等。
- 支持结构化输出,结构化输出现在常用的就是JSON形式的,这样可以统一日志平台,通过 logstash 之类的组件直接把日志聚合到日志平台上去。
- 需要支持日志切割 -- log rotation, 按照日期、时间间隔或者文件大小对日志进行切割。
- 在 Log Entry 中(就是每行记录)除了主动记录的信息外,还要包括如打印日志的函数、所在的文件、行号、记录时间等。
常见题型,来源,知乎:https://zhuanlan.zhihu.com/p/349940945
ceil(a/b)=(a+b-1)/b=(a-1)/b+1
当a/b能除尽,那么(a-1)/b除不尽取整+1后是向上取证的值 当a/b能除不尽,那么(a-1)/b除不尽取整+1后是向上取证的值
gcc,g++,gdb,vscode
-
VScode
clone代码仓库
git clone git@github.com:yiGmMk/leetcode.git
在Vscode打开代码目录,选择文件->打开文件夹,选中代码目录
-
vscode 安装依赖插件
c++建议安装 twxs.cmake + austin.code-gnu-global+visualstudioexptteam.vscodeintellicode
-
点击对应的cpp源文件F5开始调试
- 使用github action + golangci-lint
- lint配置文件: .golangci.yml
-
vscode版本 Version: 1.72.0 (user setup) Commit: 64bbfbf67ada9953918d72e1df2f4d8e537d340e Date: 2022-10-04T23:20:39.912Z Electron: 19.0.17 Chromium: 102.0.5005.167 Node.js: 16.14.2 V8: 10.2.154.15-electron.0 OS: Windows_NT x64 10.0.19044 Sandboxed: No
-
升级python版本到3.9.12就好了,这里使用conda安装方便切换
- 清华镜像 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
- miniconda https://docs.conda.io/en/latest/miniconda.html
- linux下载的都是脚本通过脚本安装
-
fish version(contos v2.3.1)
-
报错: Variables may not be used as commands. In fish, please define a function or use 'eval $CONDA_EXE'.
-
解决: 将v2的fish卸载,重新安装v3版本,再初始化conda的fish配置
# 卸载(contos) yum erase fish # 安装 cd /etc/yum.repos.d/ wget https://download.opensuse.org/repositories/shells:fish:release:3/CentOS_7/shells:fish:release:3.repo yum install fish # 配置初始化 conda init fish # 进入fish fish # 尝试使用 conda -h # ubuntu 安装fish v3 sudo apt-add-repository ppa:fish-shell/release-3 sudo apt update sudo apt install fish
vscode + 插件 (Extension Pack for Java,多个插件集合)
可能是launch.josn中的主类名称错误或者文件不再classpath 主要检测以下几项:
- Check whether the class name specified in mainClass exists and is in the right form.
- Run VS Code command "Java: List all Java source paths" to show all source paths recognized by the workspace.
- Check the Java file you are running is under any source path? If not, go to File Explorer, right click the folder containing your Java file, and run the menu "Add Folder to Java Source Path" to mark the containing folder as a Java source root.
- Run VS Code command "Java: Force Java compilation" to rebuild your workspace.
- If the problem persists, it's probably because the language server doesn't load your project correctly. Please reference the language server troubleshooting paragraph for more troubleshooting info.
首先确认下java源文件是否在"Java source paths",不在可以右击所在目录选择"Add Folder to Java Source Path"添加 然后确认源文件文件名称是否与主类名称一致. 点击Run或Debug Vscode会自动在.vscode/launch.json中添加配置,如图
参考:
- io-is-no-longer-the-bottleneck 当今,SSD和机械磁盘的顺序读写速度已经很快了,在顺序读写的场景下,磁盘io不再是程序的瓶颈,作者以一个计算单词数的程序为例使用go和python测试对比了性能数据
- nginx 中文文档
- nginx location,root,alias nginx
- book https://libgen.gs/
- repo zlib/libgen index
- IFPS repo,官方
- neat-read,convert(支持azw3,epub,pdf等) https://www.neat-reader.cn/webapp#/