cpp 选手秋招学习笔记 day37 面经学习

cpp 选手秋招学习笔记 面经学习 day37

一、存储方向

1.分库分表含义及使用场景

当单库单表随着数据量增加导致达到瓶颈,在查询和写入的时候性能下降,这时候就需要对数据进行分库分表,方式分为水平拆分和垂直拆分。

水平拆分是对某个字段的内容,按照内容去分表,比如按照 userid 取模或者按照时间范围去分表,垂直拆分是按照业务或者按照字段去拆分,按照业务拆分比如用户表订单表。

2.快照读和当前读是什么意思

快照读是根据 undolog 和事务 id,在读的过程中创建一致性视图,普通的 select 都是快照读,在视图创建之后的写入和更新对当前事务不可见。

当前读是总是读到数据的最新版本,包括 select forupdate,update 和 delete 都是当前读。

3.MVCC 是怎么解决幻读的

MVCC 是多版本并发控制,根据事务 id 和是否提交等建立一致性视图,数据的读取根据一致性视图,保证了数据前后读写的一致性,对于当前读,还需要临键锁,在空隙之间加锁来解决幻读的问题。

二、算子开发方向面经

1.什么是 bank conflict,怎么解决

在 block 中,对于共享内存的访问会出现 bank conflict,因为共享内存是分成 bank 的,对于同一个 bank 都不同地址在同一时间不能被多个线程同时访问,所以原本应该并行的代码会出现串行执行的情况,解决方式有填充,padding,把原本刚好是在同一个 bank 的错开,第二种方式使用 warp shflle 避开共享内存,还有就是在设计的时候避免使用同一个 bank 不同地址。

2.讲一下 cpu 架构和 gpu 架构

cpu 的核心比较复杂,支持分支预测,复杂逻辑的执行,主要是追求低延迟;gpu 的核心更加小但是有大量小的计算单元,大量小的单元可以同时执行相同或相似的指令,追求的是高并发。

3.grid block thread 的关系

一个 grid 由多个 block 组成,在运行 kernel 的时候就是一个 grid,一个 block 中的线程是共享资源的,包括共享内存通信,同步等待这些,在 block 中的线程是执行的基本单位。

相关推荐
进化中的刀盾兽1 小时前
从零实现 C++ Json-Rpc(十):把消息交给真实连接——MuduoConnection 与 ConnectionFactory
c++·rpc
青瓦梦滋8 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
CodeYp201913 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
pipixia2003314 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
牵猫散步的鱼儿17 小时前
C++ 内存分区
c++
choumin17 小时前
C++ 标准容器为什么不能存引用
c++·容器·引用类型
谙弆悕博士17 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
stolentime18 小时前
CF2277E Tree Guessing题解
c++·算法·贪心算法·交互·ad-hoc
syagain_zsx19 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官19 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt