计算属性是基于响应式依赖进行缓存的,只有在相关响应式依赖发生改变时才会重新求值,这种缓存机制在求值消耗比较大的情况下能够显著提高性能. 一.计算属性初始化   Vue 在做数据初始化时,通过 initComputed() 方法初始化计算属性. const computedWatcherOptions = { lazy: true } function initComputed (vm: Component, computed: Object) { const watchers = vm._c…
  在阅读 nextTick 的源码之前,要先弄明白 JS 执行环境运行机制,介绍 JS 执行环境的事件循环机制的文章很多,大部分都阐述的比较笼统,甚至有些文章说的是错误的,以下为个人理解,如有错误,欢迎指正. 一.浏览器中的进程与线程   以 chorme 浏览器为例,浏览器中的每个页面都是一个独立的进程,在该进程中拥有多个线程,通常有以下几个常驻线程: 1.GUI 渲染线程 2.JavaScript引擎线程 3.定时触发器线程 4.事件触发线程 5.异步http请求线程   GUI 渲染线程…
一.Vue2.0的生命周期 Vue2.0的整个生命周期有八个:分别是 1.beforeCreate,2.created,3.beforeMount,4.mounted,5.beforeUpdate,6.updated,7.beforeDestroy,8.destroyed. 用官方的一张图就可以清晰的了解整个生命周期: Vue最新源码下载:地址 二:源码分析 1.先看new Vue实例的方法 创建Vue实例的文件是: src/core/instance/index.js function Vue…
上一篇 文章 了解了Vue.js的生命周期.这篇分析Observe Data过程,了解Vue.js的双向数据绑定实现原理. 一.实现双向绑定的做法 前端MVVM最令人激动的就是双向绑定机制了,实现双向数据绑定的做法大致有如下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的JavaScript对象以及DOM元素都将“订阅”一个发布者对象.任何时候如果JavaScript对象或者一个HTML输入字段被侦测到发生了变化,我…
  Vue是数据驱动的框架,在修改数据时,视图会进行更新.数据响应式系统使得状态管理变的简单直接,在开发过程中减少与DOM元素的接触.而深入学习其中的原理十分有必要,能够回避一些常见的问题,使开发变的更为高效. 一.实现简单的数据响应式系统   Vue使用观察者模式(又称发布-订阅模式)加数据劫持的方式实现数据响应式系统,劫持数据时使用 Object.defineProperty 方法将数据属性变成访问器属性.Object.defineProperty 是 ES5 中一个无法 shim 的特性,…
  Vue本质是上来说是一个函数,在其通过new关键字构造调用时,会完成一系列初始化过程.通过Vue框架进行开发,基本上是通过向Vue函数中传入不同的参数选项来完成的.参数选项往往需要加以合并,主要有两种情况: 1.Vue函数本身拥有一些静态属性,在实例化时开发者会传入同名的属性. 2.在使用继承的方式使用Vue时,需要将父类和子类上同名属性加以合并.   Vue函数定义在 /src/core/instance/index.js中. function Vue (options) { if (pr…
这次主要讲下werkzeug中的Local. 源码在werkzeug/local.py Thread Local 在Python中,状态是保存在对象中.Thread Local是一种特殊的对象,它是对线程隔离的.所谓对线程隔离,是指每一个线程对一个Thread Local对象进行修改,是不会影响到其他线程的.这就好比在工作单位每个人都有一个储物柜,每个人对自己的储物柜存取东西是不会影响到其他人的.这里的储物柜就是Thread Local. 获得一个Thread Local很简单,只需要对线程执行…
Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产生的,软中断是程序通过int指令主动调用.中断产生时,会有一个中断号,根据中断号可在中断向量表中选择对应的中断处理程序执行. 中断在linux当中非常重要,是用户态代码与和心态代码相互切换运行的桥梁.进程调度依赖于时钟中断进入内核,系统调用也是依赖int 80软中断进入内核执行. 中断处理过程 以i…
Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代码的阅读能力.对于一般简短的程序,可以从main函数逐行阅读理解:对于复杂的项目,只能在了解源码主要结构的情况下,抓住某个具体的功能进行阅读. 选择较早版本的理由 Linux较新版本代码在百万行以上,而0.11版本内核不超过2万行代码.比较新版本的Linux内核源码太多且内容庞杂,自身能力不足,没有…
Linux 0.11源码阅读笔记-文件管理 文件系统 生磁盘 未安装文件系统的磁盘称之为生磁盘,生磁盘也可以作为文件读写,linux中一切皆文件. 磁盘分区 生磁盘可以被分区,分区中可以安装文件系统,常见的文件系统有fat32.ext2.ext4等.分区后的磁盘结构布局如下图,其中主引导扇区记录了分区信息,并且包含引导代码可用于引导操作系统. 文件系统 分区内可以安装指定文件系统,同一磁盘多个分区文件系统不要求相同.MINIX文件系统布局如下: 引导块:若作为引导分区,将存放操作系统的引导程序代…
上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa…
自己保存的源码阅读笔记哈 faster rcnn 的主要识别过程(粗略) (开始填坑了): 一张3通道,1600*1600图像输入中,经过特征提取网络,得到100*100*512的feature map (设定stride = 16,这是坐标计算要用的),基于这个,生成100 * 100 * scale * aspdio 的anchor box,然后, 这个feature map 通过使用两个卷积网络分别回归目标非目标和bbox_dealta,两个,分别是rpn_objectness_predi…
HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如底层是由数组+链表+红黑树实现,使用HashMap存储自定义类时需要重写其hashCode和equals方法等等--但对其具体如何实现却知之甚少,本文将作为类似笔记的形式记录笔者的源码阅读方式.(在JDK 1.7及其之前由数组加链表组成,正常情况想我们谈论的均为JDK 1.8及其之后的HashMap…
guavacache源码阅读笔记 官方文档: https://github.com/google/guava/wiki/CachesExplained 中文版: https://www.jianshu.com/p/88ec858cc021?from=singlemessage 参考文档: 美团技术团队:<缓存那些事儿> https://tech.meituan.com/2017/03/17/cache-about.html ​ 缓存在很多数情况下都非常有用,例如,如果计算一个值或者获取一个值时…
写在前面 mxnet代码的规范性比Caffe2要好,看起来核心代码量也小很多,但由于对dmlc其它库的依赖太强,代码的独立性并不好.依赖的第三方库包括: cub dlpack dmlc-core googletest mkldnn mshadow onnx-tensorrt openmp ps-lite tvm 如果对于这些第三方库没有足够的理解,mxnet的核心代码看起来比较费劲.因此时间原因,本篇仅解析了mxnet对外的接口include目录,并且对于严重依赖第三方库的文件没有深入探究,只能…
[原]SDWebImage源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1.SDWebImageDownloader中的downloadImageWithURL 我们来到SDWebImageDownloader.m文件中,找到downloadImageWithURL函数.发现代码不是很长,那就一行行读.毕竟这个函数大概做什么我们是知道的.这个函数大概就是创建了一个SDWebImageSownloader的异步下载器,根据给定的URL下载image. 先映入眼帘的…
上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中…
大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块后(下面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in…
Core::Ray 该类用来表示空间中的“射线”,主要用来进行碰撞检测. THREE.Ray = function ( origin, direction ) { this.origin = ( origin !== undefined ) ? origin : new THREE.Vector3(); this.direction = ( direction !== undefined ) ? direction : new THREE.Vector3(); }; Ray类的构造函数颇为简单,…
title: libevent源码阅读笔记(一):libevent对epoll的封装 最近开始阅读网络库libevent的源码,阅读源码之前,大致看了张亮写的几篇博文(libevent源码深度剖析 http://blog.csdn.net/sparkliang/article/details/4957667 ),对libevent网络库有了总体上的认识,然后开始源码的阅读. 与整体把握不同,我是先从局部开始阅读libevent的源码,当然,前提是我已经大致了解了整个libevent的框架结构,今…
Map是Java collection framework 中重要的组成部分,特别是HashMap是在我们在日常的开发的过程中使用的最多的一个集合.但是遗憾的是,存放在HashMap中元素都是无序的,原因是我们在put或get数据的时候都是根据key的hash值来确定元素的位置.在具体的业务场景中,我们更多的希望对于HashMap集合能够进行顺序访问,好在 jdk 中已经给我们提供了一种解决方案,那就是LinkedHashMap.该类继承与HashMap,因此HashMap拥有的特性它都有,同时…
今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 一般来讲文章开始应该先介绍一下说下简介.这里就不介绍了 如果你不知道ArrayList是什么的话就没必要在看了.大致讲一下一些常用的方法 2.继承结构 ArrayList源码定义: ArrayList继承结构如下: Serializable 序列化接口 Cloneable 前面我们在看Object源…
JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀个类没有直接继承某个类时,默认继承Object类,也就是说任何 类都直接或间接继承此类,Object 类中能访问的⽅法在所有类中都可以调⽤. Object类源码: native关键字 ​ Java有两种方法:Java方法和本地方法.Java方法是由Java语言编写,编译成字节码,存储在class文件…
JDK1.8源码阅读笔记(2) AtomicInteger AtomicLong AtomicBoolean原子类 Unsafe Java中无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存.Java中的Unsafe类为我们提供了类似C++手动管理内存的能力.Unsafe类是"final"的,不允许继承. Number类(abstract) xxxValue()方法:将 Number 对象转换为xxx数据类型的值并返回. Atomic Boolean-Integer…
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data task.但是对于NSURLSession部分却没有提及.主要是精力有限,准备在这一部分把NSURLSession的知识好好梳理一遍.一切先从上一篇中的addDelegateForDataTask:函数说起,然后再介绍AFURLSessionManagerTaskDelegate,最后结合AFURLSes…
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入口 ind…
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index…
PHP源码阅读笔记一一.explode和implode函数array explode ( string separator, string string [, int limit] )此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来.如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分. 此函数的时间复杂度应该是O(strlen(separator) * s…
AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node { //表示当前节点以共享模式等待锁 static final Node SHARED = new Node(); //表示当前模式以独占模式等待锁 static final Node EXCLUSIVE = null; //表示当前线程等待锁的动作被取消了(那么当前节点将会在下一次迭代节点的时候被踢出) static final int CANCELLED = 1; //…
接着Mina源码阅读笔记(四)-Mina的连接IoConnector1,,我们继续: AbstractIoAcceptor: 001 package org.apache.mina.core.rewrite.service; 002   003 import java.io.IOException; 004 import java.net.SocketAddress; 005 import java.util.ArrayList; 006 import java.util.Collections…