校招 未知部门 / 测试开发 / 一面/二面/HR面

[面试日期] 2024-12-24 [面试时长] 未知
[学校背景] 华中科技大学 | 985 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>暑期实习:美团 测开+答案 (一面 二面 hr面)</h2> <p>虽然是做嵌入式的,当时特别慌所以测开我也投了,而且美团的流程特别快,一周就拿到了offer,也为我稍稍缓解了一些找工作的焦虑,让我们一起感谢美团!</p> <h2>一面</h2> <ol> <li>自我介绍</li> <li>算法:有序链表合并 leetcode的解法,基本都这样</li> </ol> <pre><code>class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == nullptr) { return l2; } else if (l2 == nullptr) { return l1; } else if (l1-&gt;val &lt; l2-&gt;val) { l1-&gt;next = mergeTwoLists(l1-&gt;next, l2); return l1; } else { l2-&gt;next = mergeTwoLists(l1, l2-&gt;next); return l2; } } }; </code></pre> <ol> <li>测试用例怎么写</li> </ol> <p>这个主意就是一些边界条件,指针空啊,数据不合理啊,数据的类型不合理啊啥的,这个多刷刷算法,应该会有比较多的认识,我感觉这个言之合理就可以,因为我也是按照刷算法的时候经常没考虑到的边界情况来说的~</p> <ol> <li> <p>时间复杂度计算</p> <ol> <li>一个for 就是n,嵌套几个就是几次方</li> <li>二分是log,</li> <li>其他的是1</li> <li>如果是嵌套关系就是乘,并列关系就是取复杂度高的那个</li> <li>然后记一下常见的几种算法的复杂度</li> </ol> </li> <li> <p>指针和引用</p> <ol> <li>区别</li> </ol> <p>一个是地址一个是别名,初始化不一样,然后就可以从使用的角度说一下,引用可以避免拷贝啊,不用解引用啊啥的说说。</p> <ol> <li>自增的意义的区别</li> </ol> <p>指针自增就是指向下一个地址,引用自增是那个数据增加</p> <ol> <li>指针没有做类型检查</li> </ol> <p>指针会做类型检查,但是可以强制转换来绕开,不是特别严格。</p> </li> <li> <p>写代码的时候如何处理异常 空指针这种可能出现风险的地方会如何处理</p> <ol> <li>首先是要有良好的编码习惯:new 和 delete配对,不要用悬垂指针、空指针、野指针等等吧</li> <li>做好异常处理</li> <li>可以用一些工具检查,AddressSanitizer等等吧方便检查</li> </ol> </li> <li> <p>异常捕捉方式</p> <ol> <li>catch中需要写些什么内容</li> </ol> </li> <li> <p>析构函数的理解</p> </li> </ol> <p>可以看看《程序员的自我修养》里面对析构函数有很底层的讲解~。我先抛砖引玉一下,用一个段来存放这个类生命周期结束后,自动调用的用来做一些清理工作:释放资源等等吧。</p> <ol> <li> <p>深拷贝和浅拷贝</p> <ol> <li> <p>区别、底层实现的区别</p> </li> </ol> <ul> <li>深拷贝:把所有的都重新拷贝一份,重新分配一份动态内存,新旧对象拥有各自独立的内存,不会互相干扰、冲突,使用更安全,但拷贝代价更高</li> <li>浅拷贝:如果有指针啥的只拷贝指针,也就是说拷贝出来的会和原来的共享同一个动态内存。</li> </ul> <p>所以,<strong>浅拷贝后,释放了一个,如果另一个也释放就会出现重复释放的问题~</strong></p> <ol> <li>最主要的区别,是地址+值 和 只是地址么?</li> </ol> <p>是的</p> </li> <li> <p>static</p> <ol> <li>static修饰成员方法呢?</li> </ol> <p>放在text段,共用且不依赖实现可以<code>CLASS::STATIC_FUNC()</code>直接用,且在程序开始时就已经存在,直到程序结束,有点类似于区分命名空间的意思</p> <ol> <li> <p>static修饰变量内存分配?和其他变量有啥区别?</p> </li> </ol> <ul> <li> <p>和程序同一生命周期</p> </li> <li> <p>只在类内可见、共享</p> </li> <li> <p>放在数据段而不是栈上了</p> </li> </ul> <ol> <li>栈上是怎么开辟的?</li> </ol> <pre><code>int foo(int a, int b) { int x = a + b; // 局部变量 x int y = x * 2; // 局部变量 y return y; } </code></pre> </li> </ol> <p>其汇编如下</p> <pre><code>```asm ; 函数入口 foo: push ebp ; 1) 保护调用者的基址指针 </code></pre>
AI 推荐面试题