您的位置:首页 > 职场人生

求职面试总结

2015-12-30 16:58 344 查看
从三月份的参加阿里实习生面试到现在10.16签到创维,我认为其实做任何事情都没有捷径,但是绝对是有方法的:

        1.有名企实习生经历,如果能在三月份被录用到名企做实习生,相信你校招的时候根本不会有任何压力,很多企业都会给你绿色通道,到时候你只要把握好自己想进入的行业就好,行业最重要,工资次之。

        2.大学的成绩GPA  & 大学的大型竞赛(不仅限于编程)& 大学的任职及成就

        3.基本只是绝对要掌握扎实,熟练熟练再熟练。代码脱离了编译器也要能写的出来

        4.做好以上几点,好的offer绝对是一封接着一封,最后挑公司的时候最重要的标准就是行业了,我自己选的就是  深圳+智能家居,后面附上我在csdn的博客地址(http://blog.csdn.net/meetings?viewmode=contents),博客真的帮助了我很多,不止平时的学习,在面试的时候提出来也会给自己增加获胜的筹码。


下面的各种面试题都是我一场场面试总结下来的,望珍惜每一个题和知识点…

海量数据:

1.在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数?

2.给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

  40亿unsigned int,则用位图表示的话需要大小为40亿个bit=4*109 bit=0.5*109 bytes 因此申请的内存只需要大小约为512MB左右,这样在内存每个bit代表一个unsigned int整数,并将每个bit初始化为0,然后将40亿个unsigned int的整数读入,每个unsigned int的整数对应bit设置为1,读入后,最后看所给定的数对应的bit是否为1,是1存在,否则不存在。

3.1亿中找到最大的100个

-------------------------------------------------------------------------------------

腾讯:

1、二叉树中序遍历非递归方法

2、两个有序的链表合并成一个链表

3、进程之间的通信

4、线程之间的同步

5、除了MFC,做界面编程工具你还用过哪些

6、消息的处理过程

7、postMessage和SendMessage的区别

8、自定义一个控件,该怎样实现

9、C++的多态体现在哪儿

10、const struct * 和struct * const 的区别

-------------------------------------------------------------------------------------

阿里:

1.stl中vector怎么实现的,如果存满了怎样动态增长,

如果有经常不用的数据怎样缩减(1M->1K)  stl庖丁解牛

2.malloc/aclloc(怎样优化的)/relloc

3.TCP怎样实现可靠连接,如果数据报文乱序怎么处理的

4.const int a; 

  int const a; 

  const int *a; 

  int * const a; 

  int const * a const;

5.1到1亿的数,问队尾的元素是啥,你可以操作除了队尾之前的所有元素

-------------------------------------------------------------------------------------

scanf中的%[^\n]%*c格式

原型:int scanf( const char *format, ... );

字符里面可能有空格、制表符等空白字符,如果直接用%s是不可以的,于是有些人就想到用gets(),当然这也是一种选择,但是懂C的人基本上都知道gets()是一个很危险的函数,而且很难控制,特别是与scanf()交替使用时前者的劣势更是一览无余,所以gets()一般是不推荐用的,其实用%[^\n]就可以很好的解决这个问题了,^表示"非",即读入其后面的字符就结束读入。这样想读入一行字符串直接用scanf("%[^\n]%*c",str);就可以了,*"表示该输入项读入后不赋予任何变量,即跳过该输入值。%*c的作用是读入\n,否则后面读入的将一直是\n。"

-------------------------------------------------------------------------------------

华为:

1.给一个整型数组,求这个数组中比平均值大的数的个数。int fun(int* input, int len)

2.给一个整形数组,求这个数组中最大的值和次大的值。void fun(const int* input, int len, int* output1, int* output2)

3.求一个字符串中最长的回文子字符串,如“abcdefedcbgc” 输出“bcdefedcb” void fun(char* input, int len, char* output)

1.链表队列问题,现场编程

2.虚函数、纯虚函数

3.delete与free的区别

4.观察者模式,基于面向对象的哪个特点实现的

5.溢出与越界、野指针与内存泄露

6.面向对象的特征,overwrite与overload

7.stl中vector、map的区别与应用

8.svn作用:版本管理工具,譬如团队进行项目开发,项目代码都储存在服务器上,成员可用svn在本地获得并更新代码

-------------------------------------------------------------------------------------

1.struct和class的区别

2.TCP握手和挥手的区别,挥手的次数

3.堆和栈的区别

4.冒泡排序和快速排序的时间复杂度和空间复杂度

5.软件的设计模式(我说的MVC,优点和应用场景)

6.算法问题:10万首歌推荐一首,每首歌有评分,评分越高被推荐的概率越高。(按照概率映射成一个连续数字序列,然后随机函数从中选数,某个数据范围内对应一首歌),①,1;②,2;③,3----1, 2,3, 4,5,6

7.基数排序桶排序堆排序,C/C++ static,new和malloc区别,内存分配方式。

1.多态和虚函数的定义以及在项目中的运用。

2.讲一讲对内存对齐的理解。

3.函数指针和指针函数的理解。

X、他问你用过map吗?我说用过,然后他让我实现一个put()和get()方法,主要是原理和过程,不需要写代码,

X、第一个问题就直接问我虚函数是什么,具体讲讲对虚函数的理解,什么是动态绑定,在有虚函数的情况下如何设计继承结构,具体实现要注意什么(其实想考察函数重写的三个要点,但是没有直接问),析构函数可以设计为虚函数吗,在老的C++标准里面结构体和类的区别是什么,设计模式的问题,什么是单例模式,什么是工厂模式,设计一个洗牌的算法

4)linux开机后怎么启动一个程序

