clion 阅读 linux kernel wsl

早期clion只支持Cmake,Linux源码经bear,kernel-grok生成CmakeList.txt后还要定制一下导入才勉强用

clion 2020.2 支持 Makefile工程一步到位直接导入

https://github.com/microsoft/WSL2-Linux-Kernel

下面 Build Instructions,加上个编译时缺少的 bc

1
2
apt install build-essential flex bison dwarves libssl-dev libelf-dev bc 
make KCONFIG_CONFIG=Microsoft/config-wsl -j$(nproc)

springboot minio

存储发展

  • DAS:Direct Attached Storage,通过SCSI总线扩展至一个外部的存储,作为服务器扩展的一部分,可扩展性有限、无法多主机共享
  • NAS:Network Attached Storage,通过网络协议如NFS、CIFS远程获取后端文件服务器共享的存储空间,将文件存储单独分离出来
  • SAN:Storage Area Network,分IP-SAN和FC-SAN,通过TCP/IP协议和FC(Fiber Channel)光纤协议连接到存储服务器,可扩展性强;但成本特别高、要HBA卡、FC交换机和支持FC接口的存储
  • OSS:随大数据发展,PB以上存储空间,需无限扩展

企业场景无非是这三种:磁盘(块存储设备),挂载至目录像本地文件一样使用(文件共享存储),通过API向存储系统中上传PUT和下载GET文件(对象存储)

minio

https://github.com/minio/minio > The MinIO documentation website >Software Development Kits (SDK) >Java Quickstart Guide 下面有个 Java Client API Reference

概念

https://www.abelsun.tech/arch/minio/minio-concept.html

https://gitee.com/ddatsh/minio-upload

ref

Gluster和Ceph对比

git

.gitattributes

功能:识别为文本或二进制、文本文件换行符转换、合并策略、差异显示等

文本与二进制

Git 对文本与二进制文件的处理是不同:

  • 文本文件会显示出修改的差异,并且在合并时会按照行进行合并
  • 二进制文件不显示修改的差异,在合并时会提示文件冲突,需要人工介入

Git 内部会自动根据扩展名识别文本与二进制文件,但是一些文本文件是由机器产生的,Git 会将其视作文本文件而自动进行合并,这会导致文件损坏,并且这种情况很难察觉

推荐将所有文件取消文本属性,然后根据项目的需要将部分文件开启文本属性

1
2
3
* -text

Assets/*.java text

换行符转换

Git 默认会对文本文件进行换行符转换,默认情况下在提交时转换为 LF,检出时根据当前平台转换为 LF 或 CRLF。建议 Git 仓库有自己独立的设置,不受 Git 全局配置的影响,否则文件的内容在不同的机器上会出现不同

比如 统一设置 C# 文件换行符为 Windows 换行符 CRLF

1
Assets/*.cs text eol=crlf

模板

gitignore.io

gitattributes.io

rclone

Windows “映射网络驱动器”和“添加一个网络位置” 很鸡肋,不支持大多数常用协议

Rclone支持HTTP、WebDav、FTP、SFTP、dlna、Amazon S3、阿里云OSS……等几十种常用网络共享协议挂载到电脑本地硬盘/文件夹

https://rclone.org/downloads/

https://github.com/rclone/rclone

使用前需要先安装WinFsp,Windows文件系统代理软件,支持基于网络的文件系统

https://winfsp.dev/

https://github.com/winfsp/winfsp

rclone config,开始添加或修改你的webdav服务器

1
rclone mount ali:/ Y: --cache-dir z:/tmp  --vfs-cache-mode writes --checkers 64 --transfers 64 --dir-cache-time 24h --buffer-size 512M --vfs-read-chunk-size 16M --vfs-read-chunk-size-limit 64M --vfs-cache-max-size 10G

wire

wire ,代码生成器,并不是一个框架。在特殊的go文件中告诉wire类型之间的依赖关系,它会自动帮我们生成代码,帮助我们创建指定类型的对象,并组装它的依赖

rust Non-UTF-8 output

Non-UTF-8 output

1
2
D:\dev\vs\Common7\Tools\VsDevCmd.bat
rstc 编译
1
2
3
4
5
error: linking with `link.exe` failed: exit code: 1112
  |
  = note: Non-UTF-8 output: msvcrt.lib(chkstk.obj) : fatal error LNK1112: xxx\r\n

error: aborting due to previous error

解决

用 D:\dev\vs\VC\Auxiliary\Build\vcvars64.bat 启动

rabbitmq

基本概念

Publisher 发的消息通过 Connection 中的 Channel 到达 Broker 某个 Virtual Host

消息经过指定的 Exchange,根据 Binding 依据,分发到 0~n 个 Queue 中

Queue 中消息等待 Consumer 消费


Message:由消息头和消息体组成。消息头由一系列的可选属性组成,routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(消息持久性)等

Broker:MQ server

Connection: 客户端和Broker间的TCP连接

Channel:要为每个Connection创建Channel,通过 Channel才能执行AMQP命令,一个Connection可包含多个Channels

Exchange:接收生产者发送的消息,并根据Binding规则将消息路由给队列

Queue:存未被消费者消费的消息

Binding:联系Exchange与Queue,Binding后生成路由表

Exchange收到Message解析Header得到Routing Key,根据Routing Key与Exchange Type将Message路由到Queue

  • Binding Key

    由Consumer在绑定Exchange与Queue时指定

  • Routing Key

    由Producer发送Message时指定,两者的匹配方式由Exchange Type决定

Virtual Host:类似于权限控制组,一个virtual host里面可以 若干个Exchange和Queue,权限控制的最小力度

os 内存布局 & malloc

堆/栈

  • 栈: 函数调用基础(维护函数调用的上下文),大多数编程语言存储局部变量函数参数的地方,线程私有

    自动分配,如函数局部变量 int b;自动在栈中为b开辟空间

  • 堆:应用程序动态分配的内存区域,malloc/new,通常是程序的运行库管理栈空间分配

    自行申请,并指明大小,如 p1 = (char *)malloc(10);或c++ new 运算符。注意p1本身在栈中

栈或堆现有大小不够用时,按增长方向扩大自身尺寸,直到预留的空间被用完为止

栈扩展,触发由 expand_stack() 在Linux中处理的页面错误,调用acct_stack_growth()检查是否适合扩展堆栈

栈大小低于RLIMIT_STACK(通常8MB),栈增长,如果已经达到最大栈大小,溢出,段错误(Segmentation Fault)

运行库向操作系统 批发 较大的堆空间,然后 零售 给程序用

全部“售完”或程序有大量的内存需求时,再根据实际需求向操作系统 进货