坚持当初的美好

拥有,原本是美好的东西

可是,随着拥有的增多,它也会成为自己的一种束缚

人,会患得患失,不再那么敢闯,敢拼,去冒更大的风险,换取更大的拥有

 

人在改变外界的同时,也在被外界所改变

时间久了,才会发现自己已经变了

除了编程,还学会了喝酒,吹牛,画大饼

 

很喜欢Steve Jobs的《Think different》那一段话:

有一群疯家伙,他们很不守规则,总爱打破常规,没事总想制造出点事端。

没关系,你可以支持他们,否定他们,美化他们,甚至诋毁他们,

但是唯一不能的就是无视他们,因为他们改变了世界

 

好东西,需要坚持~

想要问问自己,还敢不敢,坚持当初的美好

对自己的一点点要求

做一个冷静型程序员,对人,我很随和,对事,我很较真

程序员要有之中化繁为简的能力,不然,总有一天绕死在自己技术迷宫里

会者不难,难者不会,不要以为会点技术就多牛,随着技术的发展,编程会越来越简单,语法越来越越来越简单,每一个不同编程的用户,都会定制或开发自己的工具或软件。牛的事情在于坚持,那时,你可能只会一点点技术,但你改变了规则。

不为炫耀而学习技术,只为了有一天,能用技术,让生活变得更方便一点,让世界变得更美好一点。

Flex Air内存泄露与解决方法

不写立马一篇日志,简直对不起自己这一天的苦心研究啊

内存泄露

一般内存泄露就是申请的内存没释放,程序运行久了会导致系统卡死,死于没有可用内存了

关于虚拟机的内存泄露是指,无效资源不能被垃圾回收器判断为回收,运行久了,导致新生代全满,新的对象的申请和释放都在老年代,程序运行超慢,因为没可用内存了

ps:新生代和老年代说的是jvm (java 虚拟机)的

比如,3个函数里的局部Object实例,正常情况下,局部变量在函数返回时都该回收了,但是如果这3个实例抱成一团,比如a关联了b,b关联了c,c关联了a,像是孤岛群的样子,那么jvm是不能回收了,它认为,只要不是孤岛,就说明有人在用,就不回收。这显然,bug了

Flex Air,类似于jvm,也是一个跨平台解释执行环境,所以,内存泄露原理完全同java,下面说说Flex里面会遇到的内存泄露情况。

例子

比如ATM软件,它运行起来就是几个页面不停的流转与切换,每个页面有图片,有SWF视频,声音文件等,运行了一天半天了,突然发现系统内存被占用100%了,心里一阵狂躁

原因

存在孤岛群,所以释放不了。所有应该回收而不能回收的情况,肯定都是因为这个。需要我们稍加注意,手动去解除它们之间的关联关系。

罪魁祸首们:

——–小分割

1. addEventHandler

去看看sdk源码,里面频频用到removeEventHandler,其初不明白为啥,原来添加了监听,那么回调函数这层关联会形成孤岛群,造成内存泄露

2.BitmapData

位图,以及使用它作为source的Image图片,如果没人告诉你,你根本想不到BitmapData还有dispose方法,如果不调用,造成内存泄露

3.SWF

Shock Wave Flash,Flash的文件格式的文件,load进来以后,需要unloadAndStop,否则造成内存泄露。

4.Module

同上,load需要unload,否则内存泄露

5.Effect

这个神奇了,特效使用完毕后,Effect.target必须置为空,否则内存泄露。

——–小分割

小结

没有完美的语言与运行环境,但是有完美的设计,解决性能,内存泄露等问题一般都是使用缓存,以及在合理的时机更新或同步,以及足够的异常处理等一系列手段解决。突然联想到一件事,就是使用hibernate,总出现莫名其妙提交失败之类的问题,其原因往往就是太依赖自动管理了,其实少了量的地方使用sql,来弥hibernate微操作做能力弱的缺点。

密钥管理科普篇

之前对密钥管理没有概念,经过1个月的自学,有了一定的理解,下面说说。

密钥管理用于需要加密的网络传输,我所从事的金融软件业领域对这点要求更严格,所有经过局域网,vpn等网络传输的数据都需要加密。

密钥

