学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

504

积分

0

好友

62

主题
发表于 昨天 15:40 | 查看: 45| 回复: 0
本帖最后由 jinchanchan 于 2025-2-24 15:41 编辑

百度云存储一面
1. vfork了解吗
vfork 是一个UNIX系统调用,用于创建一个新的进程,称为子进程,它与创建它的父进程共享相同的内存空间。vfork 被设计用来在执行 exec 系列函数前作为一个临时步骤。它区别于 fork,因为它不会复制父进程的地址空间,而是直接使用父进程的地址空间,直到子进程调用 execexit。这样做的目的是为了提高性能,但缺点是可能导致父子进程间的同步问题。现代系统上,vfork 的行为通常与 fork 相似,或被 clone 系统调用所取代。
2. C++程序编译链接过程
  • 预处理 (Preprocessing): 预处理器处理源代码文件中的预处理指令,如宏定义、条件编译指令和文件包含指令等,生成预处理后的代码。
  • 编译 (Compilation): 编译器将预处理后的代码转换为汇编指令,并进行语法和语义分析,生成相应平台的汇编代码文件。
  • 汇编 (Assembly): 汇编器将汇编代码转换为机器码,生成目标文件(通常是.obj或.o文件)。
  • 链接 (Linking): 链接器将所有目标文件以及所需的库文件合并,解决代码中的外部引用,并生成最终的可执行程序。

3. 静态链接和动态链接的区别
静态链接和动态链接的主要区别在于:
静态链接
  • 将所有必要的库代码整合到最终的可执行文件中。
  • 创建大的可执行文件,因为所有代码都包含其中。
  • 在程序启动时不需要加载外部库,因为所有功能都已内嵌。
  • 可执行文件不依赖于外部的库文件,更易于分发。

动态链接
  • 可执行文件包含指向动态链接库(DLLs或.so文件)的引用,而不是实际代码。
  • 生成更小的可执行文件,因为只需储存库引用。
  • 在程序运行时,需要额外的步骤来加载所需的动态库。
  • 可执行文件依赖于外部库文件,因此需要确保相应的库在系统上可用。

4. 拷贝构造和移动构造函数的区别
拷贝构造函数
  • 创建一个类的新对象时,它会从另一个同类型对象(源对象)复制数据。
  • 它通常执行深拷贝,即分配新的资源,并复制源对象的内容。

移动构造函数
  • 也是创建新对象,但它从临时对象(rvalue,通常是将要销毁的对象)“移动”资源。
  • 它执行浅拷贝,直接接管源对象的资源指针,并将源对象留在可销毁、但有效状态,这样就避免了资源的额外复制,提高了效率。

5.深拷贝和浅拷贝的区别
浅拷贝
  • 仅复制对象的指针或引用,而不复制实际数据。
  • 新旧对象会共享同一份资源。

深拷贝
  • 复制对象的同时创建了一份数据的副本。
  • 新旧对象各自拥有独立的资源,互不影响。

6.浅拷贝和move有区别吗
有,
浅拷贝
  • 复制对象的指针或引用,新旧对象共享相同的底层数据资源。

移动操作(move)
  • 将资源从一个对象转移到另一个对象,原对象资源被置为null或有效但未定义的状态,不再拥有资源。
  • 只有移动构造函数或移动赋值操作符才参与移动操作。

7.空类的大小
空类的大小为1字节。
8.类的继承有几种方式,区别是啥
C++中类的继承有三种方式:
  • 公有继承(public):基类的公有成员和保护成员继承后在派生类中保持原有状态,基类的私有成员不能直接访问。
  • 保护继承(protected):基类的公有成员和保护成员继承后在派生类中变为保护成员。
  • 私有继承(private):基类的公有成员和保护成员继承后在派生类中变为私有成员。

9.进程之间的通信方式有哪些
  • 管道(Pipe)
  • 信号(Signal)
  • 消息队列(Message Queue)
  • 共享内存(Shared Memory)
  • 信号量(Semaphore)
  • 套接字(Socket)

