无自我介绍

熟悉的C++版本

C++11以后的基本都了解一些, 没有特别针对某个版本.

智能指针

  1. shared_ptr: 支持拷贝、移动,可以作为返回值类型,避免大对象的拷贝. 引用计数是线程安全的
  2. unique_ptr:支持移动,可以通过转移所有权的方式,将对象的所有权转移给另一个独占指针
  3. weal_ptr: 支持拷贝,可以作为返回值类型,但是不能转移所有权,只能通过weak_ptr转成shared_ptr

gdb gcc有用过吗

不怎么用gdb gcc有了解

gcc如何预处理

忘了,回答gcc有参数控制

1
gcc -E main.c -o main.i

如何获取不进行链接的代码

忘了,回答gcc有参数控制

1
gcc -c main.c -o main.o

线程安全的单例模式

  1. 通过C++11std::call_once实现
  2. 对指针判空执行两次,因为第一次判断为空后初始化前,可能其他线程已经初始化了,所以要两次判空 问有没有其他的,回答原子变量应该也行,不是很了解。

了解压缩算法吗

不知道为啥问这个问题,面试官接着问是否了解哈夫曼,然后让讲一下自己了解的压缩算法。回答了科研做的图像压缩。

项目

项目结构

负载均衡怎么做的

通过roundRobin方式实现,返回一个连接数量少的服务器;接着问道有考虑延迟吗,回答没有,因为是在单个机器测试的。

单例模板基类是什么

通过模板类是实现一个单例基类,子类通过CRTP的方式实现单例。

Qt键盘鼠标事件

  1. 键盘事件:keyPressEvent keyReleaseEvent
  2. 鼠标事件:mousePressEvent mouseReleaseEvent mouseMoveEvent

linux相关

docker如何建立目录映射

回答,在创建容器时通过-v指定宿主目录和容器目录的映射关系。

top如何根据内存占用排序

回答不知道,自己使用的基于top封装的btop,可以通过命令控制

1
top -o %MEM

如何查找进程的句柄,

回答不太了解。可以使用ps命令查询进程状态。 查询大模型得到: 进程句柄:操作系统为每个进程分配的一个唯一标识符。它主要用于操作系统内核和其他系统组件之间进行进程管理和通信。以下是关于进程句柄的一些关键点:

1
ls -l /proc/<pid>/fd

查看进程端口占用

1
netstat -anp 

查看进程打开的文件句柄

回答不知道,查询大模型得到:

1
lsof -p <pid>

git

回答稀碎,只会使用push, pull

git rebase

git rebase可以将一个分支的更改应用到另一个分支上,可以用来

  1. 更新分支:
    • 将当前分支的更改应用到最新的主分支(如 main 或 master)上,以保持代码的最新状态。
    • 例如,如果你在一个功能分支上工作,而主分支上有新的提交,你可以使用 rebase 将功能分支的更改应用到最新的主分支上。
  2. 线性化提交历史:
    • rebase 可以使提交历史更加线性,避免合并提交(merge commit)的出现,从而使提交历史更清晰。
    • 例如,如果你从 main 分支派生了一个功能分支,并且 main 分支上有新的提交,rebase 可以将你的功能分支的提交重新应用到 main 分支的最新提交之上。
  3. 解决冲突:
    • 在 rebase 过程中,如果遇到冲突,Git 会暂停并提示你解决冲突。解决冲突后,你可以继续 rebase 过程。
    • 例如,如果你的功能分支和 main 分支在同一个文件上进行了修改,rebase 会提示你解决这些冲突。

git 如何创建分支

回答使用checkout 具体是:

1
git checkout -b <branch_name>