网易互娱平台开发视频一面面经, 与大家共勉吧

我投递的是互娱的平台开发, 这次的电面是视频面试, 总体来说, 面试问题本身不难, 感觉实在是有些答的一般, 或许过不了吧.

面试一开始, 面试官询问了许多在实习时的问题, 数据库ACID类似, 而后问了问static关键字, 堆栈上会存放的东西(临时变量, 返回地址, 以及函数返回值), 程序组成(堆, 栈, 数据段, 代码段). malloc和new的区别, 读过Redis, 说说Redis中的数据结构, 我只看了Redis的时间事件以及文件事件.sds(简单动态字符串), 可是面试官问set(真的没看过). socket编程(过程中使用到的函数socket, bind, listen, accept..), 然后问, recv如何知道已经结束, 绝望啊, 我说tcp是一种流式的, 如果你想将数据分段, 必须要自己添加分隔符, 我说这个有什么场景吗, 他说就是一般的socket编程吧. 问题实在不大懂, 可能没答道点子上

你说你用了三年linux啊, 常用命令有哪些, 统计一个文件夹下的.c文件的代码行数, 先是用cat .c | wc -l , 面试官说, 你这样要把所有代码都载入内存中啊, 我说, 我明白您意思了, 我用xargs, 最后 ls ,c | xargs wc -l 也算解决了问题.

知道set的底层实现吗, 我说, 我知道, 是红黑树, unsort_set是用hashtable实现的, 而后问我, 红黑树和hashtable有什么不同, 我说, 红黑树中的查找效率基本很平均, 而且是排好序的, hashtable适用于点查询, 而且红黑树可以向前向后遍历, hashtable只能向后遍历.

而后又问, 你说你看过epoll, 说说为什么要用epoll, 又把select的问题, 以及epoll的适用场景, 又给自己挖坑说读了一点epoll的代码, epoll是使用了回调机制, 面试官又问, epoll是怎么实现回调机制的, 我说, linux中的文件结构体有一个poll函数, 读写的时候会被调用, 回调函数就是通过他实现的, 看epoll已经是一个月之前的事情了, 答得支支吾吾.

而后面试官问了一道题目, 在一个数组中, 除了一个数字出现了一次, 其他数字都出现了2次, 但是这个数组是排序好的, 刚开始没看到后面排序好的. 我说, 直接抑或, 他说时间复杂度多少, 我说O(n)啊, 他说有没有更低的. 我震惊了, 别逗我啊, 这个至少要遍历一次吧, 他说, 你看一下, 这是排好序的, 我说那两个指针, 一个在前一个在后,可这也是O(n)啊. 然后又读了一遍, 发现可以二分解决, 因为只有一个数字出现了一次, 所以每次二分之后, 只要看中间数字与左右两边是否相同, 如果相同, 进行分割, 哪一部分长度为奇数, 说明数字在这一部分, 最后代码也算写完了, 不过, 感觉这样的答题不好.

你说实现过红黑树, 我说是的, 那插入,删除,查找的时间复杂度, 我balabala半天, 都是Olog2(n), 我还讲了讲删除时的一点细节.

而后又问, 你知道segmentfault, 我说, 我经常见到, 那你给我说说这个底层是怎么回事吧, 我说, 我是经常遇到, 可我确实没看底层, 一般遇到了就用gdb调试看看, 找到了错误位置就去解决了, 所以真的没看.

面试官最后说, 如果能够继续, 3天之内会有结果的, 如果没有结果, 说明基本是结束了, 料想是结束了, 与大家共勉吧.

面试期间我一直说抱歉, 这个那个知识点确实不会. 其实也不是不自信, 就是感觉面试官问问题时是期望我能答的出来, 可是有点辜负人家了, 所以才抱歉. 还是希望未来能好好努力, 争取都答出来吧.

#网易#
全部评论
其实我觉得蛮不错了!
点赞 回复 分享
发布于 2017-09-27 20:39
感觉面的好难- -
点赞 回复 分享
发布于 2017-09-27 20:50
昨天也进行了二面,感觉你这个好难a。应该就两面吧?
点赞 回复 分享
发布于 2017-09-28 07:48
26号面了平台研发一面,然后就没有后续了。难度和你这一样。感觉平台研发的面试难度比游戏研发要高啊。=,=
点赞 回复 分享
发布于 2017-09-28 08:50
哥们收到复试通知了么。我收到了个十月中旬现场面的通知。
点赞 回复 分享
发布于 2017-09-29 14:59

