第5节 设置多播作用域

5.5设置多播作用域

? 5.5.1 多播作用域

?系统通过使用多播地址动态分配协议(MADCAP)来支持多播作用域,MADCAP属于一种用于进行多播地址分配的标准协议。MADCAP协议支持多播地址分配服务器动态地将IP地址分配给网络上的MADCAP客户机。

?多播地址使用D类IP地址,其范围从224.0.0.0~239.255.255.254。这些地址只用于多播(或组播)而不用于常规的DHCP作用域。

?启用多播功能后,多播作用域在MADCAP的支持下也只能将多播地址动态地分配给MADCAP客户机。

? 5.5.2 配置步骤

?配置多播作用域的操作步骤如下:

?1)在DHCP控制台中选择相应的DHCP服务器,单击鼠标右键,在弹出的快捷菜单中选择“新建多播作用域”命令以便启动新建多播作用域向导,单击“下一步”按钮。

?2)在弹出的如图5.17所示对话框中,设置多播作用域的名称和说明文字,单击“下一步”按钮。

?3)在弹出的如图5.18所示对话框中,设置多播作用域的地址范围,“TTL”

文本框用于设置多播作用域可经过的路由器数目。

?4)单击“下一步”按钮,在弹出的如图5.19所示对话框中,填入要从多播作用域IP 地址范围中排除的IP 地址范围。

?5)单击“下一步”按钮,在弹出的对话框中设置租用期限。

?6)单击“下一步”按钮,在弹出的对话框中,选择“是”单选按钮激活多播作用域,单击“下一步”按钮激活该多播作用域。

?7)单击“完成”按钮,完成多播作用域的创建。

图5.17

设置多播作用域名称图5.18

设置多播作用域的地址范围

图5.19 添加排除IP地址

C#程序设计教程期末复习题及答案

习题 1 一、选择题 1.在C#中 B 都是对象。 A 任何类型 B 任何事物 C 任何代码 D 任何技术 2.对象包含数据和 A 的方法。 A 在该数据上工作 B 调用 C 函数调用 D 传递参数3.一个类是 D 的蓝本。 A 数据集合 B 函数集合 C 方法集合 D 给定功能集合4..NET构架包含公用语言运行时期和 B 。 5..NET的核心是 A 。 A CLR B Windows2000 C DNA D 分解平台 6.C#程序以 B 扩展名保存编写的程序。 A .CS B .PS C .CSS D .SC 7.System是 B 的命名空间。 A 存储系统类 B 控制台类 C I/O操作 D 新项目8.namespace用于声明 B 。 A 新项目 B 一个命名空间 C 类与方法 D 指令 9.每个C#程序必须有一个 D 方法。 A 类方法 B 构造方法 C Main D 重载方法 二、问答题 1.面向对象编程的三大原则是什么? 答:封装、继承和多态性。 2.封装是什么? 答:封装是用于隐藏对象实际的制作细节。 3.继承是什么? 答:继承是在建立新的特定对象时,可以使用现有对象的功能性。 4.多态性是什么? 答:多态性是程序代码能够依据实际对象所需而进行不同的行为。 https://www.360docs.net/doc/734011916.html,的核心构件包括哪些?

答:(1).NET构造块服务或有计划的访问某些服务。 (2)将在新的Internet设备上运行的.NET设备软件。 (3).NET用户经验。 6.CLR的作用是什么? 答:CLR是.NET的核心,它是一个运行时期环境,在该环境中,以不同语言编写的应用程序均能始终运行。 三、编程题 使用.NET代码编辑器编写一个C#应用程序,以在屏幕打印出: C# is the Component-oriented language in C and C++ family of language. 要求: (1)使用using System命名空间,即定位System命名空间的Console类。 (2)不使用using System命名空间,即System命名空间的Console类。 (3)使用using指令的别名,即使用using创建using的别名。 答案: (1) //Example1.cs Using System; Class Example1 { Public static void Main() { Console.Write(“C# is the Component-oriented language ”); Console.WriteLine(“in C and C++ family of language.”); } } (2) //Example2.cs Class Example1 {

