1. 先来自我介绍哦
2. C++基础:
1)class A{
};
Sizeof(A)是多少?(1)
为什么呢?类里面加虚函数呢?(4,指针大小)再加static int a?(还是4,不记static的大小sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于int、float这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小。)
( 因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。
类的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)怎么同时先进先出,先进后出
两个栈实现一个队列