您好,欢迎访问三七文档
博彦BREW班面试题(2010.11.23)1.对手机开发的认识?2.从brew中学到什么?3.发送同步消息与异步消息的区别?1、同步方式两个通信应用服务之间必须要进行同步,两个服务之间必须都是正常运行的。发送程序和接收程序都必须一直处于运行状态,并且随时做好相互通信的准备。发送程序首先向接收程序发起一个请求,称之为发送消息,发送程序紧接着就会堵塞当前自身的进程,不与其他应用进行任何的通信以及交互,等待接收程序的响应,待发送消息得到接收程序的返回消息之后会继续向下运行,进行下一步的业务处理。2、异步方式两个通信应用之间可以不用同时在线等待,任何一方只需各自处理自己的业务,比如发送方发送消息以后不用登录接收方的响应,可以接着处理其他的任务。也就是说发送方和接收方都是相互独立存在的,发送方只管方,接收方只能接收,无须去等待对方的响应。4.适配函数的作用?5.对C++了解多少?6.beseform继承的是什么?调用那些函数7.mobel的作用?8.你了解send-event和post-event吗?9.buiw了解多少?都学了那些内容?10.Widget的作用?11.什么是函数指针?什么是变量指针?区别及调用指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针函数指针是指向函数的指针变量,即本质是一个指针变量。要的区别是一个是指针变量,一个是函数。12.什么是虚函数,什么是函数重载?声明为virtual并在一个或多个派生类中被重新定义的成员函数;同名函数的形式参数(指参数的个数、类型或者顺序)必须不同13.内联函数?运算符重载?抽象类?内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名;运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能;在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象14.对STL了解多少??STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。15.监探器?设计模式学什么?16.怎么启动应用程序?17.回调函数起什么作用?回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。18.为什么Widget里面要包含一个MODEL?19.如果w-form收到一个按键消息,接下来怎么做?20.form和contain的关系,怎么把contain放在form?21.BREW里面的内存管理方式是什么?22.C++中内存分配方式,堆与栈的区别?1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后由系统释放。--分别是data区,bbs区4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放--coment区5、程序代码区—存放函数体的二进制代码。--code区1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。23.static的作用,与全局变量的一些区别?所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。(3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。24.异常处理(用一个实例来记住几个的用法)25.几种类型转换26.面向对象的三种基本特征(最好能记住一个实例来说明,特别是多态的实现过程)封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承概念的实现方式有三类:实现继承、接口继承和可视继承。实现继承是指使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。多态,允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。覆盖,是指子类重新定义父类的虚函数的做法。重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。封装性是一种信息隐蔽技术,它体现于类的说明,是对象重要的特性。封装使数据和操作该数据的方法(函数)封装为一个整体,形成独立性很强的模块,使得用户只能看到对象的外部特性(对象可以接受哪些信息,可以进行何种处理),而对象的内部特性(内部private的属性和实现处理能力的算法)用户是看不到的。简言之就是封装使对象的设计者和对象的使用者分开,使用者只要知道对象可以做什么,无需知道是怎么做出来的。借助封装有助于提高类和系统的安全性。2继承性继承是一种由已有类创建新类的机制,利用继承,可以先创建一个共有属性的一般类,根据这个一般类再创建具有特殊属性的新类。新类继承一般类的方法并根据需要增加它自己的新方法。有继承而得到的类称为子类,被继承的类称为父类(超类),当然子类也可以成为父类。如下图,由下向上看,双炸飞机类和歼击机类都继承了战斗机类的特点但又分别具有自己新的功能,同样,战斗机类和民用机类都具有飞机类所有的特点也都扩展了属于自己的新功能。也就是说双炸飞机和歼击机既具有飞机的全部特点又拥有战斗机的全部特点。3多态性同一个信息被不同的对象接收到时可能产生完全不同行为,这就是多态性。通过继承过程中的方法重写就可以实现多态。多态可以改善程序的组织构架,提高程序的可读性,也是程序更容易扩充。一、Socket简介Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。几个定义:(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号。(3)连接:指两个进程间的通讯链路。(4)半相关:网络中用一个三元组可以在全局唯一标志一个进程:(协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关,它指定连接的每半部分。(4)全相关:一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:(协议,本地地址,本地端口号,远地地址,远地端口号)这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。二、客户/服务器模式在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器(Client/Server,C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:(1)首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。(2)其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。服务器端:其过程是首先服务器方要先启动,并根据请求提供相应服务:(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端口(如FTP的端口可能为21)接收客户请求;(2)等待客户请求到达该端口;(3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。(4)返回第(2)步,等待另一客户请求。(5)关闭服务器客户端:(1)打开一通信通道,并连接到服务器所在主机的特定端口;(2)向服务器发服务请求报文,等待并接收应答;继续提出请求......(3)请求结束后关闭通信通道并终止。从上面所描述过程可知:(1)客户与服务器进程的作用是非对称的,因此代码不同。(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。介绍完基础知识,下面就介绍一些API函数:创建套接字──socket()应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下:SOCKETPASCALFARsocket(intaf,inttype,intprotocol);该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。参数type描述要建立的套接字的类型。这里分三种:(1)一是TCP流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。(2)二是数据报式套接字(SOCK_DGRAM)提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使用数据报式套接字。(3)三是原始式套接字(SOCK_RAW)该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。根据这三个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。因此,socket()系统调用实际上指定了相关五元组中的“协议”这一元。指定本地地址──bind()当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。bind()将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下:intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);参数s是由socket()调用返回的并且未作连接的套接字描述
本文标题:博彦面试题dy
链接地址:https://www.777doc.com/doc-2609392 .html