Subs

关于rename命令ubuntu下的用法

天大地大妈咪最大 提交于 2020-05-09 15:16:11
关于rename命令ubuntu下的用法 分类: LINUX2013-04-08 10:35:32 关于rename命令再ubuntu下的用法[转我自己的文章]这是一篇我博客上的文章, 先来bs一番百度:百度一年你也不知道 再来bs一番国内的胡乱转载的现象:令人发指,无耻至极,没有原创的就不要写 下面是我的遭遇: 上午想批量改几个文件的名字,觉得mv在批量方面不够方便,百度到了rename这个命令,原谅我吧,我总是在百度不到结果时才去看google,以后还是少去百度的好 国内很多贴子都在说linux下没有rename这个命令,扯淡,不过是平常改名字用mv罢了,rename经常用在批量改名方面。 当然了, 也有不少贴子在说rename用法,可是我怎么看都是一模一样的文章被不断转载的。我没用过debian系之外的*nix的rename,但是起码 debian跟ubuntu的rename跟他们说的用法不一样(今晚ssh连接unix-center总是time out,等明天试试那里的freebsd跟fedora还有soloris的rename的用法去) 下面是网上的一般用法,声明一下,我没说这是错的,我只是说这个在debian-based系统里不能用,但是看到某个ubuntu用户的百度空间这样写我十分不爽: rename命令是带3个参数而不是很多人认为的2个参数 …………

vue核心之响应式原理(双向绑定/数据驱动)

