Skip to content

yiGmMk/coding-practicing

Repository files navigation

concurrency(并发) and parallellism(并行)

并发就是可同时发起执行的程序,指程序的逻辑结构; 并行就是可以在支持并行的硬件上执行的并发程序,指程序的运⾏状态。

换句话说,并发程序代表了所有可以实现并发行为的程序,这是一个比较宽泛的概念,并行程序也只是他的一个子集。 并发是并⾏的必要条件;但并发不是并⾏的充分条件。 并发只是更符合现实问题本质的表达,目的是简化代码逻辑,⽽不是使程序运⾏更快。 要使程序运⾏更快必是并发程序加多核并⾏。

简言之,并发是同一时间应对(dealing with)多件事情的能力;并行是同一时间动手做(doing)多件事情的能力。

concurrency & parallellism

基本同步原语

分布式同步原语

参考

distribution/分布式

paper

共识算法

共识是可容错系统中的一个基本问题:即使面对故障,服务器如何在共享状态上达成一致? 这个问题出现在需要提供高可用性且不能在一致性上妥协的各种系统中

  • raft,中文翻译 Paxos共识算法复杂且难以理解.在设计Raft时,作者通过分解(Raft分离了领导者选举,日志复制,和安全性)和 状态空间缩减(Raft减少了不确定程度和服务器彼此之间不一致的方式)提高可理解性. 节点状态: 领导者,跟随者,候选人.
  • raft,in English
  • raft,可视化

design patterns

design patterns

references

algorithm and datastructure

algorithm

sort/search/bitmap

datastructure

tree/list/array

awesome xxx and mark

collection

  1. awesome-go-cn,Go框架、库和软件的中文收录大全
  2. 开发者头条,博客/公众号各种站点资讯,提供订阅服务
  3. 架构师
  4. github 资讯
  5. repo: algorithm & data structure
  6. repo: it资料大全
  7. repo: k8s-tutorials
  8. bytebytego: system design interview
  9. bytebytego: Newsletter

database

JSON

mysql的JSON总体上分为JOSN_ARRAY 和 JSON Object两块

参考:

JSON Array

API

  • 数组长度,JSON_LENGTH
  • 值搜索,JSON_SEARCH
JSON Object

sql优化

博文

blog

  1. 小林coding
  2. 潘少,ants 作者,go contributor

notes

linux

language

python

go

profile

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同样基于采样生成

Time

Time

unsafe

unsafe

reflect

reflect

got-raps

traps

go-tool

测试

go测试之道

interface/接口

interface

repo and tool

log

日志是程序的重要组成部分,好的日志能帮助我们快速排查/定位/解决问题,记录现场信息

一个好的Logger应该提供以下能力:

  • 支持把日志写入到多个输出流中,比如可以选择性的让测试、开发环境同时向控制台和日志文件输出日志,生产环境只输出到文件中。
  • 支持多级别的日志等级,比如常见的有:TRACE,DEBUG,INFO,WARN,ERROR 等。
  • 支持结构化输出,结构化输出现在常用的就是JSON形式的,这样可以统一日志平台,通过 logstash 之类的组件直接把日志聚合到日志平台上去。
  • 需要支持日志切割 -- log rotation, 按照日期、时间间隔或者文件大小对日志进行切割。
  • 在 Log Entry 中(就是每行记录)除了主动记录的信息外,还要包括如打印日志的函数、所在的文件、行号、记录时间等。

log

leetcode

常见题型

常见题型,来源,知乎:https://zhuanlan.zhihu.com/p/349940945

技巧

向上取证,ceil

ceil(a/b)=(a+b-1)/b=(a-1)/b+1

当a/b能除尽,那么(a-1)/b除不尽取整+1后是向上取证的值 当a/b能除不尽,那么(a-1)/b除不尽取整+1后是向上取证的值

c++

依赖

gcc,g++,gdb,vscode

编译/Compile

  • VScode

    clone代码仓库

    git clone git@github.com:yiGmMk/leetcode.git

    在Vscode打开代码目录,选择文件->打开文件夹,选中代码目录

  • vscode 安装依赖插件

    c++建议安装 twxs.cmake + austin.code-gnu-global+visualstudioexptteam.vscodeintellicode

  • 点击对应的cpp源文件F5开始调试

golang

lint

  • 使用github action + golangci-lint
  • lint配置文件: .golangci.yml

py

issue

2022-10-10,在contos和ubuntu18.04上默认安装的python3.6.9调试python代码断点不能触发
  1. 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

  2. 升级python版本到3.9.12就好了,这里使用conda安装方便切换

fish 部分v2的版本支持conda

  1. fish version(contos v2.3.1)

  2. 报错: Variables may not be used as commands. In fish, please define a function or use 'eval $CONDA_EXE'.

  3. 解决: 将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
  4. 参考 conda/conda#11079

  5. fish配置,输入fish_config,会弹出web页面,可视化配置 fish_config

java

环境

vscode + 插件 (Extension Pack for Java,多个插件集合)

issues

Program Error: Could not find or load main class x

可能是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中添加配置,如图

vscode,java,debug

参考:

OOP,面向对象编程

OOP

Spring

Spring

基础

base

math

math

blogs

tool

serverless

统计

Goproxy.cn,下载总次数