首页 > 其他分享 >(1)刷题第一弹

(1)刷题第一弹

时间:2024-11-01 17:00:32浏览次数:4  
标签:malloc 函数 第一 线程 内存 new 构造函数 刷题

1.进程/线程/协程

进程与线程:
  • 进程是资源分配的最小单位,线程是资源调度的最小单位。
  • 资源拥有:进程拥有独立的地址空间。而统一进程下的线程共享地址空间和资源,包括内存/文件句柄等。
  • 通信方式:进程通信有特定的机制,比如管道/共享内存/消息队列/信号等方式。而线程因为内存等资源是共享的,所以可以通过直接读写全局变量等就可以通信
  • 上下文切换:进程切换的开销远大于线程,因为进程切换涉及到了虚拟地址的切换。同样的道理,进程创建的成本也是远高于线程的。
  • 错误影响:得益于内存隔离,单一进程崩溃不会直接影响到其他进程。而线程又可能会对其他线程造成直接影响。
协程

协程可以看作是完全作用在用户态的线程,主要用于减少成本,提高并发性。

2.堆/栈

  • 内存管理:栈内存由操作系统管理分配,而堆为程序员手动分配。
  • 数据结构:栈遵循先入后出原则,而堆的结构较复杂多样。(堆的结构如最大堆/最小堆等也是考察重点!)
  • 性能:堆的大小远大于栈,但栈的访问速度比堆快很多。
  • 服务对象:栈主要储存局部变量/函数调用/表达式求值,而堆用于动态内存分配/数据持久化/对象存储等

3.指针/引用

指针是独立变量/指针可以改变所指地址/大小/指针有多重指针/引用必须初始化,不可为空/

引用通常用于函数传参,指针用于内存管理和访问。

4.为什么 析构函数常用虚函数 ?为什么构造函数不虚?

  • 析构函数使用虚函数:可以确保资源正确释放,防止内存泄漏。在多态的情况下,基类指针可以指向派生类对象,析构函数定义为虚函数可以确保删除对象时正确调用析构函数。
  • 构造函数不能定义为虚函数:构造函数的初始化用途使得构造函数不能定义为虚函数。

5.CPP中 多态的实现有哪几种 ? (静态 /动态)

  • 静态多态:也叫编译时多态,主要包括运算符重载和函数重载以及模板。
  • 动态多态:也叫运行时多态,包括虚函数和基类指针引用等。

6.new /malloc区别及底层实现原理

new/malloc的区别
  • new不仅会分配内存还会调用对象的构造函数,而malloc无构造函数。
  • new返回的是对象类型的指针。而malloc默认返回void*类型,一般要进行类型转换。
  • 分配失败的处理方式不同,new会抛出异常,malloc会返回NULL。
  • new是运算符可以被重载,而malloc是库函数不能被重载。
  • new和malloc的底层实现原理不同(见下文)
new/malloc的底层实现
  • new的底层机制主要分为两个部分:分配器和构造器。分配器负责从堆中分配内存,一般会调用第一级的内存管理函数,比如malloc或者由操作系统提供的函数。构造器用来初始化对象,包括调用构造函数,返回地址。
  • malloc的底层:小型brk,大型mmap直接映射到地址空间。

7.Struct→CPP内存对齐

内存对齐方式默认由编译器决定,也可以手动设定。目的是提高内存访问速度。

  • 结构体struct中每个成员变量默认都要对其它的下一位成员补齐,且最末结构体要是最大对齐因子的倍数,话不多说直接上例子。所以这个结构体占用内存为1+(3)+4+8=16,16=2*8,符合要求。
struct MyStruct {
    char a;     // 占用1字节,后面需要3字节的填充以对齐下一个成员
    int b;      // 占用4字节
    double c;   // 占用8字节(在大多数平台上)
};

8.进程通信

管道/共享内存/消息队列/信号/套接字

9.const/ static关键字

10.智能指针△

11.怎么保证线程安全

12.常见处理哈希冲突的方法

13.深拷贝和浅拷贝

14.左值引用和右值引用

