第一篇:C、C++总结
1、类:类是一种抽象的数据结构,用来描述对象的属性,是将不同数据类型的数据以及与这些数据相关的操作封装在一起的集合体。(封装性)
一个类的对象所占空间的大小由它的数据成员所占据的空间总和决定;当类有virtual函数时,再加上4个字节的大小。
2、面向过程与面向对象程序设计的不同:
(1)过程是基于算法的,而对象是基于类的;
(2)过程是以函数(过程)的设计来实现的,而对象是以类的设计来实现的;
(3)过程通过数据流图(流程图)来体现的,而对象是通过类图(用例图)来体现的;(4)过程需要将步骤一步一步的具体化,而对象则只注重类的设计,不管实现方法。
3、面向对象的四大特点:抽象、封装、继承、多态
4、访问控制权限:
(1)public公有型:外部可以访问
(2)protected 保护型:除了本类、子类与友元可访问外其它的都不能访问(3)private 私有型:除了本类外,外部的都不能访问
5、类与对象的区别:
(1)二者的定义不同:类是不同类型数据及其相关操作的集合,对象则是类的实例化(2)类是个类型,不占空间,但对象占空间。
(3)类是类型而不是数据对象,每个类的对象都是该类数据成员的拷贝
6、继承与派生的目的:(1)实现代码的重用
(2)使已存在的类不需修改地适应新应用 7.继承的特点:
(1)每个派生类代表基类的特定版本
(2)基类的属性和方法,派生类必须拥有(构造与析构不会被继承)8.继承的3种方式:public,private,protected
9、多态:是指发出同样的消息被不同类型的对象接收后导致完全不同的行为(1)多态的条件:
○1有两个是父子关系的类 ○2有同名的虚函数
○3有父类指针或引用调用子类对象(2)多态的实现:
函数的重载 运算符重载 虚函数
1、static有什么用途?(请至少说明两种)关键字static的作用是什么?
定义静态变量 1.限制变量的作用域 2.设置变量的存储域
C和C++中static用法(1)C中:
○1当一个变量被定义成static型时,表明该变量是一个静态变量,存储在静态存储区中,只能被定义初始化一次;特别的当全局变量被定义成static型时,还表明该变量不能被外部文件所引用
○2当一个函数被声明为static型时,表明该函数是一个静态函数,不能被外部文件所调用
1(2)C++的类中:
○1当类的数据成员被声明为static型时,表明该成员是一个能被所有对象共享的数据成员,不与任何具体对象挂勾
○2 当类的成员函数被声明为static型时,表明该成员是静态成员函数。
2、引用与指针有什么区别? 1)引用必须被初始化,指针不必。
2)引用初始化以后不能被改变,指针可以改变所指的对象。2)不存在指向空值的引用,但是存在指向空值的指针。
3、描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性
4、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 5 什么是平衡二叉树?
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1
6、堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源
7、什么函数不能声明为虚函数? constructor 8 冒泡排序算法的时间复杂度是什么? O(n^2)
9、Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层
10、Internet物理地址和IP地址转换采用什么协议? ARP(Address Resolution Protocol)(地址解析協議)
11、.IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
12、分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
BOOL型变量:if(!var)int型变量: if(var==0)float型变量:
const float EPSINON = 0.00001;
if((x >=-EPSINON)&&(x <= EPSINON)
指针变量:
if(var==NULL)
13、不能做switch()的参数类型是: switch的参数不能为实型/
14、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用“::” /
15、如何引用一个已经定义过的全局变量? 答:extern
16、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。
17、语句for(;1 ;)有什么问题?它是什么意思?
答:和while(1)相同。
18、do„„while和while„„do有什么区别?
答:前一个循环一遍再判断,后一个判断以后再循环
18、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。
19、sizeof(...)是运算符,它的功能是:获得保证能容纳实现所建立的最大对象的字节大小;strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。它的功能是:返回字符串的长度。20、队列和栈有什么区别? 队列先进先出,栈后进先出
21、在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?
函数名: atol 功 能: 把字符串转换成长整型数
用 法: long atol(const char *nptr);
22、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline
25、直接链接两个信令点的一组链路称作什么? PPP点到点连接
26、软件测试都有那些种类? 黑盒:针对系统功能的测试
白合:测试函数功能,各函数接口
27.确定模块的功能和模块的接口是在软件设计的那个队段完成的? 概要设计阶段
28/TCP/IP通信建立的过程怎样,端口有什么作用? 三次握手,确定是哪个应用程序使用该协议 29/进程和线程的差别。
线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。30、测试方法
人工测试:个人复查、抽查和会审
机器测试:黑盒测试和白盒测试
31、Heap与stack的差别。Heap是堆,stack是栈。
Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区
C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
1、软件测试(英语:software testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。流程:1.软件测试流程 :需求了解--测试计划--测试设计--测试用例编写--测试执行--bug管理跟踪--测试报告生成
2.bug就是测试过程中发现的程序缺陷,可以指需求上的,也可以指功能、性能上的
3.bug提交有多种方式,可以通过测试管理工具来管理bug,比如QC等 4.bug的生命周期: 发现bug(open)--修复bug(fixed)--关闭bug(closed)4.软件测试方法:是指测试软件性能的方法。包括有:白盒测试、黑盒测试、动态测试(单元测试、集成测试、系统测试、验收测试、回归测试等。)
5.测试工具:三类软件测试工具: Mercury测试工具,Rational测试工具,Segue测试工具,qtp自动化测试工具和AutoRunner工具
6.测试内容:负载压力、功能测试、白盒测试、测试管理、测试辅助。
2、算法(Algorithm)是一系列解决问题的清晰指令,即能够对一定规范的输入,在有限时间内获得所要求的输出。图像处理算法工程师
1、一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
2、一个算法应该具有以下五个重要的特征: 有穷性、确定性、输入、输出、可行性。
3、冒泡排序(BubbleSort)一次比较两个元素,如果他们的顺序错误就把他们交换过来。基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
4快速排序:基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个程序的空间复杂度是指运行完一个程序所需内存的大小。
第二篇:C和C++总结
1C中分为这几个存储区: 栈,堆,全局区(静态区)—静态变量,常量区
C++中分为这几个存储区:栈,堆(new创建,delete结束或者操作系统自动回收),全局区(静态区),自由存储区-(malloc创建,free结束),常量存储区,2看到一本书上写了进程通信方式有如下:
1)信号 ——软中断,2)管道
3)文件和记录锁定
4)消息队列
5)信号量
6)共享内存
Unix的启动顺序排序。
第一步:通过/boot/vm进行启动 linux内核
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端
rc.sysinit
rc.d(里面的脚本)
rc.local
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
Linux中查看目录大小的命令:du –sh filename
修改文件属性的命令是:chmod 777 file-R
切换为其他用户身份的命令是:du
第一次:第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次:第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包
ACK(ack=k+1),此包发送完毕,客户端和服务器进入established状态,完成三次握手
指令用途
#空指令,无任何效果
#include包含一个源代码文件
#define定义宏
#undef取消已定义的宏
#if如果给定条件为真,则编译下面代码
#ifdef如果宏已经定义,则编译下面代码
#ifndef如果宏没有定义,则编译下面代码
#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个#if……#else条件编译块
#error停止编译并显示错误信息
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
第三篇:C语言与C++的区别总结
C语言和C++的区别
首先,我们来看看C语言与C++的概念:
1.C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
2.1)C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
2)
随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。
C++是由AT&T Bell(贝尔)实验室的Bjarne Stroustrup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。 C++保留了C语言原有的所有优点,增加了面向对象的机制。
C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超越和集中。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。
C++对C的“增强”,表现在六个方面:(1)类型检查更为严格。(2)增加了面向对象的机制。
(3)增加了泛型编程的机制(Template)。(4)增加了异常处理。(5)增加了运算符重载。(6)增加了标准模板库(STL)。面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率。不要把面向对象和面向过程对立起来,面向对象和面向过程不是矛盾的,而是各有用途、互为补充的。
学习C++,既要会利用C++进行面向过程的结构化程序设计,也要会利用C++进行面向对象的程序设计,更要会利用模板进行泛型编程。
C++的特点
C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。
C++语言的主要特点表现在两个方面:一是尽量兼容C,二是支持面向对象的方法。
它操持了C的简洁、高效的接近汇编语言等特点,对C的类型系统进行了改革的扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。另外,由于C语言的广泛使用,因而极大的促进了C++的普及和推广。
C++语言最有意义的方面是支持面向对象的特征。虽然与C的兼容使得C++具有双重特点,但他在概念上完全与C不同,更具面向对象的特征。
C语言的特点
1.简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
2.运算符丰富
C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3.数据结构丰富
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
4.C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5.C语法限制不太严格、程序设计自由度大
一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。
C和C++的区别:
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
分析C++与C的不同:
一、类,类对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最好尽量不要用它,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂。
六、继承,以及虚函数,看起来深奥,实用价值很低。
七、误区::
问:C++是面向对象化的而C是面向过程化的?
答:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐
怕只有Java才算得上。
问:C++能实现C所不能的功能吗? 答:至少我还没有发现
问:学了C再学C++有障碍吗?比如程序设计思想 答:至少我还没有看见谁有此症状。问:学了C再学C++又要重头开始吗?
答:不,C++下可以实现C语言的一切功能。问:我学完了C一定还要学C++才能编程吗? 答:完全没必要。
问:C++比C好在哪里? 答:更加符合软件工程学
问:学完了C再学C++是不是很容易?
答:那要看你是不是真正的学完了C语言。
C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出,C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。
所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习
几点学习建议:
1.基本概念很重要。无论学C,还是学C++,基本概念都是第一位的,也是比较困难的,但只有把握了基本概念才能把握整体脉络,才能居高临下。
2.C是C++的子集,它的基本概念和设计方法相对比较容易理解,初学者可从它入手。
3.如果要学好C++,建议初学者最好别在如VC,BCB平台下写程序,那种自动化的代码生成,花花绿绿的界面,会让你手足无措。最好先找一片空地(unix,dos),从头做起,写几个大点的程序,数个回合,再到VC,BCB下看看,你会轻松得很。在我看来,学好C/C++是成为VC,BCB高手的必由之路。
4.不要妄想速成,必须得一个byte,一个bit的去抠,尽量搞清楚每一个问题。
6.C语言允许直接访问物理地址,可以直接对硬件进行操作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。
7.C语言程序生成代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%。
8.C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。
用法补充:
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。
第四篇:项目经理(C/C++)岗位职责
1.参与软件架构设计工作,负责系统设计。
2.协助软件架构师实现影响系统架构的关键用例。
3.负责核心模块的编码工作。
4.指导开发员的编码工作。
第五篇:C/C++软件工程师岗位职责
1.设计并实现高效的算法和数据结构。
2.开发一个或多个关键软件组件并且负责它们的接口定义,实现优化调试和维护。
3.与本地和海外的项目组成员交流。