shell本质上讲是一个应用程序,这个应用程序提供一种可视化界面,我们通常是在该界面访问Linux的内核系统。...我们在编写shell脚本的时候,通常都会在第一行标记: #!/bin/bash。#!...是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell 三、shell变量 变量的命名规则: 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线...使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。...…) 代表这部分是命令替换,它会执行括号内的命令并将其输出作为外部命令的参数 五、shell命令 命令名称 命令功能说明 cat 用于查看文件内容 grep 用于用于搜索文本中的模式,[grep -i
除了性能改进之外,它还带来了许多新特性,包括修正了在 PHP 8.1 中引入的 readonly 特性;显式类型化的类常量;一个新的用于标记覆盖超类方法的 #[\Override] 属性,等等。...> 不过,从使用的 trait 继承的普通方法不能使用#[\Override] 属性标记,因为它实际上并不会覆盖任何方法,只是“遮蔽”来自 trait 的同名方法。作为演示,请看下面的脚本: 当运行脚本时,将生成错误消息: Duplicate declaration of static variable $i ......其次,NumberFormatter::TYPE_CURRENCY 常量已被弃用。用使用这个常量,需要启用国际化扩展。 extension=intl 运行下面的脚本: 常量的脚本。 <?
其次是每个 Gradle 的 build 脚本文件都是一个 Groovy 脚本文件,你可以在里面写任何符合 Groovy 的代码,比如定义类,生命函数,定义变量等等,而 Groovy 又完全兼容Java...,这就意味着你可以在build脚本文件里写任何的Java代码,非常灵活方便。...在Groovy中,单引号和双引号都可以定义一个字符串常量(Java里单引号定义一个字符),不同的是单引号标记的是纯粹的字符串常量,而不是对字符串里的表达式做运算,但是双引号可以。...单引号没有运算的能力,它里面的所有都是常量字符串。 双引号可以直接进行表达式计算的这个能力非常好用,我们可以用这种方式进行字符串链接运算,再也不用 Java 中繁琐的 +号了。...println list[-2]//访问倒数第二个元素 println list[1..3]//访问第2到第4个元素 // it 变量就是正在迭代的元素,这里有闭包的知识
Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是”标记-清除”,还是”标记-整理”(也称作”标记-压缩”),值得注意的是,复制算法内存也是规整的 ?...对象的访问方式有虚拟机实而定,目前主流的访问方式有①使用句柄和②直接指针两种: 句柄: 如果使用句柄的话,那么Java堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,...直接指针: 如果使用直接指针访问,那么 Java 堆对像的布局中就必须考虑如何防止访问类型数据的相关信息,reference 中存储的直接就是对象的地址。 ? 这两种对象访问方式各有优势。...使用直接指针访问方式最大的好处就是速度快,它节省了一次指针定位的时间开销。
Java对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: String类和常量池 8种基本类型的包装类和常量池 1 概述...Java堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的 ?...对象的访问方式有虚拟机实现而定,目前主流的访问方式有①使用句柄和②直接指针两种: 1....直接指针: 如果使用直接指针访问,那么Java堆对像的布局中就必须考虑如何防止访问类型数据的相关信息,reference 中存储的直接就是对象的地址。 ? 这两种对象访问方式各有优势。
第 8 行: flags: (0x0021) ACC_PUBLIC, ACC_SUPER 类访问标记,一共有 8 种。 ? 表明当前类是 ACC_PUBLIC | ACC_SUPER。...第 6 个常量: #6 = Utf8 I 类型为 Utf8,UTF-8 编码的字符串,值为 I,表明字段的类型为 int。 关于字段类型的描述符映射表如下图所示。 ?...private int age; descriptor: I flags: (0x0002) ACC_PRIVATE 表明字段的访问权限修饰符为 private,类型为 int,名称为...字段的访问标志和类的访问标志非常类似。 ? 05、方法表集合 方法表用来描述接口或者类中声明的方法,包括类方法和成员方法,以及构造方法。...无论是从十六进制的字节码角度,还是 jclasslib 图形化查看反编译后的字节码的角度,也或者是今天这样从 javap 反编译后的角度,都能窥探出一些新的内容来!
Java对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: String类和常量池 8种基本类型的包装类和常量池 1 概述...Java堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的 内存分配并发问题(补充内容,需要掌握) 在创建对象的时候有一个很重要的问题...对象的访问方式有虚拟机实现而定,目前主流的访问方式有①使用句柄和②直接指针两种: 1....直接指针: 如果使用直接指针访问,那么Java堆对像的布局中就必须考虑如何防止访问类型数据的相关信息,reference 中存储的直接就是对象的地址。 这两种对象访问方式各有优势。
请求报文:请求行,请求头,空行,请求数据; 响应 通俗来讲,服务器用来配置发布到万维网/互联网的内容,内容发布以后,可以通过URL进行访问....由服务器来处理每一个由客户端访问的请求,并将其访问的数据响应给客户端 响应报文:状态行,响应码,响应正文; ---- PHP基础 认识PHP 服务器端的语言 嵌入到HTML当中的语言 脚本语言 PHP可以做什么...PHP标记 PHP语言,是一种可以嵌入到“html”代码中的后台处理语言(程序) 开始标记 <?php PHP代码 结束标记 ?> 示例 标记(变量名),以及对应存放了数据。...常量字符串const 系统内置常量 | 魔术常量 | 全局变化常量.
对象的创建过程 当虚拟机遇到一条含有new的指令时,会进行一系列对象创建的操作: 检查常量池中是否有即将要创建的这个对象所属的类的符号引用; 若常量池中没有这个类的符号引用,说明这个类还没有被定义...抛出ClassNotFoundException; 若常量池中有这个类的符号引用,则进行下一步工作; 进而检查这个符号引用所代表的类是否已经被JVM加载; 若该类还没有被加载,就找该类的class文件...从堆中划分一块对应大小的内存空间给新的对象; 分配堆中内存有两种方式: 指针碰撞 如果JVM的垃圾收集器采用复制算法或标记-整理算法,那么堆中空闲内存是完整的区域,并且空闲内存和已使用内存之间由一个指针标记...对象的内存模型 一个对象从逻辑角度看,它由成员变量和成员函数构成,从物理角度来看,对象是存储在堆中的一串二进制数,这串二进制数的组织结构如下。...访问对象时,首先需要通过引用类型的变量找到该对象的句柄,然后根据句柄中对象的地址再访问对象。 直接指针访问方式 引用类型的变量直接存放对象的地址,从而不需要句柄池,通过引用能够直接访问对象。
具体如下所示: 1、词法分析(Lexing):Go 编译器首先将源代码分解成一个个标记(Token),这个过程称为词法分析。...词法分析器扫描源代码,将代码分解成一个个标记,每个标记代表一个关键字、标识符、常量或运算符等。...它消除了语法切换的负担,无需重写或修改慢速代码以提高性能,并且能够在脚本级别完全访问 goroutine、通道、类型安全等。...基于 Golang 角度而言, 虽然 Go 语言本身是一种编译型语言,但是有时候需要在运行时动态执行代码。Yaegi 支持交互式探索和调试,可以帮助开发人员快速测试和验证代码。...基于 Traefik 角度而言,作为一种基于 Go 语言编写的流行的开源反向代理和负载均衡器,Traefik 需要支持动态配置和路由规则,这就需要在运行时动态解析和执行配置文件。
Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是”标记-清除”,还是”标记-整理”(也称作”标记-压缩”),值得注意的是,复制算法内存也是规整的。 ?...通过直接指针访问对象 这两种对象访问方式各有优势。...应用场景: Integer i1=40;Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40); 从而使用常量池中的对象。...解释: 语句 i4 == i5 + i6,因为 + 这个操作符不适用于 Integer 对象,首先 i5 和 i6 进行自动拆箱操作,进行数值相加,即 i4 == 40。
1 对象的创建过程 当JVM遇到一条含有new的指令时,会进行一系列对象创建的操作: 1.1 检查常量池中,是否有待创建对象所属类的符号引用 若常量池中无此类的符号引用,说明该类还没有被定义!...直接抛ClassNotFoundException 若常量池中有此类的符号引用,则走2 1.2 检查该符号引用所代表的类,是否已被JVM加载 若该类尚未被加载 就找该类的class文件,并加载进方法区...从堆中划分一块对应大小的内存空间给新的对象,分配堆中的内存有两种方式: 指针碰撞(Bump the Pointer) 若垃圾收集器采用复制算法或标记-整理算法,则堆中空闲内存是完整的区域,并且空闲内存和已使用内存之间由一个指针标记...空闲列表 (Free List) 若垃圾收集器采用标记-清除算法,则堆中空闲区域和已用区域交错,因此需要用一张“空闲列表”记录堆中哪些区域是空闲区域,从而在创建对象时,根据这张“空闲列表”找到空闲区域,...2 对象的内存布局(Java对象结构) 一个对象,从逻辑角度看,由如下构成: 成员变量 成员函数 物理角度来看,对象是存储在堆中的一串二进制数,而对象在内存中存储的布局分为: 2.1 对象头(Object
HotSpot对象的创建过程 1 对象的创建过程 当JVM遇到一条含有new的指令时,会进行一系列对象创建的操作: 1.1 检查常量池中,是否有待创建对象所属类的符号引用 若常量池中无此类的符号引用,说明该类还没有被定义...直接抛ClassNotFoundException 若常量池中有此类的符号引用,则走2 1.2 检查该符号引用所代表的类,是否已被JVM加载 若该类尚未被加载 就找该类的class文件,并加载进方法区...从堆中划分一块对应大小的内存空间给新的对象,分配堆中的内存有两种方式: 指针碰撞(Bump the Pointer) 若垃圾收集器采用复制算法或标记-整理算法,则堆中空闲内存是完整的区域,并且空闲内存和已使用内存之间由一个指针标记...空闲列表 (Free List) 若垃圾收集器采用标记-清除算法,则堆中空闲区域和已用区域交错,因此需要用一张“空闲列表”记录堆中哪些区域是空闲区域,从而在创建对象时,根据这张“空闲列表”找到空闲区域,...2 对象的内存布局(Java对象结构) 一个对象,从逻辑角度看,由如下构成: 成员变量 成员函数 物理角度来看,对象是存储在堆中的一串二进制数,而对象在内存中存储的布局分为: 2.1 对象头(Object
Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的 [99621587.jpg] 内存分配并发问题...对象的访问方式有虚拟机实现而定,目前主流的访问方式有①使用句柄和②直接指针两种: 句柄: 如果使用句柄的话,那么Java堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址...,而句柄中包含了对象实例数据与类型数据各自的具体地址信息; [使用句柄] 直接指针: 如果使用直接指针访问,那么 Java 堆对像的布局中就必须考虑如何防止访问类型数据的相关信息,reference...[使用直接指针] 这两种对象访问方式各有优势。
第 8 行: flags: (0x0021) ACC_PUBLIC, ACC_SUPER 类访问标记,一共有 8 种。 表明当前类是 ACC_PUBLIC | ACC_SUPER。...第 6 个常量: #6 = Utf8 I 类型为 Utf8,UTF-8 编码的字符串,值为 I,表明字段的类型为 int。 关于字段类型的描述符映射表如下图所示。...private int age; descriptor: I flags: (0x0002) ACC_PRIVATE 表明字段的访问权限修饰符为 private,类型为 int,名称为...字段的访问标志和类的访问标志非常类似。 05、方法表集合 方法表用来描述接口或者类中声明的方法,包括类方法和成员方法,以及构造方法。...无论是从十六进制的字节码角度,还是 jclasslib 图形化查看反编译后的字节码的角度,也或者是今天这样从 javap 反编译后的角度,都能窥探出一些新的内容来!
换个角度理解,每个函数从调用到执行结束,其实是对应一个栈帧的入栈和出栈。...方法区 方法区存放的是类信息、常量、静态变量等。 方法区是各个线程共享区域,很容易理解,我们在写Java代码时,每个线程度可以访问同一个类的静态变量对象。...List list =new ArrayList(); 2. int i =0; 3. while(true){ 4. list.add(String.valueOf(i).intern()); ...三种常见的垃圾收集算法 1.标记-清除算法 首先,通过可达性分析将可回收的对象进行标记,标记后再统一回收所有被标记的对象,标记过程其实就是可达性分析的过程。...静态语句块中只能访问定义在静态语句块之前的变量,定义在它之后的变量可以赋值,但不能访问。如下所示: 1. public class Test{ 2. static{ 3. i=0; 4.
Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的 内存分配并发问题(补充内容,需要掌握) 在创建对象的时候有一个很重要的问题...这两种对象访问方式各有优势。使用句柄来访问的最大好处是 reference 中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。...Integer 缓存源代码: 应用场景: Integer i1=40;Java 在编译的时候会直接将代码封装成Integer i1=Integer.valueOf(40);,从而使用常量池中的对象。...Integer比较更丰富的一个例子: 结果: 解释: 语句i4 == i5 + i6,因为+这个操作符不适用于Integer对象,首先i5和i6进行自动拆箱操作,进行数值相加,即i4 == 40。
Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代...而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的 ?...对象的访问方式有虚拟机实现而定,目前主流的访问方式有①使用句柄和②直接指针两种: •句柄: 如果使用句柄的话,那么Java堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址...直接指针: 如果使用直接指针访问,那么 Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而reference 中存储的直接就是对象的地址。 ? 这两种对象访问方式各有优势。...使用直接指针访问方式最大的好处就是速度快,它节省了一次指针定位的时间开销。
工具: HW VNISEdit(NSIS脚本编辑器) 1、 使用编辑器中NSIS脚本向导功能,自动生成对应的nsi脚本。...脚本结构 NSIS脚本(下称nsi脚本)主要包含安装程序属性、页面、区段、函数。 属性 用来定义安装程序的行为和界面风格,这些属性大部分是编译时刻属性,即不能在运行时刻改变。...编译器指令 nsi脚本的编译器指令主要指仅在编译时刻执行的命令。这些命令主要用来包含文件、条件化编译、定义常量、定义宏等。定义常量和宏是编译器指令的最主要应用。...如果设了错误标记,则跳转到“错误时跳转的标记”,否则跳转到“没有错误时跳转的标记”。...Goto 作用:跳转到指定标记。nsi脚本常常使用相对跳转表示条件分枝,其语法是[+-][1-9],加号表示从当前位置往前跳转,减号则表示从当前位置往后跳转。数字表示跳转的语句条数。
领取专属 10元无门槛券
手把手带您无忧上云