10.进程和线程的区别
进程是系统进行资源分配和调度的一个独立单位,拥有自己的地址空间;线程是进程的执行流,是CPU调度的基本单位,同一进程中的线程共享进程的资源。
11.两个进程想用同一个端口可以做到吗
通常情况下,同一时间内两个进程不能监听同一个端口。但如果第二个进程设置了SO_REUSEADDR或SO_REUSEPORT套接字选项,则可能允许绑定到同一个端口,这取决于操作系统的实现。
12.TimeWait是干嘛的,是主动断开方的状态还是被动断开方的状态
TIME_WAIT是TCP连接断开流程中的一个状态,它是主动关闭方在发送最后一个ACK应答后进入的状态。这个状态的作用是确保最后一个ACK能到达对方,避免由于网络延迟导致的连接重置,以及确保所有旧的数据包在网络上消失,防止它们干扰新的连接。
13.出现大量time wait怎么继续用端口快速建立连接
大量的TIME_WAIT状态可能会使新的连接无法立即使用这些端口。为了解决这个问题,可以采取以下措施:
  • 开启TCP的timewait复用功能,可以设置/proc/sys/net/ipv4/tcp_tw_reuse为1。
  • 减小TIME_WAIT的超时时间,可以调整/proc/sys/net/ipv4/tcp_fin_timeout的值。这个值代表TCP连接在结束后还需要等待多久才能被完全释放。
  • 使用不同的本地端口进行连接,通过在较大的范围内选择源端口,这样可以避免端口用尽的情况。

14.socket有个参数可以重用连接,了解吗
存在两个套接字选项可以影响连接的重用:
  • SO_REUSEADDR:允许其他套接字绑定到正在使用中或TIME_WAIT状态的端口。这对于服务器快速重启非常有用,不必等待端口从TIME_WAIT状态中解除。
  • SO_REUSEPORT(取决于操作系统支持):允许多个套接字实例在相同的端口上监听,分担入站连接。这有助于在多核处理器上实现负载均衡。

15.Innodb索引
InnoDB是MySQL的一个存储引擎,它使用的主要索引类型是B+树索引,包括两种:
  • 主键索引(Clustered Index):直接存储数据行的实际内容。在InnoDB中,表数据按主键顺序组织存储。
  • 辅助索引(Secondary Index):存储主键的值以及指向对应数据行的指针,不直接包含行数据。查询时,先通过辅助索引找到主键,再通过主键索引定位到数据行。

16.主键索引和联合索引的区别
  • 主键索引:主键索引是表中唯一的,用于保证数据的唯一性。每个表只有一个主键索引。
  • 联合索引:联合索引是一种在多个列上创建的索引。是由两个或多个列的值创建一个单一的、有序的索引。

17.主键索引在索引表上只存有索引数据吗
不完全是。在InnoDB引擎中,主键索引(Clustered Index)是一种特殊类型的索引,存储了索引数据以及与之对应的表数据。这意味着,主键索引实际上包含整个表的数据。
18.事务的隔离级别
  • 读未提交(Read Uncommitted):可以读取未被其他事务提交的数据。
  • 读已提交(Read Committed):只能读取已被其他事务提交的数据。
  • 可重复读(Repeatable Read):在事务开始后,外界对数据库的更新不会影响到本事务的操作。
  • 串行化(Serializable):事务顺序执行,避免并发问题,实现最高级别的隔离。

19.幻读是什么
幻读是指在一个事务处理过程中,由于其他事务插入了新行,当查询重复时,会出现新的、"幻"的数据。这主要在低隔离级别的事务中发生,尤其是在非串行化的隔离级别下更常见。它与不可重复读类似,但不可重复读通常是指同一行的数据的变化,而幻读是针对由其它事务所插入的新行。
20.哪个隔离级别可以解决幻读
串行化(Serializable)隔离级别可以解决幻读问题。在这个隔离级别下,事务是完全串行执行的,因此可以防止幻读,也能防止其它读写冲突的情况。
21.手撕LRU
实现一个最近最少使用(LRU)缓存机制通常涉及到两个核心部件:双向链表和哈希表。双向链表用于表示缓存中的数据顺序,其头部元素是最近最少使用的元素,尾部元素是最近使用的元素;哈希表则存储键和其在双向链表中对应节点的映射,以实现 O(1) 时间复杂度的访问。

顺便吆喝一句,民族企业大厂,前后端测试捞人,感兴趣的来!→https://jsj.top/f/o38ijj

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2025-2-25 19:55 , Processed in 0.126057 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表