源码

vue中$watch源码阅读笔记

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-04 00:25:06
项目中使用了vue,一直在比较computed和$watch的使用场景,今天周末抽时间看了下vue中$watch的源码部分,也查阅了一些别人的文章,暂时把自己的笔记记录于此,供以后查阅: 实现一个简单的$watch: 1 const v = new Vue({ 2 data:{ 3 a: 1, 4 b: { 5 c: 3 6 } 7 } 8 }) 9 // 实例方法$watch,监听属性"a" 10 v.$watch("a",()=>console.log("你修改了a")) 11 //当Vue实例上的a变化时$watch的回调 12 setTimeout(()=>{ 13 v.a = 2 14 // 设置定时器,修改a 15 },1000) View Code 这个过程大概分为三部分:实例化Vue、调用$watch方法、属性变化,触发回调 一、实例化Vue:面向对象的编程 1 class Vue { //Vue对象 2 constructor (options) { 3 this.$options=options; 4 let data = this._data=this.$options.data; 5 Object.keys(data).forEach(key=>this._proxy(key)); 6 // 拿到data之后,我们循环data里的所有属性,都传入代理函数中

深入vue源码,了解vue的双向数据绑定原理

断了今生、忘了曾经 提交于 2020-01-04 00:23:39
大家都知道vue是一种MVVM开发模式,数据驱动视图的前端框架,并且内部已经实现了双向数据绑定,那么双向数据绑定是怎么实现的呢? 先手动撸一个最最最简单的双向数据绑定 1 <div> 2 <input type="text" name="" id="text"> 3 <span id="show"></span> 4 </div> 5 6 <script> 7 var text = document.getElementById('text') 8 var span = document.getElementById('show') 9 var obj = {} 10 Object.defineProperty(obj, 'hello', { 11 set: function(value){ 12 text.value = value 13 span.innerText = value 14 } 15 }) 16 document.addEventListener('keyup',function(e){ 17 obj.hello = e.target.value 18 }) 19 </script> 这样就能实现一个简单的双向数据绑定了,这里再解释一下defineProperty这个方法吧。 语法: Object.defineProperty(obj,prop

调试.pdb&源码

三世轮回 提交于 2020-01-03 22:37:34
1、pdb 设置:(vs2017)  (1)     (2)    2、指定调试 源码:(vs2017)  (1)     (2)    3、 4、 5、 来源: https://www.cnblogs.com/cppskill/p/12147271.html

【源码解析】扒开ArrayList的外衣

烈酒焚心 提交于 2020-01-03 20:00:46
积千里跬步,汇万里江河;每天进步一点点,终有一天将成大佬。 本文内容 当然ArrayList里的方法不止这些,本文主要讲一些常用的方法 方法变量 Arraylist 里的方法变量主要有以下几个 1. 构造方法 1.1 有参构造 1.1.1 传入数组的大小 1.1.1.1代码实现 List < String > list = new ArrayList < > ( 5 ) ; 1.1.1.2源码解析 1.1.2 传入一个list对象 其实这个就相当于把传入的list对象里的数据 复制 到新的ArrayList对象 1.1.2.1 代码实现 List < String > list = new ArrayList < > ( Arrays . asList ( "z" , "m" , "h" ) ) ; 这里用来 Arrays 工具类里的 asList 方法,它的源码里是直接返回一个List,有兴趣的可以去看看,这里就不介绍了 1.1.2.2 源码解析 1.2 无参构造 这个比较简单,直接赋值一个空数组 1.2.1代码实现 List < String > list = new ArrayList < > ( ) ; 1.2.2源码解析 2. add方法 add一般常用的有两个方法,一个就是 add(E e) 在尾部添加数据,一个就是 add(int index,E element)

SpringBoot优雅退出

有些话、适合烂在心里 提交于 2020-01-03 17:52:50
目录 概念 原理 SpringBoot实现源码分析 查看源码我们发现会调用 Lifecycle 的stop()方法 或者调用 SmartLifecycle的stop(Runnable var1)方法且 isRunning()为ture才会被调用 结论 概念 jvm有shutdownHook机制,中文习惯叫优雅退出。相当于在linux系统中执行SIGTERM(kill -15 或者 svc -d)时退出前执行的一些操作. 原理 以linux系统为例说明: 进程在响应kill -15 pid命令进行关闭操作时默认发送SIGTERM信号至指定进程/进程组。如果进程没有捕获该信号的逻辑,则SIGTERM的作用是终止进程。而registerShutdownHook=true说明有注册的事件需要捕获该信号,先执行相应的逻辑再进行终止。 SpringBoot实现源码分析 查看SpringApplication类源码,registerShutdownHook属性默认是true,刷新上下文的时候会调用上下文的registerShutdownHook方法 查看registerShutdownHook方法的实现 AbstractApplicationContext-registerShutdownHook,我们发现会初始化 shutdownHook线程并注册一个jvm的shutdownHook钩子函数

竟然把Ruoyi在我自己的Eclipse编译成功,并能跑通了。。。。服了我自己了

試著忘記壹切 提交于 2020-01-03 12:47:18
前几天,下载最新ECLISPSE2019压缩包,解压缩成功,没提示不是免费;eclipse-jee-2019-12-R-win32-x86_64.zip 然后我配置好了maven 于是我1月2日晚一时兴起,获取了最新的Ruoyi的包; 发现我原生的Eclipse没有SpringBoot功能,于是用了3个多小时,把Eclipse在线装了SpringBoot成功; 太不容易了;之前弄了好久没弄成功,这次我也没有看什么文档,直接根据自己的简单思路来,下源码,上数据库脚本,编译、运行,竟然就过了; 代码下载地址 https://gitee.com/flatychen/RuoYi 本地开发地址 D:\temp\RuoYi 参考网址 http://doc.ruoyi.vip/ruoyi/ 后面可有我要研究的了,拿别人的代码看看,有时间再改改,哈哈哈 来源: https://www.cnblogs.com/alexgl2008/p/12144326.html

vue源码学习——目录设计

删除回忆录丶 提交于 2020-01-03 12:40:54
src目录下 compiler compiler目录下包含了vue.js所有编译相关的代码。 core core目录下包含了Vue.js 的核心代码,包括内置组件、全局API封装、Vue实例化、观察者、虚拟 DOM、工具函数等等 platfoms vue.js是跨平台的MVVM框架,可以跑在Web上,也可以配合weex跑在native客户端上 platfoms是vue.js的入口下面的web目录与weex目录代表两个主入口,分别打包成运行在web和weex上的vue.js server vue.js2.0支持服务端渲染,所有的服务端渲染相关逻辑都在这个目录下 这部分代码是跑在服务端的node.js,不要和跑在浏览器端的vue.js混为一谈 sfc 开发vue.js会借助webpack构建,然后通过但文件来编写组件。 sfc目录下的代码逻辑会将.vue文件内容解析成一个JavaScript对象 shared vue.js会定义一些工具方法,这里定义的工具方法都是会被浏览器端的vue.js和服务端的vue.js所共享的 作者把功能模块拆分的非常清楚,相关的逻辑放在一个独立的目录下维护,并且把复用的代码也抽成一个独立目录。 这样的目录设计让代码的阅读性和可维护性都变强,是非常值得学习和推敲的 来源: CSDN 作者: 小馋猫s 链接: https://blog.csdn.net

filebeat 插件开发

£可爱£侵袭症+ 提交于 2020-01-03 12:14:09
  filebeat是一个轻量的日志收集工具,全套使用go语言开发。   我目前遇到的问题是,在收集的时候需要对数据进行采样,采样比和采样形式要灵活,因为可能在多个项目会使用到这个日志收集功能。刚开始我仔细研究filebeat的配置,我感觉他自身应该带有采集需求,然而并没有。于是我想着去修改他的源码,这样也很方便。然而这个方案不可行,因为这是一个开源项目,后期如果版本更新,那还得继续修改,这个不灵活。于是我想着用插件的方式,看了下filebeat是支持插件的,但是网上很难找到资料。   我最终在官网找到了资料,所以我自己按照他的模式写了我自己的采样插件和一个我们业务用的query解析插件。   filebeat采取的是多个线程同时去读多个文件,每个文件读到数据会被封装为一个event,event经过一系列的processors处理,最终会放在一个队列,这个队列在发送到输出(kafka,es等) 下面直接给大家上我写的插件源码: filebeat 插件源码 附加 filebeat源码 插件使用方法: 下载filebeat的源码 在beats/libbeat/processors目录下进行插件开发 在你需要使用的的平台打包 打包命令:go build -buildmode=plugin 启动filebeat filebeat ---plugin ./myplugin.so

调试Mono源码分析Hello World的执行

南笙酒味 提交于 2020-01-03 10:20:23
本文目的很简单,简单分析一下下面语句是如何被Mono Runtime执行的: public class Hello1 { public static void Main() { System.Console.WriteLine("Hello, World!"); } } 由于自己也是刚接触Mono源码,以前一直停留于简单的应用之上,所以本文的分析不全面,只是为了能大致的了解Mono的执行流程,对基本的函数和流程有所了解,所以本文的风格为流水帐。 一、先简单的看下Mono源码的目录中的几个重要文件夹: 我这里使用的是不知道什么时候下载的某个历史版本2.6.7,目前我觉得重要的就3个文件夹,mcs为base framework这里除了常见的System namespace下的各种重要程序集之外还有以Mono作为namespace的一些程序集,听 雨痕 说玩Mono不能错过这些程序集,有空看下;libgc文件夹里貌似是提供GC的支持库;最重要一个文件夹就是mono了,下面着重看下这个目录,这里实现的是Mono Runtime,本文调试的代码也主要是这里的。 1.arch:此目录放了各种不同处理器的差异代码,看下x86里面就两个文件x86-codegen.h和tramp.c,这个tramp.c通过调用x86-codegen.h里的各种奇怪的宏提供了两个方法mono_arch_create

【一起学源码-微服务】Nexflix Eureka 源码十二:EurekaServer集群模式源码分析

白昼怎懂夜的黑 提交于 2020-01-03 06:29:12
前言 前情回顾 上一讲看了Eureka 注册中心的自我保护机制,以及里面提到的bug问题。 哈哈 转眼间都2020年了,这个系列的文章从12.17 一直写到现在,也是不容易哈,每天持续不断学习,输出博客,这一段时间确实收获很多。 今天在公司给组内成员分享了Eureka源码剖析,反响效果还可以,也算是感觉收获了点东西。后面还会继续feign、ribbon、hystrix的源码学习,依然文章连载的形式输出。 本讲目录 本讲主要是EurekaServer集群模式的数据同步讲解,主要目录如下。 目录如下: eureka server集群机制 注册、下线、续约的注册表同步机制 注册表同步三层队列机制详解 技术亮点: 3层队列机制实现注册表的批量同步需求 说明 原创不易,如若转载 请标明来源! 博客地址: 一枝花算不算浪漫 微信公众号:壹枝花算不算浪漫 源码分析 eureka server集群机制 Eureka Server会在注册、下线、续约的时候进行数据同步,将信息同步到其他Eureka Server节点。 可以想象到的是,这里肯定不会是实时同步的,往后继续看注册表的同步机制吧。 注册、下线、续约的注册表同步机制 我们以Eureka Client注册为例,看看Eureka Server是如何同步给其他节点的。 PeerAwareInstanceRegistryImpl.java :