面经常问题目

本文详细阐述了进程与线程的概念及其区别,包括资源分配、调度、通信方式等内容。同时探讨了进程间通信(IPC)机制,如管道、信号量等,并介绍了线程间通信的手段,如临界区、信号量等。

进程和线程
1.进程和线程的区别
一个进程包含多个线程,一个线程只属于一个进程
进程 资源分配最小单位 线程 调度的最小单位
进程开销大于线程 进程创建和销毁时 需要系统为之销毁和创建资源 包括i/o 内存等;线程开销小 只需要保存和设置少量寄存器 不涉及存储
进程需要自己独立的内存 线程间共享进程的内存,共享 代码段包括代码和常量,数据段全局变量和静态变量,堆区端
进程调试可靠性高 较简单 线程开销小 速度快 调试较复杂
进程间不会相互影响 线程会 一个挂掉 会全部失去。

进程间通信的方式:
管道 ipc socket套接字
Ipc: 信号 信号量 消息队列 共享内存
管道:匿名管道 有名管道
有名管道 允许非亲属关系 进程间通信 fifo文件 存在于硬盘上 有路径
Pipe
Pipe[0] 读
Pipe[1] 写
全半双工
文件描述符 dup

Ipc:
信号量 pv操作 互斥量
共享内存 :互斥锁 信号量 共享内存最快通信
消息队列 消息链表

线程间通信
临界区 多线程串行化 访问一段公共资源
信号量
互斥量
事件 通过通知操作

缺页中断
物理内存和虚拟内存 映射

请问单核机器上写多线程程序,是否需要考虑加锁,为什么?
轮转抢占式 共享内存 加锁

线程间的同步
信号量 互斥量 条件变量

OS缺页置换算法
Fifo lru
多进程和多线程的使用场景
线程 切换代价小 io密集型
进程 cpu密集型 多机分布式

死锁
存在互斥条件
循环等待
不剥夺 不会强占有其他资源
请求保持 自己占有一定资源 阻塞不释放

读写锁和互斥锁
互斥锁 任何时刻 只有一个线程访问
读写锁 读可以多线程 一个时刻一个写锁 写权限大于读权限

软连接与硬链接
硬链接:同一个文件使用了不同的别名。 ln
软连接:存放路径指向

静态变量初始化
静态变量 编译前
全局或局部静态对象 第一次构造允许时

Sever 接收多个客户端
线程池 多线程 io复用

两个进程访问临界区资源,会不会出现都获得自旋锁的情况
单核cpu,并且开了抢占可以造成这种情况。

c++锁
自旋锁 互斥锁 条件变量 读写锁

协程
子程序 随时中断 协程效率高较线程 不需要锁 线程越多 效率越高

源码到可执行文件
预编译
删除define 处理预编译 删除注释
编译
语法分析 词法分析 语义分析 生成汇编文件
汇编
汇编转成机器语言 生成.o文件
链接
静态链接
静态库对函数库的链接是放在编译时期完成的。
 程序在运行时与函数库再无瓜葛,移植方便。
浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件
静态库对程序的更新、部署和发布页会带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需要重新编译、发布给用户

动态链接
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例

孤儿进程
父进程退出 子进程运行 被init进程接收

僵尸进程
子进程退出 父进程未收到退出信息 wait waitpid 仍保留文件描述符

5种io模型
阻塞 非阻塞 信号驱动io io复用 异步io

Tcp可靠性
序列号 确认应答 超时重传
拥塞控制
慢启动
拥塞避免
快速重传
超时重传

链路层 设备驱动程序 接口卡 mac
网络层 ip icmp arp
传输层 tcp udp
应用层 http ftp dns

http 与https
http明文传输 https 加密传输 tls
https 在三次握手后 需要进行ssl加密
https需要服务端申请证书 浏览器端安装证书
http 80 https 443

http返回码
1信息接收
2 成过
3 重定向 需下一步操作
4 客户端
5 服务器端

输入一个URL

解析url 使用dns 为ip地址
Dns查缓存 没有则递归查询和迭代查询 基于udp
http 或者https
生成请求报文
分片经过tcp数据包交给ip ip路由跳转 arp得到物理地址

报文17udp 6tcp

原子性 一致性 隔离性 持久性
读未提交
读已提交
可重复度
可串行化

MVCC
并发控制机制 InoDB实现 读已提交 可重复读 通过快照实现 在每一行数据后面添加两隐藏列 存储版本号和删除号 将快照存入undo日志中 该日志通过回滚指针将快照链接起来

InoDB具有行锁和外键约束
通过bin-log 灾难恢复
只有他支持外键约束

Hash冲突
开散列 链接法
开地址 线性 双重 随机哈希

缓存穿透
数据直接达到数据库上
接口校验。在正常业务流程中可能会存在少量访问不存在 key 的情况,但是一般不会出现大量的情况,所以这种场景最大的可能性是遭受了非法攻击。可以在最外层先做一层校验:用户鉴权、数据合法性校验等,例如商品查询中,商品的ID是正整数,则可以直接对非正整数直接过滤等等。
缓存空值。当访问缓存和DB都没有查询到值时,可以将空值写进缓存,但是设置较短的过期时间,该时间需要根据产品业务特性来设置。
布隆过滤