钥匙的意思,一般是一段二进制数据 (byte[]),为什么叫做密钥,其实是一种对现实问题的抽象。网络传输需要对数据加密,加密只是一种运算,加密并不能解决数据安全问题,只是为了让数据不可读,如果要保证安全性,就需要定义更复杂的规则,比如规定解密方必须要用到另外一段数据一起参与运算,这段数据就好比钥匙,要解密传输内容,就只能唯一的用这段数据,就像是一把锁和它的钥匙,一个锁只能用一种钥匙开。钥匙一般是秘密的,所以一般叫做密钥。

管理

就是钥匙管理,钥匙怎么配,配几把,给谁,怎么给。因为软件密钥有别于传统,就是一段二进制数据,具有电子特性,看不见,摸不着,易复制,传输快,所以它有自己的一套管理方法。

总的来说

所以密钥管理包含需要解决一下3类问题:1.加解密算法,2.密钥如何参与和密钥如何产生的加解密算法,3.密钥如何存储,如何给接收方。

1.加解密算法

比如位运算、md5、sha等,就是常见的加解密算法。好的算法,应该具有运算速度快,效率高,混乱程度高,加密内容不同,混乱后结果应该不同,加密后的内容,再加密,不会再出现原文,即不可逆等特点。这样才能又快又安全。

其实,md的全称是消息摘要算法,意思是对很长很长的数据进行概括,总结一段较短的数据,作为原文的标志,这个过程就像摘要一样,所以md5主要用于消息摘要(sha和md5作用一样)。

现在应用广泛的是只对敏感数据进行加密,比如密码和mac(消息认证码算mac一般是对原文整体做消息摘要,形成码,接收方也用同样的算法算mac,两次mac是否一致,来验证接接收到的消息和原文是否一致。

2.密钥的产生和参与算法

主要有两种模型:DES(对称加密算法),AES(非对称加密算法)。对称是指发送方和接收方使用相同的密钥,对数据进行加解密,非对称是说双方密钥不一样。这个听起来很玄乎,感觉不可能,其实真的不可能,呵呵,因为非对称里面的密钥,已经不是直接参与运行的密钥了。

这里引入了公钥和私钥的概念,公钥就是能通过网络传输告诉对方的钥匙,私钥就是不能传给对方,只有自己知道的钥匙。

非对称是在对称的基础上,又做了一层工作,让发送方有两把钥匙,公钥和私钥,接受方也有两把钥匙,公钥和私钥,这4把钥匙各不相同,但是用发送方的私钥和接收方的公钥可以产生出真正的密钥,用接收方的私钥和发送方的公钥,也能产生出真正的密钥,(真正的密钥只有一个),所以它非对称了。

接受方的私钥怎么来?当时我问了这个问题,他是通过发送方的公钥运算的来的,其实接受方的公钥也是这样产生的,在非对称加密算法里,一个输入,会有公私两个密钥输出。接收方公钥算出来后,需要再发送给发送方,这样发送方才有接收方的公钥。最后双方用对方的公钥和自己的私钥分别产生真正的密钥,然后在对数据进行加解密。(其实这个地方有点绕,呵呵,需要多想想)

3.密钥如何存储和分发

为了提高安全系数,密钥需要定期的更新,变化。所以需要设定有效期。

在互联网领域,公钥被广泛应用,来做简单的服务端的单项身份验证。比如一个网站,会用自己的密钥对数据加密,访问用户想要接受数据,必须知道密钥,网站会颁发自己的公钥,访问用户需要先获取公钥,来解密数据,或者验证数据。此时,访问用户还需要额外注意服务端身份是否正确,所以还需要一个权威的第三方认证机构,相用户担保,证明服务端身份。

有时,服务端还想公布自己的公司名称,简介等信息,所以,就有这样的需求,要把公钥,加密算法,公司信息,公钥有效期等信息储存在一个文件里,作为一个整体的需求,即证书。

证书只能有发送方制作,谁都不能伪造,修改。所以证书的制作,又是单独的一门技术,制作过证书就有体会,有一步需要输入密码,就是防止证书的伪造,只有知道密码,才是证书的制作人,对自己的证书进行修改。

入门完毕

我看了这本书《Java加密与解密的艺术》,以及用百度搜索的相关资料。