同花顺面试经验(搜索引擎C++后台研发)

1、为什么要网页查重 ,怎么查重

2、软 硬cache是指什么

3、多线程编程:互斥变量 和 条件变量 函数怎么写

4、网络编程: epoll干什么的,有什么功能

5、网络编程:select 和 epoll 的区别

6、网络编程:阻塞 非阻塞 区别

7、socket 多路复用是干什么的

8、客户端 connect的时候,如果 服务器忙,怎么办?(如何编码,才能定时进行重新 connect?)

9、任意字符串一次遍历,判断否是合法ip地址,写代码

10、10000条记录的文件  和 100条记录的文件,遍历一次,求交集记录,写代码

11、main 函数里面一指针 传参数给一函数 ,函数里用实参指针 new 一个数组 ,这样 对不对?

12、vim 替换一个字符串的命令 ,如将该行的 hello 替换成 hi

13、堆 栈 全局 上的变量的区别

14、描述gdb调试的过程

15、描述 TCP 握手 和 挥手 过程

16、客户端 cennect服务器 ,对于 服务器 的epoll来说意味着什么。

17、客户端的 socket 和 服务器的 socket 有什么区别

18、相比 c,cpp的各自的特点


堆和栈的区别
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、例子程序 
这是一个前辈写的,非常详细 
//main.cpp 
int a = 0; 全局初始化区 
char *p1; 全局未初始化区 
main() 

int b; 栈 
char s[] = "abc"; 栈 
char *p2; 栈 
char *p3 = "123456"; 123456\0在常量区,p3在栈上。 
static int c =0; 全局(静态)初始化区 
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20); 
分配得来得10和20字节的区域就在堆区。 
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 
}

二、堆和栈的理论知识 
2.1申请方式 
stack: 
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 
heap: 
需要程序员自己申请,并指明大小,在c中malloc函数 
如p1 = (char *)malloc(10); 
在C++中用new运算符 
如p2 = (char *)malloc(10); 
但是注意p1、p2本身是在栈中的。

2.2 
申请后系统的响应 
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时, 
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。

2.3申请大小的限制 
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

2.4申请效率的比较: 
栈由系统自动分配,速度较快。但程序员是无法控制的。 
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便. 
另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。

2.5堆和栈中的存储内容 
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。 
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。 
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

2.6存取效率的比较

char s1[] = "aaaaaaaaaaaaaaa"; 
char *s2 = "bbbbbbbbbbbbbbbbb"; 
aaaaaaaaaaa是在运行时刻赋值的; 
而bbbbbbbbbbb是在编译时就确定的; 
但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。 
比如: 
#include 
void main() 

char a = 1; 
char c[] = "1234567890"; 
char *p ="1234567890"; 
a = c[1]; 
a = p[1]; 
return; 

对应的汇编代码 
10: a = c[1]; 
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 
0040106A 88 4D FC mov byte ptr [ebp-4],cl 
11: a = p[1]; 
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] 
00401070 8A 42 01 mov al,byte ptr [edx+1] 
00401073 88 45 FC mov byte ptr [ebp-4],al 
第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。

2.7小结: 
堆和栈的区别可以用如下的比喻来看出: 
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大


时间: 2024-11-11 17:41:44

同花顺面试经验(搜索引擎C++后台研发)的相关文章

资深后台研发工程师(转)

资深后台研发工程师 岗位职责: 1.负责搭建平台网络架构及技术架构: 2.把握平台开发方向和技术路线,解决关键技术问题: 3.负责与战略客户.合作伙伴的方案讨论,技术交流以及开发管理: 4.负责参与项目启动.项目计划.项目选型.项目实施.项目验收及项目内部总结等相关工作: 5.参与公司其它技术问题讨论与决策: 6.公司交办的其他事项. 任职要求: 1.5年以上互联网产品研发经验: 2.精通J2EE相关技术,编程基础扎实,熟悉io.多线程.集合等基础框架: 3.熟悉Spring, Spring M

去BAT,你应该要看一看的面试经验总结(转)

来源微信公众号『easyserverdev』 http://mp.weixin.qq.com/s/UZljzFMjobo1wzCguY7NDg 说下我的面试经验吧,都是亲身经历,不喜勿喷: 我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的. 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理.我本人也是上几家公司的面试官,因为接下来几年面临着成家养小孩,技术上也到了瓶颈期,虽然拿了不少offer,但是想综合

我的Android移动端面试经验分享,大厂面试题总结:阿里腾讯美团