5)会网络编程吗?

6)会多线程编程吗?

7)数据结构:简单介绍下红黑树

8)STL 用什么容器储存三维矩阵

9)vector怎么使数据加入后就排序

10)服务器Linux和desktop Linux有什么区别

11)你对服务端有什么理解

1.TCP的三次握手与四次挥手 画图说明

2.Socket编程的大致步骤

3.数据库事务隔离性的几种级别

4.字符串匹配(当场写代码)

1.malloc的实现。

2.海量数据的快速存取

3.写一个memcpy函数

-------------------------------------------------------------------------------------

1. 含有指针的继承,子类指针赋给基类,内存泄露问题

2. 含有虚函数的继承,子类指针赋给基类

3. 子类实例化的同时若无显示调用基类的构造函数,则会自动调用基类的不带参数的构造函数。

4. Sizeof求结构体的大小

5. Sizeof求类的大小(空类、含有虚函数的类)

6. 四种类型的强制类型转化

7. 进程与线程的区别

8. New & malloc

9. 遍历一次链表,找到中间元素

10. Windows消息循环

11. 多线程

12. 项目中的算法

13. 在main函数值钱调用一个函数

-------------------------------------------------------------------------------------

1. 求二叉树的宽度,先简介思路再写代码。

2. 进程调度算法,有哪些算法比较难实现?

3. 数据库隔离级别介绍、举例说明。

4. override和overload的区别。

5. 求二叉树的最大距离(即相距最远的两个叶子节点),写代码。

6. 两个栈实现一个队列,写代码。

7.字符串中第一个只出现一次的字符,如何优化算法使得遍历次数更少?

8.socket编程相关,如果服务器这边调用write写了100个字节的数据,客户端想要获得这个数据,是直接用read系统调用,参数也是100吗?

9.多线程的适用场景是什么?为啥要用多线程?

10.顺时针打印数组:

-------------------------------------------------------------------------------------

1. 虚拟内存:虚拟内存就是在硬盘上划分一块页面文件,充当内存。当程序在运行时,有一部分资源还没有用上或者同时打开几个程序却只操作其中一个程序时,系统没必要将程序所有的资源都塞在物理内存中,于是,系统将这些暂时不用的资源放在虚拟内存上,等到需要时在调出来用。

2.Windows下的内存管理:

   内存管理主要做两件事:一是把不常用的程序片段放入虚拟内存,当用到的时候再加载到物理内存。二是计算程序片段在内存中的物理位置

   内存管理的4中方式:

     块儿式:程序需要内存时就给分配一块内存,当程序只需几个字节的时候就造成很多的浪费

     页式:

     段式:一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上

     段页式:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。

3.说说分段和分页

  页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。

  段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。

  页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

  分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

4. 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。 

    链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

    物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输

5、线程是否具有相同的堆栈?dll是否有独立的堆栈?

  每个线程有自己的堆栈。

  dll是否有独立的堆栈?这个问题不好回答,或者说这个问题本身是否有问题。因为dll中的代码是被某些线程所执行,只有线程拥有堆栈。如果dll中的代码是exe中的线程所调用,那么这个时候是不是说这个dll没有独立的堆栈?如果dll中的代码是由dll自己创建的线程所执行,那么是不是说dll有独立的堆栈?

  以上讲的是堆栈,如果对于堆来说,每个dll有自己的堆,所以如果是从dll中动态分配的内存,最好是从dll中删除;如果你从dll中分配内存,然后在exe中,或者另外一个dll中删除,很有可能导致程序崩溃。

