C

C 静态编译发生错误 gcc -static main.c /usr/bin/ld: cannot find -lc collect2: error: ld returned 1 exit status C 静态编译依赖 glibc-static centos8 install glibc-static 命令 sudo dnf install glibc-static gdb starti info inferiors

使用 dlv 调试 go 程序

Go 使用的调试工具是 dlv /home/opc/go/bin/dlv dap --check-go-version=false --listen=127.0.0.1:43539 --log-dest=3 from /home/opc/workspace/develop/languages/golang/generics 使用 dlv debug dlv debug main.go 使用 dlv debug test dlv test tequila/etl -- -test.run TestWriteReqChannel2CH

作者已读书籍

rust 简单教程 https://www.twle.cn/c/yufei/rust/rust-basic-constant.html https://github.com/Vonng/ddia(数据密集型应用系统设计) 深入理解计算机系统 “如果花几年时间自学 9 门科目让人望而却步,我们建议你只专注于两本书:《深入理解计算机系统》 和 《数据密集型应用系统设计》。根据我们的经验,投入到这两本书的时间可以获得极高的回报率,特别适合从事网络应用开发的自学工程师。这两本书也可以作为上面表格中其他科目的纲领。” https://github.com/izackwu/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md 优秀公众号 https://mp.weixin.qq.com/s/TwDiDmApmsIVSIFh2h1osQ

webassembly 研究

webassembly 官网 https://webassembly.org/ wasmer 官网 https://github.com/wasmerio/wasmer-go https://docs.wasmer.io/integrations/go/setup go wasmer https://pkg.go.dev/github.com/wasmerio/wasmer-go/wasmer https://blog.logrocket.com/webassembly-runtimes-compared/

Doing

rust practise: https://practice.rs/generics-traits/generics.html rust practise solution: https://github.com/sunface/rust-by-practice/blob/master/solutions/method.md 30 days of js: https://github.com/Asabeneh/30-Days-Of-JavaScript cmake https://sfumecjf.github.io/cmake-examples-Chinese/ wasm https://github.com/geektutu/7days-golang https://geektutu.com/post/quick-go-context.html 每周末做的事情 操作系统 https://www.bilibili.com/video/BV1Cm4y1d7Ur/?spm_id_from=333.788&vd_source=ff2a63474ee3417fceb31c73326ca7b8 数据结构与算法 https://www.bilibili.com/video/BV13g41157hK?spm_id_from=333.337.search-card.all.click&vd_source=ff2a63474ee3417fceb31c73326ca7b8

kafka 常用命令

create topic kafka-topics –create –bootstrap-server localhost:9092 –topic iris list topics kafka-topics –list –bootstrap-server localhost:9092

常用开发工具

网络相关 查询当前机器网络环境,比如: 公网ip,ua,forwarded,mime type 用法一:浏览器打开网址: https://ifconfig.me 用法二:查询公网 ip: curl ifconfig.me 用法三:查询 ua: curl ifconfig.me/ua 用法四:查询 forwarded: curl ifconfig.me/forwarded 查询 ip 地址归属地 用法一:查询某个 ip 地址归属地:curl cip.cc/203.218.89.26 用法二:查询当前 ip 地址归属地:curl cip.cc/$(curl -s ifconfig.me) 网络实验室 头歌实践教学平台 https://www.educoder.net 蓝桥 https://www.lanqiao.cn/courses/1 Free cdn cloudinary.com 网站性能测试 https://ping.pe/ 命名神器 https://unbug.github.io/codelf/ 代码分享工具 carbon.now.sh 画图相关 asciiflow https://asciiflow.com/#/ drawio https://app.diagrams.net/ https://www.tldraw.com/ https://whimsical.com/H6ZkLSkrC62BbCkecZj7US https://tlslides.com/ markdown (https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716) ascii tree,ascii table https://www.websequencediagrams.com/#

Rust 闭包

闭包定义 结构类似一个函数,能够捕获环境变量 跟函数的区别: 结构上的区别 函数不能捕获环境变量 函数名可以当成变量用,闭包当成一个变量 函数的参数(x: i32), 闭包的参数 |x: i32| 闭包能自动推导参数类型 签名一样的闭包类型也不一样 每个闭有一个对应的 Fn 特征 函数也有一个 Fn 特征 https://course.rs/advance/functional-programing/closure.html#:~:text=%E4%B8%8A%E9%9D%A2%E7%9A%84%E7%BC%93%E5%AD%98%E6%9C%89%E4%B8%80%E4%B8%AA%E5%BE%88%E5%A4%A7%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9A%E5%8F%AA%E6%94%AF%E6%8C%81%20u32%20%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%80%BC%EF%BC%8C%E8%8B%A5%E6%88%91%E4%BB%AC%E6%83%B3%E8%A6%81%E7%BC%93%E5%AD%98%20String%20%E7%B1%BB%E5%9E%8B%EF%BC%8C%E6%98%BE%E7%84%B6%E5%B0%B1%E8%A1%8C%E4%B8%8D%E9%80%9A%E4%BA%86%EF%BC%8C%E5%9B%A0%E6%AD%A4%E9%9C%80%E8%A6%81%E5%B0%86%20u32%20%E6%9B%BF%E6%8D%A2%E6%88%90%E6%B3%9B%E5%9E%8B%20E%EF%BC%8C%E8%AF%A5%E7%BB%83%E4%B9%A0%E5%B0%B1%E7%95%99%E7%BB%99%E8%AF%BB%E8%80%85%E8%87%AA%E5%B7%B1%E5%AE%8C%E6%88%90%EF%BC%8C%E5%85%B7%E4%BD%93%E4%BB%A3%E7%A0%81%E5%8F%AF%E4%BB%A5%E5%8F%82%E8%80%83%E8%BF%99%E9%87%8C

Host Name

获取主机名 ip -o route get to 114.114.114.114 | sed -n 's/.*src \([0-9.]\+\).*/\1/p' hostname -i

Curl 命令

参考: https://www.jianshu.com/p/ac019dc3a0f7 curl -fsSL https://rwkey.com/images/avatar.jpg -f 显示错误状态, 而不是返回内容 -s 不显示正在进行的任务,包括错误 -S 显示错误 -L 跟随重定向 curl https://www.shenzhenair.com/vodka/v1/dfp/bootstrap.js 返回 <a href="/vodka/v1/js/bootstrap_cdn.js">Found</a>. curl -L https://www.shenzhenair.com/vodka/v1/dfp/bootstrap.js // –trace-ascii 获取请求的完整日志 curl -H ‘Content-Type: multipart/form-data’ -XPOST http://127.0.0.1:80/mipha/data/dfp/bootstrap.js -d ’tUrH27_4w0w’ –trace-ascii dump.log //性能测试 curl -o /dev/null -s -w %{time_namelookup}–%{time_connect}–%{time_pretransfer}–%{time_starttransfer}–%{time_total}–%{speed_download}–%{local_ip}–%{http_code} -H ‘sw-api-key:K4aUwcqY*iAnKMCMKAoh2QAZIN7h$x’ -XGET ‘http://172.31.33.213:9010/antibot/dynamic_config_file’

优秀博客

Rust & C: https://liujiacai.net/blog/2022/04/30/modern-c/ 系统设计: https://blog.bytebytego.com/ 左耳朵耗子: https://coolshell.cn/ 运维手册学习 http://www.peter-zhou.com/pa-chong/curl-gong-ju.html golang blog: https://vim0.com/post/golang/use_mock_to_test/ https://cheats.rs/ https://www.xmodulo.com/encrypt-shell-script.html https://github.com/kettanaito/naming-cheatsheet https://doc.rust-lang.org/rust-by-example/scope/lifetime/static_lifetime.html c++ https://raytracing.github.io/books/RayTracingInOneWeekend.html https://mcll.top/2020/03/10/rust%E4%B8%AD%E5%AE%9E%E7%8E%B0split/ https://stdrc.cc/style-guides/markdown https://github.com/xizhibei/blog/issues/145 http://zzx-blog.com/rust-zhi-trait/ https://www.bilibili.com/video/BV1RP4y1G7KF?p=4&spm_id_from=pageDriver

go 入门一

Go 作为一门云时代的语言,作为一名有追求的程序员,有必要开始学了,下面我们开始入门吧 开始 Go 之旅 安装 Go 开发工具 macOS 平台 brew install go brew 是 macOS 平台上使用比较方便的软件管理工具,可以安装,卸载和升级,所以这里也就使用了 brew 这种方式,brew 可执行文件默认的安装地址是 /usr/local/bin,所以我们可以在 /usr/local/bin/go 找到可执行程序 go。 测试安装是否成功 ➜ dev4mobile.github.io git:(develop) ✗ go version go version go1.13 darwin/amd64 ➜ dev4mobile.github.io git:(develop) ✗ 我们看到 go1.13 已经安装完成 第一个 Hello World 程序 新建文件 hello.go, 输入下面的内容 package main import "fmt" func main() { fmt.Printf("hello world!") } 执行 go run hello.go Output: ➜ ~ go run hello.go hello world!

