首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试总结-C++

,但不能被模块其他函数访问 模块的 static 函数只可被这一模块的其他函数调用,这个函数的使用范围被限制声明它的模块。...malloc仅仅分配内存空间,free仅仅回收空间,不具备调用构造函数析构函数功能,用malloc分配空间存储的对象存在风险;newdelete除了分配回收功能,还会调用构造函数析构函数。...因为静态成员属于整个,而不属于某个对象,如果在初始化,会导致每个对象都包含该静态成员,这是矛盾的。...《c++primer》里面说定义初始化是保证static成员变量只被定义一次的好方法。...7.保证构造、析构、swap不会失败 类型安全 与 线程安全 、异常安全、事务安全 其他 为什么说栈比堆要快 分配释放:堆分配释放时都要调用函数(MALLOC,FREE),比如分配时会到堆空间去寻找足够大小的空间

2K11

C++面试知识总结

1.程序运行知识 1.1 内存布局分配方式 C程序的内存布局如下: 静态存储区:存储全局变量static变量,通常在程序编译期间已经分配好了。...2.18 static全局变量与普通的全局变量的区别 全局变量整个工程文件都有效。 静态全局变量只定义它的文件内有效。 全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。...2.19 static局部变量普通局部变量的区别 静态局部变量只定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失,直到程序运行结束后才释放。...多态:通过继承同一个基,产生了相关的不同的派生,与基中同名的成员函数不同的派生会有不同的实现,也就是说:一个接口、多种方法。...模块的static全局变量可以被模块所用函数访问,但不能被模块其它函数访问。 模块的static函数只可被这一模块的其它函数调用,这个函数的使用范围被限制声明它的模块

1.7K41
您找到你想要的搜索结果了吗?
是的
没有找到

《面试季》经典面试题(七)

