引用类型

JavaScript之基本包装类型

折月煮酒 提交于 2019-11-27 07:53:37
为了能更好的操作基本类型值,JavaScript提供了3个特殊的引用类型:Boolean,Number和String。这些引用类型和传统对象相似,有自己的属性和方法,但也具备各自的特殊行为。 一 基本包装类型简介   我们知道,基本类型的值是没有属性和方法的,不能被改变的。但是上面3个特殊的引用类型赋予了可以操作基本类型值的方法: 1 var str1 = "hello world"; 2 var str2 = str1.sunstring(5);   从上面代码我们知道,str1是一个基本类型的字符串,但我们却用它调用了一个方法,并把返回值赋值给了str2。照理说基本类型值是没有方法的,那么这个操作是怎么实现的呢?   实际上JavaScript在读取一个基本类型值时,后台会有如下操作:     1, 创建基本包装类型(这里是String类型)的一个实例。     2, 在该实例上调用相关方法。     3, 立即销毁该实例。   所以实际上str1在调用方法时可以理解为执行了如下过程: 1 var s1 = new String(str1); 2 var str2 = s1.substring(5); 3 s1 = null;   注意:以上操作都是后台完成,我们并不能察觉到它。   普通引用类型和基本包装类型的主要区别在于对象的生存周期,使用new

Java面试-企业实战面试题3

喜夏-厌秋 提交于 2019-11-27 07:40:12
1.选择题 1.1 下面代码的运行结果是(C) public class Test{ public static void main (String[] args){ List a = null; test(a); System.out.println(a.size()); } public static void test(List a){ a=new arrayList(); a.add(“abc”); } } A.0 B.1 C.Java.lang.NullPointerException D.以上都不正确 1.2 Linux 下查看进程占用的 CPU 的百分比, 使用工具(A) A. Ps B. Cat C. More D. Sep 1.3 JVM 内存里哪个区域不可能发生 OutOfMerncyError( A) A. 程序计数器 B. 堆 C. 方法区 D. 本地方法栈 1.4 下面关于阻塞队列(java.util.concurrent.BlockingQueue)的说法不正确的是© A. 阻塞队列是线程安全的 B. 阻塞队列的主要应用场景是“生产者-消费者”模型 C. 阻塞队列里的元素不能为 null D. 阻塞队列的实现必须显示地设置容量 1.5 如果现在需要创建一组任务,他们并行的执行工作,然后进行下一个步骤之前等待, 直至所有的任务都完成

js 原始数据类型、引用数据类型

