58同城实习面筋

实习面试过程中总结的一些面经:

面经1

1.一块内存分为几块

一块内存在逻辑上分为用户空间和内核空间,用户空间通过虚拟技术为每个进程分配不同的逻辑空间,进程逻辑空间包括:代码段,数据段、未出化数据段bss,堆空间、栈空间,他们是通过段页式的管理方式映射到物理内存;内核空间则是通过线性平铺的方式映射物理内存。

2. STL sort原理(内省排序,插入、快排、堆排,快排比堆排快,局部性原理)

插入排序:直接插入排序,复杂度O(n)
快速排序:复杂度O(nlgn)
堆排序:复杂度O(nlgn)

其中直接插入排序是稳定的,其他的两个都是不稳定的,一般STL底层的排序是使用的快排,因为从统计上它的性能较其他的有优势,当排序的数量较小时,采用的是直接插入排序

3. deque和list的区别

4. 讲了下STL。

5. 手写atoi,写的有点小瑕疵。

6. 仿函数(函数对象)和 函数指针的区别,效率和扩展性。

面经2

上午面完一面,下午就开始二面。

1. 自我介绍

2. 了解linux下的C开发吗?如何查看一个进程有多少个线程。

58同城实习面筋

3. pstree offsetof container_of了解吗?全跟linux有关,不会

offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址

4. 如何快速比较两个字符串是否相等,我说直接o(n)遍历,或者异或每个字符,复杂度都是o(n)。他说可以通过类型转换,比如将4个字符转成一个int,然后相当于比较int是否相同,o(n/4)。

5. 写一个宏函数

6. 大端小端,写代码验证系统是大端还是小端 union来实现

7. 翻转单链表,手写。

8. 如何查看一个子进程的父进程状态,getppid();

9. cpu cache存的是啥(数据?)

10. 动态共享库和静态共享库,跟他说了下静态链接和动态链接。

11. 进程A如果可以访问到动态共享库中的全局变量,进程B能否访问到动态共享库中的全局变量

不懂,说可以访问,进程B这是没法访问进程A中的全局变量,因为进程之间的地址空间是独立的,然后他说这样的话,通过动态共享库是不是也就可以实现进程通信了?我一想,IPC通信没有共享库这玩意,没法解释

动态链接库的那段内存中可以访问共享的数据,而不是全局变量,通过pragma data_seg() 来表明这一段数据为共享数据来标识

12. 进程在内存中的内存模型,代码正文段、数据段(初始化和未初始化)、堆、栈段。

13. 问直播项目,如何在linux下开发的,我说在windows下开发移植过去的。

面经3

下午两点现场面的58,总共两轮技术面+一轮HR面

一面:

1.自我介绍,说一个你最擅长的项目
2.做这个项目的目的,说一下你负责的部分,最大的难点是什么,你怎么解决的,你从项目中学到了什么
3.数模中用到了什么语言,你负责的部分,用了什么工具,好处是什么
4.最近有没有学习新技术,怎么学的,看过哪些书
我说最近在看redis和算法,JVM
5.看了JVM之后,对Java有什么新的看法
6.知道哪些排序算法,快速排序和归并排序的区别,适用于哪些场合?堆排序呢?
7.TCP建立连接为啥需要3次握手,关闭连接需要4次挥手?
8.以前有实习过嘛?
9.你还有什么想问的,,,楼下等二面吧

面经4

58同城一面面经

1、项目
2、3次握手
3、socket和port的区别
4、给你一个大表,如何分成子表
5、算法题,找到数组中最大的数和第二大的数
6、算法题,如何判断一个数是2的n次方
7、还有什么想问的

58同城二面

存储ssd是怎么样分层次的
世界杯小组出线的题目如何做
题目的内容大概是,4个小组,头两名出线,赢一场积3分,平一场积1分,输一场0分,
问题:低于多少分肯定淘汰,高于多少分肯定晋级

思维解决:

1、首先来看,因为头两名晋级,那么需要考虑的是,对于最低分,那么让头组尽可能的分高,那么第二名分肯定尽可能的低,这样是最低的限度,所以可以假设,有一个队伍全部胜利,那么积9分,那么其余的队伍肯定就输了一场,第二名的队伍就在剩余三个队伍中选最低分,那么就是全部打平,也就是平局两场,积2分,2分则还有可能晋级,所以低于2分肯定不能晋级。

2、然后来看,高于多少分肯定晋级?
和1的方法也是类似,如果要头两名尽可能高分晋级,那么相当于有个队全败,这样可以尽可能让头两名达到高分, 这样只剩下三个队伍,三个队伍里面选投两名,分尽可能的高,胜利一场,败一场,这样的分是最低的,也就是6分,那么如果比这个还要高,那么肯定能晋级这个队。

3、所以最后的区间是【2,6】低于2分肯定淘汰,高于6分肯定晋级

编程的思想来解决:三个分就是三叉树
那么层数就是每个队伍比赛的场次,每个队伍比赛都有三种情况,根据每次比赛的不同情况,一共比赛6次,那么有了6次剪支的机会,最后保留剩余的叶子节点,看叶子节点的可能性,最后排序,选取头最低分和最高分,得出结果。
58同城实习面筋
所以遍历3^6次数,算出每种情况下晋级的前两名,然后把所有的前两名进行排序,最后给出最大值和最小值即可。