ESPIER 一只JAVA程序猿的日常

Yapi的安装和使用

获取Yapi源码

在github上获取最新的yapi源码

$ git clone https://github.com/YMFE/yapi.git ~/yapi

通过npm或cnpm安装依赖:

$ cd ~/yapi
$ npm install

这样准备工作就完成了一半了,接下来安装mongodb。

配置sqlite的相对路径

一般在使用sqlite的时候都是配置url为绝对路径,但是今天在测试代码的时候想到如果将 项目不到tomcat上之后,db文件总不能一直配置成绝对路径,肯定是项目中的某个位置, 因此对jdbc配置文件进行了修改:

    jdbc.url=jdbc:sqlite:blog.db

db文件放在WEB-INF/classes下,运行后发现貌似没有问题,然而事实并不是这样QAQ

因为测试中初始化代码会自动根据bean创建表格,我想是不是生成了一个新的db文件呢, 然后我把初始化关掉之后,果然报错了。。。。。。ORZ,然后我在tomcat的bin目录中 找到了崭新的db文件。

Spacemacs配置国内镜像

使用Spacemacs国内镜像

最近开始使用emacs写一些clojure的代码,但是不挂梯子的话,源的更新确实不快,因此决定到网上搜索一下怎么配置国内镜像,不过搜索结果大概都是下面这个样子:

# 基于emacs26
cd ~
git clone https://github.com/syl20bnr/spacemacs .emacs.d
修改
vim .emacs.d/core/templates/.spacemacs.template

少侠与剑

十年磨一剑,霜刃未曾试

           ——贾岛

亮剑

  少侠们刚从师门中出来,准备闯荡江湖时,难免被前辈指导:”少侠,亮剑吧!“

  此时,少侠们之间的差别就显现出来了。有的在师门勤奋磨剑,精于技艺。有的就是做做样子,整日浑浑噩噩,过着自以为快乐的生活,好吧,其实快乐也挺重要的。

  我们回到前面亮剑的问题,作为一名剑客,在被挑战的时候,拿不出手就很羞耻了,当然,大部分初出茅庐的少侠都是拿不出手或者剑磨得并不怎么样的吧。

  当然,对于大多数人来说,闯江湖的路,一开始都是这个样子。

Js整型的坑

JS整型的坑

昨天同事跟我说js在整型长度支持上有坑,我去查了一下确实是有些坑的。js对于数值的保存遵循IEEE 754 双精度浮点格式规范,采用了双精度存储,占用64bit。如图所示:

存储格式示意图,取自wiki

使用gradle打可执行jar包

前言

最近的一个项目里面需要使用gradle打一个可执行的jar包,在网上看了一堆帖子照着做最后都不是很成功,最后终于参考StackOverflow上的帖子搞定了可执行jar包的打包脚本,因此做一个笔记对这个进行一下记录。

记一次登录假死的异常排查

前言

事件的起因源自一次客户现场的调试,调试到一半,客户说办公系统突然登录不进去了Σ(っ °Д °;)っ,当时因为手头上的事还没有搞定,就顺手把客户的tomcat重启了,然后似乎就一切正常,我也没有太放在心上。然鹅,事情并没有这么简单。

Nginx+keepalived配置热备(互为主从)

从开发到实施XD

因为公司一个小项目要求有负载和热备,于是翻了很多网上的教程,于是找到了这一篇blog,很感谢博客的作者MassiveStars,这篇博客也使我学到了不少关于nginx配置的知识,毕竟以前连nginx都没有碰过XD。本博客大部分内容可能和作者的博客内容雷同,毕竟只是作为笔记存在的东西,侵删。

配置虚拟IP

互为主从模式

互为主从模式需要配置两个vip(虚拟ip)进行负载,因此是需要负载均衡支持的哟~

image

数据结构与算法学习系列(二)

线性表

线性表是一个存储相同类型数据元素的有限序列。
这里面需要关注的两个点就是,相同类型的数据、有限序列。

线性表包含两种类型:

  • 顺序表。使用一段地址连续的存储单元依次存储线性表的数据元素。
  • 链表。使用一组任意的存储单元存放线性表的元素。

顺序表

顺序表的特性

  1. 顺序表使用的一段连续的存储空间,因此只要知道存储顺序表的起始地址,就可以计算表中任意位置元素的地址。所以,计算任意一个元素的存储地址的时间是相等的
  2. 由于上述特性,顺序表具有随机存取的特性。
  3. 顺序表存取操作的时间复杂度为O(1)。

顺序表的实现

下面就是一个简单的顺序表的实现:

clojure读书笔记其四

这个系列还会继续的

忽然发现我之前已经建立了这篇博客,心想姑且把这篇完成吧,后续更高级的内容等我琢磨明白了再放出来。这个系列并不是一个单纯学习教程,更是我对Clojure认知的一种体现吧,说实话从java这种语言跳到clojure上还是有挺多问题的,至少思维方式可能就需要进行蛮大的转变,后续估计还会在读一些SICP之类的内容去逐渐加深自己对于LISP这个深坑的理解。

说一说常用的东西

这一节就来说一说常用的一些函数,在实际的应用中不论是刷题还是实际的开发应用,都会经常的用到,比如递归 map reduce apply 等等,这些都是接触clojure之后都会经常看到,用到的方法。那么,今天就来说说这些吧。

递归

递归的话在一般的语言中(没错,我说的就是Java),一般都会采用这种方式:

  public int doMethod(int param){
    // do something
    doMethod(param);
  }

在方法内部调用方法本身实现递归,完成方法的递归调用。
然而,在clojure中这种方式虽然可以,但却会造成堆栈的溢出(因为Clojure的尾递归优化不是用的原函数名,而是使用的recur,使用原函数名会不断产生新的实例从而造成堆栈溢出)。