• 奇安信——C++代码安全服务器开发一、二面


    一面 (45min)

    1. 自我介绍
    2. ACM取得最好的成绩
    3. 简单讲一下你的STL项目
    4. C++形成exe的过程
    5. 把可执行文件运行起来的过程

      这个我不知道诶...我觉得是类似操作系统进程之类的概念

    6. C++ static关键字的作用
    7. 把全局变量定义在头文件中会有什么问题

      面试官给了点提示,#include的作用

      可能会出现重复定义的问题,因为#include就是文本替换而已

    8. 头文件里的定义了static全局变量会怎么样

      这个我不知道诶...

    9. C++new和malloc的区别
    10. 常见的STL容器是怎么实现的
    11. vector和deque哪个访问更快一点,为什么
    12. 红黑树插入节点会导致迭代器失效吗
    13. C++11的特性有用过哪些
    14. 移动语义与右值引用
    15. 智能指针share_ptr内部实现是怎么样的
    16. share_ptr与weak_ptr的底层实现

      源码层面怎么实现?

    17. C++多态的理解
    18. 写一个线程安全的等待队列
    19. C++11的线程库有了解过吗
    20. 已经程序全部代码,已知有地方会崩溃,要怎么知道哪里会崩溃

      这个不知道诶...他说直接用调试器就行了,会自动跳到那里,可以用GDB

    21. 给定有序数组如何找到一个数出现的次数

      两次二分


    反问环节

    1. 我有什么不足的地方

      增加一点调试方面的知识,其他都挺好的

    2. 工作时间是怎么样的

      9.30打卡上班,一般7-8点就没什么人了。除了加班的时候。

      周末双休

    3. 食堂,餐补,下午茶?

      没有食堂,有餐补,有下午茶

    4. 我现在面得部门在哪?

      北京

    5. 部门主要是做什么的?

      代码安全事业部。主要负责代码静态检测,负责开发和维护一个C++的一个静态检测引擎。是更偏编译的一点,不是人工智能类似的。

    6. 部门平均年龄

      最大的是85年的差不多,最小的就是校招的

    7. 部门的结构是怎么样的

      拆分成一个个组。静态检测的组分为两个,C++和JAVA。现在C++组是4个人。


    二面 (30min)

    1. 虚函数的实现
    2. strcpy调用的时候会复制中间的'\0'吗
    3. 释放空指针这种编码风格会有什么危险吗?

      这我还真不知道...我只知道释放空指针是安全的。百度到了一个不知道是不是答案的回答: 可能存在*(nullptr) 会导致崩溃。

    ​ 但是如果不置null的话,不是可能会访问非法地址么...

    1. 我们现在有一个大型项目,已知有一行代码运行一定次数会崩溃。要怎么知道运行多少次会崩溃

      输出1到文件,看文件里面有多少个1

    2. 有一个开源程序,生成了可执行文件。让你判断这个可执行代码里面有没有出现内存泄漏,你会怎么做

      没答出来。百度了一下,大概是重载new和delete,之后全局维护一个字典一样的东西。程序退出的时候看看是否有残留的。

    3. 内存泄漏的危害
    4. 编译的基本过程

      我还以为是要我将之前的那个四个过程。但是他想细细的问代码转成汇编代码的过程,我不知道。百度了一下是语法分析和语义分析这几个过程。

    5. 解释一下什么是回调函数

      当时答得不大好。百度了一下就是:有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。

    6. 如何实现一个回调函数功能

      传入函数指针?

    7. 死锁发生的条件
    8. 进程间通信的方法
    9. 缓冲区溢出产生的注入攻击的原理
    10. 一个数组,1-n顺序存入,但是存入的时候少存了一个,导致数组偏移,怎么快速找到是哪个数缺少了
    11. 给定一个无序的数组,数组的元素数据范围在1e5以内,最快的排序方法是什么?
    12. N份药品,有一份被污染了,有一台机器可以检测。问怎么最快检测出来?
    13. N份药品,有一份被污染了,有一份试纸可以检测。问怎么最快,用最少的试纸检测出来?

      这个没答好。我感觉和上面一题没区别。之后发现,试纸是可以同一时间使用多张的。也就是说最佳的方案应该是 logN张试纸,O(1)的时间内检测出来。

      具体的话就是二进制拆分。6的二进制表示为110,那么我们就往第2和第3张试纸上滴一滴药品。之后所有的数都这么操作。最后,所有试纸变色的位数加在一起就是第几份药品。


    反问环节
    1. 你跟上一个面试官是在同一个组的吗?

      是这样的

    2. 我们做的是叫代码卫士的一个软件吗?

      对的

    3. 过去具体是干什么?会有mentor么?

      有的。主要技术栈是C++。大概就是开发这个代码安全引擎。

    4. 我投的是C++服务端开发,这个算是服务器开发吗?

      代码安全引擎是跑在服务器上的。

    5. 是不是要对编译原理了解要更为深入一点?

      也不是这样的。主要更看重的是个人能力,代码能力以及思维能力。编译原理看看书也就差不多了,掌握基本概念还是要的。

    6. 上一面的面试官说的工作制度是真的吗?

      是这样的。

    7. 有房补吗?

      不知道。如果有下一面的话,可以问问hr。一般公司有的都会有的。

    8. 是在北京,那么那里都是北方人吗?

      北方人挺多的。

    9. 部门的平均年龄多大?

      我是86的,上次面试官是95的。大部分是90左右的。JAVA组的人可能更年轻点。

    10. 我这一面有什么不足的地方?

      都挺好的。

  • 相关阅读:
    npm ERR! code EINTEGRITY npm ERR! sha1- 报错解决办法
    create-react-app创建项目报错SyntaxError: Unexpected end of JSON input while parsing near '...ttachment":false,"tar' npm代理
    七大设计原则
    UML类图和时序图
    linux环境下排查cpu占比高的MySQL数据库sql语句
    Angular 2 imooc 学习笔记
    angular JS 学习笔记
    Hibernate HQL基础
    Hibernate注解
    Hibernate多对多映射
  • 原文地址:https://www.cnblogs.com/Vikyanite/p/16120245.html
Copyright © 2020-2023  润新知