相关推荐

 CPU、寄存器、缓存、内存概述- CPU:中央处理器,执行指令的核心组件。- 寄存器:CPU内部的临时存储空间,存放快速访问的数据。- 缓存(Cache):在寄存器和内存之间的高速存储,分为三级(L1、L2、L3),速度和价格依次降低。- 内存:主要存储程序和数据的地方。数据访问流程1. CPU首先在寄存器中查找数据。2. 如果寄存器未命中,则检查缓存。3. 如果缓存未命中,则从内存中获取数据。内存区域- 栈区:  - 存放函数参数和局部变量。  - 由编译器自动分配和释放,效率高,但内存量有限(如iOS中为2M)。- 堆区:  - 通过`new`、`malloc`等动态分配的内存。  - 需要程序员手动释放,可能导致内存泄漏。- 静态区:  - 存放全局变量和静态变量。  - 程序结束时由系统释放。- 常量区:  - 存放常量,不允许修改。  - 代码区:  - 存放函数体的二进制代码。类型说明符- 基本类型:`void`、`char`、`short`、`int`、`long`、`signed`、`unsigned`、`float`、`double`、`struct`、`enum`、`union`。- 存储类型:`extern`、`static`、`register`、`auto`、`typedef`。- 类型限制符:`const`(只读)、`volatile`。变量理解- extern:指示变量在其他文件中定义。- static:  - 限制变量作用域。  - 局部变量存入静态存储区,延长生存周期。- register:将频繁使用的变量放入寄存器以提高效率。- auto:C语言默认存储类型。- typedef:给类型或变量表达式起别名。- const:只读变量。- volatile:  - 防止编译器优化。  - 适用于中断和多线程环境。C程序内存分配- 堆、栈、静态存储区、文件分配区(常量字符串)、程序分配区(二进制代码)。 sizeof与strlen- sizeof:关键字,返回类型或数组的字节大小。- strlen:计算字符串长度,直到遇到`\0`。 函数参数传递- 值传递、引用传递、指针传递、数组地址传递。Const、指针、基本类型组合的意义- const int x:只读变量。- const char *x:指向常量的指针,指针内容可变,指向内容不可变。- char *const x:常量指针,指针内容不可变,指向内容可变。- const char *const x:指针和内容均不可变。 数组与指针- 物理地址:内存单元的真实地址。- 逻辑地址:CPU生成的地址。 Linux进程间通信- 管道(pipe)、信号量、消息队列、信号、共享内存、套接字。 strcpy与memcpy区别- strcpy:复制字符串。- memcpy:复制指定长度的内存内容。 内存泄漏与内存溢出- 内存泄漏:未释放的内存,导致可用内存减少。- 内存溢出:程序请求的内存大于可用内存。 switch的变量类型限制- 允许:整形、布尔、字符、枚举。- 不允许:字符串等非基本类型。 防止头文件重复调用- 使用#ifndef和#pragma once。 实时操作系统- 示例:FreeRTOS、Ucos。 指针数组与数组指针- 指针数组:数组元素为指针。- 数组指针:指向数组的指针。 结构体自增与双重指针自增- 自增从右向左进行。 寄存器的使用- 存储频繁调用的数据,减少内存访问。 获取全局变量与局部变量地址(gdb)- 使用backtrace或bt命令。 进程中的同步与异步- 同步:通过锁实现。- 自旋锁:忙等待,不阻塞线程。- 互斥锁:阻塞线程,等待资源释放。进程与线程的关系与区别- 进程:资源分配的基本单位,包含一个或多个线程。- 线程:进程中的执行单位,最小调度单位。树的遍历(递归与非递归)- 中序遍历:左子树 - 根节点 - 右子树,利用堆栈进行进栈和出栈操作。剩余的大佬面经总结了  链接在下边https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
点赞
20
分享

创作者周榜

更多
牛客网
牛客企业服务