倖福魔咒の 提交于 2020-05-04 04:38:52
实例化一个vue对象时, Observer类将每个目标对象(即data)的键值转换成getter/setter形式,用于进行依赖收集以及调度更新。 Observer src/core/observer/index.js export class Observer { value: any; dep: Dep; vmCount: number; // number of vms that has this object as root $data constructor (value: any) { this .value = value this .dep = new Dep() this .vmCount = 0 /* 将Observer实例绑定到data的__ob__属性上面去,之前说过observe的时候会先检测是否已经有__ob__对象存放Observer实例了,def方法定义可以参考/src/core/util/lang.js */ def(value, '__ob__', this ) if (Array.isArray(value)) { /* 如果是数组,将修改后可以截获响应的数组方法替换掉该数组的原型中的原生方法,达到监听数组数据变化响应的效果。这里如果当前浏览器支持__proto__属性,则直接覆盖当前数组对象原型上的原生数组方法,如果不支持该属性

Java 序列化和反序列化(二)Serializable 源码分析

一个人想着一个人 提交于 2020-04-25 05:25:50
Java 序列化和反序列化(二)Serializable 源码分析 - 1 [toc] 在上一篇文章中讲解了一下 Serializable 的大致用法,本节重点关注 Java 序列化的实现,围绕 <b>ObjectOutputStream#writeObject</b> 方法展开。 1. Java 序列化接口 Java 为了方便开发人员将 Java 对象进行序列化及反序列化提供了一套方便的 API 来支持。其中包括以下接口和类: Serializable 和 Externalizable 序列化接口。Serializable 接口没有方法或字段,仅用于标识可序列化的语义,实际上 ObjectOutputStream#writeObject 时通过反射调用 writeObject 方法,如果没有自定义则调用默认的序列化方法。Externalizable 接口该接口中定义了两个扩展的抽象方法:writeExternal 与 readExternal。 DataOutput 和 ObjectOutput DataOutput 提供了对 Java 基本类型 byte、short、int、long、float、double、char、boolean 八种基本类型,以及 String 的操作。ObjectOutput 则在 DataOutput 的基础上提供了对 Object 类型的操作

Vue学习系列(一)——初识Vue.js核心

泪湿孤枕 提交于 2020-04-18 08:26:33
前言 vue.js是一套构建用户界面的渐进式框架,vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件。 vue通过DOM事件操作和指令来进行视图层和模型层的相互通讯,会为每一处需要动态更新的DOM节点创建一个指令对象。每当一个指令对象观测的数据变化时,它便会对所绑定的目标节点执行相应的DOM操作。基于指令的数据绑定使得具体的DOM操作都被合理地封装在指令定义中,业务代码只需要涉及模板和对数据状态的操作即可,这使得应用的开发效率和可维护性都大大提升。 因此,数据绑定,组件是整个vue的核心。响应的数据绑定就是数据驱动视图的概念。它让你在写 Web 应用介面时,只需要关注两件事:数据如何展示和数据如何变化。一旦数据发生变化时,比如用户输入,或者 ajax 请求返回后数据发现修改,对应的视图介面会自动的进行更新。 原理 vue.js是MVVM的架构,如图: 从图中可以看出视图层和模型层的相互传递,通过用户操作来绑定一些DOM事件来重新渲染到视图层。具体的内部架构如下图: 开始 一、 数据绑定 : 实现方式:数据绑定即是视图层和模型层的双向绑定。即数据的改变驱动了视图的自动更新。 通过 ViewModel控制,修改数据,从而控制 View的展示,实现 MVVM的思想。 里面的两个属性getter和setter,在这两个函数内部实现依赖的收集和触发

一起学习vue源码

♀尐吖头ヾ 提交于 2020-04-18 02:01:01
作者:小土豆biubiubiu 博客园: www.cnblogs.com/HouJiao/ 掘金: https://juejin.im/user/58c61b4361ff4b005d9e894d 简书: https://www.jianshu.com/u/cb1c3884e6d5 微信公众号:土豆妈的碎碎念(扫码关注,一起吸猫,一起听故事,一起学习前端技术) 码字不易,点赞鼓励哟~ 一.前言   一起学习vue源码的第一篇,本来想起名为双向数据绑定原理,但是想来还是引用书中 [ 深入浅出vue.js] 比较专业的描述作为题目。    (主要是因为双向数据绑定中Object和Array的实现原理是不一样的,所以还是拆分的细一些比较好)   总归来说, 双向数据绑定就是通过变化侦测这种方式去实现的,这篇文章主要总结的是Object的变化侦测。   我们在面试的时候,如果面试者的技术栈包含vue框架,那么面试官会有很大的几率甩出“ 你了解vue中双向数据绑定的原理吗 ”这个问题。   我也听过一些回答,大家一般都能说出一个词叫“ 发布-订阅 ”。   那在深入去问的时候,或者说你能不能给我实现一个简单的双向数据绑定,基本就回答不上来了。      说到这里我已经抛出三个名词了: 双向数据绑定 、 变化侦测 、 发布-订阅 。   前面说过 双向数据绑定就是通过变化侦测这种方式去实现的。

从 defineProperty 到 Proxy

廉价感情. 提交于 2020-04-15 09:26:42
【推荐阅读】微服务还能火多久?>>> 众所周知,Vue 2.x 的数据绑定是通过 defineProperty 。而在 Vue 3.x 的设计中,数据绑定是通过 Proxy 实现的,这两者到底有何异同? 一、definePropety defineProperty 是 Object 的一个方法,可以在对象上新增或编辑某个属性,可编辑的内容除了属性值 value 之外,还有该属性的描述信息 Object . defineProperty (obj, prop, descriptor) 该方法接收三个参数,分别是 目标对象 obj ,被编辑的 属性名 prop ,以及该属性的 描述 descriptor 需要注意的是,只能在 Object 构造器对象使用该方法,实例化的 object 类型是没有该方法的 1. 基础描述符 configurable : 当该键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。 当该描述符为 false 的时候,其它的描述符一旦定义,就无法再更改,且该属性无法被 delete 删除 enumerable : 当该键值为 true 时,该属性才会出现在对象的枚举属性中。默认为 false。 当 enumerable 为 false 时, Objcet.keys() 和 for...in

手写Vue (1) 依赖收集

自闭症网瘾萝莉.ら 提交于 2020-04-12 08:35:07
1.在执行get()前进行依赖收集 更新后 清除依赖 get () { // 渲染watch Dep.target = watcher; // msg 变化了 需要重新执行watch pushTarget( this ) // 让当前传入的函数执行 this .getter(); popTarget() } 2.添加dep.js 文件 let id = 0 ; class Dep { constructor() { this .id = id++ ; this .subs = [] } // 订阅 addSub(watcher) { this .subs.push(watcher) } // 发布 notify() { this .subs.forEach(watcher => { watcher.update() }) } depend() { if (Dep.target) { Dep.target.addDep( this ) } } } // 保存当前的watcher let stack = []; export function pushTarget(watcher) { Dep.target = watcher; stack.push(watcher) } // 取出 当前的watcher export function popTarget(watcher) {

物联网宠儿mqtt.js那些事儿

血红的双手。 提交于 2020-04-09 18:47:24
常见的mq有Kafka,RocketMQ和RabbitMQ,大家也很常见。 前者很常见,MQTT是什么呢?MQTT属于IoT也就是物联网的概念。 快来和使用mqtt.js开发IM功能2年的作者一探究竟吧~ 常见的mq有Kafka,RocketMQ和RabbitMQ,大家也很常见。MQTT是什么呢? Kafka,RocketMQ和RabbitMQ属于微服务间的mq,而MQTT则属于IoT也就是物联网的概念。 mqtt.js是MQTT在nodejs端的实现。vue技术栈下的前端也可用。 mqtt.js官方为微信小程序和支付宝小程序也做了支持。微信小程序的MQTT协议名为 wxs ,支付宝小程序则是 alis 。 如果还是一脸懵逼,那么就跟随我通过mqtt.js去认识一下这个物联网领域的宠儿吧。 什么是微消息队列? MQTT关键名词解释 P2P消息和Pub/Sub消息 封装的mqtt.js通用class 客户端发包函数sendPacket 客户端连接 mqtt.connect() 订阅topic mqtt.Client#subscribe() 发送消息 mqtt.Client#publish() 接收消息 mqtt.Client#“message”事件 什么是微消息队列? 消息队列一般分为两种: 微服务消息队列(微服务间信息传递,典型代表有RabbitMQ,Kafka,RocketMQ)

Vue2.0源码阅读笔记(二):响应式原理

夙愿已清 提交于 2020-03-27 11:45:22
  Vue是数据驱动的框架,在修改数据时,视图会进行更新。数据响应式系统使得状态管理变的简单直接,在开发过程中减少与DOM元素的接触。而深入学习其中的原理十分有必要,能够回避一些常见的问题,使开发变的更为高效。 一、实现简单的数据响应式系统   Vue使用 观察者模式 (又称 发布-订阅模式 )加 数据劫持 的方式实现数据响应式系统,劫持数据时使用 Object.defineProperty 方法将 数据属性 变成 访问器属性 。Object.defineProperty 是 ES5 中一个无法 shim 的特性,因此Vue 不支持 IE8 以及更低版本浏览器。   Vue源码中对数据响应式系统的实现比较复杂,在深入学习这部分源码之前,先实现一个较为简单的版本更有助于后续的理解。代码如下所示: let uid = 0 // 容器构造函数 function Dep() { // 收集观察者的容器 this.subs = [] this.id = uid++ } Dep.prototype = { // 将当前观察者收集到容器中 addSub: function(sub) { this.subs.push(sub) }, // 收集依赖,调用观察者的addDep方法 depend: function() { if(Dep.target){ Dep.target.addDep(this)

Vue--$watch()源码分析

♀尐吖头ヾ 提交于 2020-03-27 11:44:27
  这一段时间工作上不是很忙,所以让我有足够的时间来研究一下VueJs还是比较开心的 (只要不加班怎么都开心),说到VueJs总是让人想到双向绑定,MVVM,模块化,等牛逼酷炫的名词,而通过近期的学习我也是发现了Vue一个很神奇的方法$watch,第一次尝试了下,让我十分好奇这是怎么实现的, 为什么变量赋值也会也会触发回调?这背后又有什么奇淫巧技?怀着各种问题,我看到了一位大牛,杨川宝的文章,但是我还是比较愚笨,看了三四遍,依然心存疑惑,最终在杨大牛的GitHub又看了许久,终于有了眉目,本篇末尾,我会给上链接   在正式介绍$watch方法之前,我有必要先介绍一下实现基本的$watch方法所需要的知识点,并简单介绍一下方便理解:     1) Object.defineProperty ( obj, key , option) 方法         这是一个非常神奇的方法,同样也是$watch以及实现双向绑定的关键         总共参数有三个,其中option中包括 set(fn), get(fn), enumerable(boolean), configurable(boolean)         set会在obj的属性被修改的时候触发,而get是在属性被获取的时候触发,( 其实属性的每次赋值,每次取值,都是调用了函数 )     2) Es6 知识,例如Class,()