web前端面试100问

面试造火箭,工作拧螺丝! 在技术圈毕竟只有百分之一的人能进入BAT,百分之九九的小伙伴只能在普通公司做这普通的事情,厌烦哪些标题党,我们抛开那些高大上的台词,回归到面试的本质。 本课程帮助小伙伴们快速梳理知识,不会设计到具体的很细节的知识点,关注面试本身。 公司一般会从以下5个方面考察一个人的能力,本课程的100问是总结了最近2-3年常问的面试题,适合初中级前端工程师。 1、HTML(5)和CSS3方面 1.前端与后端数据交互的格式有哪些,为什么大部分现在都用json而不用xml。 答:XML:知了堂3岁 JSON:{ name:”知了堂”,age:3} JSON书写方便节省字节,更轻量,前后台都有直接解析JSON的方法(JSON.stringfity/parse)使用方便。 2.Flex布局熟悉吗,说几个常用的属性。 答:这个几乎每天都在用,还是挺熟悉的。 display:flex align-items 多个 align-content:单个 justify-content justify-items flex-direction flex-wrap: flex-basic:初始盒子宽度flex flex-grow:增长因子200 4*40=160 1,1,1,2 1/5*40 flex flex-shrink :缩减因子200 60*4=240 3.说一下CSS盒模型 答:CSS的盒模型包含了一下几个内容margin,padding,border,content。 在计算盒子宽高的时候,IE和Chrome会有一些区别,IE算到border,Chrome的宽度只包含content区域,因此CSS3提供了box-sizing这个属性来修改。

