当前位置: 首页 > news >正文

Java面试黄金宝典48

1. C++ 的拷贝构造函数,深拷贝和浅拷贝

 

  • 定义
  1. 拷贝构造函数:在 C++ 里,拷贝构造函数属于特殊的构造函数,其功能是使用一个已存在的对象来初始化一个新对象。当对象以值传递的方式作为参数传给函数、函数返回对象、用一个对象初始化另一个对象时,拷贝构造函数会被调用。
  2. 浅拷贝:仅复制对象的成员变量值。要是成员变量包含指针,仅仅复制指针的值,也就是两个对象的指针指向同一块内存区域。
  3. 深拷贝:不但复制对象的成员变量值,当遇到指针类型的成员变量时,会另外开辟一块新的内存空间,接着把原指针指向的内容复制到新的内存空间。

浅拷贝实现起来较为简单,但是存在内存管理方面的风险,例如一个对象销毁时释放了内存,另一个对象的指针就会变成野指针。深拷贝能够避免这种问题,不过实现起来更复杂,需要额外的内存分配和数据复制操作。

  • 要点
  1. 浅拷贝实现简单,但可能引发内存问题。
  2. 深拷贝能保证对象独立性,但开销较大。
  • 应用

在实际开发中,若对象包含动态分配的内存,通常需要使用深拷贝来避免内存错误。比如在图形处理程序里,每个图形对象可能包含指向图像数据的指针,使用深拷贝可以确保每个图形对象有自己独立的图像数据副本。

C++ 代码示例

cpp

#include <iostream>
#include <cstring>

class MyClass {
private:
    char* data;
public:
    // 构造函数
    MyClass(const char* str) {
        data = new char[strlen(str) + 1];
        strcpy(data, str);
    }

    // 浅拷贝构造函数
    MyClass(const MyClass& other) {
        data = other.data; // 只复制指针
    }

    // 深拷贝构造函数
    MyClass(const MyClass& other, bool deepCopy) {
        if (deepCopy) {
            data = new char[strlen(other.data) + 1];
            strcpy(data, other.data);
        } else {
            data = other.data;
        }
    }

    // 析构函数
    ~MyClass() {
        delete[] data;
    }

    void printData() {
        std::cout << data << std::endl;
    }
};

int main() {
    MyClass obj1("Hello");
    MyClass obj2(obj1, true); // 深拷贝
    MyClass obj3(obj1);       // 浅拷贝

    obj1.printData();
    obj2.printData();
    obj3.printData();

    return 0;
}

 

2. 分布式架构中,怎么保证数据的一致性

 

  • 定义

在分布式架构里,数据会分散存储在多个节点上,由于网络延迟、节点故障等因素,数据可能出现不一致的情况。保证数据一致性

相关文章:

  • Java 多线程编程之原子类 AtomicBoolean(构造方法、获取与设置、比较并设置)
  • rancher 解决拉取dashboard-shell镜像失败的问题
  • Wincc管对象的使用
  • 【ESP32-microros(vscode-Platformio)】
  • Go 语言中的 package main、 func main() 和main.go的使用规范
  • 浮点数比较在Eigen数学库中的处理方法
  • AI前沿周报:2025年3月技术深度解析
  • Express中间件(Middleware)详解:从零开始掌握(1)
  • 在Java项目中,引入【全局异常处理器】
  • HarmonyOS-ArkUI V2装饰器-@Once
  • 第一节:React 基础篇-React虚拟DOM原理及Diff算法优化策略
  • 【Web功能测试】注册与登录功能测试用例设计深度解析
  • (十四)安卓开发中的RecyclerView详解
  • Python 和 JavaScript两种语言的相似部分-由DeepSeek产生
  • 计算机操作系统-【死锁】
  • 信奥赛之c++基础(循环结构之for循环)
  • Java常用工具算法-6--秘钥托管云服务3--微软zure Key Vault
  • 第5章,将 Toy IR 程序部分地下降到更低层的 dialect 以便优化
  • 【Grok 大模型深度解析】第二期:架构探秘与训练哲学
  • 在AMGX中使用MPI加载自定义分布式矩阵和向量
  • 做外贸批发开什么网站/seo网站优化培训要多少钱
  • 日本职人手做网站/十大新媒体平台有哪些
  • 天水建网站/重庆seo1
  • 学校网站源码html/销售找客户最好的app
  • 政府网站建设参考书/四川seo平台
  • 企业做什么需要有网站/百度推广怎么提高关键词排名