0%

前言

本文适用于 Debian/Ubuntu、RHEL/Fedora/CentOS、openSUSE/SLE-based、Arch 等 Linux 发行版。

VS Code 安装

Debian / Ubuntu

  • 安装软件仓库源和密钥
1
2
3
4
$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
$ sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
$ rm -f packages.microsoft.gpg
  • 更新安装包缓存,并安装 VS Code
1
2
3
$ sudo apt install apt-transport-https
$ sudo apt update
$ sudo apt install code # or code-insiders
阅读全文 »

版本说明

  • Hexo 5.4.0
  • NexT 8.8.1

NexT 渲染 Mermaid 绘图

安装 Hexo 插件

在博客的根目录下,执行以下命令安装 hexo-filter-mermaid-diagrams 插件

1
$ npm install hexo-filter-mermaid-diagrams --save
阅读全文 »

定义日志的颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
_COLORS=${BS_COLORS:-$(tput colors 2>/dev/null || echo 0)}
__detect_color_support() {
# shellcheck disable=SC2181
if [ $? -eq 0 ] && [ "$_COLORS" -gt 2 ]; then
RC='\033[1;31m'
GC='\033[1;32m'
BC='\033[1;34m'
YC='\033[1;33m'
EC='\033[0m'
else
RC=""
GC=""
BC=""
YC=""
EC=""
fi
}
__detect_color_support
echoerror() {
printf "${RC} * ERROR${EC}: %s\\n" "$@" 1>&2;
}
echoinfo() {
printf "${GC} * INFO${EC}: %s\\n" "$@";
}
echowarn() {
printf "${YC} * WARN${EC}: %s\\n" "$@";
}

# 使用示例
echoinfo "Hello World"
echowarn "Hello World"
echoerror "Hello World"
阅读全文 »

前言

  • 什么是跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一项不同,都属于跨域
  • 造成的原因:由于浏览器的同源策略,即 A 网站只能访问 A 网站的内容,不能访问 B 网站的内容
  • 特别注意:跨域问题只存在于浏览器,也就是说当前端页面访问后端的接口时,返回值是有的,只是服务器没有在请求头指定跨域的信息,所以浏览器自动把返回值给” 屏蔽了”
  • 解决跨域:经过上面的了解,可以得出几个解决跨域的方法(这里暂不考虑前端的实现方案),一是服务端指定跨域信息,二是在 Web 页面与后端服务之间加一层服务来指定跨域信息,比如代理服务 Nginx

Spring 配置跨域

使用注解实现跨域

特别注意:Spring 的版本要在 4.2 或以上版本才支持使用 @CrossOrigin 注解来控制跨域,使用注解的方式优势在于比较容易细粒度(局部)地实现跨域控制

在 Controller 类中配置跨域,可以使用注解 @CrossOrigin,该注解支持写在类或者方法上,示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
@RestController
@RequestMapping("/account")
public class AccountController {

@CrossOrigin
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {

}

}
阅读全文 »

前言

本文主要介绍如何实现 Java 的动态编译,并给出快速入门案例,点击下载完整的案例代码。

快速入门

编写接口

1
2
3
4
5
6
7
8
9
10
package com.clay.domain;

/**
* @author clay
*/
public interface Store {

public void sell();

}
阅读全文 »

前言

限流概述

在开发高并发系统时可以用三把利器来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统处理的容量,是抗高并发流量的 “银弹”;而降级是当服务出现问题或者影响到核心流程时,需要暂时将其屏蔽掉,待高峰过去之后或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询等,因此需要有一种手段来限制这些场景的并发 / 请求量,即限流。限流的目的是通过对并发访问 / 请求进行限速或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或友好的展示页)、排队或等待(比如秒杀、评论、下单等场景)、降级(返回兜底数据或默认数据)。主流的中间件都会有单机限流框架,一般支持两种限流模式:控制速率和控制并发。Spring Cloud Zuul 通过第三方扩展 spring-cloud-zuul-ratelimit 也可以支持限流,而 Spring Cloud Gateway 的限流实现可以看这里。常见的限流算法有漏桶和令牌桶,计数器也可以进行粗暴限流实现。对于限流算法,可以参考 Guava 中的 RateLimiter、Bucket4jRateLimitJ 等项目的具体实现。

Bucket4j 介绍

Bucket4j 是基于令牌桶算法的 Java 限流库,它主要用在 3 种场景:

  • 限制比较重工作的速率
  • 限制对 API 的访问速率
  • 将限流作为定时器,例如有些场景限制你对服务提供方的调用速度,因此使用限流器作为定时器,定时按照约定速率调用服务提供方
阅读全文 »

前言

Next 8.x 原生的暗黑模式

Next 8.x 主题已经原生支持暗黑模式,只需要在 Next 的 _config.yml 配置文件中,将相应的开关打开即可(如下所示):

1
darkmode: true

Next 8.x 主题原生暗黑模式的优缺点:

  • 优点:
    • 配置非常简单
  • 缺点:
    • 缺少切换按钮,默认是根据系统偏好(系统是否处于暗黑模式)来决定是否启用
阅读全文 »

前言

教程目标

构建集成了 Privoxy、Tor、ExpressVPN、SpeedTest 服务的 Docker 镜像,支持使用 SpeedTest 测试 ExpressVPN 的连接速度。Docker 镜像构建成功后,可以利用 Privoxy 与 Tor 在 ExpressVPN 的基础上,实现普通代理与匿名代理服务。

项目地址

阅读全文 »

前言

版本说明

本文使用的各软件版本如下所示,教程内容虽然会持续更新,但一切内容以 Waline 官方文档为准。

软件版本描述
linuxCentOS 7.9
docker20.10.5
mysql5.7.26
node14.17.3
hexo5.4.0
next8.7.0
waline-admin0.11.1
waline-client1.5.1
waline-server(waline-vercel)1.2.5
阅读全文 »