大家好,又见面了,我是你们的朋友全栈君。 当使用SpringBoot框架时,他自己集成了tomcat。在启动jar包时,经常需要复制一大段命令,尤其是在项目目录发生改变的时候,实在繁琐。...所以可以使用shell脚本来启动、关闭和重启Java项目。 创建一个shell脚本 vim 脚本名.sh 脚本内容: #!.../bin/bash #这里替换为你自己的执行程序的名称 JAR_NAME=jar包名称 #lib目录 LOAD_PATH="-Dloader.path=/home/local/lib/" #项目配置文件....sh [start|stop|restart]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $JAR_NAME|grep -v grep...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
(说实话我基本没用过) 增加了保留字(比如protected、static和interface) 2.关于let和const新增的变量声明 3.变量的解构赋值 4.字符串的扩展...对this对象的理解 this 是执行上下文中的一个属性,它指向最后一次调用这个方法的对象。在实际开发中,this 的指向可以通过四种调用模式来判断。...第一种是函数调用模式,当一个函数不是一个对象的属性时,直接作为函数来调用时,this 指向全局对象。 第二种是方法调用模式,如果一个函数作为一个对象的方法来调用时,this 指向这个对象。...第三种是构造器调用模式,如果一个函数用 new 调用时,函数执行前会新创建一个对象,this 指向这个新创建的对象。...; 脚本是否并行执行:async属性,表示后续文档的加载和执行与js脚本的加载和执行是并行进行的,即异步执行;defer属性,加载后续文档的过程和js脚本的加载(此时仅加载不执行)是并行进行的(异步),
module.loaded 返回一个布尔值,表示模块是否已经完成加载。 module.parent 返回一个对象,表示调用该模块的模块。...如果是在脚本之中调用,比如require('./something.js'),那么module.parent就是调用它的模块。利用这一点,可以判断当前模块是否为入口脚本。 if (!.../lib/some-library.js" } require发现参数字符串指向一个目录以后,会自动查看该目录的package.json文件,然后加载main字段指定的入口文件。...如果想要多次执行某个模块,可以让该模块输出一个函数,然后每次require这个模块的时候,重新执行一下输出的函数。..._cache,是否缓存之中有指定模块 // 2. 如果缓存之中没有,就创建一个新的Module实例 // 3. 将它保存到缓存 // 4.
使用脚本来设置环境并启动服务 另一种方法是编写一个包装脚本,在该脚本中设置所需的环境变量,然后启动服务。这样,当systemd启动服务时,它实际上是启动脚本。...创建一个脚本,例如start-service.sh: bash #!...然而,如果我们确实需要从 /etc/profile 中提取特定的环境变量设置,可以创建一个包装脚本,该脚本首先加载 /etc/profile,然后启动我们的服务。...这样做可以确保在启动服务之前设置了正确的环境变量。 创建包装脚本 创建脚本:创建一个脚本,比如 start-my-service.sh。...加载 /etc/profile:在脚本中,首先执行 source /etc/profile 以加载环境变量。 启动服务:然后,执行服务启动命令。 bash #!
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。...而一个执行上下文的生命周期可以分为两个阶段: 创建阶段:在这个阶段,执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向。...在变量对象中以函数名建立一个属性,属性值为指向该函数所在内存地址的引用。如果函数名的属性已经存在,那么该属性将会被新的引用所覆盖。...我们可以推知,这里确实出现了变量提升,而我们不能够访问的原因事实上是因为let的死区设计:当前作用域顶部到该变量声明位置中间的部分,都是该let变量的死区,在死区中,禁止访问该变量。...)中创建一个iframe,把其src指向子页面。
require命令第一次加载该脚本,就会执行整个脚本,然后在内存生成一个对象。 { id: '......表示该模块的脚本是否执行完毕。...done变量,然后加载另一个脚本文件b.js。...这导致ES6处理"循环加载"与CommonJS有本质的不同。ES6根本不会关心是否发生了"循环加载",只是生成一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。...a先加载b,然后b又加载a,这时a还没有任何执行结果,所以输出结果为null,即对于b.js来说,变量foo的值等于null,后面的foo()就会报错。 但是,ES6可以执行上面的代码。
因为变量obj指向的地址是只读的,不能重新赋值,这就好比main.js创造了一个名为obj的const变量。 最后,export通过接口,输出的是同一个值。...require命令第一次加载该脚本,就会执行整个脚本,然后在内存生成一个对象。 { id: '......该对象的id属性是模块名,exports属性是模块输出的各个接口,loaded属性是一个布尔值,表示该模块的脚本是否执行完毕。其他还有很多属性,这里都省略了。...done变量,然后加载另一个脚本文件b.js。...ES6 模块是动态引用,如果使用import从一个模块加载变量(即import foo from 'foo'),那些变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值
Symbol 代表创建后独一无二且不可变的数据类型,它的出现我认为主要是为了解决可能出现的全局变量冲突的问题。..._ **构造函数原型:**每一个构造函数的内部都有一个 prototype 属性,这个属性时一个指针,指向另一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。...闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。...块级作用域中的变量,只能在当前块中进行访问 对作用域链的理解(变量的一个搜索过程) 所谓作用域链,其实就是我们在某个作用域中获取某个变量的值,如果在该函数中没有该变量的定义,则会到创建这个函数的那个域寻找...当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次数加1。
这个变量是一个对象,它的 exports属性(即module.exports)是对外的接口,加载某个模块,其实是加载该模块的module.exports属性。...,不会污染全局作用域 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。...如果想要多次执行某个模块,可以让该模块输出一个函数,然后每次require这个模块的时候,重新执行一下输出的函数。...第二个差异是因为 CommonJS 加载的是一个对象(即module.exports属性)。该对象只有在脚本运行完才会生成。...因为变量obj指向的地址是只读的,不能重新赋值,这就好比main.js创造了一个名为obj的const变量。 最后,export通过接口,输出的是同一个值。
因为变量obj指向的地址是只读的,不能重新赋值,这就好比main.js创造了一个名为obj的const变量。 最后,export通过接口输出的是同一个值。不同的脚本加载这个接口得到的都是同样的实例。...require命令第一次加载该脚本时就会执行整个脚本,然后在内存中生成一个对象。 ``` { id: '......该对象的id属性是模块名,exports属性是模块输出的各个接口,loaded属性是一个布尔值,表示该模块的脚本是否执行完毕。其他还有很多属性,这里都省略了。...done变量,然后加载另一个脚本文件b.js。...ES6模块是动态引用,如果使用import从一个模块中加载变量(即import foo from ‘foo’),那么,变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者保证在真正取值的时候能够取到值
一般有以下几种方式:defer 属性: 给 js 脚本添加 defer 属性,这个属性会让脚本的加载与文档的解析同步解析,然后在文档解析完成后再执行这个脚本文件,这样的话就能使页面的渲染不被阻塞。...动态创建 DOM 方式: 动态创建 DOM 标签的方式,可以对文档的加载事件进行监听,当文档加载完成后再动态的创建 script 标签来引入 js 脚本。...使用 setTimeout 延迟方法: 设置一个定时器来延迟加载js脚本文件让 JS 最后加载: 将 js 脚本放在文档的底部,来使 js 脚本尽可能的在最后来加载执行。...哪些情况会导致内存泄漏以下四种情况会造成内存的泄漏:意外的全局变量: 由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收。...迭代器的遍历方法是首先获得一个迭代器的指针,初始时该指针指向第一条数据之前,接着通过调用 next 方法,改变指针的指向,让其指向下一条数据每一次的 next 都会返回一个对象,该对象有两个属性value
Symbol 代表创建后独一无二且不可变的数据类型,它的出现我认为主要是为了解决可能出现的全局变量冲突的问题。...执行构造函数首先会创建一个对象,然后将对象的原型指向构造函数的 prototype 属性,然后将执行上下文中的 this 指向这个对象,最后再执行整个函数,如果返回值不是对象,则返回新建的对象。...我了解到的几种方式是: 第一种方式是我们一般采用的是将 js 脚本放在文档的底部,来使 js 脚本尽可能的在最后来加载执行。...第四种方式是动态创建 DOM 标签的方式,我们可以对文档的加载事件进行监听,当文档加载完成后再动态的创建 script 标签来引入 js 脚本。...require.js 的核心原理是通过动态创建 script 脚本来异步引入模块,然后对每个脚本的 load 事件进行监听,如果每个脚本都加载完成了,再调用回调函数。
所以,要减少JavaScript中的垃圾回收,在初始化的时候新建对象,然后在后续过程中尽量多的重用这些创建好的对象。我们可以:1. 数组array优化;2. 对象尽量优化;3. 循环优化。...(当html解析过程中,遇到defer属性,就会异步加载该js文件,不会中断HTML文档的解析,当整个HTML解析完成后,回头再来解析该js文件) 当有defer属性时,脚本的加载过程 和 文档加载 是...defer属性-是否延迟执行脚本,直到页面加载为止;async属性-脚本一旦可用,就异步执行。...该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。 请注意,unshift() 方法不创建新的创建,而是直接修改原有的数组。 该方法会改变数组的长度。...当访问一个对象的属性或方法时,js引擎会先查找该对象本身是否包含,如果没有,会去该对象的__proto__属性所指向的原型对象上找,如果没有,会继续向上一层找,直到某个对象的__proto__值为null
require命令第一次加载该脚本,就会执行整个脚本,然后在内存生成一个对象。 { id: '......表示该模块的脚本是否执行完毕。...done变量,然后加载另一个脚本文件b.js。...这导致ES6处理”循环加载”与CommonJS有本质的不同。ES6根本不会关心是否发生了”循环加载”,只是生成一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。...a先加载b,然后b又加载a,这时a还没有任何执行结果,所以输出结果为null,即对于b.js来说,变量foo的值等于null,后面的foo()就会报错。 但是,ES6可以执行上面的代码。
毕竟服务端加载的模块都是存放于本地磁盘中,所以加载起来比较快,不需要考虑异步方式。 根据规范,每一个文件既是一个模块,其内部定义的变量是属于这个模块的,不会污染全局变量。...特点 以文件为一个单元模块,代码运行在模块作用域内,不会污染全局变量 同步加载模块,在服务端直接读取本地磁盘没问题,不太适用于浏览器 模块可以加载多次,但是只会在第一次加载时运行,然后在加载,就是读取的缓存文件...require命令第一次加载该脚本,就会执行整个脚本,然后在内存生成一个对象。 { id: '......该对象的id属性是模块名,exports属性是模块输出的各个接口,loaded属性是一个布尔值,表示该模块的脚本是否执行完毕。其他还有很多属性,这里都省略不介绍了。...ES6 模块是动态引用**,如果使用import从一个模块加载变量(即import foo from 'foo'),那些变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值
然后点击start; 界面功能说明如下: 参数设置 设置CPU等参数。也可以写一个.cmm脚本,在file--> edit script中加载并debug该脚本。...,一般为rom/ram零地址) 总结:执行该脚本主要实现了CPU重启,初始化连接,CPU指向中断向量表。...next next 的模式会在当前代码的下一条代码打一个临时断点,当程序执行以后会一直运行直到碰到这个临时断点,它可以帮助我们直接跨过一个循环体.比如: return return 会在一个函数的最后一行设置一个临时断点...查看函数/内存数据/全局变量/堆栈/cpu寄存器 打开汇编,可以看到汇编的行号,以及当前代码属于的源文件,点击文件名,可以查看详细路径以及重命名的文件。...还可以通过view/var查看内存,变量等信息 点击 蓝色图标 i,可以 查看工程symbol,包括所有的函数和变量的symbol 以及对应的地址。
将会影响程序运行的性能 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。...闭包指的是一个函数可以访问另一个函数作用域中变量。常见的构造方法,是在一个函数内部定义另外一个函数。内部函数可以引用外层的变量;外层变量不会被垃圾回收机制回收。...1) 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。 2) 属性和方法被加入到 this 引用的对象中。...不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。 22 对JSON的了解?...JS的延迟加载有助与提高页面的加载速度。 defer和async、动态创建DOM方式(用得最多)、按需异步载入JS defer:延迟脚本。
:var x = y = 1; 实际上这里是从右往左执行的,首先执行y = 1, 因为y没有使用var声明,所以它是一个全局变量,然后第二步是将y赋值给x,讲一个全局变量赋值给了一个局部变量,最终,x是一个局部变量...src会将其指向的资源下载并应⽤到⽂档内,如请求js脚本。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执⾏完毕,所以⼀般js脚本会放在页面底部。...地址栏回车: 浏览器发起请求,按照正常流程,本地检查是否过期,然后服务器检查新鲜度,最后返回内容。死锁产生的原因? 如果解决死锁的问题?...;脚本是否并行执行:async属性,表示后续文档的加载和执行与js脚本的加载和执行是并行进行的,即异步执行;defer属性,加载后续文档的过程和js脚本的加载(此时仅加载不执行)是并行进行的(异步),js...HTTP: 该字段包含HTTPOnly 属性 ,该属性用来设置cookie能否通过脚本来访问,默认为空,即可以通过脚本访问。
领取专属 10元无门槛券
手把手带您无忧上云