对本网站安装SSL证书记录

一直都没有对这个博客安装 SSL的冲动,直到和朋友聊起小程序,我才想起将这个网站实现 https 访问的形式。

大致的过程如下:

  • 购买证书
  • 配置域名
  • 提交审核
  • 配置服务器

总体而言,安装的过程还是比较简单的。

 购买证书

其实阿里云和腾讯云均提供免费的 SSL 证书服务,缺点是不能使用通配符,也就是说,你只能通过这个 SSL 证书绑定一个域名地址。比如我的这个个人博客,我就对www.wangminli.com 这个地址中的“www”设置了 https 访问协议。如果你向我一样,提供服务的需求不大,可以选择这个免费的服务,我购买的是“免费型DV SSL”这个服务,有效期为一年。

如果你对网站开启了多个二级域名,那么建议你购买一个 SSL 证书服务,多个网站公用一个 证书,一劳永逸。

配置Redis Sentinel,并使用Jedis连接

目标:
演示的3台redis主从服务器的连接信息,使用sentinel管理主从节点,并使用jedis连接sentinel
配置:

* 配置3个redis服务,其中7000做主服务器,7001、7002做从服务器
* 配置3个sentinel,端口分别为26379、26380、26381
* 使用jedis连接26379这个sentinel

注意

* 所有编辑的文件和输出日志均在/usr/local/bin目录下,生产中最好将日志文件移出
* 所有服务器均在本地测试,生产中要使用不同的服务器

演示:
编辑一个redis-7000.conf的配置文件,如下

 port 7000
 daemonize yes
 pidfile /var/run/redis-7000.pid
 logfile "7000.log"
 dir "/usr/local/bin/"

使用sed命令生成redis-7001.conf、redis-7002.conf

《深入理解Java虚拟机》笔记

自动内存分配管理机制
  • Java虚拟机栈
    • 这里面存储的是Java方法的内存模型
    • 这里会有两种异常情况
      • StackOverFlowError
      • OutOfMemoryError
  • 本地方法栈
    • 存储的是Native方法服务
    • Native方法根据系统环境的不同而不同
    • 这里也会有这两种异常情况
      • StackOverFlowError
      • OutOfMemoryError
  • Java堆
    • 存放对象实例的空间,几乎所有的对象实例都在这里分配,所以也被称为GC堆。
    • 是java虚拟机管理的最大的一块空间,跟随虚拟机启动而创建。
    • 划分
      • 新生代
      • 老生代
      • 元空间
        • 它分配在物理内存,1.8以前叫“永久代”,永久代在堆内存中分配,功能基本相同
        • 这是为了兼容HotSpot和JRockit诞生的,这两个虚拟机都被Oracle收购,故要兼容
    • 细分

解决Windows下无法对docker容器进行端口映射的问题

微信截图_20170427183208

 

在安装了一个Windows下安装了docker,并尝试在其中运行Nginx、owncloud等服务,但映射完毕之后,在主机的浏览器中,打开localhost:port无法访问对应的服务。

用百度尝试了下,始终找不到答案,难道这个问题大家都没遇到过么?于是使用Google,并用英文检索,一会就找到了对应的答案。

The reason you’re having this, is because on Linux, the docker daemon (and your containers) run on the Linux machine itself, so “localhost” is also the host that the container is running on, and the ports are mapped to.

On Windows (and OS X), the docker daemon, and your containers cannot run natively, so only the docker client is running on your Windows machine, but the daemon (and your containers) run in a VirtualBox Virtual Machine, that runs Linux.

原来,docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。我们可以通过命令

在Windows中通过docker安装Ubuntu镜像

1

缘起

Docker的技术已经比较热了,因为我不是运维工程师,过去一直没有冲动让我去学习一下。我平时喜欢在Linux上折腾点东西,但公司为了配合开发,使用的是Windows系统。最近脑子一热,想通过docker在Windows下安装一个Linux虚拟机,抛弃笨笨的VM Ware和Virtual Box的安装方式,这样做一来在以后可以在虚拟机里测试点东西,二来也通过这个方式学习一下Docker。

Canal记录mysql的binlog日志监听

缘起

公司有一个app客户端,在调取某些数据时,需要从不同的项目中获得数据,并处理这些数据,导致显示到客户端非常慢,现需要对这个问题进行优化。数据库大都是mysql服务器,所以选用了适合它的开源框架canal来处理数据。

在使用canal监听mysql的二进制日志的过程中,发现可用性还是比较强的,优点如下
  • 能够针对不同的表进行监听(订阅)
  • Canal客户端出现异常时,服务器可以将产品记录,重启客户端时可以将未消费的数据继续消费,做到不丢失数据(服务端记录未消费的产品)
  • Canal服务端出现异常,导致客户端无法消费数据时, 重启Canal服务器可以从出现异常时产生的数据,也可以做到不丢失数据。(服务端可以从上次无法生产的地方继续生产数据)

使用mybatis动态查询表名

开发时有个需求,需要对不同的表进行统计条目,然后,在table中分页显示,如果对每个表的统计功能都建立一个mapper,势必会非常繁杂,所以采用动态传入表名的形式会比较方便。
正常情况下,向表名这样的特殊字段是不可以正确执行的,mybatis做了预编译的处理,此时表名是必需的,这是为了防止sql注入的情况。如果我们要动态传递表名,我们可以对mybatis声明为statementType=”STATEMENT”的形式,取消mybatis的预编译,并且,传参时通过${}来接收,这样就可以完成表名的动态传参。
<select id=”countByTbName” statementType=”STATEMENT” resultType=”java.lang.Integer”  parameterType=”java.util.Map” >
        SELECT
            count(*)
        FROM
            ${tbName}
    </select>

 

Linux常用的几种上传下载命令

对于客户端和服务器都是Linux系统(或MacOS),他们之间的文件传递的命令是兼容的,使用命令scp就可以做到,需要注意的只是文件上传/下载的顺序
上传
scp -P port -r  local_folder user@remote_ip:remote_folder
下载
scp -p port -r user@remote_ip:remote_folder local_folder
对于客户端是Windows系统,可以使用secureCRT实现文件的上传/下载功能,目前常用的putty不支持Zmodem协议,所以无法完成这个功能。
这时,需要对secureCRT做个设置,指明文件上传下载的路径分别是什么,在option——session options中指明他们
命令如下:
rz:上传命令(Receive)
sz: 下载命令(Send)

解决jar包互相依赖导致的错误

最近项目中需要使用阿里巴巴的canal记录mysql的binary log,来监听主数据库的变化,从而备份到从数据库服务器中。但是在一切测试完毕之后,导入到原项目的时候,居然报错,解决了一个上午,终于解决,报错内容如下:
Image
发现,仅仅在向pom.xml文件中添加canal的依赖时,就会包上述的错误,我添加的内容如下: