岗位:软开c/c++ Base:深圳
一面(9月5日 45min)- 面试官介绍部门(安卓)
- 自我介绍
- 成绩
- 算法题:链表内部指定区间反转
- c++虚函数表了解吗,创建时机是什么时候
- 怎么查找虚函数表中的函数,虚函数指针存放的位置在哪里
- 智能指针,shared_ptr和unique_ptr怎么实现的,什么场景需要智能指针
- 内存泄漏了解吗
面试官姐姐声音很好听
- stl的map和unordered_map
- std::move
- 讲一下程序栈空间
- 线程间同步怎么做的,信号量怎么使用
- 死锁产生的条件
- gdb用过吗,怎么调试core文件,查看变量类型的命令是什么
- gdb在线调试用过吗
- 汇编语言了解吗,用GDB看过反汇编吗
强度略高,几乎每个问题都以这个不是很清楚结尾,凭记忆写的,后面想起来更多的再补充
- 自我介绍
- 算法题:写题二叉树的序列化与反序列化
序列化的返回为char*,不是string(开始的写法是在序列化函数里面用string,返回const_cast(string.c_str()),一直报错,然后malloc了个char[]数组,终于过了)
- 为什么不能返回const_cast(string.c_str())呢?
局部变量的指针,string析构了,这里说到了string类长度以16字节为界,存储方式不一样,给后面留了个大坑
- 如果是string接收返回值可以直接返回吗,为什么?
可以,拷贝构造
- 如果一个函数string f(), const char* ret = f().c_str(), printf(“%s”, ret)能输出吗?为什么?
不能,临时变量析构了
- 如果是printf(“%s”, f().c_str())呢?(可以)
- 你刚刚说到了string类对于长短字符串存储方式不一样,那你要怎么设计这个数据结构?应该有哪些成员变量?
要求空间要极致压缩,要求只用16个字节,实现短字符串存在栈上,长字符串在堆上,并且栈上有一个指针指向长字符串,这里聊了非常久,答案是要用共用体
- 怎么设计一个迭代器?需要考虑哪些东西?
重载+,-运算符,自定义指针移动规则,定义起始与结束标志位,定义迭代器失效的规则
- c++的智能指针是怎么实现的?
shared_ptr引用计数,unique_ptr禁用拷贝构造和禁止重载赋值运算符
-
shared_ptr怎么保证线程安全?(本身不能保证,要加锁)还有其他方式吗?(c++提供了atomic库支持一些原子的操作,但是没用过)
-
锁在操作系统怎么实现的?
内核标志位,硬件指令保证原子性,比如tsl
-
什么情况下会产生死锁?(四个条件)
-
怎么避免死锁呢?(让我讲银行家算法,乱讲一通)
-
linux系统是靠什么来管理进程的?(pcb, 即代码实现中的task_struct)
-
那进程怎么通过task_struct来找到虚拟内存的呢?
task_struct中有个mm_struct结构体就是专门来描述进程的地址空间的
- 内核线程和用户线程有什么区别?(这里回答偏了,说成了内核态线程和协程)
- 系统启动的1号进程是什么?(init进程)那2号呢?(不知道,答案好像就是内核线程)
- 内核栈和用户栈有什么区别?分别存的是什么?(用户栈是函数栈帧,内核栈没说清楚)
- 系统调用的是什么?系统调用函数的栈帧存在哪儿的?(用户栈)
- 系统调用的中断现场保存在哪儿?
答案就是内核栈,但是答错了,说应该有tcb
- 内核线程和用户线程怎么区分的(task_struct中有flag,猜对了)
- 内核current了解吗(真不知道,投降)
- 进程怎么通过task_struct中的信息访址的?
mm_struct中有PGD指针,然后四级页表
- 四级页表里面分别是什么?页表条目只有地址吗?
还有一些标志位,比如标记为脏页
- TLB命中和未命中会怎么样?
- 你觉得刚刚讲的里面会有发生什么异常吗?(page fault, 会发生换入换出)
- 有哪些换入换出算法呢?怎么进行的?(LRU, 如果页表使用过需要刷脏)
- 操作系统是怎么管理内存的呢?比如malloc是怎么申请的?
brk和mmap,除了暴露给程序员的可用空间的起始地址之外,还有个header来记录快大小和是否被分配
- 什么时候会发生segmentation fault, 数组越界一定会发生吗?
不一定,要访问到非法的地址才会,这里又扯了很久
- mmap的单位是多少(4KB)
- 知道哪些allocator?(TCmalloc)
- 知道哪些磁盘调度算法?(不知道,其实磁盘io那部分压根没看)
- 对安卓了解多少?
写过安卓应用,Activity, Listener, MsgHandler
- 在校成绩怎么样,觉得自己想做哪方面的工作?
- 学校什么时候开三方?
- 手里面有哪些offer?
此时已经不想面了,估计也不想要我,后面随心所欲不逾矩了
- 为什么没有去华为呢?(投了,还没结果)
- 想过去嵌入式或者车企之类的吗?
- 觉得小米怎么样?
没用过小米手机,觉得小米的平衡车踩着很方便,面试官一声叹息
- 反问什么时候有个结果
说今年每个组仅有个位hc所以会排序,就是捞不到我吧…