JavaScript:理解执行环境、作用域链和活动对象

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 JavaScript:理解执行环境、作用域链和活动对象2016/09/09 0 作用域的原理,对JS 将如何解析标识符做出了解答。而作用域 的形成与执行环境和活动对象紧密相关。 我们对于JS 标识符解析的判断,存在一个常见误区首先,看一个关于JS 标识 符解析的问题,源于风雪之隅提出的问题 var name = ‘globalName’;function funcA() { console.log(name); var name = ‘funAName’;console.log(name); console.log(age);funcA();这段代码的运行结果是怎样的? 相信会有人跟我最初遇到这个问题时一样,以为结果会是这样: globalNamefunAName[脚本错误: ReferenceError] 我们认为:在funA 中, 第一次console.log 的时候,会取到全局变量name 的值’globalName’,而第二次值被局部变 量name 覆盖,因此第二次console.log 是’funAName’。而age 属性没有定义, 因此 脚本会出错。 但是实际上,运行结果是这样的: undefinedfunAName[脚本错误: ReferenceError] 为什么会这样呢?在JS 中,标识符解析是沿作用域链一级一级地搜索标识符的过程,搜索过程始终从作用域链的前 端开始,然后逐级地向后回溯,直到找到标识符为止(如果找不到标识符,通常会 导致错误发生)。因此为了正确地判断标识符的解析结果,我们必须把作用域链原理 弄清楚。 深入理解作用域原理能够为我们解密这个误区作用域链(scope chain)的生成 跟执行环境(execution context)、函数对象(function object)和活动对象(activation object)紧密相关。 执行环境执行环境是JavaScript 中最为重要的一个概念。执行函数定义了变量 或函数有权访问的其它数据,决定了它们各自的行为。每个执行环境都有一个与之 关联的变量对象(variable object)和一个作用域链(scope chain),环境中定义的因 此变量和函数都保存在其变量对象中。执行环境分为两种,一种是全局执行环境,

内部函数和外部函数解读

8.10 内部函数与外部函数 函数本质上是全局的,但可以限定函数能否被别的文件所引用。当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。 8.10.1 内部函数 如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。 定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示: static 函数类型函数名(函数参数表) {……} 关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。 8.10.2 外部函数 外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数: [extern] 函数类型函数名(函数参数表) {……} 调用外部函数时,需要对其进行说明: [extern] 函数类型函数名(参数类型表)[,函数名2(参数类型表2)……]; 例8.22 外部函数应用。 (1)文件mainf.c main() { extern void input(…),process(…),output(…); input(…); process(…); output(…); } (2)文件subf1.c extern void input(……)/*定义外部函数*/ {……} (3)文件subf2.c extern void process(……)/*定义外部函数*/ {……} (4)文件subf3.c…… extern void output(……)/*定义外部函数*/ {……} 例8.23 数组排序----简单选择排序 file1.c main()

作用域与闭包,js插件内部传递function()内部值

《作用域与闭包:this,var,(function () {})》目标 无具体目标 知识点 1.理解js 中var 的作用域 2.了解闭包的概念 3.理解this 的指向 课程内容 *es6中新增了let 关键词,与块级作用域,相关知识参 考:https://www.360docs.net/doc/734011916.html,/#docs/let * var 作用域 先来看个简单的例子: var parent=function () { var name ="parent_name"; var age =13; var child=function () { var name ="child_name"; var childAge =0.3;

// => child_name 13 0.3 console.log(name, age, childAge); }; child(); // will throw Error // ReferenceError: childAge is not defined console.log(name, age, childAge); }; parent(); 直觉地,内部函数可以访问外部函数的变量,外部不能访问内部函数的变量。上面的例子中内部函数child 可以访问变量age,而外部函数parent 不可以访问child 中的变量childAge,因此会抛出没有定义变量的异常。 有个重要的事,如果忘记var,那么变量就被声明为全局变量了。 function foo() { value ="hello"; }foo();console.log(value); // 输出hello console.log(global.value) // 输出hello 这个例子可以很正常的输出hello,是因为value变量在定义时,没有使 用var关键词,所以被定义成了全局变量。在Node 中,全局变量会被定义在global对象下;在浏览器中,全局变量会被定义在window对象下。

JSinDeep1_探索执行环境_ES3

JSinDeep1:探索执行环境(Execution Context)-ES3篇 声明 JSinDeep系列文章主要内容为作者对ECMA-262标准中一些概念的理解和探究,同时意在帮助大家快速理解。本着严谨的态度,同时又需避免API式的枯燥细节罗列。文章会以适当插图、例子去诠释概念,致力于通俗易懂。更具体、严谨、完整的描述建议阅读ECMA262文档。碍于作者水平有限,文中若有错误,欢迎大家批评指正。 概要 在我们写JavaScript代码时会定义一些变量、函数等。解释器在执行这些代码时是如何处理并找到我们定义的这些数据的?在程序执行时,引用这些变量等操作的背后都发生了什么?本文主要探讨ECMA-262-3标准中的执行环境(Execution Context)及与之相关的一些内部机制和模型。 定义 当程序执行的控制权转移至ECMAScript可执行代码时,会进入到一个执行环境中(Execution Context,缩写为EC)。在一个EC内也可能进入到一个新的EC,这些EC逻辑上○1会形成一个栈(Stack)。 EC是程序运行时动态创建的。例如:每一个函数在被调用时都会创建一个EC,重复调用函数(包含递归调用的情形)会重新创建新的EC,而后放置在逻辑栈中。逻辑栈会在程序运行时随着新的函数调用、函数return、未处理的异常抛出等情况动态变化,但逻辑栈的最顶部总是当前正运行的EC,它的最底部总是全局EC(Global Context)。 图:运行时的逻辑EC栈

○1这里的“逻辑上”是因ECMA262标准避免限制实现者的思路,具体实现在遵循标准的前提下不受其它限制。因此这里所说的逻辑上的栈在具体实现时未必是通常意义上的栈。后面我们简称为:“逻辑栈”。 可执行代码的分类 由定义部分可知,“每一段可执行代码都有对应的EC”,为方便按不同情况讨论,先了解几种可执行代码的类型。 a). 全局代码 全局代码是指在任何被解析为函数体的代码以外的最外层的代码。 var i = 0; // 全局代码 function foo() { // foo函数定义部分为全局代码 var j = 1; // foo函数体内为函数代码 } var k = 2; // 全局代码 *字符串中的并动态被eval执行的代码除外,在下一类Eval代码中介绍 在程序执行前会初始化全局EC,逻辑栈(Logical Stack,简称为LS)的结构类似于: [伪代码] LS = { globalContext } b). 函数代码 函数代码是指函数体中的代码。某一个函数体内的函数代码并不包含其内联的其它函数的函数体中的代码。 var i = 0;// 全局代码 function foo() { // 全局代码 var j = 0; // foo的函数代码 function inner() { // foo的函数代码 var k = 0; // inner的函数代码 } if (i++ == 0) foo(); // foo的函数代码,递归调用一次foo } foo(); // 调用一次foo 逻辑栈的结构类似于: [伪代码]

