xiaolingzi 发表于 2012-05-31 23:42:29 首先,我们先了解一下html5shiv.js是什么. html5shiv.js是一套实现让ie低版本等浏览器支持html5标签的解决方案. 实现原理:见如何让ie低版本浏览器支持html5标签 . 废话不多说,我们先上源代码,代码有点长,但保持原来的注释有利于大家理解,不想直接阅读的就点收缩代码然后往下看.源码原地址:https://github.com/aFarkas/html5shiv . -收缩代码 1 2 3 4 5…
前面一篇文章setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop详细讲解了浏览器和Node.js的异步API及其底层原理Event Loop.本文会讲一下不用原生API怎么达到异步的效果,也就是发布订阅模式.发布订阅模式在面试中也是高频考点,本文会自己实现一个发布订阅模式,弄懂了他的原理后,我们就可以去读Node.js的EventEmitter源码,这也是一个典型的发布订阅模式. 本文所有例子已经上传到GitHub,同一个repo下面还有我所有博文和例…
一.前言 Vue.js框架是目前比较火的MVVM框架之一,简单易上手的学习曲线,友好的官方文档,配套的构建工具,让Vue.js在2016大放异彩,大有赶超React之势.前不久Vue.js 2.0正式版已出,在体积优化(相比1.0减少了50%).性能提升(相比1.0提升60%).API优化等各方面都更上一层楼. 本文是系列文章,主要想通过对于Vue.js 2.0源码的分析,从代码层面解析Vue.js的实现原理,帮助读者能够更深入地理解整个框架的思想.此篇文章主要介绍前端渲染部分. 不足之处还请批…
源起 (个人理解)包管理最开始应该是从java平台下的maven开始吧,因为java的开发大多数是基于开源组件开发的,一个开源包在使用时很可能要去依赖其他的开源包,而且必须是特定的版本才可以.以往在找到一个开源包后,往往要用很多时间去把依赖的包找齐,于是maven出现了,它能自动搜索一个包的依赖项并下载到本地,免去找各种引用包的时间. 在maven出现不久后,.net也出现了自己的包管理工具,nuget,相信园子里的人都有所了解,nuget的官方源和microsoft源上集成了很多开源组件,供大…
[源码分析] 从源码入手看 Flink Watermark 之传播过程 0x00 摘要 本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个大致把握. 0x01 总述 从静态角度讲,watermarks是实现流式计算的核心概念:从动态角度说,watermarks贯穿整个流处理程序.所以为了讲解watermarks的传播,需要对flink的很多模块/概念进行了解,涉及几乎各个阶段.我首先会讲解相关概念,然后会根据一个实例代码从以下几部分来…
决定从这篇文章开始,开一个读源码系列,不限制平台语言或工具,任何自己感兴趣的都会写.前几天碰到一个小问题又读了一遍ConcurrentQueue的源码,那就拿C#中比较常用的并发队列ConcurrentQueue作为开篇来聊一聊它的实现原理. 话不多说,直奔主题. 要提前说明下的是,本文解析的源码是基于.NET Framework 4.8版本,地址是:https://referencesource.microsoft.com/#mscorlib/system/Collections/Concur…
前言 ReentrantLock 可重入锁,应该是除了 synchronized 关键字外用的最多的线程同步手段了,虽然JVM维护者疯狂优化 synchronized 使其已经拥有了很好的性能.但 ReentrantLock 仍有其存在价值,例如可以感知线程中断,公平锁模式,可以指定超时时间的抢锁等更细粒度的控制都是目前的 synchronized 做不到的. 如果不是很了解 Java 中线程的一些基本概念,可以看之前这篇: Java读源码之Thread 案例 用一个最简单的案例引出我们的主角…
前言 本文是 ReentrantLock 源码的第二篇,第一篇主要介绍了公平锁非公平锁正常的加锁解锁流程,虽然表达能力有限不知道有没有讲清楚,本着不太监的原则,本文填补下第一篇中挖的坑. Java读源码之ReentrantLock 源码分析 感知中断锁 如果我们希望检测到中断后能立刻抛出异常就用 lockInterruptibly 方法去加锁,还是建议用 lock 方法,自定义中断处理,更灵活一点. ReentrantLock#lockInterruptibly 我们只需要把 Reentrant…
前言 相信大家都挺熟悉 CountDownLatch 的,顾名思义就是一个栅栏,其主要作用是多线程环境下,让多个线程在栅栏门口等待,所有线程到齐后,栅栏打开程序继续执行. 案例 用一个最简单的案例引出我们的主角 public class CountDownLatchDemo { public void run(CountDownLatch countDownLatch) { System.out.println(Thread.currentThread().getName() + "就位&quo…
源码地址为 https://github.com/hdodenhof/CircleImageView 实际上就是一个圆形的imageview 的自定义控件.代码写的很优雅,实现效果也很好, 特此分析.源码其实不难 主要就是一个类,可以把我的这个加了注释的源码放到你自己的工程里直接替换 然后run,这样效果更佳. package de.hdodenhof.circleimageview; import android.content.Context; import android.content.…