五: 字符串常量静态变量存放在哪里 一: 字符串常量     1.7以前是放在永久代,1.7以后是放在堆中 二: 静态变量     1、1.7前字符串常量池和静态变量存储永久代     2、JDK7...而Class对象作为对象,其他普通对象一样,都是存在java堆中的。 六: String为什么定义成final 主要是考虑到安全性效率的两方面。   ...”是一个常量,会先到字符串常量池中查询是否存在这个字符串,没有则分配一个空间并存放”hello”,并将”hello”常量池的地址存放在new出来的对象中(所以:如果”hello”字符串常量池中存在则该语句创建一个对象...比较器,可以实现自己自己比较,也可以实现不同类对象的比较,依赖于compareTo实现逻辑,如果想将添加到Collection中然后调用sort排序,则添加入Collection的必须实现这个接口...四: 命名规范:     "待比较的实体+Comparator"来命名 小结    不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!

22610

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

栈,执行函数时,函数局部变量的存储单元都可以栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。...全局/静态存储区,全局变量和静态变量被分配到同一块内存中,以前的C语言中,全局变量又分为初始化的未初始化的,C++里面没有这个区分了,他们共同占用同一块内存区。...申请效率不同:栈由系统分配,速度快,不会有碎片;堆由程序员分配,速度慢,且会有碎片。 7、说一说C与C++的内存分配方式? 从静态存储区域分配。...模块的static全局变量可以被模块所用函数访问,但不能被模块其它函数访问; 模块的static函数只可被这一模块的其它函数调用,这个函数的使用范围被限制声明它的模块中的...静态局部变量全局变量一样,数据都存放在全局区域,所以主程序之前,编译器已经为其分配好了内存,但在CC++中静态局部变量的初始化节点又有点不太一样。

1.8K20

内存、引用、封装、函数

内存内存分区模型代码区:存放函数体的二进制代码,由操作系统进行管理全局区:存放全局变量、静态变量常量栈区:由编译器自动分配释放,存放函数的参数值、局部变量等堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收内存分区意义...(static)常量(字符串常量、const修饰的全局变量)int* test()//形参也会存放在栈区{ int a = 10;//局部变量,存放在栈区,栈区的数据函数执行完后被自动释放...return &a;//返回局部变量地址}堆区:由程序员分配释放,若程序员不释放,程序结束时,由操作系统回收在C++中主要利用new堆区开辟内存int* test(){ //利用new关键字,可以将数据开辟到堆区...ref = 100;}int main(){ int a = 10; //自动转换为int* const ref =&a;指针常量是指针指向不可改,也说明为什么引用不可改 int& ref...public公共权限:成员 可以访问,可以访问protected保护权限:成员 可以访问,不可访问,儿子可以访问父亲中的保护内容private私有权限:成员 可以访问,不可访问,

73800

【面试题系列】——Java基础

所以设置环境变量的根本目的是电脑的任何一个文件夹下都可以编译运行Java程序。 1.4 JavaC++区别 题外话,JavaC++有什么区别?...前者会被JVM分配常量池中,常量池中没有重复的元素,如果再次创建一个字符串变量等于i的话,就会直接指向常量池中的i。 后者是new了一个对象,堆中是允许对象重复的。...前者会被JVM分配常量池中,常量池中没有重复的元素。 String str1 =“i”; String str2 =“i”; str2不会重新创建一个常量,而是指向str1。...软件开发的范围,就是通过抽象出系统功能而实现最大化代码复用的开发模式。 4.2 封装相关 什么是封装 通过隐藏实现,暴露接口,一来实现代码解耦,二来通过访问修饰符保证数据安全。...接口抽象区别

57530

【笔记】《C++Primer》—— 第7章:

7.1 定义抽象数据类型 封装的目的是使得接口与实现之间的分离,隐藏实现细节使用户无需理解细节就能使用 C++中既可以用struct也可以用class,其区别在于默认的访问权限 的成员函数必须声明...classstruct的区别在于class默认是private,struct默认是public 有时我们需要外部的接口函数也可以访问的非公有成员,可以将那些函数令为友元,即将函数声明一下,...,一旦遇到名,定义的剩余部分就在的作用域之内了,这里的剩余部分即后面的参数列表函数体,不包含前面的返回部分 好好理解第一点就可以理解为什么当外部定义的函数名中出现了对其的指示后,后面就不再需要这个指示的出现了...,定义时不需要写 explicit关键字的构造函数只能用于直接初始化,即不能用在之后会说到的拷贝构造中 当一个所有成员是public,没有构造函数,没有初始值且没有基虚函数时,这个称为聚合...const属性的初始值或用constexpr来初始化 要注意由于静态变量不是由构造函数初始化的,一般来说我们不能在初始化它,而是声明它然后定义并初始化它 由于的它的初始化只是声明而已

58220

基础知识_Cpp

修饰成员,堆区分配内存;程序运行时就被初始化,直到程序结束;成员归属于,被所有对象共享;可以通过”名::静态成员”或”对象.静态成员”访问 修饰函数,只能访问静态成员或调用静态函数,...成员的权限控制 访问权限 子类 public ✔ ✔ ✔ protect ✔ ✔ private ✔ structclass的区别 struct默认的访问权限继承权限是public...指针引用的区别 指针也是一个变量,里面存储的内容是一个地址。而引用本质上是一个常量指针,引用只允许初始化,不能再修改。 编译指针引用的代码,汇编上是一样的:c++中,引用指针的区别是什么?...newmalloc的区别 malloc malloc是一个库函数,作用是分配指定大小的空间。 参数是要分配的字节数,返回void*类型的指针,返回值一般需要强制类型转换才能使用。...ptrdiff_t定义stddef.h(cstddef)这个文件。ptrdiff_t通常被定义为long int类型。 ---- STL 讲一下类型萃取机制 为什么

1.9K30

java面试题汇总一(会持续更新)

静态变量在内存中只有一份拷贝,JVM加载的时候,只为静态分配一次内存。 Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码整个加载的时候只会执行一次。...因为内存分配的方式不一样。 第一种,创建的”aaa”是常量,jvm都将其分配常量池中。 第二种创建的是一个对象,jvm将其值分配在堆内存中。...96.线程与进程的区别 进程是系统进行资源分配调度的一个独立单位,线程是CPU调度分派的基本单位 进程线程的关系: 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。...资源分配给进程,同一进程的所有线程共享该进程的所有资源。 线程执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 线程是指进程的一个执行单元,也是进程的可调度实体。...系统开销:创建或撤销进程的时候,由于系统都要为之分配回收资源,导致系统的明显大于创建或撤销线程时的开销。

44600

Java虚拟机

jvm中的栈对的区别:堆会抛出 OutOfMemoryError异常,但是栈会产生两异常:StackOverflowError OutOfMemoryError 简述方法区 方法区用于存储被虚拟机加载的信息...、常量静态变量等数据。...「JDK8将运行时常量池存放堆中。」 简述直接内存 直接内存也称为堆内存,就是把内存对象分配在JVM堆的内存区域。这部分内存不是虚拟机管理,而是由操作系统来管理。...简述java创建对象的过程 检查该指令的参数能否常量池中定位到一个的符号引用,并检查引用代表的是否已被加载、解析初始化,如果没有就先执行加载。 通过检查通过后虚拟机将为新生对象分配内存。...可作为 GC Roots 的对象包括虚拟机栈本地方法栈中引用的对象、静态属性引用的对象、常量引用的对象。 简述java的引用类型 强引用: 被强引用关联的对象不会被回收。

86800

【编程基础】如何赢得C++面试

12.描述内存分配方式以及它们的区别? 1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2)栈上创建。...执行函数时,函数局部变量的存储单元都可以栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。 3)从堆上分配,亦称动态内存分配。...2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。 10.简述数组与指针的区别? 数组要么静态存储区被创建(如全局数组),要么栈上被创建。...2).模块(但在函数体外),一个被声明为静态的变量可以被模块所用函数访问,但不能被模块其它函数访问。它是一个本地的全局变量。...3).模块,一个被声明为静态的函数只可被这一模块的其它函数调用。那就是,这个函数被限制声明它的模块的本地范围使用。 感谢shengliz的分享,部分内容摘自csdn博客