C++命名空间

C++命名空间namespace 虽然使用命名空间的方法,有多种可供选择。但是不能贪图方便,一味使用using 指令,这样就完全背离了设计命名空间的初衷,也失去了命名空间应该具有的防止名称冲突的功能。 一般情况下,对偶尔使用的命名空间成员,应该使用命名空间的作用域解析运算符来直接给名称定位。而对一个大命名空间中的经常要使用的少数几个成员,提倡使用using声明,而不应该使用using编译指令。只有需要反复使用同一个命名空间的许多数成员时,使用using编译指令,才被认为是可取的。 例如,如果一个程序(如上面的outi.cpp)只使用一两次cout,而且也不使用std命名空间中的其他成员,则可以使用命名空间的作用域解析运算符来直接定位。如: #include …… std::cout << "Hello, World!" << std::endl; std::cout << "Outer::i = " << Outer::i << ", Inner::i = " << Outer::Inner::i << std::endl; 又例如,如果一个程序要反复使用std命名空间中的cin、cout 和cerr(如上面的outi.cpp),而不怎么使用其他std命名空间中的其他成员,则应该使用using 声明而不是using指令。如:

#include …… using std::cout; cout << "Hello, World!" << endl; cout << "Outer::i = " << Outer::i << ", Inner::i = " << Outer::Inner::i << endl; 4)命名空间的名称 l 命名空间别名 标准C++引入命名空间,主要是为了避免成员的名称冲突。若果用户都给自己的命名空间取简短的名称,那么这些(往往同是全局级的)命名空间本身,也可能发生名称冲突。如果为了避免冲突,而为命名空间取很长的名称,则使用起来就会不方便。这是一个典型的两难问题。 标准C++为此提供了一种解决方案——命名空间别名,格式为:namespace 别名= 命名空间名; 例如:(AT&T美国电话电报公司) namespace American_Telephone_and_Telegraph { // 命名空间名太长

变量的作用域和生存期

变量的作用域局部变量和全局变量 在函数和复合语句内定义的变量,只在本函数或复合语句范围内有效(从定义点开始到函数或复合语句结束),他们称为内部变量或局部变量。 在函数之外定义的变量是外部变量,也称为全局变量(或全程变量)。 如果在一个函数中全局变量和局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即他不起作用,此时局部变量是有效的。 全局变量的作用是增加函数间数据联系的渠道。 虽然全局变量有以上优点,但建议不必要时不要使用全局变量,因为全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。 在程序设计时,对模块的划分要求:内聚性强,与其他模块的耦合性弱,这样便于程序的移植,可读性强。 变量的生存期 变量的存储方式分为两种:静态存储方式和动态存储方式。 静态存储方式是指在程序与性能期间由系统在静态存储区分配存储空间的方式,在程序运行器件不释放;而动态存储方式则是在函数调用期间根据需要在动态存储区分配存储空间的方式。这就是变量的存储区别。 Auto----声明自动变量 函数中的形参和在函数中定义的变量都属于此类。在调用这些函数时,系统给这些变量分配存储空间,函数调用结束时就自动释放这些存储空间。因为这类局部变量称为自动变量(auto 变量)。关键字auto作为存储类别的声明。 Auto可省略 Static-----声明静态变量 希望函数中的变量的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就用关键字static指定该局部变量为“静态存储变量”。 对静态局部变量的说明 静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占胴体啊存储区空间而不占静态存储区空间,函数调用结束后即释放。 对静态局部变量是在编译时赋初值的,即只赋初值一次,在以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。自动变量赋初值是在函数调用时进行的。 对静态局部变量来说,编译时自动赋初值0或空字符。而对自动变量来说,如果不赋值则他的值是一个不确定的值。 Registic--声明寄存器变量 这种变量一般不用,只需了解就可以了。 Extern-----声明外部变量的作用范围 如果一个程序中有两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num,否则在进行程序的连接时会出现“重复定义”的错误。正确的做法:在人一个文件中定义外部变量Num,而在另一个文件中用extern对Num作外部变量声明,即extern Num.

