深入浅出

深入浅出JavaScript之闭包(Closure)

蹲街弑〆低调 提交于 2019-12-19 06:35:42
闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。下面写下我的学习笔记~ 闭包-无处不在 在前端编程中,使用闭包是非常常见的,我们经常有意无意,直接或间接用到了闭包。闭包可以使传递数据更加灵活(比如处理一些点击事件) !function() { var localData = "localData here"; document.addEventListener('click', //处理点击事件时用到了外部局部变量,比如这里的localData function(){ console.log(localData); }); }(); 又比如下面这个例子:(是不是很亲切~~) !function() { var localData = "localData here"; var url = "http://www.baidu.com/"; $.ajax({ url : url, success : function() { // do sth... console.log(localData); } }); }(); 再来看一个例子~~这种情况就是我们通常所说的闭包 function outer() { var localVal = 30; return

【集合系列】- 深入浅出分析 ArrayDeque

China☆狼群 提交于 2019-12-18 14:18:51
一、摘要 在 jdk1.5 中,新增了 Queue 接口,代表一种队列集合的实现,咱们继续来聊聊 java 集合体系中的 Queue 接口。 Queue 接口是由大名鼎鼎的 Doug Lea 创建,中文名为道格·利,关于这位大神,会在后期进行介绍,翻开 JDK1.8 源代码,可以将 Queue 接口旗下的实现类抽象成如下结构图: Queue 接口,主要实现类有:ArrayDeque、LinkedList、PriorityQueue。 关于 LinkedList 实现类,在之前的文章中已经有所介绍,今天咱们来介绍一下 ArrayDeque 这个类,如果有理解不当之处,欢迎指正。 二、简介 在介绍 ArrayDeque 类之前,可以从上图中看出,ArrayDeque 实现了 Deque 接口,Deque 是啥呢,全称含义为 double ended queue ,即双端队列。Deque 接口的实现类可以被当作 FIFO(队列)使用,也可以当作 LIFO(栈)来使用。 其中队列(FIFO)表示先进先出,比如水管,先进去的水先出来;栈(LIFO)表示先进后出,比如,手枪弹夹,最后进去的子弹,最先出来。 ArrayDeque 是 Deque 接口的一种具体实现,所以,既可以当成队列,也可以当成栈来使用,类定义如下: public class ArrayDeque<E> extends

Android 跨进程通信 深入浅出AIDL(二)

徘徊边缘 提交于 2019-12-10 04:23:34
前言 概要 解剖 asInterface asBinder IInterface DESCRIPTOR onTransact服务端接收 transact客户端调用 总结 前言 继 上一篇AIDL 的简单介绍,相信应该对AIDL有一个大致的了解,那么这一篇我们来深入探讨一下AIDL为什么能够完成这个跨进程操作,这其中是否隐藏着一些不为人知的秘密,让我们跟着笔者的思路,慢慢拨开笼罩在AIDL上的谜团。 概要 先用上图整体描述这个AIDL从客户端(Client)发起请求至服务端(Server)相应的工作流程,我们可以看出整体的核心就是Binder 解剖 asInterface 用于将服务端的Binder对象转换成客户端所需的AIDL接口类型的对象,这种转换过程是区分进程的【如果客户端和服务端位于同一进程,那么此方法返回的就是服务端的Stub对象本身,否则返回的是系统封装后的Stub.proxy对象】 private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { IDemandManager demandManager = IDemandManager.Stub

Android 跨进程通信 深入浅出AIDL(一)

落花浮王杯 提交于 2019-12-10 04:09:23
前言 简介 快速上手 服务端 创建载体MessageBean 创建AIDL文件MessageBeanAIDL 创建AIDL文件IDemandManagerAIDL 埋坑与完善 创建Service 客户端 拷贝AIDL文件夹 开启服务 关联对象调用方法 附加技能定时推送消息 服务端项目推送消息 客户端项目接收定时推送 结束语 项目下载 前言 本文主要讲述AIDL作用以及如何快速上手AIDL项目 简介 A [android] I [Interface] D [Definition] L [Language] Android接口定义语言。 作用:方便系统为我们生成代码从而实现跨进程通讯,仅此而已。(玉刚老师如是说也),也就是说这个AIDL就只是一个快速跨进程通讯的工具。 快速上手 本篇文章意在快速实现AIDL项目,更多详细内容下篇继续阐述。 在服务端创建AIDL文件,用来声明java Bean以及传输调用的接口。【声明文件】 在服务端创建Service并且实现上面的接口。【创建服务】 客户端绑定Service。【绑定服务】 客户端调用服务端接口。【跨进程调用】 服务端 创建服务端项目 首先我们在app/src/main 目录下创建AIDL文件夹。 创建载体 MessageBean 首先我们在这个AIDL文件夹里创建用来传输的java Bean对象(包名并不重要),并且实现

深入浅出: Java回调机制(异步)

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-09 11:58:37
Writer :BYSocket(泥沙砖瓦浆木匠) 什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过(逃 哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉。不妨总结总结。 一、什么是回调 回调,回调。要先有 调用 ,才有调用者和被调用者之间的回调。所以在百度百科中是这样的: 软件模块之间总是存在着一定的 接口 ,从 调用方式 上,可以把他们分为三类: 同步调用、回调和异步调用 。 回调是一种特殊的调用,至于三种方式也有点不同。 1、 同步回调 ,即 阻塞,单向 。 2、 回调 ,即 双向 (类似自行车的两个齿轮)。 3、 异步调用 ,即通过 异步消息 进行通知。 二、CS中的异步回调(java案例) 比如这里模拟个场景:客户端发送msg给服务端,服务端处理后(5秒),回调给客户端,告知处理成功。代码如下: 回调接口类: /** * @author Jeff Lee * @since 2015-10-21 21:34:21 * 回调模式-回调接口类 */ public interface CSCallBack { public void process(String status); } 模拟客户端: /** * @author Jeff Lee * @since 2015-10-21 21:25:14 * 回调模式

《深入浅出WPF》视频列表

谁说胖子不能爱 提交于 2019-12-09 11:26:18
《深入浅出WPF》视频列表 序言   1. 什么是WPF   2. 为什么要学习WPF 第一章 XAML概览   1. XAML是什么?   2. XAML有哪些优点 第二章 从零起步认识XAML   1. 新建WPF项目 【 http://www.cnblogs.com/prism/archive/2010/07/20/1781026.html 】   2. 剖析最简单的XAML代码 【 http://www.cnblogs.com/prism/archive/2010/07/20/1781026.html 】 第三章 系统学习XAML语法   1. XAML文档的树形结构 【 http://www.cnblogs.com/prism/archive/2010/07/22/1782661.html 】   2. XAML中为对象属性赋值的语法     2.1 使用标签的Attribute为对象属性赋值 【 http://www.cnblogs.com/prism/archive/2010/07/23/1783408.html 】     2.2 使用TypeConverter 【 http://www.cnblogs.com/prism/archive/2010/07/23/1783408.html 】     2.3 属性元素 【 http://www.cnblogs.com

深入浅出的讲解傅里叶变换(真正的通俗易懂)

点点圈 提交于 2019-12-08 03:13:56
原文出处: 韩昊 1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎: Heinrich 微 博: @ 花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。 转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。所以,不管读到这里的您从事何种工作,我保证您都能看懂,并且一定将体会到通过傅里叶分析看到世界另一个样子时的快感。至于对于已经有一定基础的朋友,也希望不要看到会的地方就急忙往后翻,仔细读一定会有新的发现。 ————以上是定场诗———— 下面进入正题: 抱歉,还是要啰嗦一句

深入浅出var let const的区别

自闭症网瘾萝莉.ら 提交于 2019-12-07 16:53:49
在ES6出现之前JavaScript没有块级作用域的概念,这可能使得我们对js的作用域有时候无法理解。下面我们来详细的谈一谈var let const 三者的区别 首先我们看这样一个例子 var a = 10; foo(); //foo是函数 函数声明会提到作用域的最顶部 所以会优先执行该函数 console.log(a); function foo(){ console.log(a); //在foo函数的局部作用域中 变量a在预编译过程中被赋值为:undefined var a = 20; //此时给局部作用域中的a赋值为20 console.log(a); } //输出结果: // undefined //20 //10 一:怎样体现let 的块级作用域 { var a = 100; } console.log(a); // 100 { let b = 200; } console.log(b); // b is not defined 上面的例子很好的说明了var 声明的变量是没有块级作用域的,而let声明的变量有块级作用域。 let 非常适合用于 for 循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。 for (var i = 0; i <10; i+

深入浅出 RPC

亡梦爱人 提交于 2019-12-05 21:42:08
《深入篇》我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它? RPC 功能目标 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用,在前文《浅出篇》中给出了一种实现结构,基于 stub 的结构来实现。下面我们将具体细化 stub 结构的实现。 RPC 调用分类 RPC 调用分以下两种: 1. 同步调用 客户方等待调用执行完成并返回结果。 2. 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。 异步和同步的区分在于是否等待服务端执行完成并返回结果。 RPC 结构拆解 《浅出篇》给出了一个比较粗粒度的 RPC 实现概念结构,这里我们进一步细化它应该由哪些组件构成,如下图所示。 RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理 RpcProxy

《深入浅出WPF》学习总结之XAML标签语言二

青春壹個敷衍的年華 提交于 2019-12-05 12:12:42
x名称空间 “x名称空间”的这个X是映射XML名称空间时给他取的名字(如果用的是字母y,那他就叫“y名称空间了”),x名称空间里的成员(x.name、x.class)是专门给XAML编译器看的、用来引导XAML编译器把XAML代码编译成CLR代码的。大凡包含XAML代码的WPF程序都需要引用xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"命名空间 x命名空间里都有什么 x名称空间映射的是xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",他所包含的类均与解析XAML语言相关,所以也可以称它"XAML"名称空间,与C#语言一样,XAML也有自己的编译器。XAML语言会被解析并编译,最终形成微软中间语言存储在程序集中。在解析和编译XAML语言过程中,我们经常需要告诉编译器一些重要的信息,比如XAML代码的编译结果应该与哪个C#代码的编译结果合并、使用XAML声明的元素是public还是privated访问级别等等。这些让程序员能够与XAML编译器沟通的工具就存放在x名称中间中。 x名称空间中包含的工具 名称 种类(在XAML中出现的形式) x:Array 标记扩展 x:Class Attribute x:ClassModifier Attribute x:Code