1.3K70

java内存分配String类型的深度解析

2、String类型执行连接操作时,效率为什么会比StringBuffer或者StringBuilder低?StringBufferStringBuilder有什么联系区别?...装载子系统(Classloader Sub-System):除了要定位导入二进制class文件,还必须负责验证被导入的正确性,为变量分配并初始化内存,以及帮助解析符号引用。...虚拟机为每个被装载的类型维护一个常量池,池中为该类型所用常量的一个有序集合,包括直接常量(string、integerfloat常量)对其他类型、字段方法的符号引用(与对象引用的区别?...例如,String s2 = “myString”,运行时s2会从内部字符串常量列表得到s1的返回值,所以s2s1都指向同一个String对象。...堆中new出来的实例常量池中的“myString”是什么关系呢? 常量池中的字符串常量与堆中的String对象有什么区别呢? 为什么直接定义的字符串同样可以调用String对象的各种方法呢?

1.1K10

java内存分配String类型的深度解析

2、String类型执行连接操作时,效率为什么会比StringBuffer或者StringBuilder低?StringBufferStringBuilder有什么联系区别?...装载子系统(Classloader Sub-System):除了要定位导入二进制class文件,还必须负责验证被导入的正确性,为变量分配并初始化内存,以及帮助解析符号引用。...虚拟机为每个被装载的类型维护一个常量池,池中为该类型所用常量的一个有序集合,包括直接常量(string、integerfloat常量)对其他类型、字段方法的符号引用(与对象引用的区别?...例如,String s2 = “myString”,运行时s2会从内部字符串常量列表得到s1的返回值,所以s2s1都指向同一个String对象。...堆中new出来的实例常量池中的“myString”是什么关系呢? 常量池中的字符串常量与堆中的String对象有什么区别呢? 为什么直接定义的字符串同样可以调用String对象的各种方法呢?

67610

java面试强基(2)

字符型常量字符串常量区别? 形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。...占内存大小 : 字符常量只占 2 个字节; 字符串常量占若干个字节。 java注释有哪几种? 单行注释。 多行注释。 文档注释。 标识符关键字的区别是什么? ​...访问控制中,如果一个方法前没有任何修饰符,则默认会有一个修饰符 default,但是这个修饰符加上了就会报错。 continue、break return 的区别是什么?...静态方法为什么不能调用非静态成员?  静态方法是属于的,加载的时候就会分配内存,可以通过名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过的实例对象去访问。...的非静态成员不存在的时候静态成员就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。 静态方法实例方法有何不同?

26730

C#学习笔记三: C#类型详解..

值类型引用类型的区别在实际数据的存储位置:值类型的变量实际数据都存储堆栈中; 而引用类型则只有变量存储堆栈中,变量存储实际数据的地址,实际数据存储与地址相 对应的托管堆中。...所以与引用相比,只类型性能上更具有优势。 3。若只类型的密封的(sealed), 你将不能把只类型作为其他任何类型的基;而引用类型则一般具有继承性,这里指的是接口。 4。...3,常量与变量 这里主要讲一下静态常量const动态常量readonly 1)const修饰的常量声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化 2)const修饰的常量在编译期间就被解析...,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候 此外const常量既可以声明中也可以函数体内,但是static readonly常量只能声明中。...3、而带有静态构造函数的静态字段,只有引用到的时候才进行初始化。

1.3K140

JVM运行时数据区各个区域的作用