windows2003域控制器的冗余

对于部署了AD架构的企业来说AD/DNS/DHCP/WINS都是我们必须用到的服务,一但这些服务中断会导致整个企业IT系统无法正常运作,如何保障这些基础服务的高可用性是我们每一位管理员需要考虑的。 一般的中小企业最少都会用两台或多台服务器做冗余保证企业内基础服务的高可用性,当一台服务器坏了或需要维护另一台服务器照样能够提供相同的服务来保障企业IT系统的正常运作。 下面是一张很经典的AD部署场景图,图里用了两台计算机做服务器,同时提供了AD/DNS/DHCP/WINS服务。对AD/DNS/DHCP/WINS服务不了解的朋友请先学习一下理论知识,要动手实验朋友请先把下面的图看懂了再动手,本帖子适合对AD入门的朋友,老鸟们就直接跳过吧^_^。

下面是两台服务器的配置过程 在配置前请先在两台计算机上安装好Windows 2003 操作系统,升级打好最新补订! 一、WinOSDC2服务器的配置过程 1、AD的配置 2、DNS的配置 3、DHCP的配置 4、WINS的配置 二、WinOSDC3服务器的配置过程 1、AD的配置 2、DNS的配置 3、DHCP的配置 4、WINS的配置 三、验证两台服务器是否能够提供冗余服务、 一、WinOSDC2服务器的配置过程——1、AD的配置 1、登录到WinOSDC2服务器,安装DNS/DHCP/WINS网络服务;

2、配置本机的网络IP,子网掩码,网关,DNS,WINS;

3、在“开始菜单”“运行”输入AD配置命令dcpromo ; 4、下一步

5、选择“新域的域控制器”“下一步” 6、选择“在新林中的域”“下一步”

2017前端面试题

HTML相关问题 1.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言 最主要的不同: XHTML 元素必须被正确地嵌套。 XHTML 元素必须被关闭。 标签名必须用小写字母。 XHTML 文档必须拥有根元素。 2.什么是语义化的HTML? 直观的认识标签对于搜索引擎的抓取有好处,用正确的标签做正确的事情! html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析; 在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。搜索引擎的爬虫依 赖于标记来确定上下文和各个关键字的权重,利于 SEO。 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。 3.常见的浏览器内核有哪些? Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等 Presto内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;]Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)] 4.HTML5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和HTML5? HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。 绘画 canvas 用于媒介回放的 video 和 audio 元素 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失; sessionStorage 的数据在浏览器关闭后自动删除 语意化更好的内容元素,比如 article、footer、header、nav、section 表单控件,calendar、date、time、email、url、search 新的技术webworker, websockt, Geolocation 移除的元素 纯表现的元素:basefont,big,center,font, s,strike,tt,u; 对可用性产生负面影响的元素:frame,frameset,noframes; 支持HTML5新标签: IE8/IE7/IE6支持通过document.createElement方法产生的标签, 可以利用这一特性让这些浏览器支持HTML5新标签,

https://www.360docs.net/doc/734011916.html,中命名空间Namespace浅析和使用例子

