KJohn2q

一个热爱技术,热爱分享的程序员

0%

如何进行异常处理?

java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。

异常处理机制

java 程序在执行的过程中如果出现异常,会自动生成一个异常对象,该异常对象将被自动提交给 JVM,当 JVM 接收到异常对象时,会寻找能处理这异常的代码并把当前异常对象交给其处理,这一过程称为捕获异常。如果 JVM 找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。

关键字解释

  • try: 测试它所包含的代码是否会发生异常
  • catch: 在异常发生时就抓住它,并进行响应的处理,使程序不受该异常的影响从而继续执行下去。
  • throw: 明确抛出一个异常。
  • throws: 声明一个方法可能抛出的各种异常。
  • finally: 为确保一段代码不管发生什么异常状况都要被执行。

异常类层次结构

java-exceptions-hierarchy-example

如图所示,异常类层次结构顶部为 Throwable 类,该类直接继承自 Object。 该类有两个直接子类:ErrorException

Errors 和 Exceptions

阅读全文 »

在我刚开始接触 npm 包时,常会困惑 package.jsonpackage-lock.json 各自的作用和两者的区别。本篇文章就详细梳理一下:

生成package.json

新建一个空目录,执行 npm init, 会提示你输入包名,版本号,描述,入口文件等信息,引导在当前目录生成 package.json 文件,如全部默认,则文件内容为:

