coding-practicing

lifelong learning & practice makes perfect

View the Project on GitHub programnotes/coding-practicing

coding practicing

concurrency(并发) and parallellism(并行)

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

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

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

concurrency & parallellism

基本同步原语

分布式同步原语

参考

distribution

paper

共识算法

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

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 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应该提供以下能力:

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

golang

lint

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. 参考 https://github.com/conda/conda/issues/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 主要检测以下几项:

首先确认下java源文件是否在”Java source paths”,不在可以右击所在目录选择”Add Folder to Java Source Path”添加 然后确认源文件文件名称是否与主类名称一致. 点击Run或Debug Vscode会自动在.vscode/launch.json中添加配置,如图

vscode,java,debug

参考:

OOP,面向对象编程

OOP

blogs

tool

统计

Goproxy.cn,下载总次数