关于Namespace(命名空间)的使用,我常用 复制代码代码如下:< % @ Import Namespace="System.Data" %> ,这是在引用为我们提供的Namespace,这和ASP不同的,我们在https://www.360docs.net/doc/734011916.html,必须先引用与我们操作有关的Namespace后才能使用相应的功能。其实说白了,一个Namespace; 就是一个组件。 这个是关于https://www.360docs.net/doc/734011916.html,的高级应用。 我下面简单的列举一些常用的Namespace 代码如下: < % @ Import Namespace="System.Data" %> 处理数据时用到 < % @ Import Namespace="System.Data.ADO" % > 使用https://www.360docs.net/doc/734011916.html, ; 时用到 < % @ Import Namespace="System.Data.SQL" %> SQL Server 数据库专用 < % @ Import Namespace="System.Data.XML" %> 不用看处理XML用到 < % @ Import Namespace="System.IO" %> 处理文件时用到 < % @ Import Namespace="System.Web.Util" %> 发邮件时大家会用到 < % @ Import Namespace="System.Text" %> 文本编码时用到 操作数据库需要的东东 讲解了Namespace,我们可以正式来讨论数据库的应用了。 从上面的可以看出,我们操作数据库,我们需要引用下面两个Namespace 代码如下: < % @ Import Namespace="System.Data" %> < % @ Import Namespace="System.Data.SQL" %> 其实System.Data.SQL 可以用System.Data.ADO来代替,SQL是SQL Server专用,ADO 可以支持任何数据库(只要在主机上存在相应的驱动就行了,如Access,Mysql,Oracle之类的)。 无论是ADO还是SQL ,他们都有几个基本的对象用于操作 代码如下: Connections 连结到一个数据库,以便于后面的应用(类似ADO中的Connections) Commands 执行SQL语句的地方 DataReader 读取执行后返回的数据内容 DataSet 储存数据,功能强大,我们会具体讲解 DataSetCommand 执行SQL语句,并把数据存入DataSet 这里面可能最难理解的就是DataSet,我们先不去管他。 Connections(SQLConection 或者ADOConnection) 它的主要任务就是建立一个与数据库服务器的连接 代码如下: < % @ Page Language="C#" %> < % @ Import Namespace="System.Data" %> < % @ Import Namespace="System.Data.SQL" %> <script Language= "C#" Runat= "Server"> public void Page_Load(Object src,EventArgs e) { stringstrProvider="server=localhost;uid=sa;pwd=;database=aspcn";

JSP的四大作用域:page、request、session、application

JSP的四大作用域:page、request、session、application page作用域:代表变量只能在当前页面上生效 reques t:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie 就会一直生效,cookie生效,session的使用就不会受到影响。 application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。 Cookie在jsp中语法: Cookie cookie_name =new Cookie("Parameter","Value"); 例: Cookie username_Cookie =new Cookie("username","waynezheng"); response.addCookie(username_Cookie); 读取cookie 从提交的HTML表单中获取,用户名 String userName=request.getParameter("username"); 以"username", userName 值/对创建一个Cookie Cookie theUsername=new Cookie("username",userName); 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry 应是一个整数。正值表示cookie将在这么多秒以后失效。注意这个值是cookie 将要存在的最大时间,而不是cookie现在的存在时间。负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。如: Cookie deleteNewCookie=new Cookie("newcookie",null); deleteNewCookie.setMaxAge(0); 删除该Cookie deleteNewCookie.setPath("/"); response.addCookie(deleteNewCookie); 实例: <%

js闭包

最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。 一、什么是闭包? “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段代码: function a(){ var i=0; function b(){ alert(++i); } return b; } var c = a(); c(); 这段代码有两个特点: 1、函数b嵌套在函数a内部; 2、函数a返回函数b。 这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说: 当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。 我猜想你一定还是不理解闭包,因为你不知道闭包有什么作用,下面让我们继续探索。 二、闭包有什么作用?