1
2
3
4
5
6
7
8
9
10
11
12
{
"name": "pack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

image-20211106113604539

生成 package-lock.json

当我们安装软件包时,改文件会发生变化。如在当前目录下安装 hexo-cli

1
npm install hexo-cli

安装完成后,会在 package.json 文件中,插入下面的内容

1
2
3
"dependencies": {
"hexo-cli": "^4.3.0"
}
阅读全文 »

windows 下的命令行工具一直被人诟病:老旧,功能弱,界面。我一直在寻找 windows 下比较好用的终端工具,尝试使用过 cmdercygwin等,都因各种各样的原因放弃了。直到微软推出了新的终端工具:Windows TerminalWindows Terminal 是一款界面美观,现代化易用的终端工具。我将会基于此构建功能丰富、易用的终端。

Windows Terminal 的安装

windows terminal 是一款微软开源的免费、好用的终端工具。可以集成多种 shell,如 powershell,cmd, git 等。可通过 Microsoft Storewinget工具来进行安装。

image-20211112083938310

1
winget install --id=Microsoft.WindowsTerminal -e

powershell core的安装

安装 powershell-core

powershell corewindows powershell 不同,是一款开源、跨平台的命令行 shell。可以通过 Microsoft Storewinget工具来进行安装。

image-20211105234447288

1
winget install Microsoft.PowerShell
阅读全文 »

npm 是基于 nodejs 开发的javascript 包管理器,用于管理开发中软件包的依赖关系,从远程仓库中下载我们需要的工具。我的博客就是基于 hexo 来构建的,我们可以通过 npm install hexo-cli -g 来安装 hexo-cli 工具。那么 -g 表示什么意思?与不带 -g 有什么区别?

npm 安装

npm 安装软件有两种方式 :局部安装和全局安装。为了测试,我们使用 npm初始化一个包。

1
2
mkdir -p pack
npm init

image-20211105155130555

局部安装

1
npm install [package/module]

局部安装会在将包/模块安装在当前目录的 node_modules 目录中。以 hexo-cli 为例

1
npm install hexo-cli

安装完成后,当前目录中多了一个 node_modules目录。

阅读全文 »

docker 镜像占用空间问题描述

在平时使用 docker 过程中,使用一段时间后,经常会出现 C 盘爆满的情况,不得已去清理 C 盘空间,保证系统正常使用。

image-20211104155929332

docker 使用 wsl2 作为基础引擎,则 docker 镜像默认存储在 %USERPROFILE%\AppData\Local\Docker\wsl\data\ext4.vhdx。可以通过 Settings -> General 查看是否使用了 wsl2

image-20211104160655271

可以通过修改 docker 镜像存储位置,将 docker镜像存储在 HDD 中,不影响系统正常使用。

修改镜像存储位置

首先,需要关闭 docker desktop,可以通过右击任务栏 docker 图标,点击 Quit Docker Desktop

image-20211104161227253

打开命令行,检查运行状态

阅读全文 »

github actions 例子

通过使用 github-actions, 可以在自己的仓库中自动化地执行软件开发工作流。以我的博客工作流举例,当提交代码到远程仓库的 source 分支时,安装所有依赖,并将生成的静态页面文件部署到 master 分支上,具体的配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: Build and Deploy
on:
push:
branches:
- source
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2.3.1 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.
with:
persist-credentials: false

- name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built.
run: |
npm install
npm run build

- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@4.1.5
with:
BRANCH: master # The branch the action should deploy to.
FOLDER: public # The folder the action should deploy.

github actions 语法解释

workflow 文件位于 ./github/workflows

  • name, workflow 的名称
  • on ,触发事件,如:push, pull_request
  • jobs , 一系列在相同运行环境中执行的步骤
  • build-and-deploy, 在 jobs下定义的一个 job 的名称
  • runs-on, 定义 job 的运行时环境
  • steps, 定义一组执行步骤
  • name:Checkout 执行步骤的名称
  • uses:actions/checkout@v2.3.1 该执行步骤使用社区提供的 action, 名称为 checkoutv2.3.1 为该 action 的标签,详情参见 checkout in github actions marketplace
  • with 定义 action 使用的变量
  • run 定义 job 需要执行的命令

引用链接

阅读全文 »

docker

  • docker -v, --version 查看 docker 版本

docker run

启动一个新的容器 (container). 如镜像不存在,会先从 docker 托管库中拉取镜像。

用法:docker run [OPTIONS] IMAGE

OPTIONS

  • -d, --detach 容器在后台运行
  • --name string 指定容器的名称
  • -e --env list 设置环境变量
  • -p --publish list 建立容器到本地的端口映射
  • -i,--interactive 保持命令行交互状态
  • -t, --tty 分配一个伪终端
  • -w, --workdir 设置容器的工作目录
  • --rm 如果容器已经存在,自动删除
  • -v, --volume list 绑定挂载卷

例子: docker run -d --rm --name dmysql -e MYSQL_ROOT_PASSWORD=secret -v mysql-data:/var/lib/mysql mysql:5,7 该命令会运行一个 mysql:5.7 的容器,名称为 dmysqlroot 账户密码为 secret, 数据存储在名为 mysql-data 的挂载卷中,并将本地端口 3306 与容器 3306 端口做了映射。

docker image

管理 docker 镜像

阅读全文 »

独立服务指的是没有任何业务依赖,可独立部署,供其它系统调用的服务。如数据库,缓存服务,消息队列等。

docker 部署 mysql

mysql5.7 为例

1
2
3
4
5
6
docker run -d \
--rm \
--name dmysql \
-p3306:3306 \
-e MYSQL_ROOT_PASSWORD=secret \
mysql:5.7

如使用 powershell,则:

1
2
3
4
5
6
docker run -d `
--rm `
--name dmysql `
-p3306:3306 `
-e MYSQL_ROOT_PASSWORD=secret `
mysql:5.7

参考

docker 部署 redis

1
2
3
4
5
docker run -d \
--rm \
--name redis-app \
-p6379:6379 \
redis:latest
阅读全文 »

本文记录个人常用软件与浏览器插件。操作系统:windows

开机自启

  • clash 网络代理软件
  • listary 集应用和文件快速搜索的工具 (可使用 woxeverything 组合替换之)
  • picgo 图床管理工具
  • snipaste 轻量截图工具

浏览器

  • chrome 用于页面调试
  • 新edge 用于普通的浏览,收藏同步

云盘

  • 阿里云盘 不限速 3T+ 免费空间
  • onedrive 在windows系统上同步体验极佳,用于保存资料,个人相册同步

浏览器插件

  • pocket 经典文章收藏,同步,有手机端app
  • GoFullPage 整站、滚动截屏工具
  • bitwarden 密码管理器插件
  • Internet Download Manager idm浏览器下载插件,搭配pc端应用使用
  • AdBlock 广告屏蔽插件
  • Google翻译 翻译
  • 沙拉查词 整合多个翻译和查词工具
  • Imageus 图片缩放插件,无需到新链接打开
  • Infinity 新标签页 ,定制新标签页,可添加常用链接

音乐下载

阅读全文 »

加密

在如今的互联网世界中,我们不可避免的会传输敏感信息:服务器的账户密码,身份证号,或者仅仅是你想和某人说话,不想让其他人听见。那如何实现安全、有效的向对方传输信息呢?这就需要对信息进行加密。接下来我将通过一个例子进行表述:

无加密

想象一下,A 要给 B 发送消息 Hello 。刚开始对信息没有任何加密

image-20211011111533617

此时,因为没有加密,不怀好意的 C, 能看到 AB 发送的信息内容

image-20211013113841872

对称加密

A 意识了此问题, 选择了算法 AES, 密码 123456 对信息内容进行加密,以 Hello 为例, 加密后的内容为: U2FsdGVkX19E9T4t8hqL472J1jXdiDV7P9UZmM8LrNs=B 在收到信息后,选择同样的算法和密码,对信息解密,得到真实的内容。而不怀好意的 C 即使看到了信息,因为没有密钥,看不到真实的内容。

image-20211013120142096

阅读全文 »