• 两个好用的C++库

    最近在学习envoy 的源码,发现里面引用的JSON解析和日志记录的库挺好用的,这里简单记录一下

  • SpringBoot优雅停机

    说明

    在生产环境中,当我们需要升级或者停止服务的时候,应该希望当前服务能够服务完所有请求后再停止,从而达成优雅停机

  • Java集成各种脚本语言

    过年放假终于有空写博客了,今年给自己定的目标是要多写博客,先从一些平时开发中遇到的问题总结开始,也方便后面查询

    应用场景

    ​ 当在开发一些需要频繁对接第三方接口或是需要频繁修改业务逻辑的功能时,为了保证业务代码的扩展性,可以选择集成一种脚本语言实现。

    ​ 以下探索了Java语言集成Groovy脚本,Shell脚本,Javascript脚本,Lua脚本和Python脚本的方法,并且进行了一些简单的性能对比。

  • 使用X11VNC搭建服务器开发环境

    背景

    公司给配的电脑配置不行,没有固态硬盘,时间一长磁盘老化,读写速度捉急,用来搞开发实在难受。不过有几台公用的高配服务器,于是就想着薅点服务器的羊毛,毕竟服务器硬盘至少都是企业级别的金盘,读写速度还是相当有保障的。经过一段时间的摸索发现以下三种模式可以实现借用服务器进行远程开发:

    • 在服务器上安装虚拟机

      1
      2
      3
      4
      该方法主要测试了Virtualbox虚拟机软件,该方法的优点是可以安装windows系统,同时稳定性和管理也比较方便,支持系统快照,可随时弄一个全新的centos环境;通过Virtualbox自带的rdp服务端,可以很方便地连接到虚拟机。
      但该方法有两个缺点:
      一个是虚拟机绑定的是一个虚拟网卡,当需要连接测试开发的服务时还需要设置端口映射。
      另一个是虚拟机的虚拟磁盘文件通常是只增不减的,即使内部的文件已经删除了,还是会占用服务器的磁盘空间,手动缩减虚拟磁盘文件大小通常比较麻烦。
    • 本地安装Xming软件,将服务器上的gui通过x11协议投影到本地主机

      1
      该方法是比较轻量化的一种方式,实际测试下来,只要本地主机不断网,基本上可以稳定运行,但该方法有一个致命缺点,就是和本地主机上的中文输入法不是很兼容,每次敲代码前还得切换本地主机的输入法到英文,另外在投影过来的远程应用中输入中文也比较困难,另外对剪切板的共享支持也存在问题,实际开发体验并不好。
    • 通过X11VNC工具包,在服务器上启动完整的桌面环境

      1
      该方法基本上规避了x11协议投影的几个缺点,本地主机只需要安装一个vnc的客户端软件即可,即使断网也不影响服务器上运行的开发环境,另外对剪切板共享的支持也还不错。
  • Nginx使用总结

    本文着重介绍Nginx的使用方法,主要包含Nginx进程管理,常用配置和TCP内核参数优化等内容。

    Nginx进程管理

    • 可以用向Nginx发送信号的方式管理Nginx进程

      1
      2
      3
      4
      nginx -s reload		#重新加载配置文件,对应信号HUP
      nginx -s reopen #重新写日志,对应信号USR1
      nginx -s stop #关闭nginx,对应信号TERM
      nginx -s quit #优雅退出nginx,对应信号QUIT
    • 配置文件热更新的流程(nginx -s reload)

      1
      2
      3
      4
      nginx能实现配置文件热更新是具有其master和worker的多进程模型,其具体操作步骤如下:
      (1) 当用户输入nginx -s reload命令时,会先读取pid文件获取master进程的pid,然后对master进程发送HUP信号
      (2) master进程在收到HUP信号后,会启动新的worker进程,这些新启动的worker进程加载最新的配置文件,之后会向老的worker进程发送QUIT信号(优雅退出)
      (3) 在完成新老worker进程的更替后,nginx整体对外便实现了配置热加载的功能
  • Nginx源码入门指南

    引言:

    ​ Nginx作为我们常用的反向代理服务,其优秀的性能和扩展性获得了众多大厂的青睐,Nginx的源码在设计上有很多值得我们学习的地方,本文将介绍一些Nginx源码的一些基础概念,为读者阅读源码扫除一部分障碍。

    ​ 通过阅读本文,你可以了解到Nginx源码目录层级的安排,Nginx中实现的一些巧妙的数据结构,如何通过模块为Nginx扩展新的功能,以及如何单步调试Nginx源码。另外,本文编写内容均假定Nginx运行在linux系统上。

  • jetson nano安装dolphin模拟器

    名词介绍

    jetson nano是Nvidia发布的一款低端arm开发板,相比树莓派自带显卡支持cuda通用计算,图形性能有了质的提升,官方操作系统基于ubuntu 18.04。

    dolphin模拟器是一款开源游戏模拟器,可以模拟并游玩老任的wii游戏。

  • BIO、NIO、AIO 区别

    1、IO介绍

    我们通常说BIO是相对于NIO而言的。 BIO是Java初期引入的IO操作模块。 BIO是BlockingIO的缩写。 顾名思义,就是阻塞IO。 AIO是NIO的升级版,提供异步非阻塞IO操作模式。

    1.1 BIO、NIO、AIO的区别

    BIO 是传统的 java.io 包,它基于流模型,以同步和阻塞方式交互。 也就是说,当读入输入流或输出流时,线程会被阻塞在那里,直到读写动作完成,它们之间的调用是可靠的线性顺序。 它的优点是代码比较简单直观; 缺点是IO效率和可扩展性很低,容易成为应用性能瓶颈。

    NIO是在Java 1.4 java.nio Package中引入的,它提供了Channel、Selector、Buffer等新的抽象,可以构建多路同步的非阻塞IO程序,提供更贴近底层操作系统的高性能数据操作模式.

    AIO 是 Java 1.7 之后引入的一个包。 它是NIO的升级版。 它提供了异步和非阻塞的IO操作模式,所以人们称之为AIO(异步IO),异步IO是基于事件和回调机制的,即应用操作后直接返回,不会被阻塞在那里. 当后台处理完成后,操作系统会通知相应的线程进行后续操作。

1