Floating Cat

Unix Domain Socket
Unix Domain Socket简介Unix Domain Socket是在网络Socket架构上发展而来用来实现同一台主机内进程通信的机制,简称UDS.和网络Socket相比,使用UDS传输数据不需要经过网络协议栈,不存在数据封包和拆包等过程,只涉及数据拷贝的过程.UDS使用系统文件地址来作为通信地址,无须像网络Socket那样必须指定可用的IP和端口号,使用更加简单高效. 此外UDS支持SOCK_DGRAM和SOCK_DGRAM两种工作方式,即数据包套接字和流套接字,这两者类似UDP/TCP,但由于UDS在本机内是借助内核通信,因此不会出现丢包及发送包和接收包次序不一致的问题,换...
HashMap之哈希数组容量计算
构造函数HashMap在初始化时允许我们指定负载因子和哈希数组初始化容量大小,以JDK 1.8为例,其最终调用构造方法如下: 12345 public HashMap(int initialCapacity, float loadFactor) {...... this.loadFactor = loadFactor; this.threshold = tableSizeFor(initialCapacity); } 默认情况下负载因子loadFactory为0.75f初始化容量initialCapacity为16. 其中HashMap要求哈希...
Https简易工作原理
最近在看到这么一篇讲解Https原理的文章,语言精炼,通俗易懂,特地将其翻译下,原文在此how does https work 加密算法简介正文开始之前,我先来解释简单的解释下对称加密和非对称加密. 对称加密采用对称密码编码技术,也就是编码和解码采用相同描述字符,即加密和解密使用相同的密钥,实现这种加密技术的算法称对称加密算法。对称加密使用简单,密钥较短,加密和解密过程较快,耗时短,常见的对称加密算法有DES,3DES,lDEA,AES,RC4等。 非对称加密与对称加密不同,其加密算法需要两个密钥:公开密钥(publickey)和私有密钥(private),两者是一对的。如果用公钥...
深入分析AIL语言及init.rc
AIL语法AIL语言非常简单,主要包括两部分:结构语法及注释语法.下面我们就这两点进行说明 结构语法AIL语言包含主要包含五种结构语法: Actions Services Options Commands Imports 需要注意,AIL采用是面向行的代码风格,即用换行符作为一条语句的分隔符,也就是在init.rc中以一条语句通常占据一行.如果一行写不下,可以在行尾添加反斜杠来链接到下一行,换言之,通过行尾添加反斜杠符可以将多行代码链接为一行代码. init.rc有许多Service和Action组成.那么什么是Service和Action呢?Action和Service显式声明了一...
从inotify机制到FileObserver原理
inotify简介那还有其他的方式么?熟悉linux的童鞋应该记得从linux kernel 2.6.13开始引入inotify机制,用于通知用户相关文件变化情况:任何一个文件发生某种变化,都会产生一个相应的文件事件. 我们不仅好奇,文件的哪些事件能够被监控,也就是说inotify支持监控文件的哪些变化呢?继续往下看. 可监控事件类型目前inotify能够监控的以下文件变化事件: 事件类型 说明 IN_ACCESS 文件被访问 IN_MODIFY 文件被修改 IN_ATTRIB 文件属性被修改 IN_CLOSE_WRITE 可写文件被关闭 IN_CLOSE_...
空杯心态,一个程序员的自我修炼
禅师与我梦回远古,我是一个佛学造诣很深的人,听说某个寺庙有位德高望重的老禅师,便去拜访.老禅师的徒弟接待我时,我心想:我是佛学造诣很深的人,这老禅师算是老几,有我厉害,有我懂得多么?后来,老禅师十分恭敬的接待了我并为我沏茶.可在倒水时,明明杯子里的水已经满了,但老禅师还是在不停的倒,我心有疑惑,便笑问道:”大师,杯中水已满,为什么还不停下来?”.禅师说:”是啊,既然已经满了,干嘛还要倒呢?” 是啊,既然我已经觉得自己知道很多了为什么还要来请教禅师?是我知道的太多还是太少?回想这半年,经常觉得自己学了很多了,不自觉的便有飘飘然然的感觉.现在想想不是自己知道的太多,而恰恰是自己知道的太少.井...
关于时间的思考
你的时间值多少钱?用金钱量化的时间,这是我第一次这么做.虽然打小老师就说”时间就是金钱”,可我真没有计算过.如果说时间的价值是一秒钟一块钱,一天共有86400秒.这意味这你每分钟都在花出3600块钱.那我每秒又能够赚多少钱呢,算了算,大概是0.00634195元吧.这数字的比值是相当恐怖的,在这之前,我从未想过. 关于模式将具体事物抽象是为了寻求共同的模式,而将抽象事物再转为具体的事物才能更好的理解抽象事物.举一反三这个词语充分说明了这个过程,通过一个具体来抽象共同点,进而在将抽象应用于具体,这个过程是一个循环往复,不断加深理解的过程. 在这之前,我有个很显著的缺点就是,对于具体的问题无...
简析Base64原理
Base64起源在网络传输中,有些方式并不支持所有的字节,比如早起邮件系统支持传输可见字符,而对于ASCII中的控制字符就无法传输.在比如在传图图片时,由于图片对应的二进制流中的字节有些事不可见字符,因此也就无法进行传输,那怎么在不修改传输协议的前提下,来支持所有的字节传输呢,换言之就是讲不可见字符表示为可见字符? 而Base64就是该问题的一种解决方案,它是一种基于64个可见字符来表示二进制数据的方法. Base64编码规则Base64首先定义一个可见字符的索引表,按照规定,字符选用了A-Z、a-z、0-9、+、/这64个字符. 接下来首先将待转换的字符串每三个化为一组,由于每个字符...
从VFS谈文件读写
内核态与用户态在CPU的所有指令中,有一些指令是非常危险的,误用将导致系统崩溃.为了安全起见CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令.Intel CPU提供0到3四种级别的运行模式,数字越小特权越高.在Linux机器上,CPU只会在以下两种模式下运行: 受信任的内核模式(0级别),对应于Linux中的内核态 受限制的用户模式(3级别): 对应于LInux中的用户态 处理器总处于以下状态中的一种: 内核态,运行于进程上下文,内核代表进程运行于内核空间; 内核态,运行于中断上下文,内核代表硬件...
StringBuilder & StringBuffer设计与实现
AbstractStringBuilderStringBuilder与StringBuffer是两个常用的操作字符串的类,两者最大的区别在于StringBuilder是线程不安全的,而StringBuffer是线程安全的,此外前者是JDK1.5加入的.后者在JDK1.0就有了. 和String不同,StringBuilder和StringBuffer都是基于数组扩容来实现,其核心代码在其父类AbstractStringBuilder中.可以说StringBuilder和StringBuffer的实现原理是一样的,唯一的不同的是StringBuffer的大多数方法都是用synchroniz...