15.单例模式及CPP实现

标签:malloc,函数,第一,线程,内存,new,构造函数,刷题
From: https://www.cnblogs.com/BornHan/p/18520823

相关文章

  • 书籍-《优化技术第一卷:连续优化》
    书籍:OptimizationtechniquesI:Continuousoptimization作者:MaxCERF出版:EDPSciences编辑:陈萍萍的公主@一点人工一点智能01书籍介绍这套分为两卷的书籍概述了连续、离散和函数优化技术。本卷专注于连续优化,涉及实数变量的问题,无论是无约束还是带约束的情况。在回顾最优性条件及其......
  • 代码随想录刷题学习日记
    仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录404.左叶子之和计算给定二叉树的所有左叶子之和。(所有的左边的叶子节点的和)提供参数:根结点root关键思路:遍历,判断若为左叶子节点,则将值累加。主要操作:递归三要素1.返回值类型和参......
  • 程序员修炼之道——从小工到专家,读后感第一篇
    现在只完成了,第一章——注重实效的哲学的阅读,其中,“注重实效的哲学”给我留下了深刻的印象。在这章中,作者强调了实际效果的重要性,提醒我们在编程和工作中,不仅要追求理论知识和技术的深度,更要关注产出的价值和实际应用。这一观点让我意识到,作为一个程序员,不仅仅是要掌握各种编程......
  • 《程序员的修炼之道》第一次读书笔记
    《程序员修炼之道》第一章:注重实效的哲学深度读书笔记在信息技术日新月异的今天,程序员作为推动时代进步的重要力量,其专业素养和实践能力显得尤为重要。《程序员修炼之道》作为一本广受好评的编程指南,为程序员提供了宝贵的经验和深刻的洞见。其中,第一章“注重实效的哲学”更是以......
  • 你的第一个Solana SPL
    简介TFT你的第一个SPLThefirsttoken技术栈和库RustAnchor框架Typescript(测试)开发环境和其它网络地址DevNet:https://api.devnet.solana.comTestNet:https://api.testnet.solana.comMainNet:https://api.mainnet-beta.solana开发环境设置1.本教程使用的时......
  • 程序员修炼之路 从小工到专家 第一章读书笔记
    《程序员修炼之道——从小工到专家》的第一章“注重实效的哲学”给我留下了深刻的印象。这一章通过一系列生动的故事和实用的建议,向我们展示了成为一名优秀程序员所需要具备的品质和思维方式。在阅读过程中,我首先被书中提到的“不要害怕暴露弱点”这一观点所吸引。作者认为,......
  • 代码随想录之链表刷题总结
    目录1.链表理论基础2.移除链表元素3.设计链表4.翻转链表5.两两交换链表中的节点6.删除链表中的第N个节点7.链表相交8.环形链表1.链表理论基础链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后......
  • 《程序员修炼之道 —— 从小工到专家》第一章有感
    《程序员修炼之道——从小工到专家》的第一章节有感在阅读此书时,我发现这本书并不是那种枯燥无味的,而是其中有很多小故事,我们从故事中,可以明白其中的对于我们程序员来讲很不错的习惯和道理此章节着重强调了务实的态度对于程序员的根本性意义。在当今快速发展的科技领域,程序员......
  • 《阅读笔记 - 第一部分》
    在阅读《程序员修炼之道——从小工到专家》的开篇部分(第1-2章)后,深感这是为程序员奠定正确思维基石的重要内容。第1章“注重实效的哲学”让我明确了作为程序员应有的责任感。“关心你的技艺”这句提醒,让我意识到编程不仅是一份工作,更是一门需要用心雕琢的艺术。我们要......
  • 重温c语言之,7天开整,就是随便的写写,第一天
    一:转义字符\t是一个字符,在printf里面,只占一个位置;其他什么的抽象字符,用一个'\'+抽象字符就可以出现;\ddd这个是8进制的,可以转成10进制的,之后参考ASCLL码表即可二:枚举类型的函数与数组一样,有下标,都是从0开始的三:数组可以先不在【】这里面填写多少,但是需......