- 博客(23)
- 收藏
- 关注
转载 JAVA设计模式
1.1. 什么是模式 个人感觉模式更多的是项目经验的提炼,是某种特定场景下的经验之谈。模式是典型场景的解决方案,所谓某典型场景,为有相似目标,有相似约束,且场景具有重复性。所以设计模式往往是发现,而不是发明。你的设计不自觉地落入到某种设计模式中,无论你事先了解这种模式与否。但若你事先了解,你则可站在巨人的肩膀上,借鉴前人的经验,设计更合理更简单的方案。1.2. 主要模式简记 1.2.1.
2016-09-23 11:53:01 579
原创 关于 23 种设计模式的有趣见解
1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
2016-09-23 11:44:37 416
转载 AndroidKeyStore的使用
密码算法使用: 关于对称加密:Google推荐使用使用的GCM模式,但是我司代码中大量使用的CBC模式,两个模式的代码,华为代码进行修改的时候,必然会考虑兼容性问题,因此把两段自己写的代码案例都贴出来供开发人员参考,便于产品的修改。1 对称加密:本地随机的密钥 方案:直接使用androidstore生成随机数,随机数做密钥1.1 AES_CBC android 实现 函数主体:public c
2016-09-22 17:57:03 8147 3
转载 数字签名
通俗易懂的数字签名解析链接: http://www.cnblogs.com/1-2-3/archive/2007/09/17/colloquialism-digital-certificate-part1.html http://www.cnblogs.com/1-2-3/archive/2007/09/19/colloquialism-digital-certificate-part2.htm
2016-09-22 17:18:37 2240
转载 RSA
RSA加密原理超经典解析链接: http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 密码算法应用规范 规则:使用RSA算法时要选取合适的公共指数e说明:公共指数e位长越小,RS
2016-09-22 15:44:53 1640
转载 AES 代码实现
1 分组加密 首先了解下什么是分组加密:分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。 3 ECB的加密方式 http://zh.wikipedia.org/wiki/%E5%9D%97%E5%AF%86%E7%A0%81%E7%9A%84%E5%B7%A5%E4%BD%9C
2016-09-22 15:04:09 1856
转载 AES原理
在有些技术文献和资料里常用Rijndael代之AES算法。AES是一个对称的、块加密算法,什么意思?“对称”的意思是:(1)甲方选择某一种加密规则,对信息进行加密;(2)乙方使用同一种规则,对信息进行解密。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。“块”的意思是:如果待加密数据太长,则需要按固定长度分割后,对每段明文数据依次单独加密。AES算法数据分组的长度和秘钥长度相互
2016-09-22 11:40:59 2968
原创 Java单例模式
最简单的实现首先,能够想到的最简单的实现是,把类的构造函数写成private的,从而保证别的类不能实例化此类,然后在类中提供一个静态的实例并能够返回给使用者。这样,使用者就可以通过这个引用使用到这个类的实例了。public class SingletonClass { private static final SingletonClass instance = new SingletonCla
2016-09-21 15:38:33 232
原创 JVM、GC的一些事
JVM的基本结构一般如下图所示: JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。(右图表示了从java源文件到JVM的整个过程,可配合理解。 关于类的加载机制,可以参考http://blog.csdn.net/tonytfjing/article/details/47212291) 2.执行引擎:负责执行clas
2016-09-19 14:56:12 389 1
原创 ClassLoader
ClassLoader,即java类加载器,主要作用是将class加载到JVM内,同时它还要考虑class由谁来加载。在说java的类加载机制之前,还是像前面的博客一样,先说说为什么要知道java的类加载机制。个人认为主要有以下几个原因:按需加载。JVM启动时不能确定我要加载哪些东西,或者有些类非常大,我只希望用到它时再加载,并非一次性加载所有的class,所以这时候了解了加载机制就可以按需加载了。
2016-09-19 10:36:13 456 1
原创 Java 同步锁
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。二、然而,当一个线程访问object的一个synchronized(this)同步代码块时
2016-09-18 16:14:14 2294
原创 CompletionService + Callable实现线程动态返回结果
一般情况下,我们使用Runnable作为基本的任务表示形式,但是Runnable是一种有很大局限的抽象,run方法中只能记录日志,打印,或者把数据汇总入某个容器(一方面内存消耗大,另一方面需要控制同步,效率很大的限制),总之不能返回执行的结果;比如同时1000个任务去网络上抓取数据,然后将抓取到的数据进行处理(处理方式不定),我觉得最好的方式就是提供回调接口,把处理的方式最为回调传进去;但是现在我们
2016-09-18 11:52:03 318
原创 Http的多线程下载的实现
a、对于网络上的一个资源,首先发送一个请求,从返回的Content-Length中回去需要下载文件的大小,然后根据文件大小创建一个文件。 b、根据线程数和文件大小,为每个线程分配下载的字节区间,然后每个线程向服务器发送请求,获取这段字节区间的文件内容。 c、利用RandomAccessFile的seek方法,多线程同时往一个文件中写入字节。package com.zhy.mutilthread_
2016-09-14 16:39:18 3668
原创 Excutor的使用
为每一个请求开辟一个线程,首先我得承认我也经常用这样的写法~但是我们还是要吐槽下这样写法的不足: a、线程的生命周期的开销还是相当高的,大量的线程的创建将消耗大量的计算机资源 b、可创建线程的数量存在一个限制值(这个值由平台觉得,且受很多因素的制约),如果超过这个限制,可能会报OOM错误 c、在一定范围内,增加线程可以提高系统吞吐量,但是超过了这个范围,就物极必反了,只会降低程序的执行速度。
2016-09-14 15:22:23 1370
原创 CyclicBarrier的使用
CyclicBarrier把所有的线程都阻塞在一个阀门位置cyclicbarrier.awaite(),然后等到等待的线程数到达预设的值,就打开这个阀门。记得是阻塞线程,不是阻塞操作,在同一个线程使劲掉await是没什么效果的。public class CyclicBarrierTest{ private final int STUDENT_COUNT = 10; private
2016-09-14 14:48:36 341
原创 FutureTask的使用
FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞。 由于:FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞这两个特性,我们可以用来预先加载一些可能用到资源,然后要用的时候,调用get方法获取(如果资源加载完,直接返回;否则继续等待其加载完
2016-09-14 10:07:15 452
原创 Semaphore信号量的使用
public class ConnectPool { private ArrayList<Conn> pool = new ArrayList<Conn>(); private Semaphore semaphore = new Semaphore(3); class Conn { } ConnectPool() { pool.add(new Conn
2016-09-14 09:18:40 762
原创 ImageView中的android:src和android:background的区别
下面是两个官方的描述: android:background setBackgroundResource(int) A drawable to use as the background. android:src setImageResource(int) Sets a drawable as the content of this ImageView. 有下面几个不同点: 1.
2016-09-09 15:04:04 2019
转载 Fragment的生命周期
自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~哈哈,是不是有点过~ 本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:没有布局的Fragment有
2016-09-02 17:48:39 228
原创 android:configChanges属性
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置Activity的android:configChanges=”orientation|keybo
2016-09-02 16:26:22 224
转载 Android layout属性大全
第一类:属性值 true或者 false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧
2016-09-02 11:53:29 287
原创 Android ImageView 图片等比缩放问题
android:adjustViewBounds 是否保持宽高比。需要与maxWidth、MaxHeight一起使用,单独使用没有效果。 android:cropToPadding 是否截取指定区域用空白代替。单独设置无效果,需要与scrollY一起使用 android:maxHeight 定义View的最大高度,需要与AdjustViewBounds一起使用,单独使用没有效果。如果想设置图片
2016-09-02 11:10:23 5796
原创 Eclipse中堆内存的设置
进入eclipse程序文件夹,打开名称为eclipse.ini的配置文件进行编辑,按需添加或修改如下两项设置:当堆内存的余量小于40%时,JVM会将内存扩大到-Xmx的值 当堆内存的余量大于70%时,JVM会将内存缩小到-Xms的值 jvm初始堆内存,默认是物理内存的1/64 -Xms256m jvm最大堆内存,默认是物理内存的1/4 Xmx2048m在用eclipse开发的时候,特别是启
2016-09-01 09:47:29 5982
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人