函数调用

五分钟学后端技术:如何学习Java工程师必须要会的RPC

穿精又带淫゛_ 提交于 2020-04-06 05:54:34
声明 本文转自 https://developer.51cto.com/art/201906/597963.htm 什么是RPC RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。 RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。 目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。 常用的RPC框架 gRPC:是 Google 公布的开源软件,基于最新的 HTTP 2.0 协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。 Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。 用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的

如何使用InstallShield中的LaunchAppAndWait()

穿精又带淫゛_ 提交于 2020-04-06 00:15:27
InstallSheld6.3如何使用LaunchAppAndWait()? 我想在安装结束前调用另一个程序,我知道要用到它的LaunchAppAndWait()函数,但不知道应该在哪个地方添加脚本,帮帮忙,谢谢啦! 18.4 LaunchAppAndWait 语法:LaunchAppAndWait (szProgram, szCmdLine, lWait); 说明:LaunchAppAndWait函数运行由szProgram指定的带有szCmdLine指定的命令行参数的应用程序。第三个参数,lWait指示安装在继续前是否要等待直到运行的应用程序终止。   一个安装程序只能监控由szProgram指定的应用程序;如果该应用程序要运行其它应用程序或进程,安装程序不能监控它们。因此,安装程序将在第一个应用程序结束后继续,即使那时由第一个应用程序运行的其它应用程序仍在运行。注意如果运行的应用程序终止失败,则安装程序将无限等待运行的应用程序完成。 参数: szProgram 指定要被运行的应用程序的文件名。建议要指定应用程序的完整路径和文件名。如果你不包括一个路径,InstallShield将使用被Windows API 函数CreateProcess使用的相同的查找次序来定位文件。如果文件未能在这些位置找到,函数将失败。   如果应用程序的全限定名包括长文件夹名和/或一个长文件名

Underscore.js 入门

青春壹個敷衍的年華 提交于 2020-04-05 23:43:30
1 Underscore对象封装 Underscore并没有在原生的JavaScript对象原型中进行扩展,而是像jQuery一样,将数据封装在一个自定义对象中(下文中称“Underscore对象”)。 你可以通过调用一个Underscore对象的value()方法来获取原生的JavaScript数据,例如: // 定义一个JavaScript内置对象 var jsData = { name : 'data' } // 通过_()方法将对象创建为一个Underscore对象 // underscoreData对象的原型中包含了Underscore中定义的所有方法,你可以任意使用 var underscoreData = _(jsData); // 通过value方法获取原生数据, 即jsData underscoreData.value(); 2 优先调用JavaScript 1.6内置方法 Underscore中有许多方法在JavaScript1.6中已经被纳入规范,因此在Underscore对象内部,会优先调用宿主环境提供的内置方法(如果宿主环境已经实现了这些方法),以此提高函数的执行效率。 而对于不支持JavaScript 1.6的宿主环境,Underscore会通过自己的方式实现,而对开发者来说,这些完全是透明的。 这里所说的宿主环境,可能是Node.js运行环境

函数调用栈、任务队列、事件轮询

核能气质少年 提交于 2020-04-05 23:06:54
最近接触nodeJs中,了解到了这三个概念。这三个概念在14年,阮一峰老师写了一篇博客,扑灵大神在此基础上完善了,、 阮一峰: http://www.ruanyifeng.com/blog/2014/10/event-loop.html 扑灵:https://blog.csdn.net/lin_credible/article/details/40143961。 后续看到一篇文章,个人觉得写的比较好 https://www.cnblogs.com/liangyin/p/9783342.html 函数调用栈:(call stack)   index.js    特点: 执行前入栈,执行后出栈。a先执行完 a先出栈,后续就是B出栈,接着就是整个全局上下文出栈,成为空栈。 任务队列:(task queue) 队列特点: 先进先出。 在单线程的js中,任务分为同步任务和异步任务。 同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。 异步任务:不进入主线程、由其他线程执行,将回调函数放入到任务队列中或者叫事件队列中,执行完毕后,触发回调函数,回调函数重新加入到函数调用栈中,接着就是前面所讲的出栈。 输出结果是 "1" "2" "set2" "setTimeout" 第一步: setTimeout 是个异步任务,回调函数加入任务队列,主线程先执行后续的任务。

【第三方类库】Underscore.js Version (1.2.3) 中文文档

拥有回忆 提交于 2020-04-05 23:03:48
Underscore.js Version (1.2.3) 中文文档 Underscore 一个非常实用的JavaScript库,提供许多编程功能的支持,就像你期望 Prototype.js (或者 Ruby ), 有这些功能且不扩展任何JavaScript的原生对象。 It's the tie to go along with jQuery 's tux. Underscore提供60多个方法,即有普通的功能,例如: map , select , invoke — 也有更多特殊的编程辅助方法,例如:函数绑定、javascript模板、绝对相等判断等待。 如果一些现代的浏览器提供了内置的 forEach , map , reduce , filter , every , some 和 indexOf 方法,Underscore就委托给浏览器原生的方法。 Underscore提供完整的 测试用例集 供你精读。 你也可以阅读有注释的 源代码 。 项目代码放在 GitHub 上,你可以通过 issues页 、Freenode的 #documentcloud 频道、发送tweets给 @documentcloud 三个途径报告bug以及参与特性讨论。 Underscore是 DocumentCloud 的一个开源组件。 下载 (Right-click, and use "Save As")

Javascript函数声明与递归调用

