- 浏览: 52819 次
最新评论
文章列表
1. 加密的作用
1)明文变密文(你不知道密钥是很难解密的);
2)数据的一致性(hash值一样);
3)数据的可信任性(验签)。
2. 两种不同的加密与解密
1)对称加密:加密与解密使用相同的密钥,处理速度快;
2)非对称加密:加密与解密使用不同的密钥(生对生成),处理速度不及对称加密。
3.在非对称加密中,究竟是公钥加密还是私钥加密的问题
1)如果只是用加密的用途
公钥加密,私钥解密(私钥只有一个,公钥大家都知道)。
2)如果用验签
私钥加密,公钥解密(解密的来源是私钥,其它的来源是不可信任的)。
下面是两个工具类。
import java.io.ByteArra ...
背包的算法的动态方式如下:
f(i,w) = max{ f(i-1,w), f(i-1,v-weight[i])+value[i] }
状态转移方程理解如下:
f(i,w)表示前i个物体面对容量为w时背包的最大价值,weight[i]代表物体i的重量(即重量),value[i]代表物体i的价值;如果第i个物体不放入背包,则背包的最大价值等于前i-1个物体面对容量v的最大价值;如果第i个物体选择放入,则背包的最大价值等于前i-1个物体对容量w-weight [i]的最大价值加上物体i的价值value[i]。
综上,第i件物品要么选,要么不选。
1)如果不选,则第i件物品放w容量的最优值等于 ...
我记得当时在Oracle面试时,面试人问我一个HashMap有几种访问方式,我答有两种:一种通过key,另一种是通过Entry。今天总结一下这两种遍历的方式。
1. 最基本的get(Object key)方法
HashMap map=new HashMap();
map.put("name", "test1");
map.put("age", 19);
System.out.println(map.get("name")+"\t"+map. ...
在上一篇中http://gaofulai1988.iteye.com/blog/2261505介绍了ArrayList iterator的实现,今天再分析另外一个list中特有的迭代器ListIterator。
看看它是如何new的呢。
public ListIterator<E> listIterator() {
return new ListItr(0);
}
public ListIterator<E> listIterator(int index) {
if (index < 0 || index > ...
昨天在我们的系统中看到了这样的一行代码:
private final Map<String, String> CACHE = new WeakHashMap();
对于WeakHashMap而言,之前还真的没有听过, 惭愧啊!晚上就好好的研究了下,这个不对不说说强引用、软引用、弱引用、虚引用以 ...
1. 构造函数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
this(corePoo ...
现在的框架十分之多,让你目不暇接,也有人觉得相当方便,调用一个api就可以实现一个可能,根本不需要自己写多余的代码。的确,框架在某种程序上,减轻了我们的工作量,但是作为一个开发人员来讲,我们不仅要学会怎样 ...
1. 缓存分类
1)Client Cache
在大型网站中,往往会考虑使用Client Cache,如京东网站,通过抓包可以看出它就设置了Cache: Cache-Control:max-age=120,其它的大型网站,如淘宝也都设置了Cache的值。它们都是通过Http 协议头中的字段来控制完 ...
在Java中,所有类的基类都是Object,作为JDK源码分析的第一课,今天给一道题来测试下大家对基础的掌握,让大家知道理解JDK源码的重要性。
class Person{
private String name;
private int age;
public Person(String name, int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
...
IO分为字节流和字符流,字符就是简单的字符串存储,从理伦上讲,在内存中所有的数据都是二进制,是一个字节一个字节的序列,所以字节流可以存储像图片、图像等文件。现在有一个文件,分别用字节流和字符流来实现。
1. 字符读取(一次读若干个数据)
FileReader reader = new FileReader(file);
char buf[] = new char[1024];
int ch;
while ((ch = reader.read(buf)) != -1) {
buffer.append(buf);
buf = new char[1024]; // 一定要清掉啊
} ...
作为分布式系统而言,有两个重要内容(当然还有其它的内容,这里仅仅讨论hadoop的核心):分布式存储和分布式计算。
分布式存储的原理:将一个大文件划分成若干部分,存储到不同的节点上(副本存储)。
好处:1)由于有副本存储,某个节点的down机不会影响到整个集群的使用,数据还是可以保证完整性的;
2)大文件划分小文件存储,这样便于后面的处理。这是因为计算节点(存储节点是同一个概念)可以处理这一部分数据,多个
计算节点可以并行处理。
整个来讲,HDFS的原理比较容易读,本质上讲,它是一个文件系统,只不过是分布式的,你也完全写一个简单的分布式文件系统出来的,只要你想做。
在 ...
代理模式作为开发人员来讲,应该不会很陌生,它要做的事情很简单:屏蔽被调用方的实现过程。
它在一类远程过程调用中,使用得非常广泛。具体的过程呢?
调用方 A 被调用 ...
看过Hessian的部分源码,这里总结一点RPC的设计思路。
RPC可以由下面两种思路来实现:
1. 基于HTTP协议来设计;
2. 基于TCP/IP来设计。
不管哪一种思路,本质都是一样的,下面就讲讲它们实现的思路。
1. 传输的内容是什么?
一般而言,我们需要传输接口名,方法名,参数,而这些参数可以放在一个类中序列化进行传
输。
2. 怎么调用呢?
通过动态代理来完成,实现了InvocationHandler接口后,由代理的对象来调用方法,这样就
进入到invoke方法里,invoke方法里面,我们可以通过网络向server端发送信息了。
3. 通信的载体是 ...
对于两个系统之间交互信息,有两种常见的方式:webservice和restful。
webservice简单理解就是一个系统开放出一个接口供别人调用,它注重的是方法的调用。
restful简单理解是通过抽象出网络资源,通过http来调用,它注重的是网络资源的抽象。
今天看一下个restful的实现框架,以一个例子来看看。
1. 下载jersey jar包;
2. 在ecplise中创建一个web工程;
3. 写一个类,如下:
@Path("/hello")
public class HelloResource {
@GET
@Produce ...
我们知道request.getInputStream()只能读一次,如果下一次读,就会报告Stream closed的错误。下面是解决方法。
InputStream input = request.getInputStream();
ByteArrayOutputStream bytebuffer= new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = input.read(buffer)) > -1 ) ...