探索JS引擎工作原理

JavaScript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈、全局对象、执行环境、变量对象、活动对象、作用域和作用域链等,这些概念正是JS引擎工作的核心组件。这篇文章的目的不是孤立的为你讲解每一个概念,而是通过一个简单的DEMO来展开分析,全局讲解JS引擎从定义到执行的每一个细节,以及这些概念在其中所扮演的角色。varx=1;//定义一个全局变量xfunctionA(y){varx=2;//定义一个局部变量xfunctionB(z){//定义一个内部函数Bconsole.log(x+y+z);}returnB;//返回函数B的引用}varC=A(1);//执行A,返回BC(1);//执行函数B,输出4下面我们将分全局初始化、执行函数A、执行函数B 三个阶段来分析JS引擎的工作机制:1、全局初始化JS引擎在进入一段可执行的代码时,需要完成以下三个初始化工作:首先,创建一个全局对象(GlobalObject),这个对象全局只存在一份,它的属性在任何地方都可以访问,它的存在伴随着应用程序的整个生命周期。...

apache启动服务报错ServerRoot must be a valid directory

【现象】D:apacheApache24in>httpd-kinstallInstallingthe'Apache2.4'serviceThe'Apache2.4'serviceissuccessfullyinstalled.Testinghttpd.conf....Errorsreportedheremustbecorrectedbeforetheservicecanbestarted.httpd:Syntaxerroronline40ofD:/apache/Apache24/conf/httpd.conf:ServerRootmustbeavaliddirectory【原因】httpd.conf里面配置的ServerRoot路径跟实际路径不一致,导致路径无效。【解决步骤一】打开Apache2.4.16解压文件下的bin文件里面的httpd.conf本文为:D:apacheApache24confhttpd.conf【解决步骤二】打开httpd.conf后,搜索DefineSRVROOT(只有一处),将其后面的双引号里面的路径改为Apache的实际解压路径后保存即可,本文为D...

org.apache.jasper.JasperException: Unable to find taglib [PF] for URI: [/view/conf/farmtag.tld]

需要在web.xml中增加配置  <jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><el-ignored>false</el-ignored><page-encoding>utf-8</page-encoding></jsp-property-group><taglib><taglib-uri>/view/conf/farmdoc.tld</taglib-uri><taglib-location>/view/conf/farmdoc.tld</taglib-location></taglib><taglib><taglib-uri>/view/conf/farmtag.tld</taglib-uri><taglib-location>/view/conf/farm...

Python的内建比较函数cmp比较原理剖析-乾颐堂

cmp(x,y):比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1.Python的cmp比较函数比较原理Python的cmp函数可以比较同类型之间,或者不同数据类型之间。然后根据Python的cmp比较函数的返回值来判定比较大小。12345678910>>> list1, list2 = [123, 'xyz'], [456, 'abc']>>> cmp(list1, list2)-1>>> cmp(list2, list1)1>>> list3 = list2 + [789]>>> list3[456, 'abc', 789]>>> cmp(list2, list3)-1观察上面cmp函数的几个比较,可以总结:Python的cmp比较函数,如果我们比较的是...

终极解决方案:org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response

