嵌入式
- 利用malloc申请10M空间
malloc(10 * 2^20);
malloc申请的是一块连续的内存(虚拟内存,不保证在物理内存上连续),虽然系统内存足够,但是不能保证存在连续大小的内存。 - 无限fork耗尽系统资源,导致系统死机或者程序奔溃。子进程继承了父进程的整个地址空间,包括进程上下文、堆栈地址和内存信息等。
- 利用vim删除文件中每行的前2个!
:%s/^.{10}//
其中,%表示所有行,s表示替换,"%s"可用"1,$“代替(下同);正则表达式”/.{10}//"中,表示行首;".“表示要删除的字符个数,”.{10}“表示删除10个字符,可用10个”."表示; - 开发板上电后做了什么
从主板的BIOS读取其中存储的程序
读取起始的512字节(主引导记录MBR master boot record)
引导bootloader
加载内核
通过驱动程序检测计算机硬件
init process
login
BIOS -> MBR -> 引导加载程序 -> 内核 -> init process -> login - 计算机是如何执行程序的
CPU由寄存器、运算器、控制器和时钟组成。
程序首先由内存加载到寄存器,再从寄存器存储到主存,通过控制器和运算器执行程序,寄存器再将结果输出到显示设备上。
go
- 如何搭建分布式系统
目前是互相独立的服务器,如需搭建,可以利用一台独立的服务器作为中间键负责接收客户端连入,然后利用随机算法负载均衡到后端服务器后再处理逻辑。 - 如何实现负载均衡
客户端:多中心,主备中心
服务器:当当前服务器负载超过临界点时主动断开与客户端的websocket连接,让客户端去连接备份服务器。 - 如何在分布式系统中扩展服务器
- docker实现原理
通过linux的namespace、控制组和UnionFS实现容器的隔离,namespace实现进程、网络、文件系统隔离,控制组实现CPU、内存资源隔离,UnionFS实现镜像隔离。 - 协程实现原理
维护一组数据结构和n个线程,协程执行的代码扔进一个执行队列中;对各种io函数进行了封装。
封装操作系统的异步函数,包括linux 的epoll、select。
Ceph
- 什么是块存储、文件存储和对象存储
块设备存储:看作一块硬盘,读写速度快,但不能同时读写
文件存储:提供多处挂载同时读写,但读写速度慢
对象存储:综合块存储和文件存储的优缺点,可以同时读写,速度一般 - 什么是Crush算法
一种优化的Hash算法,在客户端通过算法实现数据分布查询工作,从而决定元数据迁移到哪个节点,起到数据分布的作用。