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

C++笔试面试题整理

在类对象的内存布局中,如果有虚函数,首先是该类的vtbl指针,然后才是对象数据,对象数据都是顺序存放,当然会涉及到字节对齐,这样会带来存取效率的提升。...当要求使用volatile声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。...,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。...而虚函数实现的是在基类中通过使用关键字virtual来申明一个函数为虚函数,含义就是该函数的功能可能在将来的派生类中定义或者在基类的基础之上进行扩展,系统只能在运行阶段才能动态决定该调用哪一个函数,所以实现的是动态的多态性...简述全局变量的优缺点? 全局变量也称为外部变量,它是在函数外部定义的变量,它属于一个源程序文件,它保存上一次被修改后的值,便于数据共享,但不方便管理,易引起意想不到的错误。 什么是指针?

2.6K40

《CLR via C#》笔记:第5部分 线程处理(2)

目录 第二十八章 I/O限制的异步操作 Windows如何执行I/O操作 C#的异步函数 编译器如何将异步函数转换成状态机 异步函数扩展性 异步函数和事件处理程序 FCL的异步函数 异步函数和异常处理...异步函数的其他功能 应用程序及其线程处理模型 以异步方式实现服务器 取消I/O操作 有的I/O操作必须同步进行 I/O请求优先级 第二十八章 I/O限制的异步操作 Windows如何执行I/O操作 程序通过构造一个...IRP结构初始化后包含的内容有:文件句柄,文件中的偏移量(从这个位置开始读取字节),一个 Byte[]|数组的地址(数组用读取的字节来填充),要传输的字节数以及其他常规性内容。...FileStream 的Read方法现在返回一个Int32,指明从文件中读取的实际字节数,使你知道在传给Read的 Byte[]中,实际能检索到多少个字节。...ReadFile分配 IRP,和前面的同步操作一样初始化它(②),然后把它传给Windows内核(③)。Windows把 IRP添加到硬盘驱动程序的IRP队列中(④)。