一、项目我的项目采用SpringMVC+JSP+EasyUI做的老项目。在做图片验证码方法时,向网页输出验证码图片的方法如下:@OverridepublicvoidshowCodeImg(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{response.setHeader("Expires","-1");//控制缓存的失效日期response.setHeader("Cache-Control","no-cache");//必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求response.setHeader("Pragma","-1");CaptchaUtilutil=CaptchaUtil.Instance();//将验证码输入到session中,用来验证Stringcode=util.getString();request.setCharacterEncoding("UTF-8");request.getSession().setAttribute(S...

docker 基本原理及快速入门

作者地址:青牛Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护。Docker自开源后受到广泛的关注和讨论,以至于dotCloud公司后来都改名为DockerInc。Redhat已经在其RHEL6.5中集中支持Docker;Google也在其PaaS产品中广泛应用。Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器(LXC)等技术。在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。Docker在如下几个方面具有较大的优势:更快速的交...

Configure Apache Virtual Hosts

Difficulty: 2Time: 15minutesWanttohostwebsitesonyourserver?UsingApache?Great.ThisarticlewillshowyouhowtodoexactlythatusingApache’s“virtualhosts.”InApache,youcanusevirtualhoststodirect http trafficforagivendomainnametoaparticulardirectory(i.e.therootdirectoryofthewebsiteforthedomainintherequest).Thisfeatureiscommonlyusedtohostmultiplewebsites,butwerecommendusingitforeverywebsiteonyourserver including thefirst.Throughoutthisarticle,we'lluseanexampledomain- coolex...

Linux下如何修改Apache根目录

创建自己需要更改的新目录,并更改宿主权限为apache用户chown-Rapache:apache/mnt/www 停止Apache服务servicehttpdstop3修改Apache的配置文件,默认在/etc/httpd/conf/httpd.conf,找到DocumentRoot修改为你的新路径,如下图所示4以及下方的 Directory为你的新路径,如下图所示5保存配置文件后,重启Apache服务,你的Apache目录更改就会生效了。 ...

C#下利用封包、拆包原理解决Socket粘包、半包问题(新手篇)

介于网络上充斥着大量的含糊其辞的Socket初级教程,扰乱着新手的学习方向,我来扼要的教一下新手应该怎么合理的处理Socket这个玩意儿。一般来说,教你C#下Socket编程的老师,很少会教你如何解决Socket粘包、半包问题。更甚至,某些师德有问题的老师,根本就没跟你说过Socket的粘包、半包问题是什么玩意儿。直到有一天,你的Socket程序在传输信息时出现了你预期之外的结果(多于的信息、不完整的信息、乱码、Bug等等)。任你喊了一万遍“我擦”,依旧是不知道问题出在哪儿!好了,不说废话了,进入正题,包教包会,学不会,送路费。如果你读到这篇文章了,想必你已经遇到了以上问题,情况再理想一点儿,其实你在原理上已经知道怎么解决这个问题了,只是不知道怎么动手。那么,首先,你需要新建一个【消息协议类】,这个类我们暂定由5大属性组成,分别是:【(①=1个byte)(②=1个byte])(③=1个int)(④=1个byte[])(⑤=1个byte[])】解释一下这个【消息协议类】:(①=1个byte):这个属性占1个字节,可以放一个0到254的整数,我称作1号标志;(②=1个byte):这个属性占...

[转]org.apache.poi3.1.7 Excle并发批量导入导出,格式设置方式需要修改

org.apache.poi3.1.7升级,需要修改设置方式:1、org.apache.poi3.1.4的设置单元格:XSSFCellStyle cellStyle = wb.createCellStyle();   cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 居中  cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直 org.apache.poi3.1.7的设置单元格,格式为:XSSFCellStyle cellStyle = wb.createCellStyle();   cellStylestyle.setAlignment(HorizontalAlignment.CENTER);// 居中  cellStyle.setVerticalA...

【转】oracle中的游标的原理和使用详解

游标游标的简介:逐行处理查询结果,以编程的方式访问数据游标的类型:/1,隐式游标:在PL/SQL程序中执行DMLSQL语句时自动创建隐式游标,名字固定叫sql。2,显式游标:显式游标用于处理返回多行的查询。3,REF游标:REF游标用于处理运行时才能确定的动态SQL查询的结果隐式游标:q在PL/SQL中使用DML语句时自动创建隐式游标q隐式游标自动声明、打开和关闭,其名为SQLq通过检查隐式游标的属性可以获得最近执行的DML语句的信息q隐式游标的属性有:q%FOUND–SQL语句影响了一行或多行时为TRUEq%NOTFOUND–SQL语句没有影响任何行时为TRUEq%ROWCOUNT–SQL语句影响的行数q%ISOPEN-游标是否打开,始终为FALSE?12345678begin  updatestudentssets.sage=s.sage+10;  ifsql%FOUND  then    dbms_output.put_line('这次更新了'||sql%rowcount);&nb...

[转]Spring注解原理的详细剖析与实现

原文地址:http://freewxy.iteye.com/blog/1149128/本文主要分为三部分:一、注解的基本概念和原理及其简单实用二、Spring中如何使用注解三、编码剖析spring@Resource的实现原理 一、注解的基本概念和原理及其简单实用注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析注解来使用这些数据),用来将任何的信息或者元数据与程序元素(类、方法、成员变量等)进行关联。其实就是更加直观更加明了的说明,这些说明信息与程序业务逻辑没有关系,并且是供指定的工具或框架使用的。Annotation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的申明语句中。Annotation其实是一种接口。通过java的反射机制相关的API来访问Annotation信息。相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。Java语言解释器在工作时会忽略这些Annotation,因此在JVM中这些Annota...

【转】变量的声明和定义,从C到编译原理到C++,再到Java

基础学了太久,时间一长有些东西就可能记得不太清楚,俗话说得好,"好记性不如烂笔头",所以把基础中的基础-变量的声明和定义,从C到编译原理到C++,再到Java用烂笔头记录下来  最早在编程语言中认识声明和定义是在学C语言的时候...    C语言中:如externUseruser;externinta;就是声明,变量的声明就是仅仅告诉编译器,声明的变量的存在,要预留一点空间,但并不为其分配内存.定义就是声明这个变量并真正在内存(堆或栈中)为此变量分配空间.    从编译原理上来说,声明就是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而定义就是不仅知道某类型的变量会被使用,并且已经为其分配了内存.     因为在编译的时候,编译器先处理一些特殊数据(宏定义,函数的声明,变量的声明),在这个过程中,编译器通过声明可以预测整个定义需要的内存大小,并且把这些大小预留起来,留给定义的时候使用(因为虽然定义,但是在ma...

电脑取随机数是什么原理,是真正的随机数吗?转自知乎.

首先,「真随机」也有不同的含义,若想要「真正的真随机」目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。答案是,计算机系统可以产生统计意义上的真随机数。大部分程序和语言中的随机数(比如C中的,MATLAB中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是,我们或许可以迂回一下……实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。一个典型的例子就是UNIX内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。具体来讲,UNIX维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。比如说:时钟,...

转:XSS和CSRF原理及防范

原文地址:http://www.freebuf.com/articles/web/39234.html 随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显。黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。如今,Web安全成为焦点,但网站的漏洞还是频频出现,在白帽子们进行网站测试时,恐怕对于SQL注入、XSS跨站、CSRF接触最多,但对于网站的开发者们来说,对这些熟知多少?本文从开发者的角度,对于XSS和CSRF进行简要概述。PART1 XSS跨站脚本(Cross-sitescripting)XSS成因概括:    XSS其实就是Html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,...
代码星球 代码星球·2021-02-15
首页上一页...678910...下一页尾页