提交 59855df4 编写于 作者: 沉默王二's avatar 沉默王二 💬

辅助工具

上级 0079e35a
......@@ -292,11 +292,13 @@
## 辅助工具
- [Tabby:一款逼格更高的开源终端工具](docs/gongju/tabby.md)
- [Warp:一款21世纪人用的终端工具](docs/gongju/warp.md)
- [Chocolatey:一款GitHub星标8.2k+的Windows命令行软件管理器](docs/gongju/choco.md)
- [chiner:一款开源的数据库设计神器](docs/gongju/chiner.md)
- [DBeaver:一款免费的数据库操作工具](docs/gongju/DBeaver.md)
- [Chocolatey:一款GitHub星标8.2k+的Windows命令行软件管理器,好用到爆!](docs/gongju/choco.md)
- [Homebrew,GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!](docs/gongju/brew.md)
- [Tabby:一款逼格更高的开源终端工具,GitHub 星标 21.4k](docs/gongju/tabby.md)
- [Warp:号称下一代终端神器,GitHub星标2.8k+,用完爱不释手](docs/gongju/warp.md)
- [WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!](docs/gongju/windterm.md)
- [chiner:干掉 PowerDesigner,国人开源的数据库设计工具,界面漂亮,功能强大](docs/gongju/chiner.md)
- [DBeaver:干掉付费的 Navicat,操作所有数据库就靠它了!](docs/gongju/DBeaver.md)
## 开源轮子
......
......@@ -657,24 +657,13 @@ export const sidebarConfig = sidebar({
text: "3.5 辅助工具",
collapsable: true,
children: [
{
text: "高逼格终端工具Tabby",
link: "gongju/tabby",
},
{
text: "21世纪人用的终端工具Warp",
link: "gongju/warp",
},
"gongju/choco",
"gongju/brew",
{
text: "数据库设计神器chiner",
link: "gongju/chiner",
},
{
text: "数据库操作工具DBeaver",
link: "gongju/DBeaver",
},
"gongju/tabby",
"gongju/warp",
"gongju/windterm",
"gongju/chiner",
"gongju/DBeaver",
],
},
{
......
---
category:
- Java企业级开发
tag:
- 辅助工具/轮子
title: Chocolatey Homebrew:两款惊艳的Shell软件管理器
---
小二是公司新来的实习生,之前面试的过程中对答如流,所以我非常看好他。第一天,我给他了一台新电脑,要他先在本地搭建个 Java 开发环境。
二话不说,他就开始马不停蹄地行动了。真没想到,他竟然是通过命令行的方式安装的 JDK,这远远超出了我对他的预期。
我以为,他会使用图形化的方式来安装 JDK 的,就像这样。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-3d58d8db-e851-4c3d-97a5-66c8bf94d420.png)
还有这样。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-eda6f2a0-a192-4b92-b3cc-46f679ec5bcb.png)
结果他是这样的。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-371831e9-4580-4097-a0bf-d9c460f493fb.png)
卧槽!牛逼高大上啊!
看着他熟练地在命令行里安装 JDK 的样子,我的嘴角开始微微上扬,真不错!这次总算招到了一个靠谱的。
于是我就安排他做一个记录,打算发表在我的小破站《Java 程序员进阶之路》上。从他嘴里了解到,他用的命令行软件管理器叫 chocolatey,这是一个Windows下的命令行软件管理器,可以方便开发者像在Linux下使用yum命令来安装软件,或者像在macOS下使用brew 命令来安装软件,我感觉非常酷炫。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-509ea602-39b0-462e-9b8d-2a55fc31a4c8.png)
以下是他的记录,一起来欣赏下。
### 关于shell
对于一名 Java 后端程序员来说,初学阶段,你可以选择在 IDE 中直接编译运行 Java 代码,但有时候也需要在 Shell 下编译和运行 Java 代码。
>Windows 下自带的 Shell 叫命令提示符,或者 cmd 或者 powershell,macOS 下叫终端 terminal。
- [终端与 Shell 的区别](https://mp.weixin.qq.com/s?__biz=MzIxNzQwNjM3NA==&mid=2247491253&idx=1&sn=9a46879174f7240267fe5b5205d16d22&scene=21#wechat_redirect)
- [初次体验 macOS 下的 Shell](https://mp.weixin.qq.com/s/oEo8N3nE0wR1zl7qD4nh3w)
但当你需要在生产环境下部署 Java项目或者查看日志的话,就必然会用到 Shell,这个阶段,Shell 的使用频率高到可以用一个成语来形容——朝夕相伴。
一些第三方软件会在原生的 Shell 基础上提供更强大的功能,常见的有 tabby、Warp、xhsell、FinalShell、MobaXterm、Aechoterm、WindTerm、termius、iterm2 等等,有些只能在 Windows 上使用,有些只能在 macOS 上使用,有些支持全平台。还有 ohmyzsh 这种超神的 Shell 美化工具。
这里,我们列举一些 Shell 的基本操作命令(Windows 和 macOS/Linux 有些许差异):
- 切换目录,可以使用 cd 命令切换目录,`cd ..` 返回上级目录。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-d4f0634f-7b5b-4bbd-97eb-74ec1fe059c5.png)
- 目录列表,macos/linux 下可以使用 ls 命令列出目录下所有的文件和子目录(Windows 下使用 dir 命令),使用通配符 `*` 对展示的内容进行过滤,比如 `ls *.java` 列出所有 `.java`后缀的文件,如果想更进一步的话,可以使用 `ls H*.java` 列出所有以 H 开头 `.java` 后缀的文件。
- 新建目录,macOS/Linux 下可以使用 mkdir 命令新建一个目录(比如 `mkdir hello` 可以新建一个 hello 的目录),Windows 下可以使用 md 命令。
- 删除文件,macOS/Linux 下可以使用 `rm` 命令删除文件(比如 `rm hello.java` 删除 hello.java 文件),Windows 下可以使用 del 命令。
- 删除目录,macOS/Linux 下可以使用 `rm -r` 命令删除目录以及它所包含的所有文件(比如说 `rm -r hello` 删除 hello 目录)。Windows 下可以使用 deltree 命令。
- 重复命令,macOS/Linux/Windows 下都可以使用上下箭头来选择以往执行过的命令。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-738501d4-c210-449c-9d6c-56d5d16c623b.png)
- 命令历史,macOS/Linux 下可以使用 `history` 命令查看所有使用过的命令。Windows 可以按下 F7 键。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-e90c8f1f-c46c-47da-be88-0e8a00d85089.png)
- 解压文件,后缀名为“.zip”的文件是一个包含了其他文件的压缩包,macOS/Linux 系统自身已经提供了用于解压的 unzip 命令, Windows 的话需要手动安装。
### 安装JDK
**1)Windows**
推荐先安装 chocolatey。这是一个Windows下的命令行软件管理器,可以方便开发者像在Linux下使用yum命令来安装软件,或者像在macOS下使用brew 命令来安装软件,非常酷炫。
>The biggest challenge is reducing duplication of effort, so users turn to Chocolatey for simplicity
传统的安装方式要么非常耗时,要么非常低效,在命令行安装软件除了简单高效,还能自动帮我们配置环境变量。
>- 官方地址:[https://chocolatey.org/](https://chocolatey.org/)
>- 安装文档:[https://chocolatey.org/install#individual](https://chocolatey.org/install#individual)
安装完成后如下图所示:
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-5fd2b098-5685-49be-b424-f13ac288858d.png)
如果不确定是否安装成功的话,可以通过键入 `choco` 命令来确认。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-a7ea03ef-aa60-47a8-adfc-8b6dde1cf4cc.png)
这里推荐几个非常高效的操作命令:
- choco search xxx,查找 xxx 安装包
- choco info xxx,查看 xxx 安装包信息
- choco install xxx,安装 xxx 软件
- choco upgrade xxx,升级 xxx 软件
- choco uninstall xxx, 卸载 xxx 软件
如何知道 chocolatey 仓库中都有哪些安装包可用呢?
可以通过上面提到的命令行的方式,也可以访问官方仓库进行筛选。
>[https://community.chocolatey.org/packages](https://community.chocolatey.org/packages)
比如说我们来查找 Java。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-a5d6ff0f-f36d-4eb0-a69e-2ba30dd315ea.png)
好,现在可以直接在shell中键入 `choco install jdk8` 来安装 JDK8 了,并且会自动将Java加入到环境变量中,不用再去「我的电脑」「环境变量」中新建 JAVA_HOME 并复制 JDK 安装路径配置 PATH 变量了,是不是非常 nice?
稍等片刻,键入 `java -version` 就可以确认Java是否安装成功了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-31441e14-b692-4abc-8640-a8b70e08dfae.png)
不得不承认!非常nice!
**2)macOS**
首先推荐安装 homebrew,这是macOS下的命令行软件管理器,用来简化 macOS 上软件的安装过程。homebrew 是开源的,在 GitHub 已收获 32k star。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-0f9c86a0-e4b2-4103-a77e-8771ab8253f5.png)
homebrew 的安装也非常的简单,只需要一行命令即可。
>官方网址:[https://brew.sh/index_zh-cn](https://brew.sh/index_zh-cn)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-b1e8ea1c-2aec-4f79-bdc8-eb3e4fe1a0f0.png)
- 使用 `brew install xxx` 可以安装 macOS 上没有预装的软件
- 使用 `brew install --cask yyy` 可以安装 macOS 其他非开源软件。
这里是 homebrew 常用命令的一个清单,可供参考。
命令| 描述
---|---
brew update| 更新 Homebrew
brew search package| 搜索软件包
brew install package| 安装软件包
brew uninstall package| 卸载软件包
brew upgrade| 升级所有软件包
brew upgrade package| 升级指定软件包
brew list| 列出已安装的软件包列表
brew services command package| 管理 brew 安装软件包
brew services list| 列出 brew 管理运行的服务
brew info package| 查看软件包信息
brew deps package| 列出软件包的依赖关系
brew help| 查看帮助
brew cleanup| 清除过时软件包
brew link package| 创建软件包符号链接
brew unlink package| 取消软件包符号链接
brew doctor| 检查系统是否存在问题
安装完 homebrew 后,建议替换homebrew 的默认源为中科大的,原因就不用我多说了吧?替换方法如下所示:
```
替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
```
如何知道 homebrew 仓库中都有哪些安装包可用呢?
第一种,通过 `brew search xxx` 命令搜索,比如说我们要搜索 jdk
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-11bdc7b9-5060-4563-9e14-1bc9013882ce.png)
第二种,通过 homebrew 官网搜索,比如说我们要搜索 openjdk。
>官方地址:[https://formulae.brew.sh](https://formulae.brew.sh)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-80b4318e-0491-4ebd-8047-7e4528426921.png)
这里有一份不错的 homebrew 帮助文档,可供参考:
>[https://sspai.com/post/56009](https://sspai.com/post/56009)
OK,我们来安装JDK,只需要简单的一行命令就可以搞定。
`brew install openjdk@8`
对比下载安装包,通过图形化界面的方式安装 JDK,是不是感觉在 Shell 下安装 JDK 更炫酷一些?
关键是还省去了环境变量的配置。
记得还没有走出新手村的时候,就经常被环境变量配置烦不胜烦。那下载这种命令行的方式,要比手动在环境变量中配置要省事一百倍,也更不容易出错。
### 关于编辑器
安装完 Java 之后,你还需要一个编辑器,用来编写 Java 代码。
编辑器多种多样,常见的有集成开发环境(IDE,比如 Intellij IDEA 和 vscode),和简单的文本编辑工具(比如 sublime text)。
我建议这三个工具都要装,日常开发中,我会在这三个编辑器中来回切换。
Intellij IDEA:主要用来编写Java代码,并且最好安装旗舰版,社区版用来学习JavaSE部分是绰绰有余的,但要想拥有更强大的生产力,旗舰版是必须的,因为功能更加强大。
比如说 idea 旗舰版中可以直接通过 Initializr 来创建springboot项目,但社区版就没有此功能。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-d493229a-d62e-42cc-a6f0-7e3c0893a0c5.png)
vscode:更加轻量级的 IDE,在编写Java代码上可以和idea媲美,但要想调试Java代码的话,vscode 和idea的差距还是非常明显的。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-5e913932-58a8-415a-a1aa-30a7e0f2b8aa.png)
我会使用 Intellij IDEA 开发编程喵的后端代码,vscode 来开发编程喵的前端代码。
sublime text:功能更强大的文本编辑器,比记事本这种强大一万倍,也更符合21世纪开发者的外观审美。如果只是简单的修改一下代码格式,或者注释,显然更加方便,因为idea还是比较吃内存的,出差旅行的时候,在笔记本上紧急修改一些代码时,更易用。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/Chocolatey-Homebrew-85aaca81-9e18-4ba9-aaf2-2989abb85fc5.png)
我会配合 GitHub 桌面版来使用 sublime text,编辑 MD 文档的时候会比较舒服。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
---
title: DBeaver:一款免费的数据库操作工具
title: DBeaver:干掉付费的 Navicat,操作所有数据库就靠它了!
shortTitle: DBeaver:一款免费的数据库操作工具
category:
- Java企业级开发
tag:
- 辅助工具/轮子
- 辅助工具
description: DBeaver:干掉付费的 Navicat,操作所有数据库就靠它了!
head:
- - meta
- name: keywords
content: 辅助工具,GitHub,DBeaver教程,DBeaver使用,DBeaver开源,Navicat DBeaver,Java企业级开发
---
......@@ -11,7 +17,7 @@ tag:
于是就琢磨着,找一款免费的,功能和 Navicat 有一拼的数据库管理工具来替代。好朋友 macrozheng 给我推荐了 DBeaver,试用完后体验真心不错,于是就来给大家安利一波。
### 一、关于 DBeaver
## 一、关于 DBeaver
DBeaver 是一个跨平台的数据库管理工具,支持 Windows、Linux 和 macOS。它有两个版本,企业版和社区版,对于个人开发者来说,社区版的功能已经足够强大。
......@@ -25,7 +31,7 @@ DBeaver 支持几乎所有主流的数据库,包括关系型数据库和非关
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/DBeaver-2.png)
### 二、安装 DBeaver
## 二、安装 DBeaver
可以通过 DBeaver 官方下载安装包,也可以通过 GitHub 下载 release 版本。
......@@ -52,7 +58,7 @@ DBeaver 支持几乎所有主流的数据库,包括关系型数据库和非关
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/DBeaver-6.png)
### 三、管理数据源
## 三、管理数据源
像使用 Navicat 一样,我们需要先建立连接,这里就以 MySQL 为例。点击「连接」小图标,选择数据库。
......@@ -74,7 +80,7 @@ DBeaver 支持几乎所有主流的数据库,包括关系型数据库和非关
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/DBeaver-11.png)
### 四、管理表
## 四、管理表
数据库连接成功后,最重要的还是操作表。
......@@ -122,7 +128,7 @@ DBeaver 支持几乎所有主流的数据库,包括关系型数据库和非关
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/DBeaver-21.png)
### 五、执行 SQL
## 五、执行 SQL
右键数据库表,选择右键菜单中的「SQL 编辑器」可以打开 SQL 编辑面板。
......@@ -140,7 +146,7 @@ DBeaver 有一个很亮眼的操作就是,可以直接选中一条结果集,
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/DBeaver-25.png)
### 六、外观配置
## 六、外观配置
可以在首选项里对外观进行设置,比如说把主题修改为暗黑色。
......@@ -158,7 +164,7 @@ DBeaver 有一个很亮眼的操作就是,可以直接选中一条结果集,
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/DBeaver-29.png)
### 七、总结
## 七、总结
总体来说,DBeaver是一款非常优秀的开源数据库管理工具了,功能很全面,日常的开发基本上是够用了。对比收费的 Navicat 和 DataGrip,可以说非常良心了。大家如果遇到收费版不能使用的时候,可以来体验一下社区版 DBeaver。
......
......@@ -3,23 +3,13 @@ category:
- Java企业级开发
tag:
- 辅助工具
- GitHub
- macos
- brew
- 命令行
- Shell 工具
- 软件管理
- Homebrew
title: Homebrew:GitHub 星标 32.5k+的 macos 命令行软件管理神器
shortTitle: macOS软件管理器Homebrew
description: Homebrew,好用到爆!GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!
title: Homebrew,GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!
shortTitle: Homebrew:macOS软件管理器
description: Homebrew,GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!
head:
- - meta
- name: description
content: Homebrew,好用到爆!GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!
- - meta
- name: keywords
content: 辅助工具,GitHub,macos,brew,命令行,Shell 工具,软件管理,homebrew
content: 辅助工具,GitHub,macos Homebrew,Homebrew教程,Homebrew镜像,Homebrew国内安装
---
## 前言(废话)
......
---
title: chiner:一款开源的数据库设计神器
title: chiner:干掉 PowerDesigner,国人开源的数据库设计工具,界面漂亮,功能强大
shortTitle: chiner:国人开源的数据库设计工具
category:
- Java企业级开发
tag:
- 辅助工具/轮子
- 辅助工具
description: chiner:干掉 PowerDesigner,国人开源的数据库设计工具,界面漂亮,功能强大
head:
- - meta
- name: keywords
content: 辅助工具,GitHub,pdman chiner,PDM 工具,数据库设计,PowerDesigner chiner,Java企业级开发
---
最近在造轮子,从 0 到 1 的那种,就差前台的界面了,大家可以耐心耐心耐心期待一下。其中需要设计一些数据库表,可以通过 Navicat 这种图形化管理工具直接开搞,也可以通过一些数据库设计工具来搞,比如说 PowerDesigner,更专业一点。
......
......@@ -3,23 +3,13 @@ category:
- Java企业级开发
tag:
- 辅助工具
- GitHub
- Windows
- chocolatey
- 命令行
- Shell 工具
- 软件管理
- choco
title: chocolatey:一款 GitHub 星标 8.2k+ 的 Windows 命令行软件管理神器
shortTitle: Win软件管理神器choco
description: chocolatey:一款 GitHub 星标 8.2k+ 的 Windows 命令行软件管理神器
title: Chocolatey:一款 GitHub 星标 8.2k+ 的 Windows 命令行软件管理器,好用到爆!
shortTitle: Chocolatey:Windows软件管理神器
description: chocolatey:一款 GitHub 星标 8.2k+ 的 Windows 命令行软件管理神器,好用到爆!
head:
- - meta
- name: description
content: chocolatey:一款 GitHub 星标 8.2k+ 的 Windows 命令行软件管理神器
- - meta
- name: keywords
content: 辅助工具,GitHub,Windows,chocolatey,命令行,Shell 工具,软件管理,choco
content: 辅助工具,GitHub,Windows choco,chocolatey 教程
---
小二是公司新来的实习生,之前面试的过程中对答如流,所以我非常看好他。第一天,我给他了一台新电脑,要他先在本地搭建个 Java 开发环境。
......@@ -28,15 +18,15 @@ head:
我以为,他会傻乎乎地下一步下一步来安装 JDK,就像这样。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-9050933d-61f2-4d79-bad7-982803fc174a)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-474773ad-69eb-467d-acd8-1928ebf27e3a.png)
然后这样配置环境变量。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-4adb249c-a662-42af-9c7e-08deeb11c835)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-c463c792-60a8-4d16-8cba-dcbe1ece1453.png)
结果他是这样的,就一行命令,环境变量也不用配置!
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-5c996f2a-6d14-4f9d-acd4-ff1cf959b55f)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-340c54de-c793-4bbc-9112-96977f8ec69a.png)
卧槽!牛逼高大上啊!
......@@ -45,7 +35,7 @@ head:
于是我就安排他做一个记录,打算发表在我的小破站《Java 程序员进阶之路》上。从他嘴里了解到,他用的命令行软件管理器叫 chocolatey,这是一个Windows下的命令行软件管理器,在 GitHub 上已经收获 8.2k+的星标,可以方便开发者像在Linux下使用yum命令来安装软件,或者像在macOS下使用brew 命令来安装软件,非常酷炫。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-c598af06-7a85-47ca-ade4-e07c60463990)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-92ee5dda-830f-47fd-8770-7a765ef30b5a.png)
以下是他的记录,一起来欣赏下。
......@@ -65,7 +55,7 @@ head:
- 切换目录,可以使用 cd 命令切换目录,`cd ..` 返回上级目录。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-b329cba9-4982-44ec-9935-3c9eb5b92eab)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-21db6ccd-3bec-4e8c-b72a-6cba674cae63.png)
- 目录列表,macos/linux 下可以使用 ls 命令列出目录下所有的文件和子目录(Windows 下使用 dir 命令),使用通配符 `*` 对展示的内容进行过滤,比如 `ls *.java` 列出所有 `.java`后缀的文件,如果想更进一步的话,可以使用 `ls H*.java` 列出所有以 H 开头 `.java` 后缀的文件。
- 新建目录,macOS/Linux 下可以使用 mkdir 命令新建一个目录(比如 `mkdir hello` 可以新建一个 hello 的目录),Windows 下可以使用 md 命令。
......@@ -73,12 +63,12 @@ head:
- 删除目录,macOS/Linux 下可以使用 `rm -r` 命令删除目录以及它所包含的所有文件(比如说 `rm -r hello` 删除 hello 目录)。Windows 下可以使用 deltree 命令。
- 重复命令,macOS/Linux/Windows 下都可以使用上下箭头来选择以往执行过的命令。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-bdd0a107-512d-4906-9555-38fe06d24d5a)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-269f4133-cdd3-414f-baf9-31067e0eb27f.png)
- 命令历史,macOS/Linux 下可以使用 `history` 命令查看所有使用过的命令。Windows 可以按下 F7 键。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-d6425fe6-1501-412e-9642-990864e6f810)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-96eb0dde-c08c-4b52-9007-8f3130e22d94.png)
- 解压文件,后缀名为“.zip”的文件是一个包含了其他文件的压缩包,macOS/Linux 系统自身已经提供了用于解压的 unzip 命令, Windows 的话需要手动安装。
......@@ -96,7 +86,7 @@ head:
第一步,以管理员的身份打开 cmd 命令行。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-f01fb23b-9ca5-4997-acc3-26ebd7da060f)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-3dae462d-56d1-4e80-9d47-bcba1c2ee292.png)
第二步,执行以下命令:
......@@ -108,11 +98,11 @@ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManage
安装完成后如下图所示:
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-e9696a71-ceb5-4c62-b39f-876f742b6435)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-2cfc4656-e996-4678-bd57-29cc78587e73.png)
如果不确定是否安装成功的话,可以通过键入 `choco` 命令来确认。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-211a2335-d3e1-49b5-8735-feabacf8087e)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-2db830bd-76f5-4b28-8f1d-1642b3e8476b.png)
这里推荐几个非常高效的操作命令:
......@@ -130,21 +120,21 @@ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManage
比如说我们来查找 Java。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-a4bdc885-22a9-4307-b4b6-cd1ad1f0ba8b)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-aa483180-e395-4753-b8ca-0479b05ec4b5.png)
好,现在可以直接在shell中键入 `choco install jdk8` 来安装 JDK8 了,并且会自动将Java加入到环境变量中,不用再去「我的电脑」「环境变量」中新建 JAVA_HOME 并复制 JDK 安装路径配置 PATH 变量了,是不是非常 nice?
稍等片刻,键入 `java -version` 就可以确认Java是否安装成功了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-80a6ced8-c25d-4371-8096-b95be48af768)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-ddc37a22-43d7-4e40-bcfd-7208f9d1df59.png)
不得不承认!非常nice!
再比如说安装 Redis,只需要找到 Redis 的安装命令在 Choco 下执行一下就 OK 了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-488b71e7-8082-45b7-b454-3187938bf101)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-9cd5f46e-054c-4e1e-bcbb-1d11e36accfe.png)
安装 Git:
......@@ -172,7 +162,7 @@ choco install filezilla
Choco 上的软件包也非常的多,基本上软件开发中常见的安装包都有。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-3a59dfe8-6c2d-4c5b-9187-bf2812a59041)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/choco-0f43e407-68ab-4c2d-8fb9-7fb88ca638ec.png)
### 小结
......
---
title: Tabby:一款逼格更高的开源终端工具,GitHub 星标 21.4k
shortTitle: Tabby:一款逼格更高的开源终端工具
category:
- Java企业级开发
tag:
- 辅助工具/轮子
title: Tabby:一款逼格更高的开源终端工具
shortTitle: Tabby:一款逼格更高的开源终端工具
- 辅助工具
description: Tabby:一款逼格更高的开源终端工具,GitHub 星标 21.4k
head:
- - meta
- name: keywords
content: 辅助工具,GitHub,终端,Tabby,tabby 终端,tabby 教程,Java企业级开发
---
作为一名 Java 后端开发,日常工作中免不了要和 Linux 服务器打交道,因为生产环境基本上都是部署在 Linux 环境下的。以前呢,我会选择 Xshell 来作为终端进行远程操作。
......@@ -29,7 +34,7 @@ GitHub 上已经有 21.4k 的 star 了,这说明 Tabby 非常的受欢迎:
Tabby 是一个高度可定制化的 跨平台的终端工具,支持 Windows、macOS 和 Linux,自带 SFTP 功能,能与 Linux 服务器轻松传输文件,支持多种主题,界面炫酷,插件丰富。
### 一、安装 Tabby
## 一、安装 Tabby
直接到官网 [tabby.sh](https://tabby.sh/) 点击「download」按钮就可以跳转到下载页面,最新的 release 版本是 1.0.164。
......@@ -80,7 +85,7 @@ SSH,也就是 Secure Shell(安全外壳协议),是一种加密的网络
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/tabby-07.png)
### 三、SFTP 传输文件
## 三、SFTP 传输文件
Tabby 集成了 SFTP,所以上传下载文件就变得非常的简单。只需要点击一下「SFTP」图标就可以打开文件传输窗口。
......@@ -94,7 +99,7 @@ Tabby 集成了 SFTP,所以上传下载文件就变得非常的简单。只需
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/tabby-10.png)
### 四、配置 Tabby
## 四、配置 Tabby
「Settings」 的面板下有一个「Appearance」的菜单,可以对 Tabby 的外观进行设置,比如说调整字体,比如说自定义样式。
......@@ -137,7 +142,7 @@ Tabby 集成了 SFTP,所以上传下载文件就变得非常的简单。只需
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/tabby-18.png)
### 五、总结
## 五、总结
SSH 连接和 SFTP 传输恐怕是我们操作 Linux 服务器最常用的两个功能了,那 Tabby 对这两个功能的支持非常的友好,足够的轻量级。关键它是跨平台的,Windows、macOS 都可以用,再把配置信息同步到云上后,多平台下切换起来简直不要太舒服。
......
---
title: Warp:一款21世纪人用的终端工具
title: Warp:号称下一代终端神器,GitHub星标2.8k+,用完爱不释手
shortTitle: Warp:一款21世纪人用的终端工具
category:
- Java企业级开发
tag:
- 辅助工具/轮子
- 辅助工具
description: Warp:一款21世纪人用的终端工具,GitHub星标2.8k+,用完爱不释手
head:
- - meta
- name: keywords
content: 辅助工具,GitHub,终端,Warp,Warp 登录,Warp 终端,Java企业级开发
---
程序员的一生,用的最多的两个工具,一个是代码编辑器(Code Editor),另外一个就是命令行终端工具(Terminal)。这两个工具对于提高开发效率至关重要。
......@@ -14,7 +20,7 @@ tag:
那本期给大家推荐的这款终端——Warp——绝对会让你大开眼界,用完爱不释手!
>还记得之前给大家推荐的 [Tabby](https://mp.weixin.qq.com/s/HeUAPe4LqqjfzIeWDe8KIg) 吗?是时候喜新厌旧了。
>还记得之前给大家推荐的 [Tabby](https://tobebetterjavaer.com/gongju/tabby.html) 吗?是时候喜新厌旧了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/warp-e0411889-e506-480f-a719-eba4f2d229b4.png)
......@@ -34,7 +40,7 @@ Warp 号称自己“Reinvent the Terminal”,也就是重新定义了终端,
是的,vscode 号称自己“Code editing Redefined”,也就是重新定义了代码编辑器。
### 一、安装 Warp
## 一、安装 Warp
直接到官网 `warp.dev` 点击「download now」就可以下载最新版了。下载完成后,双击安装包就可以安装了。完成后打开,界面还是非常清爽的。
......@@ -60,7 +66,7 @@ Warp 支持 GitHub 账户登录。不过,如果你在登录的过程中因为
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/warp-f622d505-b136-4b9d-95c5-a6872e1423e1.png)
### 二、使用 Warp
## 二、使用 Warp
Warp 解决的第一个痛点,就是减少配置、方便输入、优化输出,并且增加常用命令的自动提示。
......@@ -134,7 +140,7 @@ Warp 解决的第二个痛点是增加协作功能。不过由于我目前没有
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/warp-d8952a84-a0a7-4c3d-b237-87cdc997bb4c.png)
### 三、配置 Warp
## 三、配置 Warp
输入 Command+P 快捷键可以打开 Warp 的命令面板。
......@@ -158,7 +164,7 @@ Warp 解决的第二个痛点是增加协作功能。不过由于我目前没有
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/warp-aa785da8-bb39-4851-97f5-b7f8baaccf34.png)
### 四、总结
## 四、总结
最后总结一波吧。
......
---
title: WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!
shortTitle: WindTerm:新一代开源免费的终端工具
category:
- Java企业级开发
tag:
- 辅助工具
description: WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!
head:
- - meta
- name: keywords
content: 辅助工具,GitHub,终端,WindTerm,WindTerm 教程,WindTerm 终端,Java企业级开发
---
[Tabby](https://mp.weixin.qq.com/s/HeUAPe4LqqjfzIeWDe8KIg)[Warp](https://mp.weixin.qq.com/s/qsyczU3AvGf1p3sR4IvcEg) 后,今天再来给大家推荐一款终端神器——WindTerm,完全开源,在 GitHub 上已经收获 6.6k 的 star。
>[https://github.com/kingToolbox/WindTerm](https://github.com/kingToolbox/WindTerm)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-5220349e-fb8b-41c8-94c7-9d37b0eeaa82.png)
作者还拿 WindTerm 和 Putty、xterm、Windows Terminal + ssh.exe、iterm2、rxvt、Gnome等等做了一个性能对比,结果其他终端均被吊打的不成样子,真正的**杀人诛心**
哈哈哈哈哈哈哈哈哈哈
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-d2958336-7d9b-46a5-9fd4-224b195dba03.png)
工具不嫌多,哪个顺手用哪个,对吧?没毛病吧😁
## 安装 WindTerm
WindTerm 不仅开源免费,还跨平台,支持 Windows、Linux 和 macOS。
直接到 release 页面选择适合自己操作系统的安装包。
>[https://github.com/kingToolbox/WindTerm/releases](https://github.com/kingToolbox/WindTerm/releases)
体积 30M 左右,相对于动辄 200M 左右的安装包,真的是良心。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-f7abe795-d43b-4f53-93a5-e59241d45930.png)
安装完成后,打开的界面和传统的终端不太一样,WindTerm 更像 IDE 的布局,左边是资源管理器+文件管理器,中间会默认打开一个 zsh 的终端窗口,右边是会话窗口+历史命令窗口,底部是发送窗口 + Shell 窗口。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-28d20f75-c5d0-47bf-96db-a2f470f03c42.png)
## 使用 WindTerm
### SSH
使用终端最重要的一个场景就是 SSH,连接远程服务器,我这里有一个 1G 内存的轻量级云服务器,我们来连接它体验一下。
点击新建会话按钮开始 SSH 连接。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-21565ed0-90d8-466f-b505-d1d2f58388be.png)
添加主机名,点击「连接」开始进行远程链接。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-fec8d31e-aa33-4d5e-b0c0-4c7f09ea208b.png)
紧接着输入用户名和密码,我们关掉一些没必要的窗口,让整个界面更加清爽一些。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-aae1b222-c6da-4285-8efe-e87e5cc66702.png)
如果感觉字体比较小的话,可以直接按住**「command+」**两个组合键放大字体。
WindTerm 给我一个非常直观的操作是,它提供了一个折叠的功能,点击-号折叠,点击+号展开。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-e3415e9c-d002-4492-af9d-83b02e87c7d8.png)
还有一个就是智能提示,非常到位,响应速度很快。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-a34d2157-3a5d-4afa-a5c4-2cc323244c4f.png)
### SFTP
除了 SSH,还有一个重要的场景就是上传文件,我们知道,Xshell 是直接将 FTP 分离了出去,我总觉得这个产品分割设计很脑残,放在一起挺好的。
WindTerm 是放在一起的,直接打开文件文件管理器,选择文件上传还是直接拖拽,都非常便利。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-e23d187e-9d67-4e6a-9b22-e9a3a0e459a5.png)
文件上传完成后会有一个进度条提示。
如果想直接在 SSH 窗口中上传文件的话,就需要安装lrzsz。如果没安装的话,会提示错误❎。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-3eb27b2e-ba98-44f2-8ec3-4ec86e9f62d1.png)
因为我的远程服务器是 CentOS,所以执行 `yum install lrzsz`就可以直接安装了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-c6f757b9-a6e0-4bd9-beef-9ce501cbdf41.png)
安装完成后就可以直接在 SSH 上传文件了,和其他终端不同的是,WindTerm 会有进度条提示。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-ee7b8acf-6e39-42d7-ab92-bf8e24243c38.png)
WindTerm 还提供了高速传输模式,上传下载速度更快。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-f2315d1b-d6c9-4eff-8470-2088cff6cd05.png)
搞定 SSH 和 SFTP,一个终端的基础功能就全具备了,这也是我们最常用的两个场景。WindTerm 在这两方面都做的不错。
### 自动补全
WindTerm 的自动补全功能还是非常强大的,只需要在行首键入 `!` 就可以调出历史命令,然后使用向下的箭头选择历史命令就 OK 了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-838a4711-4e09-46d7-a0d5-99e302889d27.png)
WindTerm 能够自动补全的命令非常全面,支持:
- Linux Shell 命令。
- MacOS Shell 命令。
- Windows Cmd 命令。
- PowerShell 命令。
- 任何命令行程序的命令,例如 Git
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-62b525bf-c4c6-4e3a-b313-884c945809e3.png)
## 配置 WindTerm
### 如何重置锁屏密码
不过有点小尴尬😓的是,WindTerm有自动锁屏的功能,过段时间(默认 30 分钟)没有操作,就会自动锁屏。然而,我之前并没有设置过锁屏密码,这就好像我自己的门我自己锁了,却没有钥匙🔑。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-17017bd4-4da6-41f5-bf48-2b056dbfe258.png)
虽然提供了更改主密码的功能,但我就不知道初始密码是什么,就更尴尬了。
怎么办?
遇事不决问 issue:**如何重置锁屏密码**
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-759ffc3b-0119-4a2b-bce5-68c7f8612b31.png)
果然已经有小伙伴提出了这个问题,我们顺藤摸瓜就可以搞定了,找到 user.config 文件。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-f4a8b033-5d77-4361-935e-66c210e67690.png)
干掉 application.fingerprint 和 application.masterPassword。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-4cd13932-07a3-4696-9752-265ed76c4463.png)
再找到 .wind/profiles/default.v10/terminal/user.sessions 文件删除 session.autoLogin 就可以将主密码设置为空字符串了,之后再来修改主密码,就 OK 了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-21423050-3de4-4afe-9e4a-0b073c4f6504.png)
### 更换主题
WindTerm 支持三种主题的切换,亮白模式、暗黑模式、黑白相间模式。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-6b123b12-903e-4040-86e6-95162df4aa09.png)
我们来切换到亮白模式体验一下,还不错。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-a18114a4-17d5-4f83-b96d-f9007d67e560.png)
### 自动复制
只需要在设置中,找到文本一栏,勾选「自动复制选定内容」就可以了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-fd333685-e76e-434c-832e-2f2b594dfd35.png)
选中内容,然后就直接复制了。
## 总结
总的来说,WindTerm 的体验不错,除了我上面提到的这些基础功能外,像分屏啊,转接端口啊,并且在 Windows 下的体验要比 macOS 操作系统下更酷一些。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/windterm-201419f5-0097-4fe2-b24f-3d35c25c18d0.png)
作者把两者的使用技巧全部分享到了下面这个网址上,小伙伴们可以去解锁一下。
>[https://kingtoolbox.github.io/](https://kingtoolbox.github.io/)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
......@@ -306,11 +306,13 @@ head:
### 辅助工具
- [Tabby:一款逼格更高的开源终端工具](gongju/tabby.md)
- [Warp:一款21世纪人用的终端工具](gongju/warp.md)
- [Chocolatey:一款GitHub星标8.2k+的Windows命令行软件管理器](gongju/choco.md)
- [chiner:一款开源的数据库设计神器](gongju/chiner.md)
- [DBeaver:一款免费的数据库操作工具](gongju/DBeaver.md)
- [Chocolatey:一款GitHub星标8.2k+的Windows命令行软件管理器,好用到爆!](gongju/choco.md)
- [Homebrew,GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!](gongju/brew.md)
- [Tabby:一款逼格更高的开源终端工具,GitHub 星标 21.4k](gongju/tabby.md)
- [Warp:号称下一代终端神器,GitHub星标2.8k+,用完爱不释手](gongju/warp.md)
- [WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!](gongju/windterm.md)
- [chiner:干掉 PowerDesigner,国人开源的数据库设计工具,界面漂亮,功能强大](gongju/chiner.md)
- [DBeaver:干掉付费的 Navicat,操作所有数据库就靠它了!](gongju/DBeaver.md)
### 开源轮子
......
---
title: 程序员如何优雅地解决线上问题?
shortTitle: 程序员如何优雅地解决线上问题?
author: fancy
category:
- 微信公众号
---
身为一个程序员,遇到线上问题那都是家常便饭的事儿。
如果你在深夜看到一群同事围在一起,他们是在共同探讨什么哲学问题么?非也,他们一定是遇到了线上BUG。
线上问题只要影响到了核心业务流程那便是事故,所以一旦事故发生,无论你在约会,还是周末打游戏,甚至是在睡觉,只要接到了来自公司的电话,那只能赶紧连上公司网络加班了。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-ff7a235c-b5dc-4cbe-a6f4-72b36414409f.jpg)
# BUG分类
线上问题是复杂多变的,我们一般将bug分为系统级别和业务级别bug。
## 系统级别bug
业务部署在整套系统上运行,一旦出现系统级别bug则业务会被严重拖垮。如CPU爆满、服务不可用、甚至服务器宕机等都属于系统级别的bug。
如果是CPU100%,那是由哪个线程,哪个类,甚至是哪个方法导致的?
若是业务流程正常但是部分服务性能拉跨,那么如何快速定位到问题在哪儿?
因为是线上发生的事儿,所以重点在于如何**迅速解决**
以下分享我最常用的一些问题排查工具。
### linux定位工具
#### 1.CPU高负载,甚至100%?
**perf工具**
perf是linux的性能分析工具,核心作用之一就是用来查看热点函数的分布情况。
用它可以生成**火焰图**查看到函数的资源占用情况,函数的调用栈越深火焰就越高。所以对于异常的函数一眼就能看出。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-760d57bb-758f-45c2-bc93-479c0cb83ea9.jpg)
如上图通过调用栈你可以看出Monitor管程在反复调用enter和wait,这种情况下就可以判断出该程序已经发生死锁且存在性能问题。假设有大量线程请求这段代码,那么CPU资源将被迅速打满!
在著名的“713B站事故”里技术团队在事故发生时就用到了当前工具生成了火焰图,快速地分析出了事故的根因也就是导致CPU100%的lua热点函数。
#### 2.某一进程存在异常嫌疑,想快速知道它的状态?
**ps命令**
我们项目部署的服务器里在跑的进程老多了,java进程、nginx进程、redis、消息队列进程等等。
举个例子,假设在某一流量高峰期系统监控到整个服务性能下降5倍,业务被严重拖垮,在确定没有业务层面bug的情况下大概率就是因为服务性能达到瓶颈了。如何确定瓶颈在哪儿?
大部分情况下通过系统告警就可以知道大概问题所在。如发生消息堆积我们就该怀疑消息生产者和消费者的状态,这个时候就要具体去查看消息队列这一进程。
可以使用一些轻量级的linux命令,如**ps**
```
[root@linuxfancy ~]# ps -ef | grep queuejob  root       1303      1  0 Apr17 ?        00:00:00 /usr/sbin/queuejob  root       3260   3087  0 Apr17 ?        00:00:00 /usr/bin/queuejob /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"  root      24174  19508  0 11:39 pts/0    00:00:00 grep --color=auto ssh  [root@linux265 ~]# ps -aux | grep queueA  root       1303  0.0  0.0  82468  1204 ?        Ss   Apr17   0:00 /usr/sbin/queueA  root       3260  0.0  0.0  52864   572 ?        Ss   Apr17   0:00 /usr/bin/queueA /bin/sh -c exec -l   root      24188  0.0  0.0 112652   956 pts/0    S+   11:39   0:00 grep --color=auto ssh
```
该命令还可以用于对进程的资源使用情况进行排序:
```
[root@linuxfancy ~]# ps aux | sort -nk 3
```
```
[root@linuxfancy ~]# ps aux | sort -rnk 4 
```
#### 3.我想知道内存&磁盘的使用情况?
**vmstat命令**
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写。
它是一个用于监控内存和磁盘使用情况的工具,但是也可以用来查看CPU的一些指标,如中断次数等。使用它可以查看内存使用的详细信息和磁盘的读/写情况。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-f27a4be2-403b-41bb-9856-43076eef6ac5.jpg)
以上表头字段的说明如下:
```
Procs(进程): r: 运行队列中进程数量 b: 等待IO的进程数量 Memory(内存): swpd: 使用虚拟内存大小 free: 可用内存大小 buff: 用作缓冲的内存大小 cache: 用作缓存的内存大小 Swap(交换): si: 每秒从交换区写到内存的大小 so: 每秒写入交换区的内存大小IO:(现在的Linux版本块的大小为1024bytes)bi: 每秒读取的块数bo: 每秒写入的块数 System(系统): in: 每秒中断数,包括时钟中断 cs: 每秒上下文切换数 CPU(以百分比表示) us: 用户进程执行时间(user time) sy: 系统进程执行时间(system time) id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 wa: IO等待时间
```
从以上命令就可以很清晰地看出服务器的各方面性能情况。除此之外还有以下命令也可以在排查或者调优中使用:
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-737f1be8-f8d7-4dcd-9807-5c2a7d14f8ff.jpg)
## 业务级别bug
### 如何定位到业务bug?
出现了业务bug那就纯纯的是开发或测试的锅了。
bug确定后第一步一定是**先看日志**,只要你写需求的时候日志打的全,一般出现了问题日志或者告警都会第一时间推送。
通过日志我们可以定位到bug对应代码的位置,但这仅仅是第一步,因为你只知道哪里出了问题,并不知道代码出了什么问题(除非一眼就能看出)。
所以下一步,**看数据**,数据是业务应用的核心。若通过日志和页面表现查看到你的主流程是没有问题的,那么下一步就是要确定表的数据是否有问题,数据存在bug的表现会是各方面的,可能是用户反馈,也可能是流程错误,这要取决于你表的设计。
切记!!线上数据是重中之重,当你决定要修复数据,在处理之前一定要做好备份,这样起码可以保证事情不会变的更糟。一般情况下修改线上数据这种活都需要你写好SQL,然后经过leader审批再交给DBA来操作,一定不要干出删库跑路这种事哟。
假设验证了你数据是OK的,那么问题就极大可能出现在了**代码层面**
当代程序员最难过的瞬间无非就是有一个非常紧急的线上bug需要你来解决,但是摆在你面前的却是一堆屎山代码!!
修改业务bug最重要的是要将bug点修改掉并且保证其它业务还能正常运行,这是牵一发而动全身的事情,否则bug只会越改越多。
所以平时应该预知到这些风险,做好代码设计。总结一下定位业务bug的正确步骤:
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-01788ebe-71c4-4af3-b411-0ad16410ee00.jpg)
# 方案设计
## 代码设计
一般公司都有自己的代码设计规范。比如由外到里包装代码,每一个方法都要有对应的职责,并且一个方法不要超过100行,一个类不要超过1000行代码等。清晰的结构可以让你和他人更好地review代码,避免看起来一头雾水。
写业务逻辑有两种方式,一种就是简洁明了的线性逻辑,另一种就是通过封装代码来减少代码耦合提高内聚性,也就是我们说的设计模式的使用。两种方式各有优缺点,但是工作多年了咱写的代码也不能直里直气的,多少得带点”艺术“对吧?推荐一下我经常使用但是也不会特别复杂的设计模式。
### 设计模式
**工厂模式**
这是最常使用的设计模式之一。
工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式。我们这里讲解简单工厂模式,因为后两个都是以其为基础做改进的。
其结构如下:
通过定义一个用以创建对象的接口, 让子类决定实例化哪个类。
所以其实质就是由一个**工厂类**根据传入的参数,动态决定应该创建哪一个**产品类**(这些产品类继承自一个父类或接口)的实例。
其包含以下角色:
* 工厂(Creator)角色:工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
* 抽象产品(Product)角色:它负责描述所有实例所共有的公共接口。
* 具体产品(Concrete Product)角色:创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-c005c540-07b6-4f5b-8048-aac45dca6481.jpg)
当遇到**需要根据某个前提条件创建不同的类实现**时, 可以使用工厂模式。
**装饰者模式**
它是在不必改变原类结构和继承体系的情况下,**动态地扩展一个对象的功能**。通过创建一个包装对象来实现对功能的扩展,动态的给一个对象添加一些额外的职责。
所以装饰者模式分为主体和装饰者。
其包含角色如下:
* 主体(Main):业务主体逻辑、字段等。
* 主体具体实现类(MainComponent):主体具体的实现类。
* 装饰者(Decorator):要做的装饰扩展逻辑接口。
* 装饰者具体实现类(DecoratorComponent):扩展逻辑的具体实现类。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-4931be26-47c8-4950-885e-70ee4f4940f7.jpg)
以上两种设计模式都有着”高扩展性“的特点,我们应该根据业务灵活设计接口,避免需求迭代导致的一坨坨又臭又长的代码。但是设计模式切勿用来炫技,一些较为冷门或者复杂的设计模式不推荐使用,否则当一套代码只有你能维护时,那将会是非常痛苦的。。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-621489ab-c9f3-4193-9288-f2ebf2f17b59.jpg)
当然了这也能够体现出你在公司的不可替代性!
## 架构设计
### 系统高性能 & 高可用
* 使用缓存:缓存的作用是为了系统的读能力。将用户经常访问的数据扔到缓存里面可以有效地提高访问速度并且减少数据库的压力。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-302e360e-964b-48a4-bf2a-5b5e7fd0c13c.jpg)
* 服务降级 & 限流:若短时间内流量激增影响到服务器性能,可考虑降级边缘业务以保证核心业务的可用性和性能。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-57a60456-b91c-4bcc-aebb-836b967b1bea.jpg)
分布式系统 & 服务拆分:将整个系统拆分成不同的业务模块再部署到对应的服务器中,服务之间通过中间件通信,可以有效地避免
和减少单一服务故障对整体系统的影响。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-7f8e4791-2fe1-46f4-9e50-58aa763a7015.jpg)
* 高可用架构:重要性不言而喻。同城多活、异地多活的架构部署可以保证单机房挂掉的情况下流量可以迅速切换到其他机房让核心业务不受影响。可谓是防止系统宕机必备良药啊!
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-chengxyrhyydxjxswt-7e9072a1-4843-4855-91c6-11043dfb5230.jpg)
# 做好事故复盘
都说小事故伤身,大事故提桶。。一般发生事故后写一张事故单是不可避免的。除了详细描述好事故发生的经过,背锅人,解决方案,后续的事故跟进也是一系列流程的事,多则需要数周去跟进。事故的发生对于团队的技术发展和成型往往起着积极推进作用,所以对于每一个团队来说事故一定是不可避免的。每次事故发生我们都要思考如何完善系统,打破技术壁垒。并且遇到事儿也不要慌,如果是大问题,那么首先背锅的一定是leader!
其实呢一般公司最喜欢的是能快速解决问题的员工,即便这些问题可能是由你创造的。
>转载链接:[https://mp.weixin.qq.com/s/D_kX_5chLMlUcwZKuiilIA](https://mp.weixin.qq.com/s/D_kX_5chLMlUcwZKuiilIA),出处:fancyJava,整理:沉默王二
......@@ -4,31 +4,18 @@ shortTitle: CS学习路线
category:
- 学习路线
tag:
- CS学习路线
- 编程学习路线
- 计算机专业学习路线
- 程序员学习路线
- Java 学习路线
- C语言学习路线
- Python 学习路线
- C++学习路线
- 前端学习路线
- Go 语言学习路线
- 数据结构与算法学习路线
- 蓝桥杯学习路线
- 大数据学习路线
- 操作系统学习路线
description: 除了 Java 的学习路线,还有 C语言、C++、Python、Go 语言、操作系统、前端、算法和数据结构、蓝桥杯、大数据等硬核学习路线,欢迎收藏品鉴!
- 学习路线
description: Java、C语言、C++、Python、Go 语言、操作系统、前端、算法和数据结构、蓝桥杯、大数据等硬核学习路线,欢迎收藏品鉴!
head:
- - meta
- name: description
content: 除了 Java 的学习路线,还有 C语言、C++、Python、Go 语言、操作系统、前端、算法和数据结构、蓝桥杯、大数据等硬核学习路线,欢迎收藏品鉴!
- - meta
- name: keywords
content: CS学习路线,编程学习路线,计算机专业学习路线,程序员学习路线,Java 学习路线,C语言学习路线,Python 学习路线,C++学习路线,前端学习路线,Go 语言学习路线,数据结构与算法学习路线,蓝桥杯学习路线,大数据学习路线,操作系统学习路线
content: CS,学习路线,编程学习路线,计算机专业学习路线,程序员学习路线,Java 学习路线,C语言学习路线,Python 学习路线,C++学习路线,前端学习路线,Go 语言学习路线,数据结构与算法学习路线,蓝桥杯学习路线,大数据学习路线,操作系统学习路线
---
> 除了 Java 的学习路线,还有 C语言、C++、Python、Go 语言、操作系统、前端、算法和数据结构、蓝桥杯、大数据等硬核学习路线,欢迎收藏品鉴!
> Java、C语言、C++、Python、Go 语言、操作系统、前端、算法和数据结构、蓝桥杯、大数据等硬核学习路线,欢迎收藏品鉴!
* [Java学习路线一条龙版(建议收藏🔥)](java/yitiaolong.md)
* [Java并发编程学习路线(建议收藏🔥)](java/thread.md)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册