但有以下如图示区别:实例方法中第一个位置存放的是它所属对象的引用,而静态方法则没有对象的引用。另外静态方法里所操作的静态变量存放在方法区。...方法区 它是虚拟机加载文件时,用于存放已加载的信息,常量静态变量,及jit编译后的代码(方法)等数据的内存区域,是线程共享的。...5.静态变量: 就是变量,被的所有实例对象共享,我们只需知道,方法区有个静态区,静态区专门存放静态变量和静态块。 6.到ClassLoader的引用:到该类的装载器的引用。...JDK1.4中新加入了NIO(New Input/Output),引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native方法库直接分配内存,然后通过一个存储...对象的实例变量对象一起堆里,所以各个线程都可以共享访问对象的实例变量。 静态变量方法区,所有对象共享。字符串常量常量在运行时常量池。

1.2K10

CC++常见面试知识点总结附面试真题—-20220326更新

1).堆存放动态分配的对象——即那些程序运行时动态分配的对象,比如 new 出来的对象,其生存期由程序控制; 2).栈用来保存定义函数的非static对象,如局部变量,仅在其定义的程序块运行时才存在...; 3).静态内存用来保存static对象,static数据成员以及定义在任何函数外部的变量,static对象使用之前分配,程序结束时销毁; 4).栈和静态内存的对象由编译器自动创建和销毁。...3. const 有什么用途 主要有三点: 1).定义只读变量,或者常量(只读变量常量区别参考下面一条); 2).修饰函数的参数函数的返回值; 3).修饰函数的定义体,这里的函数为的成员函数,被...静态成员变量需要在声明(加static),初始化(不能加static),如下例所示; 2)....静态成员变量单独分配存储空间,位于全局数据区,因此静态成员变量的生命周期不依赖于的某个对象,而是所有的对象共享静态成员变量; 3). 可以通过对象名直接访问公有静态成员变量; 4).

1.4K10

java内存区域划分详解

局部变量表存放了编译期可知的各种数据类型,对象引用返回地址类型,并且它所需要的内存空间在编译期完成分配方法运行期间不会改变局部变量表的大小。...在这块区域,可能出现的异常,当在堆中没有内存可以完成实例对象的分配时,堆也无法再扩展时,会出现OutOfMemoryError错误信息。...下面说下方法区吧,方法区也是线程共享的,方法区用于存储虚拟机加载的信息,常量静态变量,及时编译器JIT编译后的代码等数据,这块区域的内存回收目标主要是针对常量池的回收对类型的卸载。...Class文件中除了有的版本,字段,方法,接口等描述信息,还有一项就是常量池,用于存放编译期生成的各种字面量符号引用,这部分内容将在加载后进入方法区的运行时常量池中存放。...一般来说,除了保存Class文件中的符号引用,还会把翻译出来的直接引用也存储在运行时常量池中。

71141

硬核 | C++ 基础大全

(补充:静态常量数据成员,其只能在定义初始化,仅是声明而已。)...作用五:成员/函数声明 static 函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; 模块的 static...全局变量可以被模块所用函数访问,但不能被模块其它函数访问; 模块的 static 函数只可被这一模块的其它函数调用,这个函数的使用范围被限制声明它的模块中的 static 成员变量属于整个所拥有...结构体内存对齐方式为什么要进行内存对齐?...如何实现只能静态分配只能动态分配 前者是把 new、delete 运算符重载为 private 属性。

1.1K10

C++基础 杂记(一)

记录以下几点: const修饰符 static修饰符 C++指针引用的区别栈的区别 const修饰符 const int m=7;:整型变量m的值为固定值7,不可改变 const int* p1...**,包括全局静态变量和局部静态变量,初始化自动为 0 修饰成员 静态成员是属于整个的而不是某个对象,静态成员变量只存储一份供所有对象共用。...静态成员**可以**通过双冒号来使用::,非静态成员引用**必须**与特定对象相对对象.成员名 静态成员函数中**不能**使用的非静态成员(因为**静态成员函数属于整个实例化对象之前就已经分配空间了...**,而非静态成员实例化对象后才有内存空间,因而静态成员不认识后来的非静态成员) 的非静态成员函数可以调用用静态成员函数,但反之不能 静态成员函数没有 this 指针(因其属于整个静态成员变量必须先初始化再使用...,没有静态分配的堆 栈有静态分配(由编译器完成,比如局部变量)动态分配(由alloca函数进行分配) 堆由C/C++函数库提供,机制较复杂 栈由计算机底层提供支持 进程线程的区别 进程是资源分配的最小单位

36910
领券