Git使用中遇到的问题

新的公司新的项目,虽然平台仍然是Java,但是说接触到的技术有一些是自己从未接触的。这其中就包括了从未使用过的版本库Git,自己也并未系统的学习过,也就是边用边学的一种状态,其中也遇到了不少问题。下面是遇到的一些问题的记录:

1.由于对于Git来说,团队中每个人都是平等的,没有所谓的中心点。又一次在从远程更新了别人的更改后,发现项目不能运行,总是提示代码中的一些方法找不到。怀疑是相同的地方自己也做了更改,所以在使用fetch命令更新时不会覆盖自己的更改。当时自己的项目也没有做任何更改,就想着能否强制把远程的所有更改更新到本地。Google找到了方法,使用命令:

Read More

Linux下crontab的使用

以前公司的服务器上有做定时脚本的执行,但是所有配置都是之前都设置好的。现在向对自己博客的nginx做分割,google到了关于分割的原理。其中就有一步也就是定时去执行一个任务,这个任务去创建新的文件。这就涉及到了crontab命令。

crontab命令的功能是在一定的时间间隔调度一些命令的执行。命令的基本格式为:

Read More

Markdown的简单使用

最近在研究github上的一些开源项目,也把自己以前写过的一些代码放上去。总是需要写一些说明,以免连自己以后看的时候都得费力。

在github上写自述文件使用的是Markdown,当然也可以选择使用普通文本文件。Markdown始终标记语言,类似的语言太多了,我们web常用的html就是,而Tex实际上也算是一种。Markdown的语法相比于html简单太多了,它没有html那么多语法标签,但是它可是兼容html的。也就是说你可以在Markdown里面使用html标签。

Read More

nginx切割日志

虽然自己的博客访问量比较小,但发现随着时间的推移,日志的体积也是越来越大。这样不但不便于管理,而且再做分析的时候也非常的不方便。因此就想到了做日志的分割。

现说一下分割的原理。首先就是做一个定时任务,这个任务就是创建新的日志文件并备份就的日志文件,然后通知nginx的日志进程向新的日志文件里写。这里涉及到了linux下的crontab,具体以后再说。

Read More

Mao OS X下使用LaTex写简历

大名鼎鼎的Tex,相信只要是写过论文的人大概都知道。由于之前自己要写简历,有人就给我推荐用Tex。经过一番折腾,照着别人的模板写了一份,也对它有了大概的了解。

首先应该知道Tex是一种排版系统,也相当于一种语言,印刷界使用的比较多,当然在我们的特别的天朝使用还是比较少的。至于是谁发明的,还有一大堆的历史,就不用去说了。Tex不是一种所见即所得的设计思想,而是如同html一样的语言。现用类似于程序语言写好,然后再经过编译才能得到所需要效果。

Read More

停下来只是为了走的更远

6月底我第一次提交了辞职信,boos让我在考虑考虑,并且绝了我的辞职请求。七月初我再次提交辞职信,这次是人事以暂时未有人接替工作为由延后了我的辞职。7月31日我从公司离职,至此我在公司工作一年零4个月,也是我第二份工作的结束。

辞职前已经有前技术经理推荐的工作可以去,但我最后我还是拒绝了。

Read More

密文保存用户密码的方式

在需要用户模块的项目中,对于用户密码的保存,一般不会使用明文保存,这样是不安全的。通常情况下,我们都需要对密码进行不可逆的加密,然后存放在数据库中。然后在用户登录的时候,把其输入的密码进行加密与数据库中存放的密文对比来判断密码是否正确。
目前所使用比较多的是MD5,但是BCrypt也使用的比较多,相对来说BCrypt比MD5要安全一些,他的加密更慢。而且一般我们再对密码进行密文加密后,如果有人从数据库中拿到密码通过比对也容易找出对应的用户。因此我们在对密码机密时首先通过对密码的加密,然后在生成一个随机的salt,合并到一起存入数据库。对与使用BCrypt加密,首先下载BCypt的库,其实也就一个.java文件,把他放到项目中,在用户注册是对其提交过来的秘密加密,代码是:

Read More

Java中的Timer和TimerTask的用法

经常我们都会有这样的需求,要固定的每隔一段时间执行某一个任务。比如我们做一个缓存来减少与数据库的交互,而为了使缓存与数据库中的数据尽量达到同步,需要每个固定的一段时间去数据库中的数据是否有更新以达到与缓存的同步。这样的需求可以做一个线程,线程中做一个死循环,循环中就是要执行的这个任务,每执行完一次让线程睡眠一段时间,这要就可以达到这个需求。但是用最简单最便捷的方式是使用Java为我们提供的计时器的工具类,即Timer和TimerTask。
Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中有一个抽象方法run(),类型线程中的run()方法。我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作。schedule方法有三个参数,其中第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务;第二个参数有两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;而第三个参数就是执行的周期,为long类型。schedule方法还有一种两个参数的执行重载,第一个参数仍然是TimerTask,第二个表示为long的形式表示多长时间后执行一次,为Date就表示某个时间后执行一次。
需要注意的是Timer就是一个线程,使用schedule方法完成对TimerTask的调度,多个TimerTask可以共用一个Timer,也就是说Timer对象调用一次schedule方法就是创建了一个线程,并且调用一次schedule后TimerTask是无限制的循环下去的,使用Timer的cancel()停止操作。当然同一个Timer执行一次cancel()方法后,所有Timer线程都被终止。
下面是示列代码:

Read More

使用lucene的排序

最近公司要对项目中的一个功能做一个优化,其中有一个是对目的地列表的排序优化,但是由于目的地这一块是之前的同事使用lucene做的,而自己也从来没有接触过lucene,所以就不得不通过各种方式了解并且解决。
首先,由于之前的目的地排序是默认的,也就是没做排序。并且此次优化排序是要根据索引中未有的一个域,所以首先要更新索引生成的地方,添加这个域到索引中。
然后就是索引查询排序的问题了。lucene默认也是排序了的,它是根据索引的得分而排序的,所以这次排序是通过改变其得分达到效果。
在查询查询索引的时候,IndexSearcher对象的search方法有很多重载,默认使用search有两个参数的那个方法,如果我们需要自定义排序,则使用

Read More

PowerDesigner使用遇到的问题记录

在使用PowerDesigner建立模型并且生成sql语句的情况下出现了几种问题:
1、首先创建cdm,然后ctrl+g或者工具菜单下的generate physical Data Model,然后选择对应的数据库版本,生成pdm;

2、然后在选择生成的pdm,按ctrl+g或者选择数据库菜单(Database)下的generate database,选择要生成的那些表,还有保存的脚本文件的位置,确定之后就会生成sql脚本到保存的位置;

Read More