元气小坏坏 提交于 2020-04-05 23:02:55
Javascript的函数的声明方式和调用方式已经是令人厌倦的老生常谈了,但有些东西就是这样的,你来说一遍然后我再说一遍。每次看到书上或博客里写的Javascript函数有四种调用方式,我就会想起孔乙己:茴字有四种写法,你造吗? 尽管缺陷有一堆,但Javascript还是令人着迷的。Javascript众多优美的特性的核心,是作为顶级对象(first-class objects)的函数。函数就像其他普通对象一样被创建、被分配给变量、作为参数被传递、作为返回值以及持有属性和方法。函数作为顶级对象,赋予了Javascript强大的函数式编程能力,也带来了不太容易控制的灵活性。 1、函数声明 变量式声明先创建一个匿名函数,然后把它赋值给一个指定的变量: var f = function () { // function body }; 通常我们不必关心等号右边表达式的作用域是全局还是某个闭包内,因为它只能通过等号左边的变量f来引用,应该关注的是变量f的作用域。如果f指向函数的引用被破坏(f = null),且函数没有被赋值给任何其它变量或对象属性,匿名函数会因为失去所有引用而被垃圾回收机制销毁。 也可以使用函数表达式创建函数: function f() { // function body } 与变量式不同的是,这种声明方式会为函数的一个内置属性name赋值

尾调

陌路散爱 提交于 2020-04-05 19:52:06
尾调 尾调就是指某个函数的最后一步是返回另一个函数的调用结果。 如function(){return ickt()} ickt就是尾调函数 //子函数 function ickt(){ console.log(this) } //父函数 function demo(){ return ickt() } // 执行父函数 demo() 不是尾调的几种情况 // //子函数 function ickt(){ console.log(this) } // 以下几种形式不是尾调 function demo(){ let a = ickt() var b = 2 return a } //执行demo demo() function demo(){ ickt() var b = 2; } //执行demo demo() function demo(){ return ickt()+1; } demo() 尾调优化: 闭包 //闭包 function demo(){ let a =1; let b =2; function inner(){ console.log(a+b) } return inner } demo()() 尾递归 // 尾递归优化 function add(n, total=0) { //如果等于1 if (n === 1) { return 1 + total; }

20行实现一个Promise

筅森魡賤 提交于 2020-04-05 19:21:31
作者:晨曦时梦见兮 来源: 掘金 前言 在面试的时候,经常会有面试官让你实现一个Promise,如果参照A+规范来实现的话,可能面到天黑都结束不了。 说到Promise,我们首先想到的最核心的功能就是异步链式调用,本篇文章就带你用20行代码实现一个可以异步链式调用的Promise。 这个Promise的实现不考虑任何异常情况,只考虑代码最简短,从而便于读者理解核心的异步链式调用原理。 代码 先给代码吧,真就20行。 function Promise ( excutor ) { var self = this self.onResolvedCallback = [] function resolve ( value ) { setTimeout( () => { self.data = value self.onResolvedCallback.forEach( callback => callback(value)) }) } excutor(resolve.bind(self)) } Promise .prototype.then = function ( onResolved ) { var self = this return new Promise ( resolve => { self.onResolvedCallback.push( function () { var

存储例程

徘徊边缘 提交于 2020-04-04 17:59:57
存储例程 存储例程是存储程序的一种类型,本质上也是封装了一些可执行的语句,只不过它的调用方式是:需要手动去调用!存储例程又可以分为存储函数和存储过程。 存储函数 创建存储函数 存储函数其实就是一种函数,只不过在这个函数里可以执行命令语句而已。函数它可以把处理某个问题的过程封装起来,之后直接调用函数就可以去解决同样的问题了。MySQL 中定义存储函数的语句如下: CREATE FUNCTION 存储函数名称([参数列表]) RETURNS 返回值类型 BEGIN 函数体内容 END 从这里可以看出,定义一个存储函数需要指定函数名称、参数列表、返回值类型以及函数体内容,如果该函数不需要参数,那参数列表可以被省略,函数体内容可以包括一条或多条语句,每条语句都要以分号 ; 结尾。里边的制表符和换行仅仅是为了好看,完全可以用空格代替。 mysql> delimiter $ mysql> create function avg_score(s varchar(100)) -> returns double -> begin -> return (select avg(score) from student_score where subject = s); -> end $ Query OK, 0 rows affected (0.01 sec) 定义了一个名叫 avg_score 的函数

记忆函数

随声附和 提交于 2020-04-04 08:22:44
很久没写随笔了呀,因为看到记忆函数,确实搞懵逼了啊,实在是太菜了。 书本上给出的例子: var fibonacci = function (n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }; for (var i = 0; i <= 10; i += 1) {   document.writeln('// ' + i + ': ' + fibonacci(i)); } // 0: 0 // 1: 1 // 2: 1 // 3: 2 // 4: 3 // 5: 5 // 6: 8 // 7: 13 // 8: 21 // 9: 34 // 10: 55 这样是可以工作的,但是它做了很多无谓的工作。 Fibonacci 函数被调用了 453 次。我们调用了 11 次,而它自身调用了 442 次去计算可能已经被刚计算过的值。如果我们让该函数具备记忆功能,就可以显著地减少它的运算量。 我们在一个名为 memo 的数组里保存我们的储存结果,储存结果可以隐藏在闭包中。当我们的函数被调用时,这个函数首先看是否已经知道计算的结果,如果已经知道,就立即返回这个储存结果。 var fibonacci = function() { var memo = [0, 1]; var fib = function(n) { //10 9