面经中高频知识点归纳(二)

前言:

经历过热火朝天找暑期实习的近两个月,大家看起来都忙忙碌碌,好不充实!而陡然回首发现自己并没想象中那么充实,虽然每周在向老板汇报着学校的主数据管理项目,学习着一些新的东西(主要是java方面),还算有些收获,可是慢慢发现总感觉缺少了些什么东西,到底是什么原因呢?

1、可能最近学习java的精力投入的比较多,而自己之前主要是搞c++的,这种分心给我带来了一定的茫然感,需要平衡!

可能的解决方法:学习java的同时不能丢掉c++的老本,结合java语言来看c++或许能带来更好的理解,需要克服,能一心多用到融汇贯通,加油!

2、也许是最近没怎么参加面试,没有之前不断刷题->夯实基础->积累笔经&面经的那股充实劲了而觉得不在状态

可能的解决方法:每天还是要抽出点时间来刷题或夯实基础,不能真实去面试积累经验也可以通过看看别人好的面经来弥补下!

参考文章:(来源于牛客网)

来说说我暑期找实习的事儿吧(搜狗、百度、网易等公司电面面经)

百度2016实习生面经(3面已过)

计算机网络&操作系统相关:

1、分析下打开www.baidu.com网站的所有过程

参考答案(详细见链接)

2、socket通信过程

参考答案

3、说说操作系统中,堆和栈的区别是什么?

参考答案

4、听说你了解操作系统,来说说linux系统启动后内存分配是咋样的吧?

参考答案:http://blog.sina.com.cn/s/blog_6d50a05801017d34.html

http://www.cnblogs.com/leaven/archive/2010/12/03/1895134.html

5、进程和线程的区别是什么?

参考答案:(仅仅是教科书般的回答是不够的,最好结合你实际使用去回答,说出这两者的区别)

 

(1)进程是系统进行资源分配的基本单位,有独立的内存地址空间; 线程是CPU调度的基本单位,没有单独地址空间,有独立的栈,局部变量,寄存器, 程序计数器等。
(2)创建进程的开销大,包括创建虚拟地址空间等需要大量系统资源; 创建线程开销小,基本上只有一个内核对象和一个堆栈。
(3)一个进程无法直接访问另一个进程的资源;同一进程内的多个线程共享进程的资源。
(4)进程切换开销大,线程切换开销小;进程间通信开销大,线程间通信开销小。
(5)线程属于进程,不能独立执行。每个进程至少要有一个线程,成为主线程

6、锁是什么,死锁是什么一回事?

参考答案:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。

产生死锁的原因:

(1)因为系统资源不足。
(2)进程运行推进的顺序不合适。    
(3)资源分配不当。

产生死锁的条件有四个:
(1)互斥条件:所谓互斥就是进程在某一时间内独占资源。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

7、你对网络了解?那你说一下HTTP是有状态的还是无状态的?为什么?

参考答案:HTTP是无状态的协议。什么是无状态和有状态。这个可以在网络的相关概念中找到。有状态是指下次传输能够“记住”这次传输的能力。而HTTP每次传输都得重新建立链接。

8、说一下Session和Cookie的区别?现在主流的服务器使用的是哪个?

参考答案:Session是将用户提交的信息存储在服务器上。Cookie是将用户的信息存储在本地。第二个问题我不太清楚。面试官说,现在流行用Cookie,因为使用Session的话对服务器的开销很大。

其他参考

9、说一下HTTP的两种方法?有什么区别?

参考答案:get和post方法。两者的区别就是地址栏里,利用get获得的参数会显示在地址栏,post则不会。post传输的数据量更加大一些。后来面试官出了 一个题目,大概意思是说地址栏中的参数值是1,而表单里面的参数值是2,分别用get和post提交,提交后的参数值是多少?

附:浅谈HTTP中Get与Post的区别

HTTP 请求方式: GET和POST的比较

10、进程间通信有哪几种方式?(我说了管道、共享内存、信号量等)说一下管道的原理是什么?线程的通信方式是什么?

11、epoll,select听说过吗

数据结构与算法相关:

1、说一下数据结构中,栈的实现方式?队列的实现方式?

回答这个问题,首先要知道栈的数据结构,很多人都知道栈是先进后出的数据结构。但是不知道具体怎样实现的。就比如说你需要知道栈定义的结构体是怎样,然后才好说操作是怎样的。我主要说了一下pop和push的操作。队列的问题也是一样去回答,入队和出队操作是怎样的。

参考答案:待补充!

补充:说说你对栈的理解?(今天自己携程电话面试被问到了,一说栈大家其实大概知道是什么东西,但是要将其解释清楚还需要结合使用场景进行描绘)

参考答案:栈,是硬件,主要作用表现为一种数据结构,是只能在一端插入和删除数据的特殊线性表。允许进行插入和删除操作的一端称为栈顶,另一端为栈底。栈按照后进先出的原则存储数据,最先进入的数据被压入栈底,最后进入的数据在栈顶,需要读数据时从栈顶开始弹出数据。栈底固定,而栈顶浮动。栈中元素个数为零时称为空栈。插入一般称为进栈(push),删除则称为出栈(pop)。栈也被称为先进后出表,在函数调用的时候用于存储断点,在递归时也要用到栈。

在计算机系统中,栈则是一个具有以上属性的动态内存区域。压栈的操作使栈顶的地址减小,弹出的操作使栈顶的地址增大。 栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常被称为堆栈帧。栈一般包含以下两方面的信息: 
(1)函数的返回地址和参数。
(2)临时变量:包括函数的非静态局部变量及编译器自动生成的其他临时变量。

2、说一个你最了解的算法,算法过程和算法复杂度

