1.常见设计模式 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,避免重复创建(实例化) 对象,已经有现成的实例就用现成的。...工厂模式解决的是如何不通过 new建立实例对象的方法,您可以使用工厂类创建对象,而不直接使用 new。这样,如 果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动 更改。...实现单例模式的要点: 三私一公:私有化静态属性,私有化构造方法,私有化克隆方法,公有化静态方法。 <?php //(1)....需要一个保存类的唯一实例的静态成员变量: private static $instance; //私有化静态属性 //(2)....构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式 的意义: private function __construct() //私有化构造方法 { $this->_db =
引用计数器的作用: 用来记录当前这个对象有多少个人在使用它,默认情况下,创建1个对象出来,这个对象的引用计数器的默认值是1。 2)....自动生成私有属性。 2). 自动生成这个属性的getter setter方法的声明。 3). 自动生成这个属性的getter setter方法的实现。 @property参数 1)....解决方案: 其中一边不要使用#import引入对方的头文件,而是使用@class 类名;来标注这是1个类,这样就可以在不引入对方头文件的情况下,告诉编译器这是1个类。...在分类的方法实现中不可以直接访问本类的真私有属性(定义在本类的@implementation之中),但是可以调用本类的getter setter来访问属性。...分类中可以存在和本类同名方法的 当分类中有和本类中同名的方法的时候,优先调用分类的方法,哪怕没有引入分类的头文件。 如果多个分类中有相同的方法,优先调用最后编译的分类。
image.png 程序计数器 Java虚拟机栈 本地方法栈都是线程私有的 而 Java堆****方法区****运行时常量池都是所有线程共享的 进一步理解: 对于线程私有的数据区域程序计数器 Java...其实,方法区中除了包括你所说的“已加载的类的基本信息、常量、静态变量等”外,还包括编译器编译后的代码,而且这应该是方法区中主要的一部分,毕竟类中主要是方法和属性,而类中的属性,如果是实例域的话则新建对象后存储在堆...但其实是存储在堆中的,因为这是属于对象的信息,每个对象都拥有不同的实例变量,这些实例变量都存储在堆中,不管是基本数据类型还是引用数据类型 ava虚拟机栈是线程私有的,生命周期跟线程相同,每个方法调用的时候都会创建一个栈帧用于存储局部变量表...因为它不是静态的变量,不会独立于类的实例而存在,而该类实例化之后,放在堆中,当然也包含了它的属性i。 如果在方法中定义了int i = 0;则在局部变量表创建了两个对象:引用i和0。...这两个对象都是线程私有(安全)的。 比如定义了int[] is = new int[10].
文章来源:Java知音公众号 这里是一些题型解析,还是这些话:不一定全部正确,有一些是没有固定答案的,如果发现有错的或者更适合的答案欢迎留言矫正。...JVM的内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。...4、程序计数器: 线程私有;是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。...java的多态表现在哪里 主要有两种表现形式:重载和重写 重载: 是发生在同一类中,具有相同的方法名,主要是看参数的个数,类型,顺序不同实现方法的重载的,返回值的类型可以不同。...重写: 是发生在两个类中(父类和子类),具有相同的方法名,主要看方法中参数,个数,类型必须相同,返回值的类型必须相同。
每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器用来存放执行指令的偏移量和行号指示器等,线程执行或恢复都要依赖程序计数器。程序计数器在各个线程之间互不影响,此区域也不会发生内存溢出异常。...作用 程序计数器(后文简称为 PCR)有两个作用: 字节码解释器通过改变PCR依次读取指令,实现代码的流程控制,如:顺序执行、选择、循环、异常处理 多线程情况下,PCR用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪了...特点 一块较小的内存空间,【线程私有】。每条线程都有一个独立的程序计数器。 唯一一个不会出现OOM的内存区域。 2. Java虚拟机栈(JVM Stack) 2.1. 定义 。...如:String类的intern()方法就能在运行期间向常量池中添加字符串常量。 当运行时常量池中的某些常量没有被对象引用,同时也没有被变量引用,那么就需要垃圾收集器回收。...综上看来 程序计数器、Java虚拟机栈、本地方法栈是线程私有的,即每个线程都拥有各自的程序计数器、Java虚拟机栈、本地方法区。并且他们的生命周期和所属的线程一样。
int放不下时会进行截取,一旦截取HashCode的正确性就无法保证了,所以这点可以推断出HashCode存在不相同字符拥有相同HashCode。...所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。...接口中没有 this 指针,没有构造函数,不能拥有实例字段(实例变量)或实例方法。 抽象类不能在Java 8 的 lambda 表达式中使用。...JDBC中,利用反射动态加载了数据库驱动程序。 Web服务器中利用反射调用了Sevlet的服务方法。 Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。...很多框架都用到反射机制,注入属性,调用方法,如Spring。 如何使用Java的反射?
线程共享的: 堆 方法区 直接内存(非运行时数据区的一部分) 线程私有的: 程序计数器 虚拟机栈 本地方法栈 堆 堆区是java虚拟机所管理内存中最大的一块,Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建...程序计数器 程序计数器是一块较小的内存空间可以看作当前线程所执行的字节码的行号指示器。...其主要功能概括为如下: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如顺序执行、选择、循环、异常处理。...在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候知道该线程上次运行到哪里。...Java虚拟机栈 同程序计数器,Java虚拟机栈也是线程私有的,它的生命周期和线程相同,描述的是Java方法执行的内存模型,每次调用的方法都是通过栈传递的。
类信息、常量、静态变量存放在方法区中 类创建的对象存放在堆中 堆中对象的调用方法时会使用到虚拟机栈,本地方法栈,程序计数器 虚拟机栈对应的是方法的执行过程,本地方法栈是用来调用本地方法的执行过程 线程下一条将要执行的指令存放在程序计数器...单线程中是没有锁竞争。(锁和锁块内的对象不会逃逸出线程就可以把这个同步块取消)。 虚拟机栈(Java stack) Java虚拟机栈属于线程私有的,生命周期和线程相同。...每一个操作数栈都会拥有一个明确的栈深度用于存储数值,其所需的最大深度在编译期就定义好了,保存在方法的Code属性中,为maxstack的值。...栈内存溢出(StackOverflowError)主要有以下几种情况: 栈帧过多,如递归调用没有正确设置结束条件 栈帧过大,json数据转换,对象嵌套对象 (用户类有部门类属性,部门类由用户类属性) 本地内存栈...程序计数器 程序计数器是线程私有,存放每个线程接下来要执行的指令。 通过移位寄存器实现,程序计数器不会内存溢出。
一、前言 Java虚拟机,简称JVM(Java Virtual Machine),是Java语言中最为核心的一个东西,Java程序运行离不开它,因为它的存在,使得Java拥有“一次编译,多次运行...线程私有:程序计数器、虚拟机栈、本地方法栈 线程共享:堆、方法区 二、程序计数器 程序计数器是一块很小的内存空间,用于存放下一条运行的指令,它是线程私有的,可以认作为当前线程的行号指示器。...为此,每一个线程都必须用一个独立的程序计数器,来记录下一条要运行的指令。各个线程之间的计数器互不影响,独立工作。...如果当线程正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果当前线程正在执行一个Native方法,则程序计数器为空。...主要保存的信息是类的元数据,即类的类型信息、常量池、域信息、方法信息,如static修饰的变量加载类的时候就被加载到方法区中。
为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各个线程之间的计数器互不影响,独立存储,这类内存区域为【线程私有】的内存。...程序计数器具有如下的特点: 是一块较小的内存空间。 线程私有,每条线程都有自己的程序计数器。 生命周期方面,随着线程的创建而创建,随着线程的结束而销毁。...其实就是为了保证同一个对象,保证在 equals 相同的情况下 hashcode 值必定相同,如果重写了 equals 而未重写 hashcode 方法,可能就会出现两个没有关系的对象 equals 相同的...接口和抽象类的区别和相同点是什么 相同点: 接口是绝对抽象的,不可以被实例化,抽象类也不可以被实例化。 类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。...线程有一些基本的属性,如id、name、以及priority。 id:线程 id 用于标识不同的线程,编号可能被后续创建的线程使用,编号是只读属性,不能修改。
每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器用来存放执行指令的偏移量和行号指示器等,线程执行或恢复都要依赖程序计数器。程序计数器在各个线程之间互不影响,此区域也不会发生内存溢出异常。...作用 程序计数器(后文简称为 PCR)有两个作用: 字节码解释器通过改变PCR依次读取指令,实现代码的流程控制,如:顺序执行、选择、循环、异常处理 多线程情况下,PCR用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪了...特点 一块较小的内存空间,【线程私有】。每条线程都有一个独立的程序计数器。 唯一一个不会出现OOM的内存区域。 2. Java虚拟机栈(JVM Stack) 2.1....相对于类属性变量的准备阶段和初始化阶段,局部变量没有准备阶段,必须显式初始化。 如果是非静态方法,则在index[0]位置上存储的是方法所属对象的实例引用,随后存储的是参数和局部变量。...综上,程序计数器、Java虚拟机栈、本地方法栈是线程私有的,即每个线程都拥有各自的程序计数器、Java虚拟机栈、本地方法区。并且他们的生命周期和所属的线程一样。
,也渐渐明白了全栈工程师的由来,技术的路上没有尽头,只有不断的学习 JVM的内容偏向概念,不像代码执行就能够看到结果,总结起来也比较麻烦,有条件的还是看下JVM的相关书籍比较好,总结不到位的地方也可以相互探讨...而JVM帮助我们从申请内存、释放内存的繁琐工作中释放出来 二、线程共享与私有 JVM在运行程序时,分成两块数据区,共享数据区和私有数据区 1.共享数据区 试想以下我们Java代码中哪些代码是固定的?...哪些代码是动态的? 固定的可以用文本来表示,比如类名、类中的属性、常量、方法名、代码执行顺序等。其实就是我们写的代码 动态的是文本无法表示的,如变量进行一系列运算得到的值。...实例化对象时,对象中有一个对象头,其中有个类型指针会指向方法区的类元信息,下面的图看看就好,不必深究 对象头组成.png 2.私有数据区 除了方法区和堆,其他的都是私有数据区,前面已经提到了,私有数据区都是方法运行时的数据...: 2.2程序计数器与本地方法栈 程序计数器:程序计数器就是临时记录方法运行到哪一行了,程序运行实际并不存在并行,而是不同的线程不断的抢占cpu,然后执行一段时间,又重新开始竞争,只是执行时间太短,导致人根本感受不到
在 .h 中声明成员变量,又不想被子类调用,可以对这个成员变量进行限定如: { @private NSMutableArray*modelArray; } @private 私有成员,只有当前类可以访问...2)扩展类的属性,这个类别无法做到。 OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果没有则一层一层的往上找; (4)OC语言是单继承语言。...在声明property属性后,有2种实现选择 @synthesize 作用是实现属性的,如getter,setter方法....如果只声明一个属性a,不使用@synthesize实现:编译器会使用_a作为属性的成员变量(如果没有定义成员变量_a则会自动生成一个私有的成员变量_a;如果已经定义了成员变量_a则使用自定义的成员变量_...(例如上面birthday):则此时编译器会使用a作为属性的成员变量(如果定义了成员变量a,则使用自定义成员变量;如果此时没有定义则会自动生成一个私有的成员变量a,注意如果此时定义的是_a则它跟生成的a
一、前言 Java虚拟机,简称JVM(Java Virtual Machine),是Java语言中最为核心的一个东西,Java程序运行离不开它,因为它的存在,使得Java拥有“一次编译,多次运行”的特点...线程私有:程序计数器、虚拟机栈、本地方法栈 线程共享:堆、方法区 二、程序计数器 程序计数器是一块很小的内存空间,用于存放下一条运行的指令,它是线程私有的,可以认作为当前线程的行号指示器。...为此,每一个线程都必须用一个独立的程序计数器,来记录下一条要运行的指令。各个线程之间的计数器互不影响,独立工作。...如果当线程正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果当前线程正在执行一个Native方法,则程序计数器为空。...主要保存的信息是类的元数据,即类的类型信息、常量池、域信息、方法信息,如static修饰的变量加载类的时候就被加载到方法区中。
JVM是Java跨平台的关键,因为它屏蔽了不同操作系统之间的差异,可以让相同的Java程序在不同的操作系统上运行出相同的结果。...(类加载器):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区;Execution engine(执行引擎):执行引擎也叫解释器,负责解释命令,...1.4 学习什么二、JVM组成2.1 什么是程序计数器程序计数器:线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。...同时,栈内存也决定方法调用的深度,栈内存过小则会导致方法调用的深度较小,如递归调用的次数较少)2.6 方法内的局部变量是否线程安全如果方法内局部变量没有逃离方法的作用范围,它是线程安全的如果是局部变量引用了对象...举例:Java代码完成文件拷贝常规IO的数据拷贝流程2.11 总结1)什么是程序计数器线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。
定义 程序计数器是一块较小的内存空间,可看作当前线程正在执行的字节码的行号指示器 如果当前线程正在执行的是 Java方法 计数器记录的就是当前线程正在执行的字节码指令的地址 本地方法 那么程序计数器值为...作用 程序计数器有两个作用 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。...在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。 1.3. 特点 一块较小的内存空间 线程私有。...如:String类的intern()方法就能在运行期间向常量池中添加字符串常量。 当运行时常量池中的某些常量没有被对象引用,同时也没有被变量引用,那么就需要垃圾收集器回收。...综上看来 程序计数器、Java虚拟机栈、本地方法栈是线程私有的,即每个线程都拥有各自的程序计数器、Java虚拟机栈、本地方法区。并且他们的生命周期和所属的线程一样。
dotPeek可以从任何程序集中创建符号服务区,即使没有符号或源代码也是如此。它像dnSpy一样,它或反编译代码并从中创建符号。...要了解有关使用或不使用OzCode调试LINQ的更多信息,请查看我的文章:如何在C#中调试LINQ查询。 3....它具有许多对调试有用的功能,这里是其中的一些: 查看加载的模块 查看句柄 创建Dump 查看进程树 查看性能计数器 ?...以下是一些可以使用性能计数器衡量的事情的示例: CPU使用率 内存使用率 进程中引发的异常数 I/O字节的读写 对你的asp.net应用程序的请求数 在asp.net应用程序中请求响应时间 你可能会监视成千上万种不同的计数器...例如,如果你想了解进程的内存使用情况,则有以下计数器:私有字节,虚拟字节,工作集,私有工作集,Gen X 集合,GC时间百分比,大对象堆大小 等等。
: 超类 子类 ---- 常量、变量、属性、下标访问权限 常量、变量、属性不能拥有比它们的类型更高的访问级别。...比如说,你定义一个public级别的属性,但是它的类型是private级别的,这是编译器所不允许的。 同样,下标也不能拥有比索引类型或返回类型更高的访问级别。...以上程序执行输出结果为: 计数器: 100 新增加数量 100 计数器: 800 新增加数量 700 ---- 构造器和默认构造器访问权限 初始化 我们可以给自定义的初始化方法申明访问级别,但是要不高于它所属类的访问级别...但必要构造器例外,它的访问级别必须和所属类的访问级别相同。 如同函数或方法参数,初始化方法参数的访问级别也不能低于初始化方法的访问级别。...默认初始化方法 Swift为结构体、类都提供了一个默认的无参初始化方法,用于给它们的所有属性提供赋值操作,但不会给出具体值。 默认初始化方法的访问级别与所属类型的访问级别相同。
中间件在这里是指注入到应用中处理请求和响应的组件。...如何在 Razor 页面中实现数据模型绑定? 使用 bindproperty 属性。 3.17....4.6. string、String;int、Int32;Boolean、bool 的区别 String、Int32、Boolean 等都属于.Net 中定义的类,而 string、int、bool 相当于...4.7. private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。...protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 当前程序集内可以访问。 4.8. C#中的委托是什么?
:超类子类----常量、变量、属性、下标访问权限常量、变量、属性不能拥有比它们的类型更高的访问级别。...比如说,你定义一个public级别的属性,但是它的类型是private级别的,这是编译器所不允许的。同样,下标也不能拥有比索引类型或返回类型更高的访问级别。...以上程序执行输出结果为:计数器: 100新增加数量 100计数器: 800新增加数量 700----构造器和默认构造器访问权限初始化我们可以给自定义的初始化方法申明访问级别,但是要不高于它所属类的访问级别...默认初始化方法Swift为结构体、类都提供了一个默认的无参初始化方法,用于给它们的所有属性提供赋值操作,但不会给出具体值。默认初始化方法的访问级别与所属类型的访问级别相同。...:res is: 20res is: 30res is: 50----扩展访问权限你可以在条件允许的情况下对类、结构体、枚举进行扩展。
领取专属 10元无门槛券
手把手带您无忧上云