Brew 用法

brew 安装脚本 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" brew install fzf tree jenv tig tldr gh bat autojump go tmux wrk brew cask install google-chrome visual-studio-code brew cask zap xxx //删除软件

双拼入门

以前我是使用全拼作为自己的输入法,但是全拼按键太多,已经不能满足新时代的我们的需求, 很早就听说过双拼,它具有按键少,平台「macOS, Android, iOS」支持好,速度仅次于五笔 输入法等特点, 所以接下来我会用简单的篇幅来介绍如何使用这款输入法。 概述 双拼的键位布局有很多,比如:小鹤双拼,微软双拼,Sougou双拼等,它们的原理都差不多,只是键位布局不同,不过据说小鹤双拼布局最合理,所以此篇文章是以 小鹤双拼为例来做介绍。 小鹤双拼键位图 键位说明: 双拼是由声母(上边红色字母)+ 韵母组成(上边蓝色字母) 声母中的u,i,v 对应的按键在拼音里面分别表示:sh, ch, zh,其它跟英文一样 韵母的键位只能靠记忆了,其实也有规律 文字组成: 只含有韵母: 单字韵母:第一个字母 + 第一个字母 比如啊=aa, 哦=oo,额=ee 双字韵母(全拼):第一个字母 + 最后一个字母,比如爱=ai, 嗯=en, 欧=ou 三字韵母:第一个字母 + 韵母所在键,比如:昂=ah 普通词 单字:小=xn, 即x=x, n=iao 双字:首字前两码 + 末字前两码,双拼=ulpb 三字:前两字前两码 + 末字前两码 四字及以上:前三字首码 + 末字首码 练习:

Vim 常用技巧

vim 剪切板互换数据 vim –version | grep clip 复制数据到剪贴板 “+y 从剪贴板复制数据到vim “+p 查看剪贴板 :reg 替换 :%s//Users/dev4mobile/$HOME/g 一次复制, 多次粘贴 利用寄存器, 寄存器 0 是最近的数据, "0p

Docker Cheat Sheet

display a live stream of container(s) resource usage statistics docker stats show docker disk useage docker system df – show disk usage display the running processes of a container docker top xxx o pid,cmd get real time events from the server docker events

Golang Cheat Sheet

setup go install golang.org/x/tools/…@latest go 语言编程规范 https://github.com/uber-go/guide/blob/master/style.md#reduce-nesting

搭建 blog

