面经 | 社招 润和软件 | 初面 复试 综面 已 OC
1717
发布于 未知归属地

初面

因为在 Boss 上投递了润和软件,hr 就直接联系我今天下午 7:00 的初试,问的问题也比较基础:

  1. 简单介绍一下 C++ Linux 轻量级 WebServer 这个项目。
  2. 线程池中的线程如何保持同步,即线程安全问题。
  3. 进程和线程有什么区别。
  4. 多进程中的地址空间是如何实现隔离的。
  5. https 是什么。
  6. OSI 的七层参考模型是否有了解。
  7. 你还用过哪些服务器的并发模型呢(apache、nginx 等)。
  8. 是否有用过 Linux 终端。
  9. 快速排序的思想。
  10. C++ 解释封装、继承和多态的特性。

在面试过程中发现面试官主要做驱动的,所以开发中以 C 语言为主,C++ 方面的知识没怎么问,主要问的是多进程、多线程和网络编程方面的问题,很尴尬的是多进程和多线程还没咋复习,还是靠着以前的知识过关,得好好再补一下。

整个过程 17 分钟就结束了,应该过了,后面还有其它技术面。

复试

复试 1h 左右,问的问题也相对比较基础,但比初面要深一点:

  1. 简单做下自我介绍。
  2. 在声网的主要工作是什么,以及为什么要离职呢。
  3. select 和 epoll 有什么区别,select 和 epoll 各自可设置的 fd 集合大小是多大,select 默认最大 1024 可以改吗。
  4. 为什么要用标准库容器封装的 char,实现自动增长的缓冲区。
  5. 读线程和写线程对缓冲区的访问是否有加锁,以及具体对什么进行了加锁。
  6. map 和 unordered_map 的区别。
  7. unordered_map 最坏查找的时间复杂度是多少,如何设计保证最坏的时间复杂度不会达到 O(n)。(rehash 不行,得结合 AVL 树一起使用)
  8. 什么是左值和右值,右值引用和移动语义又是什么,以及右值引用可取地址吗。
  9. 在使用移动构造函数的时候,需要有什么特殊的判断,如果赋值和被赋值是同一个对象没有加判断会发生什么。
  10. 现场写一下单例模式。

如下是使用静态局部对象实现的单例模式:

#include <iostream>

class Singleton {
 public:
  static Singleton* GetSingleton() {
    static Singleton single;
    return &single;
  }
 private:
  Singleton() {}
  Singleton(const Singleton& single) {}
  ~Singleton() {}
};

int main() {
  Singleton* p1 = Singleton::GetSingleton();
  Singleton* p2 = Singleton::GetSingleton();
  Singleton* p3 = Singleton::GetSingleton();
  std::cout << p1 << ' ' << p2 << ' ' << p3 << std::endl;
  return 0;
}

在写代码期间还问了下之前公司是不是在服务器上编写 & 编译代码,当然不是,一般都是本地写完并调试代码后通过 Jenkins CI 出版本,在测试环境验证。
最后问了下岗位的职责,对我来说进来会先对代码进行单元覆盖测试和代码重构,之后再进行 EDA 软件的开发,而且 EDA 软件开发比较难,所以需要一定的适应期。

综面

这次是技术总监来面,问的问题很难,不知道是不是故意***难我,我自己查了一个问题就是全局静态变量只能在本源文件中用,而面试官则问全局静态变量在不同文件中初始化的顺序...,所以我感觉面试官自己都不太清楚。

  1. 简单做下自我介绍。
  2. 讲下虚函数,多态的底层实现(涉及虚函数表和虚表指针),空类所占用的大小,当一个类中只有虚函数,实例化了 100 万个对象,因为虚表指针都指向了同一个基类地址,如何优化内存空间。
  3. if else 和 switch 性能上有什么差异。
  4. 全局静态变量在多个文件中对应的初始化顺序是什么(X,当时我都没听懂这是啥意思,不就是它声明的顺序?)。
  5. 数据结构方面除了 vector、list、map 和 unordered_map 外,是否用过 tree 和 graph。
  6. 要查找某个目录下的某个文件,再将对应文件中含有 "aaaaa" 字符串所在行的上下 5 行的信息打印出来,你会用 shell 脚本怎么写。
  7. 你常用的调试工具是什么,coredump 如何产生以及 gdb 如何使用,说一下你使用 gdb 的调试过程。
  8. 关于你调试过最难的关于内存的问题是什么。
  9. 你使用的构建编译的工具是什么(blade 3),CMake 是否有用过。

最后反问环节我问了下上面第三个问题,因为我想知道面试官知不知道,结果让我自己去查。另外关于该岗位基本也是做一些杂活,说什么 EDA 是硕士 / 博士去做的,当然后期也可以往这方面发展。这三面面下来就让我做这,应届生都不如,我 TM 也是无语了。

然后还在问是否接受加班、最低期望薪资和一些个人信息比如是否结婚、父母工作,就算这 Offer 给我了我也不会去,艹。

评论 (3)