0%

在业务开发中经常会使用枚举来定义一些业务常量,这确实可以让我们的代码变的干净和优雅,但是如果枚举使用不当的话很可能就会发生问题,这里分享一些关于枚举最佳实践。

阅读全文 »

在 go 语言里启动一个 http 服务非常简单,只需要一行代码http.ListenAndServe()就可以搞定,这个方法会一直阻塞着直到进程关闭,如果这个时候来了些特殊的需求比如:

  • 监听服务启动
  • 手动关闭服务
  • 监听服务关闭

在 go 中应该怎么实现呢?下面来一一举例。

阅读全文 »

前言

在 linux 中我们经常会使用&符号让进程在后台运行,例如:

1
nohup java -jar app.jar &

但是这样的话在终端就看不到输出了,有时候临时需要排查问题看不到输出就 GG 了。

解决办法

其实可以利用proc系统文件来访问程序对应的输出:

  1. 首先获取到进程对应的PID
  2. 通过tail命令读取输出:
1
2
3
4
#获取标准输出
tail -f /proc/<PID>/fd/1
#获取错误输出
tail -f /proc/<PID>/fd/2

1. HTTP 协议

在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。

1.1 HTTP 协议介绍

HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层

HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230RFC 7231RFC 7232RFC 7233RFC 7234RFC 7235),通讯报文如下:

  • 请求
1
2
3
4
5
6
7
POST http://www.baidu.com HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Content-Length: 7
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

wd=HTTP
  • 响应
1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 14 Feb 2019 07:23:49 GMT
Transfer-Encoding: chunked

<html>...</html>
阅读全文 »

前言

使用 docker 的时候为了排查问题经常需要下载一些软件包,但是一般镜像中都没有vim,如果直接用apt官方源去下载,基本上就是下面这样:

这是因为没有更新源,需要通过apt-get update进行更新,但是国内访问官方源的速度实在是太慢,要修改成国内的源镜像去加速,这里记录下没有vim的情况下如何快速修改源地址。

使用清华大学镜像

1
2
sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sed -i 's|security.debian.org/debian-security|mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list
  • 更新和安装软件
1
2
apt-get update
apt-get install -y net-tools

前言

github page 在国内访问速度非常慢,而且近期 github.io 的域名经常被干扰解析成127.0.0.1,迫于无奈在网上找到了一个能白嫖加速 github page 的办法,就是套一层 cloudflare CDN,虽然它在国内没有 CDN 节点,但是整体效果是完爆 github.io,不过要注意的是免费版本是有请求次数限制的,每天 10W 次,当然这足够我的小博客使用了,这里记录一下操作步骤。

阅读全文 »

前言

以前在使用wireshark做协议分析的时候,一直以为它只能抓 HTTP 的报文,所以在抓 HTTPS 包的时候一直是用的Fiddler,然而有一天我突然想抓一下HTTP2的报文看一看,Fiddler就不行了,于是在一番 google 之后发现wireshark是可以支持的,只不过需要在特定的条件下才可以。

阅读全文 »

为什么升级

最近突然想把博客的评论系统换掉,因为之前用的valine评论插件,起初是觉得方便并且可以支持匿名评论,但是在评论之后没有通知,很多评论都是过了很久之后我才知道,所以想换一个能有通知的评论系统,起初的选型是:GitmentGitalk,但是发现一个更好的utterances,查了一下 next 高版本已经可以支持utterances了,这样升级 next 就直接接入了。

阅读全文 »

背景

首先请思考一下以下代码执行的结果:

  • LogAop.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//声明一个AOP拦截service包下的所有方法
@Aspect
public class LogAop {

@Around("execution(* com.demo.service.*.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
try {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
Object ret = joinPoint.proceed();
//执行完目标方法之后打印
System.out.println("after execute method:"+method.getName());
return ret;
} catch (Throwable throwable) {
throw throwable;
}
}
}
阅读全文 »

Maven-Helper 插件介绍

这个插件能可以通过 UI 界面的方式来查看 maven 项目的依赖关系,当然还有最重要的功能解决依赖冲突,使用起来非常的方便,效果图:

在开发 JAVA 项目的时候,经常会由于 maven 依赖冲突导致项目启动失败,这个时候往往会懵逼,到底哪个依赖冲突了,需要排除哪个子依赖,有了这个插件之后就可以很快的定位到冲突的组件,并进行排除。

阅读全文 »