├── .gitignore ├── readme.md ├── todo.md ├── 前端 ├── Css多行字符截取方法详解.md ├── Vue框架选型.md ├── css技术.md ├── html中调用本地exe应用程序.md ├── iframe和frame的区别.md ├── readme.md └── 前端模块的动态加载.md ├── 工具 ├── Chrome安装指定版本[旧版本 历史版本 离线].md ├── Chrome禁用更新[update chflags macos].md ├── HTPC搭建.md ├── IDE │ ├── IDE-Idea系IDE工具Git配置.md │ ├── IDE-Idea系IDE远程开发[goland].md │ ├── IDE-SublimeText所遇问题.md │ ├── IDE-Sublime插件.md │ ├── VSCode-Golang │ │ └── VSCode-golang测试参数.md │ ├── VSCode-Java │ │ ├── VS Code Java 开发指南(转)[插件 maven].md │ │ ├── VSCode-Java 11 or more recent is required to run.md │ │ ├── VSCode-java maven工程reimport操作.md │ │ └── readme.md │ └── VSCode │ │ ├── MacOS m1系统code命令执行失败(转).md │ │ ├── VSCode remote连接失败 - Bad owner or permissions on ssh config[windows].md │ │ ├── VSCode remote连接穿透后的win10主机.md │ │ ├── VSCode-不展示(不搜索)指定目录[ignore].md │ │ ├── VSCode-大型工程监控文件数过多.md │ │ ├── VSCode-安装离线插件[offline plugin].md │ │ ├── VSCode-总是提示输入git用户名密码.md │ │ ├── VSCode-禁止扩展自动更新(auto-update).md │ │ ├── VSCode-离线安装remote ssh插件[linux].md │ │ ├── VSCode内置命令.md │ │ ├── VSCode历史版本兼容记录[指定版本 旧版本].md │ │ ├── VSCode安装指定版本的插件.md │ │ └── 配置 │ │ ├── dlv-忽略golang版本dlvFlags[--check-go-version].md │ │ ├── launch.json配置[args env].md │ │ └── settings.json配置.md ├── Navicat生成ER图表时不显示表注释和列注释[mysql].md ├── ffmpeg与音视频操作 │ ├── CentOS下安装ffmpeg工具.md │ ├── ffmpeg分离mp4视频中的mp3音频.md │ ├── ffmpeg常用命令.md │ ├── ffprobe查看媒体文件信息.md │ └── readme.md ├── git │ ├── git branch创建和删除远程分支.md │ ├── git branch查看当前跟踪的上游分支.md │ ├── git branch设置上游分支.md │ ├── git cat-file查看id类型是commit还是tag.md │ ├── git checkout切换到指定tag或commit.md │ ├── git checkout检出远程分支.md │ ├── git clone -c core.symlinks=true自动创建软链接[win 快捷方式].md │ ├── git commit --amend修改最后一次提交.md │ ├── git config代理设置.md │ ├── git config免密码操作[gitconfig git-credentials].md │ ├── git config初始化设置邮箱用户名.md │ ├── git config换行符[todo].md │ ├── git diff比较指定文件的差异.md │ ├── git diff比较指定版本(commit)的差异[gitkraken].md │ ├── git log与reflog查看提交历史.md │ ├── git pull与rebase.md │ ├── git push pull 拉取和推送所有分支[branch].md │ ├── git push pull 拉取和推送所有标签[tag].md │ ├── git push已经提交到远程仓库的错误提交修复和回退.md │ ├── git reset重置工作区与暂存区.md │ ├── git rev-parse查看当前所在commit id.md │ ├── git show查看指定commit的提交详情[修改记录].md │ ├── git sparse-checkout稀疏检出应用.md │ ├── git status将文件状态标为renamed问题探究(转).md │ ├── git status显示不全的问题.md │ ├── git token认证.md │ ├── git update-index --assume-unchanged忽略指定文件的变更[gitignore].md │ ├── git 使用子仓库.md │ ├── git 大文件清理.md │ ├── github-fork使用.md │ ├── git命令应用-后悔药.md │ ├── git命令应用-覆盖分支.md │ └── 问题处理 │ │ ├── git clone出现Unable to find remote helper for https.md │ │ ├── git clone或push出现401 Unauthorized while accessing.md │ │ ├── git push tag.md │ │ ├── git push出现refusing to merge unrelated histories.md │ │ ├── gitignore文件无效.md │ │ ├── git无法提交空目录.md │ │ └── git编译问题.md ├── markdown │ ├── Markdown图片并排显示[表格].md │ ├── Markdown流程图绘制[mermaid].md │ ├── Markdown特殊符号收集[颜文字 emoj 中文字符].md │ └── Markdown输入角标.md ├── svn │ ├── SVN-hooks钩子的使用.md │ ├── SVN命令应用-diff.md │ ├── SVN命令应用-冲突解决.md │ ├── SVN命令应用.md │ ├── SVN命令问题处理.md │ ├── SVN服务器搭建-使用apache代理svn服务.md │ ├── SVN服务器搭建-多版本库配置.md │ └── SVN服务器搭建-安装及配置.md ├── word文档中插入高亮代码块[docx office].md ├── yaml │ ├── yaml中使用null表示空对象.md │ └── yaml文件中&的用法.md ├── youtube │ ├── readme.md │ ├── youtube-dl.md │ ├── 问题处理.md │ └── 问题处理 │ │ └── ERROR Unable to extract uploader id.md ├── 使用pandoc进行markdown与word的格式转换[md docx].md └── 终端 │ ├── MobaXterm-Unable to use a TTY.md │ ├── SecureCRT.md │ ├── SecureCRT中文乱码.md │ ├── SecureCTR配色方案.md │ ├── WinScp通过跳板机连接服务器[filezilla].md │ └── XShell6启动报错-由于找不到mfc110.dll,无法继续执行代码.md ├── 数据库与SQL ├── Postgres │ ├── SQL技巧 │ │ ├── Postgresql-主键&自增序列.md │ │ ├── Postgresql-创建索引.md │ │ ├── Postgresql-删除正在占用的数据库.md │ │ ├── Postgresql-外键约束.md │ │ ├── Postgresql-常用alter语句.md │ │ ├── Postgresql-查看正在运行的sql及处理方法.md │ │ ├── Postgresql-自动更新created_at和updated_at字段.md │ │ ├── Postgresql-表级备份.md │ │ └── Postgresql-设置自增主键初始值.md │ └── 存储过程 │ │ ├── Postgres存储过程(一)入门.md │ │ ├── Postgres存储过程(三)-动态sql.md │ │ ├── Postgres存储过程(二)-多返回值.md │ │ ├── Postgres存储过程(五)-嵌套模块.md │ │ ├── Postgres存储过程(四)-流程控制.md │ │ └── Postgres存储过程-$$.md ├── SQL │ ├── SQL关于多字段联合索引与独立索引的效率区别.md │ ├── SQL情境分析之group by与聚合函数的应用[外键].md │ ├── SQL情境分析之分组后按照分组规则合并字符串.md │ ├── SQL情境分析之按时间分段查询.md │ ├── SQL情境分析之窗口函数.md │ ├── SQL技巧 - case when批量更新.md │ ├── SQL技巧 - union all批量插入.md │ ├── SQL语法 - 关于外键.md │ └── SQL语法-join与union.md └── 数据库对比 │ ├── 数据类型.md │ ├── 面向程序员的数据库访问性能优化法则(一)引言.md │ ├── 面向程序员的数据库访问性能优化法则(七)利用更多资源.md │ ├── 面向程序员的数据库访问性能优化法则(三)减少数据访问.md │ ├── 面向程序员的数据库访问性能优化法则(二)简介.md │ ├── 面向程序员的数据库访问性能优化法则(五)减少交互次数.md │ ├── 面向程序员的数据库访问性能优化法则(六)减少数据库CPU运算.md │ └── 面向程序员的数据库访问性能优化法则(四)返回更少数据.md ├── 未分类 ├── Gradle脚本示例.md ├── Hexo基础应用.md ├── Json添加注释(转).md ├── Neo4j-Cypher语法实践.md ├── VirtualBox5.x没有vdfuse工具的解决方法.md ├── vCenter.md ├── 安卓-查看已连接wifi的密码[android].md ├── 技术杂谈.md └── 笔记-编译原理.md ├── 笔记 ├── 201709.md └── 201908.md ├── 系统 ├── Mac │ ├── Iterm2启动lrzsz上传下载.md │ ├── Iterm2快捷键.md │ ├── Keyboard Maestro.1.md │ ├── Keyboard Maestro实现图像文字识别[OCR].md │ ├── Keyboard Maestro识别二维码[OCR zbar].md │ ├── Mac-Alt+Tab切换窗口.md │ ├── Mac-Finder强制使用多标签代替多窗口.md │ ├── Mac-Finder显示隐藏文件.md │ ├── Mac-office word2016不显示图片.md │ ├── Mac-sudo仍然Operation not permitted.md │ ├── Mac-刷新DNS缓存.md │ ├── Mac-命令行下打开当前目录 [open finder].md │ ├── Mac-标准sed命令 invalid command code[gsed].md │ ├── MacOS-realvnc连接失败too many security failures[远程连接].md │ ├── MacOS-xattr移除附加属性.md │ ├── MacOS关闭动画效果[调度中心].md │ ├── MacOS连上VPN后仍无法访问内网[ppp0 ParallelsDesktop].md │ ├── Mac下VMware关闭DHCP.md │ ├── Mac下Wireshark无法监听网卡设备(权限不足).md │ ├── Mac下netstat无法显示pid [lsof netstat].md │ ├── Mac信任网站证书[https ssl].md │ ├── Mac修改默认播放器.md │ ├── Mac关闭开机声音.md │ ├── Mac单用户模式.md │ ├── Mac命令行启动 RealVNC server[远程连接 realvnc vnc].md │ ├── Mac命令行操作vmware虚拟机.md │ ├── Mac开启ssh服务.md │ ├── Mac调整Launchpad(启动台)图标大小.md │ ├── Mac路由表变量[默认路由 route vpn].md │ ├── Mac路由表查询[route netstat].md │ ├── Mac远程连接Windows[remote desktop m1].md │ ├── homebrew镜像源.md │ ├── 关闭Office的自动更新[Microsoft Update Assistant].md │ └── 打开macOS内置的NTFS读写功能(转).md ├── ParallelsDesktop │ ├── Mac命令行操作parallel虚拟机[pd].md │ └── Parallels Desktop虚拟机将正常工作但无法连接网络.md ├── VMWare │ ├── MacOS VMWareFusion安装vmtools.md │ ├── MacOS VMWareFusion导入Win下的虚拟机.md │ ├── MacOS VMwareFusion设置vmnet网段的方法[NAT].md │ ├── MacOS下VMware Fusion为CentOS7扩容磁盘[LVM].md │ ├── VMWare为虚拟机收缩磁盘(Mac宿主机Win10虚拟机).md │ ├── VMWare为虚拟机收缩磁盘-关于VMware虚拟机磁盘收缩的几种方法(转).md │ ├── VMWare为虚拟机收缩磁盘.md │ ├── VMWare为虚拟机收缩磁盘失败.md │ ├── VMWare为虚拟机新增磁盘.md │ ├── VMWare放行vlan数据包.md │ ├── VMWare网络设置.md │ ├── VMWare设置共享目录[hgfs vmhgfs-fuse].md │ ├── VMware 12安装Mac OS X 10.11.md │ ├── VMware vSphere Client安装虚拟机.md │ ├── VMware克隆节点后网卡混乱导致无法上网的解决过程.md │ ├── VMware安装Mac虚拟机高分屏下显示优化.md │ ├── VMware安装android安卓模拟器.md │ ├── VMware桥接模式bridge配置静态IP.md │ ├── VMware连接到远程虚拟机.md │ └── 问题处理 │ │ ├── Linux打开VMWare报错Could not open vmmon.md │ │ ├── XAMPP和VMware Workstation占用443端口冲突.md │ │ ├── 启动虚拟机时显示无法打开内核设备.md │ │ ├── 启动虚拟机显示 锁定文件失败, 打不开磁盘或快照所依赖的磁盘.md │ │ └── 虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本.md ├── VirtualBox │ └── VirtualBox磁盘扩容.md └── Win │ ├── Win11关闭自动更新.md │ ├── Windows-realvnc远程连接黑屏.md │ ├── Windows-ssh免密登录.md │ ├── Windows-win10关闭自动更新.md │ ├── WindowsServer虚拟声卡[阿里云].md │ ├── Windows下使用wireshark抓取localhost网络包.md │ ├── Windows下创建软链接-mklink命令.md │ ├── Windows下查看网卡接口索引[cmd ipconfig arp route netstat].md │ ├── Windows使用技巧-设置目录显示模式.md │ ├── Windows做ssh隧道穿透.md │ ├── Windows允许ping请求.md │ ├── Windows内置vpn只代理指定地址[默认网关 route].md │ ├── Windows内置远程连接-最大连接数超出的问题(强制下线).md │ ├── Windows启用管理员账户Administrator[cmd net user].md │ ├── Windows命令应用-net.md │ ├── Windows命令应用.md │ ├── Windows安装OpenSSH.md │ ├── Windows开启sshd服务.md │ ├── Windows挂载NFS及开机自动挂载.md │ ├── Windows查看已连接的wifi密码.md │ └── Windows进程管理命令-tasklist与taskkill.md ├── 编程领域 ├── RESTFul总结.md ├── SSO单点登陆及实现方式CAS OAuth.md ├── 不合适的术语翻译.md ├── 你的系统如何支撑高并发(转).md ├── 关于爬虫程序的智能解析.md ├── 分布式与微服务 │ ├── CAP原则与BASE理论[ACID].md │ ├── RPC框架选型.md │ ├── readme.md │ ├── 借助中间件实现分布式锁[zk redis etcd].md │ ├── 分布一致性算法Paxos和Raft.md │ ├── 微服务-限速器算法[time.rate Wait Allow Reserve].md │ ├── 微服务概念SpringCloud vs Kubernetes(转).md │ └── 服务发现中间件.md ├── 加密与认证机制 │ ├── 计算大文件md5及sha1值(golang版).md │ ├── 计算大文件md5及sha1值(python版).md │ └── 身份认证 session VS token.md ├── 原码反码补码及进制转换.md ├── 哪些项目的源代码最值得阅读?(转).md ├── 常用位运算表达式收集.md ├── 并发模型 │ ├── 并发与锁的认识.md │ ├── 异步事件库-libevent libev libuv的认识.md │ ├── 悲观锁与乐观锁.md │ └── 线程池的好处(转).md ├── 开源许可证选择.md ├── 技术历史 │ ├── JavaScript 模块化历程(转).md │ └── 浏览器User-agent String里的历史故事.md ├── 接口与抽象类, 抽象函数.md ├── 时区标准UTC与GMT.md ├── 版本号约定.md ├── 生成随机字符串表示唯一id[uuid snowflake mongoid md5].md ├── 编程测试 │ ├── jmeter │ │ ├── jmeter压测.md │ │ ├── jmeter插件开发.md │ │ ├── jmeter计数器生成变量.md │ │ ├── readme.md │ │ └── zk压测实战 │ │ │ ├── javaAPI │ │ │ └── readme.md │ │ │ └── zkJmeter │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── jmeter │ │ │ ├── ZkGet.java │ │ │ ├── ZkInsert.java │ │ │ ├── ZkUpdate.java │ │ │ ├── ZkWatcher.java │ │ │ └── ZkWatcherPool.java │ ├── wrk │ │ ├── wrk error-connect,read,write.md │ │ ├── 压测工具wrk之lua脚本之request与response函数.md │ │ ├── 压测工具wrk使用.md │ │ └── 压测工具wrk发送post请求.md │ ├── 压测工具Jmeter.md │ ├── 压测工具Locust.md │ ├── 压测工具Vegeta.md │ ├── 压测工具ab,wrk对比.md │ ├── 并发指数-tps, rps, qps.md │ └── 引言.md ├── 编程语言中二进制变量的定义方法.md ├── 词法作用域语言的标准.md ├── 语言战争.md ├── 软件版本代号中英文缩写(GA, RC, RELEASE等)的含义.md ├── 进程线程.md └── 闭包 │ ├── 001-闭包陷阱执行顺序.md │ ├── 002-闭包陷阱多核循环.md │ └── readme.md └── 语言和框架 ├── Java ├── springboot │ └── SpringBoot Post请求体大小限制.md ├── 工具命令 │ ├── Java jvm 参数 -Xms -Xmx -Xss.md │ ├── Java中9种常见的CMS GC问题分析与解决(转).md │ ├── jinfo [-flags PrintFlagsFinal].md │ ├── jmap -heap查看堆内存现状[dump HeapFreeRatio NewSize MAT].md │ ├── jstat查看gc耗时[gcutil].md │ ├── readme.md │ └── 设置Java VM参数实现在Full GC前后自动生成Dump[HeapDump].md ├── 工程 │ ├── Gradle │ │ ├── gradle build - Could not target platform:'Java SE 10' using tool chain:'JDK 8 (1.8)'.md │ │ ├── gradle引入guava[com.google.common.collect].md │ │ ├── readme.md │ │ └── 使用vscode创建使用gradle构建的SpringBoot工程.md │ ├── Idea │ │ ├── Idea打包Maven不执行测试Test[skipTests].md │ │ ├── Idea打包jar包详尽流程[build].md │ │ ├── Idea设置全局Maven失效的问题.md │ │ ├── readme.md │ │ └── 普通Java工程转换成Maven工程(添加pom.xml).md │ ├── Maven │ │ ├── Maven package -P命令打包选择指定的配置文件[config spring.profiles.active].md │ │ ├── Maven入门实践.1.基本工程.md │ │ ├── Maven入门实践.2.创建普通工程.md │ │ ├── Maven入门实践.3.创建web工程.md │ │ ├── Maven镜像仓库配置.md │ │ ├── readme.md │ │ └── 多模块工程命令行执行mvn package出现 xxx.jar is missing, no dependency information available.md │ ├── Spring │ │ ├── Spring Maven Idea 与打包.md │ │ ├── Spring Schedule详解.md │ │ ├── SpringBoot-PathVariable请求路径出现点号'.'时导致路径参数截断获取不全的解决办法.md │ │ ├── Springboot+Idea.1.创建Sprintboot工程.md │ │ ├── Springboot+Idea.2.由空工程构建.md │ │ ├── Springboot+Idea.3.application.properties配置文件.md │ │ ├── Springboot+Idea.4.多模块工程.md │ │ ├── VSCode运行SpringBoot工程.md │ │ ├── readme.md │ │ ├── spring boot 配置 spring.config.location.md │ │ ├── 读取application.properties配置文件中的数据.md │ │ └── 问题处理 │ │ │ └── SpringBoot「全局统一处理异常封装」导致返回双重值问题.md │ └── 命令行编译运行java程序[javac].md ├── 常用操作 │ ├── Java-ConcurrentHashMap排序.md │ ├── Java-Map字典遍历[entrySet forEach].md │ ├── Java-Map更新put与replace.md │ ├── Java-String与byte数组互转.md │ ├── Java-switch..case不加break会匹配下一个case[fallthrough].md │ ├── Java-toArray List转数组.md │ ├── Java-一个catch捕获多个异常.md │ ├── Java-各种Map的排序[遍历 HashMap TreeMap LinkedHashMap].md │ ├── Java判断对象类型[instanceof].md │ ├── Java读取静态文件内容[spring boot].md │ ├── Java长字符串.md │ ├── Java长注释[function param].md │ ├── 对象与json互转.1.fasterxml.md │ ├── 对象与json互转.2.fasterxml 复杂数据结构.md │ └── 对象与json互转.3.fasterxml 特殊属性[JsonIgnore JsonProperty JsonInclude JSONField].md ├── 标准库 │ ├── shell命令 │ │ └── Process.md │ ├── 并发多线程 │ │ ├── Executors.newCachedThreadPool线程池.1.md │ │ ├── Executors.newCachedThreadPool线程池.2.传参.md │ │ ├── Executors.newCachedThreadPool线程池.3.返回值.md │ │ ├── Thread类多线程.1.使用方法.md │ │ ├── Thread类多线程.2.synchronized同步.md │ │ ├── Thread类多线程.3.Lock同步[可重入锁].md │ │ ├── 多线程+CountDownLatch等待结束[wait join].md │ │ └── 获取线程池中任务的返回值.md │ ├── 文件操作 │ │ └── io.File列出目标目录下的文件内容.md │ └── 日期操作 │ │ └── LocalDateTime.md ├── 第三方库 │ ├── snakeyaml.2.constructor.md │ └── snakeyaml.md ├── 语法 │ ├── Java接口和抽象类(转).md │ └── Java类成员访问权限.md └── 问题处理 │ ├── java-语法错误Local variable xxx defined in an enclosing scope must be final or effectively final.md │ └── javac编译报错-编码GBK的不可映射字符.md ├── go ├── cgo │ ├── 01.golang调用标准库C函数[最简示例].md │ ├── 02.golang调用自定义C函数.md │ ├── 03.golang调用独立源文件中的C函数[模块化 拆分].md │ ├── 04.C语言调用golang函数[export].md │ ├── clang结构体的使用[cgo].md │ ├── readme.md │ └── 问题处理 │ │ └── cgo无法打印字符串[vscode printf stdout fflush].md ├── readme.md ├── 依赖管理 │ ├── go mod - indirect标记.md │ ├── go mod GO111MODULE变量理解[vendor 离线].md │ ├── go mod edit命令-手动编辑go.mod文件.md │ ├── go mod replace的使用.md │ ├── go mod vendor - modules.txt变更本地依赖[tidy].md │ ├── go mod 拉取无tag的master最近代码.md │ ├── go mod代理-GOPROXY.md │ ├── go mod命令操作[replace tidy edit].md │ ├── go mod问题处理 │ │ ├── go mod - import lookup disabled by -mod=readonly.md │ │ ├── go mod - no dependencies to vendor.md │ │ ├── go mod - xxx is explicitly required in go.mod, but not marked as explicit in vendor_modules.txt.md │ │ ├── go mod - xxx is marked as replaced in vendor-modules.txt, but not replaced in go.mod.md │ │ ├── go mod-tag为v0.0.0的问题.md │ │ └── go mod问题处理malformed file path.md │ ├── go run -mod=vendor选项[vscode launch.json].md │ └── readme.md ├── 并发 │ ├── golang-race竞态检测.md │ ├── 协程池.md │ └── 高并发调优方案.md ├── 标准库 │ ├── golang-error chain错误链[wrap is].md │ ├── http │ │ ├── golang-client timeout.md │ │ ├── golang-http库Transport使用方法.md │ │ ├── golang-http网络处理中的几种错误.md │ │ ├── golang-原生http库的路由中间件[mux].md │ │ ├── golang-超时机制完全手册(转) [http todo].md │ │ └── 问题处理 │ │ │ └── http请求证书验证失败-x509:certificate signed by unknown authority.md │ ├── json │ │ ├── golang-json.Unmarshal解析出错-invalid character.md │ │ └── golang-json空字段报错校验[tag required nonempty].md │ ├── os │ │ ├── golang-exec执行命令[shell模式].md │ │ ├── golang-os文件&目录操作.md │ │ └── golang-os文件操作.md │ ├── readme.md │ ├── reflect反射 │ │ ├── golang-reflect.New根据类型创建相应结构体对象[Interface].md │ │ ├── golang-reflect.Value对象的Type与Kind方法.md │ │ ├── golang-reflect反射.1.TypeOf与ValueOf.md │ │ ├── golang-reflect反射.2.通过反射修改结构体成员的值.md │ │ ├── golang-reflect反射.3.Indirect修改结构体成员的值.md │ │ ├── golang-判断变量类型[reflect fmt].md │ │ ├── reflect.Copy.md │ │ └── reflect.DeepEqual 判断对象是否完全相同.md │ ├── sync │ │ ├── golang-sync.Cond.md │ │ ├── golang-sync.Pool对象缓存池.md │ │ ├── golang-sync.WaitGroup.md │ │ ├── golang-sync.atomic.Value通用类型.md │ │ └── golang-sync.atomic.md │ ├── 散落 │ │ ├── godoc介绍.md │ │ ├── golang-flag命令行参数解析.md │ │ ├── golang-gob序列化与反序列化.md │ │ ├── golang-sql数据库操作(坑).md │ │ ├── golang-template模板引擎.md │ │ ├── golang-text编码转换.md │ │ └── hex编码.md │ └── 类型转换 │ │ ├── golang-bytes.Buffer缓冲器[byte数组 string].md │ │ ├── golang-encoding.binary整型数值与byte数组互转[类型转换 端序].md │ │ ├── golang-encoding.hex 16进制byte数组与字符串转换.md │ │ ├── golang-fmt交互式读入 bufio os.Stdin[scanf].md │ │ └── golang-字符串拼接[Sprintf Join Buffer].md ├── 标准库源码 │ ├── Golang同步机制的实现.md │ ├── readme.md │ ├── runtime │ │ ├── channel的实现原理.md │ │ └── golang的分段栈与连续栈.md │ └── sync │ │ ├── map.go │ │ ├── mutex.go │ │ ├── sync.Map-线程安全map.md │ │ └── sync.Mutex锁实现.md ├── 测试 │ ├── go test -bench压力测试.md │ ├── go test测试规范.md │ ├── gomonkey.md │ ├── http接口测试.md │ └── 单元测试如何mock time.Now().md ├── 第三方框架 │ ├── beego-session │ │ ├── index.html │ │ └── main.go │ ├── gin │ │ ├── Go语言web框架 gin.md │ │ ├── gin模板应用.md │ │ └── golang-gin框架session无效的问题.md │ ├── go-cron定时任务.md │ ├── go-redis与redigo.md │ ├── go-restful │ │ ├── go-restful 与 pprof.md │ │ └── readme.md │ ├── goquery使用.md │ ├── gorm │ │ ├── CURD.md │ │ ├── gorm-Scan与Pluck查询.md │ │ ├── gorm多对多关联查询.md │ │ ├── gorm模型定义-成员对象.md │ │ ├── gorm模型定义-数组类型.md │ │ ├── gorm模型定义.md │ │ ├── gorm表关联.0.导论.md │ │ ├── gorm表关联.1.属于.md │ │ ├── gorm表关联.2.包含一个.md │ │ ├── gorm表关联.3.包含多个.md │ │ ├── gorm表关联.4.多对多.md │ │ ├── gorm表关联.5.md │ │ ├── gorm调试模式-查看执行的sql.md │ │ └── gorm连接池.md │ ├── grpc │ │ ├── grpc安全认证.md │ │ └── grpc连接机制.md │ ├── jwt-token的验证与鉴权 │ │ ├── golang-jwt token签发与认证.md │ │ ├── jwt简单认识.md │ │ └── main.go │ ├── protobuf │ │ ├── protobuf使用方法.md │ │ ├── protobuf如何返回空值.md │ │ ├── test.pb.go │ │ └── test.proto │ ├── todo.md │ └── viper-命令行参数解析-绑定环境变量.md ├── 语法 │ ├── Golang OOP, 继承, 组合, 接口(转).md │ ├── golang-channel单向(只读与只写).md │ ├── golang-daemon守护进程 │ │ ├── main.go.1 │ │ ├── main.go.2 │ │ ├── main.go.3 │ │ └── readme.md │ ├── golang-for循环.md │ ├── golang-interface{}与[]interface{}.md │ ├── golang-interface{}与任意类型互转.md │ ├── golang-interface接口与receiver对象.md │ ├── golang-iota枚举.md │ ├── golang-select语法[case].md │ ├── golang-slice切片的第3个参数[low high max].md │ ├── golang-slice的len与cap.md │ ├── golang-string, byte与rune的关系与区别.md │ ├── golang-struct与json tag.md │ ├── golang-switch fallthrough[continue break].md │ ├── golang-switch与type类型断言[assert].md │ ├── golang-位操作(位运算).md │ ├── golang-内置函数copy切片深拷贝.md │ ├── golang-内置函数new & make.md │ ├── golang-函数作为函数参数的使用方法.md │ ├── golang-切片做函数参数[值传递 引用传递 slice].md │ ├── golang-切片合并(append)与复制(copy)[slice].md │ ├── golang-初始化结构体[嵌套 匿名].md │ ├── golang-各种类型的引用传递和值传递.md │ ├── golang-对象拷贝机制.1[指针 引用].md │ ├── golang-对象拷贝机制.2.切片.md │ ├── golang-异常处理机制panic, defer与recover的应用.md │ ├── golang-注释格式.md │ ├── golang继承机制实践.md │ └── readme.md ├── 问题处理 │ ├── golang os exec-already started.md │ ├── golang-missing Location in call to Time.In异常[docker].md │ └── 并发fmt.md ├── 陷阱 │ ├── channel 关闭 读写与panic[close].md │ ├── for..range中的值传递.md │ ├── if内改写外层变量.md │ ├── map-协程非安全.md │ ├── non-name xyz on left side of.md │ ├── select..case重新执行的问题.md │ ├── sizeof int[int32 int64].md │ ├── 数组切片合并会修改原数组切片的问题.md │ └── 数组切片拷贝与原地修改[值拷贝].md └── 高级 │ ├── GC │ ├── golang GC优化思路.md │ ├── golang-GC与Finalizer.md │ ├── golang的GC机制验证.1基础概念.md │ ├── golang的GC机制验证[三色 tricolor].md │ └── 常见的GC算法与golang的演进过程.md │ ├── 内存调试与优化 │ ├── Golang 中 runtime 的使用.md │ ├── go build -gcflags参数-m打印编译器优化描述.md │ ├── go build -gcflags常用选项及参数.md │ ├── go build -ldflags参数.md │ ├── go build出现out of memory错误[swap].md │ ├── golang pprof采集自签名https接口-failed to verify certificate.md │ ├── golang-pprof内存分析及动态跟踪.md │ ├── golang-pprof可视化界面及go-torch.md │ ├── golang-内存对齐.md │ ├── golang-性能调优.1.pprof(转).md │ ├── golang-性能调优.2.trace(转).md │ ├── golang-逃逸分析.md │ ├── golang环境变量-GODEBUG调试选项gctrace与schedtrace[scheddetail].md │ ├── golang环境变量-GOGC垃圾回收控制.md │ ├── golang环境变量-GOMAXPROCS设置系统线程数量.md │ ├── golang环境变量-GOMEMLIMIT[xmx xms 内存 容器 OOM].md │ ├── golang环境变量-GOOS与GOARCH跨平台编译[build].md │ ├── golang环境变量-GOTRACEBACK异常信息等级.md │ ├── golang环境变量.md │ └── golang编译提速优化.md │ ├── 协程调度 │ ├── Go netpoller 原生网络模型之源码全面揭秘(转).md │ └── golang runtime控制底层thread系统线程的数量[debug.SetMaxThreads].md │ └── 调试 │ ├── dlv使用[delve step in].md │ ├── dlv设置环境变量.md │ ├── golang调试-GDB.md │ ├── 用gdb替换dlv[delve gdb dlv].md │ └── 问题处理 │ └── Go version 1.13.14 is too old for this version of Delve (minimum supported version 1.16, suppress this error with --check-go-version=false)[vscode].md ├── js ├── JS-Promise进化历程.md ├── JS-void关键字.md ├── backbone源码分析 │ └── 1.md ├── jquery │ └── jquery等待某元素出现后再执行操作[wait].md ├── webpack │ ├── ES6.认识.md │ ├── 使用webpack编译ES6.md │ ├── 继承.md │ └── 面向对象.md ├── 严格模式 │ └── js严格模式下arguments对象变为参数的静态副本.md ├── 原型链机制理解 │ ├── JS-ES5中Object的新增方法.md │ ├── JS-arguments对象.md │ ├── JS-bind关键字.md │ ├── JS-this的用法.md │ ├── JS-typeof与instanceof区别及实现原理.md │ ├── JS常见陷阱-面试题级别.md │ ├── new操作符.md │ ├── 显式原型prototype与隐式原型__proto__(一).md │ └── 显式原型prototype与隐式原型__proto__(二).md ├── 常用方法 │ ├── JS-ASCII字符与数字互转.md │ ├── JS-json序列化与反序列化.md │ ├── JS-parseInt与parseFloat数值计算及进制转换.md │ ├── JS-url编解码函数.md │ ├── JS-函数自执行的写法.md │ ├── JS-判断对象是否为Array.md │ ├── JS-字符串截取[slice substring].md │ ├── JS-字符串操作函数.md │ ├── JS-对象合并.md │ ├── JS-数字指定长度不足前补零的实现.md │ ├── JS-数组合并.md │ └── JS-阻塞式sleep实现方法.md ├── 新鲜事 │ ├── CORS与跨域.md │ ├── CSP内容安全策略.md │ └── JSONP与跨域.md ├── 浏览器对象 │ ├── Html+JS行为详解.md │ ├── JS操作系统剪切板.md │ ├── JS浏览器API.md │ ├── Jquery组合键捕获.md │ ├── 更改audio对象的src属性后, 获取duration为NaN的解决方法.md │ ├── 浏览器console对象.md │ ├── 浏览器document对象.md │ ├── 浏览器history对象.md │ ├── 浏览器window对象.md │ ├── 浏览器切换标签页视频暂停播放.md │ └── 获取页面上选中的文字.md ├── 语法 │ ├── JS-in与for...in.md │ └── js-变量提升.md └── 面向对象 │ ├── JS-ES5模拟super与多级继承(一).md │ ├── JS-ES5模拟super与多级继承(三).md │ ├── JS-ES5模拟super与多级继承(二).md │ ├── JS-extend扩展方法实现尝试.md │ └── JS-继承的实现方式.md ├── nodejs ├── 包管理 │ ├── nodejs升级.md │ ├── node关于 npm install -g 全局安装的误解.md │ ├── npm, gulp, bower等的联系与区别.md │ ├── npm与package.json创建工程.md │ ├── npm包路径[node_modules].md │ ├── npm安装及卸载依赖包.md │ ├── npm镜像源及代理设置.md │ ├── windows下的npm设置.md │ └── 问题处理 │ │ ├── npm build时Killed.md │ │ ├── npm install时报EACCES permission denied错误[npm global].md │ │ └── npm安装软件包失败-CERT_UNTRUSTED.md ├── 异步并发 │ ├── nodejs异步IO的实现.md │ └── nodejs异步机制实现原理.md ├── 标准库 │ ├── nodejs-child_process执行命令行脚本(一)示例.md │ ├── nodejs-child_process执行命令行脚本(二)函数解析.md │ ├── nodejs-cluster守护进程.md │ ├── nodejs-path路径解析.md │ └── nodejs-内置变量.md ├── 第三方库 │ ├── mongoose-ORM框架.md │ └── nodemon-监测文件变动自动重启服务.md └── 语法 │ ├── Async&Await替代Promise的6个理由.md │ ├── Promise语法.md │ ├── nodejs-模块导出exports与module.exports的区别.md │ └── nodejs获取当前文件路径.md ├── php ├── PHP的Allowed memory size of 134217728 bytes exhausted问题.md ├── PHP语言级别问题处理.md ├── Wordpress.md ├── Wordpress使用笔记.md └── 关于FastCGI与php-fpm.md ├── powershell ├── netsh网络工具.md ├── powershell入门常用命令.md ├── powershell工具集.md ├── powershell绕过脚本执行权限.md ├── powershell获取对象的所有属性.md ├── powershell获取进程信息.md ├── powershell访问网页与下载文件.md ├── powershell配色方案.md ├── powershell问题处理.md ├── 常用操作 │ ├── Powershell输出日志到文件.md │ ├── powershell创建定时任务(一)job.md │ ├── powershell创建定时任务(二)job.md │ ├── powershell格式化输出.md │ ├── powershell获取系统信息(CPU, 内存, 硬盘等).md │ ├── powershell调整电脑音量.md │ └── powershell远程连接.md ├── 引言.md └── 语法 │ ├── Powershell数组.md │ ├── Powershell日期.md │ ├── powershell引入公共模块.md │ ├── powershell管道计数measure.md │ ├── powershell管道过滤.md │ └── powershell编程入门-变量操作.md └── python ├── 内存调试与优化 ├── Python-gc垃圾回收.md ├── Python-gc调优.md ├── Python内存泄漏.md ├── Python内存管理机制(一)引用计数与垃圾回收.md ├── Python内存调试.md └── Python性能分析-cProfile.md ├── 包管理 ├── Python-setuptools 包管理工具[打包 setup.py].md ├── Python包安装错误.md ├── Python模块动态导入[importlib reload].md ├── Python相对路径导入.md ├── Win下安装scrapy和gevent.md ├── python模块导入.md └── 问题处理 │ └── Python相对路径导入-attempted relative import with no known parent package.md ├── 常用操作 ├── Python-docx转markdown[word md].md ├── Python-input与raw_input.md ├── Python-zip, list, tuple与dict函数.md ├── Python-创建daemon守护进程.md ├── Python-字典对象合并[dict merge].md ├── Python-打印异常信息traceback.md ├── Python-类型转换[str bytes].md ├── Python-自定义class类型名称.md ├── Python-进程控制[exec fork wait].md ├── Python2-字符集编码转换[unicode 中文].md ├── Python3-bytes与str相互转换.md ├── Python创建指定长度的列表.md ├── Python字符串查找函数find与index.md ├── Python字节操作函数.md ├── Python执行shell命令.1.os.system().md ├── Python执行shell命令.2.os.popen().md ├── Python执行shell命令.3.subprocess.md ├── Python执行shell命令.4.subprocess.Popen()[推荐].md ├── Python执行shell命令.5.subprocess.Popen读取实时输出.md ├── Python格式化读入[scanf re 正则 struct.unpack].md ├── Python格式化输出[format 布尔].md ├── Python自定义模块搜索路径.md └── python3-venv虚拟环境.md ├── 并发 ├── readme.md ├── threading.Timer定时器.md ├── threadpool线程池.1.基本使用.md ├── threadpool线程池.2.传参与返回值.md ├── 从asyncio简单实现看异步是如何工作的(转).md ├── 多线程threading库使用.1.线程创建.md ├── 多线程threading库使用.2.锁Lock与RLock[可重入锁].md ├── 多线程threading库使用.3.Condition.md ├── 多线程threading库使用.4.Event.md ├── 多线程threading库使用.5.终止线程.md ├── 多线程threading库使用.6.获取线程id[thread id inent].md ├── 多进程multiprocessing库.md ├── 异步IO(asyncio)协程.1.md ├── 异步IO(asyncio)协程.2.md ├── 异步IO(asyncio)协程.3.线程+协程.md ├── 深入Asyncio系列文章.md ├── 真正的并行计算-concurrency.futures模块.1.实践.md └── 真正的并行计算-concurrency.futures模块.2.future对象[wait as_completed].md ├── 标准库 ├── Python-StringIO与BytesIO.md ├── Python-argparse命令行参数解析.md ├── Python-cmd命令行参数解析.md ├── Python-getopt命令行参数解析.md ├── Python-logging日志模块.md ├── Python-os模块exec系函数.md ├── Python-os模块用户相关操作.md ├── Python-psutil查看进程信息.md ├── Python-pwd与grp模块.md ├── Python-re正则模块使用[match search regexp].md ├── Python-subprocess.1.高级接口call()方法.md ├── Python-subprocess.2.低级接口Popen().md ├── Python-xmlrpclib应用.md ├── Python3-pickle序列化与反序列化[dumps loads json].md ├── json.dumps使用[中文 unicode 缩进].md ├── json.load使用[读写模式].md ├── python(2和3)-获取当前源文件所在目录路径.md ├── sqlite │ └── where..in..子句.md ├── time日期处理 │ ├── Python-datetime日期库.md │ ├── Python-time&datetime日期库.md │ └── Python-time日期库.md ├── urllib网络请求 │ ├── Python-2与3网络请求库api对比.md │ ├── Python2-urllib与urllib进行basic HTTP authentication.md │ ├── Python2-网络请求库urllib.md │ ├── Python2-网络请求库urllib2.md │ └── Python3-urllib之parse模块.md └── 文件目录 │ ├── Python-os模块listdir与walk遍历目录.md │ ├── Python-判断文件是否存在[exists].md │ ├── Python-读写文件[read write mode].md │ ├── Python2-os.path目录及文件操作.md │ ├── Python3-pathlib目录及文件操作.md │ ├── Python3-pathlib路径操作.md │ └── python2-os.path路径操作.md ├── 框架 ├── Django │ ├── Django Shell应用.md │ ├── Django-session生命周期内的全局变量设置.md │ ├── Django-定时任务Celery.md │ ├── Django-数据库基本操作.md │ ├── Django使用redis.md │ ├── Django内置权限机制.md │ ├── Django内置登录机制.md │ ├── Django后台-admin模块认识理解.md │ ├── Django工程构建流程.md │ ├── Django应用总结.md │ ├── Django模板转义与渲染技巧.md │ ├── Django自定义用户对象.md │ ├── Django问题汇总.md │ └── Django静态文件404.md ├── Scrapy │ ├── Scrapy-二级页面抓取.md │ ├── Scrapy-随机UA.md │ └── Scrapy入门-利用Scrapy爬取所有知乎用户详细信息并存至MongoDB.md ├── Tornado │ ├── Python异步并发框架.md │ └── Tornado源码阅读.md ├── celery │ ├── celery+redis存储内容.md │ ├── celery不同任务配置多个队列.md │ ├── celery动态添加任务.md │ ├── celery数据库连接.1.每个task独立创建连接.md │ ├── celery数据库连接.2.每个worker进程维护独立的数据库连接.md │ ├── celery最佳实践.md │ ├── celery的配置方法.md │ └── celery问题处理.md ├── gunicorn │ ├── 在gunicorn环境下, 日志中看不代码使用print输出的调试信息.md │ └── 导论.md ├── sanic │ └── docs.md └── wsgi │ ├── python标准库wsgiref.md │ ├── uwsgi模块mules.md │ ├── uwsgi编程模块.md │ ├── 深入理解uwsgi和gunicorn网络模型.md │ └── 运维矩阵-Nginx+uWSGI+Flask部署.md ├── 环境 ├── Pypi-使用nginx搭建内网代理缓存服务器.md ├── Pypi私有镜像源搭建-bandersnatch.1.md ├── Pypi私有镜像源搭建-bandersnatch.2.filter插件[plugins].md ├── Pypi私有镜像源搭建-pypiserver.md ├── Pypi私有镜像源搭建-rsync[失败].md ├── Python源码安装[centos7].md ├── Python源码安装[ubuntu] arm.md ├── Python源码安装[ubuntu].md ├── Python环境问题.md ├── pip download只下载不安装.md ├── pip search报错-Fault -32500:RuntimeError:PyPI's XMLRPC API is currently disabled due to unmanageable load and will be deprecated in the near future..md └── pip镜像源设置[linux windows macos].md ├── 第三方库 ├── Python-ConfigParser配置文件解析.md ├── Python-IP地址转换库IPy.md ├── Python-pymongo操作mongodb.md ├── Python实现令牌桶[限速 ratelimit].md ├── SQLAlchemy │ ├── SQLAlchemy使用方法(一)-原生SQL.md │ ├── SQLAlchemy使用方法(二)-ORM方式.md │ ├── SQLAlchemy关系定义-一对多.md │ └── SQLAlchemy多个排序字段.md ├── aiohttp │ └── 后台线程.md ├── bottle访问接口出现无法处理的500异常[web server http].md ├── pexpect交互式输入.md ├── psycopg2 │ ├── psycopg2(一)-基本使用.md │ ├── psycopg2(二)-进阶使用[returning].md │ ├── psycopg2异步操作.md │ └── psycopg2问题处理.md └── pyquery获取指定属性[id class].md ├── 语法 ├── Python-local nonlocal global局部变量与全局变量.md ├── Python-with语法.md ├── Python-指定参数类型与返回值类型[List Dict class].md ├── Python-指定参数类型与返回值类型[dataclass].md ├── Python2与Python3的dict字典排序[遍历].md ├── Python传值调用与传址调用[值传递 引用传递].md ├── Python元类.md ├── Python内置函数__str__与__repr__作用及区别.md ├── Python内置变量.md ├── Python内置方法.md ├── Python判等的==与is操作符.md ├── Python参数列表args与kwargs.md ├── Python异常处理[exception repr].md ├── Python强类型编程-dataclass实践[类型校验 序列化 继承 类成员 类属性 json __setattr__ __getattribute__ getattr].md ├── Python生成器-send方法.md ├── Python自省机制.md ├── Python装饰器.1.通俗解释.md ├── Python装饰器与传参.md ├── Python装饰器向被装饰函数注入变量.md ├── Python迭代器和生成器.1.迭代器.md ├── Python迭代器和生成器.2.生成器.md └── Python高级语法-for...in...if语句.md ├── 问题处理 ├── 'gbk' codec can't encode character 'xxx' in position 889:illegal multibyte sequence[open encoding write].md ├── Attempted relative import in non-package.md ├── ModuleNotFoundError之_bz2.md ├── Python-UnicodeEncodeError问题.md ├── bytes-like object is required.md ├── 处理同一类型不同message内容的异常[exception].md ├── 字符串格式化错误-TypeError not all arguments converted during string formatting.md └── 引用包与同名文件.md ├── 陷阱 ├── Python-单元素元组定义.md ├── Python-在for循环中操作列表.1.问题描述.md └── Python-在for循环中操作列表.2.解决方法.md ├── 面向对象 ├── Python-接口与抽象类.md ├── Python内部类(嵌套类).md ├── Python多级(重)继承与super用法.md ├── Python私有成员对象.1.md ├── Python私有成员对象.2.md ├── Python类实例化过程.md └── Python类方法, 静态方法与实例方法.md └── 高阶函数 ├── Python高级语法-lambda表达式.md ├── Python高阶函数-filter.md ├── Python高阶函数-map.md └── Python高阶函数-reduce.md /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | - : 当前文章的唯一专属序列号(文章名称可能会发生变化, 这个不会). 使用`uuidgen`命令生成. 2 | - : 链接到某一篇文章的值. 3 | -------------------------------------------------------------------------------- /todo.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/todo.md -------------------------------------------------------------------------------- /前端/css技术.md: -------------------------------------------------------------------------------- 1 | 2 | > CSS 是用来表现的,HTML 一切非正文的、装饰性的东西理论上都是要用 CSS 来实现的 3 | 4 | ## 选中元素样式 5 | 6 | ```css 7 | ::selection {background-color: #38485a;color: #fff;text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3);} 8 | ::-moz-selection { background-color: #38485a; color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3) } 9 | img::selection { background: transparent } 10 | img::-moz-selection { background: transparent } 11 | ``` 12 | 13 | ## 清除浮动 14 | 15 | ```css 16 | .clearfix:before, 17 | .clearfix:after { 18 | content: "."; 19 | display: block; 20 | height: 0; 21 | visibility: hidden; 22 | } 23 | .clearfix:after {clear: both;} 24 | .clearfix {zoom: 1;} /* IE < 8 */ 25 | ``` 26 | -------------------------------------------------------------------------------- /前端/readme.md: -------------------------------------------------------------------------------- 1 | [JS中的POST请求之道:揭秘正确发送姿势](https://juejin.cn/post/7382897150068785190) 2 | 3 | -------------------------------------------------------------------------------- /前端/前端模块的动态加载.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [document.write的用处!](http://blog.csdn.net/qq_34986769/article/details/52160532) -------------------------------------------------------------------------------- /工具/Chrome安装指定版本[旧版本 历史版本 离线].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Google Chrome Older Versions Download (Windows, Linux & Mac)](https://www.slimjet.com/chrome/google-chrome-old-version.php) 4 | 2. [Chrome浏览器最新离线版下载](https://www.chromedownloads.net/) 5 | 6 | -------------------------------------------------------------------------------- /工具/IDE/IDE-Idea系IDE工具Git配置.md: -------------------------------------------------------------------------------- 1 | # Idea系IDE工具Git配置 2 | 3 | ## 1. 准备 4 | 5 | 1. 下载并安装git; 6 | 7 | 2. 在studio中设置git插件:File->Setting->Version Control->Git, 设置git可执行文件的路径 8 | 9 | 3. 点击Test测试是否能够关联成功 10 | 11 | ## 2. 初始化git项目(git init) 12 | 13 | 操作如下: 14 | 15 | VCS->Enable Control Integration->Select "Git". 16 | 17 | ### 3. 为git添加remote 18 | 19 | 这一步,studio没有提供可视化的GUI,需要使用Git命令。 20 | 21 | (Windows下需要使用Git Bash)将目录切换到项目的目录,输入git添加remote的命令,例如: 22 | 23 | ``` 24 | git remote add origin "https://github.com/xxx/xxx.git" 25 | ``` 26 | 27 | ## 4.将新增代码添加到VCS(git add) 28 | 29 | 当前要提交的文件->VCS->Git->Add 30 | 31 | ## 5. 提交变化(git commit) 32 | 33 | VCS->Commit Changes 34 | 35 | 在提交的时候可以选择Commit and Push,就可以直接push到服务器。 36 | 37 | ## 6. 提交变化(git push) 38 | 39 | VCS->Git->Push. 40 | 41 | 最后,如果要是clone project到studio 42 | 43 | VSC -> Checkout from Version Control -> Git -------------------------------------------------------------------------------- /工具/IDE/IDE-Idea系IDE远程开发[goland].md: -------------------------------------------------------------------------------- 1 | # IDE-Idea系IDE远程开发[goland] 2 | 3 | 参考文章 4 | 5 | 1. [GoLand 远程开发配置](https://blog.csdn.net/k346k346/article/details/105822846) 6 | 7 | idea 的远程开发其实是将本地的一个目录和远程服务器上的一个目录做了一个映射, 在本地修改后(自动)同步到远程目录, 但是启动的时候只能在本地启动, 无法直接使用服务器环境进行调试. 8 | -------------------------------------------------------------------------------- /工具/IDE/IDE-SublimeText所遇问题.md: -------------------------------------------------------------------------------- 1 | # Sublime text所遇问题 2 | 3 | ## 1. 保存时中文乱码 4 | 5 | 版本: sublime 3 6 | 7 | 打开时文档正常, 写几步就保存一次, 没有出问题. 但是突然在某次修改后保存时中文乱码, 只能ctrl+z回退到修改之前. 尝试过`ConvertToUTF8`插件, 修改文件编码, 没有用. 而后尝试`Codecs33`插件, 也没有解决问题. 8 | 9 | 后来安装`Codecs`插件, 再次尝试保存时正常, 问题终于解决. -------------------------------------------------------------------------------- /工具/IDE/VSCode-Golang/VSCode-golang测试参数.md: -------------------------------------------------------------------------------- 1 | # VSCode-golang测试参数 2 | 3 | 参考文章 4 | 5 | 1. [How to disable (run test) Cached](https://github.com/Microsoft/vscode-go/issues/1597) 6 | 7 | 2. [Run tests with verbose output](https://github.com/Microsoft/vscode-go/issues/1377) 8 | 9 | vscode在测试golang代码时, 发现测试结果都是旧的. 接口连接了数据库并写入一条数据, 但是只有第一条能写入, 之后的测试结果就显示为`cached`, 数据库中没有出现新数据. 如下 10 | 11 | ![](https://gitee.com/generals-space/gitimg/raw/master/3b9b23c5a06cb9598f6a7ae4da090ba7.jpg) 12 | 13 | 查看参考文章1, 会发现测试参数是由golang本身提供的, vscode只是代为执行`go test`命令而已. 我们需要在测试命令中加入`-count=1`选项. 14 | 15 | 正好在参考文章2中有提到`go test`测试过程中加入`-v`选项, 是在vscode的自定义配置文件中添加的, 顺便也把`count`选项加上. 16 | 17 | 最后的vscode配置文件为 18 | 19 | ```json 20 | { 21 | "go.testFlags": ["-v", "-count=1"], 22 | } 23 | ``` 24 | 25 | 再次执行测试命令, 不再有缓存, 输出结果也变得丰富起来. 26 | 27 | ![](https://gitee.com/generals-space/gitimg/raw/master/7fbce72b95507bcf763d034db15e0249.jpg) 28 | -------------------------------------------------------------------------------- /工具/IDE/VSCode-Java/VSCode-java maven工程reimport操作.md: -------------------------------------------------------------------------------- 1 | # VSCode-java maven工程reimport操作 2 | 3 | 参考文章 4 | 5 | 1. [vscode官方文档 Java project management in VS Code](https://code.visualstudio.com/docs/java/java-project) 6 | 7 | 有时候从 git 上 clone 一个 java 工程, 总是会先报很多包找不到的错误. 但是在命令行构建执行又是可以运行起来了, 这样在开发时就非常不爽了. 8 | 9 | 尤其是, 跟踪那些找不到的包时, 找到目标包后, 下面的报错就消失了, 就跟缓存一样. 10 | 11 | 但是这种问题一报就是几十上百个, 总不能一个一个去找吧. 12 | 13 | 在idea中, maven 工程有一个reimport 按钮, 我找了找, 在vscode左侧`Maven Projects`, 还有什么`Java Dependencies`这些栏中都没有找到`reimport`选项. 14 | 15 | 后来找到了参考文章1, 使用`Ctrl+Shift+P`, 输入`Java: Import Java projects in workspace`即可实现`reimport`的效果, 实践有效. 16 | 17 | -------------------------------------------------------------------------------- /工具/IDE/VSCode-Java/readme.md: -------------------------------------------------------------------------------- 1 | # VSCode开发Java 2 | 3 | 参考文章 4 | 5 | 1. [VS Code Java 开发指南!](https://blog.csdn.net/csdnnews/article/details/87746061) 6 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode remote连接失败 - Bad owner or permissions on ssh config[windows].md: -------------------------------------------------------------------------------- 1 | # VSCode remote连接失败 - Bad owner or permissions on ssh config[windows] 2 | 3 | 参考文章 4 | 5 | 1. [Bad owner or permissions on C:\\Users\\user/.ssh/config > 过程试图写入的管道不存在。](https://blog.csdn.net/qq_44944580/article/details/137611875) 6 | 7 | ## 问题描述 8 | 9 | windows 上使用 vscode 远程连接 linux 主机, 配置 ssh/config 主机别名, 但显示该文件权限不正确. 10 | 11 | ...windows上文件权限太烦, 按照参考文章1中所说, 使用 git 工具带的 ssh.exe 就可以. 12 | 13 | VSCODE设置 14 | 15 | File -> 偏好Preference -> Setting 16 | 搜索`remote.ssh.path` 17 | 18 | 设置`D:\Program Files\Git\usr\bin\ssh.exe`或者`C:\Program Files\Git\usr\bin\ssh.exe` 19 | 20 | 然后重启vscode再连就行了. 21 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode-不展示(不搜索)指定目录[ignore].md: -------------------------------------------------------------------------------- 1 | # VSCode-不展示(不搜索)指定目录[ignore] 2 | 3 | 参考文章 4 | 5 | 1. [](https://stackoverflow.com/questions/30140112/how-to-hide-specified-files-directories-e-g-git-in-the-sidebar-vscode) 6 | 7 | ```json 8 | // 左侧浏览器中不展示如下路径的内容 9 | "files.exclude": { 10 | "**/.git": true, 11 | }, 12 | // 全局搜索不搜索如下目录内容 13 | "search.exclude": { 14 | "**/node_modules": true, 15 | } 16 | ``` 17 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode-大型工程监控文件数过多.md: -------------------------------------------------------------------------------- 1 | # VSCode-大型工程监控文件数过多 2 | 3 | 参考文章 4 | 5 | 1. [Visual Studio Code is unable to watch for file changes in this large workspace" (error ENOSPC)](https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc) 6 | 7 | 使用vscode打开kubernetes工程, 保存文件时右下角总是跳出提示框, 显示监控的文件数太多, 点进去看会跳转到官方文档, 写的不错. 8 | 9 | 最主要是文档中还提到了每个监控文件消耗的内存占用, 可以计算自己的系统配置承受的上限, 对于认识sysctl也有帮助. 10 | 11 | 原本系统中此配置为8192, 太小了. 12 | 13 | ``` 14 | # sysctl -a | grep max_user 15 | fs.epoll.max_user_watches = 784117 16 | fs.inotify.max_user_watches = 8192 17 | ``` 18 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode-安装离线插件[offline plugin].md: -------------------------------------------------------------------------------- 1 | # VSCode-安装离线插件[offline plugin] 2 | 3 | 参考文章 4 | 5 | 1. [离线下载vscode 插件](https://zhuanlan.zhihu.com/p/73769159) 6 | 2. [Visual Studio Marketplace](https://marketplace.visualstudio.com/vscode) 7 | 8 | 下载对应插件的`.vsix`文件, 打开vscode左侧栏插件, 点击`...`, 然后`Install from VSIX`. 9 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode-总是提示输入git用户名密码.md: -------------------------------------------------------------------------------- 1 | # VSCode-总是提示输入git用户名密码 2 | 3 | 参考文章 4 | 5 | 1. [vscode:解决操作git总让输入用户名及密码问题](https://www.cnblogs.com/finalanddistance/p/10476080.html) 6 | 2. [Git凭证存储(简单易懂,一学就会,认真看)](https://www.cnblogs.com/volnet/p/git-credentials.html) 7 | 8 | 参考文章1与我的问题一样, 但是无效. 9 | 10 | 参考文章2给出了`credential.helper`的涵义与作用, 可以了解一下git的认证机制. 11 | 12 | 我的场景是, 使用vscode远程连接到linux服务器上做开发, commit后在vscode中点push, 才会弹出用户名和密码窗口. 我在工作机和本地都执行了`git config --global credential.helper store`命令, 是不是因为工程和密码存储是分开的, 所以操作才无效? 13 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode-禁止扩展自动更新(auto-update).md: -------------------------------------------------------------------------------- 1 | # VSCode-禁止扩展自动更新(auto-update) 2 | 3 | 参考文章 4 | 5 | 1. [stopping a specific extension from the auto update](https://github.com/Microsoft/vscode/issues/57591) 6 | 7 | 扩展面板 -> 右上`...`符号中有"禁止所有扩展自动更新"选项. 8 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode内置命令.md: -------------------------------------------------------------------------------- 1 | # VSCode内置命令 2 | 3 | Ctrl+Shift+P 4 | 5 | - `Developer: Open Process Explorer`: 打开vscode的任务管理器, 可以查看各插件CPU/内存占用情况. 6 | - `GO: Install/Update Tools`: 更新go插件所需的依赖 7 | 8 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode历史版本兼容记录[指定版本 旧版本].md: -------------------------------------------------------------------------------- 1 | # VSCode历史版本兼容记录[指定版本 旧版本] 2 | 3 | 参考文章 4 | 5 | 1. [新版vscode remote ssh不兼容老系统 (waiting for server log)](https://blog.csdn.net/qq_23320955/article/details/136258441) 6 | - 最后支持 centos 7 的版本为 1.85.2 7 | 2. [vscode历史版本下载](https://code.visualstudio.com/docs/supporting/faq#_previous-release-versions) 8 | - 官方文档 9 | - `{version}`值如`1.85.2`, 而不是`v1.85.2` 10 | 3. [September 2020 (version 1.50)](https://code.visualstudio.com/updates/v1_50) 11 | - vscode 各版本 12 | 13 | 1.64.2 是兼容 go 插件 v0.33.1 版本的最高版本(v0.33.1版本的go插件是能调试 go v1.2 版本源码的最高版本) 14 | 15 | https://update.code.visualstudio.com/1.64.2/win32-x64/stable 16 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/VSCode安装指定版本的插件.md: -------------------------------------------------------------------------------- 1 | # VSCode安装指定版本的插件 2 | 3 | 参考文章 4 | 5 | 1. [vscode插件版本的选择与安装](https://blog.csdn.net/weixin_42566993/article/details/125588396) 6 | 7 | vscode里可能无法直接选择版本, market中也只下载最新版本, 需要先点击下载, 获取下载链接, 然后去官方仓库中找历史版本号, 手动替换下载链接的版本号进行下载. 8 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/配置/dlv-忽略golang版本dlvFlags[--check-go-version].md: -------------------------------------------------------------------------------- 1 | ```json 2 | { 3 | // 使用 IntelliSense 了解相关属性。 4 | // 悬停以查看现有属性的描述。 5 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "kube-operator", 10 | "type": "go", 11 | "request": "launch", 12 | "mode": "auto", 13 | "dlvFlags": ["--check-go-version=false"], 14 | } 15 | ] 16 | } 17 | ``` 18 | -------------------------------------------------------------------------------- /工具/IDE/VSCode/配置/settings.json配置.md: -------------------------------------------------------------------------------- 1 | # settings.json配置 2 | 3 | ## 自定义后缀文件语法关联 4 | 5 | 在阅读 golang 1.2 版本源码时, 存在后缀为`.goc`的源文件, 不过其内容是C写的, 可以通过如下配置让vscode将这种后缀的文件视为C语言源文件. 6 | 7 | ```json 8 | { 9 | "files.associations": { 10 | "*.goc": "c" 11 | } 12 | } 13 | ``` 14 | -------------------------------------------------------------------------------- /工具/Navicat生成ER图表时不显示表注释和列注释[mysql].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [navicat画ER图时怎么让字段显示注释](https://segmentfault.com/q/1010000012056546) 4 | 2. [为Navicat ER图增添字段备注](https://blog.csdn.net/Vampire69/article/details/121971034) 5 | - 有效 6 | 7 | -------------------------------------------------------------------------------- /工具/ffmpeg与音视频操作/ffmpeg常用命令.md: -------------------------------------------------------------------------------- 1 | # ffprobe查看媒体文件信息 2 | 3 | 参考文章 4 | 5 | 1. [ffprobe,ffplay ffmpeg常用的命令行命令](https://juejin.im/post/5a59993cf265da3e4f0a1e4b) 6 | 7 | 2. [【FFmpeg】FFmpeg常用基本命令](https://www.cnblogs.com/dwdxdy/p/3240167.html) -------------------------------------------------------------------------------- /工具/ffmpeg与音视频操作/readme.md: -------------------------------------------------------------------------------- 1 | #ffmpeg与音视频操作 2 | 3 | 参考文章 4 | 5 | 1. [ffprobe,ffplay ffmpeg常用的命令行命令](https://juejin.im/post/5a59993cf265da3e4f0a1e4b) 6 | 7 | ffmpeg不像protobuf工具或是redis等中间件一样拥有各种语言的SDK, 网络上大部分操作都是通过`exec`函数族通过命令调用的, 并且执行结果也都是从标准输出中读取然后用正则等手段截取的. 所以这个系统中主要是讲ffmpeg相关命令的使用方法. 8 | 9 | ffmpeg工具集包含如下常用工具命令 10 | 11 | 1. ffprobe 用于查看媒体文件信息; 12 | 13 | 2. ffplay 用于播放音视频; 14 | 15 | 3. ffmpeg 用于音视频的剪辑, 拼接, 转换等操作; -------------------------------------------------------------------------------- /工具/git/git branch创建和删除远程分支.md: -------------------------------------------------------------------------------- 1 | # git branch创建和删除远程分支 2 | 3 | 参考文章 4 | 5 | 1. [3.5 Git 分支 - 远程分支](https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF) 6 | 7 | 1. 创建远程分支 8 | 9 | 创建远程分支前, 先在本地创建对应的本地分支, 比如`test` 10 | 11 | ``` 12 | git branch test 13 | git checkout test 14 | ``` 15 | 16 | 本地创建完成后, 推送到远程, 要使用`--set-upstream`选项. 17 | 18 | ``` 19 | git push --set-upstream origin test 20 | ``` 21 | 22 | 这条命令的意思是把本地的 **当前分支**推送为`origin`的test分支. 23 | 24 | 2. 删除远程分支(tag) 25 | 26 | ...删除远程分支用的不是`branch`子命令, 还是要用`push` 27 | 28 | ``` 29 | git push origin -d test 30 | ``` 31 | 32 | > 貌似`1.8.3.1`版本已经没有`-d`选项了, 不过可以使用`--delete`代替. 33 | 34 | -------------------------------------------------------------------------------- /工具/git/git branch查看当前跟踪的上游分支.md: -------------------------------------------------------------------------------- 1 | # git branch查看当前跟踪的上游分支 2 | 3 | 参考文章 4 | 5 | 1. [git如何查看当前分支是从哪个分支拉的?](https://ask.csdn.net/questions/274046) 6 | 7 | ``` 8 | $ git branch -v 9 | redis 0bd2c0f 完成调用file-push角色的redis搭建 10 | * master a04c7ef 小修正, 删除neo.tar.gz, files目录的内容不需要提交 11 | tomcat c97f318 空目录添加.gitkeep文件以便提交 12 | $ git branch -vv 13 | redis 0bd2c0f [origin/redis] 完成调用file-push角色的redis搭建 14 | * master a04c7ef [origin/master] 小修正, 删除neo.tar.gz, files目录的内容不需要提交 15 | tomcat c97f318 [origin/tomcat] 空目录添加.gitkeep文件以便提交 16 | ``` 17 | 18 | `git branch -vv`可以查看本地分支对应的远程分支. 19 | 20 | 注意, 只能列出本地存在的分支. 21 | -------------------------------------------------------------------------------- /工具/git/git branch设置上游分支.md: -------------------------------------------------------------------------------- 1 | # git branch设置上游分支 2 | 3 | 追踪分支 4 | 5 | ``` 6 | $ git branch --set-upstream-to=origin/master master 7 | ``` 8 | -------------------------------------------------------------------------------- /工具/git/git cat-file查看id类型是commit还是tag.md: -------------------------------------------------------------------------------- 1 | # git cat-file查看id类型是commit还是tag 2 | 3 | ``` 4 | ## 查看对象类型, 是blob, commit还是tree或tag. 5 | git cat-file -t 51519c7 6 | ``` 7 | 8 | -------------------------------------------------------------------------------- /工具/git/git checkout切换到指定tag或commit.md: -------------------------------------------------------------------------------- 1 | # git checkout切换到指定tag 2 | 3 | 参考文章 4 | 5 | 1. [git切换到某个tag](https://blog.csdn.net/DinnerHowe/article/details/79082769) 6 | 7 | git clone 整个仓库后使用, 以下命令就可以取得该 tag 对应的代码了.   8 | 9 | ``` 10 | git checkout tag名称 11 | ``` 12 | 13 | 但是, 这时候 git 可能会提示你当前处于一个`detached HEAD`状态. 14 | 15 | 因为 tag 相当于是一个快照, 是不能更改它的代码的. 16 | 17 | 如果要在 tag 代码的基础上做修改, 你需要一个分支:   18 | 19 | ``` 20 | git checkout -b 新branch名称 tag名称 21 | git checkout -b 新branch名称 commitID 22 | ``` 23 | 24 | 这样会从 tag 创建一个分支, 然后就和普通的 git 操作一样了. 25 | -------------------------------------------------------------------------------- /工具/git/git checkout检出远程分支.md: -------------------------------------------------------------------------------- 1 | # git checkout检出远程分支 2 | 3 | 检出本地不存在的远程分支时, 需要使用如下语句 4 | 5 | ``` 6 | git checkout -b 本地分支名称 origin/远程分支名称 7 | ``` 8 | 9 | 或是用`git fetch`先取回所有分支的更新, 再使用 10 | 11 | ``` 12 | git checkout 目标分支名称 13 | ``` 14 | 15 | `checkout`子命令帮助文档 16 | 17 | ``` 18 | usage: git checkout [] 19 | or: git checkout [] [] -- ... 20 | 21 | -q, --quiet suppress progress reporting 22 | -b create and checkout a new branch 23 | ``` 24 | 25 | `-b `指定本地分支, 为`[]`部分. 26 | 27 | 之后若不指定``, 则在本地创建新分支. -------------------------------------------------------------------------------- /工具/git/git clone -c core.symlinks=true自动创建软链接[win 快捷方式].md: -------------------------------------------------------------------------------- 1 | # git clone -c core.symlinks=true自动创建软链接[win 快捷方式] 2 | 3 | 参考文章 4 | 5 | 1. [记录kubernetes源码在windows下查看的一个小坑](https://zhuanlan.zhihu.com/p/52056165) 6 | 7 | 在 kubernetes 工程中, 有一个`staging`目录, 是通过软链接引入的. 在 linux 下, `git clone` 8 | 9 | ``` 10 | 11 | ``` 12 | -------------------------------------------------------------------------------- /工具/git/git commit --amend修改最后一次提交.md: -------------------------------------------------------------------------------- 1 | # git commit --amend修改最后一次提交 2 | 3 | 参考文章 4 | 5 | 1. [Git提交错了不用慌,这三招帮你修改记录](https://zhuanlan.zhihu.com/p/340007149) 6 | 7 | 直接执行即可, 会进入 vim 编辑模式, 修改 commit 并保存退出. 8 | 9 | 之后需要 git push --force 强制推送. 10 | -------------------------------------------------------------------------------- /工具/git/git config代理设置.md: -------------------------------------------------------------------------------- 1 | # git config代理设置 2 | 3 | : 4 | 5 | 参考文章 6 | 7 | [git代理设置方法解决](http://www.cnblogs.com/jackyshan/p/5985590.html) 8 | 9 | 设置http及https代理 10 | 11 | ``` 12 | git config --global http.proxy http://127.0.0.1:1080 13 | git config --global https.proxy https://127.0.0.1:1080 14 | ``` 15 | 16 | 设置socks代理 17 | 18 | ``` 19 | git config --global http.proxy 'socks5://127.0.0.1:1080' 20 | git config --global https.proxy 'socks5://127.0.0.1:1080' 21 | ``` 22 | 23 | 设置了socks5的代理后, `git clone`操作无论是`https://`这种http协议, 还是`git@github`这种ssh协议, 都可以走代理. 不太清楚使用http层面的代理时, 对ssh协议是否有效. 24 | -------------------------------------------------------------------------------- /工具/git/git config初始化设置邮箱用户名.md: -------------------------------------------------------------------------------- 1 | # git config初始化设置邮箱用户名 2 | 3 | ``` 4 | ## git config --global user.name=general 5 | git config --global user.name general 6 | git config --global user.email generals.space@gmail.com 7 | ``` 8 | -------------------------------------------------------------------------------- /工具/git/git config换行符[todo].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [GitHub 第一坑:换行符自动转换](https://www.cnblogs.com/zjoch/p/5400251.html) 4 | 2. [配置 Git 处理行结束符](https://docs.github.com/zh/get-started/getting-started-with-git/configuring-git-to-handle-line-endings) 5 | 6 | ``` 7 | git config --global core.autocrlf false 8 | ``` 9 | 10 | ...还是不要, 最好设置成 true. 11 | -------------------------------------------------------------------------------- /工具/git/git diff比较指定文件的差异.md: -------------------------------------------------------------------------------- 1 | # git diff比较指定文件的差异 2 | 3 | 参考文章 4 | 5 | 1. [比较提交 - Git Diff](http://gitbook.liuhui998.com/3_5.html) 6 | 7 | 8 | `git diff HEAD`: 查看本次修改工作目录与上次提交时之间的所有差别, 这条命令所显示的内容都会在执行`git commit -a`命令时被提交. 9 | 10 | `git diff HEAD 文件路径`: 查看指定文件的修改. 11 | 12 | -------------------------------------------------------------------------------- /工具/git/git log与reflog查看提交历史.md: -------------------------------------------------------------------------------- 1 | # git log与reflog查看提交历史 2 | 3 | ``` 4 | ## 查看提交历史 5 | git log 6 | ## 查看修改历史(自从git工程创建或克隆, 每一次操作都会记录, commit, checkout...好像没有add) 7 | git reflog 8 | ``` 9 | -------------------------------------------------------------------------------- /工具/git/git pull与rebase.md: -------------------------------------------------------------------------------- 1 | # Git pull与rebase 2 | 3 | 参考文章 4 | 5 | 1. [简单对比git pull和git pull --rebase的使用](https://www.cnblogs.com/kevingrace/p/5896706.html) 6 | 7 | -------------------------------------------------------------------------------- /工具/git/git push pull 拉取和推送所有分支[branch].md: -------------------------------------------------------------------------------- 1 | # git拉取和推送所有分支 2 | 3 | 参考文章 4 | 5 | 1. [git拉取和推送所有分支](https://www.jianshu.com/p/c196df31322b) 6 | 2. [Git push将本地版本库的分支推送到远程服务器上对应的分支](https://www.cnblogs.com/wuer888/p/7656523.html) 7 | - git push常用命令 8 | 9 | 将本地所有分支推送到远程 10 | 11 | git push默认只推送当前分支到远程, 如需推送本地所有分支, 需要添加`--all`选项. 12 | 13 | ``` 14 | git push --all 15 | ``` 16 | 17 | 拉取远程所有分支代码到本地 18 | 19 | ``` 20 | git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done 21 | git fetch --all 22 | git pull --all 23 | ``` 24 | 25 | 虽然git pull也有`--all`选项, 但是好像不能达到我们想要的效果. 26 | 27 | `git branch -r`是显示所有远程分支. 28 | 29 | `grep -v '\->'`是过滤`origin/HEAD -> origin/master`这种记录. 30 | 31 | git pull和git fetch的`--all`标记可以拉取所有已跟踪的分支, 在远程的最新提交. 32 | -------------------------------------------------------------------------------- /工具/git/git push pull 拉取和推送所有标签[tag].md: -------------------------------------------------------------------------------- 1 | # git拉取和推送所有分支 2 | 3 | 参考文章 4 | 5 | 1. [Git把Tag推送到远程仓库](https://www.cnblogs.com/kabi/p/8553850.html) 6 | 7 | 貌似不需要拉取所有标签, 这是会自动下载的. 推送的话, 需要使用如下命令 8 | 9 | ``` 10 | git push origin --tags 11 | ``` 12 | -------------------------------------------------------------------------------- /工具/git/git push已经提交到远程仓库的错误提交修复和回退.md: -------------------------------------------------------------------------------- 1 | # Git命令应用-已经提交到远程仓库的错误提交修复和回退 2 | 3 | 参考文章 4 | 5 | 1. [GIT_已经提交到远程仓库的错误提交怎么修复和回退](https://blog.csdn.net/gzgengzhen/article/details/76446082) 6 | 7 | 已经推到远程的分支上分某次提交发现其中有错误的操作(或commit信息), 需要回退进行更改(一般是比较愚蠢的, 不想被人抓住把柄的那种). 8 | 9 | 步骤: 10 | 11 | 1. 重置(或是重置到某一个commit), reset的标记根据实际情况选择`hard`, `soft`, 或是`mixed`. 12 | 13 | ``` 14 | git reset HEAD^ 15 | ``` 16 | 17 | 2. 修改并重新commit 18 | 19 | ``` 20 | git commit -m "New commit message" 21 | ``` 22 | 23 | 3. 强制上传 24 | 25 | ``` 26 | git push --force 27 | ``` 28 | -------------------------------------------------------------------------------- /工具/git/git reset重置工作区与暂存区.md: -------------------------------------------------------------------------------- 1 | # git reset重置工作区与暂存区 2 | 3 | ``` 4 | ## 使用HEAD分支中的内容刷新暂存区内存, add的文件会丢失, 工作区不变. 其实也隐含着使用HEAD分支最近的提交刷新当前分支的最近提交. 5 | git reset HEAD 6 | ## 将当前分支的游标指向上一个提交, 即父提交. 放弃了当前提交. 会刷新当前工作区与暂存区, 已经提交过的修改都会丢失(可以通过reflog找回) 7 | git reset --hard HEAD^ 8 | ``` 9 | -------------------------------------------------------------------------------- /工具/git/git rev-parse查看当前所在commit id.md: -------------------------------------------------------------------------------- 1 | # Git查看当前所在commit id 2 | 3 | 参考文章 4 | 5 | 1. [git怎么查询当前分支的版本号(commit id)](https://segmentfault.com/q/1010000004913872/a-1020000004943651) 6 | 7 | ``` 8 | git rev-parse HEAD 9 | ``` 10 | -------------------------------------------------------------------------------- /工具/git/git show查看指定commit的提交详情[修改记录].md: -------------------------------------------------------------------------------- 1 | # git show查看提交详情 2 | 3 | 参考文章 4 | 5 | 1. [git查看commit提交记录详情](https://blog.csdn.net/weixin_37697277/article/details/80250879) 6 | 7 | git log 查看所有的commit提交记录 8 | 9 | git show 查看最新提交的详情 10 | 11 | git show commitId 查看指定提交的详情 12 | -------------------------------------------------------------------------------- /工具/git/git status将文件状态标为renamed问题探究(转).md: -------------------------------------------------------------------------------- 1 | # git status将文件状态标为renamed问题探究(转) 2 | 3 | 原文链接 4 | 5 | 1. [git status将文件状态标为renamed问题探究](https://segmentfault.com/a/1190000018309916) 6 | 7 | -------------------------------------------------------------------------------- /工具/git/git update-index --assume-unchanged忽略指定文件的变更[gitignore].md: -------------------------------------------------------------------------------- 1 | # git update-index --assume-unchanged忽略指定文件的变更[gitignore] 2 | 3 | 参考文章 4 | 5 | 1. [Git忽略部分修改的方法(.gitignore添加忽略文件不起作用的解决办法)](https://www.cnblogs.com/gongxianjin/p/17510858.html) 6 | 7 | 我们知道`.gitignore`是针对未加入git仓库的文件进行忽略的机制, 就是说在一个/一类文件还未加入仓库前, 在`.gitignore`文件中编写好相应的规则, 就可以忽略这类文件的"新增"行为, 避免误将其加入仓库. 8 | 9 | 但是对于已经存在于仓库中的文件, 再在`.gitignore`文件上编写规则, 是无法忽略开发者对其的"更新"行为的. 10 | 11 | 最近遇到了一个场景, kubebuilder 工程中从另一个外部项目拷贝了几个 crd 的`_type.go`文件, 对应的 yaml 也放到了`config/crd/bases`目录. 12 | 13 | 但是在工程根目录下执行`make`重新生成 yaml 时, 总是会同时更新这几个外部 crd 的 yaml 文件, 这是我们不希望看到的, 我们希望外部的 crd yaml 老老实实待着, 如果外部项目发生变化(频率不高), 由我们手动更新. 14 | 15 | 参考文章1中介绍了一种方案, 如下: 16 | 17 | 添加忽略 18 | 19 | ``` 20 | git update-index --assume-unchanged ./config/config.yaml 21 | ``` 22 | 23 | 取消忽略 24 | 25 | ``` 26 | git update-index --no-assume-unchanged ./config/config.yaml 27 | ``` 28 | 29 | 有效. 30 | -------------------------------------------------------------------------------- /工具/git/git 使用子仓库.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [git submodule 添加子仓库](https://blog.csdn.net/xiewenhao12/article/details/103407609) 4 | 5 | -------------------------------------------------------------------------------- /工具/git/github-fork使用.md: -------------------------------------------------------------------------------- 1 | # github-fork使用 2 | 3 | 参考文章 4 | 5 | 1. [在Github和Git上fork之简单指南](https://linux.cn/article-4292-1-rss.html) 6 | 7 | fork其实是将对方的源码拷贝一份到自己的仓库, 之后的操作和自己本人的仓库没有任务区别, 同样可以修改然后提交并推送. 8 | 9 | 想要将自己的更新推送给源作者, 需要在更新之后新建一个`pull request`请求, 它会将自己目前有的分支让你挑选, 推送到源作者仓库的某个分支. 由对方选择是否接受. 10 | 11 | 其实不fork也能`pull request`, 但是只能推给自己, 顶多实现各分支之间的推送与接受, 类似于分支合并. 12 | 13 | ![](https://gitee.com/generals-space/gitimg/raw/master/7731cb24e4fdb841d456c320d7bbc874.png) 14 | -------------------------------------------------------------------------------- /工具/git/git命令应用-后悔药.md: -------------------------------------------------------------------------------- 1 | # GIT命令应用-后悔药 2 | 3 | 参考文章 4 | 5 | 1. [Git教程 - 廖雪峰的官方网站 版本回退](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000) 6 | 7 | 2. [Git教程 - 廖雪峰的官方网站 撤销修改](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000) 8 | 9 | 参考文章1中的场景适用于在本地commit记录中来回切换, 不涉及本地暂存区与工作区的覆盖与恢复, 用的是`reset`命令. 10 | 11 | 参考文章2中的场景适用于在`干净的工作区` -> `编辑` -> `add` -> `暂存区` -> `commit` -> `push`一系列操作之间的撤销, 最多只涉及2次提交, 用的是`checkout`命令. 12 | -------------------------------------------------------------------------------- /工具/git/git命令应用-覆盖分支.md: -------------------------------------------------------------------------------- 1 | # GIT命令应用-覆盖分支 2 | 3 | 参考文章 4 | 5 | 1. [git@Osc当中怎么把一个分支的内容完全替换成另一个分支的内容呢?](http://www.oschina.net/question/1993919_224813) 6 | 7 | 我现在项目有2个分支,一个是master分支,一个是develop分支, 8 | 9 | 我们项目的成员一般推送都是往develop分支里面推送东西,master作为一个稳定版本只隔一段时间发布一个版本。 10 | 11 | 请问一下,我现在想让develop分支的所有文件覆盖master分支的文件,请问怎么做,就说简单一点,就是替换,但是不删除原有分支,完全替换。 12 | 13 | ``` 14 | git checkout master 15 | git reset --hard develop //先将本地的master分支重置成develop 16 | git push origin master --force //再推送到远程仓库 17 | ``` 18 | 19 | ------ 20 | 21 | 使用图形界面时, 记得也是先切换回master, 然后到develop分支最新的commit处右键选择`reset maste to this commit [hard]` 22 | 23 | 这个方法适用于长时间推送到某个分支直接其稳定, 不需要与其他分支进行比对, 想直接使用此分支上的代码的情况. -------------------------------------------------------------------------------- /工具/git/问题处理/git clone出现Unable to find remote helper for https.md: -------------------------------------------------------------------------------- 1 | # git clone出现Unable to find remote helper for https 2 | 3 | 参考文章 4 | 5 | 1. [“Unable to find remote helper for 'https'” during git clone](http://stackoverflow.com/questions/8329485/unable-to-find-remote-helper-for-https-during-git-clone) 6 | 7 | 情境描述: 8 | 9 | 源码安装的git, 2.9.3, 第一次执行`git clone`时出现如下报错 10 | 11 | ``` 12 | git clone https://git.oschina.net/generals-space/work-grapher.git ./grapher/ 13 | fatal: Unable to find remote helper for 'https' 14 | ``` 15 | 16 | 原因分析与解决方法 17 | 18 | 这是因为缺少`curl-devel`库的缘故, 需要首先`yum install curl-devel`, 然后重新`configure`并编译安装. 19 | -------------------------------------------------------------------------------- /工具/git/问题处理/git clone或push出现401 Unauthorized while accessing.md: -------------------------------------------------------------------------------- 1 | # git clone或push出现401 Unauthorized while accessing 2 | 3 | `git clone`或`git push`操作时报错如下 4 | 5 | ``` 6 | git push origin 7 | error: The requested URL returned error: 401 Unauthorized while accessing https://git.oschina.net/generals-space/ansible.git/info/refs 8 | 9 | fatal: HTTP request failed 10 | ``` 11 | 12 | 问题分析 13 | 14 | git版本问题, 当前版本为`1.7.1` 15 | 16 | 解决办法 17 | 18 | 重新安装高版本的git即可, 最好是1.9+ -------------------------------------------------------------------------------- /工具/git/问题处理/git push tag.md: -------------------------------------------------------------------------------- 1 | # git push tag 2 | 3 | 参考文章 4 | 5 | 1. [Git把Tag推送到远程仓库](https://blog.csdn.net/github_27263697/article/details/79563949) 6 | - 推送所有tag到远程 7 | 8 | 在本地使用`git tag v0.0.1`创建好tag后需要推送到远程仓库, 使用如下命令 9 | 10 | ``` 11 | git push origin v0.0.1 12 | ``` 13 | 14 | -------------------------------------------------------------------------------- /工具/git/问题处理/git push出现refusing to merge unrelated histories.md: -------------------------------------------------------------------------------- 1 | # git push出现refusing to merge unrelated histories 2 | 3 | 参考文章 4 | 5 | 1. [git无法pull仓库refusing to merge unrelated histories](http://blog.csdn.net/lindexi_gd/article/details/52554159) 6 | 7 | 8 | ``` 9 | fatal: refusing to merge unrelated histories 10 | ``` 11 | 12 | 问题描述 13 | 14 | OSChina初始化一个git仓库, 本地也使用`git init`初始化了一个工作目录, 并添加了文件, 做了一次提交. 15 | 16 | 不幸的是, 远程的git仓库有了一个readme文件, 相当于一次提交. 于是不管是push还是pull都提示了上述的错误. 的确, 它们基于不同的历史, 不能合并也是可以理解的... 17 | 18 | 然而更加不幸的是, 本地的提交没有父级提交(因为它是第一个提交), 所以也没有办法删掉, 尴尬了... 19 | 20 | 解决办法 21 | 22 | 这个问题出现在git的`2.9.2`版本, 需要使用`--allow-unrelated-histories`选项强制合并. `pull`与`merge`都有这个选项. 23 | -------------------------------------------------------------------------------- /工具/git/问题处理/gitignore文件无效.md: -------------------------------------------------------------------------------- 1 | # gitignore文件无效 2 | 3 | 参考文章 4 | 5 | 1. [.gitignore无效, 不能过滤某些文件](http://blog.csdn.net/zhangjs0322/article/details/37658669) 6 | 7 | 利用.gitignore过滤文件, 如编译过程中的中间文件, 等等, 这些文件不需要被追踪管理. 8 | 9 | 问题描述: 10 | 11 | 在`.gitignore`添加`file1`文件, 以过滤该文件, 但是通过`git status`查看仍显示file1文件的修改状态. 12 | 13 | 原因分析: 14 | 15 | `.gitignore`文件只对还没有加入版本管理的文件起作用, 如果之前已经用git把这些文件纳入了版本库并`commit`过, 就不起作用了. 16 | 17 | 解决方法: 18 | 19 | 需要在git库中删除该文件, 并更新(`git commit`). 然后再次`git status`查看状态, file1文件不再显示状态. 20 | -------------------------------------------------------------------------------- /工具/git/问题处理/git无法提交空目录.md: -------------------------------------------------------------------------------- 1 | # git无法提交空目录 2 | 3 | git默认无法提交空目录, 解决办法是在空目录中创建类似`.gitignore`的隐藏文件占位, 一般命名为`.gitkeep` 4 | -------------------------------------------------------------------------------- /工具/git/问题处理/git编译问题.md: -------------------------------------------------------------------------------- 1 | # git编译问题 2 | 3 | 编译时遇到问题 4 | 5 | ``` 6 | $ make install 7 | GITGUI_VERSION = 0.20.GITGUI 8 | * new locations or Tcl/Tk interpreter 9 | GEN git-gui 10 | INDEX lib/ 11 | * tclsh failed; using unoptimized loading 12 | MSGFMT po/bg.msg make[1]: *** [po/bg.msg] Error 127 13 | make: *** [all] Error 2 14 | ``` 15 | 16 | 解决办法 17 | 18 | ``` 19 | yum install tcl tk gettext 20 | ``` 21 | 22 | 编译完成后, 执行`git clone`或`git push`等与远程仓库交互的操作时, 报错如下 23 | 24 | ``` 25 | $ git push origin 26 | fatal: Unable to find remote helper for 'https' 27 | ``` 28 | 29 | 问题分析 30 | 31 | 编译时未安装`curl-devel`库 32 | 33 | 解决方法 34 | 35 | 安装`curl-devel`, 重新`configure`并重新编译. 36 | -------------------------------------------------------------------------------- /工具/markdown/Markdown图片并排显示[表格].md: -------------------------------------------------------------------------------- 1 | # Markdown图片并排显示 2 | 3 | 参考文章 4 | 5 | 1. [简书markdown技巧-图片并排](https://www.jianshu.com/p/c37f200c0d9c) 6 | 7 | -------------------------------------------------------------------------------- /工具/markdown/Markdown流程图绘制[mermaid].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Mermaid从入门到入土——Markdown进阶语法](https://zhuanlan.zhihu.com/p/355997933) 4 | 5 | vscode 需要安装"Markdown Preview Enhanced"插件. 6 | 7 | mermaid很有意思 8 | 9 | ```mermaid 10 | flowchart LR 11 | A(master-0) <---> B(master-1) <---> C(master-2) <--> A(master-0) 12 | ``` 13 | -------------------------------------------------------------------------------- /工具/markdown/Markdown输入角标.md: -------------------------------------------------------------------------------- 1 | # Markdown输入角标 2 | 3 | 参考文章 4 | 5 | 1. [在markdown中如何加入上标、下标?](https://www.jianshu.com/p/13b3366f0260) 6 | 7 | markdown中如何加入上标、下标? 如分子式,商标等等。 8 | 9 | 其实了解原理后很简单。 10 | 11 | Markdown一个套兼容HTML的语法,所以使用HTML中下标下标的语法(``, ``)即可。 12 | 13 | 写法 14 | 15 | ```markdown 16 | H2O CO2 17 | 18 | 爆米TM 19 | ``` 20 | 21 | 预览 22 | 23 | H2O CO2 24 | 25 | 爆米TM -------------------------------------------------------------------------------- /工具/svn/SVN命令应用-冲突解决.md: -------------------------------------------------------------------------------- 1 | # SVN命令应用-冲突解决 2 | 3 | 参考文章 4 | 5 | [SVN:冲突解决 合并别人的修改](http://www.letuknowit.com/archives/svn-conflict-resolution/) 6 | 7 | ## 1. 8 | 9 | ``` 10 | root@localhost:/home/kris/calc/trunk# svn up 11 | Conflict discovered in 'main.c'. 12 | Select: (p) postpone, (df) diff-full, (e) edit, 13 | (mc) mine-conflict, (tc) theirs-conflict, 14 | (s) show all options: 15 | ``` 16 | 17 | 各个选项的含义 18 | 19 | ``` 20 | (p) postpone 暂时推后处理,我可能要和那个和我冲突的家伙商量一番 21 | (df) diff-full 把所有的修改列出来,比比看 22 | (e) edit 直接编辑冲突的文件 23 | (mc) mine-conflict 如果你很有自信可以只用你的修改,把别人的修改干掉 24 | (tc) theirs-conflict 底气不足,还是用别人修改的吧 25 | (s) show all options 显示其他可用的命令 26 | ``` -------------------------------------------------------------------------------- /工具/word文档中插入高亮代码块[docx office].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [CodeInWord](http://codeinword.com/) 4 | 2. [highlightcode](https://highlightcode.com/) 5 | 6 | -------------------------------------------------------------------------------- /工具/yaml/yaml中使用null表示空对象.md: -------------------------------------------------------------------------------- 1 | # yaml中使用null表示空对象 2 | 3 | 在使用 kubectl patch 变更指定字段时, 如果目标字段是一个对象, 如 4 | 5 | ```yaml 6 | livenessProbe: 7 | httpGet: 8 | path: /healthz 9 | port: 8081 10 | initialDelaySeconds: 15 11 | periodSeconds: 20 12 | ``` 13 | 14 | 想把`livenessProbe`置为空, 但是直接设置`livenessProbe: {}`是不行的, 无法覆盖. 15 | 16 | 需要使用 17 | 18 | ```yaml 19 | livenessProbe: null 20 | ``` 21 | -------------------------------------------------------------------------------- /工具/yaml/yaml文件中&的用法.md: -------------------------------------------------------------------------------- 1 | # yaml文件中&的用法 2 | 3 | 参考文章 4 | 5 | 1. [新手问题 YAML 里的「&」符号表示什么?](https://ruby-china.org/topics/5859) 6 | 2. [分享 Yaml 代码复用技巧](https://ruby-china.org/topics/3637) -------------------------------------------------------------------------------- /工具/youtube/readme.md: -------------------------------------------------------------------------------- 1 | [用 yt-dlp 下载整个 YouTube 频道的视频](https://cloud.tencent.com/developer/beta/article/1943974) 2 | [视频专业下载工具,Youtube-dl 详细使用教程与初学上手示例](https://www.sysgeek.cn/youtube-dl-examples/) 3 | 4 | 安装方法 5 | 6 | ``` 7 | python3 -m pip install --force-reinstall https://github.com/yt-dlp/yt-dlp/archive/master.tar.gz 8 | ``` 9 | -------------------------------------------------------------------------------- /工具/使用pandoc进行markdown与word的格式转换[md docx].md: -------------------------------------------------------------------------------- 1 | # 使用pandoc进行markdown与word的格式转换[md docx] 2 | 3 | ``` 4 | d run -it --name pandoc --rm -v /home/playground/pandoc:/data pandoc/core sh 5 | ``` 6 | 7 | ## markdown -> word 8 | 9 | 没找到合适的, markdown转成word格式都没了. 有人建议直接用编辑器的预览功能, 然后拷贝到word中. 10 | 11 | 不过我目前没有这个需求, 先不考虑. 12 | 13 | ## word -> markdown 14 | 15 | ``` 16 | pandoc -f docx -t markdown -o test.md test.docx 17 | ``` 18 | 19 | 如果word中包含图片, 可以添加`--extract-media`选项将其保存到本地, 生成的markdown文件中会以相对路径的格式引用. 20 | 21 | ``` 22 | pandoc -f docx -t markdown --extract-media='.' -o test.md test.docx 23 | ``` 24 | 25 | -------------------------------------------------------------------------------- /工具/终端/SecureCRT中文乱码.md: -------------------------------------------------------------------------------- 1 | # SecureCRT中文乱码 2 | 3 | 参考文章 4 | 5 | 1. [SecureCRT中文乱码解决方案](https://blog.csdn.net/yongqi_wang/article/details/81392638) 6 | - 会话选项 -> 外观 -> 字符编码 7 | - 字体 -> 字符集 -> 中文GB2312 8 | 9 | -------------------------------------------------------------------------------- /工具/终端/SecureCTR配色方案.md: -------------------------------------------------------------------------------- 1 | # SecureCTR配色方案 2 | 3 | 参考文章 4 | 5 | 1. [SecureCRT配色推荐和永久设置](https://blog.csdn.net/zq710727244/article/details/53909801) 6 | 2. [SecureCRT 配色方案(仿 Solarized)](https://www.jianshu.com/p/de5a2164fad2) 7 | 8 | md连配置文件都没有, 只能一个一个改. 9 | 10 | 不同版本按钮的地方都不一样. 11 | -------------------------------------------------------------------------------- /工具/终端/XShell6启动报错-由于找不到mfc110.dll,无法继续执行代码.md: -------------------------------------------------------------------------------- 1 | # XShell6启动报错-由于找不到mfc110.dll,无法继续执行代码 2 | 3 | 参考文章 4 | 5 | 1. [Xshell启动报错:由于找不到mfc110.dll,无法继续执行代码。重新安装程序可能会解决此问题](https://blog.csdn.net/qq_27252133/article/details/85055612) 6 | 7 | [下载地址](https://www.microsoft.com/zh-CN/download/details.aspx?id=30679) 8 | 9 | 64位系统要同时安装x86和x64两个包才可以. 10 | -------------------------------------------------------------------------------- /数据库与SQL/Postgres/SQL技巧/Postgresql-删除正在占用的数据库.md: -------------------------------------------------------------------------------- 1 | # Postgresql-删除正在占用的数据库 2 | 3 | 参考文章 4 | 5 | 1. [RDS for PostgreSQL 删除数据库时提示 There are 2 other sessions using the database.](https://help.aliyun.com/knowledge_detail/41763.html) 6 | 7 | 尝试删除数据库, 但是报错说有客户端(桌面客户端, 程序连接等)正在连接, 不能删除. 8 | 9 | ```sql 10 | postgres=# drop database kanjula; 11 | ERROR: database "kanjula" is being accessed by other users 12 | DETAIL: There are 5 other sessions using the database. 13 | ``` 14 | 15 | 使用如下语句强制删除连接. 16 | 17 | ```sql 18 | postgres=# select pg_terminate_backend(pid) from (select pid from pg_stat_activity where datname = 'kanjula') as a; 19 | pg_terminate_backend 20 | ---------------------- 21 | t 22 | t 23 | t 24 | t 25 | t 26 | (5 rows) 27 | ``` 28 | 29 | 之后就可以删除数据库了. 30 | 31 | ```sql 32 | postgres=# drop database kanjula; 33 | DROP DATABASE 34 | ``` -------------------------------------------------------------------------------- /数据库与SQL/Postgres/SQL技巧/Postgresql-常用alter语句.md: -------------------------------------------------------------------------------- 1 | # Postgresql-常用alter语句 2 | 3 | 参考文章 4 | 5 | [postgresql 修改字段长度](http://blog.csdn.net/baidu_18607183/article/details/78182275) 6 | 7 | ## 更改字段类型(修改varchar类型的字段长度) 8 | 9 | ```sql 10 | ALTER TABLE 表名 alter COLUMN 列名 type character varying(3000); 11 | ``` 12 | 13 | ## 更改已存在的用户密码 14 | 15 | ``` 16 | alter user postgres with password 'NewPassword'; 17 | ``` 18 | 19 | ## 创建列(默认值: 非空) 20 | 21 | ```sql 22 | alter table idc_info add column status int default 1 not null; 23 | alter table idc_info add column status int not null default 1; 24 | ``` 25 | 26 | 为目标表`idc_info`新增一个字段`status`, `int`类型, 默认值为1, 非空约束. -------------------------------------------------------------------------------- /数据库与SQL/Postgres/SQL技巧/Postgresql-表级备份.md: -------------------------------------------------------------------------------- 1 | ## Postgresql-表级备份 2 | 3 | ```sql 4 | sky=> select * from idc_info into idc_info_20170830; 5 | ERROR: syntax error at or near "into" 6 | LINE 1: select * from idc_info into idc_info_20170830; 7 | ^ 8 | sky=> select * into idc_info_20170830 from idc_info; 9 | SELECT 1086 10 | ``` 11 | 12 | `select 字段 into 目标表 from 源表`语句可以备份指定表(也可以指定字段), 目标表对象不必事先存在, 而且`into`与`from`不能调换位置, 否则会出错. 13 | -------------------------------------------------------------------------------- /数据库与SQL/Postgres/SQL技巧/Postgresql-设置自增主键初始值.md: -------------------------------------------------------------------------------- 1 | # Postgresql应用技巧-设置自增主键初始值 2 | 3 | 参考文章 4 | 5 | 1. [postgresql自增字段初始值的设定](https://my.oschina.net/justdo/blog/125042) 6 | 7 | 假设有如下表, 主键为`id`, 类型为自增序列. 8 | 9 | ```sql 10 | \d books 11 | Table "public.books" 12 | Column | Type | Collation | Nullable | Default 13 | --------------+---------------+-----------+----------+----------------------------------- 14 | id | bigint | | not null | nextval('books_id_seq'::regclass) 15 | ``` 16 | 17 | 我们想设置其初始值为1000, 可以执行如下语句. 18 | 19 | ```sql 20 | select setval('testtable_id_seq', 1000, false); 21 | ``` 22 | 23 | 貌似setval的第2, 3个参数还有各自的含义, 这里不再深究. -------------------------------------------------------------------------------- /数据库与SQL/Postgres/存储过程/Postgres存储过程(五)-嵌套模块.md: -------------------------------------------------------------------------------- 1 | # Postgres存储过程(五)-嵌套模块 2 | 3 | 参考文章 4 | 5 | 1. [PostgreSQL pl/pgsql 编写存储过程](https://abcdkyd.github.io/2018/06/15/postgres%20pl-pgsql%20%E7%BC%96%E5%86%99%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/) -------------------------------------------------------------------------------- /数据库与SQL/Postgres/存储过程/Postgres存储过程-$$.md: -------------------------------------------------------------------------------- 1 | # Postgres存储过程-$$ 2 | 3 | 参考文章 4 | 5 | 1. [What are '$$' used for in PL/pgSQL](https://stackoverflow.com/questions/12144284/what-are-used-for-in-pl-pgsql) -------------------------------------------------------------------------------- /数据库与SQL/SQL/SQL关于多字段联合索引与独立索引的效率区别.md: -------------------------------------------------------------------------------- 1 | # SQL关于多字段联合索引与独立索引的效率区别 2 | 3 | 参考文章 4 | 5 | 1. []() 6 | 7 | 提问 8 | 9 | 在一个`test_tbl`表中, 为字段a与字段b分别建立索引与为两者建立联合索引, 在读和写操作上的效率有怎样的区别? 10 | 11 | 回答 12 | 13 | 在读操作中, 如果where条件为`a and b`, 则联合索引更快, 如果where条件只有单个字段, 则独立索引更快. 14 | 15 | 在写操作中(只验证过insert), 已创建联合索引的表速度更快, 2个独立索引则会更慢. 应该是在insert过程中, 创建1个索引比2个索引更快的原因吧? 16 | -------------------------------------------------------------------------------- /数据库与SQL/SQL/SQL技巧 - case when批量更新.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [SQL-批量插入和批量更新](http://blog.csdn.net/lovemenghaibin/article/details/50759003) 4 | -------------------------------------------------------------------------------- /数据库与SQL/数据库对比/数据类型.md: -------------------------------------------------------------------------------- 1 | mysql对text类型分为4种: `TinyText`,`Text`, `MediumText`和`LongText`; 2 | 3 | 而pg只有一种: `text`. 4 | 5 | mysql对于表名, 列名是保留字的, 如`desc`, `user`这种, 建议在操作时使用反引号包裹; 6 | 7 | 而pg对于表名, 列名是保留字的, 或是有大写字母的, 使用的是双引号包裹. -------------------------------------------------------------------------------- /未分类/Gradle脚本示例.md: -------------------------------------------------------------------------------- 1 | # Gradle脚本示例 2 | 3 | ```groovy 4 | /* 5 | * @name:downloadJars 6 | * @function:将dependencies中的依赖包下载到当前目录的libs目录下 7 | * 见task downloadJars 8 | * */ 9 | 10 | apply plugin: 'java' 11 | 12 | repositories{ 13 | mavenLocal() 14 | //maven字段必须指定url, 不能以mavenLocal()之类替代 15 | maven{ 16 | name "oschina" 17 | url "http://maven.oschina.net/content/groups/public/" 18 | } 19 | mavenCentral() 20 | } 21 | 22 | dependencies{ 23 | //将下载spring的编译时依赖 24 | compile "org.springframework:spring-context:4.2.2.RELEASE" 25 | } 26 | 27 | task downloadJars(type: Copy){ 28 | from configurations.runtime 29 | //将下载到当前目录的libs目录下 30 | into 'libs' 31 | } 32 | ``` -------------------------------------------------------------------------------- /未分类/VirtualBox5.x没有vdfuse工具的解决方法.md: -------------------------------------------------------------------------------- 1 | # VirtualBox5.x没有vdfuse工具的解决方法 2 | 3 | 参考文章 4 | 5 | 1. [centos/ubuntu挂载vmdk、 vdi为块设备的方法(非vdfuse)](http://blog.51cto.com/zhangyu/1862716) 6 | 7 | `vdfuse`命令是VirtualBox软件挂载VDI分区文件的一个工具,VirtualBox是一款能创建虚拟机的开源软件,vdi是它的默认磁盘格式。 8 | 9 | 但是这个工具只在Virtualbox 4.x中出现, 5.0+之后就被取消了. 参考文章1中有提到过替代方法, 但不是很想用. 10 | 11 | 后来想到先安装一个4.x的virtualbox, 把其中的`vdfuse`可执行文件拷贝到安装了5.x的机器上. 当然, 单纯只拷贝这个文件是不行的, 它还依赖一些其他的共享库, 所以需要执行看看缺少哪些库文件, 都拷贝过来就可以了. -------------------------------------------------------------------------------- /未分类/vCenter.md: -------------------------------------------------------------------------------- 1 | [在ESXi主机上部署vCenter Server 6.7(Windows版本)](https://blog.51cto.com/u_3701740/2326475) 2 | 3 | [VMware vCenter Server下载 v7.0 中文破解版(附安装教程)](http://www.kxdw.com/soft/30863.html) 4 | - 其实是6.7 5 | -------------------------------------------------------------------------------- /未分类/安卓-查看已连接wifi的密码[android].md: -------------------------------------------------------------------------------- 1 | # 安卓-查看已连接wifi的密码[android] 2 | 3 | 参考文章 4 | 5 | 现在很多手机打开已连接的wifi, 是没有办法直接查看密码的, 而是会弹出一个二维码, 显示可以分享给其他手机, 但是如果想分享给电脑呢? 6 | 7 | 这个二维码可以先保存到手机, 然后使用微信扫描, 在弹出的界面中会有wifi的名称和二维码. 8 | -------------------------------------------------------------------------------- /未分类/技术杂谈.md: -------------------------------------------------------------------------------- 1 | ## 前端 2 | 3 | 1. [2016 年做前端开发是什么体验?混乱+开倒车,这是我的体验](https://www.v2ex.com/t/313482) 4 | 2. [睡觉前突然胡思乱想。前端可以说是非常尴尬的一个工种了](https://www.v2ex.com/t/378487) 5 | -------------------------------------------------------------------------------- /笔记/201709.md: -------------------------------------------------------------------------------- 1 | 关于事件监听与回调, 参考文章[监听和回调两种机制](http://www.jianshu.com/p/13e417854c5b) 2 | 3 | 感觉这两种机制的一个共同特点就是, 在某个事件完成(或者其他进程节点处发生)时触发. 4 | 5 | Java有相应的设计模式, 如回调模式, 监听器模式. 在JS中我们以ajax为例 6 | 7 | ```js 8 | $.ajax({ 9 | type: 'GET', 10 | success: function(result){} 11 | }); 12 | ``` 13 | 14 | 在success回调函数中, 你可以决定执行某一函数(回调), 或是手动触发一个事件(监听). 15 | 16 | 触发事件的前提是事先要有监听者存在, success本身就可以作为一种'事件'. 17 | 18 | 另外, 监听机制就是委托式事件处理, 事件源和事件处理(监听)是分开的. 那么相反的, 回调则是两者统一, 当用户在触发事件的时候, 由控件自己来解决. 两者的一个区别是, 监听可以修改, 增删, 甚至查询, 但是回调做不到. 19 | 20 | Java中两种模式的实现都比较复杂, 而JS貌似是内置的功能, 监听与回调都相当完善. 21 | -------------------------------------------------------------------------------- /笔记/201908.md: -------------------------------------------------------------------------------- 1 | FIFO: 命名管道. 可在文件系统中创建一个字符文件, 进程只要打开这个文件, 对其进行读写即可实现通信. 2 | PIPE: 匿名管道. 内核提供的机制, 可使用`pipe()`函数创建一对文件描述符`fd[2]`, 但只能在父子进程间使用, 一般会立刻调用fork, 该fd也会复制到子进程空间. 数据通信貌似只能是单向的? 3 | 4 | 操作系统内核提供了很多机制, 比如IPC: 管道, 队列, 共享内存, socket等. 5 | 6 | 但编程语言没有必要使用这些机制进行通信, 比如很多第三方实现的mq, golang的channel, 就可方便地实现数据交换. 7 | 8 | 那ta们是怎么实现的呢? 申请内存, 加锁, 使用各种同步算法保持数据一致性... 总之, 提供的功能更加强大, 实现也更为复杂. 9 | 10 | C语言对内核实现的这些机制只是提供了对应的接口而已(感觉很原始), 大型C程序也许也不会用到??? 11 | 12 | 同样, 对于内核提供的一些锁机制: 进程间同步用的信号量, 线程间同步用的互斥锁, 内核级的自旋锁等...不过C标准库提供的这些机制也是内核接口? 没有自己的实现? 13 | 14 | 首先要说明一点, 先用C语言, 再有操作系统. 操作系统的API一般以C库的形式封装, 不过这些封装会对原生的系统调用做一些改动, 比如读写文件的函数会附加缓冲区, 某些依赖系统位数(32/64)的函数由C库决定调用哪一种等. 15 | 16 | C标准库中的互斥锁由操作系统直接提供, 而golang的互斥锁是利用操作系统提供的信号量+自旋锁实现的. 17 | 18 | 像golang这种拥有GC的语言是不需要显式像操作系统申请内存然后释放的, golang会预先向操作系统申请内存并自行分配...也许这就是内置运行时的真谛??? 19 | -------------------------------------------------------------------------------- /系统/Mac/Iterm2启动lrzsz上传下载.md: -------------------------------------------------------------------------------- 1 | # Iterm2启动lrzsz上传下载 2 | 3 | 参考文章 4 | 5 | 1. [Mac osx 下安装iTerm2,并使用rz sz上传下载(附homebrew配置)](https://segmentfault.com/a/1190000012166969) 6 | - 图文并茂, 简单有效 7 | -------------------------------------------------------------------------------- /系统/Mac/Iterm2快捷键.md: -------------------------------------------------------------------------------- 1 | # Iterm2快捷键 2 | 3 | 参考文章 4 | 5 | 1. [iterm2 如何使用键盘切换 Command+D 出来的分屏](https://www.v2ex.com/t/377356) 6 | 7 | ## 1. 标签操作 8 | 9 | `⌘ + t` 新建标签 10 | `⌘ + w` 关闭标签 11 | 12 | ⌘ + 方向键 按方向切换标签页 13 | 14 | ⌘ + 回车: 全屏切换 15 | 16 | ⌘ + ; 查看历史命令(样式不错) 17 | 18 | ⌘ + +/- 放大缩小字体 19 | 20 | ## 2. pane操作 21 | 22 | `⌘ + d` 垂直分屏. 23 | 24 | `⌘ + shift + d` 水平分屏 25 | 26 | 分出的屏叫作`pane`. 27 | 28 | `⌘ + opt + 方向键` 切换到指定方向的pane 29 | 30 | `⌘ + ]`和`⌘ + [` 在最近使用的pane间切换. 31 | 32 | pane的`broadcast`功能类似xshell的多标签输入命令 33 | 34 | `⌘ + option + i` 切换当前标签下多个`pane`全局输入. 35 | 36 | `Preferences->Appearance->Dim inactive split panes`: 可以影响同标签下未激活的标签是否灰色显示. 37 | 38 | 有时需要临时将当前`pane`最大化(像xshell的窗口临时合并), 但是其他的`pane`会话也要保存. 这可以用`cmd + shift + enter`, 可以暂时隐藏其他`pane`. -------------------------------------------------------------------------------- /系统/Mac/Keyboard Maestro.1.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Keyboard Maestro 入门指南](https://sspai.com/post/36442) 4 | 5 | -------------------------------------------------------------------------------- /系统/Mac/Mac-Alt+Tab切换窗口.md: -------------------------------------------------------------------------------- 1 | # Mac-Alt+Tab切换窗口 2 | 3 | 参考文章 4 | 5 | 1. [Is there any program or way to make Mac OS X's ⌘-Tab behave like Windows' Alt-Tab? [closed]](https://superuser.com/questions/193922/is-there-any-program-or-way-to-make-mac-os-xs-tab-behave-like-windows-alt-ta) 6 | 2. [AltTab](https://alt-tab-macos.netlify.app/) 7 | 3. [每天都在用的快捷键 ⌘Command-Tab,其实可以变得更好用](https://sspai.com/post/43611) 8 | 9 | macos下 command + tab 展示出的图标中包含最小化以及被关掉但没退出的窗口, 但是切换到的时候又完全没有反应还失去了焦点. 10 | 11 | 可以使用 AltTab 工具替换, 免费, 而且使用还挺简单的. 12 | -------------------------------------------------------------------------------- /系统/Mac/Mac-Finder显示隐藏文件.md: -------------------------------------------------------------------------------- 1 | # Mac-Finder显示隐藏文件 2 | 3 | 参考文章 4 | 5 | 1. [如何查看Mac上的隐藏文件和文件夹?](https://www.macbl.com/article/tips/1843) 6 | 2. [MacBook Pro 设置Finder显示隐藏文件](https://blog.csdn.net/qq_35624642/article/details/82764545) 7 | 3. [在 Mac OS X 上,如何隐藏文件和查看隐藏文件](https://www.helplib.com/Mac/article_11284) 8 | - Finder界面 `Command + Shift + .` 切换显示/隐藏模式 9 | - 命令行输入 `chflag hidden|nohidden 文件路径` 设置文件显示与隐藏属性 10 | 11 | 很多时候在终端能看到的文件, 在finder里没有显示. 比如在docker中用wget下载的文件, 或是从windows通过scp推过来的文件, 都是这样. 12 | 13 | 但是终端显示文件的权限并没有什么不同. 14 | 15 | 解决方法是开启finder显示隐藏的文件. 16 | 17 | 终端执行如下命令 18 | 19 | ``` 20 | defaults write com.apple.finder AppleShowAllFiles TRUE 21 | ``` 22 | 23 | 然后执行`killall`关闭finder(GUI上好像没有让finder退出的按钮啊...) 24 | 25 | ``` 26 | killall Finder 27 | ``` 28 | 29 | 然后再打开finder, 就可以显示隐藏文件了. 30 | 31 | 下面的命令可以再将隐藏文件的显示关闭, 当然也需要重启finder 32 | 33 | ``` 34 | defaults write com.apple.finder AppleShowAllFiles FALSE 35 | ``` 36 | -------------------------------------------------------------------------------- /系统/Mac/Mac-office word2016不显示图片.md: -------------------------------------------------------------------------------- 1 | # Mac-office word2016不显示图片 2 | 3 | 参考文章 4 | 5 | 1. [mac office 2011 word 不显示图片?](https://www.zhihu.com/question/20923303) 6 | 7 | 突然出现的, 打开 word 文档, 图片处就只显示占位, 点上去可以发现轮廓, 但是一片空白. 8 | 9 | 按照参考文章1中"静静"的回答, 切换成"全屏视图", 然后再切换回"页面视图", 图片就可以正常显示了... 10 | 11 | 有效... 12 | -------------------------------------------------------------------------------- /系统/Mac/Mac-sudo仍然Operation not permitted.md: -------------------------------------------------------------------------------- 1 | # Mac-sudo仍然Operation not permitted 2 | 3 | 参考文章 4 | 5 | 1. [Mac下使用sudo移动文件提示Operation not permitted](https://zhuanlan.zhihu.com/p/80845512) 6 | - `csrutil disable` 7 | 8 | -------------------------------------------------------------------------------- /系统/Mac/Mac-刷新DNS缓存.md: -------------------------------------------------------------------------------- 1 | # Mac-刷新DNS缓存 2 | 3 | 参考文章 4 | 5 | 1. [Mac下如何清除DNS缓存?](https://www.zhihu.com/question/19679715) 6 | 2. [Mac OS X 清除DNS缓存](https://www.cnblogs.com/qq952693358/p/9126860.html) 7 | 8 | 阿里云上修改了某个域名的解析地址, 但是 mac 上一直无法更新(其他 linux 主机上已经更新了), 需要手动执行一下清除缓存的命令. 9 | 10 | MacOS: 10.15.7 11 | 12 | 按照参考文章1所说, 不同版本需要使用不同的命令, 只执行`sudo dscacheutil -flushcache`时, 不生效. 13 | 14 | 按照参考文章2所说, 执行如下命令就可以了. 15 | 16 | ``` 17 | sudo killall -HUP mDNSResponder 18 | sudo killall mDNSResponderHelper 19 | sudo dscacheutil -flushcache 20 | ``` 21 | -------------------------------------------------------------------------------- /系统/Mac/Mac-命令行下打开当前目录 [open finder].md: -------------------------------------------------------------------------------- 1 | # Mac-命令行下打开当前目录 2 | 3 | 参考文章 4 | 5 | 1. [MAC在命令行中打开当前所在文件夹](https://www.jianshu.com/p/301afbace8e6) 6 | 7 | 有时`cd`到某个不太容易找的目录, 想看看里面图片的内容, 希望能从`Finder`里查看. 8 | 9 | 以前都是先用`code .`打开vscode, 然后从vscode打开`Finder`. 10 | 11 | 后来找到了参考文章1, 原来直接`open .`就可以了. 12 | -------------------------------------------------------------------------------- /系统/Mac/MacOS-realvnc连接失败too many security failures[远程连接].md: -------------------------------------------------------------------------------- 1 | # MacOS-realvnc连接失败too many security failures 2 | 3 | 参考文章 4 | 5 | 1. [VNC连接报错“too many security failures”](https://www.cnblogs.com/jiading/articles/12695171.html) 6 | 7 | ## 问题描述 8 | 9 | ![](https://gitee.com/generals-space/gitimg/raw/master/8e26fda125cde5e37b1380ed1d16ccd7.png) 10 | 11 | ## 解决方案 12 | 13 | 按照参考文章1所说, 停止重启就可以了. 14 | 15 | 不过我这边是通过MacOS自带的服务管理启动的, 无法使用`vncserver -kill :1`杀进程, 所以只能用常规`kill`命令完成. 16 | 17 | ```console 18 | $ ps -ef | grep vnc 19 | 0 355 1 0 22Mar22 ?? 0:28.11 /Library/vnc/vncserver -service 20 | 501 60512 1 0 10:10AM ?? 0:00.08 /Library/vnc/vncagent service 21 | 501 60518 60512 0 10:10AM ?? 0:00.50 /Library/vnc/VNC Server.app/Contents/MacOS/vncserverui service 11 22 | ``` 23 | 24 | 我们先kill "vncserver -service"这个服务, 然后依次kill下面两个, 等待ta自动重新启动就可以了. 25 | 26 | ``` 27 | sudo kill 355 28 | ``` 29 | -------------------------------------------------------------------------------- /系统/Mac/MacOS-xattr移除附加属性.md: -------------------------------------------------------------------------------- 1 | # MacOS-xattr移除附加属性 2 | 3 | xattr -c 文件名称 4 | 5 | ``` 6 | $ ll 7 | drwxrwxr-x@ 3 general staff 96 8 6 05:30 Appium.app 8 | $ xattr -c ./Appium.app 9 | $ ll 10 | drwxrwxr-x 3 general staff 96 8 6 05:30 Appium.app 11 | ``` 12 | 13 | > 表示附加属性的`@`符号已经被移除. 14 | 15 | 不过这只能针对单个文件, 如果目标是一个目录, 且需要将目录下所有子文件都移除附加属性, 需要使用`-r`递归选项. 16 | 17 | ``` 18 | xattr -rc ./Appium.app 19 | ``` 20 | -------------------------------------------------------------------------------- /系统/Mac/MacOS关闭动画效果[调度中心].md: -------------------------------------------------------------------------------- 1 | # MacOS关闭动画效果[调度中心] 2 | 3 | 参考文章 4 | 5 | 1. [关闭令人眩晕的Mac过渡动画](https://zhuanlan.zhihu.com/p/147335633) 6 | - 四指上滑打开调度中心 7 | 8 | ## 调度中心 9 | 10 | 默认打开调度中心时, 是有缩放过程动画的, 关闭后直接渐变展示, 没有中间过程. 11 | 12 | 系统偏好设置 -> 辅助功能 -> 显示 -> 减弱动态效果 13 | 14 | -------------------------------------------------------------------------------- /系统/Mac/Mac下VMware关闭DHCP.md: -------------------------------------------------------------------------------- 1 | # Mac下VMware关闭DHCP 2 | 3 | 参考文章 4 | 5 | 1. [Mac VMware fusion 专用网络关闭DHCP](https://blog.csdn.net/miiser/article/details/44419759) 6 | 7 | `/Library/Preferences/VMware\ Fusion/networking`文件中存储了vmware提供的虚拟网络配置, 默认包括`vnet1`, `vnet8`两个(前者应该是`host-only`, 后者则是`NAT`). 8 | 9 | ```log 10 | VERSION=1,0 11 | answer VNET_1_DHCP yes 12 | answer VNET_1_DHCP_CFG_HASH B4B7EF1463ADB73FAF55D8E47623A74DC52336B3 13 | answer VNET_1_HOSTONLY_NETMASK 255.255.255.0 14 | answer VNET_1_HOSTONLY_SUBNET 192.168.224.0 15 | answer VNET_1_VIRTUAL_ADAPTER yes 16 | answer VNET_8_DHCP yes 17 | answer VNET_8_DHCP_CFG_HASH EB8A7BF799ABB2FD9AF330952C619B1EFBD5B383 18 | answer VNET_8_HOSTONLY_NETMASK 255.255.255.0 19 | answer VNET_8_HOSTONLY_SUBNET 172.16.91.0 20 | answer VNET_8_NAT yes 21 | answer VNET_8_VIRTUAL_ADAPTER yes 22 | ``` 23 | 24 | 修改`VNET_8_DHCP`为`no`, 然后重启vmware即可. 25 | -------------------------------------------------------------------------------- /系统/Mac/Mac下Wireshark无法监听网卡设备(权限不足).md: -------------------------------------------------------------------------------- 1 | # Mac下Wireshark无法监听网卡设备(权限不足) 2 | 3 | 参考文章 4 | 5 | 1. [Wireshark 抓包遇到 you don’t have permission to capture on that device mac 错误的解决方案](https://www.cnblogs.com/Mr-zyh/p/7684727.html) 6 | 2. [Wireshark for mac 权限](https://www.jianshu.com/p/73652a2375e5) 7 | 8 | ![](https://gitee.com/generals-space/gitimg/raw/master/624afb2e1f7a8995b854e9357e6c3895.jpg) 9 | 10 | > `en0`是我电脑上的wifi网卡. 11 | 12 | ```console 13 | $ ll /dev/bpf* 14 | crw------- 1 root wheel 23, 0 1 28 22:09 /dev/bpf0 15 | crw------- 1 root wheel 23, 1 1 28 22:09 /dev/bpf1 16 | crw------- 1 root wheel 23, 2 1 30 00:23 /dev/bpf2 17 | crw------- 1 root wheel 23, 3 1 30 00:23 /dev/bpf3 18 | crw------- 1 root wheel 23, 4 1 28 22:40 /dev/bpf4 19 | ``` 20 | 21 | 解决方法有两种, 要么把`bpf*`的权限修改为`755`, 要么把ta们的属主改为当前的登录用户, 如`general`. 22 | 23 | 然后重启wireshark. 24 | -------------------------------------------------------------------------------- /系统/Mac/Mac下netstat无法显示pid [lsof netstat].md: -------------------------------------------------------------------------------- 1 | # Mac下netstat无法显示pid 2 | 3 | 参考文章 4 | 5 | 1. [mac下netstat](https://blog.csdn.net/pandafxp/article/details/53748031) 6 | 7 | 与linux不同, mac下的`netstat`中`-p`选项表示`protocol`, 不表示`pid`, 没有办法查看监听着某个端口的进程是哪一个. 8 | 9 | 参考文章1中说可以用`losf`命令, 貌似是mac自带的. 10 | 11 | ``` 12 | lsof -nP -iTCP:端口号 -sTCP:LISTEN 13 | ``` 14 | 15 | - `-n`: 不显示主机名 16 | - `-P`: 不显示端口的英文名称比如80是http 17 | - `-i <条件>`: 列出符合条件的进程. (4、6、协议、:端口、 @ip) 18 | 19 | ```bash 20 | ## @function: netstat -nlp | grep 端口号 21 | ## $1: 端口号 22 | function netstatL 23 | { 24 | lsof -nP -iTCP:$1 -sTCP:LISTEN 25 | } 26 | ## @function: netstat -nap | grep 端口号 27 | ## $1: 端口号 28 | function netstatA 29 | { 30 | lsof -nP -iTCP:$1 31 | } 32 | ## @function: netstat -nap | grep PID 33 | ## $1: 目标进程pid 34 | function netstatP 35 | { 36 | lsof -nP -iTCP -a -p $1 37 | } 38 | ``` 39 | -------------------------------------------------------------------------------- /系统/Mac/Mac修改默认播放器.md: -------------------------------------------------------------------------------- 1 | # Mac修改默认播放器 2 | 3 | 参考文章 4 | 5 | 1. [Mac怎么更改系统默认的播放器?](https://www.jb51.net/os/MAC/505889.html) 6 | 7 | 简单点说就是, **选中目标文件** -> **`command + i`打开文件简介(右键貌似看不到这个选项)** -> 找到**打开方式**这一项 -> 选择合适的播放器 -> 勾选**全部更改** -> 会弹出一个对话框让你确认, 确认完成之后就可以了. 8 | 9 | ![](https://gitee.com/generals-space/gitimg/raw/master/f86013240ad172ab30ddcf8c560b16df.png) 10 | 11 | > 有一些直接使用 ~~右键-打开方式-其它~~ 这个方法只能暂时更改打开程序, 并不能更改默认的程序. -------------------------------------------------------------------------------- /系统/Mac/Mac关闭开机声音.md: -------------------------------------------------------------------------------- 1 | # Mac关闭开机声音 2 | 3 | 参考文章 4 | 5 | 1. [如何消除苹果Mac电脑开机声音](https://www.jianshu.com/p/14a29719dcda) 6 | 7 | 好像没用. 8 | 9 | `sound_off.sh` 10 | 11 | ```bash 12 | #!/bin/bash 13 | osascript -e 'set volume output muted 1' 14 | ``` 15 | 16 | `sound_on.sh` 17 | 18 | ```bash 19 | #!/bin/bash 20 | osascript -e 'set volume output muted 0' 21 | ``` 22 | 23 | 把`sound_off.sh`和`sound_on.sh`这两个脚本放在`/usr/local/bin/`和`/Library/Scripts/`都不行... 24 | 25 | ``` 26 | sudo defaults write com.apple.loginwindow LogoutHook /Library/Scripts/sound_off.sh 27 | sudo defaults write com.apple.loginwindow LoginHook /Library/Scripts/sound_on.sh 28 | ``` 29 | -------------------------------------------------------------------------------- /系统/Mac/Mac单用户模式.md: -------------------------------------------------------------------------------- 1 | # Mac单用户模式 2 | 3 | 参考文章 4 | 5 | 1. [Mac官方文档 - 以单用户模式或详细模式启动 Mac](https://support.apple.com/zh-cn/HT201573) 6 | 7 | 同事把`/etc/sudoers`文件的权限改成了777, 然后再也无法使用`sudo`命令了, 也没有办法改回来. 按照参考文章1中的步骤, 进入单用户模式把权限改回来再重启就可以了. -------------------------------------------------------------------------------- /系统/Mac/Mac命令行启动 RealVNC server[远程连接 realvnc vnc].md: -------------------------------------------------------------------------------- 1 | # MacOS通过命令行启动 RealVNC server 2 | 3 | 参考文章 4 | 5 | 1. [Mac OS系统上用命令行方式启动VNC Server](https://blog.csdn.net/jollypigclub/article/details/48582203) 6 | 7 | Mac OS X 上打开VNC Server服务(不带vnc密码): 8 | 9 | ``` 10 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -off -restart -agent -privs -all -allowAccessFor -allUsers 11 | ``` 12 | 13 | Mac OS X 上打开VNC Server服务(带vnc密码, 替换myVncPassword为自己的密码): 14 | 15 | ``` 16 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -off -restart -agent -privs -all -allowAccessFor -allUsers -clientopts -setvncpw -vncpw myVncPassword 17 | ``` 18 | 19 | > 这里说的带不带 vnc 密码, 应该是独立于系统密码之外的 vnc 的密码. 20 | 21 | -------------------------------------------------------------------------------- /系统/Mac/Mac命令行操作vmware虚拟机.md: -------------------------------------------------------------------------------- 1 | # Mac命令行操作vmware虚拟机 2 | 3 | 参考文章 4 | 5 | 1. [VMware命令行打开虚拟机(加密密码)及相关文档](https://blog.csdn.net/weixin_40277264/article/details/107712827) 6 | 2. [vmrun命令行的使用(VMWare虚拟机)](https://blog.csdn.net/weixin_40277264/article/details/107712827) 7 | 8 | 启动虚拟机 9 | 10 | ``` 11 | vmrun start ./Virtual\ Machines.localized/CentOS\ 7\ 64\ 位.vmwarevm 12 | ``` 13 | 14 | 查看正在运行的虚拟机 15 | 16 | ```console 17 | $ vmrun list 18 | Total running VMs: 2 19 | /Users/general/Virtual Machines.localized/CentOS 7 64 位.vmwarevm/CentOS 7 64 位.vmx 20 | /Users/general/Virtual Machines.localized/kw01/kw01.vmx 21 | ``` 22 | 23 | # 冷重启虚拟机 | 热重启虚拟机 24 | 25 | ``` 26 | vmrun reset "/Users/general/Virtual Machines.localized/kw01/kw01.vmx" hard | soft 27 | ``` 28 | 29 | > 建议使用`soft`. 30 | 31 | -------------------------------------------------------------------------------- /系统/Mac/Mac开启ssh服务.md: -------------------------------------------------------------------------------- 1 | # Mac开启ssh服务 2 | 3 | 参考文章 4 | 5 | 1. [一条命令使Mac开启ssh服务](https://baijiahao.baidu.com/s?id=1600436641208190448&wfr=spider&for=pc) 6 | 7 | Mac本身安装了ssh服务,但是默认情况下不会开机自启,因此当我们需要用到ssh相关的功能时,只需以下一条命令即可。 8 | 9 | 1. 启动sshd服务 10 | 11 | ``` 12 | sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 13 | ``` 14 | 15 | 2. 查看是否启动 16 | 17 | ``` 18 | sudo launchctl list | grep ssh 19 | ``` 20 | 21 | 如果看到下面的输出表示成功启动了: 22 | 23 | ``` 24 | - 0 com.openssh.sshd 25 | ``` 26 | 27 | 3. 停止sshd服务 28 | 29 | ``` 30 | sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist 31 | ``` 32 | -------------------------------------------------------------------------------- /系统/Mac/Mac调整Launchpad(启动台)图标大小.md: -------------------------------------------------------------------------------- 1 | # Mac调整Launchpad(启动台)图标大小 2 | 3 | 参考文章 4 | 5 | 1. [Mac Launchpad(启动台)图标大小调整](https://www.jianshu.com/p/4c3d11eebb6d) 6 | 7 | MacOS: Mojave 10.14.5 (18F132) 8 | 9 | 命令行下执行. 10 | 11 | 1、调整每一列显示图标数量,10表示每一列显示10个,比较不错,可根据个人喜好进行设置。 12 | 13 | ``` 14 | defaults write com.apple.dock springboard-rows -int 10 15 | ``` 16 | 17 | 2、调整多少行显示图标数量,这里我用的是8  18 | 19 | ``` 20 | defaults write com.apple.dock springboard-rows -int 8 21 | ``` 22 | 23 | 3、重置Launchpad 24 | 25 | ``` 26 | defaults write com.apple.dock ResetLaunchPad -bool TRUE 27 | ``` 28 | 29 | 4、重启Dock 30 | 31 | ``` 32 | killall Dock 33 | ``` 34 | 35 | 注意 36 | 37 | 1. 原文中的`killall Dock`好像有不可见的非法字符, 执行时会出现`killall Dock: command not found`的错误. 38 | 2. 这个调整操作貌似会使原本Launchpad的文件夹中的东西都跑出来. 39 | 40 | 41 | -------------------------------------------------------------------------------- /系统/Mac/Mac远程连接Windows[remote desktop m1].md: -------------------------------------------------------------------------------- 1 | # Mac远程连接Windows 2 | 3 | 1. [Mac远程桌面连接](https://zhuanlan.zhihu.com/p/34202380) 4 | - 旧版RDC工具的使用方法及下载地址 5 | 2. [Windows官方文档 - Get started with the macOS client](https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac) 6 | - App Store的RDC已经找到了, 但是这篇官方文档给出了一个Beta版本的下载地址, 感觉挺好用, 界面也不错. 7 | 3. [win10如何开启远程桌面连接?](https://jingyan.baidu.com/article/20095761024d8bcb0721b4b9.html) 8 | - 我的电脑右键 -> 属性 -> 左侧"远程设置" -> 允许远程协助, 允许远程桌面连接 9 | 4. [Microsoft Remote Desktop Beta](https://install.appcenter.ms/orgs/rdmacios-k2vy/apps/microsoft-remote-desktop-for-mac/distribution_groups/all-users-of-microsoft-remote-desktop-for-mac) 10 | - 下载地址, 适配于m1 11 | 12 | Mac版本: 10.14.5 13 | Windows: win10 1903 14 | 15 | ![](https://gitee.com/generals-space/gitimg/raw/master/550e4db3598bee5e4ca28e7626b751de.png) 16 | -------------------------------------------------------------------------------- /系统/Mac/homebrew镜像源.md: -------------------------------------------------------------------------------- 1 | # homebrew镜像源 2 | 3 | 参考文章 4 | 5 | 1. [brew如何使用国内镜像源?](https://www.jianshu.com/p/80cd385fbd0d) 6 | 7 | -------------------------------------------------------------------------------- /系统/Mac/关闭Office的自动更新[Microsoft Update Assistant].md: -------------------------------------------------------------------------------- 1 | # 关闭Office的自动更新[Microsoft Update Assistant] 2 | 3 | 参考文章 4 | 5 | 1. [[问题已处理]-Microsoft Update Assistant引起mac的cpu过高](https://blog.csdn.net/xujiamin0022016/article/details/115211949) 6 | 7 | ``` 8 | sudo rm -rf /Library/Application\ Support/Microsoft/MAU2.0/Microsoft\ AutoUpdate.app 9 | ``` 10 | -------------------------------------------------------------------------------- /系统/ParallelsDesktop/Mac命令行操作parallel虚拟机[pd].md: -------------------------------------------------------------------------------- 1 | # Mac命令行操作parallel虚拟机[pd] 2 | 3 | 查看列表 4 | 5 | ```console 6 | $ prlctl list 7 | UUID STATUS IP_ADDR NAME 8 | {e1746e62-d8ae-4352-a715-f4c3d23d2778} running - Windows 10 9 | ``` 10 | 11 | 停止指定实例 12 | 13 | ```console 14 | $ prlctl stop e1746e62-d8ae-4352-a715-f4c3d23d2778 15 | Stopping the VM... 16 | The VM has been successfully stopped. 17 | 18 | $ prlctl list 19 | UUID STATUS IP_ADDR NAME 20 | ``` 21 | -------------------------------------------------------------------------------- /系统/ParallelsDesktop/Parallels Desktop虚拟机将正常工作但无法连接网络.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Parallels Desktop虚拟机将正常工作但无法连接网络](https://www.gzycdzsw.com/blog/36) 4 | 2. [Parallels Desktop虚拟机将正常工作但无法连接网络](https://zhuanlan.zhihu.com/p/459475822) 5 | 3. [Mac|Parallels Desktop 17 无法连接网络及执行该操作失败的解决方案](https://zhuanlan.zhihu.com/p/509319903) 6 | 7 | MacOS: Big Sur 8 | Parallels Desktop: 16.0.0 (48916) 9 | 10 | 参考文章1, 2, 3说的方法其实都一样, 需要改2个文件`dispatcher.desktop.xml`和`network.desktop.xml`. 11 | 12 | 在我实际操作时, `network.desktop.xml`中并没有`1`这一行, 需要手动添加一下, 并改为0. 13 | 14 | -------------------------------------------------------------------------------- /系统/VMWare/MacOS VMwareFusion设置vmnet网段的方法[NAT].md: -------------------------------------------------------------------------------- 1 | # MacOS VMwareFusion设置vmnet网段的方法[NAT] 2 | 3 | 参考文章 4 | 5 | 1. [vmware fusion设置vmnet网段的方法](https://www.cnblogs.com/iwantcomputer/archive/2013/04/19/8489821.html) 6 | 7 | ``` 8 | sudo vim /Library/Preferences/VMware\ Fusion/networking 9 | ``` 10 | 11 | 更新网段 12 | 13 | ```ini 14 | VERSION=1,0 15 | answer VNET_1_DHCP yes 16 | answer VNET_1_DHCP_CFG_HASH BA5B761F774CC031718E05D8A7F5446CF7033192 17 | answer VNET_1_HOSTONLY_NETMASK 255.255.255.0 18 | answer VNET_1_HOSTONLY_SUBNET 192.168.224.0 19 | answer VNET_1_VIRTUAL_ADAPTER yes 20 | answer VNET_8_DHCP yes 21 | answer VNET_8_DHCP_CFG_HASH F7E917777F3D55D65F732985872CF8D5F1B08AD4 22 | answer VNET_8_HOSTONLY_NETMASK 255.255.255.0 23 | ## 只要更改这一行就可以了 24 | answer VNET_8_HOSTONLY_SUBNET 172.16.91.0 25 | answer VNET_8_NAT yes 26 | answer VNET_8_VIRTUAL_ADAPTER yes 27 | add_bridge_mapping en0 2 28 | ``` 29 | 30 | 注意: 不只需要重启虚拟机, 而且还要重启 vmware fusion 软件才能生效. 31 | -------------------------------------------------------------------------------- /系统/VMWare/VMWare为虚拟机收缩磁盘(Mac宿主机Win10虚拟机).md: -------------------------------------------------------------------------------- 1 | # VMWare为虚拟机收缩磁盘(Mac宿主机Win10虚拟机) 2 | 3 | 参考文章 4 | 5 | 1. [关于VMware虚拟机磁盘收缩的几种方法](https://www.cnblogs.com/5201351/p/4290401.html) 6 | 7 | 宿主机: MacOS 10.14.5(Mojave) 8 | VMWare Fusion: 专业版 11.5.0 (14634996) 9 | 虚拟机: Win10 1909 10 | 11 | 方法一实验同样有效. 12 | 13 | 原来虚拟机实际占用20G左右, 但是在宿主机上查看已经使用了近45G. 14 | 15 | ![](https://gitee.com/generals-space/gitimg/raw/master/D6B05AD6794CFDF88E83714E2D8A9A58.jpg) 16 | 17 | 按照参考文章1中所说, 使用方法一. 18 | 19 | ![](https://gitee.com/generals-space/gitimg/raw/master/13E818C5FB075C196F16B56A2004F273.jpg) 20 | 21 | Windows的vmware tools压缩工具被安装在`C:\Program Files\VMware Tools`目录下, 可执行文件名为"VMwareToolboxCmd.exe". 22 | 23 | 当流程走完后, 再查看. 24 | 25 | ![](https://gitee.com/generals-space/gitimg/raw/master/D6B05AD6794CFDF88E83714E2D8A9A58.jpg) 26 | 27 | 此时该虚拟机在宿主机上就只占用16G了. 28 | 29 | -------------------------------------------------------------------------------- /系统/VMWare/VMWare为虚拟机收缩磁盘-关于VMware虚拟机磁盘收缩的几种方法(转).md: -------------------------------------------------------------------------------- 1 | # VMWare为虚拟机收缩磁盘 2 | 3 | 原文链接: [关于VMware虚拟机磁盘收缩的几种方法](https://www.cnblogs.com/5201351/p/4290401.html) 4 | 5 | -------------------------------------------------------------------------------- /系统/VMWare/VMWare为虚拟机新增磁盘.md: -------------------------------------------------------------------------------- 1 | # VMWare为虚拟机新增磁盘 2 | 3 | 随着在虚拟机中存储的东西的逐渐的增加,虚拟机的硬盘也逐渐告急,可能需要拓展一块新的虚拟磁盘; 或者有些软件需要另外挂载一块磁盘用作共享盘。以下便是在VMware 中添加新的虚拟磁盘的方法. 4 | 5 | 新增磁盘需要重启系统, 所以最好在虚拟机关机的情况下进行. 6 | 7 | 1. 选中目标虚拟机, 右键 -> “setting” -> 左侧"hardware"标签页,点击下方的`Add`按钮; 8 | 2. 选中左侧`Hard Disk`, 点击`Next >`; 9 | 3. 根据提示,创建一个虚拟的磁盘(`Create a new virtual disk`),并点击`Next >`; 10 | 4. 按照默认的,选择SCSI格式的磁盘即可,点击`Next >`; 11 | 5. 指定磁盘容量, 选择虚拟磁盘格式(单文件存储还是多文件存储), `Next >`; 12 | 6. 点击完成; 13 | 14 | 通过VMware新增的磁盘默认没有格式化并分区的, 需要在启动系统后手动挂载至系统. 15 | -------------------------------------------------------------------------------- /系统/VMWare/VMWare放行vlan数据包.md: -------------------------------------------------------------------------------- 1 | # VMWare放行vlan数据包 2 | 3 | 参考文章 4 | 5 | 1. [VMware Workstation网络修改vlan id值](https://www.cnblogs.com/one99/p/9612850.html) 6 | 7 | -------------------------------------------------------------------------------- /系统/VMWare/VMWare网络设置.md: -------------------------------------------------------------------------------- 1 | # VMWare网络设置 2 | 3 | 使用`菜单->编辑->虚拟网络编辑器`对VMnet(x)进行配置后最好重启一个VMware软件而不是单独重启虚拟机, 否则会出现网络配置不生效, 生效了也无法正常进行网络连接的情况(尤其是IP, 路由, 防火墙都正常的时候, 就是无法访问外部网络). 4 | -------------------------------------------------------------------------------- /系统/VMWare/VMWare设置共享目录[hgfs vmhgfs-fuse].md: -------------------------------------------------------------------------------- 1 | # VMWare设置共享目录 2 | 3 | 参考文章 4 | 5 | 1. [解决 VMware 虚拟机共享文件 但是找不到共享文件夹](https://blog.csdn.net/Neneolia/article/details/119567372) 6 | - windows宿主机, linux虚拟机 7 | 8 | ## 1. Linux访问windows宿主机 9 | 10 | VMware软件中开启共享目录后, 无需重启直接就可以在linux虚拟机的`/mnt/hgfs`目录下看到共享目录. 11 | 12 | 如果没有, 则需要重新安装`vmware-tools`, 完成后也将立即看到结果. 13 | 14 | 要注意的是, VMware挂载的`vmware-tools`是在`/dev/cdrom`下, 但没有办法直接进入, 需要首先将其挂载到一个存在的目录下. 15 | 16 | **注意: 不能挂载到`/mnt`目录下, 否则安装完成后光驱弹出操作会阻止hgfs目录的创建** 17 | 18 | ``` 19 | mount /dev/cdrom /opt/cdrom 20 | ``` 21 | 22 | 这个目录是只读的, 将安装包拷贝到本地目录后解除挂载 23 | 24 | ``` 25 | umount /opt/cdrom 26 | ``` 27 | -------------------------------------------------------------------------------- /系统/VMWare/VMware克隆节点后网卡混乱导致无法上网的解决过程.md: -------------------------------------------------------------------------------- 1 | : [note-devops](https://gitee.com/generals-space/note-devops) {36911564-BF1D-4854-8A91-7E117C4F8509} 2 | -------------------------------------------------------------------------------- /系统/VMWare/VMware安装android安卓模拟器.md: -------------------------------------------------------------------------------- 1 | # VMware安装android安卓模拟器 2 | 3 | 参考文章 4 | 5 | 1. [vmware安装安卓](https://zhuanlan.zhihu.com/p/87633763) 6 | 2. [VMware虚拟机安装教程](http://bbs.phoenixstudio.org/cn/read.php?tid=7813) 7 | - 凤凰OS官方安装文档(安装文档在一个pdf里, 游客不允许下载, 可见参考文章3) 8 | 3. [VMware 12安装凤凰os](https://jingyan.baidu.com/article/20095761dce379cb0721b41b.html) 9 | - 我最初是按照这篇文档安装凤凰OS的. 10 | 11 | 只这一篇就可以了. 12 | 13 | MacOS: Mojave 10.14.5 (18F132) 14 | VMware Fusion: 15.1 15 | 16 | 唯一的问题是启动时进入虚拟机时进入引导到总是直接进入文本模式, 需要输入reboot命令, 在下一次引导界面输入两次`e`, 然后再输入` nomodeset`(有空格), 回车回到内核选项界面, 然后直接按`b`键, 即可进入图形界面. 17 | 18 | 另外一点就是模拟器的网络问题, wlan中显示连接了`virtnet`, 但总是说已连接入网络但无法上网, 而且顶栏总wlan图标显示红叉❌. 但实际上是可以上的, 想办法跳过连接网络的步骤, 回到桌面, 打开chrome是可以访问百度的. 19 | 20 | ------ 21 | 22 | 但基本就是个废物, 根本没办法安装国内的软件. 23 | 24 | 凤凰OS不错, 可以安装闲鱼, 拼多多等, 安装步骤与Android x86的步骤差不多. 25 | -------------------------------------------------------------------------------- /系统/VMWare/VMware桥接模式bridge配置静态IP.md: -------------------------------------------------------------------------------- 1 | # VMware桥接模式bridge配置静态IP 2 | 3 | 参考文章 4 | 5 | 1. [VMware桥接网络模式配置静态IP详细步骤](https://blog.csdn.net/ganpuzhong42/article/details/77775145) 6 | 7 | 宿主机: win10 8 | 宿主机网络: wifi 9 | VMware版本: 15 10 | 虚拟机系统: CentOS 8 11 | 12 | 本来我只主要设置了如下三个字段 13 | 14 | ``` 15 | BOOTPROTO=static 16 | IPADDR=192.168.0.101 17 | NETMASK=255.255.255.0 18 | ``` 19 | 20 | 但是重启网络服务后发现只能ping通内网的地址. 21 | 22 | 按照参考文章1, 我在宿主机找到无线网卡对应的网关, 再设置`GATEWAY`字段再重启网络服务, 就可以了. 23 | -------------------------------------------------------------------------------- /系统/VMWare/VMware连接到远程虚拟机.md: -------------------------------------------------------------------------------- 1 | # VMware连接到远程虚拟机 2 | 3 | 参考文章 4 | 5 | 1. [连接到远程服务器](https://docs.vmware.com/cn/VMware-Workstation-Pro/12.0/com.vmware.ws.using.doc/GUID-1C25DD11-C117-4BA0-B3A2-FA76AF1AC8EB.html) 6 | 7 | 连接到远程虚拟机需要填写3个字段: host, username, password. 8 | 9 | 这3个都是对于目标操作系统来说的, host地址中端口默认为443, 如果在服务端的VMware Work Station设置了其他的端口, 需要在host字段中写明. 10 | 11 | username和password则是系统登录的信息. 12 | -------------------------------------------------------------------------------- /系统/VMWare/问题处理/XAMPP和VMware Workstation占用443端口冲突.md: -------------------------------------------------------------------------------- 1 | # XAMPP和VMware Workstation占用443端口冲突 2 | 3 | 参考文章 4 | 5 | 1. [XAMPP和VMware Workstation占用443端口冲突的解决办法](http://www.weste.net/2014/10-28/99655.html) 6 | 7 | 今天安装了一个`VMware Workstation`,发现`XAMPP`的`Apache`就启动不了. 看了一下错误日志,似乎是VMware Workstation占用了443端口导致冲突引起的. 查看了一下,原来`VMware Workstation`有个共享虚拟机的服务,占用了443端口. 8 | 9 | 对于单机安装虚拟机来说,这个功能没有用处,禁用掉就可以了. 操作步骤如下: 10 | 11 | 1. 打开VMware Workstation,点击菜单中的"编辑->首选项"; 12 | 2. 找到左侧功能列表中的"共享虚拟机",选择后,在右侧界面中点击"更改设置"; 13 | 3. 这个时候,本来是disabled的"禁用共享"按钮就被激活了,点击"禁用共享"按钮,就可以将这个功能禁用了; 14 | 4. 如果还想使用此功能,可以将443端口修改成446或者其他端口都可以. 而且不需要关闭正在运行的虚拟机; 15 | -------------------------------------------------------------------------------- /系统/VMWare/问题处理/启动虚拟机时显示无法打开内核设备.md: -------------------------------------------------------------------------------- 1 | # 启动虚拟机时显示无法打开内核设备 2 | 3 | 问题描述: 4 | 5 | 启动虚拟机时报如下错误: 6 | 7 | ``` 8 | 无法打开内核设备"\\.\Global\vmx86": 系统找不到指定的文件. 是否在安装 VMware Workstation 后重新引导? 9 | 10 | 未能初始化监视器设备. 11 | ``` 12 | 13 | 原因分析: 14 | 15 | VMware相关服务未启动, 找找看全部打开就行了. 16 | -------------------------------------------------------------------------------- /系统/VMWare/问题处理/启动虚拟机显示 锁定文件失败, 打不开磁盘或快照所依赖的磁盘.md: -------------------------------------------------------------------------------- 1 | # 启动虚拟机显示 锁定文件失败, 打不开磁盘或快照所依赖的磁盘 2 | 3 | 参考文章 4 | 5 | 1. [VMWare虚拟机提示:“锁定文件失败,打不开磁盘或快照所依赖的磁盘”的解决方法](https://www.ssdax.com/2014.html) 6 | 7 | 问题描述: 8 | 9 | 宿主机系统蓝屏或由于其他问题导致vmware没有正常退出的, 有一定几率会导致下次开启时无法启动,会提示:"锁定文件失败,打不开磁盘或它所依赖的某个快照磁盘",这是因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果突然系统崩溃了,虚拟机就来不急把已经锁定的文件解锁,所以你在启动的时候,就会提示无法锁定文件. 10 | 11 | 解决方法: 12 | 13 | 打开存放虚拟机文件的目录, 将虚拟机安装目录下的所有`.lck`文件直接删除,再次启动就能正常运行了。 14 | -------------------------------------------------------------------------------- /系统/VMWare/问题处理/虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本.md: -------------------------------------------------------------------------------- 1 | # 虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本 2 | 3 | 参考文章 4 | 5 | 1. [无法更改硬件兼容性时解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”的方法](https://blog.csdn.net/Vincentisnothere/article/details/124876092) 6 | 7 | -------------------------------------------------------------------------------- /系统/VirtualBox/VirtualBox磁盘扩容.md: -------------------------------------------------------------------------------- 1 | # VirtualBox磁盘扩容 2 | 3 | 参考文章 4 | 5 | 1. [VirtualBox上Centos7磁盘扩容](https://blog.csdn.net/haeydy/article/details/89447689) 6 | 7 | virtualbox 固定大小磁盘可以先复制一份为动态分配, 然后更换磁盘, 再扩容. 8 | 9 | 在 virtualbox GUI 界面上扩容后, centos 进入系统会发现`df -h`并未更新, 但是`fdisk -l`可以看到, 需要手动执行命令进行 lvm 逻辑卷操作, 见参考文章1. 10 | -------------------------------------------------------------------------------- /系统/Win/Win11关闭自动更新.md: -------------------------------------------------------------------------------- 1 | # Win10关闭自动更新 2 | 3 | 参考文章 4 | 5 | 1. [唯一无副作用禁用Win10/11更新方法,一键暂停1000周](https://zhuanlan.zhihu.com/p/642914883) 6 | - 有意思的话题 7 | -------------------------------------------------------------------------------- /系统/Win/Windows-realvnc远程连接黑屏.md: -------------------------------------------------------------------------------- 1 | # Win10 realvnc黑屏 2 | 3 | 参考文章 4 | 5 | 1. [Display issues when connecting to VNC Server running on Windows 10](https://help.realvnc.com/hc/en-us/articles/360004012211-Display-issues-when-connecting-to-VNC-Server-running-on-Windows-10) 6 | 7 | 操作系统: win10 8 | 9 | 在win10上安装了realvnc server破解版 6.1.1, 然后在MacOS上用vnc viewer连接, 使用了一段时间好好的, 突然有一天连接就显示黑屏了. 10 | 11 | 鼠标指针变成了小方块, 虽然是黑屏, 但还是可以点击, 只是viewer界面上无法显示了. 12 | 13 | 后来在参考文章1中找到了答案, 是因为server找不到monitor设备了(正好之前更新了一下显卡驱动, 可能是那时出的问题). 14 | 15 | 右击任务栏图标 -> Options -> Expert -> CaptureMethod, 修改为1(默认为0), 然后重启server, 再次连接正常. 16 | 17 | 这里的0, 1应该是指笔记本原屏蔽与扩展屏之间的数字的, 不过在"显示"设置中, 是用1和2区分的. 18 | -------------------------------------------------------------------------------- /系统/Win/Windows-ssh免密登录.md: -------------------------------------------------------------------------------- 1 | # Win10-ssh免密登录 2 | 3 | 参考文章 4 | 5 | 1. [在windows中安装OpenSSH,无密码登录,永远不断线](https://www.cnblogs.com/chengchen/p/9610819.html) 6 | - openssh服务端配置文件`C:\ProgramData\ssh\sshd_config`, `ProgramData`为隐藏目录. 7 | 2. [linux通过openssh无密码访问window](https://www.nginx.cn/5170.html) 8 | 9 | 操作系统: win10 10 | 11 | 从 github 下载 opensshd-x64 压缩包后, 启动服务, 可以使用密码登录, 但是不支持密钥登录, 安装目录也找不到 sshd 服务端的配置文件. 12 | 13 | 后来找到参考文章1, ta提到了 openssh 的服务端配置文件在`C:\ProgramData\ssh\sshd_config`, openssh原本不需要安装, 所以这个目录应该是在初次注册为服务时创建的. 14 | 15 | 最初我把这个文件的`PubkeyAuthentication`设置为`yes`, 重启了服务, 但是不管用. 16 | 17 | 后来找到了参考文章2, 原来`sshd_config`最下面还有两行这样的说明 18 | 19 | ``` 20 | Match Group administrators 21 | AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys 22 | ``` 23 | 24 | 看起来像是判断登录请求用户是否为管理员分组, 如果没有就不生效一样. 将其注释掉好了. 25 | 26 | ------ 27 | 28 | sshd服务的重启命令(可能需要管理员权限) 29 | 30 | ``` 31 | net stop sshd 32 | net start sshd 33 | ``` 34 | -------------------------------------------------------------------------------- /系统/Win/WindowsServer虚拟声卡[阿里云].md: -------------------------------------------------------------------------------- 1 | # WindowsServer虚拟声卡 2 | 3 | 参考文章 4 | 5 | 1. [Windows Server挂载NFS共享](https://www.cnblogs.com/w787815/p/7310289.html) 6 | 7 | 工作中用到的, 估计以后也用不到, 不过这里还是记录一下. 8 | 9 | 公司代码要调用一个`exe`程序, 所以租了一台阿里云的`windows server 2012`, 这个`exe`是一个播放器程序, 需要使用声卡进行解码, 但是阿里云上的windows服务器是没有装声卡的. 10 | 11 | 好在找到一个虚拟声卡的软件, 单纯作为软件用作解码貌似也能用. 12 | 13 | 软件名为: `VirtualAudioCable`. 14 | 15 | 默认服务器上的任务栏中音量图标是带叹号不可用的状态, 安装完成就可以使用了. 使用远程桌面连接时, 服务器上的声音还可以传到本地播放出来, 也是蛮神奇的. 16 | 17 | 不过作为一个服务, 没有做到开机启动, 服务器重启后需要手动启动. 右键音量图标, 选择播放设备, 系统会提示你音频服务没有启动, 选择启动就可以了. 18 | 19 | 另外, 在搞windows server开机挂载NFS时看到参考文章1, 在命令行输入了`net use /persistent:yes`, 结果重启后NFS目录没挂载上, 音频服务倒是自启动了...不知道是因为上面手动点击启动音频服务后系统记住了这个操作, 还是`net use`误打误撞生效了, 先这样吧. 20 | 21 | > 实测阿里云windows服务器可用. 22 | -------------------------------------------------------------------------------- /系统/Win/Windows下使用wireshark抓取localhost网络包.md: -------------------------------------------------------------------------------- 1 | # Windows下使用wireshark抓取localhost网络包 2 | 3 | 参考文章 4 | 5 | 1. [wireshark如何抓取本机包](https://www.cnblogs.com/lvdongjie/p/6110183.html) 6 | 7 | -------------------------------------------------------------------------------- /系统/Win/Windows使用技巧-设置目录显示模式.md: -------------------------------------------------------------------------------- 1 | # Windows使用技巧-设置目录显示模式 2 | 3 | 参考文章 4 | 5 | [怎样设定打开win7文件夹默认显示大图标](https://zhidao.baidu.com/question/578991246.html) 6 | 7 | 在一个目录中右键 -> 查看, 可以有许多种显示模式选择, 如: '大图标', '小图标', '列表', '详细信息'等. 单独在当前目录中设置好后不会影响其他目录. 8 | 9 | 但如果我们需要设置全局默认的显示模式时, 这样会很麻烦. 方法是, 首先设置当前目录显示模式为'详细信息', 然后文件管理器工具栏部分 -> 查看 -> 选项 -> '查看'标签页 -> '文件夹视图'部分 -> 点击'应用到文件夹'即可. 这样所有同类型的目录都会默认查看类型为'详细信息'. 10 | 11 | 同类型是指目录为放置的文件的种类设置的显示模式, 一般有'常规', '文档', '图片'等几种. 在某目录中右键 -> 自定义文件夹 -> 自定义标签页 -> 你想要哪种文件夹. 可以选择不同的种类. 12 | 13 | 上面调整'查看'操作的显示结果只会影响同类型的目录, 需要注意. 14 | -------------------------------------------------------------------------------- /系统/Win/Windows允许ping请求.md: -------------------------------------------------------------------------------- 1 | # Windows允许ping请求 2 | 3 | 参考文章 4 | 5 | 1. [解除win10禁ping方法](https://blog.csdn.net/wudinaniya/article/details/80956158) 6 | 7 | Windows Defender -> 高级设置 -> 入站规则 -> 文件和打印机共享(回显请求 ICMPv4-In) 8 | 9 | ...不如关闭防火墙. 10 | -------------------------------------------------------------------------------- /系统/Win/Windows内置远程连接-最大连接数超出的问题(强制下线).md: -------------------------------------------------------------------------------- 1 | # Windows内置远程连接-最大连接数超出的问题 2 | 3 | 参考文章 4 | 5 | 1. [如何远程踢掉远程桌面连接?自己因为超过许可无法连接。](https://zhidao.baidu.com/question/549538466.html) 6 | 7 | ## 问题描述 8 | 9 | 如果远程主机上某普通用户的远程连接意外断开导致连接没有正常中止, 同一个用户再次连接时, 登录消息可能会提示**终端服务器超出了最大允许连接**. 10 | 11 | > 这里的远程登录方式就是使用window自带的远程连接工具. 12 | 13 | ## 解决方法 14 | 15 | cmd下运行`mstsc /admin`, 将会弹出拥有更高权限的远程连接程序框, 在这里连接目标主机, 可以无视最大连接的限制. 16 | 17 | 登录到远程主机后, 我们需要踢掉异常断开而又被远程主机保持的用户连接. 方法是, 打开远程主机的任务管理器(任务栏右键) -> 用户, 上面会列出已经连接到服务器的所有用户, 也包括我们正在连接的用户会话. 在任意一个用户上点右键, 如果'连接'选项是灰色的, 那这个用户连接就是我们当前正在用的, 其它'连接'选项可以点击的用户连接都是其它用户登录的, 如果确认没人使用可以将其注销. 18 | -------------------------------------------------------------------------------- /系统/Win/Windows启用管理员账户Administrator[cmd net user].md: -------------------------------------------------------------------------------- 1 | # Win10 启用管理员账户Administrator 2 | 3 | 操作系统: win10 4 | 5 | 以管理员身份运行 powershell 输入如下命令. 6 | 7 | ```console 8 | $ net user administrator /active:yes 9 | 命令成功完成。 10 | 11 | $ net user administrator 123456 12 | 命令成功完成。 13 | ``` 14 | 15 | 第一条命令执行后, 点击"开始" -> 账户头像, 就会出现`Administrator`的选项, 点击即可切换. 16 | -------------------------------------------------------------------------------- /系统/Win/Windows命令应用-net.md: -------------------------------------------------------------------------------- 1 | # Windows命令应用-net 2 | 3 | `net users`: 查看系统用户 4 | 5 | ``` 6 | PS C:\Users\general> net users 7 | 8 | \\LAPTOP-QSE5G8ED 的用户帐户 9 | 10 | ------------------------------------------------------------------------------- 11 | Administrator DefaultAccount general 12 | Guest 13 | 命令成功完成。 14 | ``` 15 | 16 | `net start|stop 服务名`: 启动|停止服务 -------------------------------------------------------------------------------- /系统/Win/Windows安装OpenSSH.md: -------------------------------------------------------------------------------- 1 | # Window安装OpenSSH 2 | 3 | 参考文章 4 | 5 | 1. [Windows安装OpenSSH服务](https://www.jianshu.com/p/6e5bc39d386e) 6 | 2. [官方文档 Install Win32 OpenSSH](https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH) 7 | 8 | win10教育版的可选功能无法打开(不是"没有可安装的功能", 而是打开就闪退, 从控制面板进的话刷不出可安装的功能), 只能手动安装. 9 | 10 | ![](https://gitee.com/generals-space/gitimg/raw/master/7E4D61A356D3D7A8D039668B11054E5B.png) 11 | 12 | 正好powershell官方提供了openssh的安装方法, 按照教程走就行了, 还挺简单的. 13 | 14 | 从参考文章2中按照步骤下载`OpenSSH`的最新版的build包, 解压放到D盘, 然后进入到这个目录, 执行如下命令即可. 15 | 16 | ```ps1 17 | ## 安装sshd服务 18 | powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 19 | ## 启动sshd服务 20 | net start sshd 21 | ## 设置开机启动 22 | Set-Service sshd -StartupType Automatic 23 | ``` 24 | 25 | ```ps1 26 | ## 卸载 27 | powershell.exe -ExecutionPolicy Bypass -File uninstall-sshd.ps1 28 | ``` 29 | -------------------------------------------------------------------------------- /系统/Win/Windows开启sshd服务.md: -------------------------------------------------------------------------------- 1 | # Windows开启sshd服务 2 | 3 | 参考文章 4 | 5 | 1. [win10 开启ssh server服务 远程登录](https://blog.csdn.net/weixin_43064185/article/details/90080815) 6 | 2. [OpenSSH Key Management](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement) 7 | 3. [Windows 10 v1803 OpenSSH Server Key File Authentication](https://www.reddit.com/r/Windows10/comments/8quejo/windows_10_v1803_openssh_server_key_file/) 8 | 9 | 想着能无密码远程登录win10的, 创建了`~/.ssh/authorized_keys`文件, 结果不行. 10 | 11 | 以为是文件权限问题, 于是找到了参考文章2, 又不行. 12 | 13 | 后来找到了参考文章3, 开启sshd服务的密钥认证机制, 重启服务, 结果还是不行. 14 | 15 | fuck, 放弃了. 16 | 17 | ------ 18 | 19 | 注意在使用scp命令时, windows端的路径分隔符为正斜线`/`. 20 | 21 | ``` 22 | scp gener@192.168.0.8:C:/Users/gener/Downloads/readme.md /root/ 23 | ``` 24 | -------------------------------------------------------------------------------- /系统/Win/Windows挂载NFS及开机自动挂载.md: -------------------------------------------------------------------------------- 1 | # Windows挂载NFS 2 | 3 | 参考文章 4 | 5 | 1. [在windows下挂载nfs文件系统](https://blog.csdn.net/wykkunkun/article/details/79638288) 6 | 7 | 2. [Windows挂载NFS文件系统](https://www.cgtblog.com/wljs/1537.html) 8 | 9 | 首先是在windows主机上启用nfs客户端功能(普通win10桌面版不需要重启即可使用, 而在windows server 2012上需要重启才行). 10 | 11 | 挂载方式为, 在cmd中输入 12 | 13 | ``` 14 | mount \\192.168.1.100\mnt\medianfs Z: 15 | ``` 16 | 17 | 注意IP前的两个反斜线, 之后共享路径的分隔符也是反斜线, 最后一个参数为在本机上的盘符, 必须要有冒号`:`. 这样就可以把`192.168.1.100`上共享的`/mnt/medianfs`目录挂载到本地的`Z`盘中了. 18 | 19 | 挂载的方法参考文章1中讲解的很清楚, 可以看一下. 20 | 21 | ------ 22 | 23 | 关于开机自动挂载, 点击"计算机" -> 点击"映射网络驱动器" -> "输入网络共享文件路径" -> "完成". 24 | 25 | 其中驱动器目录可以自主选择, 另外要挂载的文件夹路径和mount命令中相同(`\\192.168.1.100\mnt\medianfs`), **登录时重新连接**是默认勾选的. -------------------------------------------------------------------------------- /系统/Win/Windows查看已连接的wifi密码.md: -------------------------------------------------------------------------------- 1 | # Windows查看已连接的wifi密码 2 | 3 | 参考文章 4 | 5 | 1. [【Windows10 疑问】Win10如何查看已连接的无线密码?](https://answers.microsoft.com/zh-hans/windows/forum/windows_10-networking/windows10/42a0050e-3947-4333-9cba-4949e4007151) 6 | 7 | 控制面板 -> 网络和Internet -> 网络和共享中心 -> 点击已连接的wifi -> "常规"标签页点"无线属性" -> 弹出的容器中选择"安全"选项卡 -> 网络安全密钥. 8 | 9 | -------------------------------------------------------------------------------- /编程领域/RESTFul总结.md: -------------------------------------------------------------------------------- 1 | # RESTFul总结 2 | 3 | 参考文章 4 | 5 | 1. [RESTful Alternatives to DELETE Request Body](https://stackoverflow.com/questions/14323716/restful-alternatives-to-delete-request-body) 6 | - 使用RESTful 规范思维去设计批量删除接口是不合适的, DELETE请求无法附加请求体. 7 | 8 | 2. [我所认为的RESTful API最佳实践](https://www.scienjus.com/my-restful-api-best-practices/) 9 | 10 | 3. [RESTful GET,如果存在大量参数,是否有必要变通一下?](https://www.zhihu.com/question/36706936) 11 | - 对于复杂search做成post,不见得就违反了Restful。可以理解为,每次search的结果是一个新创建的临时集合。 12 | 13 | 14 | > 无法很好地处理这种问题, 无法很顺理成章地得出一个合理的解决方案, 其根本原因是**大家的应用都不是在玩REST设计, 只是在实现层面上“看着像REST”而已**. 你不是使用资源进行系统建模, 不是以资源的角度来进行设计, 自然遇到问题不会从资源的角度去考虑, 最后和REST需要的资源第一位的观点冲突, 把自己绕死这种伪REST其实很要不得, 要么你就把REST丢掉, 只留下“URL好看点不错”这样的目标, 要么你就玩纯粹基于资源的设计和实现 15 | -------------------------------------------------------------------------------- /编程领域/不合适的术语翻译.md: -------------------------------------------------------------------------------- 1 | cross compile: 交叉编译, 应该叫"跨平台"编译, cross 有跨越的意思 2 | 3 | ci(Continuous Integration): 持续集成, 应该叫"不间断"集成, 指一天内多次频繁的发布操作; 4 | -------------------------------------------------------------------------------- /编程领域/你的系统如何支撑高并发(转).md: -------------------------------------------------------------------------------- 1 | # 你的系统如何支撑高并发(转) 2 | 3 | 原文链接 4 | 5 | [面试最让你手足无措的一个问题:你的系统如何支撑高并发?](https://learnku.com/laravel/t/24359) 6 | - 前端负载均衡 + 中端缓存系统 + 后端分库分表/读写分离 7 | - 引入消息队列: 削峰填谷, 异步写入, 如此引出数据丢失, 失败请求如何处理的问题 8 | -------------------------------------------------------------------------------- /编程领域/关于爬虫程序的智能解析.md: -------------------------------------------------------------------------------- 1 | # 参考文章 2 | 3 | 1. [还在一个个写规则?来了解下爬虫的智能化解析吧!](https://mp.weixin.qq.com/s?__biz=MzIzNzA4NDk3Nw==&mid=2457737156&idx=1&sn=8fbc4160ed47042bb232e5276e2cdee2&chksm=ff44bf9ac833368c19251f6037f891310399edb3d4cfeb9001e54260c05bfe62b7b29bd68fe5&mpshare=1&scene=23&srcid=#rd) -------------------------------------------------------------------------------- /编程领域/分布式与微服务/CAP原则与BASE理论[ACID].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 2. [分布式中几种服务注册与发现组件的原理与比较](https://juejin.im/post/5bb77923f265da0af3348aa3) 4 | - CAP原则, 在一个分布式系统中, CAP不可能同时成立. 5 | - Consistency(一致性) 6 | - Availability(可用性) 7 | - Partition Tolerance(分区容错性) 8 | 3. [分布式系统的BASE理论](https://www.hollischuang.com/archives/672) 9 | - BASE理论: 基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency) 10 | - 数据库事务正确执行的四个基本要素ACID: 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 11 | -------------------------------------------------------------------------------- /编程领域/分布式与微服务/RPC框架选型.md: -------------------------------------------------------------------------------- 1 | # RPC框架选型 2 | 3 | 参考文章 4 | 5 | 1. [gRPC基于Golang和Java的简单实现] 6 | 7 | 1. [Dubbo 实践,演进及未来规划](https://my.oschina.net/u/3959468/blog/3002301) 8 | - dubbo框架的组件元素和工作流程(注册与订阅). 9 | - 以实际案例解释dubbo的不足, 解决方案和演进过程 10 | - 应用级注册与服务级注册的概念 11 | - 各服务中间件的对比和各自的优缺点, 一些概念上的实现(CAP理论, 去中心化, 推送机制, 和存储容量等) 12 | - 集中配置中心概念的必要性和部署方案 13 | 14 | dubbo本质上是RPC框架, 但ta默认集成了zk和redis, 作为服务发现的中间件, 因此也实现了服务发现的功能. 不像gRPC, 只有RPC的功能, 要附加服务发现的功能, 只能部署etcd/consul服务, 并额外使用客户端SDK, 手动完成注册, 发现和健康检查的操作. 15 | -------------------------------------------------------------------------------- /编程领域/分布式与微服务/readme.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [大家都在说的分布式系统到底是什么?](https://juejin.im/post/5af8ea34f265da0b9f40622a) 4 | - 与集中式系统对比, 得出分布式系统的优点 5 | - 分布式系统的特性: 分布性, 透明性, 同一性, 通信性 6 | - 常用的分布式方案: 应用和服务(go-kit), 静态资源(Nginx, CDN), 数据和存储(Postgres, Ceph), 计算(Hadoop) 7 | 2. [构建高性能微服务架构](https://www.infoq.cn/article/building-a-high-performance-micro-service-architecture) 8 | - 从实际场景分析 传统服务 -> 微服务 演化的必要性, 由此也体现了微服务架构的优势: 快速迭代, 方便测试与运维 9 | - 提到Kube身为开源系统, 存在的一些不足. 10 | 3. [踩坑实践:如何消除微服务架构中的系统耦合?](https://mp.weixin.qq.com/s/-yvNs7Az_bDLvyJlCiSc6g) 11 | 4. [微服务架构下的软件测试实践](https://blog.csdn.net/weixin_41978708/article/details/80025231) 12 | 13 | ## 分布式与集群的关系 14 | 15 | - 分布式(distributed): 在多台不同的服务器中部署**不同的服务模块**, 通过远程调用协同工作, 对外提供服务. 16 | - 集群(cluster): 在多台不同的服务器中部署**相同的应用或服务模块**, 构成一个集群, 通过负载均衡设备对外提供服务. 17 | 18 | ## 分布式与微服务的关系 19 | 20 | 可以说**微服务是分布式服务的一种具体实现**, 但并不是唯一实现...? 21 | -------------------------------------------------------------------------------- /编程领域/分布式与微服务/借助中间件实现分布式锁[zk redis etcd].md: -------------------------------------------------------------------------------- 1 | # 借助zk实现分布式锁 2 | 3 | 参考文章 4 | 5 | 1. [ZooKeeper的十二连问,你顶得了嘛?](https://zhuanlan.zhihu.com/p/211357609) 6 | - 关于分布式锁的实现思路, 图例非常清晰 7 | 2. [分布式利器Zookeeper(二):分布式锁原生API操作ZK Watch机制 分布式锁思路](https://cloud.tencent.com/developer/article/1190888) 8 | - 代码层面的细节 9 | 3. [分布式锁实战-偶遇 etcd 后就想抛弃 Redis ?](https://blog.csdn.net/2301_76607156/article/details/129637239) 10 | 11 | -------------------------------------------------------------------------------- /编程领域/分布式与微服务/分布一致性算法Paxos和Raft.md: -------------------------------------------------------------------------------- 1 | # 分布一致性算法Paxos和Raft 2 | 3 | 参考文章 4 | 5 | 1. [【我的区块链之路】- 说一说Paxos和Raft算法](https://blog.csdn.net/qq_25870633/article/details/82705703) 6 | 7 | -------------------------------------------------------------------------------- /编程领域/分布式与微服务/服务发现中间件.md: -------------------------------------------------------------------------------- 1 | # 服务发现中间件 2 | 3 | 参考文章 4 | 5 | 1. [分布式中几种服务注册与发现组件的原理与比较](https://juejin.im/post/5bb77923f265da0af3348aa3) 6 | - CAP原则. Eureka满足AP, Consul和Zookeeper满足CP. 7 | - 从实现语言, CAP原则, 一致性算法, 服务健康检查的角度, 分别介绍了Eureka, Consul和Zk的功能特性 8 | 2. [服务发现框架选型,Consul还是Zookeeper还是etcd](https://www.servercoder.com/2018/03/30/consul-vs-zookeeper-etcd/) 9 | - 市面上常见的服务发现中间件对比表格(主要还是CAP原则的实现), 包含Zookeeper, Etcd, Eureka, NSQ, SkyDNS等 10 | - 详细介绍zk, etcd和consul, etcd看起来弱一点, 不适合直接作为服务发现工具. 11 | 3. [Redis 学习01 : CAP理论 和衍生出来的BASE理论](https://blog.csdn.net/wdw18668109050/article/details/82670128?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task) 12 | - redis, mongo等各种nosql的CA/AP/CP分类. 13 | 14 | 15 | -------------------------------------------------------------------------------- /编程领域/加密与认证机制/身份认证 session VS token.md: -------------------------------------------------------------------------------- 1 | # 身份认证 session VS token 2 | 3 | 参考文章 4 | 5 | 1. [什么是 JWT -- JSON WEB TOKEN](https://www.jianshu.com/p/576dbf44b2ae) 6 | 2. [JSON Web Token 入门教程](http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html) 7 | 8 | 我的认识: 9 | 10 | token相对于session, 是一种用CPU换内存的手段, 不需要在服务端保存session信息了. 11 | 12 | 关于权限, token中的确可以添加权限相关的字段, 访问接口时验证. 但必须要在数据库中保存用户权限, 才能在用户登录时, 签发token时创建其对应权限的字段. 13 | 14 | 至于每个接口如何验证用户请求是否具有访问权限, 还要依赖进一步权限归划. 这一点和使用session是相同的, 而和身份认证无关. 15 | 16 | 但是token虽然有过期时间, 但是服务端貌似没有类似能够强制用户下线的方法? 17 | -------------------------------------------------------------------------------- /编程领域/原码反码补码及进制转换.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [一文搞懂原码、反码、补码](https://www.jianshu.com/p/36ec7a047f29) 4 | - 原码, 反码, 补码的表现形式, 转换规则及使用场景 5 | - 计算机数字运算均是基于补码的 6 | - 计算机只有加法器, 因此使用补码 7 | 8 | 几个问题 9 | 10 | ## 负数的补码是该数的反码加1, 那么为什么要加1? 11 | 12 | 参考文章1中以时钟表盘为例是非常形象的, **计算机里的129即表示-127, 相当于模256为一圈, 顺时针的129则和逆时针127即-127是一样的.** 13 | 14 | 但是需要注意, 虽然计算机8位字节的模是256, 但并不像表盘那样取值为0-359, 而是`-128~127`. 15 | 16 | 所以正如不会有真正的 365 一样, 取代表示是 5. 在计算机中也不会存在 129, 而是 -127. 17 | 18 | ## 各语言中将整数转换为二进制时的表示是哪种码? 19 | 20 | ...我想多了, 格式化输出直接就是原码, 负数就是负的原码. 21 | 22 | ```py 23 | >>> '{:b}'.format(10) 24 | '1010' 25 | >>> '{:b}'.format(-10) 26 | '-1010' 27 | ``` 28 | -------------------------------------------------------------------------------- /编程领域/哪些项目的源代码最值得阅读?(转).md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [哪些项目的源代码最值得阅读?](https://www.zhihu.com/question/19589485/answer/12305131) 4 | 5 | 2017-10-07 6 | 7 | 读代码可能有两种原因,一是对这个东西某处不满意想改,二是想学习其中的设计实现思路,前者动力更直接一些,后者则不好选,因为纯粹泛泛地看跟你实际环境关系不大的代码,其实不太容易学到东西。而且现代软件设计其实也充满了许多妥协和折衷,大家最常用的软件,往往不是代码最干净的,而是做了许多妥协折衷的。 8 | 9 | 比如最明显的有 Linux Kernel,有很多风格不一致的代码 (但这并不减弱它的学习价值);mplayer 的代码是我见过的最丑陋但又非常实用的,在这样的代码基础上为啥能够活跃发展到今天,也很值得研究;vim 代码打满了各种 #ifdef,你看了也会很惊讶为啥一个人能维护如此错综复杂的代码这么多年。 10 | 11 | 我们有句老话,叫做水至清则无鱼,软件设计其实很多时候是在受限的条件下解决问题的本事。 12 | 13 | 从扩展思路的角度来说,一个程序员应该好好读过这样一些代码: 14 | 15 | - 一个操作系统内核 16 | - 一个编译器 17 | - 一个解释器 18 | - 一个数据库 19 | - 一个 Web 服务器 20 | - 一个 Web 浏览器 21 | - 一个编辑器 22 | 23 | 因为这些都是几十年来被频繁地反复实现的代码,无数天才的程序员在这些领域发挥智慧,所以在它们各自领域“state of the art”的代码,可想而知质量是很高的。 24 | -------------------------------------------------------------------------------- /编程领域/常用位运算表达式收集.md: -------------------------------------------------------------------------------- 1 | # 常用位运算表达式收集 2 | 3 | 参考文章 4 | 5 | 1. [JS &、|、^和~(逻辑位运算符)](http://c.biancheng.net/view/5469.html) 6 | 7 | ## 1. 四舍五入求整除 8 | 9 | js 10 | 11 | ```js 12 | let a=18; 13 | a &= ~15; // 16 14 | // 等价于 15 | a = a & ~15 16 | ``` 17 | 18 | 其实应该说是向下取整. 19 | 20 | 取小于等于`a`的, 可以被16整除的最大值. 比如18不能被16整除, 向下找, 17也不可以, 但是16就可以, 于是得到16. 21 | 22 | 其中`~15`, 在js中非运算得到`-16`, 可作为除数16. 类似的, `~7`得到`-8`, 可作为除数8. 23 | -------------------------------------------------------------------------------- /编程领域/并发模型/并发与锁的认识.md: -------------------------------------------------------------------------------- 1 | # 并发与锁的认识 2 | 3 | 传统锁, 又被称为普通锁, 一般以`mutex`的名称出现, 标准名应该叫`互斥锁`, 在linux内核编程中听过又名`自旋锁`. 4 | 5 | 互斥锁不可重入, 在python的`threading`库中有与其对应的`可重入锁`, 就是简单的, 可以多次获取的锁. 6 | 7 | 在golang中, 与`互斥锁`对应的是一种叫作`读写锁`的存在, 该锁可以加多个读锁或者一个写锁, 其经常用于读次数远远多于写次数的场景. 一个`读写锁`对象有两种获取和释放方式(传统的`Lock()`和`RLock()`, 两种获取方式作用不同), 其实`读写锁`的`RLock()`和`RUnlock()`就是`可重入锁`的概念, 只不过比python中的可重入锁多了一种`写锁`的操作, `写锁`的优先级会高一点. 8 | -------------------------------------------------------------------------------- /编程领域/并发模型/悲观锁与乐观锁.md: -------------------------------------------------------------------------------- 1 | # 悲观锁与乐观锁 2 | 3 | 参考文章 4 | 5 | 1. [Kubernetes 请求并发控制与数据一致性(含ResourceVersion、Update、Patch简析)](https://blog.csdn.net/jackxuf/article/details/80084358) 6 | 7 | 悲观锁(PCC): 类似于传统读写锁中的写锁, 写操作前加锁, 另外的线程写操作前必须竞争锁, 成员后才可以操作, 否则就排队等待. 8 | 9 | 乐观锁(OCC): 各事务在操作前无需事先获得锁, 可以直接修改, 只在最后提交的时候比较. 10 | 11 | 相对于悲观锁对锁的提前控制, 乐观锁相信请求之间出现冲突的概率是比较小的, 在读取及更改的过程中都是不加锁的, 只有在最后提交更新时才会检测冲突, 因此在高并发量的系统中占有绝对优势. 12 | 13 | 乐观锁通常通过增加一个资源版本字段, 来判断请求是否冲突. kuber中通过`resourceVersion`字段实现. 14 | 15 | -------------------------------------------------------------------------------- /编程领域/开源许可证选择.md: -------------------------------------------------------------------------------- 1 | # 开源许可证选择(转) 2 | 3 | 原文链接 4 | 5 | [如何选择开源许可证?](http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html) 6 | 7 | 如何为代码选择开源许可证, 这是一个问题. 8 | 9 | 世界上的开源许可证, 大概有上百种. 很少有人搞得清楚它们的区别. 即使在如下最流行的六种license之中做选择, 也很复杂. 10 | 11 | - [GPL](http://www.gnu.org/licenses/gpl.html) 12 | 13 | - [BSD](http://en.wikipedia.org/wiki/BSD_licenses) 14 | 15 | - [MIT](http://en.wikipedia.org/wiki/MIT_License) 16 | 17 | - [Mozilla](http://www.mozilla.org/MPL/) 18 | 19 | - [Apache](http://www.apache.org/licenses/LICENSE-2.0) 20 | 21 | - [LGPL](http://www.gnu.org/copyleft/lesser.html) 22 | 23 | 乌克兰程序员[Paul Bagwell](http://pbagwl.com/post/5078147450/description-of-popular-software-licenses), 画了一张分析图, 说明应该怎么选择. 这是我见过的最简单的讲解, 只用两分钟, 你就能搞清楚这六种许可证之间的最大区别. 24 | 25 | 下面是我制作的中文版, 请点击看大图. 26 | 27 | ![](https://gitee.com/generals-space/gitimg/raw/master/253a7b1819e2af555ed0a7e0f11a0b59.png) -------------------------------------------------------------------------------- /编程领域/版本号约定.md: -------------------------------------------------------------------------------- 1 | [semantic versioning](https://semver.org/) 2 | 3 | Given a version number MAJOR.MINOR.PATCH, increment the: 4 | 5 | 1. MAJOR version when you make incompatible API changes 6 | 2. MINOR version when you add functionality in a backward compatible manner 7 | 3. PATCH version when you make backward compatible bug fixes 8 | 9 | Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. 10 | 11 | -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/jmeter压测.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [使用JMeter做压力测试](https://www.cnblogs.com/zhangchaoyang/articles/2530731.html) 4 | - 下载 -> 启动 -> 添加线程组 -> 自定义 Java Request -> 添加 Listener 进行结果分析 5 | 2. [JMeter做压力测试教程及结果分析](https://blog.csdn.net/weixin_39089928/article/details/87369101) 6 | 3. [How to analyze a JMeter summary report?](https://stackoverflow.com/questions/20143401/how-to-analyze-a-jmeter-summary-report/20148250) 7 | - 注意: average,min,max的单位是毫秒 8 | -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/jmeter插件开发.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/编程领域/编程测试/jmeter/jmeter插件开发.md -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/jmeter计数器生成变量.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化 ](https://www.cnblogs.com/liuyuelinfighting/p/14827074.html) 4 | - 只有从csv中读取数据的方法 5 | 2. [Jmeter参数化(普通参数、动态参数)](https://www.cnblogs.com/jxba/p/9177225.html) 6 | - 随机数(`${__Random(000000,999999)}`) 7 | 3. [Jmeter——参数化的9种方法](https://segmentfault.com/a/1190000017366280) 8 | -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/readme.md: -------------------------------------------------------------------------------- 1 | jmeter: 5.4.1 2 | -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/zk压测实战/javaAPI/readme.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Zookeeper JAVA API的使用](https://www.cnblogs.com/rocky-fang/p/9030438.html) 4 | - 实例代码很多, 很详细 5 | -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/zk压测实战/zkJmeter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | space.generals.java 8 | zkJmeter 9 | 1.0-SNAPSHOT 10 | 11 | 12 | org.apache.zookeeper 13 | zookeeper 14 | 3.4.6 15 | 16 | 17 | 18 | 19 | 8 20 | 8 21 | 22 | 23 | -------------------------------------------------------------------------------- /编程领域/编程测试/jmeter/zk压测实战/zkJmeter/src/main/java/jmeter/ZkWatcherPool.java: -------------------------------------------------------------------------------- 1 | package jmeter; 2 | 3 | public class ZkWatcherPool { 4 | public static int watchTime = 1000*600; 5 | 6 | public static void main(String[] args) { 7 | for(int i = 0; i < 5; i ++){ 8 | final int j = i; 9 | new Thread(){ 10 | public void run(){ 11 | ZkWatcher zkWatcher = new ZkWatcher(); 12 | // 将真正的工作函数传入 13 | zkWatcher.createWatcher(j); 14 | } 15 | }.start(); 16 | } 17 | 18 | try { 19 | System.out.println("threads create completed"); 20 | // 等待所有线程结束 21 | Thread.sleep(watchTime+1000*30); 22 | } catch(InterruptedException e){ 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /编程领域/编程测试/压测工具Jmeter.md: -------------------------------------------------------------------------------- 1 | # 压测工具Jmeter 2 | 3 | 参考文章 4 | 5 | 1. [使用Jmeter进行http接口性能测试](https://www.cnblogs.com/star91/p/5059222.html) 6 | - Jmeter的安装启动及简单的的使用方法, 生成表格及图表报告. 7 | 8 | Jmeter的安装启动可以见参考文章1. 本文只介绍Jmeter常用的参数设置 9 | 10 | ## 线程组 11 | 12 | 线程数: 该线程组有多个个线程数, 每个线程表示一个客户端连接 13 | `Ramp-Up Period(单位: 秒)`: 设置多少秒内启动全部线程, 如果为0, 则并发启动所有线程. 14 | `Loop Count`循环次数: 执行次数. 15 | 16 | 真正的请求总数为: 线程数 * 循环次数, 没有限制时间. 17 | -------------------------------------------------------------------------------- /编程领域/编程测试/压测工具Vegeta.md: -------------------------------------------------------------------------------- 1 | # 压测工具Locust 2 | 3 | 参考文章 4 | 5 | 1. [推荐一款高性能 HTTP 负载测试工具 Vegeta](https://www.hi-linux.com/posts/4650.html) 6 | -------------------------------------------------------------------------------- /编程领域/编程测试/并发指数-tps, rps, qps.md: -------------------------------------------------------------------------------- 1 | # 并发指数-tps, rps, qps 2 | 3 | 参考文章 4 | 5 | 1. [pv、uv、ip,tps、qps、rps术语解释](https://blog.csdn.net/lvqingyao520/article/details/78756959) 6 | 2. [PV、UV、IP、TPS、QPS、RPS、两天、吞吐量、 并发用户数 术语](https://www.cnblogs.com/chenliangcl/p/9681499.html) 7 | 8 | -------------------------------------------------------------------------------- /编程领域/编程测试/引言.md: -------------------------------------------------------------------------------- 1 | 2 | 某些接口是对数据库中的记录进行各种计算(比如分组求和, 计算平均值等), 这种时候测试用例中的值需要先手动计算出来作为对比结果. 3 | -------------------------------------------------------------------------------- /编程领域/编程语言中二进制变量的定义方法.md: -------------------------------------------------------------------------------- 1 | # 编程语言中二进制变量的定义方法 2 | 3 | 参考文章 4 | 5 | 1. [Go中,二进制数字如何表示](https://golangtc.com/t/53c88e00320b525d640000a8) 6 | 7 | 比如,10 的八进制表示为012,十六进制表示为0xA。 10的二进制1010,需要加什么样的前缀? 8 | 9 | 在java中可以通过定义 `0b1010` 表示, 但是在c语言中是没有二进制数字面值的, 二进制只能用数组的形式来表示. 10 | 11 | -------------------------------------------------------------------------------- /编程领域/语言战争.md: -------------------------------------------------------------------------------- 1 | php、python、js这类动态语言, 由于没有编译过程, 所以没有办法对运行时代码进行预测, 有很多bug是在生产环境被发现的. 尤其是变量名`typo`, 未声明的变量引用这些. 对于严谨的线上服务来说这是不可忍受的. 2 | 3 | python的unicode真是让人心碎, 貌似也只有它才会把字符串分成各种编码... 4 | 5 | golang没有异常, 它用来解决异常的方式是, 把出现的错误定义为`error`类型(`errors are values`), 并且当成返回值返回(反正可以有多个返回值). 而且与传统异常一样, 也拥有不同的error类型, 以便于针对不同的错误执行不同的代码. 6 | 7 | 8 | 强类型语言: 接口 + 泛型 9 | 10 | 弱类型语言: 柯里化 + 可变形参 11 | -------------------------------------------------------------------------------- /编程领域/软件版本代号中英文缩写(GA, RC, RELEASE等)的含义.md: -------------------------------------------------------------------------------- 1 | # 软件版本代号中英文缩写(GA, RC, RELEASE等)的含义 2 | 3 | 参考文章 4 | 5 | 1. [软件版本代号中英文缩写(GA/RC/RELEASE等)的含义](https://www.jianshu.com/p/b5c6952937b3) 6 | 7 | - `Alpha`: 是内部测试版, 一般不向外部发布, 会有很多Bug. 一般只有测试人员使用. 8 | - `Beta`: 也是测试版, 这个阶段的版本会一直加入新的功能. 在Alpha版之后推出. 9 | - `RC`: (Release Candidate) 顾名思义, 用在软件上就是候选版本. 系统平台上就是发行候选版本. RC 版不会再加入新的功能了, 主要着重于修复测试中发现的缺陷. 10 | - `GA`: (General Availability) 正式发布的版本, 国外通常用 GA 来标识`release`版本, GA 版本是开发团队认为该版本是稳定版(有的软件可能会标识为`Stable`版本或者`Production`版本, 其意思和 GA 相同), 可以在较为关键的场合使用, 比如生产环境. 11 | -------------------------------------------------------------------------------- /编程领域/进程线程.md: -------------------------------------------------------------------------------- 1 | # 进程线程 2 | 3 | 进程是最小的系统资源分配单位, 线程是最小的 CPU 调度单位 4 | 5 | 线程对象如果拥有锁对象, 在被强杀或异常退出时, 锁资源未被释放可能造成死锁. 6 | 7 | 进程间通信需要借助IPC, 如 socket, 共享内存, 信号量, 管道等方法; 但是线程间通信, 由于是和主线程共享的, 所以只需要锁机制进行同步即可. 8 | 9 | 系统加载程序时,会为每个程序开辟一个单独的,大小为4GB的内存空间,并至少把它分成三个部分:代码段,数据段,堆栈段(栈)。。。这个指的应该是进程。 10 | -------------------------------------------------------------------------------- /编程领域/闭包/readme.md: -------------------------------------------------------------------------------- 1 | 闭包标识 2 | 3 | 1. 函数内定义函数, 且内部函数引用了外部函数的变量; 4 | 2. 外部函数将内部函数作为返回值返回; 5 | 3. 主调函数引用返回的内部函数句柄并执行; 6 | 7 | 在第3点中, 由于返回的内部函数在执行时仍然占据了外部函数中的变量, 导致外部函数无法释放和清理, 就是闭包的根本特点. 8 | 9 | 同样是由于第3点, 如果内部函数在主调函数中执行时间过长, 或者内部函数引用其外部函数的变量过大, 调用过多, 使得外部函数中定义的变量无法释放, 则可能造成内存泄露. 10 | 11 | 这也是闭包是常见的性能问题. 12 | -------------------------------------------------------------------------------- /语言和框架/Java/springboot/SpringBoot Post请求体大小限制.md: -------------------------------------------------------------------------------- 1 | # SpringBoot Post请求体大小限制 2 | 3 | 参考文章 4 | 5 | 1. [Java SpringBoot post请求大小限制](https://blog.csdn.net/t1014336028/article/details/81675621) 6 | 2. [spring boot 设置tomcat post参数限制](https://www.ancii.com/ammbvqm4/) 7 | - `tomcat`的`server.xml`配置, 添加`maxPostSize`字段, 默认`1M`. 8 | 9 | springboot工程编译成jar包, 内置的web容器默认是tomcat, 要修改post请求体的大小限制, 需要在`application.properties`文件中添加`server.tomcat.max-http-post-size=-1`. 10 | 11 | 网上也有说`spring.http.multipart.max-file-size=-1`, 这个应该是上传文件的请求对文件大小的限制, 两者是有区别的. 12 | -------------------------------------------------------------------------------- /语言和框架/Java/工具命令/Java中9种常见的CMS GC问题分析与解决(转).md: -------------------------------------------------------------------------------- 1 | # Java中9种常见的CMS GC问题分析与解决 2 | 3 | 原文链接 4 | 5 | 1. [Java中9种常见的CMS GC问题分析与解决](https://tech.meituan.com/2020/11/12/java-9-cms-gc.html) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/Java/工具命令/readme.md: -------------------------------------------------------------------------------- 1 | [JVM参数使用手册](https://segmentfault.com/a/1190000010603813) 2 | 3 | [总结【性能调优专题】【Jvm性能调优】【JVM调优工具详解】](https://zhuanlan.zhihu.com/p/154172545) 4 | - java调试工具的解释 5 | 6 | [JVM调优总结](https://www.cnblogs.com/houziwty/p/6178032.html) 7 | - `-Xxx`和`-XX`等各参数的解释 8 | 9 | [Java问题诊断和排查工具(查看JVM参数、内存使用情况及分析等) ](https://www.cnblogs.com/z-sm/p/6745375.html) 10 | 11 | 12 | - jps:虚拟机进程状况工具 13 | - jstat:虚拟机统计信息监视工具 14 | - jmap:Java内存印象工具 15 | - jhat:虚拟机堆转储快照分析工具 16 | - jstack:Java堆栈跟踪工具 17 | - jinfo:Java配置信息工具 18 | -------------------------------------------------------------------------------- /语言和框架/Java/工具命令/设置Java VM参数实现在Full GC前后自动生成Dump[HeapDump].md: -------------------------------------------------------------------------------- 1 | # 设置Java VM参数实现在Full GC前后自动生成Dump 2 | 3 | 参考文章 4 | 5 | 1. [设置Java VM参数实现在Full GC前后自动生成Dump](https://blog.csdn.net/jeff_fangji/article/details/43973745) 6 | - jinfo, jconsole, jmx 7 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Gradle/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/语言和框架/Java/工程/Gradle/readme.md -------------------------------------------------------------------------------- /语言和框架/Java/工程/Idea/Idea打包Maven不执行测试Test[skipTests].md: -------------------------------------------------------------------------------- 1 | # Idea打包Maven不执行测试Test 2 | 3 | 参考文章 4 | 5 | 1. [关于idea 中maven打包不加载测试test](https://blog.csdn.net/gty931008/article/details/86071013) 6 | 7 | ``` 8 | <-------------> 0% EXECUTING [5m 1s] 9 | > :compileJava > Resolve files of :compileClasspath > spring-beans-5.2.8.RELEASE.jar > 642 KB/672 KB downloaded 10 | > root project > Resolve files of :classpath > jackson-module-parameter-names-2.11.2.jar 11 | > IDLE 12 | > IDLE 13 | > :compileJava > Resolve files of :compileClasspath > spring-webmvc-5.2.8.RELEASE.jar > 277 KB/934 KB downloaded 14 | > :compileJava > Resolve files of :compileClasspath > tomcat-embed-core-9.0.37.jar > 176 KB/3.23 MB downloaded 15 | > IDLE 16 | ``` 17 | 18 | 19 | ``` 20 | mvn package -DskipTests 21 | ``` 22 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Idea/Idea打包jar包详尽流程[build].md: -------------------------------------------------------------------------------- 1 | # Idea打包jar包详尽流程[build] 2 | 3 | 参考文章 4 | 5 | 1. [IDEA打包jar包详尽流程](https://blog.csdn.net/weixin_42089175/article/details/89113271) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Idea/Idea设置全局Maven失效的问题.md: -------------------------------------------------------------------------------- 1 | # Idea设置全局Maven失效的问题 2 | 3 | 参考文章 4 | 5 | 1. [解决idea设置全局maven失效的问题](https://blog.csdn.net/qq_40644583/article/details/104483891) 6 | 7 | 问题描述 8 | 9 | MacOS 10 | 11 | Idea: 2020.1 12 | 13 | Maven: 3.6.3 14 | 15 | 每次设置全局 Maven 的 setting 和本地仓库后, 重启 Idea 就会恢复成默认值. 16 | 17 | 按照参考文章1中的方法可以解决, 不过在 Mac 下, 相应的配置文件路径为`~/Library/Application Support/JetBrains/IntelliJIdea2020.1/options/project.default.xml` 18 | 19 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Idea/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/语言和框架/Java/工程/Idea/readme.md -------------------------------------------------------------------------------- /语言和框架/Java/工程/Idea/普通Java工程转换成Maven工程(添加pom.xml).md: -------------------------------------------------------------------------------- 1 | # 普通Java工程转换成Maven工程(添加pom.xml) 2 | 3 | 参考文章 4 | 5 | 1. [IntelliJ IDEA普通项目添加pom.xml,转变为Maven项目](https://blog.csdn.net/IT_model/article/details/88815258) 6 | - 有图示 7 | 8 | 左侧工程列表中, 选中工程名, 右键 -> `Add Framework Support` -> 弹出的窗口中找到`Maven`, 勾选并确定. 9 | 10 | 会自动在工程根目录下生成`pom.xml`模板文件. 11 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Maven/Maven package -P命令打包选择指定的配置文件[config spring.profiles.active].md: -------------------------------------------------------------------------------- 1 | # Maven package -P命令打包选择指定的配置文件[config] 2 | 3 | 参考文章 4 | 5 | 1. [maven打包命令—P,指定springboot项目的配置文件](https://blog.csdn.net/qq_19439605/article/details/104838795) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Maven/Maven镜像仓库配置.md: -------------------------------------------------------------------------------- 1 | # Maven镜像仓库配置 2 | 3 | 参考文章 4 | 5 | 1. [Maven 镜像](https://developer.aliyun.com/mirror/maven) 6 | 7 | 阿里云镜像站中给出的配置有点不太一样, 下面是我正在用的, 至于区别, 以后再说吧. 8 | 9 | ```xml 10 | 11 | nexus-aliyun 12 | * 13 | Nexus aliyun 14 | https://maven.aliyun.com/nexus/content/groups/public 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Maven/readme.md: -------------------------------------------------------------------------------- 1 | 仔细想了想, maven/gradle 的作用就类似于 python 中的 pip + setuptools, ta不只能实现依赖管理, 也能创建基本的代码框架, 实现整个工程的构建, 打包与运行. 2 | 3 | pom.xml(Project Object Model) 是 maven 依赖的配置文件, 由于 maven 比单纯的 pip 功能强大, 配置也更复杂, 从某种程度来说, pom.xml 类似于 `requirements.txt` + `setuptools`的`setup.py` + 模块管理中的`__init__.py` + ...的功能. 4 | 5 | 相比于 C/C++ 中的 makefile, maven(pip + setuptools) 指定了工程目录的结构, 是写死的, 依赖包的存储路径也是规定好的; 好处是不需要像 makefile 手工写一大串 build/test 的目标命令. 6 | 7 | 其实要比较的话, 应该和 node 下的编译工具链更相似一点, npm, webpack 等, 不过我对这些也不是太了解... 8 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Spring/Spring Schedule详解.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [SpringBoot + Schedule 实现定时任务](https://www.jianshu.com/p/4d9c9b08111d) 4 | - 少了一步, 在 Service 对象中定义定时任务方法时, 需要该 Service 必须为`Bean`对象, 需要使用`@Component`或是`@Service`等注解修饰. 5 | 2. [关于springboot下的定时任务(Schedule)](https://blog.csdn.net/wz_ling1991/article/details/83930409) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Spring/SpringBoot-PathVariable请求路径出现点号'.'时导致路径参数截断获取不全的解决办法.md: -------------------------------------------------------------------------------- 1 | # SpringBoot-PathVariable请求路径出现点号"."时导致路径参数截断获取不全的解决办法 2 | 3 | 参考文章 4 | 5 | 1. [SpringBoot-PathVariable请求路径出现点号"."时导致路径参数截断获取不全的解决办法](https://blog.csdn.net/lovequanquqn/article/details/105744064) 6 | - 实测有效 7 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Spring/readme.md: -------------------------------------------------------------------------------- 1 | spring frame 是Java开发中的一个库, ta集成了开发工作中所需的大部分组件. 2 | 3 | 一个 spring 工程可以是 maven 工程, 也可以是 gradle 工程, maven/gradle 只是工程结构与依赖管理的方式有所不同而已. ta 们的关系, 很像 golang 中的 govendor, godep 等(用 xxx.toml, 或是 vendor.json 等记录依赖树, 有一个集中存储的本地仓库) 4 | 5 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Spring/spring boot 配置 spring.config.location.md: -------------------------------------------------------------------------------- 1 | # spring boot 配置 spring.config.location 2 | 3 | 参考文章 4 | 5 | 1. [spring boot 配置 spring.config.location](https://blog.csdn.net/yunxing323/article/details/108425999) 6 | 7 | spring.config.location 8 | 9 | spring.config.additional-location 10 | 11 | spring.profiles.active 12 | 13 | -------------------------------------------------------------------------------- /语言和框架/Java/工程/Spring/读取application.properties配置文件中的数据.md: -------------------------------------------------------------------------------- 1 | # 读取application.properties配置文件中的数据 2 | 3 | 参考文章 4 | 5 | 1. [Spring Boot读取properties配置文件中的数据](https://blog.csdn.net/dkbnull/article/details/81953190) 6 | - `@Value`注解读入到类成员 7 | - `environment.getProperty()`方法获取指定字段值. 8 | - `@ConfigurationProperties`绑定指定前缀的所有字段到一个类 9 | -------------------------------------------------------------------------------- /语言和框架/Java/常用操作/Java-Map更新put与replace.md: -------------------------------------------------------------------------------- 1 | # Java-Map更新put与replace 2 | 3 | 参考文章 4 | 5 | 1. [java8中map的新方法--replace](https://blog.csdn.net/top_gun_1/article/details/51065668) -------------------------------------------------------------------------------- /语言和框架/Java/常用操作/Java-String与byte数组互转.md: -------------------------------------------------------------------------------- 1 | # Java-String与byte[]互转 2 | 3 | 参考文章 4 | 5 | 1. [Java中String与byte[]的转换](https://www.cnblogs.com/EasonJim/p/8142705.html) 6 | 7 | ```java 8 | String s = "easonjim"; // String变量 9 | byte b[] = s.getBytes(); // String转换为byte[] 10 | String t = new String(b); // bytep[]转换为String,支持传递编码 11 | ``` 12 | -------------------------------------------------------------------------------- /语言和框架/Java/常用操作/Java-toArray List转数组.md: -------------------------------------------------------------------------------- 1 | # Java-toArray List转数组 2 | 3 | 参考文章 4 | 5 | 1. [Java集合转有类型的数组之toArray(T[] a)](https://www.cnblogs.com/guanghe/p/10062975.html) 6 | 7 | `List` 和 `String[]`不能使用强转, 会报错. 8 | 9 | 现有如下两种转换方法, 假设`list`为`String`类型的列表 10 | 11 | ## 1. 12 | 13 | ```java 14 | String[] array = new String[list.size()]; 15 | list.toArray(array); 16 | ``` 17 | 18 | ## 2. 19 | 20 | ```java 21 | String[] array= list.toArray(new String[list.size()]); 22 | ``` 23 | -------------------------------------------------------------------------------- /语言和框架/Java/常用操作/Java-一个catch捕获多个异常.md: -------------------------------------------------------------------------------- 1 | # Java-一个catch捕获多个异常 2 | 3 | 参考文章 4 | 5 | 1. [同一个catch字句中捕获多个java异常](https://www.cnblogs.com/kiko2014551511/p/13141622.html) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/Java/常用操作/Java长字符串.md: -------------------------------------------------------------------------------- 1 | # Java长字符串 2 | 3 | 参考文章 4 | 5 | 1. [java中有那种长字符串换行的书写方式吗?](https://segmentfault.com/q/1010000020242133) 6 | - 没有解决. 7 | 2. [what if there is multiline string in java ?!](https://blog.zhouzhipeng.com/what-if-there-is-multiline-string-in-java.html) 8 | - 译名: 如果java也有多行字符串该多好?! 9 | 10 | 其实就是golang中的反引号 11 | 12 | ```go 13 | lstr := ` 14 | line 1 15 | line 2 16 | ... 17 | ` 18 | b := 2 19 | 20 | ``` 21 | 22 | python中的三引号 23 | 24 | ```py 25 | lstr = ''' 26 | line 1 27 | line 2 28 | ... 29 | ''' 30 | b = 2 31 | ``` 32 | -------------------------------------------------------------------------------- /语言和框架/Java/常用操作/Java长注释[function param].md: -------------------------------------------------------------------------------- 1 | # Java长注释 2 | 3 | 参考文章 4 | 5 | 1. [Java注释:类、方法和字段注释](http://c.biancheng.net/view/6114.html) 6 | 7 | java的函数块注释要写成如下格式 8 | 9 | ```java 10 | /** 11 | * 函数功能 12 | * @param xxx: 13 | */ 14 | ``` 15 | 16 | 而不能写成 17 | 18 | ```java 19 | /* 20 | 函数功能 21 | */ 22 | ``` 23 | 24 | 后者在 vscode 中, 通过在调用函数的函数名处悬停是不会有代码提示的, 只能使用前者的格式. 25 | -------------------------------------------------------------------------------- /语言和框架/Java/标准库/并发多线程/多线程+CountDownLatch等待结束[wait join].md: -------------------------------------------------------------------------------- 1 | # 多线程+CountDownLatch等待结束[wait join] 2 | 3 | 参考文章 4 | 5 | 1. [多线程处理多次Http请求慢的问题](https://blog.csdn.net/x4789508a/article/details/106805483) 6 | 2. [CountDownLatch实现多线程等待后共同执行](https://zhuanlan.zhihu.com/p/130856233) 7 | 3. [java多线程CountDownLatch](https://www.cnblogs.com/jiading/p/12363051.html) 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/Java/标准库/文件操作/io.File列出目标目录下的文件内容.md: -------------------------------------------------------------------------------- 1 | # io.File列出目标目录下的文件内容 2 | 3 | ```java 4 | import java.io.File; 5 | 6 | public class App 7 | { 8 | public static void main( String[] args ) 9 | { 10 | String targetPath = "/home/pay/Downloads"; 11 | File file = new File(targetPath); 12 | File[] tempList = file.listFiles(); 13 | System.out.println("该目录下对象个数:"+tempList.length); 14 | for(int i = 0; i < tempList.length; i ++){ 15 | if(tempList[i].isFile()){ 16 | System.out.println("文件: " + tempList[i]); 17 | } 18 | if(tempList[i].isDirectory()){ 19 | System.out.println("目录: " + tempList[i]); 20 | } 21 | } 22 | } 23 | } 24 | ``` 25 | -------------------------------------------------------------------------------- /语言和框架/Java/标准库/日期操作/LocalDateTime.md: -------------------------------------------------------------------------------- 1 | # LocalDateTime 2 | 3 | ```java 4 | import java.time.LocalDateTime; 5 | import java.time.ZoneOffset; 6 | ``` 7 | 8 | ```java 9 | LocalDateTime now = LocalDateTime.now(); 10 | System.out.println(now); // 2020-07-23T19:57:18.599 11 | System.out.println(now.toLocalDate()); // 2020-07-23 12 | System.out.println(now.toLocalTime()); // 19:57:18.599 13 | 14 | System.out.println(now.getHour()); // 20 15 | System.out.println(now.getSecond()); // 18 16 | 17 | // 得到时间戳, 单位为秒(js和golang都是精确到毫秒的, java这也太low了) 18 | // ...原来时间戳也是分时区的??? 19 | System.out.println(now.toEpochSecond(ZoneOffset.of("+0"))); // 1595535307 20 | // 这个才更符合我们常用的时间戳, 本地时区. 21 | System.out.println(now.toEpochSecond(ZoneOffset.of("+8"))); // 1595506507 22 | ``` 23 | -------------------------------------------------------------------------------- /语言和框架/Java/语法/Java类成员访问权限.md: -------------------------------------------------------------------------------- 1 | # Java类成员访问权限 2 | 3 | Java有四种访问权限, 其中三种有访问权限修饰符, 分别为private, public和protected, 另外一种不带任何修饰符(有些地方称为friendly).具体解析见Java编程思想6.2节 4 | 5 | 1. private: Java中对访问权限限制最严格的修饰符, 一般称之为"私有". 被其修饰的类, 属性及方法只能被该类的对象访问, 其子类不能访问, 即使是同包内的类也无法访问. 6 | 2. default: 不加任何访问修饰符, 通常称为"默认访问模式". 该模式下, 只允许在同一个包中访问. 7 | 3. protected: 介于private与public之间.被其修饰的类, 属性及方法只能被类本身, 其子类(即使在不同的包中)及该类对象(这一点与C++不同, 实例化的对象也可以访问protected成员, C++不可以)访问. 8 | 4. public: Java中访问限制最宽松的修饰符, 允许跨类, 跨包访问. 9 | 10 | 形象的表示 11 | 12 | | | 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 | 13 | | :-------: | :------: | :------: | :----------: | :------------: | 14 | | private | 是 | | | | 15 | | default | 是 | 是 | | | 16 | | protected | 是 | 是 | 是 | | 17 | | public | 是 | 是 | 是 | 是 | -------------------------------------------------------------------------------- /语言和框架/Java/问题处理/javac编译报错-编码GBK的不可映射字符.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [解决 java “错误:编码GBK 的不可映射字符”](https://blog.csdn.net/l1028386804/article/details/46583279) 4 | 5 | 添加一个选项即可 6 | 7 | ``` 8 | javac -encoding UTF-8 XXX.java 9 | ``` 10 | -------------------------------------------------------------------------------- /语言和框架/go/cgo/01.golang调用标准库C函数[最简示例].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [C? Go? Cgo!](https://go.dev/blog/cgo) 4 | 2. [golang-wiki/cgo.md](https://github.com/zchee/golang-wiki/blob/master/cgo.md) 5 | 3. [cgo快速入门之golang调用C语言](https://zhuanlan.zhihu.com/p/116749102) 6 | 4. [第二章 CGO编程](https://www.cntofu.com/book/73/ch2-cgo/readme.md) 7 | 8 | ## 最简示例 9 | 10 | ```go 11 | package main 12 | 13 | //#include 14 | import "C" 15 | 16 | func main() { 17 | C.puts(C.CString("Hello, World\n")) 18 | } 19 | ``` 20 | 21 | golang+clang 混合编程的格式在于, clang 部分在注释中写明, 然后紧跟`import "C"`, **中间不可以有空行**. 22 | 23 | golang 要 import 其他包, 需要单独写`import()`块. 24 | -------------------------------------------------------------------------------- /语言和框架/go/cgo/02.golang调用自定义C函数.md: -------------------------------------------------------------------------------- 1 | # 02.golang调用自定义C函数 2 | 3 | ```go 4 | package main 5 | 6 | /* 7 | #include 8 | #include 9 | 10 | void myprint(char* s) { 11 | printf("%s\n", s); 12 | } 13 | */ 14 | import "C" 15 | 16 | import ( 17 | "log" 18 | ) 19 | 20 | func main() { 21 | log.Printf("begin") 22 | cs := C.CString("Hello world") 23 | C.myprint(cs) 24 | log.Printf("end") 25 | } 26 | 27 | ``` 28 | 29 | ```log 30 | $ CGO_ENABLED=1 go run main.go 31 | 2023/01/08 05:34:01 begin 32 | Hello world 33 | 2023/01/08 05:34:01 end 34 | ``` 35 | -------------------------------------------------------------------------------- /语言和框架/go/cgo/clang结构体的使用[cgo].md: -------------------------------------------------------------------------------- 1 | [CGO解析C复杂结构体的三种方法](https://blog.csdn.net/guniwi/article/details/109806439) 2 | 3 | -------------------------------------------------------------------------------- /语言和框架/go/cgo/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/语言和框架/go/cgo/readme.md -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod - indirect标记.md: -------------------------------------------------------------------------------- 1 | # go mod - indirect标记 2 | 3 | 参考文章 4 | 5 | 1. [【Go 专家编程】go.mod 文件中的indirect准确含义](https://blog.csdn.net/juzipidemimi/article/details/104441398) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod edit命令-手动编辑go.mod文件.md: -------------------------------------------------------------------------------- 1 | # go mod edit命令-手动编辑go.mod文件 2 | 3 | golang: 1.13.14. 4 | 5 | 有时在go mod 工程目录下执行"go get -v path@version", 并不能真的将该依赖库写入 go.mod 文件(有的时候写入了, 但是vscode一保存, 就又变回来了, 手动修改 go.mod 文件也是这样), 尤其是对一个迭代过多次的 GOPATH 工程, 最容易出现这样的问题, 搞得不知道怎么让工程使用我们指定版本的依赖库... 6 | 7 | 这种情况可以使用"go mod edit"命令, 如下 8 | 9 | ``` 10 | go mod edit -require=k8s.io/client-go@v0.17.2 go.mod 11 | ``` 12 | 13 | 直接写入 go.mod 文件, 不再变回去了. 14 | 15 | 可以写多个. 16 | 17 | ``` 18 | go mod edit -require=k8s.io/api@v0.17.2 -require=k8s.io/apimachinery@v0.17.2 go.mod 19 | ``` 20 | 21 | 22 | ``` 23 | go mod edit -replace=k8s.io/kubernetes@v0.17.2=./vendor/k8s.io/kubernetes 24 | ``` 25 | 26 | > 需要事先创建"./vendor/k8s.io/kubernetes"本地目录. 27 | 28 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod vendor - modules.txt变更本地依赖[tidy].md: -------------------------------------------------------------------------------- 1 | # go mod vendor - modules.txt变更本地依赖[tidy] 2 | 3 | 参考文章 4 | 5 | 1. [How to remove an installed package using go modules](https://stackoverflow.com/questions/57186705/how-to-remove-an-installed-package-using-go-modules) 6 | 7 | ## 问题描述 8 | 9 | 一个 go mod 项目, 使用`go mod vendor`会把所依赖的包移到工程目录的 vendor 子目录中. 10 | 11 | 但是需要删除某个依赖包时, 从 go.mod 文件中删除, 但是再执行`go mod vendor`是不会把对应的依赖从 vendor 子目录中删除的. 12 | 13 | ## 解决方案 14 | 15 | 先执行`go mod tidy`, 再执行`go mod vendor`就可以了. 16 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod 拉取无tag的master最近代码.md: -------------------------------------------------------------------------------- 1 | # go mod 拉取无tag的master最近代码 2 | 3 | ``` 4 | require ( 5 | github.com/generals-space/crd-ipkeeper 6 | ) 7 | ``` 8 | 9 | ``` 10 | $ go mod tidy 11 | go: errors parsing go.mod: 12 | /home/cni-terway/go.mod:9: usage: require module/path v1.2.3 13 | ``` 14 | 15 | 出现这个问题是因为自己的仓库没写版本号, 给仓库加个tag就可以了. 16 | 17 | 但是在实验过程中的仓库不好加版本号, 一直推在master分支上, 此时不好直接在go.mod中写版本号, 需要在项目目录下使用go get命令先下载, 完成后会自动修改go.mod文件 18 | 19 | ``` 20 | $ go get github.com/generals-space/crd-ipkeeper@master 21 | go: finding github.com/generals-space/crd-ipkeeper master 22 | go: downloading github.com/generals-space/crd-ipkeeper v0.0.0-20200321193328-62c4ac27beb2 23 | go: extracting github.com/generals-space/crd-ipkeeper v0.0.0-20200321193328-62c4ac27beb2 24 | ``` 25 | 26 | > 呃, 已经存在go.mod中的`v0.0.0-20200321193328-62c4ac27beb2`记录, 在使用`go get`时好像不会更新, 还是把这种记录删除后再`go get`吧. 27 | 28 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod代理-GOPROXY.md: -------------------------------------------------------------------------------- 1 | # go mod代理-GOPROXY 2 | 3 | 参考文章 4 | 5 | 1. [go mod代理和小技巧](https://www.cnblogs.com/xdao/p/go_mod.html) 6 | 7 | ```bash 8 | export GOPROXY=https://goproxy.io 9 | export GOPROXY=https://mod.gokit.info 10 | export GOPROXY=https://mirrors.aliyun.com/goproxy/ 11 | export GOPROXY=https://goproxy.cn ## (这个有时不行) 12 | export GOPROXY=https://proxy.golang.org 13 | ``` 14 | 15 | ## FAQ 16 | 17 | ### 1. 18 | 19 | ``` 20 | zip: not a valid zip file 21 | ``` 22 | 23 | **问题描述** 24 | 25 | 使用了goproxy代理后, 执行`go mod download`时会出现上述问题. 26 | 27 | **解决方法** 28 | 29 | 代理服务器缓存的zip 错误, 可以临时关闭代理, `export GOPROXY=''` 30 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod问题处理/go mod - import lookup disabled by -mod=readonly.md: -------------------------------------------------------------------------------- 1 | 2 | 参考文章 3 | 4 | 1. [change import for github.com/googleapis/gnostic/OpenAPIv2](https://github.com/kubernetes/client-go/issues/743) 5 | 6 | 我所遇到的问题与参考文章1中所说的相同, `go mod tidy`总会报错说 7 | 8 | ``` 9 | k8s.io/client-go/discovery/discovery_client.go:30:2: cannot find package "github.com/googleapis/gnostic/OpenAPIv2" 10 | The above import is renamed to 11 | "github.com/googleapis/gnostic/openapiv2" 12 | ``` 13 | 14 | 其实是因为 client-go 仓库中并没有规定`googleapis/gnostic`的版本号, 这导致我的工程在使用`client-go`时为ta自动下载了最新版的`googleapis/gnostic`, 但是最新版的库中的目录路径已经变了, 没有`OpenAPIv2`这个目录了. 15 | 16 | 解决方法就是, 在我的工程里手动用`go get -v github.com/googleapis/gnostic@v0.4.0`下载旧版本, 这样在`go.mod`中会出现这条记录, 并且会包含`indirect`标记, 因为我的工程本身并没有直接用到这个库. 17 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/go mod问题处理/go mod - xxx is explicitly required in go.mod, but not marked as explicit in vendor_modules.txt.md: -------------------------------------------------------------------------------- 1 | # go mod - xxx is explicitly required in go.mod, but not marked as explicit in vendor_modules.txt 2 | 3 | ## 问题描述 4 | 5 | go: 1.22.2 6 | 7 | 一般来说, 这种场景只出现在, 开发者以 go module 形式, 使用`go get`在工程目录中下载了xxx依赖, 并更新了`go.mod`文件. 8 | 9 | 但是在没有执行`go mod vendor`的时候(此时xxx还没有被拷贝到 vendor 目录), 就使用`go build -mod=vendor`直接以`vendor`目录为标准去编译了. 10 | 11 | `-mod=vendor`会将`vendor/modules.txt`与`go.mod`做对比, 如果发现上述情况就会报错了. 12 | -------------------------------------------------------------------------------- /语言和框架/go/依赖管理/readme.md: -------------------------------------------------------------------------------- 1 | # golang包管理 2 | 3 | 参考文章 4 | 5 | 1. [历史包袱上进行golang包管理](https://www.jianshu.com/p/ac2c41bff147) 6 | 2. [Go Moudle笔记](https://blog.csdn.net/Thewindking/article/details/125415338) 7 | 8 | -------------------------------------------------------------------------------- /语言和框架/go/并发/协程池.md: -------------------------------------------------------------------------------- 1 | [golang 裸写一个pool池控制协程的大小](https://www.cnblogs.com/jackluo/p/6201862.html) 2 | [golang实现协程池(GoroutinePool)并控制池中的协程大小](https://blog.csdn.net/boyhandsome7/article/details/80284880) 3 | [使用Go语言每分钟处理1百万请求(译)](https://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770&idx=1&sn=044be64c577a11a9a13447b373e80082&chksm=bce4d5b08b935ca6ad59abb5cc733a341a5126fefc0e6600bd61c959969c5f77c95fbfb909e3&mpshare=1&scene=1&srcid=1010dpu0DlPHi6y1YmrixifX#rd) -------------------------------------------------------------------------------- /语言和框架/go/并发/高并发调优方案.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Golang号称高并发,但高并发时性能不高](https://zhuanlan.zhihu.com/p/21514693) 4 | 5 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/golang-error chain错误链[wrap is].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Go错误处理:错误链使用指南](https://tonybai.com/2023/05/14/a-guide-of-using-go-error-chain/) 4 | - "Tony Bai"出品, 必属精品 5 | 6 | 错误链感觉有点像 python 中的分层异常. 7 | 8 | ```py 9 | try: 10 | pass 11 | except OSError as e: 12 | print(e) 13 | except Exception as e: 14 | print(e) 15 | ``` 16 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/http/golang-client timeout.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [http package](https://www.jianshu.com/p/b1f7c82193d9) 4 | 2. [The complete guide to Go net/http timeouts](https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/) 5 | 6 | 关于client timeout的配图神了 7 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/http/golang-http库Transport使用方法.md: -------------------------------------------------------------------------------- 1 | # golang-http库Transport使用方法 2 | 3 | 参考文章 4 | 5 | 1. [https原理以及golang基本实现](https://www.cnblogs.com/Goden/p/4639672.html) 6 | - 使用`http.Transport`完成https接口认证 7 | 2. [详解golang net之transport](https://www.cnblogs.com/charlieroro/p/11409153.html) 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/http/golang-原生http库的路由中间件[mux].md: -------------------------------------------------------------------------------- 1 | # golang-原生http库的路由中间件 2 | 3 | 1. [golang学习之negroni对于第三方中间件的使用分析](https://blog.csdn.net/kiloveyousmile/article/details/78740242) 4 | 2. [Golang构建HTTP服务(二)--- Handler,ServeMux与中间件](https://www.jianshu.com/p/16210100d43d) 5 | 3. [Go Web:自带的ServeMux multiplexer ](https://www.cnblogs.com/f-ck-need-u/p/10020942.html) 6 | 4. [Golang Web入门(2):如何实现一个RESTful风格的路由](https://blog.csdn.net/inet_ygssoftware/article/details/117649919) 7 | - golang 内置的 mux 是无法实现 restful 接口的(因为 handler 没有对 GET/POST.. 做区分处理) 8 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/http/golang-超时机制完全手册(转) [http todo].md: -------------------------------------------------------------------------------- 1 | # golang-超时机制完全手册(转) 2 | 3 | 6 | 7 | 原文链接 8 | 9 | [[译]Go net/http 超时机制完全手册](https://colobu.com/2016/07/01/the-complete-guide-to-golang-net-http-timeouts/) 10 | 11 | 英文链接 12 | 13 | [The complete guide to Go net/http timeouts](https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/) 14 | 15 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/json/golang-json.Unmarshal解析出错-invalid character.md: -------------------------------------------------------------------------------- 1 | # json相关 2 | 3 | ## 1. 4 | 5 | ``` 6 | “invalid character '\x00' after top-level value” 7 | ``` 8 | 9 | 情境描述 10 | 11 | 在使用`json.Unmarshal()`解析json字节数组为struct时报上述错误. 12 | 13 | 原因在于, 读取json文件时, 预先`make`了一个1024个字节`[]byte`数组, 如果读取的json文件小于1024个字节, 那么`[]byte`数组就没有被填满, `Unmarshal`解析时就会报错. 14 | 15 | 解决方法为, `[]byte`数组实际占用长度为多少, 就解析到哪里. 16 | 17 | ```go 18 | fileCnt := make([]byte, 1024) 19 | var device Device 20 | num, err := _file.Read(fileCnt) 21 | if err != nil { 22 | return 23 | } 24 | // 注意这里 25 | err = json.Unmarshal(fileCnt[:num], &device) 26 | ``` 27 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/json/golang-json空字段报错校验[tag required nonempty].md: -------------------------------------------------------------------------------- 1 | # golang-json空字段报错校验[tag required nonempty] 2 | 3 | 参考文章 4 | 5 | 1. [How not to allow empty fields when Unmarshalling json to a struct](https://stackoverflow.com/questions/56895966/how-not-to-allow-empty-fields-when-unmarshalling-json-to-a-struct) 6 | 2. [Go 中使用 JSON 时,如何区分空字段和未设置字段](https://zhuanlan.zhihu.com/p/347574574) 7 | 8 | golang 原生的 json tag 并没有空字段校验的能力(类似于`required`标记), 只能借助第3方库实现. 9 | 10 | 参考文章1, 2中介绍了一种方法, 将字段设置为指针类型. 11 | 12 | ```go 13 | type DictInfo struct { 14 | ClusterName string `json:"clusterName"` 15 | TimeStamp string `json:"timeStamp"` 16 | } 17 | ``` 18 | 19 | ```go 20 | type DictInfo struct { 21 | ClusterName *string `json:"clusterName,omitempty"` 22 | TimeStamp *string `json:"timeStamp,omitempty"` 23 | } 24 | ``` 25 | 26 | 不过好像是用来鞭策开发者强制手动校验的功能, 而不是在`json.UnMarshal()`的时候自动校验. 27 | 28 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/os/golang-exec执行命令[shell模式].md: -------------------------------------------------------------------------------- 1 | # golang-exec执行命令[shell模式] 2 | 3 | 参考文章 4 | 5 | 1. [golang exec.Command 执行命令用法实例](https://blog.csdn.net/whatday/article/details/109277998) 6 | - 几个简单直接的示例 7 | 2. [go os/exec 简明教程](https://colobu.com/2020/12/27/go-with-os-exec/#%E8%8E%B7%E5%8F%96%E5%91%BD%E4%BB%A4%E7%BB%93%E6%9E%9C) 8 | - 专题示例 9 | 3. [golang如何设置子进程的环境变量](https://www.codeleading.com/article/5894668091/) 10 | - 额外设置环境变量 11 | 4. [golang 执行外部命令 超时处理 exec.CommandContext](https://blog.csdn.net/whatday/article/details/109748501) 12 | - exec 超时设置 13 | 5. [exec.Command() in Go with environment variable](https://stackoverflow.com/questions/51015569/exec-command-in-go-with-environment-variable) 14 | - 非shell模式下打印环境变量, 无法得到正确输出. 15 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/os/golang-os文件&目录操作.md: -------------------------------------------------------------------------------- 1 | # golang-os文件&目录操作 2 | 3 | 参考文章 4 | 5 | 1. [golang语言中os包的学习与使用(文件,目录,进程的操作)](https://www.cnblogs.com/jkko123/p/7146474.html) 6 | 7 | 2. [Go实战--golang中文件以及文件夹路径相关操作](https://blog.csdn.net/wangshubo1989/article/details/77933654) 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/os/golang-os文件操作.md: -------------------------------------------------------------------------------- 1 | # golang-os文件操作 2 | 3 | 参考文章 4 | 5 | 1. [GO语言常用的文件读取方式](https://www.jb51.net/article/58147.htm) 6 | - 3种读取文件的方式: 7 | 1. (小文件)一次性读取 8 | 2. (大文件)分块读取 9 | 3. (文本文件)逐行读取 10 | 2. [Golang读写文件的几种方式](https://www.jianshu.com/p/7790ca1bc8f6) 11 | - `os`和`bufio`结合使用的方式 12 | 13 | > `加密与认证机制`分类下的[计算大文件md5及sha1值(golang版)]()在给出计算文件md5值的示例的同时也是读取文件(一次性和分块读取)的示例. 14 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/readme.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Go 教程](https://cloud.tencent.com/developer/doc/1101) 4 | 5 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/reflect反射/reflect.Copy.md: -------------------------------------------------------------------------------- 1 | 2 | [reflect包copy函数的使用](https://blog.csdn.net/u010165367/article/details/57574037) 3 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/reflect反射/reflect.DeepEqual 判断对象是否完全相同.md: -------------------------------------------------------------------------------- 1 | # reflect.DeepEqual 判断对象是否完全相同 2 | 3 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/sync/golang-sync.atomic.Value通用类型.md: -------------------------------------------------------------------------------- 1 | # golang-sync.atomic.Value通用类型 2 | 3 | 参考文章 4 | 5 | 1. [理解Go标准库中的atomic.Value类型](http://blog.betacat.io/post/golang-atomic-value-exploration/) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/散落/godoc介绍.md: -------------------------------------------------------------------------------- 1 | # godoc介绍 2 | 3 | 参考文章 4 | 5 | 1. [godoc 介绍以及 Golang 注释规范](https://blog.cyeam.com/golang/2018/09/03/godoc#%E4%BB%A3%E7%A0%81%E4%B8%AD%E6%B3%A8%E9%87%8A%E7%94%9F%E6%88%90%E6%96%87%E6%A1%A3) 6 | 2. [Godoc - golang 注释与文档工具](https://blog.csdn.net/qq_28057541/article/details/79890301) 7 | 8 | 粗略看了下godoc, 只是简单说明了对包注释, 函数注释等的位置和几个关键字, 并没有详细说明函数的命名规范, 参考及返回值列表的书写格式(比如js中的`@param`, `@return`等). 9 | 10 | 感觉没什么用... 11 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/散落/golang-template模板引擎.md: -------------------------------------------------------------------------------- 1 | # golang-template模板引擎 2 | 3 | 参考文章 4 | 5 | 1. [Golang 内置模块库 template](https://www.jianshu.com/p/8b580a3b6a76) 6 | 2. [text/template 定义模板](https://m.php.cn/manual/view/35314.html) 7 | 3. [How can I add a default value to a go text/template?](https://stackoverflow.com/questions/44532017/how-can-i-add-a-default-value-to-a-go-text-template) 8 | - 默认值的实现 9 | -------------------------------------------------------------------------------- /语言和框架/go/标准库/散落/hex编码.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [golang标准库中的encoding/hex包](https://www.jianshu.com/p/859e04e2bdf2) 4 | 5 | base64编码存在大小写和字符, 某些场景下可能只允许小写字母和数字, base64无法满足, base16可以, 但是golang没有加入到标准库, 可以使用hex代替. 6 | -------------------------------------------------------------------------------- /语言和框架/go/标准库源码/Golang同步机制的实现.md: -------------------------------------------------------------------------------- 1 | # Golang同步机制的实现 2 | 3 | 参考文章 4 | 5 | 1. [Golang同步机制的实现](http://ga0.github.io/golang/2015/10/11/golang-sync.html) 6 | - cas、atomic 7 | - 自旋锁 8 | - 信号量 9 | - sync/Mutex 10 | 11 | -------------------------------------------------------------------------------- /语言和框架/go/标准库源码/readme.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [6. 开篇《 刻意学习 Golang - 标准库源码分析 》](https://learnku.com/articles/25470) 4 | - 所有Package集合简介 5 | 6 | 2. [Go 语言编译器的 "//go:" 详解](https://www.jianshu.com/p/afd6dd988c20) 7 | - `//go:`等价于C语言中的`#include`, 是给编译器看的标记 8 | - 常用标记: `//go:noinline`: 不要内联; `//go:nosplit`: 跳过栈溢出检测; `//go:noescape`: 禁止逃逸; `//go:norace`: 跳过竞态检测; 9 | -------------------------------------------------------------------------------- /语言和框架/go/测试/go test -bench压力测试.md: -------------------------------------------------------------------------------- 1 | # go test -bench压力测试 2 | 3 | 参考文章 4 | 5 | 1. [Go Web编程 11.3. Go 怎么写测试用例 ](https://learnku.com/docs/build-web-application-with-golang/how-113-go-writes-test-cases/3224) 6 | 2. [大厂必备技能:golang 性能调优 看我就够啦 (一) 基准测试](https://juejin.cn/post/6963919796115079176) 7 | -------------------------------------------------------------------------------- /语言和框架/go/测试/gomonkey.md: -------------------------------------------------------------------------------- 1 | # gomonkey 2 | 3 | 参考文章 4 | 5 | 1. [Monkey测试框架](https://www.jianshu.com/p/2f675d5e334e) -------------------------------------------------------------------------------- /语言和框架/go/测试/http接口测试.md: -------------------------------------------------------------------------------- 1 | # http接口测试 2 | 3 | 参考文章 4 | 5 | 1. [golang web开发 Handler测试利器httptest](https://www.jianshu.com/p/21571fe59ec4) 6 | 7 | golang的`http/net/httptest`提供了http接口的测试方法, 可以在不启动http server的情况下直接测试handler函数. 让开发者可以直接编写request, 而不必再写`get`, `post`等客户端代码. 8 | 9 | 但是这个测试方法只适用于原生`net/http`库的代码, 对于目前各种web框架不能做到兼容, 所以目前不打算花时间学习这个. 10 | 11 | ...不过参考文章1讲解得挺不错的. -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gin/Go语言web框架 gin.md: -------------------------------------------------------------------------------- 1 | # Go语言web框架 gin 2 | 3 | 参考文章 4 | 5 | 1. [Go语言web框架 gin](http://shanshanpt.github.io/2016/05/03/go-gin.html) 6 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gin/golang-gin框架session无效的问题.md: -------------------------------------------------------------------------------- 1 | # golang-web框架session无效的问题 2 | 3 | 参考文章 4 | 5 | 1. [使用golang gin框架sessions时碰到的gob问题](https://my.oschina.net/sannychan/blog/1840048) 6 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/go-cron定时任务.md: -------------------------------------------------------------------------------- 1 | # go-cron定时任务 2 | 3 | 参考文章 4 | 5 | 1. [Go cron定时任务的用法](https://www.cnblogs.com/zuxingyu/p/6023919.html) 6 | 7 | ...全网就只有一个流行的go-cron库`robfig/cron`, 不用费心选择了. 8 | 9 | 与linux的crontab比起来, 粒度精确到了秒级(共用6个字段: 秒, 分, 时, 日, 月, 周). -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/go-restful/readme.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Golang:go-restful库使用手册](https://blog.csdn.net/chszs/article/details/88974199) 4 | 2. [浅谈go-restful框架的使用和实现](https://www.jb51.net/article/137113.htm) 5 | 6 | go-restful定义了Container WebService和Route三个重要数据结构。 7 | 8 | Container 表示一个服务器,由多个WebService和一个 http.ServerMux 组成,使用RouteSelector进行分发 9 | WebService 表示一个服务,由多个Route组成,他们共享同一个Root Path 10 | Route 表示一条路由,包含 URL/HTTP method/输入输出类型/回调处理函数RouteFunction 11 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/goquery使用.md: -------------------------------------------------------------------------------- 1 | # goquery使用 2 | 3 | 参考文章 4 | 5 | 1. [GO 语言版 JQUERY — GOQUERY](http://blog.studygolang.com/2015/04/go-jquery-goquery/) 6 | 7 | 2. [golang goquery selector(选择器) 示例大全](https://www.flysnow.org/2018/01/20/golang-goquery-examples-selector.html) 8 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gorm/gorm多对多关联查询.md: -------------------------------------------------------------------------------- 1 | # gorm多对多关联查询 2 | 3 | 参考文章 4 | 5 | 1. [Many-To-Many relationships?](https://github.com/jinzhu/gorm/issues/168) 6 | 7 | 多对多关联的的简查查询可以用`Related()`或`Association()`实现, 但是如果想在多对多查询同时进行过滤, 分页和排序等操作时如何实现? 是在查询中间表的时候手动进行分页这些操作得到另一张表的id集合, 然后再去用`in`操作符查询相应的记录吗? -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gorm/gorm模型定义.md: -------------------------------------------------------------------------------- 1 | # gorm模型定义 2 | 3 | 参考文章 4 | 5 | 1. [gorm 更新表的时候,总是把created_at字段也更新的,很奇怪](https://segmentfault.com/q/1010000009848489) 6 | 7 | 2. [gorm issue - CreateAt, UpdateAt, DeleteAt ](https://github.com/jinzhu/gorm/issues/1485) -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gorm/gorm表关联.0.导论.md: -------------------------------------------------------------------------------- 1 | # 表关联 2 | 3 | 参考文章 4 | 5 | 1. [gorm官方文档 - 关联](http://gorm.io/docs/belongs_to.html) 6 | 7 | `关联`, 无非就是外键, 但是像python的sqlAlchemy可以通过外键正向查询被引用表, 而被引用表也可以反向查询谁引用了自己, 在程序里写起来是非常方便的. 这是orm本身提供的快捷方案, 使用起来很舒服. 8 | 9 | 我们来看看在gorm中如何实现. 官方文档里列出了5种关联: 10 | 11 | 1. 属于 12 | 13 | 2. 包含一个 14 | 15 | 3. 包含多个 16 | 17 | 4. 多对多 18 | 19 | 5. 多种包含 20 | 21 | 使用如下docker-compose配置部署依赖环境 22 | 23 | ```yml 24 | version: '2' 25 | services: 26 | postgres: 27 | image: postgres 28 | environment: 29 | - "POSTGRES_USER=gormtest" 30 | - "POSTGRES_PASSWORD=123456" 31 | - "POSTGRES_DB=gormdb" 32 | ports: 33 | - "7723:5432" 34 | volumes: 35 | - ~/Public/dbdata/gormtest:/var/lib/postgresql/data 36 | ``` 37 | 38 | > win下就不要映射目录了... -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gorm/gorm表关联.2.包含一个.md: -------------------------------------------------------------------------------- 1 | # 表关联(二)-包含一个 2 | 3 | 参考文章 4 | 5 | 1. [官方文档 - has one](http://gorm.io/docs/has_one.html) 6 | 7 | 即传统意义上的一对一连接. 8 | 9 | 这种关联关系与上一节的`属于`在数据库层面的实现是完全相同的. 10 | 11 | 但是在程序级别, `has one`与`belong to`是相反的. 12 | 13 | 什么意思呢? 14 | 15 | 在`belong to`的示例中, `user`与`book`是一对多的, `user`可以拥有多个`book`. 但是这种模型一般是用在用户管理系统的, 用来记录用户拥有的书籍数量. 16 | 17 | 换一个场景. 18 | 19 | 如果图书馆系统要管理用户`user`和ta的一卡通`card`呢? 其过程必然是先创建一个`card`记录, 然后与一个`user`信息绑定. 这个时候, `card`记录是事先存在的, 当一个`user`购买了一卡通后, 系统要添加一条`user`记录, 引用`card`记录. 所以`User`表中会存在`CardID`作为外键了. 而且`User`与`Card`都是唯一的, 这种情况下使用**一对一**的关联关系就很合适了. 20 | 21 | > 还有一个`Polymorphism Association`的关联, 没懂...不管了. -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gorm/gorm调试模式-查看执行的sql.md: -------------------------------------------------------------------------------- 1 | # gorm调试模式-查看执行的sql 2 | 3 | 参考文章 4 | 5 | 1. [如何查看gorm具体执行的sql语句](https://github.com/jinzhu/gorm/issues/1544) -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/gorm/gorm连接池.md: -------------------------------------------------------------------------------- 1 | # gorm连接池 2 | 3 | 参考文章 4 | 5 | 1. [Pooling/Concurrency](https://github.com/jinzhu/gorm/issues/246) 6 | 7 | 2. [Documentation on how the database pool works?](https://github.com/jinzhu/gorm/issues/1334) 8 | 9 | gorm是协程安全的, 默认支持连接池, 可以通过如下语句设置连接池属性. 10 | 11 | ```go 12 | db.DB().SetMaxOpenConns(100) // 默认不限制 13 | db.DB().SetMaxIdleConns(50) // 默认为2 14 | ``` 15 | 16 | 另外, gorm使用原生标准库的连接池, 如果使用`SetMaxOpenConns`设置连接池数量为10, 而同时进入了100个请求, 那么其表现将与标准库所定义的行为一样, 直接拒绝. 17 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/grpc/grpc安全认证.md: -------------------------------------------------------------------------------- 1 | # grpc安全认证 2 | 3 | 参考文章 4 | 5 | 1. [Golang gRPC实践 连载四 gRPC认证](https://segmentfault.com/a/1190000007933303) 6 | - 这个作者的系列文章写的都挺不错 7 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/grpc/grpc连接机制.md: -------------------------------------------------------------------------------- 1 | # grpc连接机制 2 | 3 | 参考文章 4 | 5 | 1. [grpc 超时和重连](https://www.jianshu.com/p/a5dec04d042b) 6 | 7 | 其实在使用时就知道grpc有重连机制了, 连接断线会在日志中不断打印警告信息, 说明grpc客户端SDK本身通过心跳维护着连接. 就像常用数据库的连接驱动一样. 但是与数据库连接不同的是, 数据库在服务启动时, 如果连接失败是不会创建连接对象的, 而是直接退出, 把这当作是严重错误. 而grpc不会, 如果在`Dial()`参数中不手动指定超时选项的话, 会直接返回一个连接对象, 之后不断尝试连接... 8 | 9 | 官方文档貌似没有详细介绍这个话题, 需要查看源码. 10 | 11 | ```go 12 | customerConn, err := grpc.Dial(address, grpc.WithInsecure()) 13 | if err != nil { 14 | logger.Errorf("connect customer service failed: %s", err.Error()) 15 | return 16 | } 17 | fmt.Printf("%+v\n", customerConn.GetState()) // 直接输出IDLE 18 | customerCli := protos.NewCustomerServiceClient(customerConn) 19 | ``` 20 | 21 | 上述代码连接名为`customer`的服务, 在`customer`根本没开启的情况下运行时依然没出错, `err`为`nil`, 此时连接状态为`IDLE`, 表示连接空闲, 其实相当于异步了. 22 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/jwt-token的验证与鉴权/golang-jwt token签发与认证.md: -------------------------------------------------------------------------------- 1 | # golang-jwt token签发与认证 2 | 3 | 参考文章 4 | 5 | 1. [Go实战--golang中使用JWT(JSON Web Token)](https://blog.csdn.net/wangshubo1989/article/details/74529333) 6 | 7 | 2. [Golang构建HTTP服务(二)--- Handler,ServeMux与中间件](https://www.jianshu.com/p/16210100d43d) 8 | 9 | 3. [github - nan1888/beego_jwt/common/common.go](https://github.com/nan1888/beego_jwt/blob/e20949c6cb89e69310890a752d832929d1a1fc6b/common/common.go) 10 | 11 | 4. [基于golang从头开始构建基于docker的微服务实战笔记](https://blog.csdn.net/wdy_yx/article/details/79085588) 12 | 13 | 参考文章1中给出了完整的使用jwt对客户端登录请求签发token并返回, 之后的请求中使用中间件进行验证的示例. 不过由于ta引入了`negroni`路由中间件, 我认为没有必要, 然后我找到了参考文章2, 使用原生http的中方法实现中间件. 14 | 15 | 另外参考文章1中使用`jwt-go/request`直接对`http.Request`中携带的token进行验证, 考虑到以后可能使用beego, gin等各种第三方框架, 不可能直接得到`http.Request`对象, 按照参考文章3, 使用了`jwt.ParseWithClaims()`方法, 更为通用. -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/jwt-token的验证与鉴权/jwt简单认识.md: -------------------------------------------------------------------------------- 1 | # jwt简单认识 2 | 3 | 参考文章 4 | 5 | 1. [初步理解JWT并实践使用](https://www.jianshu.com/p/2fdc20a42c41) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/protobuf/protobuf如何返回空值.md: -------------------------------------------------------------------------------- 1 | # protobuf如何返回空值 2 | 3 | 参考文章 4 | 5 | 1. [以小见大——那些基于 protobuf 的五花八门的 RPC(5 完)](https://blog.csdn.net/gzlaiyonghao/article/details/6323900) 6 | 7 | 2. [Can I define a grpc call with a null request or response?](https://stackoverflow.com/questions/31768665/can-i-define-a-grpc-call-with-a-null-request-or-response/31772973) 8 | 9 | > ... we as developers are really bad at guessing what we might want in the future. So I recommend being safe by always defining custom params and results types for every method, even if they are empty. 10 | 11 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/protobuf/test.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package model; 3 | option go_package = ".;model"; 4 | 5 | message Empty{} 6 | 7 | message GetUserRequest{ 8 | string Name = 1; 9 | } 10 | 11 | message GetUserResponse{ 12 | string Name = 1; 13 | string Title = 2; 14 | string Company = 3; 15 | } 16 | 17 | service UserManagerService{ 18 | rpc GetUser (GetUserRequest) returns (GetUserResponse); 19 | } 20 | -------------------------------------------------------------------------------- /语言和框架/go/第三方框架/todo.md: -------------------------------------------------------------------------------- 1 | PhalGo-Viper获取配置 2 | 3 | 命令行库cobra 4 | 5 | [有哪些不错的golang开源项目?](https://www.zhihu.com/question/48821269/answer/2638757090) 6 | 7 | [Open Source Databases in Go](https://www.reddit.com/r/golang/comments/v815v0/open_source_databases_in_go/) 8 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-daemon守护进程/main.go.3: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "log" 5 | "syscall" 6 | ) 7 | 8 | const ( 9 | dhcpPath = "/opt/cni/bin/dhcp" 10 | dhcpSock = "/run/cni/dhcp.sock" 11 | ) 12 | 13 | func main() { 14 | pid, _, sysErr := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0) 15 | if sysErr != 0 { 16 | log.Printf("syscall fork error: %s", sysErr.Error()) 17 | return 18 | } 19 | log.Printf("the forked pid: %d", pid) 20 | if pid < 0 { 21 | panic("invalid child pid") 22 | } else if pid > 0 { 23 | // 父进程 24 | } else { 25 | // 子进程 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-interface{}与[]interface{}.md: -------------------------------------------------------------------------------- 1 | # golang-interface{}与[]interface{} 2 | 3 | 参考文章 4 | 5 | 1. [golang []interface{} 的数组如何转换为 []string 的数组](https://segmentfault.com/q/1010000003505053) 6 | 7 | 有json字符串如下 8 | 9 | ```json 10 | { 11 | "list": [12, 23.4, 45] 12 | } 13 | ``` 14 | 15 | 想要将其反序列化到一个类型为`map[string]interface{}`的对象中. 16 | 17 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-slice切片的第3个参数[low high max].md: -------------------------------------------------------------------------------- 1 | # golang-slice切片的第3个参数[low high max] 2 | 3 | 参考文章 4 | 5 | 1. [Go中slice[i:j:k]第三个参数是做什么的](https://zhuanlan.zhihu.com/p/526731603) 6 | 2. [Golang基础语法-切片(slice)](https://blog.csdn.net/qq_37949192/article/details/118304453) 7 | 8 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-switch fallthrough[continue break].md: -------------------------------------------------------------------------------- 1 | # golang-switch fallthrough[continue break] 2 | 3 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-switch与type类型断言[assert].md: -------------------------------------------------------------------------------- 1 | # golang-switch与type类型断言 2 | 3 | ```go 4 | package main 5 | 6 | import "fmt" 7 | 8 | func main() { 9 | // i必须为interface{}类型, 无法是具体类型. 10 | // 否则switch i.(type)会出错. 11 | // var i interface{} = 1 12 | var i interface{} = map[string]string{} 13 | 14 | // 无法在switch之外使用.(type)断言 15 | // use of .(type) outside type switch 16 | // fmt.Println(i.(type)) 17 | 18 | switch i.(type) { 19 | case int: 20 | fmt.Println(i, "is an int value.") 21 | case string: 22 | fmt.Println(i, "is a string value.") 23 | case int64: 24 | fmt.Println(i, "is an int64 value.") 25 | case bool: 26 | fmt.Println(i, "is an bool value.") 27 | case interface{}: 28 | fmt.Println(i, "is an interface{} value.") 29 | default: 30 | fmt.Println(i, "is an unknown type.") 31 | } 32 | } 33 | ``` 34 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-位操作(位运算).md: -------------------------------------------------------------------------------- 1 | # golang-位操作 2 | 3 | 参考文章 4 | 5 | 1. [golang 位运算](https://studygolang.com/articles/6337) 6 | 2. [运算操作符](https://gfw.go101.org/article/operators.html) 7 | - Go语言101 8 | 3. [Operators](https://go.dev/ref/spec#Operators) 9 | - 官方文档 10 | 11 | - 按位与`&` 12 | - 按位或`|` 13 | - 按位异或`^` 14 | - 按位取反`^` 15 | - 左移`<<` 16 | - 右移`>>` 17 | 18 | ```go 19 | package main 20 | 21 | import ( 22 | "log" 23 | ) 24 | 25 | func main() { 26 | byteArray := []byte{0x01, 0x02} 27 | // Warning: byteArray[0] (8 bits) too small for shift of 8 28 | result1 := byteArray[0]<<8 + byteArray[1] 29 | log.Println(result1) 30 | 31 | intArray := []int{1, 2} 32 | result2 := intArray[0]<<8 + intArray[1] 33 | log.Println(result2) 34 | } 35 | ``` 36 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-内置函数new & make.md: -------------------------------------------------------------------------------- 1 | # golang-内置函数new & make 2 | 3 | 参考文章 4 | 5 | 1. [深入学习golang(4)—new与make](https://www.cnblogs.com/hustcat/p/4004889.html) 6 | 7 | 好像在golang里, `new`返回的是一个对象的首地址指针, 而`make`返回的才是对象的引用...和python, java这种高级语言不太一样. 8 | 9 | 参考文章1中已经说了, 通俗一点来讲, `new`的作用类似于c里的`malloc + memset(0)`, 构造了内存空间, 清空, 但并未初始化. 10 | 11 | 而`make`才更像python/java中的`new`, 不过new出来的是动态类型, `slice`, `map`, `channel`这种数据结构. 12 | 13 | 或者说, 正是因为`new`和`make`两种方式同时存在(基础类型的指针与动态类型的引用), 才使得golang能同时兼备C和java两种特性. 虽然我还并不太能理解更深层的原理. 14 | -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-函数作为函数参数的使用方法.md: -------------------------------------------------------------------------------- 1 | # golang-函数作为参数的使用方法 2 | 3 | 参考文章 4 | 5 | 1. [go语言将函数作为参数传递](https://blog.csdn.net/eclipser1987/article/details/11772539) 6 | 7 | ```go 8 | package main 9 | 10 | import "fmt" 11 | 12 | func goFunc(f interface{}, args ...interface{}) { 13 | if len(args) > 1 { 14 | f.(func(...interface{}))(args) 15 | } else if len(args) == 1 { 16 | f.(func(interface{}))(args[0]) 17 | } else { 18 | f.(func())() 19 | } 20 | } 21 | 22 | func f1() { 23 | fmt.Println("f1 done") 24 | } 25 | 26 | func f2(i interface{}) { 27 | fmt.Println("f2 done", i) 28 | } 29 | 30 | func f3(args ...interface{}) { 31 | fmt.Printf("%T\n", args) // []interface{} 32 | fmt.Println("f3 done", args) 33 | } 34 | 35 | func main() { 36 | // 通过goFunc传入目标函数代为执行 37 | goFunc(f1) 38 | goFunc(f2, "hello") 39 | goFunc(f3, "hello world", 3.14) 40 | } 41 | ``` -------------------------------------------------------------------------------- /语言和框架/go/语法/golang-注释格式.md: -------------------------------------------------------------------------------- 1 | # golang-注释格式 2 | 3 | 参考文章 4 | 5 | 1. [GoDoc添加换行符](https://www.javaer101.com/ja/article/5700763.html) 6 | 2. [Go Doc Comments](https://tip.golang.org/doc/comment) 7 | - 官方文档 8 | 3. [Golang doc func parameters](https://stackoverflow.com/questions/48253083/golang-doc-func-parameters) 9 | 4. [Complaining about the Go doc-comment style.](https://www.reddit.com/r/golang/comments/17dy2bx/complaining_about_the_go_doccomment_style/) 10 | 5. [Golang 注释规范](https://www.cnblogs.com/zhichaoma/p/12509999.html) 11 | 12 | -------------------------------------------------------------------------------- /语言和框架/go/语法/readme.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [【GoLang】GoLang for 中有多个循环变量怎么处理?](https://www.cnblogs.com/junneyang/p/6072680.html) 4 | 5 | -------------------------------------------------------------------------------- /语言和框架/go/问题处理/golang os exec-already started.md: -------------------------------------------------------------------------------- 1 | # golang os exec-already started 2 | 3 | 参考文章 4 | 5 | 1. [Go os/exec Command.Start() twice in a row](https://stackoverflow.com/questions/39239499/go-os-exec-command-start-twice-in-a-row) 6 | 7 | golang: 1.12 8 | 9 | ```go 10 | fmt.Println("running") 11 | cmd := exec.Command("/bin/bash", "./bash.sh") 12 | cmd.Run() 13 | output, err := cmd.Output() 14 | if err != nil { 15 | fmt.Printf("command error: %s\n", err) // command error: exec: already started 16 | return 17 | } 18 | fmt.Println(output) 19 | ``` 20 | 21 | 执行上面代码时出现`exec: already started`问题, 原来`Output()`方法不只是获取命令的执行结果, 而是先调用该命令再获取其结果. 而 `exec.Command()` 得到的 cmd 对象, `Start()`, `Run()`, 及 `Output()`方法不可同时使用. 如果使用了 Run() 方法, 又想获取 ta 的打印结果, 可以将 cmd.Stdout 定位到某一个文件. 22 | 23 | -------------------------------------------------------------------------------- /语言和框架/go/问题处理/golang-missing Location in call to Time.In异常[docker].md: -------------------------------------------------------------------------------- 1 | # golang-missing Location in call to Time.In异常 2 | 3 | 参考文章 4 | 5 | 1. [panic: time: missing Location in call to Time.In](https://www.cnblogs.com/siaslfslovewp/p/11219470.html) 6 | 7 | 用的是 busybox 容器, 里面没有 timezone 那些文件, 换成 centos 或是将宿主机上的`/usr/share/` 8 | -------------------------------------------------------------------------------- /语言和框架/go/问题处理/并发fmt.md: -------------------------------------------------------------------------------- 1 | # 并发fmt 2 | 3 | 参考文章 4 | 5 | 1. [internal/poll: inconsistent poll.fdMutex while println string](https://github.com/golang/go/issues/25558) 6 | 7 | 2. [internal/poll: better panic message for lock overflow](https://go-review.googlesource.com/c/go/+/119956) 8 | 9 | 情景描述 10 | 11 | go 1.10.3 12 | 13 | ``` 14 | internal/poll: inconsistent poll.fdMutex while println string 15 | ``` 16 | 17 | 遍历一个128位的大数, 为每个值进行一些计算操作. 每个值的计算的过程都丢到goroutine里, goroutine中用`fmt`打印当前处理的值. 在不限协程数量(遍历时不断把任务开协程执行)运行了几分钟后, 报上述错误. 18 | 19 | 按照参考文章1的说法, 是因为fmt在打印到终端时貌似会加锁, 而出现这个问题的原因在于, 锁的数量是有限的, 最多为`1048575`. 当所有协程同时向终端打印时, 就出现了这个问题... 20 | 21 | 不过对fmt还没听过怎么手动给ta加锁, 所以解决办法, 要么限制协程数量(用协程池), 要么把`fmt`语句从协程里删掉, 就可以了. 22 | -------------------------------------------------------------------------------- /语言和框架/go/陷阱/if内改写外层变量.md: -------------------------------------------------------------------------------- 1 | # golang问题处理-if内改写外层变量 2 | 3 | 参考文章 4 | 5 | 1. [[golang基础] 局部变量初始化:=](https://www.cnblogs.com/thinear/p/4306009.html) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/go/陷阱/sizeof int[int32 int64].md: -------------------------------------------------------------------------------- 1 | var a int 2 | var b int32 3 | var c int64 4 | 5 | fmt.Printf("%d\n", unsafe.Sizeof(a)) // 8 6 | fmt.Printf("%d\n", unsafe.Sizeof(b)) // 4 7 | fmt.Printf("%d\n", unsafe.Sizeof(c)) // 8 8 | 9 | fmt.Printf("%d\n", unsafe.Sizeof(&a)) // 8 10 | -------------------------------------------------------------------------------- /语言和框架/go/高级/GC/golang GC优化思路.md: -------------------------------------------------------------------------------- 1 | # golang GC优化思路 2 | 3 | 参考文章 4 | 5 | 1. [golang gc 优化思路以及实例分析](https://my.oschina.net/u/2950272/blog/1788299) 6 | - 实例分析GC的优化思路 7 | - gctrace输出各字段涵义 8 | - pprof生成svg图分析调用栈内存占用 9 | -------------------------------------------------------------------------------- /语言和框架/go/高级/GC/golang-GC与Finalizer.md: -------------------------------------------------------------------------------- 1 | # golang-GC与Finalizer 2 | 3 | 参考文章 4 | 5 | 1. [golang垃圾回收和SetFinalizer](https://blog.csdn.net/lanyang123456/article/details/86772314) 6 | 7 | 2. [Using Go finalizers can be a better option than not using them](https://utcc.utoronto.ca/~cks/space/blog/programming/GoFinalizersStopLeaks) -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/Golang 中 runtime 的使用.md: -------------------------------------------------------------------------------- 1 | # Golang 中 runtime 的使用 2 | 3 | 参考文章 4 | 5 | 1. [Golang 中 runtime 的使用](https://www.jianshu.com/p/e45cea3e1723) -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/go build -gcflags常用选项及参数.md: -------------------------------------------------------------------------------- 1 | # go build常用选项及参数 2 | 3 | 参考文章 4 | 5 | 1. [关于Go tools的比较有用的flags](https://gocn.vip/article/6) 6 | 7 | 使用`go help build`可以查看所有可用的编译选项, 常用的有`-gcflags`, `-ldflags`等. 这些编译选项被`build`, `clean`, `get`, `install`, `list`, `run`, `test`子命令所共用. 8 | 9 | 为了禁止编译器优化和内联, 你可以使用`gcfalgs`: 10 | 11 | ``` 12 | $ go build -gcflags='-N -l' 13 | ``` 14 | 15 | 在go build编译选项中, `-asmflags`, `-gccgoflags`, `-gcflags`与`-ldflags`接受的参数格式相同, 都是用(单/双)引号包裹的, 以空格分隔的参数列表. 这些参数会在`build`期间传递给底层的go tools. 16 | 17 | 使用`go tool compile --help`可以查看所有可用的编译参数. 18 | 19 | 常用参数 20 | 21 | `-N`: 禁用编译器优化 22 | `-l`: 禁用内联 23 | `-m`: 打印编译器优化的详细描述 24 | `-race`: 开启竞态检测 25 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/go build -ldflags参数.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Go:编译构建时 ldflags 变量注入](https://blog.csdn.net/test1280/article/details/123550802) 4 | 5 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/go build出现out of memory错误[swap].md: -------------------------------------------------------------------------------- 1 | # go build出现out of memory错误 2 | 3 | 场景描述 4 | 5 | 在阅读源码kubelet的时候, 希望使用`go run`进行调试, 但是kubelet要求禁用swap分区, 使用`swapoff -a`禁用后再执行, 发现提示内存不足: 6 | 7 | ``` 8 | # go run kubelet.go --kubeconfig=/usr/local/kubernetes/kubelet/kubelet.conf --config=/usr/local/kubernetes/kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 9 | # command-line-arguments 10 | fatal error: runtime: out of memory 11 | ``` 12 | 13 | 开发机是4G内存, 在kubernetes工程目录下执行make都没有问题, 而且用`free -m`监控内存占用, 还有1.7G左右的空闲. 14 | 15 | 这个问题没有来的及仔细研究, 网上的文章指写到问题出在`link`阶段. 为了跳过这个问题, 只能先把`swap`打开, 使用kube的make将kubelet单独编译成二进制文件, 但把`swap`关掉来执行. 16 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang-pprof可视化界面及go-torch.md: -------------------------------------------------------------------------------- 1 | # golang-pprof可视化界面及go-torch 2 | 3 | 参考文章 4 | 5 | 1. [Golang性能调优(go-torch, go tool pprof)](https://blog.csdn.net/WaltonWang/article/details/54019891) 6 | 7 | 有关pprof的可视化展现方式有两种: 8 | 9 | 1. `go tool pprof`命令行中的web/svg子命令, 依赖[Graphviz](http://www.graphviz.org/) 10 | 11 | 2. [Uber go-torch](https://github.com/uber/go-torch), 依赖[FlameGraph](https://github.com/brendangregg/FlameGraph.git) 12 | 13 | 参考文章1种介绍了这两种方式的初级使用方法. 14 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang-内存对齐.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Golang优化之内存对齐](https://blog.csdn.net/u011957758/article/details/85059117) 4 | 5 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang-逃逸分析.md: -------------------------------------------------------------------------------- 1 | # golang-逃逸分析 2 | 3 | 参考文章 4 | 5 | 1. [你为什么不应该过度关注go语言的逃逸分析](https://www.cnblogs.com/apocelipes/p/18488250) 6 | 7 | 逃逸, 应该是单指按照传统的思维应该将空间分配到栈上, 但实际分配在了堆上. 8 | 9 | 1. 函数内局部变量会分配在栈上, 但较大变量会直接分配到堆上; 10 | 2. 通过函数参数传递的指针所指向的对象会分配在堆上, 但有一种例外, 返回指针的函数的主调函数并没有用变量存储这个指针(比如 `_ = callee()`). 11 | 12 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang环境变量-GOGC垃圾回收控制.md: -------------------------------------------------------------------------------- 1 | # golang环境变量-GOGC垃圾回收控制 2 | 3 | 参考文章 4 | 5 | 1. [Go 语言运行时环境变量快速导览](https://blog.csdn.net/htyu_0203_39/article/details/50852856) 6 | 7 | `GOGC` 是Go Runtime最早支持的环境变量, 甚至比`GOROOT`还早, 几乎无人不知. 8 | 9 | `GOGC` 用于控制GC的处发频率, 其值默认为`100`, 意为直到自上次垃圾回收后`heap size`已经增长了100%时GC才触发运行. 即是`GOGC=100`意味着live heap size 每增长一倍, GC触发运行一次. 10 | 11 | 如设定`GOGC=200`, 则live heap size 自上次垃圾回收后, 增长2倍时, GC触发运行. 总之, 其值越大则GC触发运行频率越低, 反之则越高. 12 | 13 | 如果`GOGC=off` 则关闭GC. 14 | 15 | 虽然go 1.5引入了低延迟的GC, 但是`GOGC`对GC运行频率的影响不变. 16 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang环境变量-GOMEMLIMIT[xmx xms 内存 容器 OOM].md: -------------------------------------------------------------------------------- 1 | # golang环境变量-GOMEMLIMIT[xmx xms 内存 容器 OOM] 2 | 3 | 参考文章 4 | 5 | 1. [Go内存优化与垃圾收集](https://blog.csdn.net/yuff100/article/details/136085733) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang环境变量-GOOS与GOARCH跨平台编译[build].md: -------------------------------------------------------------------------------- 1 | # golang环境变量-GOOS与GOARCH跨平台编译 2 | 3 | 参考文章 4 | 5 | 1. [Golang 交叉编译与选择性编译](https://blog.csdn.net/dengming0922/article/details/82217929) 6 | 2. [Golang交叉编译各个平台的二进制文件](https://www.jianshu.com/p/efaef7940207) 7 | 8 | 交叉编译主要是由如下两个编译环境参数决定: 9 | 10 | - `GOOS`: 目标平台的系统类型 11 | - `GOARC`: 目标平台的处理器体系结构 12 | 13 | `GOOS`可选值如下: 14 | 15 | - `windows`(win系统) 16 | - `darwin`(mac系统) 17 | - `linux`(linux系统) 18 | - ... 19 | 20 | `GOARCH`可选值如下: 21 | 22 | - `amd64`(常用64位系统架构)) 23 | - `386` 24 | - `arm` 25 | 26 | ## 27 | 28 | linux 29 | 30 | ```bash 31 | ## x86 32 | GOOS=linux GOARCH=amd64 go build -o xxx ./main.go 33 | ## arm 34 | GOOS=linux GOARCH=arm64 go build -o xxx ./main.go 35 | ``` 36 | 37 | windows 38 | 39 | ```bat 40 | set GOARCH=arm64 41 | set GOOS=linux 42 | go build -o xxx .\main.go 43 | ``` 44 | 45 | > `-o main`要在`main.go`的前面 46 | 47 | > 有时可能要加上`CGO_ENABLED=0` 48 | -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang环境变量.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Environment Variables](https://pkg.go.dev/runtime) -------------------------------------------------------------------------------- /语言和框架/go/高级/内存调试与优化/golang编译提速优化.md: -------------------------------------------------------------------------------- 1 | # golang编译提速优化 2 | 3 | 参考文章 4 | 5 | 1. [golang编译提速优化](https://fishedee.com/2016/04/30/golang%E7%BC%96%E8%AF%91%E6%8F%90%E9%80%9F%E4%BC%98%E5%8C%96/) 6 | -------------------------------------------------------------------------------- /语言和框架/go/高级/协程调度/Go netpoller 原生网络模型之源码全面揭秘(转).md: -------------------------------------------------------------------------------- 1 | # Go netpoller 原生网络模型之源码全面揭秘 2 | 3 | [原文链接](https://strikefreedom.top/go-netpoll-io-multiplexing-reactor) 4 | [Go netpoll I/O 多路复用构建原生网络模型之源码深度解析](https://www.infoq.cn/article/boeavgkiqmvcj8qjnbxk) 5 | 6 | -------------------------------------------------------------------------------- /语言和框架/go/高级/调试/dlv设置环境变量.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Set environment variables Delve](https://stackoverflow.com/questions/50872412/set-environment-variables-delve) 4 | 5 | ``` 6 | AWS_ENV=development AWS_REGION=eu-west-1 dlv debug main.go 7 | ``` 8 | 9 | 在执行 dlv 之前, 使用 export 设置环境变量也可以. 10 | -------------------------------------------------------------------------------- /语言和框架/go/高级/调试/golang调试-GDB.md: -------------------------------------------------------------------------------- 1 | # GDB调试golang程序 2 | 3 | 参考文章 4 | 5 | 1. [Golang源码探索(一) 编译和调试源码](https://www.cnblogs.com/zkweb/p/7777525.html) 6 | - lldb 7 | - golang示例编译 8 | 2. [GDB调试GO程序](http://blog.studygolang.com/2012/12/gdb%E8%B0%83%E8%AF%95go%E7%A8%8B%E5%BA%8F/) 9 | - runtime-gdb.py 10 | - runtime.Breakpoint(): 触发调试器断点 11 | 12 | gdb可以通过`list 函数名称`查看函数指定函数前后的代码, 如下 13 | 14 | ```log 15 | (gdb) list main // 或是list 文件名(带后缀):main 16 | 1 #include 17 | 2 18 | 3 void main() 19 | 4 { 20 | 5 printf("hello world"); 21 | 6 } 22 | ``` 23 | 24 | 但是golang拥有package的概念, 函数符号名称的命名规则是`包名.函数名`, 例如主函数的符号名称是`main.main`, 这一点与C语言不同. 25 | -------------------------------------------------------------------------------- /语言和框架/go/高级/调试/问题处理/Go version 1.13.14 is too old for this version of Delve (minimum supported version 1.16, suppress this error with --check-go-version=false)[vscode].md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [VSCode debug error : Version of Delve is too old for this version of Go](https://github.com/go-delve/delve/issues/1974) 4 | - "dlvFlags": ["--check-go-version=false"] 5 | 2. [vscode利用delve调试go1.12代码_呀一1不小心的博客-程序员宝宝](https://www.cxybb.com/article/qq_28382661/118703683) 6 | - delve 的 [CHANGELOG](https://github.com/go-delve/delve/blob/master/CHANGELOG.md) 可以检索到各版本golang语言的支持记录,如delve是在v1.3.0添加go1.12的支持的。 7 | 8 | 参考文章1中说, 可以在 launch.json 中添加`dlvFlags`参数, 让 delve 不再进行版本检查. 9 | 10 | 需要更新 go 插件, Go 0.14.4 是不支持`dlvFlags`参数的. 11 | 12 | Property dlvFlags is not allowed. 13 | -------------------------------------------------------------------------------- /语言和框架/js/JS-Promise进化历程.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Node.js最新技术栈之Promise篇](http://cnodejs.org/topic/560dbc826a1ed28204a1e7de) 4 | - 第一条回复也很经典 5 | 6 | 2. [大白话讲解Promise(三)搞懂jquery中的Promise](https://www.cnblogs.com/lvdabao/p/jquery-deferred.html) 7 | 8 | 参考文章2讲解得十分清楚. -------------------------------------------------------------------------------- /语言和框架/js/JS-void关键字.md: -------------------------------------------------------------------------------- 1 | # JS-void关键字 2 | 3 | 参考文章 4 | 5 | 1. [js中void一个数字干吗用的?](https://segmentfault.com/q/1010000005740703) 6 | 7 | 2. [谈谈Javascript中的void操作符](https://segmentfault.com/a/1190000000474941) 8 | -------------------------------------------------------------------------------- /语言和框架/js/backbone源码分析/1.md: -------------------------------------------------------------------------------- 1 | 以bk 1.3.3为例. 2 | 3 | 整体结构如下 4 | 5 | ```js 6 | (function(factory) { 7 | 8 | })(function(root, Backbone, _, $) { 9 | 10 | }); 11 | ``` 12 | 13 | 这里两组封闭函数, 可以保证内部变量不会污染全局. 关于使用方法及其作用, 我们在第一组函数中打印`factory`参数查看. 14 | 15 | ```js 16 | (function(factory) { 17 | console.log(factory); 18 | })(function(root, Backbone, _, $) { 19 | 20 | }); 21 | ``` 22 | 23 | 其输出如下 24 | 25 | ```js 26 | ƒ (root, Backbone, _, $) { 27 | 28 | } 29 | ``` 30 | 31 | 看到了? 这其实是第二组函数的定义. 我们可以认为这样的结构将第二组函数当作了参数传入了第一组函数. 这样的结构实际上可以简化到如下的程度. 32 | 33 | ```js 34 | (function(factory) { 35 | console.log(factory); 36 | })('i am a param...'); 37 | ``` 38 | 39 | 只不过传入的参数由简单变量变成了一个函数对象. -------------------------------------------------------------------------------- /语言和框架/js/jquery/jquery等待某元素出现后再执行操作[wait].md: -------------------------------------------------------------------------------- 1 | # jquery等待某元素出现后再执行操作[wait] 2 | 3 | 参考文章 4 | 5 | 1. [jQuery下实现等待指定元素加载完毕(可改成纯js版)](https://www.jb51.net/article/39704.htm) 6 | 2. [jquery等待特定元素加载再执行相关函数](https://blog.csdn.net/u010132177/article/details/120434176) 7 | 8 | -------------------------------------------------------------------------------- /语言和框架/js/webpack/ES6.认识.md: -------------------------------------------------------------------------------- 1 | `const`关键字在编译时即确定其地位, 如果在ES6代码中试图修改一个`const`类型变量, 编译会出错. 2 | 3 | `let`关键字在声明局部块变量时, 转换成ES5时的妥协做法是...换个名字, 依然还是全局变量, 于是这样与编译前同名的变量就不同名了, 也就没有冲突了. 4 | -------------------------------------------------------------------------------- /语言和框架/js/严格模式/js严格模式下arguments对象变为参数的静态副本.md: -------------------------------------------------------------------------------- 1 | # js严格模式下arguments对象变为参数的静态副本 2 | 3 | 参考文章 4 | 5 | 1. [js严格模式——arguments变为参数的静态副本](http://blog.csdn.net/yCharlee/article/details/52439973) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-ASCII字符与数字互转.md: -------------------------------------------------------------------------------- 1 | # JS-ASCII字符与数字互转 2 | 3 | 不同于`parseInt()`与`parseFloat()`可以将字符串`"123",`, `"12.3"`转换成`123`, `12.3`这种, 我们希望得到字符`A`在ASCII表中的序号, 也希望能相反地也能够得到结果. 4 | 5 | js提供这样的方法. 6 | 7 | ```js 8 | var char = 'A'; 9 | char.charCodeAt() // 得到65 10 | ``` 11 | 12 | ```js 13 | String.fromCharCode(65) // 得到A 14 | ``` 15 | 16 | ...错了, `charCodeAt()`可编码的其实不只是ASCII表的字符, 貌似还包含了所有utf8的字符(还是unicode来着?) 起码可以得到中文在编码表中的位置, 而且`fromCharCode`可以成功反查. 17 | 18 | ```js 19 | var a = '中' 20 | a.charCodeAt() // 20013 21 | String.fromCharCode(20013) // "中" 22 | ``` 23 | 24 | ------ 25 | 26 | 字符串对象还有一个`charAt(n)`方法, 它的作为是返回目标字符串的第n个字符. 27 | 28 | ```js 29 | var str = 'ABCD'; 30 | str.charAt(0) // "A" 31 | str.charAt(2) // "C" 32 | ``` -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-json序列化与反序列化.md: -------------------------------------------------------------------------------- 1 | # JS-json序列化与反序列化 2 | 3 | : 4 | 5 | 参考文章 6 | 7 | 1. [JS 对象(Object)和字符串(String)互转](http://blog.csdn.net/starrexstar/article/details/8083259/) 8 | 9 | ## 1. JS字典列表和字符串相互转换 10 | 11 | 利用原生JSON对象,将对象转为字符串 12 | 13 | ```js 14 | var jsObj = {}; 15 | jsObj.testArray = [1, 2, 3, 4, 5]; 16 | jsObj.name = 'CSS3'; 17 | jsObj.date = '8 May, 2011'; 18 | var str = JSON.stringify(jsObj); 19 | console.log(str); // {"testArray":[1,2,3,4,5],"name":"CSS3","date":"8 May, 2011"} 20 | ``` 21 | 22 | 从JSON字符串格式化为对象 23 | 24 | ```js 25 | var obj = JSON.parse(str); 26 | console.log(obj); // {testArray: Array(5), name: "CSS3", date: "8 May, 2011"} 27 | ``` 28 | -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-函数自执行的写法.md: -------------------------------------------------------------------------------- 1 | 2 | ```js 3 | (function abc(a){ 4 | console.log(a); 5 | })(2); // 这里传入的2就是匿名函数的形参 6 | ``` 7 | 8 | ```js 9 | var abc = function(a){ 10 | console.log(a); 11 | }(3); 12 | ``` 13 | 14 | ```js 15 | !function abc(a){ 16 | console.log(a); 17 | }(3); 18 | ``` -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-判断对象是否为Array.md: -------------------------------------------------------------------------------- 1 | # JS-判断对象是否为Array 2 | 3 | 参考文章 4 | 5 | 1. [ES5和ES6中,都怎么判断变量是否为数组?](https://www.jianshu.com/p/602de7ce76e7) 6 | -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-字符串操作函数.md: -------------------------------------------------------------------------------- 1 | # JS-字符串操作函数 2 | 3 | 参考文章 4 | 5 | 1. [Node.js ECMAScript6 字符串的扩展函数,字符串的拼接,字符串以...开头/结尾](https://blog.csdn.net/houyanhua1/article/details/80260762) 6 | 7 | 假设有如下字符串 8 | 9 | ```js 10 | var testStr = 'hello world!'; 11 | ``` 12 | 13 | ```js 14 | testStr.startsWith('hello'); // true 是否以...开头 15 | testStr.endsWith('world!'); // true 是否以...结尾 16 | testStr.includes('lo wo'); // true 是否包含 17 | testStr.repeat(3); // "hello world!hello world!hello world!" 将原字符串重复n次并返回 18 | ``` 19 | -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-数字指定长度不足前补零的实现.md: -------------------------------------------------------------------------------- 1 | # JS-数字指定长度不足前补零的实现 2 | 3 | 参考文章 4 | 5 | 1. [JS数字指定长度不足前补零的实现](https://wsj123.iteye.com/blog/2412696) 6 | -------------------------------------------------------------------------------- /语言和框架/js/常用方法/JS-阻塞式sleep实现方法.md: -------------------------------------------------------------------------------- 1 | # JS-阻塞式sleep 2 | 3 | ```js 4 | function sleep(d){ 5 | var t = Date.now(); 6 | while(Date.now - t <= d); 7 | } 8 | // sleep一秒钟 9 | sleep(1000); 10 | ``` -------------------------------------------------------------------------------- /语言和框架/js/新鲜事/CSP内容安全策略.md: -------------------------------------------------------------------------------- 1 | # CSP内容安全策略 2 | 3 | 参考文章 4 | 5 | 1. [Refused to load the script ‘xxx/xxxx.js’ because it violates the following Content Security Policy directive: "script-src ‘self’ blob: filesystem: chrome-extension-resource:"](http://taobao.fm/archives/1905) 6 | 7 | 2. [Chrome Extension 中的 CSP(Content Security Policy) 开发小记](http://div.io/topic/1669?utm_source=tuicool&utm_medium=referral) 8 | 9 | 3. [Content Security Policy (CSP)](https://developer.chrome.com/extensions/contentSecurityPolicy) -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/Html+JS行为详解.md: -------------------------------------------------------------------------------- 1 | # Html+JS行为详解 2 | 3 | 1. 4 | 5 | ``` 6 | 7 | ``` 8 | 点击时无法调用js中的clear()函数, 原因可能是clear是js的关键字(或保留字)冲突, 换一个名称即可 9 | 10 | 2. 11 | 12 | 上传文件时, form标签的method与enctype属性都要写 -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/Jquery组合键捕获.md: -------------------------------------------------------------------------------- 1 | # Jquery组合键捕获 2 | 3 | 参考文章 4 | 5 | 1. [JS监听组合按键](https://www.cnblogs.com/xiaoheimiaoer/p/4716191.html) 6 | 7 | 参考文章1讲得很透彻, 键码, 组合按键都很清楚. -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/浏览器console对象.md: -------------------------------------------------------------------------------- 1 | # 浏览器console对象 2 | 3 | 参考文章 4 | 5 | 1. [Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)](https://segmentfault.com/a/1190000002511877) 6 | 7 | 2. [Console](https://developer.mozilla.org/zh-CN/docs/Web/API/Console) -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/浏览器document对象.md: -------------------------------------------------------------------------------- 1 | # 浏览器document对象 2 | 3 | 参考文章 4 | 5 | 1. [HTML DOM Document 对象](http://www.w3school.com.cn/jsref/dom_obj_document.asp) 6 | 7 | `document.URL`: 可以得到访问当前网站的完整url, 包括请求参数(`?`与`&`)和锚点信息(`#`). 直接设置这个值不会导致网页跳转. 8 | 9 | `document.referrer`: 跳转来源(如果直接在浏览器地址栏输入网址, 则此值为空字符串). 10 | 11 | `document.cookie`: 设置或返回与当前文档有关的所有cookie. 12 | 13 | ## 1. location对象 14 | 15 | > chrome下, `document.location`与`window.location`都是合法的. 16 | 17 | 假设访问如下链接`http://www.redisfans.com/?p=68#1夜火`, 输出document的location对象, 其属性如下. 18 | 19 | 20 | ``` 21 | hash: "#1夜火" 22 | host: "www.redisfans.com" 23 | hostname: "www.redisfans.com" 24 | href: "http://www.redisfans.com/?p=68#1夜火" 25 | origin: "http://www.redisfans.com" 26 | pathname: "/" 27 | port: "" 28 | protocol: "http:" 29 | search: "?p=68" 30 | ``` 31 | 32 | `location.href`: 可以得到浏览器地址栏网址信息, 直接设置这个值会导致浏览器跳转行为. -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/浏览器window对象.md: -------------------------------------------------------------------------------- 1 | # 浏览器window对象 2 | 3 | 参考文章 4 | 5 | 1. [Window 对象](http://www.w3school.com.cn/jsref/dom_obj_window.asp) 6 | 7 | `window.name`: w3c的解释为'设置或返回窗口的名称'. 在chrome中, 设置这个值后在当前标签页生命周期中一直有效, 并且没有跨域问题, 页面刷新或跳转都存有这个值. 但是在其他标签中无法访问. -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/浏览器切换标签页视频暂停播放.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [视频播放时切出页面视频就暂停的问题](https://blog.csdn.net/weixin_43387909/article/details/128222344) 4 | - blur 事件 5 | 2. [浏览器切换网页视频暂停播放](https://juejin.cn/s/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%88%87%E6%8D%A2%E7%BD%91%E9%A1%B5%E8%A7%86%E9%A2%91%E6%9A%82%E5%81%9C%E6%92%AD%E6%94%BE) 6 | - visibilitychange 事件 7 | -------------------------------------------------------------------------------- /语言和框架/js/浏览器对象/获取页面上选中的文字.md: -------------------------------------------------------------------------------- 1 | # 获取页面上选中的文字 2 | 3 | 参考文章 4 | 5 | 1. [用JavaScript获取页面上被选中的文字的技巧](http://www.webhek.com/post/get-selected-text-with-javascript.html) 6 | 7 | ```js 8 | window.getSelection().toString() 9 | ``` -------------------------------------------------------------------------------- /语言和框架/js/语法/JS-in与for...in.md: -------------------------------------------------------------------------------- 1 | # JS-in与for..in 2 | 3 | 参考文章 4 | 5 | 1. [js 关键字 in 的使用方法](http://www.cnblogs.com/fly-xfa/p/5968928.html) 6 | 7 | ## 1. for..in 8 | 9 | `for..in`可以对数组和对象进行遍历(js原生是没有`foreach`操作符的). 10 | 11 | 数组遍历 12 | 13 | ```js 14 | let list = [1, 2, 3, 4]; 15 | for(let idx in list){ 16 | console.log(idx, list[idx]); 17 | } 18 | ``` 19 | 20 | 对象遍历 21 | 22 | ```js 23 | let dict = {a: 1, b: 3, c: 7}; 24 | for(let key in dict){ 25 | console.log(key, dict[key]); 26 | } 27 | ``` 28 | 29 | ## 2. in操作符 30 | 31 | 除了`for..in..`, 单纯的`in`操作符可以用于判断目标对象中是否存在某属性, 不管是直接属性还是原型属性. 32 | 33 | ```js 34 | obj = { 35 | a: 123, 36 | b: 234 37 | } 38 | // {a: 123, b: 234} 39 | 'a' in obj 40 | // true 41 | delete obj.a 42 | // true 43 | 'a' in obj 44 | // false 45 | ``` -------------------------------------------------------------------------------- /语言和框架/js/语法/js-变量提升.md: -------------------------------------------------------------------------------- 1 | ```js 2 | function show(){ 3 | console.log(a); // 123 4 | console.log(b); // undefined 5 | } 6 | 7 | var a = 123; 8 | show(); 9 | var b = 123; 10 | 11 | ``` 12 | -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/nodejs升级.md: -------------------------------------------------------------------------------- 1 | # nodejs升级 2 | 3 | 无需编译新版源码包, 也无需重新`apt`/`yum`覆盖安装. node本身有一个`n`模块(名字真够短的), 用于管理NodeJS版本. 4 | 5 | 安装方法 6 | 7 | ```shell 8 | sudo npm install -g n 9 | ``` 10 | 11 | 之后系统中会出现`n`命令, 不过没有man手册, 使用`n --help`可以查看使用帮助, 用法很明了. 12 | -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/node关于 npm install -g 全局安装的误解.md: -------------------------------------------------------------------------------- 1 | # node关于 npm install -g 全局安装的误解 2 | 3 | 参考文章 4 | 5 | 1. [node关于 npm -g 全局安装的误解](https://www.jianshu.com/p/3e34f29dffba) 6 | 2. [Where does npm install packages?](https://stackoverflow.com/questions/5926672/where-does-npm-install-packages) 7 | 8 | `npm install -g`安装的包, 虽然叫全局包, 但是并不是那种, 所有工程都能引入的全局包. 而是会将二进制放到`/usr/bin/`下, 用来直接执行. 9 | -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/npm, gulp, bower等的联系与区别.md: -------------------------------------------------------------------------------- 1 | # npm, gulp, bower等的联系与区别 2 | 3 | 它们都是nodejs的包管理工具, 包管理工具本质上都提供了编写, 下载, 上传的协议, 其中包括了包的目录结构, 配置文件(作者, 版本等信息)等. 4 | 5 | 然后各自拥有远程仓库, 将包下载到本地后由管理工具决定存放位置, 而包导入与引用的功能由nodejs本身完成, 管理工具只要能让开发者的工程能够简单引入包就可以了. -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/npm包路径[node_modules].md: -------------------------------------------------------------------------------- 1 | # npm包路径 2 | 3 | `npm -g`安装的全局包在如下路径中 4 | 5 | ``` 6 | /usr/lib/node_modules 7 | ``` 8 | -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/npm安装及卸载依赖包.md: -------------------------------------------------------------------------------- 1 | # npm安装及卸载依赖包 2 | 3 | 参考文章 4 | 5 | 1. [npm install 安装某个指定的版本](https://blog.csdn.net/idomyway/article/details/80601864) 6 | 7 | 2. [npm全局模块卸载及默认安装目录修改](https://blog.csdn.net/baidu_28479651/article/details/53790550) 8 | 9 | ## 安装指定版本的包 10 | 11 | ``` 12 | npm install webpack@1.0.0 13 | npm install webpack@1.x.x 14 | ``` 15 | 16 | ## 卸载全局包 17 | 18 | 有的时候我们把node的一些工具命令安装在了全局, 比如webpack, 卸载的时候就不能单纯地删除`node_modules`目录了, 这时可以使用`npm uninstall -g webpack`完成卸载. 19 | -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/windows下的npm设置.md: -------------------------------------------------------------------------------- 1 | # Windows下的npm设置 2 | 3 | 参考文章 4 | 5 | 1. [设置Nodejs NPM全局路径](http://blog.csdn.net/carechere/article/details/51279789) 6 | 7 | 2. [nodejs 中的 NODE_PATH](http://www.cnblogs.com/zxktxj/p/5051831.html) 8 | 9 | 我们想设置的, 无非是两点: 全局包路径, 源. 10 | 11 | 全局包路径默认在`C:\Users\general\AppData\Roaming\npm\node_modules`, `npm install -g xxx`时可以验证. 12 | 13 | 好像在3个配置文件 14 | 15 | 1. `C:\Users\general\AppData\Roaming\npm\etc\npmrc` 不过好像没用. 16 | 17 | 2. `C:\Users\.npmrc` 可用, 但不想用 18 | 19 | 3. node安装路径下的`node_modules\npm\npmrc` 也可用 20 | 21 | 在其中定义`registry`, `cache`字段, 不难理解. 22 | 23 | 另外一个是`prefix`, 它的值加上`node_modules`得到的路径就是全局包的安装路径. 24 | 25 | > cmd中用`npm config edit/set`命令操作的就是第2个配置文件...没什么意思 26 | 27 | 但是, 安装了却无法调用(如会找不到`cnpm`命令), 也没办法在node文件或命令行中用`require`导入. 这是因为除了`node.exe`所在的路径要添加到PATH变量为, 还需要再添加一个`NODE_PATH`变量, 其值为npm的全局包路径, 即`prefix`值 + `node_modules`. 然后问题就都解决了. 28 | -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/问题处理/npm build时Killed.md: -------------------------------------------------------------------------------- 1 | # npm build时Killed 2 | 3 | 参考文章 4 | 5 | 1. [`npm install` ends with “Killed”](https://stackoverflow.com/questions/38127667/npm-install-ends-with-killed) 6 | 7 | 在低配阿里云服务器(1核1G)上执行`npm build`编译打包vue工程, 显示被killed掉了. 8 | 9 | 参考文章1中指出是因为内存不足, 且未设置swap的原因. 10 | 11 | 用`free`查了下, 果然swap空间为0, 后来手动创建了1G的swap, 再次`build`, 还是不行, 而且swap空间占用为0. 12 | 13 | 然后查看`vm.swappiness`内核参数, 其值为0, linux默认此值为60才对, 修改后再次尝试`build`成功. -------------------------------------------------------------------------------- /语言和框架/nodejs/包管理/问题处理/npm安装软件包失败-CERT_UNTRUSTED.md: -------------------------------------------------------------------------------- 1 | # npm安装软件包失败-CERT_UNTRUSTED 2 | 3 | 参考文章 4 | 5 | 1. [npm 设置淘宝的npm源后更新包提示证书错误](https://segmentfault.com/q/1010000005079915) 6 | 7 | npm安装第三方包失败, 查看它提供的日志时找到`Error: CERT_UNTRUSTED`错误, 应该是一种证书错误. 8 | 9 | 按照参考文章中[dreamstu](https://segmentfault.com/u/dreamstu)的回答, 执行`npm config set strict-ssl false`可以安装成功(如果已经有`node_modules`目录最好删掉重新安装). -------------------------------------------------------------------------------- /语言和框架/nodejs/标准库/nodejs-cluster守护进程.md: -------------------------------------------------------------------------------- 1 | # NodeJS-守护进程 2 | 3 | 参考文章 4 | 5 | 1. [nodejs如何以守护进程运行啊?](http://cnodejs.org/topic/4f1d05b4817ae4105c033e38) 6 | 7 | 2. [Nodejs编写守护进程](https://ashan.org/archives/917) 8 | 9 | 3. [nodejs写自己的守护进程 防止进程死掉](http://cnodejs.org/topic/5218d6b5bee8d3cb12540653) 10 | 11 | ```js 12 | var cluster = require('cluster'); 13 | if (cluster.isMaster) { 14 | //Fork a worker to run the main program 15 | for (var i = 0; i < 2; i++) var worker = cluster.fork(); 16 | } else { 17 | //Run main program 18 | require('./app.js'); 19 | console.log('worker is running'); 20 | } 21 | 22 | cluster.on('death', function(worker) { 23 | //If the worker died, fork a new worker 24 | console.log('worker ' + worker.pid + ' died. restart...'); 25 | cluster.fork(); 26 | }); 27 | ``` 28 | -------------------------------------------------------------------------------- /语言和框架/nodejs/标准库/nodejs-内置变量.md: -------------------------------------------------------------------------------- 1 | # nodejs-内置变量 2 | 3 | `__dirname`: 当前文件所在路径 -------------------------------------------------------------------------------- /语言和框架/nodejs/第三方库/mongoose-ORM框架.md: -------------------------------------------------------------------------------- 1 | # mongoose-ORM框架 2 | 3 | 参考文章 4 | 5 | 1. [mongoose之Model相关的操作](https://www.jianshu.com/p/038c586c1449) -------------------------------------------------------------------------------- /语言和框架/nodejs/第三方库/nodemon-监测文件变动自动重启服务.md: -------------------------------------------------------------------------------- 1 | # nodemon-监测文件变动自动重启服务 2 | 3 | 参考文章 4 | 5 | 1. [](http://blog.csdn.net/haigenwong/article/details/48732267) 6 | 7 | 开发node应用时, 一但应用已经启动了, 这个时候如果你修改了服务端的文件, 那么要使这个修改起作用, 必须手动停止服务然后再重新启动. 这在开发过程中无疑是很烦人的一件事, 最好是有一个能够监控所有变动文件的脚本, 一单发现文件有变动则立即重启服务, 重新加载刚刚修改过的文件. 这里推荐一个: nodemon. 8 | 9 | 首先为了是这个命令全局可用, 最好我们进行全局安装: 10 | 11 | ```shell 12 | npm install -g nodemon 13 | ``` 14 | 15 | 然后进入项目根目录: 16 | 17 | ```shell 18 | nodemon server.js 19 | ``` 20 | 21 | 这样就可以启动应用了, 并且在文件有变化之后会自动重启服务. 22 | -------------------------------------------------------------------------------- /语言和框架/nodejs/语法/Async&Await替代Promise的6个理由.md: -------------------------------------------------------------------------------- 1 | # Async&Await替代Promise的6个理由 2 | 3 | 参考文章 4 | 5 | 1. [Async/Await替代Promise的6个理由](https://cnodejs.org/topic/58e4914e43ee7e7106c13541) 6 | 7 | 2. [重构:从Promise到Async/Await](https://cnodejs.org/topic/5a30958dd92f2f5b185acdfa) 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/nodejs/语法/Promise语法.md: -------------------------------------------------------------------------------- 1 | # Promise语法 2 | 3 | 参考文章 4 | 5 | 1. [在非阻塞IO下的nodejs下的同步并行 ES6的 promise 从入门深入(一)](https://segmentfault.com/a/1190000005016548) 6 | 7 | 2. [nodejs异步控制「co、async、Q 、『es6原生promise』、then.js、bluebird」有何优缺点?最爱哪个?哪个简单?](https://www.zhihu.com/question/25413141) -------------------------------------------------------------------------------- /语言和框架/nodejs/语法/nodejs-模块导出exports与module.exports的区别.md: -------------------------------------------------------------------------------- 1 | # nodejs-模块导出exports与module.exports的区别 2 | 3 | 参考文章 4 | 5 | 1. [对module.exports和exports的一些理解](https://www.cnblogs.com/wbxjiayou/p/5767632.html) 6 | 7 | ## 1. exports 8 | 9 | `src.js`文件 10 | 11 | ```js 12 | var User = { 13 | name: 'general', 14 | age: 21 15 | }; 16 | exports.user = User; 17 | ``` 18 | 19 | 另外的文件在`require`这个文件后, `User`对象的使用方法如下. 20 | 21 | ```js 22 | var src = require('./src'); 23 | var User = src.user; // 注意这里, src后要跟一个`user`属性才能取到src文件中的User对象. 24 | ``` 25 | 26 | ## 2. module.exports 27 | 28 | 同样的场景 29 | 30 | ```js 31 | var User = { 32 | name: 'general', 33 | age: 21 34 | }; 35 | module.exports = User; 36 | ``` 37 | 38 | 这种导出方式下, 其他文件引用`User`对象的方法如下. 39 | 40 | ```js 41 | var User = require('./src'); // 这里就可以直接使用了. 42 | ``` -------------------------------------------------------------------------------- /语言和框架/php/Wordpress.md: -------------------------------------------------------------------------------- 1 | Crayon Syntax Highlighter 代码高亮插件 2 | akina-pro-v1.03 3 | iDevise-v2.0.0 4 | Snape 5 | simple 6 | WP-Editor.MD 7 | wp-markdown-editor -------------------------------------------------------------------------------- /语言和框架/powershell/netsh网络工具.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/语言和框架/powershell/netsh网络工具.md -------------------------------------------------------------------------------- /语言和框架/powershell/powershell工具集.md: -------------------------------------------------------------------------------- 1 | # powershell工具集 2 | 3 | ## 1. powercat 4 | 5 | powershell可实现同linux下`netcat`相同功能的工具, 叫做[powercat](https://github.com/besimorhino/powercat) 6 | 7 | 使用方法同标准nc. 8 | 9 | 下载源码后命令行中执行`. .\powercat.ps1 选项参数`. 10 | 11 | 或者直接执行. 12 | 13 | ```ps1 14 | IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1') 15 | powercat -l -p 8000 16 | ``` 17 | 18 | 在当前命令行会话中有效, 可以直接进行端口监听. -------------------------------------------------------------------------------- /语言和框架/powershell/powershell配色方案.md: -------------------------------------------------------------------------------- 1 | # powershell配色方案 2 | 3 | 参考文章 4 | 5 | 1. [告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始](https://sspai.com/post/52868) 6 | - 第三方终端: Fluent Terminal, Hyper, Terminus 7 | -------------------------------------------------------------------------------- /语言和框架/powershell/常用操作/Powershell输出日志到文件.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [PowerShell中使用Out-File把字符串或运行结果保存到文件的方法](http://www.jb51.net/article/53187.htm) -------------------------------------------------------------------------------- /语言和框架/powershell/常用操作/powershell获取系统信息(CPU, 内存, 硬盘等).md: -------------------------------------------------------------------------------- 1 | # powershell获取系统信息(CPU, 内存, 硬盘等) 2 | 3 | 参考文章 4 | 5 | 1. [PowerShell巡检主机获取CPU占用、内存使用、硬盘情况的脚本](https://blog.csdn.net/sinat_28371057/article/details/91376741) 6 | - `Get-WmiObject` 函数的应用. 7 | - `get_ip` 函数返回一个点分十进制的字符串, 但是在一台主机上存在多个ip时, 返回的值不一定是我们想要的. 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/powershell/常用操作/powershell调整电脑音量.md: -------------------------------------------------------------------------------- 1 | # powershell调整电脑音量 2 | 3 | 参考文章 4 | 5 | 1. [powershell脚本设置电脑音量](https://blog.csdn.net/yolo3/article/details/81118320) 6 | 2. [PowerShell 技能连载 - 控制音量(静音和音量)](https://blog.vichamp.com/2017/08/23/controlling-audio-mute-and-volume/) 7 | - 亲测可用 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/powershell/引言.md: -------------------------------------------------------------------------------- 1 | # 引言 2 | 3 | 参考文章 4 | 5 | 1. [爱上PowerShell](https://www.cnblogs.com/richieyang/p/6287685.html) 6 | 7 | 2. [IT之家学院:强大到没朋友,Win10 PowerShell简介(1)](https://www.ithome.com/html/win10/315277.htm) 8 | 9 | powershell的强大之处 -------------------------------------------------------------------------------- /语言和框架/powershell/语法/Powershell数组.md: -------------------------------------------------------------------------------- 1 | # Powershell数组 2 | 3 | 参考文章 4 | 5 | 1. [PowerShell 数组(Array)](http://blog.csdn.net/kk185800961/article/details/48829215) 6 | 7 | 2. [Powershell创建数组 2](http://www.pstips.net/powershell-creating-new-arrays.html) 8 | 9 | ## 1. 单行数组 10 | 11 | ## 2. 多行数组 -------------------------------------------------------------------------------- /语言和框架/powershell/语法/Powershell日期.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/generals-space/note/026bbac0603db192831c92c4e8c7db1dcf6bef53/语言和框架/powershell/语法/Powershell日期.md -------------------------------------------------------------------------------- /语言和框架/powershell/语法/powershell引入公共模块.md: -------------------------------------------------------------------------------- 1 | # powershell引入公共模块 2 | 3 | 参考文章 4 | 5 | 1. [PowerShell如何使用自定义公共函数](https://blog.csdn.net/flyliuweisky547/article/details/18565705) 6 | 7 | 网上一些文章说要在指定指定目录(`~/Documents/WindowsPowerShell/Modules`)创建子模块, 而且还要按照指定格式写模块简介, 总之很麻烦. 8 | 9 | 其实我只是想实现类似bash的`source`命令, 或是python的`import..from..`, 能把自己编写的公共模块独立出来. 10 | 11 | 参考文章1中给出了两种方法, 都有效. 12 | 13 | ```ps1 14 | ## 第一种是点号 . 15 | . ~\Documents\WindowsPowerShell\toolkit.ps1 16 | ## 第二种是用`Import-Module` 17 | Import-Module ~\Documents\WindowsPowerShell\toolkit.ps1 18 | ``` 19 | 20 | > 需要注意的是, 模块路径需要写成绝对的, 相对路径的话会出错. 21 | -------------------------------------------------------------------------------- /语言和框架/powershell/语法/powershell管道计数measure.md: -------------------------------------------------------------------------------- 1 | # powershell管道计数measure 2 | 3 | 参考文章 4 | 5 | 1. [如何计数PowerShell中的对象?](https://codeday.me/bug/20170617/28868.html) 6 | 7 | ```ps1 8 | get-alias | measure 9 | ``` 10 | 11 | `measure`是`Measure-Object`的别名. 12 | -------------------------------------------------------------------------------- /语言和框架/python/内存调试与优化/Python-gc垃圾回收.md: -------------------------------------------------------------------------------- 1 | `gc.set_threshold()` 2 | 3 | `gc.set_debug(flags)` 4 |   - `gc.DEBUG_COLLETABLE`: 打印可以被垃圾回收器回收的对象 5 |   - `gc.DEBUG_UNCOLLETABLE`: 打印无法被垃圾回收器回收的对象,即定义了__del__的对象 6 |   - `gc.DEBUG_SAVEALL`: 当设置了这个选项,可以被拉起回收的对象不会被真正销毁(free),而是放到gc.garbage这个列表里面,利于在线上查找问题 7 | -------------------------------------------------------------------------------- /语言和框架/python/内存调试与优化/Python-gc调优.md: -------------------------------------------------------------------------------- 1 | # Python-gc调优 2 | 3 | 参考文章 4 | 5 | 1. [Python内存管理机制及优化简析](http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html) 6 | 7 | 参考文章1给出了3种避免因垃圾回收导致程序的卡顿的调优手段 8 | 9 | ## 1. 手动垃圾回收 10 | 11 | 对Python的垃圾回收进行调优的一个最简单的手段便是关闭自动回收, 根据情况手动触发. 例如在用Python开发游戏时, 可以在一局游戏的开始关闭GC, 然后在该局游戏结束后手动调用一次GC清理内存, 这样能完全避免在游戏过程中因GC造成卡顿. 但是缺点是在游戏过程中可能因为内存溢出导致游戏崩溃. 12 | 13 | ...没做过游戏, 起码目前我没见过手动进行垃圾回收的工程项目. 14 | 15 | ## 2. 调整垃圾回收阈值 16 | 17 | ## 3. 避免循环引用 18 | 19 | `gc`的一个重要用途就是清理因为代码中出现循环引用导致常规的引用计数不能清除的对象, 要减少`gc`的出现当然可以通过减少代码中的循环引用来完成. 20 | 21 | ### 手动解循环引用 22 | 23 | 这个操作有点傻, 出现了循环引用需要手动释放...还不如教我怎么查询哪里出现了循环引用呢... 24 | 25 | ### 弱引用 26 | 27 | 使用python自带的`weakref`库 -------------------------------------------------------------------------------- /语言和框架/python/内存调试与优化/Python内存泄漏.md: -------------------------------------------------------------------------------- 1 | # Python内存泄漏 2 | 3 | 参考文章 4 | 5 | 6 | 2. [python 内存泄露的诊断](http://rstevens.iteye.com/blog/828565) 7 | 8 | 3. [Python内存泄漏问题查找](http://blog.csdn.net/i2cbus/article/details/20155273) 9 | -------------------------------------------------------------------------------- /语言和框架/python/内存调试与优化/Python内存调试.md: -------------------------------------------------------------------------------- 1 | # Python内存调试 2 | 3 | 参考文章 4 | 5 | 1. [python之内存调试](https://blog.csdn.net/lj1404536198/article/details/80900549) -------------------------------------------------------------------------------- /语言和框架/python/内存调试与优化/Python性能分析-cProfile.md: -------------------------------------------------------------------------------- 1 | # Python性能分析工具-cProfile 2 | 3 | 参考文章 4 | 5 | 1. [《Python高性能编程》——2.6 使用cProfile模块](https://yq.aliyun.com/articles/96808/) 6 | 7 | 2. [使用cProfile分析Python程序性能](http://blog.csdn.net/asukasmallriver/article/details/74356771) 8 | 9 | 3. [利用PyCharm的Profile工具进行Python性能分析](http://blog.csdn.net/xiemanr/article/details/69398057) -------------------------------------------------------------------------------- /语言和框架/python/包管理/Python包安装错误.md: -------------------------------------------------------------------------------- 1 | # Python包安装错误 2 | 3 | ## 1. 4 | 5 | ```log 6 | File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve 7 | raise DistributionNotFound(req) 8 | pkg_resources.DistributionNotFound: meld3>=0.6.5 9 | ``` 10 | 11 | 情景描述 12 | 13 | 使用`pip`安装`supervisor`, 执行`supervisord -h`时报上述错误(实际上, `supervisor`附带的3个命令`supervisord`, `supervisorctl`和`echo_supervisord_conf`都会报这个错误). 14 | 15 | ``` 16 | $ pip freeze | grep meld3 17 | meld3==1.0.2 18 | ``` 19 | 20 | 原因分析与解决办法 21 | 22 | 貌似是因为pip形式安装的`meld3`有问题, 在python官网的pypi上下载[meld3-1.0.2.tar.gz](https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz#md5=3ccc78cd79cffd63a751ad7684c02c91), 然后pip安装这个本地包能够解决. 23 | 24 | 或许可以尝试使用`yum`安装这个包`python-meld3`. 25 | -------------------------------------------------------------------------------- /语言和框架/python/包管理/Win下安装scrapy和gevent.md: -------------------------------------------------------------------------------- 1 | # Win下安装scrapy和gevent 2 | 3 | 1. [Unofficial Windows Binaries for Python Extension Packages](https://www.lfd.uci.edu/~gohlke/pythonlibs/#gevent) 4 | 5 | scrapy和gevent在windows下使用pip安装时需要安装`Microsoft xxx C++`组件, 但是C++组件太大了, 可以访问参考文章1中的网址. 其中封装了多种`whl`包, 可以使用`pip install xxx.whl`轻松安装使用. -------------------------------------------------------------------------------- /语言和框架/python/包管理/问题处理/Python相对路径导入-attempted relative import with no known parent package.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [解决“attempted relative import with no known parent package“的错误](https://blog.csdn.net/lianshaohua/article/details/109724221) 4 | - PyCharm 5 | 2. [How to correctly set PYTHONPATH for Visual Studio Code](https://stackoverflow.com/questions/53653083/how-to-correctly-set-pythonpath-for-visual-studio-code) 6 | - VSCode 7 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python-input与raw_input.md: -------------------------------------------------------------------------------- 1 | # Python-input与raw_input 2 | 3 | 参考文章 4 | 5 | 1. [Python input() 函数](https://www.runoob.com/python/python-func-input.html) 6 | 7 | 1. python2同时拥有`input()`和`raw_input()`两个函数; 8 | 2. python3只有`input()`(功能上将两者进行了合并); 9 | 10 | python2中没有特殊情况的话一律建议使用`raw_input()`; 11 | 12 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python-打印异常信息traceback.md: -------------------------------------------------------------------------------- 1 | # Python-打印异常信息traceback 2 | 3 | 参考文章 4 | 5 | 1. [Python中获取异常(Exception)信息](https://www.cnblogs.com/klchang/p/4635040.html) 6 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python-自定义class类型名称.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [how to print type of a variable without stuff](https://www.reddit.com/r/learnpython/comments/xy6nu1/how_to_print_type_of_a_variable_without_class/) 4 | 2. [Convert a python 'type' object to a string](https://stackoverflow.com/questions/5008828/convert-a-python-type-object-to-a-string) 5 | 3. [How to get type from Python](https://stackoverflow.com/questions/71294289/how-to-get-type-from-class-int-python) 6 | 7 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python-进程控制[exec fork wait].md: -------------------------------------------------------------------------------- 1 | # Python-进程控制[exec fork wait] 2 | 3 | 参考文章 4 | 5 | 1. [python os模块进程函数](http://www.cnblogs.com/nisen/p/6060355.html) 6 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python创建指定长度的列表.md: -------------------------------------------------------------------------------- 1 | # Python创建指定长度的列表 2 | 3 | 参考文章 4 | 5 | 1. [Python中预先初始化列表内容和长度](https://blog.csdn.net/songyunli1111/article/details/79476983) 6 | 2. [python里快速创建指定大小的list的方法?](https://bbs.pku.edu.cn/v2/post-read.php?bid=1360&threadid=14398267) 7 | - 推荐看看这篇文章, 对不同的创建方法有一个理性的比较 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python字符串查找函数find与index.md: -------------------------------------------------------------------------------- 1 | # Python字符串查找函数find与index 2 | 3 | 参考文章 4 | 5 | 1. [python字符串字串查找 find和index方法](http://outofmemory.cn/code-snippet/6682/python-string-find-or-index) 6 | 7 | python 字符串查找有4个方法 8 | 9 | 1. find 10 | 2. index 11 | 3. rfind 12 | 4. rindex 13 | 14 | ## 1. find()/rfind() 15 | 16 | 查找子字符串, 若找到返回从0开始的下标值, 若找不到返回-1 17 | 18 | ```py 19 | info = 'abca' 20 | print info.find('a') ##从下标0开始, 查找在字符串里第一个出现的子串, 返回0 21 | 22 | info = 'abca' 23 | print info.find('a', 1) ##从下标1开始, 查找在字符串里第一个出现的子串: 返回结果3 24 | 25 | info = 'abca' 26 | print info.find('333') ##返回-1, 查找不到返回-1 27 | ``` 28 | 29 | ## 2. index()/rindex 30 | 31 | python 的index方法是在字符串里查找子串第一次出现的位置, 类似字符串的find方法, 不过比find方法更好的是, 如果查找不到子串, 会抛出异常, 而不是返回-1 32 | 33 | ```py 34 | info = 'abca' 35 | print info.index('a') 36 | print info.index('33') 37 | ``` 38 | 39 | rfind和rindex方法用法和上面一样, 只是从字符串的末尾开始查找。 -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python字节操作函数.md: -------------------------------------------------------------------------------- 1 | # Python操作函数 2 | 3 | `chr(int)` 4 | 5 | 参数int为0-255的整型数值. 它将数值转化成 -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python执行shell命令.5.subprocess.Popen读取实时输出.md: -------------------------------------------------------------------------------- 1 | # Python执行shell命令.5.subprocess.Popen读取实时输出 2 | 3 | 参考文章 4 | 5 | 1. [python获取实时命令行输出](https://www.cnblogs.com/pfeiliu/p/14584627.html) 6 | 7 | 通过`Popen()`执行的shell命令, 只有在其执行完成后才可以读取其`stdout`和`stderr`, 否则执行`subproc.stdout.read()`会被阻塞住. 8 | 9 | 但有些命令就是要实时读取其输出的, 要实现这个目的, 可以使用`iter`迭代器完成, 见参考文章1. 10 | 11 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/Python自定义模块搜索路径.md: -------------------------------------------------------------------------------- 1 | # 自定义模块搜索路径 2 | 3 | 当我们试图加载一个模块时,python会在指定的路径下搜索同名的.py文件,如果找不到,就会报错: 4 | 5 | ```py 6 | >>> import mymodule 7 | Traceback (most recent call last): 8 | File "", line 1, in 9 | ImportError: No module named mymodule 10 | ``` 11 | 12 | 默认情况下,Python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径存放在`sys`模块的`path`变量: 13 | 14 | ```py 15 | >>> import sys 16 | >>> sys.path 17 | ['', '/Library/Python/2.7/site-packages/pycrypto-2.6.1-py2.7-macosx-10.9-intel.egg', '/Library/Python/2.7/site-packages/PIL-1.1.7-py2.7-macosx-10.9-intel.egg', ...] 18 | ``` 19 | 20 | 如果要添加自己的搜索目录,有两种方法: 21 | 22 | 一是直接修改`sys.path`,添加要搜索的目录: 23 | 24 | ```py 25 | >>> import sys 26 | >>> sys.path.append('/Users/michael/my_py_scripts') 27 | ``` 28 | 29 | 这种方法是在运行时修改,运行结束后失效。 30 | 31 | 二是设置环境变量`PYTHONPATH`,该环境变量的内容会自动添加到模块搜索路径中。设置方式与设置PATH环境变量类似。注意:**只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响**。 32 | -------------------------------------------------------------------------------- /语言和框架/python/常用操作/python3-venv虚拟环境.md: -------------------------------------------------------------------------------- 1 | # python3-venv虚拟环境 2 | 3 | `python2`有`virtualenv`, 不过需要`pip`安装. 4 | 5 | `python3`内置了`venv`模块, 可以直接用来创建虚拟环境. 6 | 7 | ``` 8 | python3 -m venv xxx 9 | ``` 10 | -------------------------------------------------------------------------------- /语言和框架/python/并发/多线程threading库使用.6.获取线程id[thread id inent].md: -------------------------------------------------------------------------------- 1 | # 多线程threading库使用.6.获取线程id[thread id inent] 2 | 3 | 参考文章 4 | 5 | 1. [python下使用ctypes获取threading线程id](http://xiaorui.cc/archives/3017) 6 | 2. [How to obtain a Thread id in Python?](https://stackoverflow.com/questions/919897/how-to-obtain-a-thread-id-in-python) 7 | 8 | `threading.Thread`实例对象的的`name`跟`ident`属性, 只是个标识, 与`ps -efT`命令查到的线程id是两码事. 9 | 10 | 11 | -------------------------------------------------------------------------------- /语言和框架/python/并发/多进程multiprocessing库.md: -------------------------------------------------------------------------------- 1 | # 多进程multiprocessing库 2 | 3 | 参考文章 4 | 5 | 1. [Python标准库10 多进程初步 (multiprocessing包)](https://www.cnblogs.com/vamei/archive/2012/10/12/2721484.html) -------------------------------------------------------------------------------- /语言和框架/python/标准库/Python-StringIO与BytesIO.md: -------------------------------------------------------------------------------- 1 | # Python-StringIO与BytesIO 2 | 3 | 参考文章 4 | 5 | 1. [skeyes/proxy-pool](https://gitee.com/skeyes/proxy-pool/blob/4a5dad66f299d433b58aadd48eb19afc27e5b55d/pspider/docs/%E5%9C%A8%E7%BA%BF%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB.md) 6 | - 自己的小项目 7 | 2. [Python3 IO](https://www.cnblogs.com/284628487a/p/5590692.html) 8 | 3. [StringIO和BytesIO](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431918785710e86a1a120ce04925bae155012c7fc71e000) 9 | - 廖雪峰老师的博客 10 | 11 | 在`python2`中, `StringIO`与`io`同属于标准库, `BytesIO`则在`io`库中; 12 | 13 | 在`python3`中, `StringIO`与`BytesIO`都被划分到`io`标准库中了; 14 | 15 | `StringIO`与`BytesIO`就类似 golang 中的`Buffer`一样, 使用场景的话...参考文章1中, `PIL.Image()`需要使用这样的 Buffer 对象. 16 | 17 | 其他的我还真没见过. 18 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/Python-argparse命令行参数解析.md: -------------------------------------------------------------------------------- 1 | # Python-argparse命令行参数解析 2 | 3 | 突然发现 python 的命令行参数解析库的文档已经有 3 篇了... 4 | 5 | ```py 6 | import argparse 7 | 8 | #默认添加-h/--he1p 选项显示参数列表及使用方法 9 | #长选项中的中划线默认会被替换成下划线,即在help列表中选项形式,以及最终args 结果的成员变量都是下划线,##所以不如直接声明成下划线... 10 | 11 | parser = argparse.ArgumentParser(description = 'setup password for es cluster') 12 | ## 参数需要使用下划线, 不要使用中划线. 即使这里定义了`--user-name`形式的参数, 13 | ## 在使用 -h/--help 查询使用帮助时, 打印出来的也将是`--user_name`, 14 | ## 同时, 下面生成的 args 字典中也只会有 user_name 成员而没有 user-name 成员. 15 | parser.add_argument('-e', '--elastic', default = 'changeme') 16 | 17 | ## args中包含了解析到的所有参数, 为字典类型. 18 | ## 其中的 key 都是 `add_argument`中定义的长选项, 没有短选项. 19 | ## 即 args.elastic 存在, 但 args.e 不存在. 20 | args = parser.parse_ args() 21 | ## print(args) 22 | ``` 23 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/Python-os模块用户相关操作.md: -------------------------------------------------------------------------------- 1 | # Python标准库-os模块用户相关操作 2 | 3 | ## 1. 用户相关 4 | 5 | 6 | os.getuid(): 获取执行当前程序的用户uid 7 | 8 | os.setuid(uid): 设置当前程序的启动用户为uid所表示的用户, uid只能是整型数值 9 | 10 | 11 | 示例: 12 | 13 | ```py 14 | #!/usr/bin/env python 15 | #!coding:utf-8 16 | import os 17 | current_uid = os.getuid() 18 | print('当前启动用户uid为: %s' % current_uid) 19 | 20 | ``` 21 | 22 | ## 2. 组相关 23 | 24 | `os.setgroups(grouplist)`: 设置进程的访问组列表, grouplist必须是一个列表类型变量 25 | 26 | `os.setgid(gid)`: 设置当前程序的启动用户组, gid为整型数值 27 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/json.dumps使用[中文 unicode 缩进].md: -------------------------------------------------------------------------------- 1 | # json.dumps使用[中文 unicode 缩进] 2 | 3 | 参考文章 4 | 5 | 1. [python json.dumps 中文编码](https://www.cnblogs.com/shiju/p/9511916.html) 6 | 7 | `json.dump(object)`是输出到文件, 而`json.dumps(object)`是输出为字符串. 8 | 9 | ## 中文 10 | 11 | ```py 12 | >>> import json 13 | >>> dic = {'country': '中国'} 14 | >>> json.dumps(dic) 15 | '{"country": "\\u4e2d\\u56fd"}' 16 | >>> json.dumps(dic, ensure_ascii=False) 17 | '{"country": "中国"}' 18 | ``` 19 | 20 | ## 缩进 pretty 21 | 22 | ```py 23 | json.dumps(dic, ensure_ascii=False, indent=4) 24 | ``` 25 | 26 | 这个在交互式命令行看不出来, 在程序里可以使用. 27 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/json.load使用[读写模式].md: -------------------------------------------------------------------------------- 1 | # json.load使用[读写模式] 2 | 3 | 参考文章 4 | 5 | 1. [Python学习笔记之json.dump和json.load](https://www.cnblogs.com/rainights/p/11771558.html) 6 | - 注意`open()`函数的文件打开模式 7 | 8 | ```py 9 | data_file = open('data.json', 'r') 10 | ## data_file = open('data.json', 'r+') 11 | data = json.load(data_file) 12 | logger.info(data) 13 | ``` 14 | 15 | 使用`json.load()`时, 文件打开模式可以选`r`, `r+`, 即只读模式, 不能使用`rw`, `rw+`这样的读写模式. 16 | 17 | 以`a+`, `w+`这样的读写模式打开时, 会报如下异常. 18 | 19 | ``` 20 | json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 21 | ``` 22 | 23 | 而使用`rw`, `rw+`这样的模式打开时, 则会报如下异常 24 | 25 | ``` 26 | ValueError: must have exactly one of create/read/write/append mode 27 | ``` 28 | 29 | ------ 30 | 31 | 同理, 写文件的时候... 32 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/python(2和3)-获取当前源文件所在目录路径.md: -------------------------------------------------------------------------------- 1 | # python(2和3)-获取当前源文件所在目录路径 2 | 3 | 参考文章 4 | 5 | 1. [python获取当前文件路径以及父文件路径](https://www.cnblogs.com/yajing-zh/p/6807968.html) 6 | - python2 7 | 8 | python2 9 | 10 | ```py 11 | import os 12 | 13 | curr_dir = os.path.abspath(os.path.dirname(__file__)) 14 | target_file = 15 | ``` 16 | 17 | python3 18 | 19 | ```py 20 | from pathlib import Path 21 | 22 | currDir = Path.cwd().joinpath(Path(__file__).parent) 23 | target_file = 24 | ``` 25 | 26 | > 获取用户执行脚本时所在的目录可以使用`os.getcwd()`函数, 具体可见[note-cloud]()仓库的`k2file.py`脚本. 27 | 28 | 这里的`currDir`是`Path`类型, 需要使用`str()`函数转换成字符串. 29 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/urllib网络请求/Python-2与3网络请求库api对比.md: -------------------------------------------------------------------------------- 1 | # Python-2与3网络请求库api对比 2 | 3 | 参考文章 4 | 5 | 1. [Python3中urllib使用介绍](https://blog.csdn.net/duxu24/article/details/77414298) 6 | 7 | | python2 | python3 | 8 | | :-------------------- | :----------------------- | 9 | | `urllib2` | `urllib.request` | 10 | | `urllib.quote` | `urllib.request.quote` | 11 | | `urlparse` | `urllib.parse` | 12 | | `urlopen` | `urllib.request.urlopen` | 13 | | `urlencode` | `urllib.parse.urlencode` | 14 | | `urllib2.Request` | `urllib.request.Request` | 15 | | `cookielib.CookieJar` | `http.CookieJar` | 16 | 17 | > 注意: python3 `urllib`的`request`包导入方式应为`import urllib.request`, 而`from urllib import request`这种会出错, 显示找不到`request`属性. 18 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/文件目录/Python-判断文件是否存在[exists].md: -------------------------------------------------------------------------------- 1 | # Python-判断文件是否存在 2 | 3 | 参考文章 4 | 5 | 1. [Python判断文件是否存在的三种方法](https://www.cnblogs.com/jhao/p/7243043.html) 6 | 7 | 8 | 1. `pathlib.Path("path/file").exists()`: python3, 存在则为`True`, 否则为`False`. 9 | 2. `os.path.exists('path/file')`: python2, python3, 存在则为`True`, 否则为`False`. 10 | 11 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/文件目录/Python2-os.path目录及文件操作.md: -------------------------------------------------------------------------------- 1 | 2 | `os.path.getsize(path)`: 返回文件大小(单位为**字节**),如果文件不存在就返回错误. 3 | 4 | `os.path.exists(path)`: 判断`path`表示的路径是否存在. 5 | 6 | `os.path.isfile(path)`: 判断是否为文件. 7 | 8 | `os.path.isdir(path)`: 判断是否为文件. 9 | 10 | ------ 11 | 12 | ## 文件操作 13 | 14 | `os.remove(file_path)`: 删除`file_path`所表示的文件 15 | 16 | `os.removedirs(dir_path)`: 删除`file_path`所表示的目录, 但删除非空目录不好使 17 | 18 | `os.makedirs(path)`: 创建空目录 19 | 20 | `shutil.copyfile(src, dst)`: 拷贝文件, `src`和`dst`都是(可包含路径的)文件名. 不可以是目录, 否则会报错. 21 | 22 | `shutil.rmtree(path)`: 可删除非空目录, 即递归删除 23 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/文件目录/Python3-pathlib目录及文件操作.md: -------------------------------------------------------------------------------- 1 | # Python3-pathlib目录及文件操作 2 | -------------------------------------------------------------------------------- /语言和框架/python/标准库/文件目录/Python3-pathlib路径操作.md: -------------------------------------------------------------------------------- 1 | # Python3-pathlib 2 | 3 | 目前我对目录相关操作一般是查找与当前文件所在路径相对的另一个文件的路径, 然后去加载或执行. python2中的abs等操作比较麻烦, 但能满足我的需求. 4 | 5 | ```py 6 | from pathlib import Path 7 | ``` 8 | 9 | `Path.cwd()`: 类似shell的`pwd`命令, 使用`python xxx.py`执行一个脚本时, `Path.cwd()`总是返回在终端命令行中所在的目录路径, 不管有没有`python ./abc/def/xxx.py`这样的相对路径的前缀. 10 | 11 | `Path(__file__)`可以得到执行`python ./abc/def/xxx.py`时的相对路径(包括文件名, 如`./abc/def/xxx.py`), 它的值等同于`sys.argv[0]` 12 | 13 | `Path(__file__).parent`可以得到`Path(__file__)`文件的所在目录, 这个值是不会包含文件名的. 14 | 15 | `currDir = Path.cwd().joinpath(Path(__file__).parent)` 16 | -------------------------------------------------------------------------------- /语言和框架/python/框架/Django/Django-数据库基本操作.md: -------------------------------------------------------------------------------- 1 | # Django-数据库基本操作 2 | 3 | 参考文章 4 | 5 | 1. [django-数据库[ 基本操作 ] - 博客园](http://www.cnblogs.com/rinka/p/django_database_basic_operations.html) -------------------------------------------------------------------------------- /语言和框架/python/框架/Django/Django使用redis.md: -------------------------------------------------------------------------------- 1 | # Django使用redis 2 | 3 | 参考文章 4 | 5 | 1. [Django分析之使用redis缓存服务器 - 博客园](http://www.cnblogs.com/fuhuixiang/p/4174896.html) -------------------------------------------------------------------------------- /语言和框架/python/框架/Django/Django应用总结.md: -------------------------------------------------------------------------------- 1 | # Django应用总结 2 | 3 | ## 1. 模板转义 4 | 5 | 6 | ## 3. Django获取前端checkbox值 7 | 8 | 多选情况下, 前端代码为 9 | 10 | ```html 11 |
12 | 苹果 13 | 梨 14 | 杏 15 | 桃子 16 | 17 |
18 | ``` 19 | 20 | 后端django代码 21 | 22 | ```py 23 | if request.method == 'POST': 24 | ## check_box_list是一个list对象, 选中的值会出现在里面, 如[2, 4] 25 | check_box_list = request.REQUEST.getlist('notuseldap') 26 | ``` -------------------------------------------------------------------------------- /语言和框架/python/框架/Django/Django自定义用户对象.md: -------------------------------------------------------------------------------- 1 | # Django自定义用户对象 2 | 3 | 参考文章 4 | 5 | 1. [Django自定义用户认证系统之自定义用户模型 - 博客园](http://www.cnblogs.com/ccorz/p/Django-zi-ding-yi-yong-hu-ren-zheng-xi-tong-zhi-zi.html) 6 | 7 | 2. [django 自定义用户user模型的三种方法 - 脚本之家](http://www.jb51.net/article/57527.htm) 8 | 9 | 3. [Customizing authentication in Django - Django官方文档](https://docs.djangoproject.com/en/1.11/topics/auth/customizing/) -------------------------------------------------------------------------------- /语言和框架/python/框架/Scrapy/Scrapy-二级页面抓取.md: -------------------------------------------------------------------------------- 1 | # Scrapy-二级页面抓取 2 | 3 | 参考文章 4 | 5 | 1. [Scrapy 学习笔记 -- 解决分页爬取的问题](https://www.jianshu.com/p/0c957c57ae10) 6 | 7 | 2. [Scrapy官方教程 - Following links](https://doc.scrapy.org/en/latest/intro/tutorial.html#following-links) 8 | 9 | 网站页面典型结构就是**n页列表页** -> **列表链接内容页(内容也分多级页面)**. 10 | 11 | 参考文章1对于如何使用`yeild`递归处理二级页面解释的比较清楚, 代码也足够清晰. 12 | 13 | > 列表页面分析器处理两件事: 一件是分析页面, 拿数据的链接, 交给`self.parse_content()`处理内容页, 另一个就是拿到**下一页**的地址, 由于和当前页面结构一样的, 只需要交由本身再进行分析, 处理即可. 14 | 15 | 参考文章2是scapy的官方文档, 也有易于理解的代码示例. -------------------------------------------------------------------------------- /语言和框架/python/框架/Scrapy/Scrapy-随机UA.md: -------------------------------------------------------------------------------- 1 | # Scrapy-随机UA 2 | 3 | 参考文章 4 | 5 | 1. [Scrapy学习篇(十一)之设置随机User-Agent](https://www.cnblogs.com/cnkai/p/7401343.html) -------------------------------------------------------------------------------- /语言和框架/python/框架/Scrapy/Scrapy入门-利用Scrapy爬取所有知乎用户详细信息并存至MongoDB.md: -------------------------------------------------------------------------------- 1 | # Scrapy入门-利用Scrapy爬取所有知乎用户详细信息并存至MongoDB 2 | 3 | 参考文章 4 | 5 | 1. [利用Scrapy爬取所有知乎用户详细信息并存至MongoDB](https://www.cnblogs.com/qcloud1001/p/6744070.html) 6 | 7 | 2. [Scrapy官方文档 - Items](http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/items.html) 8 | 9 | 3. [Scrapy官方文档 - Item Pipeline](http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/item-pipeline.html) 10 | 11 | 参考文章1给出的实例对`item`, `item pipeline`的使用有着非常形象的介绍, 十分容易上手.(话说所谓去重就是在数据库中判断目标记录是否已存在, 有点low啊) -------------------------------------------------------------------------------- /语言和框架/python/框架/Tornado/Python异步并发框架.md: -------------------------------------------------------------------------------- 1 | 参考文章 2 | 3 | 1. [Python异步并发框架](http://blog.csdn.net/screaming/article/details/51377870) -------------------------------------------------------------------------------- /语言和框架/python/框架/Tornado/Tornado源码阅读.md: -------------------------------------------------------------------------------- 1 | [Tornado源码探寻(开篇)](http://www.cnblogs.com/chenchao1990/p/5406165.html) -------------------------------------------------------------------------------- /语言和框架/python/框架/celery/celery不同任务配置多个队列.md: -------------------------------------------------------------------------------- 1 | # celery不同任务配置多个队列 2 | 3 | 参考文章 4 | 5 | 1. [Celery最佳实践(转)](https://www.cnblogs.com/ajianbeyourself/p/3889017.html) 6 | 7 | 2. [Celery消息队列----路由任务](https://blog.csdn.net/zhangfh1990/article/details/77043562) 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/python/框架/celery/celery动态添加任务.md: -------------------------------------------------------------------------------- 1 | # celery动态添加任务 2 | 3 | 参考文章 4 | 5 | 1. [celery动态添加任务](https://segmentfault.com/a/1190000010112848) -------------------------------------------------------------------------------- /语言和框架/python/框架/celery/celery最佳实践.md: -------------------------------------------------------------------------------- 1 | # celery最佳实践 2 | 3 | 参考文章 4 | 5 | 1. [Celery最佳实践(转)](https://www.cnblogs.com/ajianbeyourself/p/3889017.html#_label1) 6 | 7 | 2. [celery的建议](https://www.jianshu.com/p/d4cd1a632ed9) 8 | 9 | 3. [分布式任务队列 Celery 的使用](https://juejin.im/entry/59104e2544d904007bf1798a) 10 | -------------------------------------------------------------------------------- /语言和框架/python/框架/celery/celery的配置方法.md: -------------------------------------------------------------------------------- 1 | # celery的配置方法 2 | 3 | 参考文章 4 | 5 | 1. [Celery配置实践笔记](https://www.cnblogs.com/blackmatrix/p/8950381.html) 6 | 7 | 2. [celery_03 配置文件configuration](https://www.cnblogs.com/xbkp/p/6670024.html) 8 | 9 | 3. [celery官方文档 - app加载配置的方法](http://docs.celeryproject.org/en/latest/userguide/application.html#configuration) 10 | 11 | 4. [celery官方文档 - 可用的配置字段](http://docs.celeryproject.org/en/latest/userguide/configuration.html#new-lowercase-settings) -------------------------------------------------------------------------------- /语言和框架/python/框架/celery/celery问题处理.md: -------------------------------------------------------------------------------- 1 | # celery问题处理 2 | 3 | ## 1. 无法启动worker(启动后2分钟内挂掉) 4 | 5 | 参考文章 6 | 7 | 1. [Unrecoverable error: WorkerLostError('Could not start worker processes',)](https://github.com/celery/celery/issues/2966) 8 | 9 | **情境描述** 10 | 11 | 在docker容器里开了100个worker, 启动过程中就不断有worker进程报下面的错误. 12 | 13 | ``` 14 | billiard.exceptions.WorkerLostError: Could not start worker processes 15 | ``` 16 | 17 | 按照参考文章1中官方的回答, 是因为分配给容器的资源太少, 以致于没有办法启动更多的worker进程. -------------------------------------------------------------------------------- /语言和框架/python/框架/gunicorn/在gunicorn环境下, 日志中看不代码使用print输出的调试信息.md: -------------------------------------------------------------------------------- 1 | # 在gunicorn环境下, 日志中看不代码使用print输出的调试信息 2 | 3 | 参考文章 4 | 5 | 1. [gunicorn配置文件官方文档](http://docs.gunicorn.org/en/latest/settings.html) 6 | 7 | 2. [Is there a way to log python print statements in gunicorn?](https://stackoverflow.com/questions/27687867/is-there-a-way-to-log-python-print-statements-in-gunicorn) 8 | 9 | 3. [python中stdout输出不缓存的设置方法](http://www.jb51.net/article/50508.htm) 10 | 11 | 使用`uwsgi`部署flask工程时, 代码中用`print`可以在日志中输出信息. 12 | 13 | 但用`gunicorn`部署时, 使用`print`打印的信息只会在进程停止后才会输出到日志文件. 配置如下 14 | 15 | ```py 16 | loglevel = 'info' 17 | accesslog = '/var/log/gunicorn.log' 18 | errorlog = '/var/log/gunicorn.log' 19 | capture_output = True 20 | ``` 21 | 22 | 按照参数文章2中的例子, 设置`PYTHONUNBUFFERED`这个环境变量. 23 | 24 | 这个环境变量可以实现`python -u 目标文件`中`-u`选项同样的功能(可以通过`man python`中查看更详细的信息), 不能在`gunicorn`的配置文件中设置, 而要在其执行前设置. 25 | 26 | 只要这个环境变量为非空字符串, 即可生效. 27 | 28 | 该变量的作用可以查看参考文章3. -------------------------------------------------------------------------------- /语言和框架/python/框架/gunicorn/导论.md: -------------------------------------------------------------------------------- 1 | gunicorn的使用命令为 2 | 3 | ``` 4 | gunicorn [OPTIONS] [APP_MODULE] 5 | ``` 6 | 7 | 最后一个参数必须为工程的模块, 不能写在配置文件 中, 所以感觉没uwsgi方便. 8 | 9 | 而且没有提供restart, reload命令选项, 只能用kill, 更不方便. -------------------------------------------------------------------------------- /语言和框架/python/框架/sanic/docs.md: -------------------------------------------------------------------------------- 1 | [sanic异步框架之中文文档](https://segmentfault.com/a/1190000014619175) -------------------------------------------------------------------------------- /语言和框架/python/框架/wsgi/uwsgi编程模块.md: -------------------------------------------------------------------------------- 1 | # uwsgi编程模块 2 | 3 | 参考文章 4 | 5 | 1. [uwsgi官方文档 - The uwsgi Python module](https://uwsgi-docs.readthedocs.io/en/latest/PythonModule.html) 6 | 7 | uWSGI服务器会自动将`uwsgi`这个模块注入到你的python工程中. 这样便于开发者在程序中动态配置uWSGI服务, 使用其内部函数, 获取指定数据(比如我是不是运行在uWSGI服务下?) -------------------------------------------------------------------------------- /语言和框架/python/框架/wsgi/深入理解uwsgi和gunicorn网络模型.md: -------------------------------------------------------------------------------- 1 | [深入理解uwsgi和gunicorn网络模型[上]](http://xiaorui.cc/2017/02/16/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3uwsgi%E5%92%8Cgunicorn%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%9E%8B%E4%B8%8A/) -------------------------------------------------------------------------------- /语言和框架/python/环境/Pypi私有镜像源搭建-rsync[失败].md: -------------------------------------------------------------------------------- 1 | # Pypi私有镜像源搭建-pypiserver 2 | 3 | 参考文章 4 | 5 | 1. [CentOS7 搭建 python pypi 私有源 ](https://www.cnblogs.com/panhongyin/p/7065830.html) 6 | 2. [pypi 无法通过rsync进行同步,我使用rsync无法从清华站点下载pypi的目录,提示Unknown module 'pypi' #775](https://github.com/tuna/issues/issues/775) 7 | 3. [能在rsync服务中加入pypi吗](https://github.com/tuna/issues/issues/517) 8 | 9 | 听说可以用 rsync 直接从国内的 yum 镜像源搭建本地的私有源, 不用使用额外服务, 就想试试 pypi 可不可以, 于是找到了参考文章1. 10 | 11 | 不过在同步的时候出错了. 12 | 13 | ```console 14 | $ pypi_site="rsync://rsync.mirrors.ustc.edu.cn/pypi/web/" 15 | $ dest_dir="/root/pypi" 16 | $ log_file="/var/log/pypi-$(date "+%Y%m%d").log" 17 | 18 | $ /usr/bin/rsync -avrtH --delete --log-file=$log_file $pypi_site $dest_dir 19 | Served by rsync-proxy (https://github.com/ustclug/rsync-proxy) 20 | 21 | unknown module: pypi 22 | ``` 23 | 24 | 可以看到, 同步的方式比 bandersnatch 简单太多了. 25 | 26 | 本来想换个其他的镜像源再试试的, 但是没找到支持 rsync 协议的源. 27 | 28 | 暂时放弃吧. 29 | -------------------------------------------------------------------------------- /语言和框架/python/环境/Python源码安装[ubuntu].md: -------------------------------------------------------------------------------- 1 | 2 | 参考文章 3 | 4 | 1. [python学习笔记-zipimport.ZipImportError: can't decompress data; zlib not available](https://www.iteye.com/blog/zhoujianghai-1521993) 5 | 2. [python3.7移植到ARM开发板](https://blog.csdn.net/u012230668/article/details/89206857) 6 | - `apt-get install libffi-dev` 7 | 8 | 安装依赖 9 | 10 | ``` 11 | apt-get install libssl-dev libffi-dev 12 | ``` 13 | 14 | ## FAQ 15 | 16 | ### 17 | 18 | ``` 19 | zipimport.ZipImportError: can't decompress data; zlib not available 20 | ``` 21 | 22 | `./configure`与`make`执行没有出现问题, 但是在`make install`的时候报这个错误而退出了. 23 | 24 | 按照参考文章1, 执行如下命令安装`zlib`相关依赖. 25 | 26 | ``` 27 | apt-get install zlibc zlib1g-dev 28 | ``` 29 | 30 | 貌似无需重新`make`, 直接`make install`即可成功, 且最终`python`也可以执行成功. 31 | 32 | ### 33 | 34 | ``` 35 | Failed to build these modules: 36 | _ctypes 37 | ``` 38 | 39 | 参考文章2. 40 | 41 | ``` 42 | apt-get install libffi-dev 43 | ``` 44 | -------------------------------------------------------------------------------- /语言和框架/python/第三方库/Python-IP地址转换库IPy.md: -------------------------------------------------------------------------------- 1 | # Python-IP地址转换库IPy 2 | 3 | 参考文章 4 | 5 | 1. [实用的IP地址处理模块IPy](http://www.cnblogs.com/cherishry/p/5916935.html) 6 | 2. [Python中IP地址处理IPy模块的使用](http://www.sijitao.net/2447.html) 7 | 3. [python-ipy github官方文档](https://github.com/autocracy/python-ipy/) 8 | 9 | -------------------------------------------------------------------------------- /语言和框架/python/第三方库/Python-pymongo操作mongodb.md: -------------------------------------------------------------------------------- 1 | # Python-使用pymongo操作mongodb 2 | 3 | 参考文章 4 | 5 | 1. [python操作MongoDB](https://www.cnblogs.com/melonjiang/p/6536876.html) -------------------------------------------------------------------------------- /语言和框架/python/第三方库/SQLAlchemy/SQLAlchemy多个排序字段.md: -------------------------------------------------------------------------------- 1 | # SQLAlchemy多个排序字段 2 | 3 | 参考文章 4 | 5 | 1. [postgresql – 多个order_by sqlalchemy/Flask](https://codeday.me/bug/20180419/154608.html) 6 | 7 | ```py 8 | User.query.order_by(User.popularity.desc(),User.date_created.desc()).limit(10).all() 9 | ``` -------------------------------------------------------------------------------- /语言和框架/python/第三方库/bottle访问接口出现无法处理的500异常[web server http].md: -------------------------------------------------------------------------------- 1 | # bottle访问接口出现无法处理的500异常[web server http] 2 | 3 | 参考文章 4 | 5 | 1. [Unhandled exception (http error 500) when using Bottle with AJAX](https://stackoverflow.com/questions/34498162/unhandled-exception-http-error-500-when-using-bottle-with-ajax) 6 | 7 | ## 问题描述 8 | 9 | 用bottle写了一个接口, 但是访问时总是出现500问题, 我已经尝试过在整个接口函数体中进行`try..except..`进行异常捕获了, 但竟然没有捕获成功... 10 | 11 | ## 解决方法 12 | 13 | 按照参考文章1中所说, bottle要求接口返回的数据必须是`str`类型, 我是直接返回了数值, 所以才会报这个异常, 将返回值转换成`str`类型, 就没问题了. 14 | -------------------------------------------------------------------------------- /语言和框架/python/第三方库/psycopg2/psycopg2异步操作.md: -------------------------------------------------------------------------------- 1 | # # psycopg2异步操作 2 | 3 | 参考文章 4 | 5 | 1. [How to use asynchronous feature of pyscopg2?](https://stackoverflow.com/questions/38548239/how-to-use-asynchronous-feature-of-pyscopg2) 6 | -------------------------------------------------------------------------------- /语言和框架/python/第三方库/psycopg2/psycopg2问题处理.md: -------------------------------------------------------------------------------- 1 | # psycopg2问题处理 2 | 3 | ## 1. FATAL: remaining connection slots are reserved for non-replication superuser connections 4 | 5 | 参考文章 6 | 7 | 1. [Heroku “psql: FATAL: remaining connection slots are reserved for non-replication superuser connections”](https://stackoverflow.com/questions/11847144/heroku-psql-fatal-remaining-connection-slots-are-reserved-for-non-replication) 8 | 9 | **场景描述** 10 | 11 | celery worker启动了100个进程, 在启动过程中, 报了上述错误. 12 | 13 | 按照参考文章1中所说, 将数据库的最大连接数调高就可以了. 14 | -------------------------------------------------------------------------------- /语言和框架/python/第三方库/pyquery获取指定属性[id class].md: -------------------------------------------------------------------------------- 1 | # pyquery获取指定属性[id class] 2 | 3 | 参考文章 4 | 5 | 1. [通过pyquery获取具有特定属性的元素](https://www.cnpython.com/qa/834847) 6 | 2. [pyquery基础](https://www.jianshu.com/p/5def029dbdf8) 7 | 8 | 当一个元素对象拥有的不是像`id`, `class`这种典型的属性, 无法通过`#xxx`和`.xxx`进行选择时, 而是拥有像`data-name=general`这种自定义的属性时, 使用pyquery如何选取目标元素? 9 | 10 | ```py 11 | dom = PyQuery(html_text) 12 | items = dom.find('div[data-name]') 13 | ``` 14 | -------------------------------------------------------------------------------- /语言和框架/python/语法/Python-local nonlocal global局部变量与全局变量.md: -------------------------------------------------------------------------------- 1 | # Python-local nonlocal global局部变量与全局变量 2 | 3 | 参考文章 4 | 5 | 1. [nonlocal和global的区别](https://blog.csdn.net/lyon____/article/details/118387002) 6 | 7 | ```py 8 | def isMatch(): 9 | now_state_set = {0} 10 | 11 | def update_now_state_set(): 12 | nonlocal now_state_set 13 | now_state_set = {1} 14 | update_now_state_set() 15 | ``` 16 | -------------------------------------------------------------------------------- /语言和框架/python/语法/Python异常处理[exception repr].md: -------------------------------------------------------------------------------- 1 | # Python异常处理[exception repr] 2 | 3 | 参考文章 4 | 5 | 1. [Python中获取异常(Exception)信息](https://www.cnblogs.com/klchang/p/4635040.html) 6 | 7 | ```py 8 | try: 9 | pass 10 | except Exception as e: 11 | print(e) 12 | ``` 13 | 14 | 只会打印异常的 message 消息体, 没有异常信息的类型. 15 | 16 | 需要使用`print(repr(e))`. 17 | -------------------------------------------------------------------------------- /语言和框架/python/语法/Python自省机制.md: -------------------------------------------------------------------------------- 1 | # Python自省机制 2 | 3 | 参考文章 4 | 5 | 1. [Python自省(反射)指南 - 博客园](http://www.cnblogs.com/huxi/archive/2011/01/02/1924317.html) 6 | 7 | 2. [JAVA中的反射机制 - CSDN](http://blog.csdn.net/liujiahan629629/article/details/18013523) -------------------------------------------------------------------------------- /语言和框架/python/问题处理/'gbk' codec can't encode character 'xxx' in position 889:illegal multibyte sequence[open encoding write].md: -------------------------------------------------------------------------------- 1 | # 'gbk' codec can't encode character 'xxx' in position 889: illegal multibyte sequence 2 | 3 | 参考文章 4 | 5 | 1. [强推!!!解决UnicodeEncodeError: ‘gbk‘ codec can‘t encode character.....: illegal multibyte](https://blog.csdn.net/m0_37772653/article/details/119783057) 6 | 7 | ## 问题描述 8 | 9 | ``` 10 | code_file = open(file_path_obj, 'w+') 11 | code_file.write('xxx') 12 | ``` 13 | 14 | 如果写入的文件内容中包含一些特殊字符, 则在`write()`时会报如下错误 15 | 16 | ``` 17 | 'gbk' codec can't encode character '\xb5' in position 889: illegal multibyte sequence 18 | ``` 19 | 20 | ## 解决方法 21 | 22 | ``` 23 | code_file = open(file_path_obj, 'w+', encoding='utf-8') 24 | ``` 25 | -------------------------------------------------------------------------------- /语言和框架/python/问题处理/Attempted relative import in non-package.md: -------------------------------------------------------------------------------- 1 | # ValueError: Attempted relative import in non-package 2 | 3 | 相对导入中Attempted relative import in non-package问题, 在python2.7环境中源码安装PIL, 在`$PATHON/site-packages/PIL`目录下的一些文件中, 有类似如下方式导入PIL本身的一些变量. 4 | 5 | ```py 6 | from . import VERSION PILLOW_VERSION 7 | ``` 8 | 9 | 结果目标工程启动时要导入PIL, 就报了上述错误. 10 | 11 | 貌似是因为python版本不符所以不能用相对路径导入, 使用`from PIL import VERSION PILLOW_VERSION`就可以了. 12 | 13 | 关于这一点, 我觉得这篇文章[ValueError: Attempted relative import in non-package](http://www.cnblogs.com/DjangoBlog/p/3518887.html)讲得更加深入一点. 14 | -------------------------------------------------------------------------------- /语言和框架/python/问题处理/bytes-like object is required.md: -------------------------------------------------------------------------------- 1 | # Python 3.5 Socket TypeError: a bytes-like object is required, not 'str' 2 | 3 | 参考文章 4 | 5 | 1. [Python 3.5 Socket TypeError: a bytes-like object is required, not 'str' 错误提示](https://blog.csdn.net/yexiaohhjk/article/details/68066843) -------------------------------------------------------------------------------- /语言和框架/python/问题处理/处理同一类型不同message内容的异常[exception].md: -------------------------------------------------------------------------------- 1 | # 处理同一类型不同message内容的异常[exception] 2 | 3 | 参考文章 4 | 5 | 1. [在Python中分别处理相同类型的异常](https://www.cnpython.com/qa/508803) 6 | - 显式地处理message字符串, 但这可能会产生意外的后果, 并且错误消息本身可能因Python版本而异 7 | 2. [python3捕获的2个异常属于同一异常类型,要怎么写?](https://www.zhihu.com/question/64040552) 8 | - 高票答案我觉得可取(虽然其实感觉不如直接对传入类型做判断来得好) 9 | 10 | 我遇到的一种场景时, 使用第三方库, 遇到两个类型相同的异常, 其中一个不可被修复, 但是另一个可以, 所以需要对这两个异常分别进行处理. 11 | 12 | 没有别的方法, 只能根据异常中的 message 内容处理了. 13 | 14 | -------------------------------------------------------------------------------- /语言和框架/python/问题处理/引用包与同名文件.md: -------------------------------------------------------------------------------- 1 | # 引用包与同名文件 2 | 3 | ``` 4 | python /home/paramiko.py 5 | Traceback (most recent call last): 6 | File "/home/paramiko.py", line 11, in 7 | import paramiko 8 | File "/home/paramiko.py", line 18, in 9 | ssh = paramiko.SSHClient() 10 | AttributeError: 'module' object has no attribute 'SSHClient' 11 | ``` 12 | 13 | 场景描述: 14 | 15 | home目录下写了一个调用`paramiko`模块的小程序, python执行的时候报上述错误. 16 | 17 | 问题分析: 18 | 19 | 自定义的程序文件名不能与代码中import语句中导入的模块名相同. 代码里`import paramiko`, 那程序文件就不能再叫`paramiko.py`了. 20 | 21 | 解决方法: 22 | 23 | 将程序文件改个名字即可. 24 | -------------------------------------------------------------------------------- /语言和框架/python/陷阱/Python-单元素元组定义.md: -------------------------------------------------------------------------------- 1 | # Python-单元素元组定义 2 | 3 | 参考文章 4 | 5 | 1. [程序员必知的Python陷阱与缺陷列表](http://www.cnblogs.com/xybaby/p/7183854.html) 6 | 7 | ```py 8 | >>> a = (1, 2) 9 | >>> type(a) 10 | 11 | >>> type(()) 12 | 13 | ``` 14 | 15 | 如果只有一个元素 16 | 17 | ```py 18 | >>> a = (1) 19 | >>> type(a) 20 | 21 | ``` 22 | 23 | ...怪不得在使用数据库驱动时传入变量总是出现问题. 24 | 25 | 表示单元素元组的正确方法是: 26 | 27 | ```py 28 | >>> a = (1,) 29 | >>> type(a) 30 | 31 | >>> 32 | ``` 33 | 34 | 逗号`,`必不可少. --------------------------------------------------------------------------------