1.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    static–静态变量与普通变量的区别

    而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。...static全局变量与普通的全局变量 static全局变量只初使化一次,作用域被限制在该变量的源文件内有效,防止在其他文件单元中被引用 static局部变量和普通局部变量 static局部变量只被初始化一次...3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使 C#中变量分为:全局变量、静态全局变量、局部变量和静态局部变量。...前者是只能用于一个函数,而后者却可以应用于所有的函数。 严格地说在C#中没有全局函数和全局变量的概念。但是,可以通过类的静态成员(静态属性,静态方法,静态字段)来“模拟”全局变量和全局函数。...可以在一个类中实现静态属性(字段)和静态方法,以此达到C或C++中全局变量和全局函数的效果。

    75810

    【深入浅出C#】章节 2:数据类型和变量:变量和常量的声明和初始化

    赋予变量初始值可以保证在使用变量之前,它已经有了一个合适的初始状态。初始化变量的语法是使用等号(=)将初始值赋给变量。变量的声明和初始化可以在同一行进行,也可以分开进行。...0.0M 布尔类型(bool) false 字符类型(char) 空字符 引用类型(如类、接口、数组) null Tip:局部变量在方法或代码块中声明时,必须显式初始化才能使用,否则编译器会报错。...它们可以用于类的方法、构造函数或类的任何其他成员中。常量是静态的,意味着可以在类的实例之间共享。 常量表达式: 常量的值必须在编译时确定,并且只能使用常量表达式来初始化。...适当限制变量作用域:将变量的作用域限制在需要使用的最小范围内,避免不必要的全局变量。 及时释放不再使用的资源:在不再需要变量时,及时释放占用的资源,如关闭文件句柄、释放数据库连接等。...其他注意事项: 避免滥用全局变量:全局变量容易引起命名冲突和代码耦合,尽量避免过多使用全局变量,尤其是可变的全局变量。

    61520

    使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)

    B: 是的, 但是它必须是public的类额 A: 如果不是public的呢? B: 如果不是public的, 那么只有同一个包下的类才能对它实例化, 但是仍然可以实例化多次....B: 因为对类进行实例化, 就是想要用它的实例, 而这样做的话, 别的类也无法对它进行实例化啊....关键字以后, 每个线程必须等到轮到它的时候才能进入方法....例如: 使用静态的成员引用, 这样类在加载的时候就把实例创建出来了(保证在任何线程访问之前就会创建出来). 3. 使用"双重检查锁"来减少对sync的使用....其他问题 Q: 如果我创建一个类, 里面都是静态方法和静态变量, 那么它的效果和单体模式不是一样的吗? A: 是的, 如果你类没有其他依赖并且初始化并不复杂的话. Q: 可以继承单体模式吗?

    1K40

    C#创建安全的栈(Stack)存储结构

    在C#中,栈通常保存着我们代码执行的步骤。C#中的引用类型存储在栈中,在程序运行的时候,每个线程(Thread)都会维护一个自己的专属线程堆栈。...- 或 -当前线程最初在读取模式中,输入该锁,因此尝试进入写入模式会创建导致死锁的可能性。- 或 -递归数将超出该计数器的容量。限制为应用程序应永远不会遇到它太大。...- 或 -当前线程最初在读取模式中,输入该锁,因此尝试进入写入模式会创建导致死锁的可能性。- 或 -递归数将超出该计数器的容量。限制为应用程序应永远不会遇到它太大。...- 或 -当前线程最初在读取模式中,输入该锁,因此尝试进入可升级模式会创建导致死锁的可能性。- 或 -递归数将超出该计数器的容量。限制为应用程序应永远不会遇到它太大。...- 或 -当前线程最初在读取模式中,输入该锁,因此尝试进入可升级模式会创建导致死锁的可能性。- 或 -递归数将超出该计数器的容量。限制为应用程序应永远不会遇到它太大。

    1.2K60

    .NET面试基础知识

    深入了解.net的基本概念 访问级别的访问修饰符 ? Private访问限制在包含它的类中。在下面的图中,privateA只能在ClassA中访问,其他类无法访问它。...例如,classA的ProtectedB可以在包含的classA内部访问,也可以从assembly - a中的派生类ClassB访问。它也可以从另一个assembly - b中的派生类类类类中访问。...Protected internal可访问同一程序集中声明的所有类或从另一个程序集中的派生类中声明的所有类。...Const Const是在声明时初始化的。否则,它将抛出编译错误。它被称为编译时常数。它不能在运行时更改。默认情况下,它是静态的。...ReadOnly 它可以在声明时初始化,也可以在同一个类的构造函数中多次设置。它被称为运行时常数。 Default value expressions ?

    84520

    读写屏障如何去理解与使用

    具体来说,读写屏障有两种类型: 读屏障(Read Barrier):当一个线程要读取一个共享资源时,读屏障可以确保该线程读取到的是最新的、已经被其他线程写入的数据。...写屏障(Write Barrier):当一个线程要写入一个共享资源时,写屏障可以确保在写入完成之前,所有其他线程都无法读取或写入该共享资源。...互斥锁 互斥锁用来保护共享资源,在一个线程进入临界区时,其它线程必须等待,直到进入临界区的线程离开后才能进入。在C#中,可以使用System.Threading.Mutex类来创建互斥锁。...信号量 信号量用来限制同时访问共享资源的线程数目,也可以用来实现线程间的同步。在C#中,可以使用System.Threading.Semaphore类来创建信号量。...当一个线程要访问共享资源时,它必须先调用WaitOne()方法来获取信号量。如果当前已经有两个线程在访问共享资源,则新的线程必须等待,直到有一个线程释放信号

    9510

    C++ 中的static关键字使用场景

    详细的介绍: 一、面向过程设计中的static 1. 静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。...,但是 j 的作用域为全局作用域,可以通过extern在其他文件中使用,而 i 的作用域为文件作用域,只能在文件A中使用,例如在文件B中: static 修饰全局变量,限制了该变量的作用域为当前文件,就是说他能在当前文件中作为全局变量被访问...b = i; // error 也就是说,在声明全局的static变量时,static没有改变它的生存周期,也即存储位置(因为全局变量本来就存储在全局数据域),而是将变量的作用域限制在当前文件中。...总:静态全局变量 i 有以下特点: 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 静态全局变量在声明它的整个文件都是可见的,...但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。

    3.4K40

    漫谈C变量——夏虫不可语冰

    有一类特殊的静态变量,它们的头顶上没有任何花括号了,而且也没有static关键字的限制,那么我们可以理解为,这类无人约束的变量,其作用范围就是整个工程啦——也就是我们所说的全局变量。...还有一类头顶上没有花括号,但是由static修饰的静态变量,我们称为“模块内全局变量”——它仅在当前.c文件内是可以“全局”访问的。   ...> 对于 wExampleB、phwPointer 这样被明确初始化为0的变量,编译器视作 ZI RW Data(Zero Initialized Read/Write Data,初始化为0的可读可写数据...在MDK中(也就是ARM Compiler中),这个脚本叫做scatter-loading file;在IAR和GCC也有对应的LinkerScript,只不过语法规则不同,感兴趣的人可以查阅对应的手册...刻舟求剑 与浮萍一般生命短暂、作用范围有限的局部变量相对,堆(Head)变量是一个奇葩的存在: 首先,堆变量的作用范围不受花括号限制,但具体在哪个范围内有效,完全由程序逻辑决定(掌握在程序员的手里);

    2.2K20

    Windows中使用MySql.Data库将C# 接到 MySQL

    我将在整篇文章中创建有关 DML(插入、更新、选择、删除)的简单示例,以展示如何使用 C# 查询数据库,最后我将向您展示如何备份数据库并将其保存在 .sql 中我们的应用程序中的文件,以及如何将其恢复。...为此,我们右键单击项目名称,然后选择“添加引用”: 然后我们从列表中选择 MySql.Data: 为了在未安装连接器的其他计算机上使用该应用程序,我们必须从引用创建一个 DLL。...创建类 创建一个新类来连接数据库并将实际代码与访问数据库的代码分开始终是一个更好的主意。这将有助于保持我们的代码整洁、更易于阅读且更高效。...创建一个 MySqlDataReader 对象来读取选定的记录/数据。 执行命令。 读取记录并显示它们或将它们存储在列表中。 关闭数据读取器。 关闭连接。...; } } 为了恢复数据库,我们读取 .sql 文件并将其存储在字符串中,然后将 RedirectStandardInput 属性设置为 true,并将字符串的输入写入进程。

    35300

    对象的共享

    所以,当读取该类变量的操作在不同的线程时,很可能会读取到某个值的高32位和另一个值的低32位,造成读取到是一个随机值。除非用关键字volatile来声明它们,或者用锁保护起来。...在可能的情况下,使用其他更强的线程封闭技术. ##3.2 栈封闭 在栈封闭中,只能通过局部变量才能访问对象....在JMM中,final域能确保初始化过程的安全性,从而可以无限制地访问不可变对象,并在共享这些对象时无须同步. 5 安全发布 任何线程都可在无额外同步情况下安全访问不可变对象,即使在发布时没有使用同步....通常发布一个静态构造的对象,最简单安全的方式就是使用静态的初始化器: public static Holder holder = new Holder(42); 由JVM在类的初始化阶段执行,且由于JVM...内部存在着同步机制,因此这样初始化的任何对象都能被安全发布.

    45250

    深入.NET平台和C#编程

    牛人:Anders Hejlsberg b.C#锐利体验 (1)微软公司已经向ECMA申请将C#作为一种标准。 (2)完全的面向对象设计,在C#类型系统中,每种类型都可以看到一个对象。...构造函数没有返回值 一般情况下,构造函数总是public类型的 在构造函数中不要对类的示例做初始化以外的事情,不要尝试显示的调用构造函数,也就是直接去调用。...(2)含有抽象方法的类必然是抽象类。同样,我们用abstruct关键字来定义一个抽象类。 b.常见错误 (1)对于一个抽象类有一个限制:它不能被实例化。 (2)抽象类不能是密封或静态的。...注意: 在ProfileManager类中引入这样一个命名空间 using System.Runtime.Serialization.Formatters.Binary; 语法: [Serializable...在三层中体现出来 (3)在远程通信中应用非常广泛,可以将一个应用程序中的对象序列化,然后通过网络通信,远程传递给其他地点的另一个应用程序 例如:WebService开发 9-2:程序集与反射 a.什么是程序集

    1.9K10

    01.单例模式设计思想

    如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。...即使是在反序列化的过程,枚举单例也不会重新生成新的实例。而其他几种方式,必须加入如下方法:才能保证反序列化时不会生成新的对象。...为了实现这样的目的,我们可以在系统中创建两个数据库连接池,慢 SQL 独享一个数据库连接池,其他 SQL 独享另外一个数据库连接池,这样就能避免慢 SQL 影响到其他 SQL 的执行。...如果这个全局变量是一个可变全局变量,也就是说,它的成员变量是可以被修改的,那我们在编写单元测试的时候,还需要注意不同测试用例之间,修改了单例类中的同一个成员变量的值,从而导致测试结果互相影响的问题。...客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。在一个系统中要求一个类只有一个实例时才应当使用单例模式。

    14310

    C# 基础知识系列- 14 IO篇之入门IO

    前言 在之前的章节中,大致介绍了C#中的一些基本概念。这篇我们将介绍一下C#的I/O操作,这将也是一个小连续剧。这是第一集,我们先来简单了解一下C#中的I/O框架。 1....Stream 基类 C#中,所有流都是继承自Stream类,Stream类定义了流应该具有的行为和属性,使得开发人员可以忽略底层的操作系统和基础设备的具体细节。...操作 C# 中I/O的操作都属于System.IO这个命名空间,在这个命名空间中C# 定义了文件相关的类、各种流、装饰器流、适配器以及其他一些相关的结构体。...所以这里就有会这样的一个限制:offset + count 读取数目不能大于缓存数组的长度。...所以,对offset、count的限制依旧,和不能大于数组的长度。写入成功,流的位置会移动,否则将保持现有位置。

    1.1K10

    C++静态成员变量和静态成员函数小结

    静态数据成员实际上是类域中的全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明中。 原因是类声明中只是描述如果分配内存并不会真正的分配内存,而定义是一定要分配内存的。...静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“对象(实例)级别”的。类级别的成员,先于该类任何对象的存在而存在,它被该类所有的对象共享。 其定义方式与全局变量相同。...}; xxx.cpp文件 const int base::_i=10;//定义(初始化)时不受private和protected访问限制. 注:不要试图在头文件中定义(初始化)静态数据成员。...在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。...但是对于这条规则比较例外的是静态数据成员为整型或者枚举型const的时候可以在类声明中进行初始化。  2.静态数据成员被类的所有对象所共享,包括该类派生类的对象。

    1.9K50

    全网最完整的Redis入门指导

    了解Redis文件信息后,我们运行redis-server.exe,然后我们编写一个C#的控制台项目访问Redis。 Redis访问 C#想访问Redis需要使用开源类库,那么应该使用哪个类库呢?...打开Redis的中文官网http://www.redis.cn/,在客户端菜单下可以发现C#可用的Redis客户端很多,如下图: ?...可以看到,我们成功的完成了Redis的插入和读取。 但我们不满足于此,我们需要一个图形管理界面更直观的查看Redis数据库。 下载RedisStudio。...这件事不需要我们自行开发,redis-server.exe中已经提供了这些功能,它的Main函数会处理一些他接受的参数。 现在我们使用命令行启动redis-server.exe。...配置密码 我们都知道数据库是需要密码的,这样才能保证安全性,不然任何一个知道你服务器IP的人只要按个端口试一遍就可以连接你的数据库了。 Redis的数据库密码需要在配置文件中设置,默认是没有密码的。

    90330

    .NET开发工程师的常见面试题

    ref和out都可以实现将一个指定的参数按照引用进行传递: ref参数在传入方法之前必须进行初始化;而out参数在传入方法之前可以不用初始化。...4) 结构中不能有实例字段初始值设定,但类没有任何限制。 5) 类的构造函数里面可以不用对所有字段进行初始化;结构的构造函数里面必须对所有字段进行初始化。...6) 类可以有析构函数,但结构不行。 C#中类成员的访问修饰符有哪些? public:公有的,任何位置都可以访问。 private:私有的,只有类的自身才能访问。...protected:受保护的,只有类的自身及其派生类才能访问。 internal:内部的,同一个程序集里面的任何位置都能访问。...游标类似于程序代码中对集合的遍历循环,能够遍历结果中的所有行,在遍历过程中,每次只读取一行的数据。 当全局变量@@fetch_status的值不等于0时,表示游标已经到了最后。

    5.5K30

    Python从入门到精通,这篇文章为你列出了25个关键技术点(附代码)

    在 if-else 模块中: ? 输出为 ? 全部变量 全局变量可以通过任意一个全局函数访问,它们存在于 __main__ 框架中。 此外,在函数之外你也可以声明一个全局变量。...面向对象的设计允许程序员根据自身所需的属性和功能自定义创建对象。 属性也可以引用另一个对象。 Python 中的类可以引用其他类。 Python 支持封装 -- 实例函数和变量。...文件 Files 使用with/as语句来打开并读取文件,这与 C# 中读取文件的操作一致。 此外,with 语句还可以处理关闭连接和其他清理操作。 打开一个文件,如下所示。 ?...需要注意的是,readline() 可用于读取文件中的每一行。 打开两个文件,如下所示。 ? 文件写入,如下所示。 ? Python 中对文件的操作通常涉及 os 和 shutil 模块。...如果想定义用于自定义的限制,可以通过 assert 关键字实现,如下所示: ? 值得注意的是,python 中的异常同样具有继承性。 此外,你也可以创建自己的异常类,如下所示: ?

    2.9K20

    最大限度地降低多线程 C# 代码的复杂性

    当 C# 首次发布时,lock 语句实现了一种基本方法,可确保只有一个线程能访问指定资源(如数据文件),且效果很好。C# 中的 lock 关键字很容易理解,它独自颠覆了我们对这个问题的思考方式。...与 lock 语句不同,此类可便于指定代码是将内容写入对象,还是只从对象读取内容。这样一来,多个读取器可以同时进入,但在其他所有读写线程均已完成自己的工作前,拒绝任何写入代码访问。...这样一来,就不需要读取接口或写入接口了,因为可以直接使用类型的具体实现。 不过,这种方法要求手动处理需要使用 Write 或 Read 方法的部分。...执行顺序并未明确指定,并且这些 lambda 是在不同的线程上执行。 这是因为,使用图 3 中的 Actions 类,可以向它添加委托,这样稍后就能决定是要并行执行委托,还是按顺序执行委托。...如果这些类是在不同的程序集中实现,必须添加各种各样的程序集,才能获得对一个类型上单个方法的访问权限。

    18730
    领券