搭建 blog 框架(https://vuepress.vuejs.org/)

电影网剧分享

https://qianoo.cn/ https://ddrk.me/ https://github.com/tgbot-collection/YYeTsBot https://www.btnull.org/

游戏推荐

minetest, 类似我的世界, 下载地址 https://www.minetest.net/

虚机管理

虚机管理,pve, 开源项目: https://www.proxmox.com/en/proxmox-ve

Rust 书籍

优秀的 rust 文章 https://blog.thoughtram.io/ownership-in-rust/ https://course.rs/cargo/reference/deps-overriding.html#%E4%BE%9D%E8%B5%96%E8%A6%86%E7%9B%96 http://liubin.org/blog/2021/11/19/rust-array-slice-vector/

Go 教程

https://chai2010.cn/advanced-go-programming-book/ch3-asm/ch3-09-debug.html

Github workflow

项目工程目录下新建 .github/workflows/build_test.yml build_test.yml 内容 name: build_test on: push: branches: [ master, develop ] pull_request: branches: [ master, develop ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v3 with: go-version: 1.17 - name: Build run: go build -v ./... - name: Test run: go test -v ./...

Coding

代码练习网站 (exercism.org)

Sql 必知会

关键字查询顺序 from join on where group by avg, sum… having select distinct order by limit https://blog.csdn.net/weixin_45568892/article/details/108120784?spm=1001.2014.3001.5502

Nofile

ulimit -a /etc/security limits.d 或 limits.conf limits.d 文件会覆盖 limits.conf 一个 nofile, 另一个 proc 重新登录会生效

Selinux

临时开关 setenforce 0 | setenforce 1 //持久开关,需要重启 /etc/senlinux/config

Cubejs 入门

查询 schema 对应的 SQL curl -fsSL -G \ --data-urlencode 'query={"measures":["AccessAirlineView.count"],"timeDimensions":[{"dimension":"AccessAirlineView.ts","dateRange":"today"}],"order":{},"filters":[],"dimensions":["AccessAirlineView.risk"],"timezone":"Asia/Shanghai"}' \ 'http://172.31.33.213:4000/cubejs-api/v1/sql' \ | jq . "SELECT\n JSONExtractString(arrayJoin(result_risk), 'RiskName') `access_airline_view__risk`, count(`access_airline_view`.id) `access_airline_view__count`\n FROM\n default.access AS `access_airline_view` WHERE (`access_airline_view`.ts >= parseDateTimeBestEffort(?) AND `access_airline_view`.ts <= parseDateTimeBestEffort(?)) GROUP BY `access_airline_view__risk` ORDER BY `access_airline_view__count` DESC LIMIT 10000", [ "2022-03-28T16:00:00Z", "2022-03-29T15:59:59Z" ]

Clickhouse 入门

什么是Clickhouse? 列式存储 ck 引擎 MergeTree ReplicatedMergeTree Distributed SQL JSON 格式化输出: select * from config_tag FORMAT JSON; 创建物化视图 命令行启动 clickhoue-client -m 命令行插入 字符串需要单引号 insert into Name values(‘1’,‘hell’); clickhouse 数组从 1 开始 而不是 0 clickhouse 实战 https://blog.csdn.net/xch_yang/article/details/123591740 问题,如何删除两条一摸一样的数据,并且保留一条 clickhouse 字符串必须用单引号括起来,不能双引号 安装 分布式需要安装 zookeeper Dbeaver 连接 https://segmentfault.com/a/1190000038318776

DevOps

远程桌面网关 (next-terminal) https://gitee.com/dushixiang/next-terminal

Bash 命令行快捷键

查看日志,有时候会看到很多日志,想暂停下来看 ctrl + s, 恢复查看 ctrl + q 退出 ssh 连接, ctrl + d 向前删除一个单词 alt + delete https://www.tecmint.com/linux-command-line-bash-shortcut-keys/#comments

进程查看

ps 显示进程 ps -aux ps -ef 显示带线程, 标识是 NLWP ps -eLf top -H -p 18020 ps -T -p 28001, 其中 SPID 代表线程ID 或者 top, 然后 shift + H cat /proc/28001/status ls /proc/28001/task 显示进程树 -H – 显示进程继承层次 -h – 不显示头信息 ps -H ps -ef f 显示进程树 pstree pstree -p 28001

SSH 常用命令

我们经常会遇到 ssh 长时间不用会卡住, 这时我们可以按 ~.退出。 ssh 会话保持 客户端在 .ssh/config 文件配置 TCPKeepAlive=yes ServerAliveInterval 180 ServerAliveCountMax 3 .ssh 目录下文件的权限 config 和 id_rsa 文件为 600 权限 id_rsa.pub 为 644 权限

sshfs 文件挂载

sshfs 文件挂载 https://www.cnblogs.com/rongfengliang/p/10800128.html

Docker 常用命令

查询 docker 错误日志 grep -Ei -C 100 'err|exception|fatal|error|panic|failed|fail' `docker inspect --format='{{.LogPath}}' container_id` docker logs -f container_id --tail 20 docker 镜像加速 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json «-‘EOF’ { “registry-mirrors”: [“https://6a1o9a2p.mirror.aliyuncs.com”] } EOF sudo systemctl daemon-reload sudo systemctl restart docker docker 离线安装 https://juejin.cn/post/6967138136975638559 http://liubin.org/blog/2016/04/24/how-to-choose-a-docker-monitor-solution/

基本 linux 命令

网络相关 tcpdump 命令用法 tcpdump -D, 列出监听的网络接口 host 命令 比如想查询域名的 A 记录 host -t A rwkey.com 磁盘 lsblk df -h, 磁盘是否满 dh -sh . 或 dh -d1 -h . | grep G | sort -h 清空文件 sh -c "cat /dev/null > ${log_file_name} "或者> ${log_file_name} 查找字符串 strings file | grep “rwkey.com” 查看主机信息 hostnamectl uname -a uname -r

Markdown

Markdown 学习 https://www.markdownguide.org/basic-syntax/

Git 常用命令

拉取最新的 tags git fetch --tags checkout 最新的 tag latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`) && git checkout tags/${latest_tag} -b ${latest_tag} 来回切换上一次的分支 git switch - 或 git checkout -, 类似 Linux 命令的 cd - 用法 切换指定的 commit git checkout commit_id 上传大文件 (安装 git lfs) brew install git-lfs git lfs track [file] 参考 https://devconnected.com/how-to-checkout-git-tags/ https://www.techiedelight.com/clone-specific-tag-with-git/ https://blog.csdn.net/gtLBTNq9mr3/article/details/110729551

Go 工程改善

Go linter 工具 – revive https://dev.to/s0xzwasd/configure-revive-go-linter-in-goland-2ggl Go 开发效率工具汇总 https://blog.csdn.net/hjxisking/article/details/108096001

Git 使用

git 别名 git save git config --global alias.save '!git add -A && git commit -m "SAVEPOINT"' git wip git config --global alias.wip '!git add -u && git commit -m "WIP"' git undo git config --global alias.undo '!git reset HEAD^ --mixed' git wipe git config --global alias.wipe \ '!git add -A && git commit -qm "WIPE SAVEPOINT" && git reset HEAD~1 --hard' https://nicolaiarocci.com/git-worktree-vs-git-savepoints/

Rust unsafe

不会获得编译器保证安全, 承诺编译是安全的代码 写 unsafe 代码时, Note: 函数级别的unsafe,调用者要使用 unsafe {},指明不安全代码 trait 级别的 unsafe, impl 者保证 unsafe, 调用者正常调用 对裸指针的解引用是不安全的,此时可变指针和不可变指针共存 4.ffi, 使用其它语言的能力,比如说调用 go library,同样需要unsafe 代码块 不推荐使用 unsafe 场景 修改可变静态变量 问题: unsafe 的错误能捕获?在保证程序能正常运行的前提下

Rust 自动解引用与强制解引用

Rust 有一个叫 自动引用和解引用(automatic referencing and dereferencing)的功能。方法调用是 Rust 中少数几个拥有这种行为的地方。 他是这样工作的:当使用 object.something() 调用方法时,Rust 会自动为 object 添加 &、&mut 或 * 以便使 object 与方法签名匹配。也就是说,这些代码是等价的: p1.distance(&p2); (&p1).distance(&p2); 第一行看起来简洁的多。这种自动引用的行为之所以有效,是因为方法有一个明确的接收者———— self 的类型。在给出接收者和方法名的前提下,Rust 可以明确地计算出方法是仅仅读取(&self),做出修改(&mut self)或者是获取所有权(self)。 println! 宏也可以自动解引用 强制解引用(Deref coercion) 是一种执行在函数和方法的参数上的便利。它只能用于那些实现了Deref trait的类型。 强制解引用,将一种类型的引用转换成另一种类型的引用。比如它可将 &String 转换成 &str 因为 String实现了 Deref trait, 返回一个 &str 当我们传递一个特定类型的的值的引用给一个函数/方法时,如果同函数/方法中定义的参数类型不匹配时,会自动进行解引用。一系列 deref 方法会被调用,用来在我们提供的类型,和参数所需要的类型之间 实施转换。 程序员在写函数/方法时, 不必要添加 许多 明示的 引用 (&)或者解引用(*) 强制解引用也让我们写的代码更好地同时工作在 引用/智能指针上。

Rust 问题解惑

fn main() { let regions = [“southern_germany”, “chinese”, “english”]; // for regin in regions.iter() { // println!("{}", regin); // } for region in regions.into_iter() { println!("{}", region); } for region in regions { println!("{}", region); } // let f = 13.24; // let r: f64 = 13.14f64.round(); // println!("{}, {}", r, f); } https://doc.rust-lang.org/edition-guide/rust-2021/IntoIterator-for-arrays.html let s = “hello” let s2 = &s; println!("{}", s2) // 会自动解引用 https://doc.rust-lang.org/std/primitive.array.html

Rust 异步编程

为什么需要异步 async/await 介绍 异步编程模型 带大家实现一个简化版的 future

Rust 宏

宏是编译的中间件 学习过程宏工程: github proc-macro-workshop

Rust 智能指针

什么是智能指针? “智能” 究竟是什么意思? 智能指针如何工作? Box,Cell, RefCell, Rc, Arc, RwLock, Mutex, 这些智能指针的作用是什么? String, Vec 也是智能指针 Rust 中, Trait 决定了类型的行为,那么智能指针主要实现以下两个 Trait: Deref trait -> 拥有指针语义 Drop trait -> 拥有内存自动管理机制 Copy 语义, Move 语义 解引用 * 是强制解引用, .,& 传参数 是自动解引用 *x -> *(x.deref) 智能指针智能在何处? 可以智能解引用,提升开发体验 deref trait 可以自动化管理内存,安全无忧 drop trait 遇到 . 操作符时,会触发自动解引用 标准库智能指针 Box vec 和 string rc 和 ARC cell 和 Refcell RwLock 和 mutex Rust 编译时需要知道一个类型需要占用空间多大,递归和 trait对象不知道空间大小 存在栈上的数据结构都是 copy 语义

Rust trait

trait 四种作用 入门 trait trait 静态分发 – 没有开销的抽象 trait 动态分发 – 有运行时开销(寻址过程) 性能测试 四种作用 接口(interface) 标记 (sized, copy 给编译器用, 识别一些固定的行为) 范型标记 (入参,出参作为范型限定) 抽象类型(trait object) 相当于动态语言, 静态调用,动态调用|动态分发 一个trait 是针对未知类型(Self)定义的方法的一个集合 静态分发: 通过范型来实现, 编译器使用具体的类型来生成非范型版本的函数, rust 单态化,会使文件变大 //静态分发 fn print1(d: impl Draw) { d.draw(); } 等价于下面 fn print2<T: Draw>(t: &T) { t.draw(); } 动态分发 动态分发发生在运行时 Rust 动态分发是通过 trait object 来实现的,Rust 会在运行时根据 Trait Object 中的指针来调用相应版本的函数。 trait object 创建: 指针(如引用,智能指针)+ dyn 关键字 + 要实现的 trait(一个或多个,trait 之间用 + 连接)如: &dyn Trait、Box, 其意思就是:只要一个实现了指定的trait(s), 即满足该约束。

Rust 如何编写测试

原理:执行 cargo test 会生成二进制文件 -> 入口函数 -> 生成 main 函数, main 函数里包含 (#[test], + tests 目录下 + 注释下测试),其中 tests 目录,会执行集成测试 默人是并行运行,起很多线程并行运行每个测试 如果想要串行运行: cargo test –thread_num=1 背后其实是执行命令: rustc –test src/lib.rs 告诉 rustc 生成一个运行所有单元测试的二进制文件, (启用 cfg, 放入 main 函数) cargo test RUST_TEST_THREADS=1 fn sum(a: i8, b: i8) -> i8 { a + b } #[cfg(test)] mod tests { use super::*; #[test] #[ignore] fn it_works() { assert_eq!(crate::sum(2, 2), 4); } } 执行忽略测试 cargo test -- --ignored

Cargo 包管理

为啥需要包管理器? 模块化? 版本管理 模块重用 依赖 模块化编程 IDE 友好 模块化编程(把大代码文件拆成小的模块) package(按照约定目录结构管理) 版本管理(编写包的时候,难免会依赖第三方包)解决依赖 包管理工具 cargo crate crate.io cargo new toml 配置文件 cargo help new cargo new –lib study 为啥用 toml 文件管理, 转化为 hash 表 模块化 解决模块化,高效做开发, 模块系统是如何工作的? mod, pub 关键字的作用 构建模块树 crate 根 -> main.rs -> mod 声明 —> config.rs 或 cofing/mod.rs 默认私有 -> pub mod module -> module.rs 或 module/mod.rs mod 显示声明构建模块树 use 使用模块路径最短 extern crate rand –2015 版本引入第三方包, 现在已经弃用

优雅的处理 Rust 错误

unwarp fn main() { let path = "/home/test.txt"; read_file(path); } fn read_file(path: &str) -> String { // unwarp 用于 Option 或 Result的结果获取 std::fs::read_to_string(path).unwrap() } 上面程序会 panic 避免使用 unwrap fn main() { let path = "/home/test.txt"; match read_file(path) { Ok(file) => { // 可能有嵌套, 再一次 match println!("{}", file); } Err(e) => { println!("{}, {}", path, e); } } } //枚举的好处: 多选一, OK 和 Err(限定在有限的集合中) //健壮性: 对程序运行的结果全部可控 fn read_file(path: &str) -> Result<String, std::io::Error>{ std::fs::read_to_string(path) } unwrap -> result,mathch(不会 painc) -> 自定义错误 + From 转换(?

使用 Vercle + Github 搭建博客

前言 如何使你的 blog 秒开,今天我们使用Vercel来搭建咱们的博客,有几个步骤 注册 github, 地址: https://github.com/,这里不做过多赘述 注册 vercel 打开 https://vercel.com/signup 进行注册 点击 Continue with Github 弹出授权页面, 点击授权 选择 +86,然后输入你的手机号,点击 continue

Frida

安装 frida pip3 install frida-tools pip3 install frida ~ ❯❯❯ adb shell ✘ 1 OnePlus7:/ $ getprop ro.product.cpu.abi arm64-v8a OnePlus7:/ $ 查看设备信息 App Device Info HW 下载 frida-server https://github.com/frida/frida/releases

Chrome

防止 DNS 污染, 在 chrome 设置 -> 隐私 -> 配置 dns

Nil_issue

为什么 nil 不等于 nil 我们在开发过程中会遇到使用==比较时会返回意想不到结果,常常与我们设想的结果不太一致。 首先我们看下面一段代码。我们有两个变量,每个变量都有它们自己的类型,但是每个变量都被赋值为nil。 var a *int = nil var b interface{} = nil 下面的语句将会打印什么 fmt.Println("a == nil:", a == nil) fmt.Println("b == nil:", b == nil) fmt.Println("a == b:", a == b) 实际输出结果 a == nil: true b == nil: true a == b: false 现在我们看另外一个例子,我们用另外一种方式来给 b 赋值 var a *int = nil var b interface{} = a fmt.Println("a == nil:", a == nil) fmt.Println("b == nil:", b == nil) fmt.

github 提交问题

提交代码发生了这样的问题: remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: unable to access ‘https://github.com/zhoulujun/algorithm.git/': The requested URL returned error: 403 因为使用了 https地址,而应该使用 ssh 地址 解决方案: 将 remote 地址 改成 ssh 地址 命令: git remote set-url origin git@gihub.com:xxx/repository [hello.com](mailto: cn.dev4mobile@gmai.com)

Go 插件化开发

编写插件 插件入口package必须为main,可以不包含main方法 go build -buildmode=plugin -o hello_plugin.so . 生成 hello_plugin.so 插件

Yaml

Typora 技巧

[toc] 下面我会列举一些我在使用Typora遇到的一些问题 基本概念 什么是减缩进? 缩进一般代表四个空格,也可以设置为两个空格,英文叫做 indent,按下 Tab 键就是一个缩进,减缩进就是跟缩进的方向相反,英文称作 outdent,电脑操作按键就是 shift + Tab 常见问题 换行问题 直接输入 Enter 进行段落换行,后面会自动加空行,Shift + Enter进行软换行,不会加空行, space+space+Enter 也是软换行,推荐使用,因为它的兼容性比较好 快速与标题行对齐 多次 Enter 会自动减缩进,比如我在当前行按回车,下一行会出现 3., 如果我连续敲两次次 Enter, 会自动与常见问题对齐 cmd +] 缩进, cmd+[减缩进

SHELL 字符串截取

关于 Linux SHELL 字符串截取有几种方法,第一种就是 ${var} 运算符,另外一种就是 cut 命令。 ${var} 运算符 命令 用法 ${var#*string} var 是变量名, #是运算符,*string 表示从左边开始删除第一个string及左边的字符 ${var##* string} 在 var 字符串里面从左往右找,删除最后一个找到的 string,以及左边的字符 ${var%string*} 在 var 字符串里面从右往左找,删除第一个找到的 string,以及右边的字符 ${var%%string*} 在 var 字符串里面从右往左找,删除最后一个找到的 string,以及右边的字符 ${var:n1:len} 截取 var 字符串里面从第n1个字符串开始的 len 个字符 ${var:n1} 从 var 第 n1 个字符开始,一直到结束 ${var:0-n1} 从右第n1个字符开始,直到结束 ${var:0-n1:len} 从右第 n1 个字符开始,取 len 个字符,直到结束 举例说明 下面我以 var=“https://github.com/JakeWharton/uniqtoo/blob/1654dab775/src/main.rs" 为例进行说明 截取文件名 ${var#*src/} 保留 https ${var%://github*} 截取前 5 个字符 ${var:0:5} cut 命令 可以从标准输入或文件切出字段 command useage cut -d’:’ -f2 -d 指定分隔符, 这里是 : ,-f 是取第几列 cut -c 1-3 截取第 1 ~ 3 个字符 举例说明

Go 最佳实践

Go 最佳实践(https://talks.golang.org/2013/bestpractices.slide#2) 最佳实践简单来说就是 简单,可读,可维护 第一、避免嵌套 我们先来看一段代码 定义一个 Gopher, 然后给 Gopher 增加一个方法 WriteTo,输入参数类型是 io.Writer, 返回值是写入的长度和

Rust 解引用本质

Rust 解引用本质 我们知道 rust 引用使用 &,解引用使用 *,于是 * 解引用就拥有了数据所有权,但是我们想要使用解引用的数据,必须赋给一个变量,这样一旦发生赋值,那么如果该类型实现了 Trait 特性, 就是使用 Copy 语义,否则使用 Move 语义。 整形例子: fn main() { let a: i32 = 12; let b = &a; let c = *b; // *b 取得12,然后发生 12 copy 到定义的 c,所以 b 和 c 的地址不一样 println!("{:p}, {:p}", b, &c); //0x7ffee2fe0624, 0x7ffee2fe0634 //如果不赋值 let c = &*b; // c 也是对 a 的一个引用, 那么 b == c println!("{:p}, {:p}", b, c); //0x7ffee2fe0624, 0x7ffee2fe0624 println!

Common_issues

docker issue docker version: 20.10.5 Error [internal] load metadata for failed to solve with frontend dockerfile.v0 solution: using DOCKER_BUILDKIT=0 docker build xxxx this is docker buildkit bug: https://github.com/moby/buildkit/issues/721

Linux 常用命令

远程登录 ssh -v user@host -p 8855 scp -v -P 8855 file user@host:/data/rwkey python3 -m http.server --bind 0.0.0.0 默认端口 8000 开 web 服务 python -m SimpleHTTPServer 8000 & docker 命令 docker save 127.0.0.1:5001/xxx | gzip > xxx.tgz docker push 127.0.0.1:5001/xxx docker load < xxx.tgz 日志从后往前看 tac log.log | more

redis 常用命令

连接 reids 服务器 redis-cli -h host -p 6379 常用命令 查看过期时间 ttl whisky:m:rtk:created:M1P31qiwesngwQFth02Bj41s28 结果 单位是秒 (integer) 10573

Rust 内存管理

Rust 在编译期间,通过静态分析,确定对象的作用域与生命周期,从而可以确定某个对象不再被使用,将其销毁,并且不会引入任何运行时的开销。 值类型与引用类型 在 rust 中, 实现 Copy 这个 trait,用来标记一个值类型,另外一种就是数据分配在堆上,实际内容是一个内存地址,指向栈上的实际数据,记住只有堆上的数据才需要进行内存管理。 copy 语义 默认实现了 Copy 类型的: 整形,浮点型,布尔型,字符型, &T 都是实现了 Copy trait,元组类型,如果元组里面所有类型都实现了 Copy trait,那么这个元组也就实现了 Copyt trait,数组同理 需要手动实现 Copy 类型的 对于 Rust 结构体,枚举,如果他们内部都实现了 Copy trait,则他们可以手动实现 Copy trait。 无法实现 Copy 类型 Box 就是无法实现 Copy 类型,原因是因为如果 Box 实现了 Copy,那么就会有多次释放问题,还有可变借用指针类型 &mut T, String, 对于这类可以通过调用 clone 方法解决 move 语义 赋值,函数传参,返回值,match 这四个操作,如果是针对一个值类型的话,相当于把这个值赋值到目标上,原来值的修改不会影响到新的值。举个例子: fn main() { let num1 = 1; let num2 = num1; println!("num1={}, num2={}", num1, num2); } 如果换做是一个引用类型的话,执行上面的操作会怎么样?比如我们用 String 为例:

rust 入门

Rust 安装 curl https://sh.rustup.rs -sSf | sh 执行 hello world fn main(){ println!("Rust says Hello to TutorialsPoint !!"); }

2021_01_06_go_make_vs_new

https://www.godesignpatterns.com/2014/04/new-vs-make.html new: 申请一块内存,返回地址 make: 用来初始化 slice, map, channel, 返回的不是指针, func main() { const n = 5 // Start up the goroutines... for i := 0; i < n; i++ { i := i go func() { select { case <-shutdown: done <- i } }() } time.Sleep(2 * time.Second) // Close the channel. All goroutines will immediately "unblock". close(shutdown) for i := 0; i < n; i++ { fmt.Println("routine", <-done, "has exited!

20120_12_15_01_course

https://www.freeaihub.com/go/index.html 极客时间课程 https://d.shikey.com/jike/%E5%B7%B2%E5%AE%8C%E7%BB%93%E7%9A%84%E8%AF%BE%E7%A8%8B/41%20Nginx%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86100%E8%AE%B2/1%20%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E5%88%9D%E8%AF%86Nginx/ 运维书籍 http://www.itwangqing.net.cn/15309530058499.html

代理配置

Git 代理配置 配置 git 代理 https://gist.github.com/laispace/666dd7b27e9116faece6 docker 代理配置 https://note.qidong.name/2020/05/docker-proxy/ curl 配置代理 在 ~/.curlrc 文件配置 socks5 = "127.0.0.1:7890"

Docker 入门指南

全文较长,大致需要半小时左右时间阅读,若你已经有基础,可以根据自己的了解程度看起。 本文记录作为一个新手,从 Docker 起步 Docker 简介 1.1 Docker 概念 1.2 Docker 与 虚拟机区别 Docker 基本概念 2.1 核心概念 2.2 Docker 三剑客 其中第一章与第二章非常详细地介绍了 Docker 的相关概念与基本组成,主要是概论介绍等文字描述,第三章与第四章偏重于上手实践,从 Docker 环境安装、运行加速、镜像使用、镜像构成到镜像定制与发布,分解了各步骤的流程,通过教程加注解的形式加深读者印象。其中建立镜像的示例代码可以从 一、Docker 简介 谈到 Docker,不论我们是否实践过,都应该对它或多或少有一个印象,即“环境一次创建,多端一致性运行”,因为它正解决了曾经困扰我们已久“这段代码在我电脑上运行没问题啊”的烦恼。首先,简单介绍一下 Docker 技术是什么。 1.1 Docker 概念扫盲:什么是 Docker? Docker 是一个开放源代码软件项目,项目主要代码在2013年开源于 GitHub。它是云服务技术上的一次创新,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。 1.2 Docker 和虚拟机的区别与特点 二、Docker 基本概念 2.1 核心概念:镜像、容器与仓库 Docker 主要包含三个基本概念,分别是镜像、容器和仓库,理解了这三个概念,就理解了 Docker 的整个生命周期。以下简要总结一下这三点,详细介绍可以移步Docker 从入门到实践对应章节。 2.2 Docker 三剑客

Go 常用命令

记录下自己常用的几个 Go 命令 编译源码命令 命令用法 go build [-o output] [-i] [build flags] [packages] 解释: output 就是要输出的文件名, packages 通过 go help packages 可以查看,英文的解释是: Usually, [packages] is a list of import paths, 先不翻译了,详细的通过 go help packages 去了解。 常用举例 go build -o main github.com/crwkey/common

Misc

java 打 jar 插件: maven-compiler-plugin kerberos authentication https://github.com/whg517/blog/blob/master/source/_posts/programming/%E8%BF%9E%E6%8E%A5%E5%B8%A6%E6%9C%89%20Kerberos%20%E8%AE%A4%E8%AF%81%E7%9A%84%20Hadoop%20%20HBase%20Spark.md docker 网络 https://lengrongfu.github.io/2018/11/13/docker-network-beginner/ nc nmap docker-compose 先后启动问题 https://www.cnblogs.com/wang_yb/p/9400291.html 通过 lua 插入 js tcp 转发 noob https://github.com/Dennis-Zhang-SH/simplelb/blob/master/simple_load_balance.go // grpc https://github.com/Bingjian-Zhu/go-grpc-example https://erev0s.com/blog/how-hook-android-native-methods-frida-noob-friendly/ make vs new https://www.godesignpatterns.com/2014/04/new-vs-make.html blog https://courses.consensys.net/courses/take/bootcamp-basic-training/multimedia/24564917-welcome https://script.money/posts/031-programmer_learn_path/ * copilot 配置 https://github.com/github/copilot-docs/tree/main/docs#getting-started android jni 学习 https://www.jianshu.com/p/b4431ac22ec2 http://selinux.org/2019/08/20/openstack-tap/ idea 运行命令: /Users/dev4mobile/.sdkman/candidates/java/current/bin/java -XX:TieredStopAtLevel=1 -noverify -Dspring.profiles.active=test -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56971:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/dev4mobile/develop/servicewall/projects/backend/Mipha/target/classes:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-aws/3.2.6-SNAPSHOT/hyrule-aws-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.6.6/spring-boot-autoconfigure-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot/2.6.6/spring-boot-2.6.6.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/s3/2.13.23/s3-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.13.23/aws-xml-protocol-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.13.23/aws-query-protocol-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/protocol-core/2.13.23/protocol-core-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/arns/2.13.23/arns-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/profiles/2.13.23/profiles-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/sdk-core/2.13.23/sdk-core-2.13.23.jar:/Users/dev4mobile/.m2/repository/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/auth/2.13.23/auth-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/http-client-spi/2.13.23/http-client-spi-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/annotations/2.13.23/annotations-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/utils/2.13.23/utils-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/aws-core/2.13.23/aws-core-2.13.23.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/apache-client/2.13.23/apache-client-2.13.23.jar:/Users/dev4mobile/.m2/repository/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar:/Users/dev4mobile/.m2/repository/org/apache/httpcomponents/httpcore/4.4.15/httpcore-4.4.15.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/netty-nio-client/2.13.23/netty-nio-client-2.13.23.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-codec-http/4.1.75.Final/netty-codec-http-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-codec-http2/4.1.75.Final/netty-codec-http2-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-codec/4.1.75.Final/netty-codec-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-transport/4.1.75.Final/netty-transport-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-resolver/4.1.75.Final/netty-resolver-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-common/4.1.75.Final/netty-common-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-buffer/4.1.75.Final/netty-buffer-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-handler/4.1.75.Final/netty-handler-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-transport-native-epoll/4.1.75.Final/netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.75.Final/netty-transport-native-unix-common-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.75.Final/netty-transport-classes-epoll-4.1.75.Final.jar:/Users/dev4mobile/.m2/repository/com/typesafe/netty/netty-reactive-streams-http/2.0.4/netty-reactive-streams-http-2.0.4.jar:/Users/dev4mobile/.m2/repository/com/typesafe/netty/netty-reactive-streams/2.0.4/netty-reactive-streams-2.0.4.jar:/Users/dev4mobile/.m2/repository/software/amazon/awssdk/regions/2.13.23/regions-2.13.23.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.13.2.2/jackson-databind-2.13.2.2.jar:/Users/dev4mobile/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/Asimov-api/2.1-SNAPSHOT/Asimov-api-2.1-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/com/alibaba/fastjson/1.2.75/fastjson-1.2.75.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/link-api/2.3-SNAPSHOT/link-api-2.3-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/Deadpool-api/2.3-SNAPSHOT/Deadpool-api-2.3-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-common/3.2.6-SNAPSHOT/hyrule-common-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/commons-codec/commons-codec/1.15/commons-codec-1.15.jar:/Users/dev4mobile/.m2/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.2/jackson-annotations-2.13.2.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/koreeda-api/2.3-SNAPSHOT/koreeda-api-2.3-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/revali-api/1.1-SNAPSHOT/revali-api-1.1-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/Bender-api/2.1-SNAPSHOT/Bender-api-2.1-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-validation/2.6.6/spring-boot-starter-validation-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.60/tomcat-embed-el-9.0.60.jar:/Users/dev4mobile/.m2/repository/org/hibernate/validator/hibernate-validator/6.2.3.Final/hibernate-validator-6.2.3.Final.jar:/Users/dev4mobile/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar:/Users/dev4mobile/.m2/repository/org/jboss/logging/jboss-logging/3.4.3.Final/jboss-logging-3.4.3.Final.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-auth/3.2.6-SNAPSHOT/hyrule-auth-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-util/3.2.6-SNAPSHOT/hyrule-util-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/uuid/java-uuid-generator/3.1.5/java-uuid-generator-3.1.5.jar:/Users/dev4mobile/.m2/repository/org/apache/commons/commons-text/1.4/commons-text-1.4.jar:/Users/dev4mobile/.m2/repository/org/apache/commons/commons-crypto/1.0.0/commons-crypto-1.0.0.jar:/Users/dev4mobile/.m2/repository/net/java/dev/jna/jna/4.2.2/jna-4.2.2.jar:/Users/dev4mobile/.m2/repository/commons-io/commons-io/2.6/commons-io-2.6.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/2.6.6/spring-boot-configuration-processor-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter/2.6.6/spring-boot-starter-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.6.6/spring-boot-starter-logging-2.6.6.jar:/Users/dev4mobile/.m2/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar:/Users/dev4mobile/.m2/repository/ch/qos/logback/logback-core/1.2.11/logback-core-1.2.11.jar:/Users/dev4mobile/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.17.2/log4j-to-slf4j-2.17.2.jar:/Users/dev4mobile/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar:/Users/dev4mobile/.m2/repository/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar:/Users/dev4mobile/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar:/Users/dev4mobile/.m2/repository/org/yaml/snakeyaml/1.29/snakeyaml-1.29.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-web/2.6.6/spring-boot-starter-web-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-json/2.6.6/spring-boot-starter-json-2.6.6.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.13.2/jackson-datatype-jdk8-2.13.2.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.13.2/jackson-module-parameter-names-2.13.2.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/2.6.6/spring-boot-starter-tomcat-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.60/tomcat-embed-core-9.0.60.jar:/Users/dev4mobile/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.60/tomcat-embed-websocket-9.0.60.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-web/5.3.18/spring-web-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-beans/5.3.18/spring-beans-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-webmvc/5.3.18/spring-webmvc-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-expression/5.3.18/spring-expression-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-aop/2.6.6/spring-boot-starter-aop-2.6.6.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-aop/5.3.18/spring-aop-5.3.18.jar:/Users/dev4mobile/.m2/repository/io/jsonwebtoken/jjwt/0.9.0/jjwt-0.9.0.jar:/Users/dev4mobile/.m2/repository/com/google/guava/guava/27.0.1-jre/guava-27.0.1-jre.jar:/Users/dev4mobile/.m2/repository/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:/Users/dev4mobile/.m2/repository/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/Users/dev4mobile/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar:/Users/dev4mobile/.m2/repository/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar:/Users/dev4mobile/.m2/repository/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar:/Users/dev4mobile/.m2/repository/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar:/Users/dev4mobile/.m2/repository/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar:/Users/dev4mobile/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/Users/dev4mobile/.m2/repository/org/springframework/data/spring-data-redis/2.6.3/spring-data-redis-2.6.3.jar:/Users/dev4mobile/.m2/repository/org/springframework/data/spring-data-keyvalue/2.6.3/spring-data-keyvalue-2.6.3.jar:/Users/dev4mobile/.m2/repository/org/springframework/data/spring-data-commons/2.6.3/spring-data-commons-2.6.3.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-tx/5.3.18/spring-tx-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-oxm/5.3.18/spring-oxm-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-context-support/5.3.18/spring-context-support-5.3.18.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-web/3.2.6-SNAPSHOT/hyrule-web-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.5/jackson-datatype-jsr310-2.9.5.jar:/Users/dev4mobile/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.13.2/jackson-core-2.13.2.jar:/Users/dev4mobile/.m2/repository/joda-time/joda-time/2.10.4/joda-time-2.10.4.jar:/Users/dev4mobile/.m2/repository/com/github/ua-parser/uap-java/1.4.0/uap-java-1.4.0.jar:/Users/dev4mobile/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-consul/3.2.6-SNAPSHOT/hyrule-consul-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-starter-consul-discovery/3.1.0/spring-cloud-starter-consul-discovery-3.1.0.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-starter-consul/3.1.0/spring-cloud-starter-consul-3.1.0.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-consul-core/3.1.0/spring-cloud-consul-core-3.1.0.jar:/Users/dev4mobile/.m2/repository/com/ecwid/consul/consul-api/1.4.5/consul-api-1.4.5.jar:/Users/dev4mobile/.m2/repository/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-consul-discovery/3.1.0/spring-cloud-consul-discovery-3.1.0.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-starter-loadbalancer/3.1.1/spring-cloud-starter-loadbalancer-3.1.1.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-loadbalancer/3.1.1/spring-cloud-loadbalancer-3.1.1.jar:/Users/dev4mobile/.m2/repository/io/projectreactor/addons/reactor-extra/3.4.7/reactor-extra-3.4.7.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-cache/2.6.6/spring-boot-starter-cache-2.6.6.jar:/Users/dev4mobile/.m2/repository/com/stoyanr/evictor/1.0.0/evictor-1.0.0.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-starter-openfeign/3.1.1/spring-cloud-starter-openfeign-3.1.1.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-starter/3.1.1/spring-cloud-starter-3.1.1.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-context/3.1.1/spring-cloud-context-3.1.1.jar:/Users/dev4mobile/.m2/repository/org/springframework/security/spring-security-rsa/1.0.10.RELEASE/spring-security-rsa-1.0.10.RELEASE.jar:/Users/dev4mobile/.m2/repository/org/bouncycastle/bcpkix-jdk15on/1.68/bcpkix-jdk15on-1.68.jar:/Users/dev4mobile/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.68/bcprov-jdk15on-1.68.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-openfeign-core/3.1.1/spring-cloud-openfeign-core-3.1.1.jar:/Users/dev4mobile/.m2/repository/io/github/openfeign/form/feign-form-spring/3.8.0/feign-form-spring-3.8.0.jar:/Users/dev4mobile/.m2/repository/io/github/openfeign/form/feign-form/3.8.0/feign-form-3.8.0.jar:/Users/dev4mobile/.m2/repository/commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4.jar:/Users/dev4mobile/.m2/repository/io/github/openfeign/feign-core/11.8/feign-core-11.8.jar:/Users/dev4mobile/.m2/repository/io/github/openfeign/feign-slf4j/11.8/feign-slf4j-11.8.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-starter-consul-config/3.1.0/spring-cloud-starter-consul-config-3.1.0.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-consul-config/3.1.0/spring-cloud-consul-config-3.1.0.jar:/Users/dev4mobile/.m2/repository/com/athaydes/rawhttp/rawhttp-core/2.3.0/rawhttp-core-2.3.0.jar:/Users/dev4mobile/.m2/repository/org/projectlombok/lombok/1.18.22/lombok-1.18.22.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-core/5.3.18/spring-core-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-jcl/5.3.18/spring-jcl-5.3.18.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-cache-cloud-cluster/3.2.6-SNAPSHOT/hyrule-cache-cloud-cluster-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/org/springframework/boot/spring-boot-starter-data-redis/2.6.6/spring-boot-starter-data-redis-2.6.6.jar:/Users/dev4mobile/.m2/repository/io/lettuce/lettuce-core/6.1.8.RELEASE/lettuce-core-6.1.8.RELEASE.jar:/Users/dev4mobile/.m2/repository/io/projectreactor/reactor-core/3.4.16/reactor-core-3.4.16.jar:/Users/dev4mobile/.m2/repository/redis/clients/jedis/3.7.1/jedis-3.7.1.jar:/Users/dev4mobile/.m2/repository/org/apache/commons/commons-pool2/2.11.1/commons-pool2-2.11.1.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-mq-cloud/3.2.6-SNAPSHOT/hyrule-mq-cloud-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/org/springframework/kafka/spring-kafka/2.8.4/spring-kafka-2.8.4.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-context/5.3.18/spring-context-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/spring-messaging/5.3.18/spring-messaging-5.3.18.jar:/Users/dev4mobile/.m2/repository/org/springframework/retry/spring-retry/1.3.2/spring-retry-1.3.2.jar:/Users/dev4mobile/.m2/repository/org/apache/kafka/kafka-clients/3.0.1/kafka-clients-3.0.1.jar:/Users/dev4mobile/.m2/repository/com/github/luben/zstd-jni/1.5.0-2/zstd-jni-1.5.0-2.jar:/Users/dev4mobile/.m2/repository/org/lz4/lz4-java/1.7.1/lz4-java-1.7.1.jar:/Users/dev4mobile/.m2/repository/org/xerial/snappy/snappy-java/1.1.8.1/snappy-java-1.1.8.1.jar:/Users/dev4mobile/.m2/repository/org/springframework/cloud/spring-cloud-commons/3.1.1/spring-cloud-commons-3.1.1.jar:/Users/dev4mobile/.m2/repository/org/springframework/security/spring-security-crypto/5.6.2/spring-security-crypto-5.6.2.jar:/Users/dev4mobile/.m2/repository/ai/servicewall/hyrule-mq-facade/3.2.6-SNAPSHOT/hyrule-mq-facade-3.2.6-SNAPSHOT.jar:/Users/dev4mobile/.m2/repository/org/aspectj/aspectjweaver/1.9.7/aspectjweaver-1.9.7.jar ai.servicewall.mipha.MiphaApplication

2020 IDEA, GoLand 破解

简单写下破解步骤: 去官网下载最新的 IDEA,Goland 或其 Jetbrains 旗下IDEA安装(下面都是指IDEA安装方式,其他软件也一样) 下载破解密钥 jar (链接: https://pan.baidu.com/s/1C7EtJpiUschlqF21vif1LQ 提取码: 6tjb 复制这段内容后打开百度网盘手机App,操作更方便哦) 启动安装的IDEA软件,并且选择免费使用30天 解压破解密钥zip包,然后进入lib目录,将jetbrains-agent.jar 拖进安装的IDEA,会弹出一个对话框,使用默认选择即可,并继续下一步,重启软件 验证:help -> register, 可以查看过期时间

常用的开发工具

开发工具 画图工具 webchart 地址: http://webchart.ihuhai.cn

k8s 安装

使用kubeadm安装kubernetes集群 环境准备 关闭防火墙(如果开了的话) 关闭 SELinux 关闭swap 加载内核相关模块 更改系统参数 安装docker 添加docker源 查看docker版本 安装指定的docker版本 kubeadm安装kubernetes 安装kubeadm和kubelet docker的cgroup driver cgroup driver和引入的问题 修改docker 修改kubelet cgroup driver选取: systemd vs cgroupfs 重新加载服务 systemctl daemon-reload和 systemctl restart xxx kubeadm初始化集群 部署网络插件calico 存储插件 ceph 开启ipvs 编辑configmap 关于kubeadm的配置 Helm安装 镜像加速 使用kubeadm安装kubernetes集群 系统: Centos7 官方文档 环境准备 关闭防火墙(如果开了的话) systemctl stop firewalld systemctl disable firewalld 关闭 SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 关闭swap swapoff -a sed -i "s/\(^.*swap.*$\)/#\1/" /etc/fstab 加载内核相关模块 modprobe br_netfilter modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe nf_conntrack_ipv4 modprobe br_netfilter

使用ab命令做压力测试

ab 可以用来测试 HTTP 的负载, 下面列举几种简单的用法 发出总共100个,并发10个请求,并且保持长链接, 注意最后一定要以 / 结尾,这是很多初学者长犯的错误 ab -n 100 -c 10 -k www.baidu.com/

函数式编程

推荐一个比较好的讲解函数式编程的视频 观看地址: https://www.youtube.com/watch?v=IaYFOTbO4dw&t=436s

Vim 学习

vim file_name 启动文件, 进入 Normal 模式, 然后按 i, 进入插入模式, 这时候你就可以进入插入模式了 返回 Normal 模式, 请按 ESC 键。 i → 插入模式,按 ESC 返回到 Normal 模式 x :wq dd p

如何学习计算机

我有一个偏好 就是在学习一个东西前 得把概念弄清楚, 就是 我得明白我为什么要学习这个东西 以及 要学习的理论内容 实践大家都知道重要 不过理论经常为人忽视

clojure 入门

安装 brew install leiningen tldr lein lein repl lein new hello-world (ns hello-world.core) (defn -main [& args] (println "Hello world")) lein run

emacs 快速入门

break line: ctrl + e, ctrl + j / ctrl + m save file: ctrl + x, ctrl + s exit: ctrl + x, k, enter terminate input: ctrl + g cut: ctrl + w copy: alt + w paste: ctrl + y cut to end: ctrl + k delete one character after: ctrl + d delete one character before: delete delte one word after: alt + d delte one word before: alt + del

Linux 常用命令

防火墙知识点: 添加访问端口号: firewall-cmd –zone=public –add-port=6379/tcp –permanent 列出可访问的端口 firewall-cmd –list-ports 使配置生效 firewall-cmd –reload 查看状态: firewall-cmd –state 禁用防火墙: sudo systemctl stop firewalld ps -ef | grep redis 查看程序运行端口 netstat -nl | grep 61616 解压命令到某个具体目录 tar -zxvf xx.tar.gz -C xxx 查询文件包含指定字符串 grep -i “mystring” /tmp/myfile, 其中 i 代表忽略大小写

Kong 基础

Kong (https://github.com/Kong/kong) 是一个云原生,高效,可扩展的分布式 API 网关。

宝藏网站

分享一些比较小众但巨好用的宝藏网站 Crash course中文字幕 IP 地址查询 免费抠图 https://www.zhihu.com/question/33889180/answer/805723031

2020最新Java面试题

本人整理了一份常见的面试题,其中大部分都是来源于互联网,其中有些答案只能作为参考,如有不足还请指正,更多精彩内容还请关注我的微信号:IT有限才华青年

Markdown 学习

我们写博客经常要使用到 Markdown 语法,所以本篇博客将会简单的介绍 Markdown 用法, 下边以输入的文本和效果 两部分来展示 一、标题 是以 1 ~ 6 个 # 开头的文本, # 越多,标题大小越小 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 二级标题 三级标题 二、粗体和斜体 **这是粗体** *这是斜体* ***这是粗体加斜体*** 这是粗体 这是斜体 这是粗体加斜体 三、图片引用 ![微信二维码.jpg](https://i.loli.net/2019/12/01/bKJMkfalvrVZhPp.jpg) 四、无序列表 - 第一部分 - 第二部分 - 第三部分 第一部分 第二部分 第三部分 五、引用 引用的格式是在 > 后面书写文字, 如下 > 读一本好书,就是在和高尚的人对话。 --歌德 > 雇佣制度对工人不利,但工人无法摆脱这个制度。 --dev4mobile 读一本好书,就是在和高尚的人对话。 –歌德 雇佣制度对工人不利,但工人无法摆脱这个制度。 –dev4mobile 六、表格 可以使用冒号来定义表格的对齐方式,如下: | 姓名 | 年龄 | 工作 | | :----- | :---: | ----: | | 小可爱 | 18 | 吃可爱多 | 姓名 年龄 工作 小可爱 18 吃可爱多 七、删除线 在需要删除文字的前后各使用两个 ~, 如下:

如何在命令行里格式化JSON

身为一名软件工程师,我们经常需要在命令行里面优雅的显示 JSON,那么如何做呢? 有两种比较简单的方式可以从命令行漂亮的打印 JSON 字符串,第一种使用python,另外一种就是使用 jq 命令。 使用 python 用法: input | python -mjson.tool input 作为json输入流,经过管道,最后使用 python -mjson.tool 处理 Example 1: echo '{"perso":{"name": "dev4mobile"}}' | python -mjson.tool Output: { "perso": { "name": "dev4mobile" } } Example 2: curl http://127.0.0.1:8080 | python -mjson.tool Output: { "timestamp": "2019-12-01T06:01:46.993+0000", "status": 404, "error": "Not Found", "message": "No message available", "path": "/" } 上边是常用的两个例子 使用 jq 命令 安装 jq mac os 平台 brew install jq Ubuntu 平台 sudo apt-get install jq 用法:

Linux Shell 快速入门

本文主要介绍 Linux Shell 编程相关基础知识,可以让初学者快速入门,内容主要包含以下几个方面: Shell 脚本概述 Shell 脚本运行与调试 Shell 如何定义变量 Shell 表达式 Shell 流程控制 Shell 函数 Shell 脚本概述 Shell 脚本是一门简单的脚本语言,主要由 Shell 基本语法 + Linux 命令 组成,所以说要写好 Shell 脚本,必须掌握好一些重要的 Linux 命令。 下面是一个最简单的 Shell 脚本内容,我们可以将其保存在一个test.sh 文件中 #!/bin/bash # This is a output string `https://dev4mobiles.com` echo "https://dev4mobiles.com" 第一行 #! 是约定标记,英文读作shell bang,后面的 /bin/bash 指定了脚本需要哪种解释器来解释, 本文使用了常用 bash 解释器。 第二行 以 # 开头的行就是注释,会被解释器忽略 第三行 功能是向命令行输出字符串,字符串一般用双引号引起来 Shell 运行与调试 Shell 脚本的执行是解释执行的,也就是说边解释边执行 运行 运行方式有两种: 作为可执行程序 chmod u+x test.sh ./test.sh 首先需要给文件 test.

Lua 基础入门

学习 Lua 的必要性 因为工作中经常与 nginx 打交道,而 nginx 又有大量的模块是由 Lua 写的,所以有必要学习下 Lua 基础的语法知识。Lua 作为一门动态脚本语言,解释执行,和 JavaScript 有点相似。 语言特点 语句结束没有分号 跟 JavaScript 很像 默认定义的是全局变量,定义局部变量需要加 local 关键字 数组索引从1开始 没有 i++ 操作符号,只能 i = i + 1 注释 单行注释 -- 注释内容 多行注释 --[[ 注释内容 ]]-- 内置数据类型 总共有6种内置数据类型, 其中包括nil, boolean, number, string, table, function nil 通常是没有赋值,直接使用才会是这个值, 比如说下面的代码直接打印 变量 name print(name) `` 在 ifelse 判断语句中,nil 被当成false 分支,但 nil ~= false, 在 Lua 语言当中,不等于使用 ~= 来表示, 而不是我们常见的 != 。

Bash Heredoc

当写 shell scripts 时, 你可能会传递多行文本或代码块给交互式命令,比如 cat, tee, sftp。 Heredoc 是一种重定向类型,它允许你可以传递多行数据给到你当前输入的命令。 Heredoc 语法格式: [command] <<[-] ['DELIMITER' | DELIMITER] HERE-DOCUMENT DELIMITER 第一行是以可选命令开始,紧接着是重定向符号 <<, 可选 - 和 带引号的界定标识符号 或不带引号的标识符 你可以使用任何字符串作为分隔符,我们最常用的是 EOF 或者 END 如果使用未带引号的 DELIMITER, 那么传递给命令的 HERE-DOCUMENT 内容里面的 SHELL 变量会被替换掉, 当然可以使用 \${} 来解决 << 后面添加 -, 将会导致以 tab 缩进的代码会被忽略掉,其它符号,比如空格不会被忽略掉 HERE-DOCUMENT 块里面可以包含命令,变量和任何其它类型的输入 最后一行必须是不带引号的 DELIMITER Heredoc 基本用法 我将使用 cat 作为命令作为演示如何使用 Heredoc。 下面的 Example里面, 我向 HERE-DOCUMENT 内容块里面传递了环境变量 PWD 和 执行命令 whoami cat << EOF The current directory is: $PWD You are logged in as: $(whoami) EOF 从下面的输出可以看出,环境变量 PWD 和 whoami 被替换掉了

Rust 入门

这是Rust入门第一课,我们要学会安装rust,编译一个rust文件,还有如何升级rust工具链 工具安装 下载 适合任何平台 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh mac os 平台 推荐使用brew install rust来安装 验证下载是否成功 rustc --version返回版本信息,则说明rust安装成功 工具介绍 rustc 简介 rust编译器,负责处理,编译,链接rust语言源文件,比如说,要编译file.rs文件,可以使用命令rustc file.rs rustup 简介 rust工具链安装器,负责安装,管理和更新rust工具链,比如说,要更新所有工具链, 也就是说升级rust,可以使用命令 rustup update cargo 简介 rust包管理器,负责管理rust工程和他们的module依赖,这是是我们学习最常用的一个工具,我们来看看这个命令包含哪些参数 ➜ ~ cargo Rust's package manager USAGE: cargo [OPTIONS] [SUBCOMMAND] OPTIONS: -V, --version Print version info and exit --list List installed commands --explain <CODE> Run `rustc --explain CODE` -v, --verbose Use verbose output (-vv very verbose/build.

使用 Github Action 搭建 Hexo 博客

Hexo 是使用 nodejs 写的博客框架,使用 Markdown 引擎来解析文章,在几秒内,即可生成绚丽的主题生成静态网页。作为一名有追求的程序员,我们必须得有自己的个人网站,所以我要开始搭建自己的博客了,于是开始了我选择博客平台之旅,最终选择了 Hexo 。我为什么选择 Hexo 搭建我的博客,其中最主要原因是国内程序员使用广泛,可选择的主题也很多,还有最重要的可迁移性强。 这是我的个人博客效果:IT才华有限青年·dev4mobile 原理 我们可以通过命令 hexo init xxx 来生成 hexo 网站源码,然后通过 hexo generate 来编译源码,生成我们需要的静态文件,这些静态文件在 public目录下, 这个 public 目录就是我们要发布的网站目录。下面是我简单的画了一下 hexo 网站的运行原理 搭建过程 软件准备 这里只选择 mac 平台做说明,其它平台请 google 安装 nodejs #搜索 node 是否存在 brew search node #安装 node brew install node 安装 cnpm 这里不用 cnpm 也行,使用 nodejs 自带的npm,只不过速度非常慢 npm install cnpm -g 安装 hexo-cli cnpm install hexo-cli -g 或者 npm install hexo-cli -g 安装git brew install git 初始化 blog 搭建一个博客需要四步,初始化博客目录,安装博客依赖,本地发布,测试。记住目录名不能错,<github_user_name>.

常用开发配置

yum search java java-1.8.0-openjdk-devel.x86_64 yum -y install java-1.8.0-openjdk-devel.x86_64 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64 #export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin 安装 docker 正确姿势 sudo yum update sudo yum remove docker docker-common docker-selinux docker-engine yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 阿里云加速地址 https://6a1o9a2p.mirror.aliyuncs.com 阿里云镜像仓库 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> 参考: https://segmentfault.com/a/1190000015389941 参考: https://blog.csdn.net/shadow_zed/article/details/85557922

Misc

常用网址 SM.MS 免费图床 imchr 图床 微信公众号排版 微信公众平台 Gif 录制 共享文件 在线解压 优秀的学习网站 misc techdifference learnlanguages 编程思想 Learn xerra devhints 后端开发 Baeldung·Java Google 编程风格 GeeksforGeeks mkyong.com Java Tutorials 前端开发 https://github.com/lefex/FE 运维 运维之美 喜欢的音乐 世间美好与你环环相扣

免费电影

娱乐 目前看过的无广告最好的在线电影 免费在线电影 中国股市记忆 免费版权图片 pixabay图片网站 Unsplash免费图片网站 littlevisuals免费图片网站 twnsnd复古图片网站 pexels高质量图片网站

Mac 破解软件下载

Mac 破解软件下载 我常用的下载破解 Mac 软件的网址是:https://xclient.info/, 这里有很多破解软件, 如果安装软件之后打开遇到要移除到垃圾桶,请务必在命令行执行命令 sudo xattr -rd com.apple.quarantine /Applications/xxx.app, 其中/Applications/xxx.app就是你的 app 安装路径。 MWeb 3.4.1 破解下载 链接: https://pan.baidu.com/s/1mtSyqXbq_r0YfrBR7RS2oQ 提取码: pqff 复制这段内容后打开百度网盘手机App,操作更方便哦。

测试命令 /usr/local/Cellar/go/1.16.5/libexec/bin/go tool test2json -t /private/var/folders/n6/w1krkv8n1ws7nx2t0trrxg_r0000gn/T/___Test_makeSalt_in_github_com_servicewall_whisky_pkg_crypto.test -test.v -test.paniconexit0 -test.run ^\QTest_makeSalt\E$

DOCKER_BUILDKIT=0 问题?

rust-gdb https://blog.logrocket.com/debugging-rust-apps-with-gdb/

https://lzone.de/cheat-sheet/XPath https://einverne.github.io/post/2021/07/vps-benchmark.html

etcdctl get

1 https://devhints.io/

no copy 问题, 比如 sync.WaitGroup 包含了 noCopy 定义 sync.WaitGroup, 多个 goroutine 同步,但不能通行 sync.Mutex: 对资源上锁 (https://geektutu.com/post/hpg-sync-cond.html) sync.RWMutex 读写锁, sync.Locker sync.once 函数执行一次 .sync.pool 复用对象 sync.cond: 条件变量,配置 sync.Locker 使用,发送信号,其他的根据相应的信号,做相应的操作 sync.Map: 同步 map sync.atomic 原子操作 close chan 可以多次读,不会堵塞,并且返回一个零值(暂且这么认为)

protoc 命令 protoc -I. --go_out=plugins=grpc,paths=source_relative:. **/*.proto https://blog.csdn.net/winter_wu_1998/article/details/113518602 https://jishuin.proginn.com/p/763bfbd4ef61

https://github.com/lifei6671/interview-go/blob/master/question/q001.md

rust gdb 调试 https://github.com/fucking-translation/blog/blob/main/src/lang/rust/14-%E4%BD%BF%E7%94%A8GDB%E8%B0%83%E8%AF%95Rust%E5%BA%94%E7%94%A8.md https://zhuanlan.zhihu.com/p/77158150 playground上mir,ir,assembly都有,自己编译调整flag就有了 https://fucking-translation.github.io/blog/lang/rust/summary.html

~/d/p/p/t/pb ❯❯❯ tree . . ├── go.mod ├── hello │ └── proto │ └── user │ └── service.pb.go ├── proto │ ├── article │ │ └── message.proto │ └── user │ ├── message.proto │ └── service.proto └── service.pb.go 6 directories, 6 files 查找 所有.go 结尾的文件 for x in **/*.go do echo $x; done ** : 会匹配所有目录 *.go 匹配以 go结尾的文件 **/* 代表递归获取当前目录下所有文件和文件夹 **/*(.) 只是普通文件 (https://superuser.com/questions/1638522/zsh-and-globstar-to-match-all-files-in-subdirectories-but-not-directories) **/*(-.) 包括普通文件和符号链接文件 注意: * 不包含隐藏文件 shell 学习 https://xie.

curl x | jq, python fx base64,hash,urlencode,格式化json youdao() { w3m -dump “https://www.youdao.com/w/$1/#keyfrom=dict2.top" | grep “go top” -A 200 | tail -n +2 | more }

title: “Linux 重定向” date: 2022-01-09T16:28:21+08:00 draft: false bash 解析器工作原理 解释:解析器解析到 “<” 以后会优先处理重定向,将标准输入重定向 file,然后处理命令剩下的部分

虚拟网卡路径 /sys/devices/virtual/net /proc/net/dev 如果有多块物理网卡, 怎么看网卡走,主要看路由 linux 内核路由表 route/ route -n

cxx 包管理工具

cxx 包管理工具 cmake的 fetch_content也可以指定tag / commit id conan vcpkg

Goland 2022.1 破解

下面记录下破解过程 先升级 goland 到最新的 2022.1 下载破解包 (http://blog.idejihuo.com/download.php?id=1055) 执行破解包的脚本: sh install.sh 输入破解包的激活码 破解教程参考: http://blog.idejihuo.com/topics/jetbrains

Neovim 配置

安装 brew install nvim 检查 nvim +checkhealth 参考 https://github.com/Allaman/nvim