6.拥塞控制: 慢启动,拥塞避免,快速重传,快速恢复

  流量控制:对发送方进行控制: 滑动窗口

  重传机制:通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传数据

   差错检测机制:在数据链路层中,因为数据在传入和接收的过程出错是不可避免的,物理层输入的信息不能保证其正确性。

   奇偶校验 ,首部检验和,crc

算法:

10.最长递增子序列(nlogn的算法)

1.两个字符串中找最长公共子串

2.二叉查找树的插入操作

3.纸上写一个生成循环数组的算法

4.上千万条记录,统计出重复记录最多的前N条。 

5.有1亿零1个数,其中只有1个数出现两次,其它数只出现一次,如何找出这个数?

-------------------------------------------------------------------------------------

阿里面经:

1.你用过哪些集合类?

2.面: hashmap 底层是怎么实现的?

3.恩,那你熟悉什么算法,还有说说他们的时间复杂度?

4.我说了事务的四个基本特性;说了事务的粒度,还有各种可能造成的情况(读脏,丢失修改,不可重复读,幻读)

5.所以还问了是否了解hodoop

6.索引的实现机制;行锁,表锁;乐观锁,悲观锁

7.什么叫线程安全?举例说明

8.http中,get post的区

9.线程的几种状态

11.还是接着刷leetcode吧。

12.快速排序在什么情况下其时间复杂度是O(n2)

13.写了一个字符串转数字的程序\

14.问操作系统如何实现多进程的调度;

1.问题包括TCP的建立连接的3步握手和关闭连接的4步操作,报文的设计,TCP的粘包问题,select和epoll的区别,多线程并发,C++的STL,标准库的map和hash_map的区别(为什么标准库没有用hash_map), new和malloc的区别,malloc的内存分配策略。17分钟  ,算法就问了,全程也就10多分钟

百度:

1.纸上写一个生成循环数组的算法

2.上千万条记录,统计出重复记录最多的前N条。 

3.一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少? 

4.多个线程访问共享内存时因该怎么办? 

5.现在普通关系数据库用得数据结构是什么类型的数据结构 

6.N个台阶,一次可以走一步或者两步,求走这n个台阶有多少种方法。

7.判断单链表中是否有环

8.两个字符串,判断其中一个字符串是不是另一个字符串的右移子串。如cda是abcd的右移子串。

9.给出一个字符串,求最长对称子字符串的长度,如输入google,则输出为4

10.HTTP回复的状态码你知道哪些;

11.在浏览器中输入url回车后,整个处理流程是如何的

12.C/S和B/S模式的区别以及各自特点?

13.有n个元素的数组,元素取值范围是1到n,判定数组是否存在重复元素?要求时间复杂度为O(n)。

腾讯

1.然后就让写了几个API函数,然后提到了MFC,

2.在纸上写了1-1000个数,问里面有多少个7

3.有哪些方式可以加快查询?

4.左外连接和右外连接有什么不同(囧了,这个竟然忘记了)

5.static方法里面是否可以调用static变量;

6.extern 关键字有什么用

7.linux内存池实现

8.判断一个整数是否是2的整数次幂.(n&(n-1))

9.字符串翻转(O(n))、匹配(KMP算法)

10.最长递增子序列(nlogn的算法)

11.检测短信敏感词

-------------------------------------------------------------------------------------

解释一下管道吧。

windows和Linux进程通信有什么不同?

平面上有很多点,要找一个半径最小的圆包含所有的点,怎么做?

回调一个对象的成员函数,但是这个对象可能已经不存在了,怎么办,那如何知道对象不存在了呢?

什么智能指针?

M:恩,我们知道,模板是一种很强大的技术,你知道模板主要有什么缺点吗?

A:1. 模板是一种编译期间生成代码的行为,无法进行断点调试,所以很容易产生bug;2. 大量使用模板会造成代码空间膨胀,极大的延长了编译时间。

A:不太清楚,我知道数据库是用B树实现的。

M:为什么用B树?

A:B树在磁盘查找次数上会比较少。

说一说volatile关键字的作用吧。

如何减少内存碎片,啥导致的,内部碎片:

---------------------------------------------------------------------------------------

推荐链接:

1.各个公司的github社区:http://blog.csdn.net/DianaCody/article/details/38408629

2.链表操作的博客地址
http://blog.csdn.net/chenchaoflight/article/details/39808265
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: