虚拟内存 虚拟内存是计算机系统内存管理的一种技术,它为每个进程提供一个独立的、连续的地址空间,即使物理内存有限或不连续。在C++编程中,操作系统通过页表将虚拟地址映射到物理内存地址上。当程序试图访问不在物理内存中的虚拟地址时,会发生缺页中断,操作系统会从磁盘上的交换文件中调入所需数据至空闲物理内存,并更新页表。这样做的好处是可以支持比实际物理内存更大的寻址空间,并允许同时运行多个程序,而无需担心它们之间的内存冲突。
指针 指针在C++中是一个变量,其值为另一个变量(对象)的内存地址。通过操作指针,可以直接读写该地址所指向的对象内容。指针可以动态地改变其所指向的内容和位置,从而实现灵活的数据结构与算法设计。例如,数组、链表、树等数据结构的底层实现都离不开指针。使用指针需要注意指针的初始化、解引用以及释放不再使用的动态内存等问题,以防止悬挂指针和内存泄漏的发生。
并发与并行
并发:是指在同一时间段内有多个任务都在执行,但并不一定在同一时刻,即处理器交替快速执行多个任务,使得宏观上看起来像是同时进行的。在单核CPU上,真正的并行是不可能的,多线程并发实际上是上下文切换的结果。
并行:则是指在同一时刻,有多个任务真正地同时执行,这通常需要多核CPU或多台机器才能实现。在C++中,可以通过多线程库如std::thread来创建和管理并发/并行任务。
iOS软件开发与安卓软件开发的区别
开发环境:iOS应用主要使用Xcode IDE,基于Objective-C或Swift语言;Android则使用Java、Kotlin或C++,主要通过Android Studio开发。
操作系统架构:iOS基于封闭的苹果生态系统,设备统一,API相对稳定且严格审核;Android开放性更强,设备碎片化严重,API兼容性问题较突出。
发布渠道:iOS应用发布必须通过App Store审核;Android应用除了Google Play外,还可以通过其他第三方市场分发。
UI框架:iOS使用UIKit或SwiftUI构建界面;Android使用Android SDK提供的View系统。
HTTP与HTTPS
HTTP(Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议,用于传输超文本信息。它是无状态、明文传输的,存在被窃听、篡改、伪装等安全风险。
HTTPS(HTTP Secure)是在HTTP协议基础上加入SSL/TLS协议层,对通信数据进行加密处理的更安全版本。通过证书机制保证服务器身份的真实性,采用协商密钥的方式确保传输过程的安全,能够有效防止数据被窃取或篡改。
堆栈
栈(Stack):在计算机科学中,栈是一种数据结构,遵循后进先出(Last In First Out, LIFO)原则。在C++中,函数调用过程中的局部变量和返回地址等信息会被压入栈中。栈内存由编译器自动分配和回收,空间小但速度极快。
堆(Heap):堆是另一种内存区域,主要用于存储程序在运行时动态分配和释放的内存空间,比如使用new关键字分配的内存。堆内存的大小和生命周期由程序员控制,申请和释放不及时可能导致内存泄漏或悬垂指针问题。
七层网络参考模型 七层网络模型(OSI模型)包括:
应用层:直接与用户应用程序交互,处理特定的应用服务。
表示层:负责数据格式转换、加密和压缩。
会话层:建立、管理和终止会话连接。
传输层:提供端到端的数据传输服务,TCP/IP协议中对应的是TCP和UDP。
网络层:负责IP路由选择及逻辑寻址,决定数据包如何从源到达目的地。
数据链路层:定义了如何在单一链路上封装数据帧并进行错误检测。
物理层:定义了硬件接口标准,如电气特性、机械特性、功能特性和过程特性。
找出一个字符串中最长不重复字串的长度(非暴力法) 可以利用滑动窗口的思想结合哈希集合(HashSet或unordered_set)来解决此问题,避免暴力求解。具体步骤如下:
初始化两个指针i和j,分别代表滑动窗口的左右边界。
使用哈希集合存储窗口内的字符及其出现情况。
当j向右移动时,不断更新哈希集合,并检查当前窗口是否满足不重复条件。
若满足,则记录下当前窗口长度,并继续扩大窗口;若不满足,则收缩窗口左边界,直到重新满足不重复条件为止。
最终得到的最大窗口长度即为最长不重复子串的长度。