在读select、poll源码前,需要先了解的知识点: 等待队列 文件系统(主要是进程的打开文件描述符表以及struct file) poll机制 资源注册监听poll() -> poll_wait(...实际linux内核设计: * 每个wait_queue_t的private字段指向同一个poll_wqueues,然后 * 共用的poll_wqueues中保存了指向调用进程
本文将结合用户态的接口以及内核态的实现剖析文件IO。...Reference: The Linux Programming Interface: Chapter 4/14/15, Kernel/fs 通用接口 通用IO包含open/read/write/close...fsync(fd)强制其刷新到磁盘上 fdatasync(fd)不刷新metadata的时间戳 sync()刷新所有的缓冲区(Linux要求等待所有操作完成才能返回)。...因为这个原因,写操作并不能实时的进行持久化,需要linux使用journal机制来保证文件系统的崩溃一致性,然而journal机制本身又需要进行flush。...通过间接层处理空洞 - 当我们进行SEEK_END时,END到当前的pos会存在空洞,那么Linux并不会为空洞分配block存储,空洞通过为inode系统中的指针打上标记0表明其并未指向实际磁盘块即可
哈勃沙箱技术总览 第一节 哈勃linux沙箱 今天说的哈勃沙箱是腾讯哈勃检测系统中,linux恶意文件检测部分的开源代码。...今天是源码剖析的第一篇,目标是简要介绍一下沙箱使用的检测手段和主要技术点。从github中输出的html报表里,监控的信息还是挺丰富的。...从static_analyzer.py来看,哈勃linux沙箱静态检测,获取的信息主要有六个方面: ? 1....文件类型信息 通过file命令获取文件信息,比如是二进制还是其他类型文件,在linux中是无法通过后缀判断它是什么文件的。 ? 2.
继前篇介绍完sendto 数据发送函数 后,这里介绍数据接收函数 recvfrom。
ArrayList源码剖析 ArrayList的源码如下(加入了比较详细的注释): package java.util; public class ArrayList extends...它有很多个重载的方法,但实现思路都是一样的,我们来看泛型版本的源码: public static T[] copyOf(T[] original, int newLength) {...该方法被标记了native,调用了系统的C/C++代码,在JDK中是看不到的,但在openJDK中可以看到其源码。...该方法可以直接将ArrayList转换得到的Array进行整体向下转型(转型其实是在该方法的源码中实现的),且从该方法的源码中可以看出,参数a的大小不足时,内部会调用Arrays.copyOf方法,该方法内部创建一个新的数组返回...6、在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理,ArrayList中允许元素为null。
ArrayList源码剖析 ArrayList的源码如下(加入了比较详细的注释): [java] view plaincopy package java.util; ...=0; i<size; i++) a[i] = s.readObject(); } } 几点总结 关于ArrayList的源码...该方法被标记了native,调用了系统的C/C++代码,在JDK中是看不到的,但在openJDK中可以看到其源码。...该方法可以直接将ArrayList转换得到的Array进行整体向下转型(转型其实是在该方法的源码中实现的),且从该方法的源码中可以看出,参数a的大小不足时,内部会调用Arrays.copyOf方法,该方法内部创建一个新的数组返回...6、在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理,ArrayList中允许元素为null。
方法剖析 set() 既然底层是一个数组ArrayList的set()方法也就变得非常简单,直接对数组的指定位置赋值即可。
从下面的一段代码中,我们从源码的角度分析 RxJava 的实现原理: ObservableOnSubscribe oos = new ObservableOnSubscribe<Integer...AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.computation()) .subscribe(o); 分析源码之前
方法剖析 add() add()方法有两个版本,一个是add(E e),该方法在LinkedList的末尾插入元素,因为有last指向链表末尾,在末尾插入元素的花费是常数时间。
Koa 源码剖析 本文主要从源码的角度来讲述 Koa,尤其是其中间件系统是如何实现的。...跟 Express 相比,Koa 的源码异常简洁,Express 因为把路由相关的代码嵌入到了主要逻辑中,因此读 Express 的源码可能长时间不得要领,而直接读 Koa 的源码几乎没有什么障碍。...Koa 的主要代码位于根目录下的 lib 文件夹中,只有 4 个文件,去掉注释后的源码不到 1000 行,下面列出了这 4 个文件的主要功能。...我们逐步来看上面三个步骤在源码中的实现。 首先是类和构造函数的定义,这部分代码位于 application.js 中。...事实上,如果读者去读 Koa-router 或者 Koa-static 的源码,也会发现它们都是使用 return next 方法。 5.
一、前言 hhvm源码中充满了很多C++11的新特性,并且使用了各种设计模式如工厂,模板方法等,利用智能指针包裹指针,让delete没有肆意的出现 模板,继承,explicit,纯虚函数的出现令代码中充满了惊喜
本书以CPython为研究对象,在C代码一级,深入细致地剖析了Python的实现。书中不仅包括了对大量Python内置对象的剖析,更将大量的篇幅用于对Python虚拟机及Python高级特性的剖析。
set接口常用的方法 //源码中的 public interface Set extends Collection { int size(); boolean isEmpty...即添加和取出的顺序是不同的,虽然取出的顺序不一致,但是不会一直变) set接口对象不能通过索引来获取 HashSet hashSet底层hashMap 而hashMap的底层其实是数组 + 链表 + 红黑树 //源码...源码详情 /** 计算 key.hashCode() 并将较高的哈希位传播 (XOR) 到较低的哈希位。由于该表使用二次方掩码,因此仅在当前掩码上方的位数上变化的哈希集将始终发生冲突。...//源码 public V get(Object key) { Node e; return (e = getNode(hash(key), key)) == null ?
Vector源码剖析 Vector的源码如下(加入了比较详细的注释): package java.util; public class Vector extends...throws java.io.IOException { s.defaultWriteObject(); } } 几点总结 Vector的源码实现总体与...ArrayList类似,关于Vector的源码,给出如下几点总结: 1、Vector有四个不同的构造方法。...无参构造方法的容量为默认值10,仅包含容量的构造方法则将容量增长量(从源码中可以看出容量增长量的作用,第二点也会对容量增长量详细说)明置为0。...4、同样在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理,Vector中也允许元素为null。
线程的优先级是高度依赖于操作系统的,Windows和Linux就有所区别(Linux下优先级可能就被忽略了)~ 可以看到的是,Java提供的优先级默认是5,最低是1,最高是10: ? 实现: ?...我们来看看源码是怎么讲的吧: ? 再来看看刚才说抛出的异常是什么东东吧: ?
} } //代码量较多,此处省略 //...... } TreeNode 继承了LinkedHashMap.Entry,这里代码较多,省略,有兴趣可以自己翻阅源码详细阅读...后续内容计划 后面将继续剖析其他Java容器类。
LinkedHashMap可以用来实现LRU算法(这会在下面的源码中进行分析)。 LinkedHashMap同样是非线程安全的,只在单线程环境下使用。...LinkedHashMap源码剖析 LinkedHashMap源码如下(加入了详细的注释): package java.util; import java.io.*; public...关于LinkedHashMap的源码,给出以下几点比较重要的总结: 1、从源码中可以看出,LinkedHashMap中加入了一个head头结点,将所有插入到该LinkedHashMap中的Entry按照插入的先后顺序依次加入到以...3、注意源码中的accessOrder标志位,当它false时,表示双向链表中的元素按照Entry插入LinkedHashMap到中的先后顺序排序,即每次put到LinkedHashMap中的Entry
写在前面 上篇React SSR 之 API 篇细致介绍了 React SSR 相关 API 的作用,本篇将深入源码,围绕以下 3 个问题,弄清楚其实现原理: React 组件是怎么变成 HTML 字符串的
源码查看Zookeeper底层 从源码启动zookeeper zookeeper源码下载地址: //选择分支3.5.8 https://github.com/apache/zookeeper.git...源码导入idea后,org.apache.zookeeper.Version类会报错,需要建一个辅助类 package org.apache.zookeeper.version; public interface...server: bin/zkCli.sh -server 192.168.50.190:2181 从源码里运行客户端(org.apache.zookeeper.ZooKeeperMain),注意需要加入启动参数...Leader选举源码流程图 ZAB协议介绍 整个Zookeeper就是一个多节点分布式一致性算法的实现,底层采用的实现协议是ZAB。...Zookeeper写数据ZAB协议源码剖析
领取专属 10元无门槛券
手把手带您无忧上云