对象存储

位域-isa指针

白昼怎懂夜的黑 提交于 2019-11-30 21:43:42
一、isa指针结构 union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bits; #if SUPPORT_PACKED_ISA // extra_rc must be the MSB-most field (so it matches carry/overflow flags) // nonpointer must be the LSB (fixme or get rid of it) // shiftcls must occupy the same bits that a real class pointer would // bits + RC_ONE is equivalent to extra_rc + 1 // RC_HALF is the high bit of extra_rc (i.e. half of its range) // future expansion: // uintptr_t fast_rr : 1; // no r/r overrides // uintptr_t lock : 2; // lock for atomic property, @synch // uintptr_t extraBytes : 1; //

整理

牧云@^-^@ 提交于 2019-11-30 19:52:48
C++11 知识整理 对class的理解 答:首先,class 也是一种数据类型,只不过是可以由开发者自由定义的一种数据类型;可以用来封装成员变量和成员函数;支持抽象,继承,多态性;在定义数据类型的时候,private,public,也从一定程度上保证了数据的安全性 抽象性:含有纯虚函数的类被称为抽象类,用途是为派生类提供基类 多态性:对于不同对象接受相同信息时产生不同的动作。分为静态多态和动态多态,体现在两个方面,一是在编译的时候,函数重载是一个方面;二是在运行的时候,虚函数是一个方面 继承性:子类具有父类的各种属性和方法,而不必再次编写相同的代码 什么是类 答:一种将抽象转换成用于定义的类型的工具,将数据表示方法和操纵这些数据的方法组合一起整合成一个包 如何将私有成员变量取出 答:方法1:通过public中的函数,传出参数将私有成员变量取出。方法2:友元函数 *this 指针 答:经典回答,进入一个房间,能看见房间里的东西,但是整个房间看不到了,然后this指针就是时刻盯着这整个房间。this指针是类的一个自动生成,自动隐藏的私有成员。存在于类的非静态成员函数中,指向内调用函数所在的对象。全局仅有一个this指针,当一个对象被创建的时候,this指针就存放指向对象数据的首地址 类和对象的区别和联系 答:区别:(1).定义不同 ,类是现实世界或思维世界的实体在计算机的反映

微服务架构四大金刚利器

旧城冷巷雨未停 提交于 2019-11-30 18:48:36
概述 互联网应用发展到今天,从单体应用架构到SOA以及今天的微服务,随着微服务化的不断升级进化,服务和服务之间的稳定性变得越来越重要,分布式系统之所以复杂,主要原因是分布式系统需要考虑到网络的延时和不可靠,微服务很重要的一个特质就是需要保证服务幂等,保证幂等性很重要的前提需要分布式锁控制并发,同时缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 随着业务不断的发展,按业务域的划分子系统越来越多,每个业务系统都需要缓存、限流、分布式锁、幂等工具组件,distributed-tools组件(暂未开源)正式包含了上述分布式系统所需要的基础功能组件。 distributed-tools组件基于tair、redis分别提供了2个springboot starter,使用起来非常简单。 以使用缓存使用redis为例,application.properties添加如下配置 redis.extend.hostName=127.0.0.1 redis.extend.port=6379 redis.extend.password=pwdcode redis.extend.timeout=10000 redis.idempotent.enabled=true 接下来的篇幅,重点会介绍一下缓存、限流、分布式锁、幂等的使用方式。 缓存 缓存的使用可以说无处不在,从应用请求的访问路径来看,用户user

微服务架构四大金刚利器

江枫思渺然 提交于 2019-11-30 18:39:01
概述 互联网应用发展到今天,从单体应用架构到SOA以及今天的微服务,随着微服务化的不断升级进化,服务和服务之间的稳定性变得越来越重要,分布式系统之所以复杂,主要原因是分布式系统需要考虑到网络的延时和不可靠,微服务很重要的一个特质就是需要保证服务幂等,保证幂等性很重要的前提需要分布式锁控制并发,同时缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 随着业务不断的发展,按业务域的划分子系统越来越多,每个业务系统都需要缓存、限流、分布式锁、幂等工具组件,distributed-tools组件(暂未开源)正式包含了上述分布式系统所需要的基础功能组件。 distributed-tools组件基于tair、redis分别提供了2个springboot starter,使用起来非常简单。 以使用缓存使用redis为例,application.properties添加如下配置 redis.extend.hostName=127.0.0.1 redis.extend.port=6379 redis.extend.password=pwdcode redis.extend.timeout=10000 redis.idempotent.enabled=true 接下来的篇幅,重点会介绍一下缓存、限流、分布式锁、幂等的使用方式。 缓存 缓存的使用可以说无处不在,从应用请求的访问路径来看,用户user

静态变量和成员变量的区别

情到浓时终转凉″ 提交于 2019-11-30 18:02:56
静态变量和成员变量的不同: ① 所属范围不同。静态变量是属于类范围的;成员变量是属于对象范围的。 ② 存活时间不同。类的一生有着静态变量的伴随;而成员变量只能陪类走一程,对象产生的时候它就产生,而且它会随着对象的消亡而消亡。 ③ 存储位置不同。静态变量时存储在方法区里的静态区;成员变量存储在堆栈内存区。 ④ 调用方式不同。静态变量可以通过类名调用,也可以通过对象来调用;成员变量只能通过对象名调用。 来源: https://my.oschina.net/u/4216033/blog/3113394

C++虚函数表和对象存储