简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。 在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。 那么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a 执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。(关于Javascript的垃圾回收机制将在后面详细介绍) 三、闭包内的微观世界 如果要更加深入的了解闭包以及函数a和嵌套函数b的关系,我们需要引入另外几个概念:函数的执行环境(excution context)、活动对象(call object)、作用域(scope)、作用域链(scope chain)。以函数a从定义到执行的过程为例阐述这几个概念。 1、当定义函数a的时候,js解释器会将函数a的作用域链(scope chain)设置为定义a 时a所在的“环境”,如果a是一个全局函数,则scope chain中只有window对象。 2、当函数a执行的时候,a会进入相应的执行环境(excution context)。 3、在创建执行环境的过程中,首先会为a添加一个scope属性,即a的作用域,其值就为第1步中的scope chain。即a.scope=a的作用域链。 4、然后执行环境会创建一个活动对象(call object)。活动对象也是一个拥有属性的对象,但它不具有原型而且不能通过JavaScript代码直接访问。创建完活动对象后,把活动对象添加到a的作用域链的最顶端。此时a的作用域链包含了两个对象:a的活动对象和window 对象。 5、下一步是在活动对象上添加一个arguments属性,它保存着调用函数a时所传递的参数。 6、最后把所有函数a的形参和内部的函数b的引用也添加到a的活动对象上。在这一步中,完成了函数b的的定义,因此如同第3步,函数b的作用域链被设置为b所被定义的环境,即a的作用域。

C++标准库和std命名空间

c++标准库及命名空间std 1、命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突。最典型的例子就是std命名空间,C++标准库中所有标识符都包含在该命名空间中。 如果确信在程序中引用某个或者某些程序库不会引起命名冲突(即库中的标识符不会在程序中代表其他函数名称),那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std;那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。 是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样才能正确使用cout。、 C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择: 1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::hex<< 3.4<< std::endl; 2、使用using关键字。 using std::cout; using std::endl; 以上程序可以写成 cout << std::hex<< 3.4<< endl; 3、最方便的就是使用using namespace std; 例如: #include #include #include

C++中的作用域解析

C++中的作用域解析 名字空间域 名字空间主要用于解决名字冲突的问题,在名字空间出现之前,库的作者通常通过附加给库中的类型,全局变量和函数予特定的前缀来防止名字冲突的问题,例如dbus库的Error类型和Error初始化函数被命名为: DBusError dbus_init_error 有了名字空间后,我们就可以通过附加名字空间的名字来构成名字的限定名(Qualified Name)来解决名字冲突的问题。 当然更主要的是我们可以通过名字空间别名,使用声明(特定的名字)和使用指示(全部名字)来达成即能有效防止冲突,又能在已确定的上下文中更方便的访问名字的作用。 跟Java的包机制不同,名字空间是纯逻辑上的,它不具备对文件组织上任何的物理约束,一个名字空间可以跨越多个编译单元(常见的方式,一个库一个名字空间),但也可以一个编译单元包含多个名字空间(比较少见,通常是用来通过嵌套的子名字空间来防止一些函数重载上的意外发生)。(Java中的包,编译单元,类型域的包含关系更加明确,容易理解和使用,一个包必然包含一个或多个编译单元,一个编译单元也必然包括一个或多个类型,而且只能有一个是包可见的--公共类) 有的意见认为,名字空间引起的问题比它解决的要多,比如连接时名字解析的问题,特别是不同编译器编译出来的程序片段(静态库,导入库,Object文件)如何能够正确的连接。名字空间也使得重载的决议规则变的更复杂。所以像有些的库仍然坚持使用前缀的方式,比如QT。 名字空间出现后,以前的全局域就变成了名字空间的一个特例--全局名字空间。没有放置在某个名字空间的类型,具有编译单元外部链接的非成员函数和变量就缺省属于全局名字空间。 编译单元域 编译单元域是个比较特殊的域,它通常跟代码的物理组织方式有关。一个编译单元中非成员变量和函数的名字可以有外部链接,从而使得链接器可以用来解决跨编译单元的名

执行环境,作用域理解

