柠檬微趣暑期实习一面/二面面经

纯八股一点项目没问,也是挺少见的,柠檬是个好公司,有点想要痛哭流涕当时oc了最后没去,感觉怪不好意思的,秋招应该也不会再投他们家了,发出来攒攒好运

柠檬一面+二面
4.2投递,4.12笔,4.24一面,4..28二面,

一面
1.逻辑右移和算术右移的区别?
2.一般有符号整数的编码方式?
3.补码的规则是什么?
4.为什么采用补码去记有符号整数
--这个确实没想起来,说了可以首尾成环,可以连续表示什么的……
(搜了下其实主要是解决原码和反码的问题(无法统一加减法,零的歧义,溢出不好判断等问题)
5.有符号整数,正数和负数的值域不同,为什么会这样?
--我说有正数这里会有0的存在,
(实际更好的回答,是说原本原码和反码有双0的歧义,补码没有歧义,原本表示-0的10000000在补码中被定义为-128)
6.浮点数在计算机里是怎么存的(1+8+23,怎么组合忘了)
7.描述一下快速排序
8.快排的nlogn是怎么推出来的
9.最差的情况下会退化成?
10.稳定还是不稳定?为什么不稳定
11.STL,挑一些容器说一下内部实现原理(说了vector,list,map,unordered_map)
12.Vector怎么扩容
13.什么情况下,即使不有序也不会考虑使用哈希表存储数据?
--一时半会想不到,说了哈希表可能存在严重哈希冲突导致退化成O(n),还有就是哈希表内存可能占用更多
(还有吗?)
14.哈希表怎么知道哪几个元素发生冲突了?
15.Const Static Inline 说一下使用场景
16.C++多态如何实现?
17.虚函数作用原理
18.构造函数可以是虚的吗?析构呢?静态函数可以是虚的吗?

手撕:获取二叉树最大深度的所有结点(用的层序遍历)

二面:
自我介绍略

1.一上来直接让我定义单向链表的数据结构(结构体)
2.创建一个ListNode,创建在哪个内存?说下开辟的内存大小
3.关于这个内存对齐还有哪些方面能再具体讲一下吗?
--主要补充了内存对齐优缺点,以及pragma_back调整内存对齐
4.关于堆和栈的区别有哪些,能再讲一下吗?
5.对于堆内存的管理手段,有哪些你知道的呢?说一下
--除了new malloc这些,还说了两级分配器和内存池
6.你刚说的这种做法有什么好处?
--减少new/malloc调用开销,降低内存碎片
7.你刚刚提到的内存碎片是怎么一回事?
--说了内部碎片和外部碎片

后面重点开始了
8.用ListNode创建两个单向链表,两个单项链表有任意个公共节点 (0~无穷),画出有哪些组合(看图2)
一开始的储备只有1,2,3,4,5,6,网上不少文章也是这样的,但面试官提示,有9种。后面磕磕绊绊临场把7,8,9考虑出来了

9.假设已知只有两个链表的头结点,怎么确定具体是其中哪一种。
临场的解决思路是,(仅供参考)
首先要看是否有环(快慢指针),
然后仍然要算结点数量,长度,(如果有环的话,需要找到入环位置,确定有效的结点数量)
无环情况比较好区分,就是长度差先后走的那一套
有环情况:
1)如果两表循环能回到自己的头结点,可以得出 8。(8其实就是同一个环,不同头结点位置)
2)然后5是2的变体,7是4的变体,9是1的变体,就看开始相交的位置和入环口的关系(9其实有两种情况,一种是两个都有环外部分,另一种是,一个为环,一个有环外部分)
3)排除所有其他情况最后为6.

10.中间顺便问了下怎么看是否有环,如何找入环位置等常规问题。

前后这里口述扯了有20分钟,面试官有一定引导,也还算宽容
手撕:给一个7x9的棋盘,选一个位置,围绕这个位置顺时针开始放数字,放30个数。其余置0。注意考虑边缘情况。

我没找到原题,个人的思路大概就是螺旋数组II那道题的思路,大循环内4个小循环添数字。注意要加一点判断,如果超出了7x9的边界,那么就跳过,num就不会增加。(仅供参考)
全部评论
我至今还记得柠檬,官网写着面试考察中还是什么来着,但是我一直没收到消息,过一阵子再进去,流程又从头开始了。
点赞 回复 分享
发布于 08-28 21:18 北京

相关推荐

卖挂面鸡蛋不锈钢盆:top2 就发面试的年代已经一去不复发了
投递快手等公司10个岗位
点赞 评论 收藏
分享
08-29 22:26
复旦大学 C++
野猪不是猪🐗:这种有一定名气,但是业务面又窄的中厂是最难进的。前者注定了会有很多人投它,而后者注定了它不会有太多hc
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务