前言 不得不说,前两年的移动开发确实很火,可以说随便能鼓捣出来点东西都很容易找到工作.而现在明显降温了,对人才的要求也越来越苛刻,所以跟前两年比需求确实少了很多.但是安卓不仅仅局限于手机,智能家居车载系统电视机顶盒智能机器人的触摸板设置大部分都是搭载的安卓系统,所以市场的需求还是很大的. 本文希望达到的目的是为职场新人和毕业生提供一个面试经验的分享,使读者在找工作时有一个参考少走弯路,通过本文的阅读将收获到: 面试前的准备,简历编写规范和重点: 面试经历,大厂和小厂的区别和考察点: 安卓面试常问

2015阿里巴巴春季Java实习生面试经验

2015阿里巴巴春季Java实习生面试经验 一.笔试 大概今年四月初的时候在线进行了笔试,笔试题目都是考基础的,包括数据结构.计算机网络.操作系统.数据库原理等,Java基础的话不用说,个人建议可以去看一下<Java编程思想>这本书,这本书提到了许多细节的东西,是初学者提升Java基础的一本好书. 网上笔试不久,就收到了阿里的短信和邮件,说我通过了网上笔试和简历筛选,并叫我到网上去预约时间,我登录到网上的时候才发现,距离面试时间(5月5日~5月7日)还有差不多一个月的时间,因为我选择的面试地点

虎牙直播面试经验总结

1.虎牙直播黑盒测试面试经验总结 (1)首先,自己打印简历,最好是彩色版的(签到交简历时,有人是黑白色简历打眼一看很不舒服,尤其是有证件照的,黑白?呵呵,我们好像不缺这一块钱吧),邮件上写自带简历和黑色签字笔(意识大意忘记拿了,因为面试本来就没有啥经验,现在又忘记带签字笔,人更加方了,最后找人前台借了一只,虽然没有用到签字笔) ---------------总结1:出门一定要检查是否落下东西,像我粗心的这种可以看着邮件要求检查是否齐全,不然到时候如果面试地点人生地不熟,连个小超市都找不到,拿什么

面试经验-总集

一 Java后端 面试经验合集-Java后端<一> 二 产品经理 三 Web前端 四 经验与教训 1.明确岗位,禁忌海投. 海投事倍功半:无法聚焦.深耕于喜欢的岗位. 原文地址:https://www.cnblogs.com/johnnyzen/p/10201740.html

2019年六月前端面试经验总结

四月底从上家公司离职,五月六月陆陆续续面试了十几家公司,也拿到了几个offer.总体来说大环境和就业形势还是比较不乐观的,面试的人多,而招的人少,对前端的的要求也比以往要高,这些先不具体讨论,这里主要将各个公司面试时考察的技术点做一个归纳总结,方便大家面试时作为参考,也进一步巩固基础,查漏补缺. [前端基础] JS js 事件循环(宏任务.微任务.setTimeout) js 作用域.作用域链 闭包 This 指向问题 new 操作具体做了哪些事情 开发中用到了 ES6 的哪些新特性 js 实现

面试经验总结,每个求职者应该具有的职业素养

终于,可以确定自己可以拿到人生中的第一个offer了,算不上好,也算不上坏吧. 然后,晚上和一个已经工作两年的哥聊了聊我自己的求职经历,听完后,他给我提出了自己在近期求职中的一些缺点以及对未来人生的一种准备.回到家,赶忙自己总结了一下一些面试经验.(注意:不是教你如何去面试,而是强调的是你个人的求职素养以及做人做事的原则,可能有点笼统,但我相信不论哪个行业,那个职位,这些素养是你应该具有的) 1.做事前,有计划,有准备. 1.1了解市场行情,所在行业的平均工资 1.2了解工资的计算 1.3了解房

分享一下我的面试经验

第一次面试的时候,也许很多人会非常紧张 今天就由我跟大家分享一下我的面试经验 我们还是先从最开始的简历说起吧,先来让大家看下我的简历吧(仅供参考) 有哪些可以作为你的简历加分项?Github个人主页.Github点赞数.Fork数目.StackOverflow.CSDN账号.博客园账号.开源项目.写文章等等,这些都是非常有用的学习证明,所以平时应该多去活跃社区作贡献,开源自己的项目. 面试前准备好了,接下来我要开始说重点.切记,一定要刷题!一定要刷题!面试题肯定是必不可少的,往往这就决定了你这次