Javascript学习---2、执行环境,作用域 作者:名刘天下来源:博客园发布时间:2010-12-10 17:03 阅读:155 次原文链接[收藏]在javascript的学习中,执行环境、作用域是2个非常非常重要和基本的概念,理解了这2个概念对于javsacript中很多脚本的运行结果就能明白其中的道理了,比如搞清作用域和执行环境对于闭包的理解至关重要。 一、执行环境(exection context,也有称之为执行上下文) 所有JavaScript 代码都是在一个执行环境中被执行的。执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域、生存期等方面的处理,它定义了变量或函数是否有权访问其他数据,决定各自行为。 在javascript中,可执行的JavaScript代码分三种类型: 1. Global Code,即全局的、不在任何函数里面的代码,例如:一个js文件、嵌入在HTML页面中的js代码等。 2. Eval Code,即使用eval()函数动态执行的JS代码。 3. Function Code,即用户自定义函数中的函数体JS代码。 不同类型的JavaScript代码具有不同的执行环境,这里我们不考虑evel code,对应于global code和function code存在2种执行环境:全局执行环境和函数执行环境。 在一个页面中,第一次载入JS代码时创建一个全局执行环境,全局执行环境是最外围的执行环境,在Web浏览器中,全局执行环境被认为是window对象。因此,所有的全局变量和函数都是作为window对象的属性和方法创建的。 当调用一个JavaScript 函数时,该函数就会进入与该函数相对应的执行环境。如果又调用了另外一个函数(或者递归地调用同一个函数),则又会创建一个新的执行环境,并且在函数调用期间执行过程都处于该环境中。当调用的函数返回后,执行过程会返回原始执行环境。因而,运行中的JavaScript 代码就构成了一个执行环境栈。 function Fn1(){ function Fn2(){ alert(document.body.tagName);//BODY //other code... } Fn2(); } Fn1(); //code here

javascript闭包高级教程

理解 JavaScript 闭包 要成为高级 JavaScript 程序员,就必须理解闭包。 本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。 目录 ?简介 ?对象属性名解析 o值的赋予 o值的读取 ?标识符解析、执行环境和作用域链 o执行环境 o作用域链与 [[scope]] o标识符解析 ?闭包 o自动垃圾收集 o构成闭包 ?通过闭包可以做什么? o例 1:为函数引用设置延时 o例 2:通过对象实例方法关联函数 o例 3:包装相关的功能 o其他例子 ?意外的闭包 ?Internet Explorer 的内存泄漏问题 简介 返回目录 Closure 所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境 的表达式(通常是一个函数),因而这些变量也是该表达式的一部 分。 闭包是 ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下。如果想要

扬长避短地使用闭包这一特性,则必须了解它们的工作机制。而闭包工作机制的实现很大程度上有赖于标识符(或者说对象属性)解析过程中作用域的角色。 关于闭包,最简单的描述就是 ECMAScript 允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。 遗憾的是,要适当地理解闭包就必须理解闭包背后运行的机制,以及许多相关的技术细节。虽然本文的前半部分并没有涉及 ECMA 262 规范指定的某些算法,但仍然有许多无法回避或简化的内容。对于个别熟悉对象属性名解析的人来说,可以跳过相关的内容,但是除非你对闭包也非常熟悉,否则最好是不要跳下面几节。 对象属性名解析 返回目录 ECMAScript 认可两类对象:原生(Native)对象和宿主(Host)对象,其中宿主对象包含一个被称为内置对象的原生对象的子类(ECMA 262 3rd Ed Section 4.3)。原生对象属于语言,而宿主对象由环境提供,比如说可能是文档对象、DOM 等类似的对象。 原生对象具有松散和动态的命名属性(对于某些实现的内置对象子类别而言,动态性是受限的--但这不是太大的问题)。对象的命名属性用于保存值,该值可以是指向另一个对象(Objects)的引用(在这个意义上说,函数也是对象),也可以是一些基本的数据类型,比如:String、Number、Boolean、Null 或Undefined。其中比较特殊的是 Undefined 类型,因为可以给对象的属性指定一个 Undefined 类型的值,而不会删除对象的相应属性。而且,该属性只是保存 着undefined 值。 下面简要介绍一下如何设置和读取对象的属性值,并最大程度地体现相应的内部细节。 值的赋予 返回目录 对象的命名属性可以通过为该命名属性赋值来创建,或重新赋值。即,对于:

相关文档
最新文档