---
# System prepended metadata

title: 230902-秋招-得物二面-任

---

## 得物

#### 算法工程师（工程方向）二面

- **两个服务器节点上分别有两个超大型文件，两个文件只有几行是不同的，两个节点之间的带宽非常小，我们如何快速的找出不同的那几行在哪里？**
	- 利用哈希函数得到的哈希值可以很简单的检测数据是否相同
	- 利用二分法将文件不断的切割来进行哈希值的对比
- **不用链表如何实现队列**
	- 利用循环数组来实现队列
	- 两个指针，一个指向队首，一个指向队尾的后面一位（队首指向队尾的方向为顺时针）
	- 当队首指针与队尾指针间隔为 1 且队尾指针在队首指针左边表示队列已满，当两者重合时表示队列为空
	- 出队时，先看队列有没有数据，有的话从队首出列，然后队首指针顺时针移动一位
	- 入队时，先看队列是否满了，满了的话将队尾的值替换为新的就行，否则直接放入队尾指针，队尾指针顺时针移动一位
- c++使用多线程应该注意些什么
	- 线程安全性：保证共享数据被正确同步：合理使用互斥锁和条件变量来进行同步
	- 避免死锁：保证各个线程按同样的顺序上锁，避免死锁影响线程的执行
	- 异常处理：在多线程程序中小心处理异常，确保异常不会使整个程序终止
	- 资源管理：谨慎管理线程的创建和销毁，以避免资源泄露和性能问题，使用线程池来复用线程，而不是频繁创建和销毁线程
- 写 c++程序的时候有遇到过 core_dump 或 crash 吗，用什么去排查
	- 这些问题常常是与内存访问错误和异常等有关
	- core_dump 文件包含了程序崩溃时用户空间的快照，可以用 gdb 查看崩溃信息
	- 同时我们也可以利用 clang static analyzer等工具检测代码潜在的问题
	- 如果所用到的某个库具有日志输出，我们也可以查看日志来寻找问题
- 内存泄漏怎么检查
	- 利用 valgrind 等工具来检查内存泄露
	- 利用智能指针来管理堆内存来减少内存泄露的产生