缓存击穿
缓存过期后 有大量热点key过来。
加互斥锁 rides分布式锁
在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。
热点数据不过期。直接将缓存设置为不过期,然后由定时任务去异步加载数据,更新缓存

缓存雪崩
描述:大量的热点 key 设置了相同的过期时间,导在缓存在同一时刻全部失效,造成瞬时数据库请求量大、压力骤增,引起雪崩,甚至导致数据库被打挂。

1过期时间打散。既然是大量缓存集中失效,那最容易想到就是让他们不集中生效。可以给缓存的过期时间时加上一个随机值时间,使得每个 key 的过期时间分布开来,不会集中在同一时刻失效。

2、热点数据不过期。该方式和缓存击穿一样,也是要着重考虑刷新的时间间隔和数据异常如何处理的情况。

3、加互斥锁。该方式和缓存击穿一样,按 key 维度加锁,对于同一个 key,只允许一个线程去计算,其他线程原地阻塞等待第一个线程的计算结果,然后直接走缓存即可。
主从同步的实现过程
主从同步分为 2 个步骤:同步和命令传播

段错误
程序访问不允许访问的地址。不允许的方式访问内存位置(例如尝试写入只读位置,或覆盖部分操作系统)时会发生段错误

1.使用未经初始化及或已经释放的指针地址
2.访问受系统保护的内存地址
3.写入只读的内存地址
4.数组越界
5.堆栈溢出
6.文件操作符超出限制
7.跨线程传递指针
Valgrind内存泄漏和内存越界访问检查工具

沾包问题
https://blog.youkuaiyun.com/huangql517/article/details/79531536

深拷贝和浅拷贝
浅拷贝只是增加了一个指针指向已存在的内存地址,仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。深拷贝是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。”

<think> 嗯,用户这次的题很明确,就是想确认能否直接询Materials Studio的具体操作题目。看来ta正在学习这个软件,遇到了实际操作中的困难,需要针对性的指导。 从之前的对话历史看,用户已经对Materials Studio有了基础了解,知道它是材料建模软件,也看过一些教程资源[^1][^2]。引用[3]还提到软件在电池材料、高分子、纳米材料等领域的应用案例,说明用户可能是在某个具体研究方向遇到操作题。 用户特意强调“具体操作题目”,可能暗示ta不喜欢泛泛而谈的教程,而需要解决实际建模时遇到的报错或流程困惑。比如引用[4]提到的晶胞转换题,这类细节操作正是学习者常卡壳的地方。 考虑到用户提到有中文教程资源[^1][^2],但依然需要提,说明教程可能不够解决ta遇到的特殊场景。我应该明确告诉ta可以提具体操作,同时引导ta描述清楚:当前操作目标是什么、具体卡在哪一步、是否有错误提示等。这样既能快速解决题,又能避免泛泛而谈。 用户没有提供具体题目,可能有两种情况:一是试探性提,不确定这里能否解答技术细节;二是还没想好怎么描述题。我需要同时满足这两种潜在需求:用肯定答复消除ta的顾虑,同时给出提模板降低描述难度。 </think>当然可以直接咨询Materials Studio的具体操作题!**该软件的操作类题正是我们重点支持的方向**。请随时提出你在建模、计算设置、结果分析等环节遇到的实际操作难题,例如: ### 典型可解答的操作题举例: 1. **建模操作** > *“如何在Materials Studio中构建石墨烯超胞并设置真空层?具体菜单路径是什么?”* ```操作路径参考 Build → Layer → Graphene → 调整尺寸 → Build → Crystals → Build Vacuum Slab ``` [^4] 2. **参数设置** > *“CASTEP模块中几何优化时如何设置截断能和K点网格?不同体系有何建议值?”* 3. **结果分析** > *“如何从Forcite动力学模拟结果中提取聚合物的玻璃化转变温度(Tg)?需要分析哪些输出文件?”* [^3] 4. **报错处理** > *“运行DMol³计算时报错'Out of memory',如何调整内存分配参数?”* ### 高效提建议(助你更快获得答案): 1. **明确目标** 📌 说明具体操作目的(如“想做能带结构计算”)。 2. **描述步骤** 📌 列出已执行的操作流程(菜单路径/参数设置)。 3. **定位卡点** 📌 指出报错位置或异常现象(如“优化后结构崩坏”)。 4. **附关键截图** 📌 上传参数设置板或报错提示(若支持图片交互)。 > 💡 **示例提**: > *“我在用CASTEP计算二氧化硅能带时,`Analysis` → `Band Structure`生成的能带图中费米能级位置异常(附图)。已设置`SCF tolerance=1e-6 eV`,`K-points=4x4x4`,是否需要调整电子自洽算法?”* --- ### 相关题拓展 (基于你的学习需求) 1. Materials Studio中如何为金属表吸附体系设置周期性边界条件? 2. 在Forcite模块中,如何编写脚本批量运行不同温度下的分子动力学模拟? 3. CASTEP计算能带结构时,`k-point path`的设置有哪些经验性规则? 4. 如何利用Adsorption Locator工具预测分子在晶体表的最优吸附位点? **请直接提出你遇到的具体操作题,我们将提供分步解决方案!** [^1][^2][^3
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值