3.TCP/IP TCP/UDP原理是什么?
解析:TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。tcp协议和udp协议的差别 TCP UDP 是否连接 面向连接 面向非连接 传输可靠性 可靠 不可靠 应用场合 传输大量数据 少量数据 速度 慢 快4.项目里你做了些什么?怎么做的?为什么要那样做?
解析:具体项目而定!5.指针与数组的用法及计算
解析:参考4.3 指针,数组和指针算术之间关系6.单链表和双链表的用法
解析:
单链表就是单向访问,双向链表就是可以双向访问
1、单链表是在元素的节点结构中只能包含一个后继结点指针,不能包含多个指针的。双链表则是包含前驱和后继两个指针的。 2、单链表要求建好后返回第一个节点的指针(或者有头结点用头结点的指针),因为他只能朝后运行,而双链表建好后可以给任意一个节点的指针,因为他可以朝前后两个方向走。知道哪个节点的指针没有多大关系。原则上以第一个节点为7.虚函数,构造函数,析构函数,复制和赋值函数
解析:这是涉及到所有基础的知识,不熟悉,可参考c++ primerplus 书籍面试的时候 ,比较喜欢给出头文件,写函数,下面给出函数和说明:class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 private: char *m_data; // 用于保存字符串 }; String::String(const char *str)//普通构造函数 { if(NULL == str) { m_data = new char[1]; m_data[0] = '\0'; } else { m_data = new char[strlen(str)+1]; strcpy(m_data,str); } } String::~ Stirng(void)//析构函数 { delete []m_data; // delete m_data; } String::String(const String &other) //拷贝构造函数 { m_data = new char[strlen(other.m_data)+1]; strcpy(m_data,other.m_data); } String & String::operate=(const String &other) //赋值语句 { if(this == &other) { return *this; } delete []m_data; m_data = new char[strlen(other.m_data)+1]; strcpy(m_data,other.m_data); return *this; }说明:1)构造函数是一种特殊函数,而拷贝构造函数是一种特殊的构造函数。类X的构造函数的第一个参数必须为X&,或者const X&;除了第一个参数外,构造函数要么不存在其他参数,如果存在其他参数,其他参数必须有默认值。一个类可以有多个拷贝构造函数。 它的形式如下: X::X(X& x) X::X(const X& x) X::X(X& x, int a = 0, int b = 1…) 2)什么时候会调用拷贝构造函数? 以下三种情况出现时,会调用一个类的拷贝构造函数: a) 用一个已经实例化了的该类对象,去实例化该类的另外一个对象; b) 用该类的对象传值的方式作为一个函数的参数; c) 一个函数返回值为该类的一个对象。 例如: CA a; // CA b(); // 不能用这种方式声明CA的对象b! CA c(10, 10); CA d(c); // 情况1) -> 调用拷贝构造函数 int anInt = someFun1(c); // 情况2) -> 调用拷贝构造函数 CA e = someFun2(11, 11); // 情况3) -> 调用拷贝构造函数3)什么时候必须要显式声明拷贝构造函数? 如果有成员变量以指针形式存在,涉及动态内存分配等情况下,一定要显式声明拷贝构造函数。要注意到,如果需要显式定义拷贝构造函数,那么 通常都是需要同时定义析构函数(因为通常涉及了动态内存分配),至于是否必须重载操作符“=”,要视情况而定。 例如: class CA { public: Point* _point; public: CA(const Point*); // 需要增加的拷贝构造函数 CA(const CA&); // 需要增加的析构函数 virtual ~CA(); // 需要增加的拷贝赋值函数 CA& operator = (const CA&); }; int main(void) { Point apoint(1, 2); CA ca(&apoint); ca.printCoordinates(); CA cb(ca); // 调用拷贝构造函数 CA cc = cb; // 调用拷贝赋值函数 .............. }4)缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数是特殊成员函数。5)构造函数不能有返回类型,也不能由virtual, const, static 和 volatile来修饰。但可以由inline来修饰,事实上隐式构造函数就是用inline来修饰的。inline表示编译时展开,通常速度块;virtual表示运行时绑定,通常意味着灵活。6)类中存在虚函数或者有虚基类的情况下需要显式声明构造函数。拷贝构造函数也是如此。9.冒泡排序
解析:参考冒泡排序 --学习(二)