天大地大妈咪最大 提交于 2019-11-30 13:33:30
C++虚函数表和对象存储 C++中的虚函数实现了多态的机制,也就是 用父类型指针指向其子类的实例 ,然后通过父类的指针调用实际子类的成员函数,这种技术可以让父类的指针有“多种形态”,这也是一种泛型技术,也就是 使用不变的代码来实现可变的算法 本文不再阐述虚函数的使用方法,而是从虚函数的实现机制上做一个清晰的剖析 参考博文: https://blog.csdn.net/u012879957/article/details/81027287 想了解实现机制,就必须先了解对象的存储方式 对象数据和函数的存储方式 我们知道,用类去定义对象,系统会为每一个对象分配存储空间 在你的印象中类的存储可能是下图这样的: 上图表示要分别为对象的数据和函数的代码分配存储空间,这样肯定是不行的,内存利用率太低了,所以C++编译系统采用的是以下的方法: 每个对象占用存储空间的只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分),函数代码属于公用部分 我们常说的“A对象的成员函数”,是从逻辑的角度而言的,而成员函数的物理存储方式其实不是如此 C++内存分区 C++的内存分区大概分成五个部分: 栈(stack):是由编译器在需要时自动分配,不需要时自动清除的变量存储区,通常存放局部变量、函数参数等。 堆(heap):是由 new 分配的内存块,由程序员释放(编译器不管),一般一个 new 与一个

Java基础总结

拥有回忆 提交于 2019-11-30 13:20:57
以前总结的一些知识: 1.Spring的优势: 通过Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,方便解耦,简化了开发 通过Spring的AOP特性,对重复模块进行集中,实现事务,日志,权限的控制 提供了对其他优秀开源框架的集成支持 2.Spring MVC的优势: SpringMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,使我们开发更简洁 与Spring无缝衔接 灵活的数据验证,格式化,数据绑定机制 3.Mybatis的优势: 数据库的操作(sql)采用xml文件配置,解除了sql和代码的耦合 提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建 提供了xml标签,支持动态的sql 1.一个.java源文件中是否可以包括多个类?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 2.java有没有goto? java中的保留字,现在没有在java中使用。 3.说说&&和&的区别? &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个 运算结果才为true,否则,只要有一方为false,则结果为false。 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。

类型

浪尽此生 提交于 2019-11-30 12:51:46
基本类型:Undefined、Null、Boolean、String、Number、Symbol 引用类型:Object # 1. 基本类型和引用类型的区别 上面这张图片很好的解释了值传递和引用传递的区别。 # 1.1 不可变性 基本类型,在 ECMAScript 标准中,它们被定义为 primitive values ,即原始值,代表值本身是不可被改变的。 基本类型的值被直接存储在栈中,在变量定义时,栈就为其分配好了内存空间。由于栈中的内存空间的大小是固定的,那么注定了存储在栈中的变量就是不可变的。 以字符串为例,我们在调用操作字符串的方法时,没有任何方法是可以直接改变字符串的。对其修改也只是修改变量指向的值,而值的本身是不课改变的。 let str = 'str' str += '1' console.log(str); // str1 在上面的代码 str 是变量名, 'str' 则是一个 String 类型的值,通过 += 这个操作符会将一个新的 String 类型的值 'str1' 赋值给 str 这个变量。值本身是没有改变的。 引用类型的值实际存储在堆内存中,它在栈中只存储了一个固定长度的地址,这个地址指向堆内存中的值。因此引用类型的值是可以修改的。 # 1.2 复制 基本类型在复制的时候,会在栈中开辟一个新的内存空间来存储复制出来的值

健康,home? [java的内存浅析]

淺唱寂寞╮ 提交于 2019-11-30 11:51:19
健康,home? [java的内存浅析] 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 乐观上上,how can other kno u,u r yourself !I must be strong and carry on. -泥沙砖瓦浆木匠 一.闲谈下 201407月记着那时候身体垮了下来,呵呵。想说,对自己的说,也是对大家的负责吧。那时候胸疼胸闷,然后几乎累垮了,我还坚持了一星期,那一星期真的迷迷糊糊。完全不能看代码,看代码就晕。一直想睡想睡。胸口会间接的疼一下。直到29号那晚饭后,我胸很闷。去旁边附一三甲医院检查,做了可怕的心电图。医院也是为人好,但是后面发生完全不可理喻。那时候的心情就像下面的图,当听到一个急诊不负责阿姨全科医生说“心电图有个波略高,赶紧24小时监护,立即联系家长”(她是不知道,我爸爸那时候也是 冠心病 发生期,他是不知道我根本没大碍被她这么折腾。我的心情会怎么样?医生为什么这么不会做人?虽然我在医科大学读书。) 现在慢慢的康复,其实没什么大病,熬夜熬多了,身子垮了。目前还是带着血药。stay with me 很多很多。我记着,我会感激。最大的是Home and 亲人。 告诉大家: 健康第一,革命的本钱。说说容易,做做难。(尽量规律点,不管你熬不熬夜) 还有保持乐观

java面试(1)

◇◆丶佛笑我妖孽 提交于 2019-11-30 10:13:56
Java集合详解【面试+工作】 在说集合前我们不得不说一下 数组 数组的作用: 存放一组相同的数据类型(基本或对象)的数据,从而实现对数据的管理 优势: 可以快速的通过下标对数组元素进行访问,效率高 劣势: 容量实现定义好了,不能随着需求变化而扩容 因此出现了更好的集合框架 一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。 3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数 4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式 5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率 二、Java集合 Collection和Map,是集合框架的根接口。 Collection的子接口: Set:接口 ---实现类: HashSet、LinkedHashSet Set的子接口SortedSet接口---实现类:TreeSet List:接口---实现类: LinkedList,Vector,ArrayList List集合