心已入冬 提交于 2019-11-27 07:23:36
js的数据类型划分方式为 原始数据类型和 引用数据类型 栈: 原始数据类型(Undefined,Null,Boolean,Number、String) 堆: 引用数据类型(对象、数组、函数) 两种类型的区别: 存储位置不同 原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中; 引用数据类型直接存储在堆中,占据空间大,大小不固定,如果存储在栈中,将会影响程序运行的性能,引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后,从堆中获得实体。 传值方式不同 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。 按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。 按引用传递会使函数调用的追踪更加困难,有时也会引起一些微妙的BUG。 按值传递由于每次都需要克隆副本,对一些复杂类型,性能较低。两种传值方式都有各自的问题。 举例: var person,name; person = 'kn'; name=person; person='黑白'; console.log(person

.NET基础面试题整理

╄→尐↘猪︶ㄣ 提交于 2019-11-27 07:11:40
文章转载自: http://www.pythonheidong.com/blog/article/2967/ 今年毕业,本学期找工作期间在面试前做的一些临时的准备 以下的关于老赵分享的面试题解答参考了手头的书籍和视频教程,以及网上的资料,现整理出来希望对大家有所帮助,不对或欠佳的地方望大家指出来我好改正。 1.什么是.NET?什么是CLI?什么是CLR?IL是什么? (1).net用于代码编译和执行的集成托管环境,换句话,它管理应用程序运行的方方面面,包括首次运行的编译,为程序分配内存 存储数据和指令,对于应用程序授予或拒绝相应的权限,并启动管理应用程序的执行,剩余内存的在分配。由于所有.net应用程序 都是在.net framework上面执行,所以开发人员只需考虑与.net framework打交道,而不必关系和底层操作系统上面的实现 包括CLR和BCL (2).CLI(common language infrastructure)公共语言基础结构,一项国际性的标准,没有规定标准具体如何实现。相反,它描述了一个 CLI平台在符合标准的前提下应该具有什么行为。包含了:运行时(CLR),公共中间语言(CIL),公共类型系统(CTS), 公共语言规范(CLS),元数据(Metadata),框架(framework) (3)CLR:公共语言运行时,负责加载和运行程序 IL:中间语言,C

C#面试题

戏子无情 提交于 2019-11-27 07:10:55
文章转载自: http://www.pythonheidong.com/blog/article/2184/ 1.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。 2.什么是事务?什么是锁? 答:事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。   锁是在多用户环境中对数据的访问的限制。SqlServer自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。 3.什么是索引,有什么优点? 答:索引象书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。 4.视图是什么?游标是什么? 答:视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增该查操作;

Java四种引用类型

核能气质少年 提交于 2019-11-27 07:00:45
Java有四种引用类型,strongreference,softreference,weakreference,phantomreference。这四种引用的强度按照上面的顺序依次减弱,下面通过几个例子简单了解一下这四种引用类型。 StrongReference 这个不用多讲了,这是java默认的引用类型,如果不特意使用java.lang.ref下的类,那么程序中的所有引用都是强引用。有强引用存在的对象永远都不会被gc收集,所以在内存不够用时,JVM宁愿抛出OutOfMemoryError这样的错误,也不愿意将强引用对象进行回收。 SoftReference 软引用不会保证对象一定不会被回收,只能最大可能保证。如果内存有剩余,那么软引用对象不会被回收,如果内存不足,那么gc会回收软引用对象。 所以这种特性可以用来实现缓存技术。 软引用要用java.lang.ref.SoftReference来实现。 1 public class SoftTest{ 2 public static void main(String[] args) { 3 Object ref = new Object();//ref是Object对象的强引用 4 5 //将一个软引用指向对象,此时Object对象有两个引用 6 SoftReference<Object> sf = new SoftReference

Java四种引用类型

萝らか妹 提交于 2019-11-27 07:00:34
引用与对象 每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。 在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。 //创建一个引用,引用可以独立存在,并不一定需要与一个对象关联 String s; 通过将这个叫“引用”的标识符指向某个对象,之后便可以通过这个引用来实现操作对象了。 String str = new String("abc"); System.out.println(str.toString()); 在 JDK1.2 之前,Java中的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称为这块内存代表着一个引用。 Java 中的垃圾回收机制在判断是否回收某个对象的时候,都需要依据“引用”这个概念。 在不同垃圾回收算法中,对引用的判断方式有所不同: 引用计数法:为每个对象添加一个引用计数器,每当有一个引用指向它时,计数器就加1,当引用失效时,计数器就减1,当计数器为0时,则认为该对象可以被回收(目前在Java中已经弃用这种方式了)。 可达性分析算法:从一个被称为 GC Roots 的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明此对象不可用。 JDK1.2 之前,一个对象只有

java中四种引用类型

只谈情不闲聊 提交于 2019-11-27 07:00:01
java中四种引用类型    今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混。后来在网上查资料,感觉收获颇多,现记录如下。 对象的强、软、弱和虚引用   在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。    强引用(StrongReference)    强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。    ps:强引用其实也就是我们平时A a = new A()这个意思。 软引用(SoftReference)   软引用(soft reference)在强度上弱于强引用,通过类 SoftReference 来表示。它的作用是告诉垃圾回收器,程序中的哪些对象是不那么重要,当内存不足的时候是可以被暂时回收的

equals和==的区别

陌路散爱 提交于 2019-11-27 05:01:41
想起之前面试的一道题,equals和==有什么不同。只记得当时的回答完全糊了。。学习一下。 在说明equals和==的区别前,先简单了解一下 JVM中内存分配知识: JVM中,内存分为:栈内存,堆内存。 二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。 简单说,就是:值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。 了解equals和==的区别: 1.对于==,比较的是值是否相等   如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等:即两个变量的值是否相等   如果作用于引用类型的变量,则比较的是所指向的对象的地址:即对于引用型变量表示的是两个变量在栈中存储的地址是否相同,即栈中的内容是否相同 2.对于equals方法:   所有类从Object类中继承equals方法,Object类的的实现代码如下: boolean equals(Object o) { return this==o; }   也就是说,如果一个类没有对equals方法进行重写(即没有自己定义的equals方法)

IL and 堆于栈

白昼怎懂夜的黑 提交于 2019-11-27 04:27:42
CIL的基本构成+CIL操作码速记表+CIL操作码大全速查 引用类型:引用类型存储在堆中。类型实例化的时候,会在堆中开辟一部分空间存储类的实例。类对象的引用还是存储在栈中。 值类型:值类型总是分配在它声明的地方,做为局部变量时,存储在栈上;类对象的字段时,则跟随此类存储在堆中。 https://www.cnblogs.com/zd1994/p/4424329.html http://www.cnblogs.com/kirinboy/archive/2012/06/12/value-and-reference-in-csharp-1.html IL IL 关键字:.method表示方法的意思,.method private hidebysig static void Main(string[] args) cil managed表示的意思就是static void main(string[] args)   .entrypoint标志方法的入口   .maxstack表示分配堆栈大小   .locals init中存放的是当前方法的局部变量,这里面是string类型,它的名称叫hello。Init指令表示对变量应以对应的类型默认值进行初始化,通常情况下变量名可以省略,在代码中将以零基索引来引用   例如:stloc.0表示将Envaluation