【文文殿下】浅析scanf源码】的更多相关文章

本文仅做理性上的愉悦,无实际用途. scanf实际的调用 我们直接使用的scanf其实是这样写的 int __cdecl scanf ( const char *format, ... ) { va_list arglist; va_start(arglist, format); return vscanf_fn(_input_l, format, NULL, arglist); } 我们可以看到,他其实是调用了这三个函数: va_list va_start vscanf_fn 我们跳转到vsc…
面试题经常会问到LinkedList与ArrayList的区别,与其背网上的废话,不如直接撸源码! 文章源码来源于JRE1.8,java.util.ArrayList 既然是浅析,就主要针对该数据结构的内部实现原理和部分主要方法做解释,至于I/O以及高级特性就暂时略过. 变量/常量 首先来看定义的(静态)变量: class ArrayList2<E> //extends AbstractList<E> //implements RandomAccess, Cloneable, ja…
可以骂人吗???辛辛苦苦写了2个多小时搞到凌晨2点,点击保存草稿退回到了登录页面???登录成功草稿没了???喵喵喵???智障!!气! 很厉害,隔了30分钟,我的登录又失效了,草稿再次回滚,不客气了,***! 仔细想想,自动保存功能也挺可疑的,根据我半年的资深前端经验判断,内部实现大概是这样: var id; // *core event* window.addEventListener('keyup',function(){ if(id){clearTimout(id);} id = setTi…
在Timer模块中有提到,libuv控制着延迟事件的触发,那么必须想办法精确控制时间. 如果是JS,获取当前时间可以直接通过Date.now()得到一个时间戳,然后将两段时间戳相减得到时间差.一般情况下当然没有问题,但是这个方法并不保险,因为本地计算机时间可以修改. libuv显然不会用这么愚蠢的办法来计算时间,C++内部有更为精妙的方法来处理这个事. 首先在上一节中,一个简单的事件轮询代码如下: int main() { uv_loop_t *loop = uv_default_loop();…
面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起. V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁:而libuv则是负责操作系统底层功能的封装,例如基于IOCP的event loop.file system.non-blockiong network等.简单来说node将两者结合在一起,赋予JS操作底层方法的能力,扩大了这门语言的应用面. 其实之前一直在避开这个库,因为有点难……至于为什么突然又搞,因为之前已经把所有比较上层和简单的模…
纯粹是闲的,在慕课网看了几集的Servlet入门,刚写了1个小demo,就想看看源码,好在也不难 主要是介绍一下里面的主要方法,真的没什么内容啊~ 源码来源于apache-tomcat-7.0.52,servlet-api.jar包 继承树 首先来看一下HttpServlet类的继承关系: // javax.servlet.http public abstract class HttpServlet extends GenericServlet implements java.io.Serial…
(这篇文章暂时鸽了,有点理解不能,点进来的小伙伴可以撤了) 刚开始准备在HashMap中直接把红黑树也过了的,结果发现这个类不是一般的麻烦,所以单独开一篇. 由于红黑树之前完全没接触过,所以这篇博客相当于探索(其实之前的博客都是边看源码边写的,全是探索). 红黑树没见过,树我还是知道的,所以先上一张帅图: 红黑树在这个基本树的基础上还多了red,暂时不知道啥意思,慢慢探索. 先来一个类总览: static final class TreeNode<K,V> extends LinkedHash…
写这篇文章还是下了一定决心的,因为这个源码看的头疼得很. 老规矩,源码来源于JRE1.8,java.util.HashMap,不讨论I/O及序列化相关内容. 该数据结构简介:使用了散列码来进行快速搜索.(摘自Java编程思想) 那么,文章的核心就探讨一下,内部是如何对搜索操作进行优化的. 先来一张帅气的图片总览: 预备知识: 1.Map没有迭代器,但是可以通过Map.entry()生成一个Set容器,然后通过Set的迭代器遍历map元素. 2.HashMap是乱序的. 3.HashMap元素根据…
从零自学java消遣一下,看书有点脑阔疼,不如看看源码!(๑╹◡╹)ノ""" ​ JS中Math调用的都是本地方法,底层全是用C++写的,所以完全无法观察实现过程,Java的工具包虽然也有C/C++的介入,不过也有些是自己实现的. ​ 本篇文章主要简单阐述Math.random()的实现过程. ​ Math隶属于java.lang包中,默认加载.本身是一个final类,方法都是静态方法,所以使用的时候不需要生成一个实例,直接调用Math.XX就行了. ​ 一步一步观察该方法,…
好像博客有观众,那每一篇都画个图吧! 本节简图如下. 上一篇其实啥也没讲,不过node本身就是这么复杂,走流程就要走全套.就像曾经看webpack源码,读了300行代码最后就为了取package.json里面的main属性,导致我直接弃坑了,垃圾源码看完对脑子没一点好处.回头看了我之前那篇博客,同步那块讲的还像回事,异步就惨不忍睹了.不过讲道理,异步中涉及锁.底层操作系统API(iocp)的部分我到现在也不太懂,毕竟没有实际的多线程开发经验,只是纯粹的技术爱好者. 这一篇再次进入libuv内部,…