这个星期记录一下数据加密算法,记得刚开始学编程的时候就有一个疑问:我们的密码就这么放在数据库里面,多不安全啊,数据库管理员不是拿着数据想干嘛就干嘛吗?但是由于认知有限,一直没有解决这个问题,直到去年实习时,当时的项目经理Zack说,用户密码不能明文存放到数据,必须经过MD5加密,终于解决了这个问题。因为MD5的不可逆性,所以就算知道MD5码,只要你不是一些弱密码,一般情况下发生泄密的可能性是非常非常小的,几乎可以认为是绝对安全的,但MD5实现的实现却很简单,今天就记录一下实习时用到的一个MD5加密算法的一个实现:
package cn.bridgeli.demo;
import jav[......]
Read more
学以致用,前几篇文章我们学了很多设计模式,今天我们就把这些模式综合运用一下,看看实际应用是怎么导入Excel的,(当然这里面没有用到侦听者模式)
我们先看一下Excel的样子:
因为是Excel的的解析,所以应该是前台上传的,我们应该有一个Servlet来接收前台传过来的数据:
package cn.bridgeli.demo.servlet;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSe[......]
Read more
这一节记录一下模板方法,在学模板方法之前,要先学习一下什么是模板,模板其实就是一个例子,例如我们做市场调研时,调研人员会给我们一个表格,我们只需要回答一些答案即可,映射到我们的代码中就是这个样子:
aaaaaaaa
bbbbbbbb
cccccccc
********
dddddddd
eeeeeeee
########
ffffffff
gggggggg
$$$$$$$$
这是我们第一次写的代码,但是我们在后来的coding中发现,这一段代码我们需要copy一份,只需要该其中的第四行、第七行、第十行就行了,其余的不需要做修改,如果我们copy过去,改一下这么做虽然可以完成,但我们想一[……]
Read more
今天我们来讨论策略模式,策略模式是一个比较难理解的模式,尤其是和工厂模式相结合时,当时看程杰的《大化设计模式》时,第二个讲的就是这个,那是一个迷迷糊糊啊,其实仔细分析策略模式并没有那么难,在我们学策略模式之前,先搞明白什么是策略呢?策略是:在某一件事上,在一定的情况下,所采取的行动。当然这个“在一定的情况下”一定是某一种情况,也即是可数的。当情况很多的时候,也许我们要用很多烦人if-else去处理,所以策略模式就是解决这类问题的,其一个典型应用就是在电商平台中:不同的用户有不同的等级享有不同的折扣,我想有些人第一想到的处理方式就是:
package cn.bridgeli.demo;
p[......]
Read more
关于技术,老夫一直认为应该以实用为主,至于那些理论性的东西,用得多了慢慢就理解了,所以为了说明今天这个设计模式,我们先提出一个问题:我们知道很多系统都有注册功能,有些呢,直接返回您已注册成功请直接登录,而有些注册则要求相对比较比较高,例如注册成功之后需要向用户填写的手机发送短信、Email发送邮件之类的,关于这个问题,大家立马想到的也许是这么来实现吧:
package cn.bridgeli.regdemo.service;
public class UserService {
public void register(String username, String passwo[......]
Read more
在程序设计中,单例模式是非常常用的一个设计模式,至于有点老夫就不用多说了,肯定有一点比较省内存,但什么的类适合于设置成单例呢?一言以蔽之:
在程序设计中,无状态的类都可以设置成单例。
那么问题来了,什么样的类是无状态的,什么样的类是有状态的呢?其实很简单:
没有数据,也就是说这个类只有方法,没有成员变量。
举个例子:
User类是否可以设置成单例呢?肯定不行,因为User类每一个对应的Id肯定是不同的人,如果设置成单例,数据就乱了;但一般Service层、DAO层的方法呢?这个一般都是一些业务逻辑,只有一些方法,没有数据,所以肯定可以设置成单例,事实上我们这些类如果有[……]
Read more
作为一个软件开发人员,关于scm的重要性和必要性,相信我不用说了,目前最流行的的两个版本控制工具svn和git,关于这两个区别还是很大的,而git功能更强大,猜测以后会越来流行,在svn作为打败众多SCM工具的一个版本控制系统,他目前的使用还是非常多的,而且操作也非常简单,所以这一节就写一下svn服务器的搭建,有机会将来在写一篇关于git烦人使用的文章。好了,下面进入今天的正题:
首先推荐大家下载Subversion,随便哪个版本都行,安装过程就不说了,可以说是一路next,那么服务器就转好了,下面经过一些设置就可以使用了。
注:可以再cmd中敲一下 svn,看是否安装好了
第一步:在服务[……]
Read more
最近闲着没事在写微信公众号,其中一个是聊天机器人,和网上的众多机器人原理一样,但是功能没那么强大(主要是只是库不够强大),但是怎么解决“如何根据用户的问题从回答库中找出最匹配的答案呢?”,大家最先想到的也许是数据库的 LIKE 就好了嘛,但是 LIKE 存在如下问题:
1. 在问答库非常庞大的时候,LIKE 的效率会非常非常的慢;
2. LIKE只适用于关键字匹配,并不适合自然语言匹配。举个例子:用户的问题“河南的省会是哪个城市?”,而数据库的的记录是“河南的省会是哪”,虽然无论是从字面上还是意义上都一样,都 LIKE 却无能为力;
3. LIKE 无法计算相似度。也就是说 LIKE 返回多条[……]
Read more
1. forward和redirect
大家都知道servlet在处理完业务逻辑返回时有两种方法forward和redirect,他们的差异相信不用我再多做解释(如果不知道的请自行谷歌,哪怕是百度也可以),而Spring mvc是对servlet的一种封装,那spring mvc默认采用的是哪一种呢?我们是否可以自己选择采用哪一种方式返回呢?还有我之前在用spring mvc 都是返回到某一个view,它是否可以访问另一个controller呢?针对第一个问题,我们可以看一下spring mvc 的配置文件便知分晓:
<property name="viewResolver[......]
Read more
前几天在公司分割一个很简单字符串,结果却怎么测都不对,最后查了一下资料,终于发现了端倪:
split(regex);
replace(target, replacement);
replace(oldChar, newChar);
replaceFirst(regex, replacement);
replaceAll(regex, replacement)
仔细看一下,你会发现split()、replaceFirst()、replaceAll()的参数都是Regular Expression,也就是正则表达式,只有replace()的参数是字符或者字符串,由于这些参数类型的差异,[……]
Read more
近期评论