参考答案:可以选择一种或几种排序算法,然后叙述一下排序过程以及对时间复杂度和空间复杂度进行分析!

待补充!

3、有这样一个序列,先增后减,从这个序列中找出最大数?

参考答案:借鉴二分查找的思想。首先取中间数,再取中间左边一个数和右边一个数,如果这个中间数比左右两边都大,那么它就是最大数;否则,如果左边数<中间 数<右边数,那么取右边的那段序列,重复二分查找再取中间数;如果左边数>中间数>右边数,那么取左边那段序列,重复二分查找取中间数。

4、有一个无序数组,从中找出第K大的数?

参考答案:这个问题我首先想到的一个是《编程珠玑》上的一个方法。如果这个问题对空间没有限制,那么可以申请与原来数组一样大小的数组空间,这个数组空间是有序的, 比如说从1到n。然后遍历一遍那个无序的数组,将数字填写到对应位置中去。例如,3填写到3位置,5填写到5位置。那么整个遍历过程是O(n)时间,而且 我相当于把失序的数组再排序了一遍。找到第K大元素只要O(1)时间就行了,所以复杂度是O(n)。面试官听了以后,感觉可以。但是又不是他想要的答案, 他说你听说过快排没有?我说听说过,他说你可以从这个里面借鉴一下。这个方法百度一下就有,此处略。

5、在一个二叉树中,找出两个子节点的第一个公共父节点?

参考答案:这个问题本质上是找出两个链表中的第一个不同元素。首先,用树的遍历找出含有这两个子节点的两条路径。两条路径其实两个链表。然后,找出第一个不同的元素即可。这个元素前面的元素就是相同的元素,也就是第一个公共父节点。

6、给你一个数学表达式,例如1*2+3/4,请说一下你怎么进行处理来得到计算结果?

7、编程题:数字转字符串输出
8、不使用数学函数开方运算的情况下,求解开方运算

C/C++相关:

1、说说C和C++在函数上的区别
 参考答案:C和C++的函数没有区别(不过它们的编译函数的结果可能不同,比如函数foo(int x,int y)编程器编译为_foo,而C++编译为_foo_int_int,所以一般混用函数的话,最好要增加extern关键字,解决编译器问题,其他的都差不多~)
C没有类,有类似的结构体
C++ 类就是一种抽象,就好比人类,是一个类,人类具有某些特性,对象是按照这个抽象实际创造出来的东西
 
2、知道C里面有extern这个关键字吧,说一下他的用法?他和include有什么区别,用哪个更好?
extern(百度百科解释得还比较详细)可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。(另外,extern也可用来进行链接指定。)include是直接引入一个文件,凡是这个文件中定义的变量都能使用。

3、听说你懂C,来说一下memcpy的缺陷是啥?

参考答案:
首先,作为c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
memcpy的缺陷在于,@1.复制过程中,有可能因为字符串过长,目标地址正好指向源地址字符串的某个位置上,那么当复制到这个位置上的字符时,会造成数据修改,也就是此时的数据已经不是原来的那个数据了。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针.
@2.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
4、说一下C++中,虚函数和纯虚函数的区别是什么?
参考答案:纯虚函数没有函数体。虚函数有函数体,能够在继承的时候,被子类覆盖。
 
 
数据库相关:
1、你对MySQL了解吧,那你说说怎么样提高数据库的搜索效率?

 参考答案:

Java有关:

1、说一下Java中的继承,类,接口
参考答案:Java中支持单继承,这是和C++最大不同的地方。所以Java中鼓励使用接口。这样做的好处在于,把接口暴露给调用接口的人,而使用接口的人不需要知道接口具体怎样实现。达到分层解耦的目的。
2、说一下Java的垃圾回收机制
参考答案:Java中的垃圾回收主要分为三层,年轻层,年老层和永久层。年轻层和年老层分别使用不同的垃圾回收算法。
3、说一下Java中同步的问题, synchronized的用法
4、SSH框架中,请说一下Spring的注解是怎么实现的?
5、hashcode的作用是什么?
6、请说一下java中的一些常用函数。
 
其他:
1、来讲讲你大学里做的项目吧,就具体某一个好了。
整理:与面试官交流项目的时候,面试官虽然不懂你的项目具体做什么,但是对你怎样分析问题和解决问题的能力非常看重。面试官会围绕你说的话不断提问题。比如说,你说一个你在项目中用到的数据结构,她就会问你为什么要用这样的数据结构,有什么好处。又或者你说一种做法,她就会问你为什么这样做,这样做的意义是什么。总之,以后做项目有想想为什么,为什么这么做,这样做的意义是什 么,为什么不用另一个东西做而要用这个东西做。
 
2、围绕公司中遇到的实际问题,说一下你的看法。我觉得这样的题目实际上是看你的逻辑思维能力是否缜密,说话是否有条理。具体问题如下:
(1)我部门的搜索业务需要用到模糊词检索,比如说输入一个字符串“ABD",系统认为你其实想搜索的是“ABC”。请问,实现该怎样实现模糊词检索,从数据结构、算法、评价三个方面讲述;
(2)爬虫算法,例如我现在登录大众点评,请帮我把所有有关店铺的链接都爬出来;
(3)在我爬到的结果中,有些结果描述的其实是一个东西,请帮我把找出来。
参考答案:
面试官在第(2)个问题给我的解答是:你在爬URL的时候,提取URL字串里面的关键字就行了,一般的商铺都是用shop来标注的。第(3)个问题,面试 官说其实很好弄,大部分描述既然说的都是同一个东西,你只要去检索描述不一样的东西就行了。
 
 
 
待更新!
原文地址:https://www.cnblogs.com/carsonzhu/p/5496162.html