9.26北京亚控

来源:互联网 发布:倒排索引java 源代码 编辑:程序博客网 时间:2024/04/29 01:27

今天木有笔试,木有面试,连个通知都木有,于是就继续蛋疼的投简历和看书。下午正在投简历,群里消息说研究生活动中心3点半有北京亚控的笔试,软件的,于是就赶过去笔一把。只是想趁点笔试经验的,就没带简历。
题型主要是填空、小问答和编程。有一些是宝典上的原题。
下面说一下我能记得的题目。
1、冒泡排序、快速排序和二叉树排序的时间复杂度分别为:
这个还没复习到,果断不会答。
2、new、delete与malloc、free的联系和区别?
我的答案:都是用于分配堆上的内存,它们语法规则有些不同,前者用于C++,后者在C和C++中都可用,前者为关键字,后者为库函数。
3、CSinglock是干什么用的?
不会。
4、用winsock建立一个服务器的主要实现步骤?
我的答案:1、创建套接字;2、套接字与端口绑定;3、监听;4、通信
5、请说出static和const尽可能多的作用。
我的答案:static可定义全局静态变量和局部静态变量,可定义静态函数;const可定义常量,可实现宏定义的作用但比宏安全。
6、template有什么特点?什么时候用?
我的答案:使数据结构和算法分离,非面向对象,在多个数据类型共用一个接口时用。
7、1,11,21,1211,111221,下一个数是:
没答出来。
8、写函数实现链表的逆序。
9、有一人有400公斤水,他想运往干旱地区赚钱。他每次最多携带80公斤,并且每前进一公里须耗水1公斤(均匀耗水)。假设水的价格在出发地为0,以后,与运输路程成正比,(即在10公里处为10元/公斤,在20公里处为20元/公斤......),又假设他必须安全返回,请问,他最多可赚多少钱?
10、有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第 2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只?

解答:
1、冒泡排序时间复杂度0(n^2);
   快速排序时间复杂度0(nlogn);
   二叉树排序时间复杂度0(nlogn)。
2、相同点:都可用于申请动态内存和释放内存。
   不同点:
   1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
    2, 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
    3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
   4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存

    new 是个操作符,和什么"+","-","="...有一样的地位
    简单的说:
    malloc,free是c的函数,new,delete是c++的运算符
    此外,new是强制类型的,malloc不是,需要类型转换
    当然还有很多不同
    new 可以调用构造函数在声明的时候初始化
    malloc只是分配空间,需要在其他地方初始化
    而delete不仅会释放空间,在释放前会调用析构函数
    而且malloc需要指定分配空间大小, 而new是自动计算的
3、用于线程同步
4、
服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。
客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。


   1、启动Winsock:对Winsock DLL进行初始化,协商Winsock的版本支持并分配必要的
资源
   2、创建套接字
   3、套接字的绑定:将本地地址绑定到所创建的套接字上
   4、 套接字的监听
   5、套接字等待连接
   6、套接字发送数据
   7、中断套接字连接:通知服务器端或客户端停止接收和发送数据
   8、 关闭套接字:释放所占有的资源
5、static关键字至少有下列n个作用:

  (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

  (2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

  (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

  (4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;

  (5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
const关键字至少有下列n个作用:

  (1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;

  (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;

  (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

  (4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;

  (5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:

const classA operator*(const classA& a1,const classA& a2);

  operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:

classA a, b, c;

(a * b) = c; // 对a*b的结果赋值

  操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。
6、
7、

 

原创粉丝点击