面经2016

来源:互联网 发布:阿里云1m宽带 编辑:程序博客网 时间:2024/06/07 11:40

1.      先来自我介绍哦

2.      C++基础:

1)class A{

};

Sizeof(A)是多少?(1)

为什么呢?类里面加虚函数呢?(4,指针大小)再加static int a?(还是4,不记static的大小sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于intfloat这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小。

 因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof1

类的sizeof大小一般是类中的所有成员的sizeof大小之和,这个就不用多说。)

class B2
{
void fun(void);
}(1)

class B : public virtual  A
{
      charj[3];                                   //
加入一个变量是为了看清楚class中的vfptr放在什么位置
      public:
            virtualbb(){};
};
class C : public virtual B
{
      char i[3];
      public:
            virtualcc(){};
};

这次先不给结果,先分析一下,也好加强一下印象。
1、对于class A,由于只有一个虚函数,那么必须得有一个对应的虚函数表,来记录对应的函数入口地址。同时在classA的内存空间中之需要有个vfptr_A指向该表。sizeof(A)也很容易确定,为4。
2、对于class B,由于class B虚基础了class A,同时还拥有自己的虚函数。那么class B中首先拥有一个vfptr_B,指向自己的虚函数表。还有char j[3],做一次alignment,一般大小为4。可虚继承该如何实现咧?首先要通过加入一个虚l类指针(记vbptr_B_A)来指向其父类,然后还要包含父类的所有内容。有些复杂了,不过还不难想象。sizeof(B)=4+4+4+4=16(vfptr_B、char j[3]做alignment、vbptr_B_A和class A)。

 

2)堆和栈的区别

栈的空间由操作系统自动分配/释放,堆上的空间手动分配/释放.

栈空间有限连续的内存),堆是很大的自由存储区(获取不连续的内存)

 

3.   项目

1)        数组和hash的区别,什么情况下用数组用hash?hash冲突怎么去呀?hash函数都有哪些?

数组是编程语言提供的一种数据类型,即用一组连续的内存空间来存放数据,可以通过一个首地址,和一个数组下标,直接访问这组内存空间中的任意位置。
哈希表是数据结构这门学科中的概念,是以数组为存储方式,实现的一种可以快速查找数据的数据结构。它是将数据的值通过一个映射函数,求出一个结果,然后把数据放在这个结果对应的数组下标的位置。
列表貌似在编程中没有这个概念。
数组和哈希表的共同点就是都是以数组为基本存储形式,不同点是,前者是编程上的概念,后者是数据结构上的概念。

2)        关键词过滤,如果用户有作弊行为怎么办?贝叶斯算法可以实现么?(可以实现)

3)        爬虫url怎么去重呢?你认为这个关键点是什么?http://blog.sina.com.cn/s/blog_98cf2a6f01015h79.html

4)        爬虫避免进入循环?那么我们怎样防止访问已经访问过的页面呢,答案也很简单,设置一个标志即可。整个互联网就是一个图结构,我们通常使用DFS(深度优先搜索)BFS(广度优先搜索)进行遍历。所以,像遍历一个简单的图一样,将访问过的结点标记一下即可。

5)        搞过大数据么?(专利有大数据)

4.数据结构

1)归并排序思想,一定要开辟新的空间么?

2)栈和队列的区别

栈:先进后出

队列:先进先出

3)怎么同时先进先出,先进后出

两个栈实现一个队列

 

 

 

 

0 0
原创粉丝点击