c 程序员岗位职责(共18篇)
第2篇:网站程序员岗位职责
网站程序员岗位职责
一、岗位信息
岗位名称:网站程序员
二、岗位工作概述
根据公司实际需要开发网站,对网站前后台进行维护、优化、升级。
三、工作职责
(一)、业务职责
1、编写开发计划:负责年度网站功能改进计划和网络安全计划的编写。
2、网站功能修改和升级:按照计划的时间和质量要求,对网站前后台功能进行修改和升级;负责网站代码的优化和维护,保证网站的运行效率。
3、日常业务开发:每天程序员从部门经理处接受来自老板及客户程序修改要求,必须按时按质按量地完成日常网站业务的编程开发技术工作。
4、软硬件维护:负责每半个月对网站软硬设施进行安全和稳定性巡检;并负责统计和监视系统日志。同时,也要做好内部局域网和网站机房的系统和网络故障的检修排除工作。
5、防毒防黑:负责即时监控互联网上发现的最新病毒和黑客程序及查杀方法,并及时为每台工作机和服务器查堵系统安全漏洞。每半月定期杀毒和升级防黑策略,排除因此出现的网络故障。
6、数据管理:每三天必须对网站的重要数据(包括网站程序、网站数据库和网站运行日志等)做增量备份,并半个月对程序和数据库做完全备份。日常负责管理网站的备份数据,一旦出现问题,及时安全恢复数据。
7、技术支持:每日为客户提出的、客服人员无法解答的专业技术问题提供支持和回馈,保证客户的满意度。
(二)、管理职责
1、根据公司安排的工作任务准时完工。
2、督促各电脑用户安全使用电脑。
四、工作绩效标准
1、工作目标按计划完成率。
2、开发程序的完美度。
3、各环节配合的满意度
五、岗位工作关系
部门经理、网络销售部、办公室同事
六、工作岗位权限
网站的设计开发
七、岗位工作时间
在公司规定的正常工作时间上班,偶尔需要加班
八、岗位工作环境
多数时间在办公室工作。
第3篇:网站程序员岗位职责
网站程序员岗位职责
网站程序员岗位目的:
负责公司旗下网站前后台服务功能的修改和升级,并保证旗下网站软硬件平台的正常高效运行。
工作职责/工作内容:
1、编写开发计划
负责公司旗下网站功能改进计划和网络安全计划的编写。
2、网站功能修改和升级
按照计划的时间和质量要求,对网站前后台功能进行修改和升级;负责网站代码的优化和维护,保证网站的运行效率。
3、日常业务开发
每天程序员根据公司网站业务需要开发,制作和程序修改要求,必须按时按质按量地完成日常公司网站业务的编程开发技术工作。
4、网站测试
网站开发前期必需先测试,测试成功后方可上传。如因违规操作造成的公司损失由个人全部负责。
5、软硬件维护
负责每半个月必须对公司旗下网站软硬设施进行安全和稳定性巡检;并负责统计和监视系统日志。同时,也要做好内部局域网和网站机房的系统和网络故障的检修排除工作。
6、防毒防黑
负责即时监控互联网上发现的最新病毒和黑客程序及查杀方法,并及时为每台工作机和服务器查堵系统安全漏洞。每半月定期杀毒和升级防黑策略,排除因此出现的网络故障。
7、数据管理
每三天必须对网站的重要数据(包括网站程序、网站数据库和网站运行日志等)做增量备份,并半个月对程序和数据库做完全备份。日常负责管理网站的备份数
据,一旦出现问题,及时安全恢复数据。
8、技术支持
每日为客户提出的、客服人员无法解答的专业技术问题提供支持和回馈,保证客户的满意度。
9、软硬件采购
负责公司旗下网站发展所需要的软硬件的采购和选型;同时对外包编程工作的质量和进度加以监督和管理
10、外包 (网站合作)
项目技术控制对于外包的软件项目的技术方面进行设计、实施跟踪和交付成果的控制和验证。保证外包项目能完全按照我方技术要求和规划完成。
经验要求:
1、具备丰富Web开发经验,具备网站设计经验。熟悉PHP、ASP等网站程序开发语言,熟悉SqlServer、MySql等数据库的管理及开发。了解VSS或CVS等源代码管理工具的使用。
2、具有良好的沟通能力,理解力强,有团队合作意识,具备敬业负责的精神。
3、具备良好的程序设计功底,要求不低于一年行业工作经验.4、出易于维有良好的编码习惯,能够编写护的代码。有良好的程序设计功底。
5、精通 JAVA, C++, FLASH,DIV
6、能吃苦耐劳,有工作热情,能够按时完成公司交给的设计及编程任务。
备注:
岗位资格要求教育背景计算机软件相关专业毕业,大专以上 工作经验 2年以上工作经验
第4篇:C、C++程序员求职面
试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
解答:
BOOL型变量:if(!var)
int型变量: if(var==0)
float型变量:
const float EPSINON = 0.00001;
if((x >=steps;char tmp[MAX_LEN];
strcpy(tmp, pStr + n);
strcpy(tmp + steps, pStr);
*(tmp + strlen(pStr))= ' ';strcpy(pStr, tmp);}
正确解答2:
void LoopMove(char *pStr, int steps){ int n = strlen(pStr)-steps;char tmp[MAX_LEN];
memcpy(tmp, pStr + n, steps);
memcpy(pStr + steps, pStr, n);
memcpy(pStr, tmp, steps);}
剖析:
这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。
最频繁被使用的库函数包括:
(1)strcpy
(2)memcpy
(3)memset
试题6:已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。
WAVE文件格式说明表
偏移地址 字节数 数据类型 内 容
文件头
00H 4 Char "RIFF"标志
04H 4 int32 文件长度
08H 4 Char "WAVE"标志
0CH 4 Char "fmt"标志
10H 4
过渡字节(不定)
14H 2 int16 格式类别
16H 2 int16 通道数
18H 2 int16 采样率(每秒样本数),表示每个通道的播放速度
1CH 4 int32 波形音频数据传送速率
20H 2 int16 数据块的调整数(按字节算的)
22H 2
每样本的数据位数
24H 4 Char 数据标记符"data"
28H 4 int32 语音数据的长度
解答:
将WAV文件格式定义为结构体WAVEFORMAT:
typedef struct tagWaveFormat {
char cRiffFlag[4];
UIN32 nFileLen;
char cWaveFlag[4];
char cFmtFlag[4];
char cTransition[4];
UIN16 nFormatTag;
UIN16 nChannels;
UIN16 nSamplesPerSec;
UIN32 nAvgBytesperSec;
UIN16 nBlockAlign;
UIN16 nBitNumPerSample;
char cDataFlag[4];
UIN16 nAudioLength;
} WAVEFORMAT;
假设WAV文件内容读出后存放在指针buffer开始的内存单元内,则分析文件格式的代码很简单,为:
WAVEFORMAT waveFormat;memcpy(&waveFormat, buffer,sizeof(WAVEFORMAT));
直接通过访问waveFormat的成员,就可以获得特定WAV文件的各项格式信息。
剖析:
试题6考查面试者组织数据结构的能力,有经验的程序设计者将属于一个整体的数据成员组织为一个结构体,利用指针类型转换,可以将memcpy、memset等函数直接用于结构体地址,进行结构体的整体操作。透过这个题可以看出面试者的程序设计经验是否丰富。
试题7:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:
cla 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(str==NULL)
{
m_data = new char[1];// 得分点:对空字符串自动申请存放结束标志' '的空
//加分点:对m_data加NULL 判断
*m_data = ' ';
}
else {
int length = strlen(str);
m_data = new char[length+1];// 若能加 NULL 判断则更好
strcpy(m_data, str);
} }
// String的析构函数 String::~String(void){ delete [] m_data;// 或delete m_data;}
//拷贝构造函数
String::String(const String &other)
// 得分点:输入参数为const型 {
int length = strlen(other.m_data);
m_data = new char[length+1];
//加分点:对m_data加NULL 判断
strcpy(m_data, other.m_data);}
//赋值函数
String & String::operate =(const String &other)// 得分点:输入参数为const型 {
if(this == &other)
//得分点:检查自赋值
return *this;
delete [] m_data;
//得分点:释放原有的内存资源
int length = strlen(other.m_data);
m_data = new char[length+1];//加分点:对m_data加NULL 判断
strcpy(m_data, other.m_data);
return *this;
//得分点:返回本对象的引用 }
剖析:
能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上!
在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。
仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具备了60%以上的C++基本功!
试题8:请说出static和const关键字尽可能多的作用
解答:
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 claA operator*(const claA& a1,const claA& a2);
operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:
claA a, b, c;(a * b)= c;// 对a*b的结果赋值
操作(a * b)= c显然不符合编程者的初衷,也没有任何意义。
剖析:
惊讶吗?小小的static和const居然有这么多功能,我们能回答几个?如果只能回答1~2个,那还真得闭关再好好修炼修炼。
这个题可以考查面试者对程序设计知识的掌握程度是初级、中级还是比较深入,没有一定的知识广度和深度,不可能对这个问题给出全面的解答。大多数人只能回答出static和const关键字的部分功能。
4.技巧题
试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
解答:
int checkCPU(){ {
union w
{
int a;
char b;
} c;
c.a = 1;
return(c.b == 1);} }
剖析:
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为: 内存地址 存放内容
0x4000 0x34 0x4001 0x12
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 存放内容
0x4000 0x12 0x4001 0x34
32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为: 内存地址 存放内容
0x4000 0x78 0x4001 0x56 0x4002 0x34 0x4003 0x12
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 存放内容 0x4000 0x12 0x4001 0x34 0x4002 0x56 0x4003 0x78
联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。
试题2:写一个函数返回1+2+3+„+n的值(假定结果不会超过长整型变量的范围)
解答:
int Sum(int n){
return((long)1 + n)* n / 2;
//或return(1l + n)* n / 2;}
剖析:
对于这个题,只能说,也许最简单的答案就是最好的答案。下面的解答,或者基于下面的解答思路去优化,不管怎么“折腾”,其效率也不可能与直接return(1 l + n)* n / 2相比!
int Sum(int n){ long sum = 0;for(int i=1;i
sum += i;} return sum;}
所以程序员们需要敏感地将数学等知识用在程序设计中。
本篇文章来源于:开发学院 http://edu.codepub.com
原文链接:http://edu.codepub.com/2008/1216/166_3.php
第5篇:项目经理(C/C++)岗位职责1.参与软件架构设计工作,负责系统设计。2.协助软件架构师实现影响系统架构的关键用例。3.负责核心模块的编码工作。4.指导开发员的编码工作。第6篇:C/C++软件工程师岗位职责1.设计并实现高效的算法和数据结构。2.开发一个或多个关键软件组件并且负责它们的接口定义,实现优化调试和维护。3.与本地和海外的项目组成员交流。第7篇:C总工程师岗位职责
总工程师岗位职责
1、贯彻执行国家、行业有关质量技术政策及上级技术管理制度,对项目经理负责。落实项目部安全、质量方针和目标,检查落实《质量保证手册》和程序文件的执行情况,对项目部的施工技术工作全面责任。
2、负责图纸会审,组织编制、审核《施工组织设计》,提供工程施工所需的工程数量及技术资料,并随时检查、监督、落实。
3、负责施工技术人员的指导以及技术管理工作,并进行质量、进度把关控制。
4、组织施工设计文件的审核、优化,施工调查,施工定测,以及施工配合协议的签订。主持编制特殊和重点项目的施工技术方案和作业指导书。
5、按照设计变更的规定程序以及建设、监理单位的要求,处理、上报设计变更。负责审核签发变更设计报告,索赔意向报告及检查索赔资料的完整性。
6、负责施工过程中实验、测量等重大技术问题的决策及报告
7、组织制定质量保证措施,掌握质量现状,对施工中存在的质量问题,组织有关人员攻关,分析原因,制定整改措施并责成有关人员限期整改。
8、参加建设单位、监理单位和项目部组织的工程质量检查和事故调查、分析和处理工作,制定预防和纠正措施并指导实施。
9、主持新技术、新工艺、新设备、新项目的示范、指导、推广工作,并做好技术总结,结合施工生产组织开展“QC”攻关活动。
10、主持工程竣工资料的收集、整理、编制和总结工作。组织编制开通方案,参加组织验收,开通和建设单位、监理单位组织的工程最终检验、交付工作。
11、负责项目部技术、质量方面的对外协调、交流工作。
12、组织召开周末例会,参加项目部组织的各种生产会议。对各部门存在的问题及提出的具体方案进行审核,并督促落实。协调配合相关部门完成项目部阶段性主要工作。
13、及时落实、完成领导交办的其它工作。
第8篇:采购员岗位职责C
采购员岗位职责
一、负责对象:煤灰、水泥、石灰等材料的采购、供应
二、工作目标:公司的生产所需的保质、保量安全及时的满足
三、权力与责任:
1、严格遵守公司的各项规章制度和有关规定;
2、根据生产计划和资金情况,编制采购计划;
3、全面负责生产所用煤灰、水泥、石灰等材料的采购工作;
4、掌握好实际库存和在途物料情况;
5、合理安排采购顺序,对紧缺物料及需长距离采购的原料应提前安排采购计划及时购进;
6、对原料供应商进行考查;
7、负责签订购货合同;
8、严格执行原料包装材料入库检验制度;
9、随时掌握煤灰、水泥、石灰等材料市场行情;
四、工作职责:
1、考察供货商的产品质量、供货能力、企业质量保证能力、企业信誉等方面,在现有供应商基础上不断寻求新的供应商,以确保供应材料的选择范围,负责新增供应商的寻访、调查,并组织相关部门进行评估、审查。
2、按照要求保质保量地组织好材料采购供应工作,并随时掌握合同履行情况,合同中必须注明我公司对材料质量要求的条款,如需更改合同,报请总经理批准方可执行。
3、负责收集新材料的应用信息,做好市场分析,随时掌握国家相关产品的标准和政策变化,做好政策分析,为公司决策提供有价值信息。
4、对供应商进行询价、比价、议价;市场行情的调查、动态资讯收集、整理,及时上报,以便及时调整采购策略。
5、依业务订单适时、适品、适量的采购,并跟催采购进度,确保订购物料按时、按量、保质送达我司仓库,协调销售、生产的有效进行。订单变更与撤消、品质要求变更与供方之间的及时信息传递,确保供方满足我公司之需求。
6、做到遵纪守法、秉公办事、廉洁自律的职业道德,做到诚实虚心、尽职尽责、不断学习业务知识,提高业务工作能力。
第9篇:高级JAVA、PHP程序员岗位职责1.负责公产品软件设计、开发、测试和维护工作,主要为C++、java、php。2.负责任务的质量和完整性,包含故障分析、解决、修复,一般文档编制。3.发现和指出项目或计划中的设计问题。4.总结产品研发经验,持续改进产品性能。5.为产品的市场推广提供技术支持。6.报据用户或公司其他部门的要求进行设计修改和设计改进。7.研究项目技术细节,编写相应的说明书。第10篇:C语言C++程序员编程必备
Java,NET,PHP,Ruby,Perl 和 Python 等,但今天我们要讨论的是两个最古老和流行的语言的C和C++。它们都有其特殊的地方,更有效的功能和支持的工具,这两种语言仍然很活跃。
今天我们整理了一些令人印象深刻的IDE(集成开发环境)和编译器推荐给 C 和 C++ 程序员。集成开发环境,主要用于提供软件应用的各种组件而开发的,其中最流行的功能是它们都有吸引力的用户界面。1)Best IDE for C/C++ – kDevelop KDevelop 是基于 KDevPlatform 的可使用开源插件扩展的 IDE。KDevPlatform 是一种可以用来作为 IDE 的基础库的开源集。
2)Best IDE for C/C++-Anjuta Anjuta Devstudio 具有先进的编程工具,包括项目管理,应用程序向导,交互式调试器,源代码编辑器,版本控制,GUI设计器,分析器和许多工具,另一个伟大的开发工作室。此工具提供的 C/C++ 程序员有很大强大的用户界面开发接口。
3)Best IDE for C/C++Eclipse CDT Eclipse CD 是最强大和最流行的IDE之一,提供了更高效的功能,如:项目的创建和管理,构建支持不同的工具链,标准make编译,源代码导航,各种来源的知识工具,代码编辑器,语法高亮,折叠和超链接导航,源代码重构和代码生成,可视化调试工具,包括内存,寄存器等等。
7)Best IDE for C/C++ – compilr compilr 是在线集成开发工具,让您与令人印象深刻的功能和简单的用户界面编写代码。该工具支持的编程语言中广泛的C,C + + JAVA,HTML等等。
8)Best IDE for C/C++Netbeans C++ Netbeans 的工具包括许多适合 C 和 C++ 项目类型模板,可以 使用动态库和静态创建 C/C++ 应用程序库。它拥有迷人的功能:代码协助,编译器配置,单元测试,源检查,远程开发和文件导航等等。
10)Best IDE/compiler for C/C++Ultimate++ Ultimate++是对于 C++ 程序员来说是很好框架。这个 IDE 引入了模块化概念,可以结合 GCC,MinGW 和 Visual C++。
12)Best compiler for C/C++-Digital Mars DigitalMars 是一款高性能的 C/C++ 编译器。包括的功能,如速度最快的编译/链接时,强
HTML文档,反汇编,图书管理员,资源编译器,make等,命令行和GUI版本,教程,代码示例,在线更新,标准模板库等等。
13)Best IDE for C-C-Free
14)Best compiler for C/C++ – MinGW MinGW 编译器提供访问微软的C运行库和一些特定语言运行库的功能。
15)Best compiler for C – Tiny C compiler iny C compiler 是最好的编译器之一,让开发人员可以在任何地方编译代码,可以使用任何 C 动态库,编译并直接执行C++源程序,也包含完整的 C 预处理器和 GNU 汇编器。
@扣丁学堂 智悦分享
第11篇:C.C++程序员面试背诵题目
1.面向对象的程序设计思想是什么?
答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。
2.什么是类?
答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。
3.对象都具有的二方面特征是什么?分别是什么含义? 答:对象都具有的特征是:静态特征和动态特征。
静态特征是指能描述对象的一些属性; 动态特征是指对象表现出来的行为 ;
4.在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?
答:1这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大提高了效率。
2隐藏了代码;
5.在类的内部定义成员函数的函数体,这种函数会具备那种属性? 答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。
6.成员函数通过什么来区分不同对象的成员数据?为什么它能够区分? 答:通过this指针来区分的,因为它指向的是对象的首地址。
7.C++编译器自动为类产生的四个缺省函数是什么?
答:默认构造函数,拷贝构造函数,析构函数,赋值函数。
8.拷贝构造函数在哪几种情况下会被调用?
答:1.当类的一个对象去初始化该类的另一个对象时;
2.如果函数的形参是类的对象,调用函数进行形参和实参结合时; 3.如果函数的返回值是类对象,函数调用完成返回时。
9.构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。
构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。
10.什么时候必须重写拷贝构造函数?
答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
11.构造函数的调用顺序是什么? 答:1.先调用基类构造函数
2.按声明顺序初始化数据成员
3.最后调用自己的构造函数。
12.哪几种情况必须用到初始化成员列表? 答:类的成员是常量成员初始化;
类的成员是对象成员初始化,而该对象没有无参构造函数。类的成员常变量时。
13.什么是常对象?
答:常对象是指在任何场合都不能对其成员的值进行修改的对象。
14.静态函数存在的意义?
答:1静态私有成员在类外不能被访问,可通过类的静态成员函数来访问;
2当类的构造函数是私有的时,不像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。
15.在类外有什么办法可以访问类的非公有成员? 答:友元,继承,公有成员函数。
16.什么叫抽象类?
答:不用来定义对象而只作为一种基本类型用作继承的类。
17.运算符重载的意义?
答:为了对用户自定义数据类型的数据的操作与内定义的数据类型的数据的操作形式一致。
18.不允许重载的5个运算符是哪些? 答:
1..*(成员指针访问运算符号)2.::域运算符
3.sizeof 长度运算符号 4.?:条件运算符号 5..(成员访问符)
19.运算符重载的三种方式?
答:普通函数,友元函数,类成员函数。
20.流运算符为什么不能通过类的成员函数重载?一般怎么解决? 答:因为通过类的成员函数重载必须是运算符的第一个是自己,而对流运算的重载要求第一个参数是流对象。一般通过友元来解决。
21.赋值运算符和拷贝构造函数的区别与联系? 答:相同点:都是将一个对象copy到另一个中去。不同点:拷贝构造函数涉及到要新建立一个对象。
22.在哪种情况下要调用该类的析构函数? 答:对象生命周期结束时。
23.对象间是怎样实现数据的共享的? 答:通过类的静态成员变量来实现的。静态成员变量占有自己独立的空间不为某个对象所私有。
24.友元关系有什么特性?
答:单向的,非传递的,不能继承的。
25.对对象成员进行初始化的次序是什么? 答:它的次序完全不受它们在初始化表中次序的影响,只与成员对象在类中声明的次序来决定的。
26.类和对象之间的关系是什么?
答:类是对象的抽象,对象是类的实例。
27.对类的成员的访问属性有什么? 答:public,protected,private。
28.const char *p,char * const p;的区别
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。
29.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。
virtual可加可不加,子类覆盖它的函数不加virtual ,也能实现多态。
30.函数重载是什么意思?它与虚函数的概念有什么区别? 函数重载是一个同名函数完成不同的功能,编译系统在编译阶段通过函数参数个数、参数类型不同,即实现的是静态的多态性。但是记住:不能仅仅通过函数返回值不同来实现函数重载。而虚函数实现的是在基类中通过使用关键字virtual来申明一个函数为虚函数,含义就是该函数的功能可能在将来的派生类中定义或者在基类的基础之上进行扩展,系统只能在运行阶段才能动态决定该调用哪一个函数,所以实现的是动态的多态性。它体现的是一个纵向的概念,也即在基类和派生类间实现。
31.构造函数和析构函数是否可以被重载,为什么? 答:构造函数可以被重载,析构函数不可以被重载。因为构造函数可以有多个且可以带参数,而析构函数只能有一个,且不能带参数。
32.如何定义和实现一个类的成员函数为回调函数? 答:
所谓的回调函数,就是预先在系统对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。
定义一个类的成员函数时在该函数名前加CALLBACK即将其定义为回调函数,函数的实现和普通成员函数没有区别 33.虚函数是怎么实现的? 答:简单说来使用了虚函数表.34.抽象类不会产生实例,所以不需要有构造函数。 错
35.从一个模板类可以派生新的模板类,也可以派生非模板类。 对
36.main 函数执行以前,还会执行什么代码?
答案:全局对象的构造函数会在main 函数之前执行。
37.当一个类A 中没有申明任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。(Autodesk)
答案:肯定不是零。举个反例,如果是零的话,声明一个cla A[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]„了。
38.delete与 delete []区别:
delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。
39.子类析构时要调用父类的析构函数吗? 会调用,析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了
40.继承优缺点。
1、类继承是在编译时刻静态定义的,且可直接使用,2、类继承可以较方便地改变父类的实现。 缺点:
1、因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现
2、父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为
3、如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。
41.解释堆和栈的区别。
栈区(stack)—
由编译器自动分配释放,存放函数的参数值,局部变量的值等。堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
42.一个类的构造函数和析构函数什么时候被调用,是否需要手工调用? 答:构造函数在创建类对象的时候被自动调用,析构函数在类对象生命期结束时,由系统自动调用。
43.何时需要预编译:
总是使用不经常改动的大型代码体。
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。44.多态的作用? 主要是两个:
1.隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;
2.接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用
45.虚拟函数与普通成员函数的区别?内联函数和构造函数能否为虚拟函数?
答案:区别:虚拟函数有virtual关键字,有虚拟指针和虚函数表,虚拟指针就是虚拟函数的接口,而普通成员函数没有。内联函数和构造函数不能为虚拟函数。
46.构造函数和析构函数的调用顺序? 析构函数为什么要虚拟? 答案:构造函数的调用顺序:基类构造函数—对象成员构造函数—派生类构造函数;析构函数的调用顺序与构造函数相反。析构函数虚拟是为了防止析构不彻底,造成内存的泄漏。
47.C++中类型为private的成员变量可以由哪些函数访问? 只可以由本类中的成员函数和友员函数访问
48.请说出类中private,protect,public三种访问限制类型的区别
private是私有类型,只有本类中的成员函数访问;protect是保护型的,本类和继承类可以访问;public是公有类型,任何类都可以访问.49.类中成员变量怎么进行初始化?
可以通过构造函数的初始化列表或构造函数的函数体实现。
50.在什么时候需要使用“常引用”? 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。
51.引用与指针有什么区别?
答、1)引用必须被初始化,指针不必。
2)引用初始化以后不能被改变,指针可以改变所指的对象。3)不存在指向空值的引用,但是存在指向空值的指针。
52.描述实时系统的基本特性
答、在特定时间内完成特定的任务,实时性与可靠性。
54.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答、全局变量储存在静态数据区,局部变量在栈中。
55.堆栈溢出一般是由什么原因导致的? 答、没有回收垃圾资源
56.什么函数不能声明为虚函数? 答 构造函数(constructor)
57..IP地址的编码分为哪俩部分?
答 IP地址由两部分组成,网络号和主机号。
58..不能做switch()的参数类型是: 答、switch的参数不能为实型。
59.如何引用一个已经定义过的全局变量?
答、可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错
60.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? 答、c用宏定义,c++用inline
61.C++是不是类型安全的?
答案:不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)
62.当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,请解释一下编译器为什么没有让它为零。
答案:为1。举个反例,如果是零的话,声明一个cla A[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]„了。
63.简述数组与指针的区别?
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容上的区别 char a[] = “hello”;a[0] = „X‟;
char *p = “world”;// 注意p 指向常量字符串
p[0] = ‘X’;// 编译器不能发现该错误,运行时错误(2)用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。
64.C++函数中值的传递方式
有三种方式:值传递、指针传递、引用传递
65.内存的分配方式 分配方式有三种,1、静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。
2、栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。
3、堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。
66.extern“C”有什么作用? extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。
extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可。
67.用什么函数开启新进程、线程。 答案:
线程:CreateThread/AfxBeginThread等 进程:CreateProce等
68.SendMeage和PostMeage有什么区别
答案:SendMeage是阻塞的,等消息被处理后,代码才能走到SendMeage的下一行。PostMeage是非阻塞的,不管消息是否已被处理,代码马上走到PostMeage的下一行。
69.CMemoryState主要功能是什么
答案:查看内存使用情况,解决内存泄露问题。
70.
26、#include 和 #include “filename.h” 有什么区别? 答:对于#include,编译器从标准库路径开始搜索 filename.h 对于#include “filename.h”,编译器从用户的工作路径开始搜索 filename.h
71.处理器标识#error的目的是什么?
答:编译时输出一条错误信息,并中止继续编译。
72.#if!defined(AFX_…_HADE_H)#define(AFX_…_HADE_H)„„
#endif作用?
防止该头文件被重复引用。
73.在定义一个宏的时候要注意什么?
定义部分的每个形参和整个表达式都必须用括号括起来,以避免不可预料的错误发生
74.数组在做函数实参的时候会转变为什么类型? 数组在做实参时会变成指针类型。
75.系统会自动打开和关闭的3个标准的文件是? (1)标准输入----键盘---stdin(2)标准输出----显示器---stdout(3)标准出错输出----显示器---stderr
76..在Win32下 char, int, float, double各占多少位?(1)Char 占用8位(2)Int 占用32位(3)Float 占用32位(4)Double 占用64位
77.strcpy()和memcpy()的区别?
strcpy()和memcpy()都可以用来拷贝字符串,strcpy()拷贝以’ ’结束,但memcpy()必须指定拷贝的长度。
78.说明#define和const在语法和含义上有什么不同?
(1)#define是C语法中定义符号变量的方法,符号常量只是用来表达一个值,在编译阶段符号就被值替换了,它没有类型;
(2)Const是C++语法中定义常变量的方法,常变量具有变量特性,它具有类型,内存中存在以它命名的存储单元,可以用sizeof测出长度。
79.说出字符常量和字符串常量的区别,并使用运算符sizeof计算有什么不用?
字符常量是指单个字符,字符串常量以‘ ’结束,使用运算符sizeof计算多占一字节的存储空间。
80.简述全局变量的优缺点?
全局变量也称为外部变量,它是在函数外部定义的变量,它属于一个源程序文件,它保存上一次被修改后的值,便于数据共享,但不方便管理,易引起意想不到的错误。
81.总结static的应用和作用?
(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
82..总结const的应用和作用?
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
83.什么是指针?谈谈你对指针的理解? 指针是一个变量,该变量专门存放内存地址;
指针变量的类型取决于其指向的数据类型,在所指数据类型前加* 指针变量的特点是它可以访问所指向的内存。
84.什么是常指针,什么是指向常变量的指针? 常指针的含义是该指针所指向的地址不能变,但该地址所指向的内容可以变化,使用常指针可以保证我们的指针不能指向其它的变量,指向常变量的指针是指该指针的变量本身的地址可以变化,可以指向其它的变量,但是它所指的内容不可以被修改。指向长变量的指针定义,85.函数指针和指针函数的区别?
函数指针是指指向一个函数入口的指针; 指针函数是指函数的返回值是一个指针类型。
87.简述Debug版本和Release版本的区别?
Debug版本是调试版本,Release版本是发布给用户的最终非调试的版本,88.指针的几种典型应用情况?
int *p[n];-----指针数组,每个元素均为指向整型数据的指针。
int(*)p[n];------p为指向一维数组的指针,这个一维数组有n个整型数据。int *p();----------函数带回指针,指针指向返回的值。int(*)p();------p为指向函数的指针。
89.static函数与普通函数有什么区别? static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
90.struct(结构)和 union(联合)的区别?
1.结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
2.对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。
91.cla 和 struct 的区别?
struct 的成员默认是公有的,而类的成员默认是私有的。
92.简述枚举类型?
枚举方便一次定义一组常量,使用起来很方便; 93.aert()的作用?
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE(0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。
94.局部变量和全局变量是否可以同名?
能,局部会屏蔽全局。要用全局变量,需要使用"::"(域运算符)。
95.程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中。
96.在什么时候使用常引用?
如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。
97.类的声明和实现的分开的好处? 1.起保护作用; 2.提高编译的效率。
98.windows消息系统由哪几部分构成? 由一下3部分组成: 1.消息队列:操作系统负责为进程维护一个消息队列,程序运行时不断从该消息队列中获取消息、处理消息;
2.消息循环:应用程序通过消息循环不断获取消息、处理消息。
3.消息处理:消息循环负责将消息派发到相关的窗口上使用关联的窗口过程函数进行处理。
99.什么是消息映射?
消息映射就是让程序员指定MFC类(有消息处理能力的类)处理某个消息。然后由程序员完成对该处理函数的编写,以实现消息处理功能。
100.什么是UDP和TCP的区别是什么?
TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。UDP全称为用户报文协议,它可以提供非连接的不可靠的点到多点的通信。用TCP还是UDP,那要看你的程序注重哪一个方面?可靠还是快速?
101.winsock建立连接的主要实现步骤? 答:
服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接, accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。
客户端:socket()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。
102.进程间主要的通讯方式? 信号量,管道,消息,共享内存
103.构成Win32 API 函数的三个动态链接库是什么? 答:内核库,用户界面管理库,图形设备界面库。
104.创建一个窗口的步骤是?
答:填充一个窗口类结构->注册这个窗口类->然后再创建窗口->显示窗口->更新窗口。
105.模态对话框和非模态对话框有什么区别?
答:1.调用规则不同:前者是用DoModal()调用,后者通过属性和ShowWindow()来显示。2.模态对话框在没有关闭前用户不能进行其他操作,而非模态对话框可以。3.非模态对话框创建时必须编写自己的共有构造函数,还要调用Create()函数。
106.从EDIT框中取出数据给关联的变量,已经把关联的变量的数据显示在EDIT框上的函数是什么?
答: UpdateData(TRUE), Updatedata(FALSE).107.简单介绍GDI?
答;GDI是Graphics Device Interface 的缩写,译为:图形设备接口;是一个在Windows应用程序中执行与设备无关的函数库,这些函数在不同的输出设备上产生图形以及文字输出。
108.windows消息分为几类?并对各类做简单描述。
1.窗口消息:与窗口相关的消息,除WM_COMMAND之外的所有以WM_开头的消息; 2.命令消息;用于处理用户请求,以WM_COMMAND表示的消息; 3.控件通知消息:统一由WM_NOTIFT表示,4.用户自定义消息。
109.如何自定义消息?
使用WM_USER 和WM_APP两个宏来自定义消息,110.简述Visual C++、Win32 API和MFC之间的关系?
(1)Visual C+是一个以C++程序设计语言为基础的、集成的、可视化的编程环境;(2)Win32 API是32位Windows操作系以C/C++形式提供的一组应用程序接口;(3)MFC是对Win32 API的封装,简化了开发过程。
111.怎样消除多重继承中的二义性? 1.成员限定符 2.虚基类
112什么叫静态关联,什么叫动态关联
在多态中,如果程序在编译阶段就能确定实际执行动作,则称静态关联,如果等到程序运行才能确定叫动态关联。
113多态的两个必要条件
1.一个基类的指针或引用指向一个派生类对象,2.虚函数
114.什么叫智能指针?
当一个类中,存在一个指向另一个类对象的指针时,对指针运算符进行重载,那么当前类对象可以通过指针像调用自身成员一样调用另一个类的成员。
115.什么时候需要用虚析构函数?
当基类指针指向用new运算符生成的派生类对象时,delete基类指针时,派生类部分没有释放掉而造成释放不彻底现象,需要虚析构函数。
116.MFC中,大部分类是从哪个类继承而来? CObject
117.什么是平衡二叉树?
答:左右子树都是平衡二叉树,而且左右子树的深度差值的约对值不大于1
118.语句for(;1 ;)有什么问题?它是什么意思?
答:无限循环,和while(1)相同。
119.派生新类的过程要经历三个步骤 1吸收基类成员 2.改造基类成员 3.添加新成员
121.TCP/IP 建立连接的过程
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手
122.memset ,memcpy 的区别
memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为' '。
memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;
123.在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”?
答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字 与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。
124怎样定义一个纯虚函数?含有纯虚函数的类称为什么? 在虚函数的后面加=0,含有虚函数的类称为抽象类。
125.已知strcpy函数的原型是:
char * strcpy(char * strDest,const char * strSrc);不调用库函数,实现strcpy函数。答案:
char *strcpy(char *strDest, const char *strSrc){ if(strDest == NULL || strSrc == NULL)return NULL;if(strDest == strSrc)return strDest;char *tempptr = strDest;while((*strDest++ = *strSrc++)!= „ ‟);return tempptr;}
126.已知类String 的原型为: cla String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other);// 拷贝构造函数 ~ String(void);// 析构函数
String & operate =(const String &other);// 赋值函数 private: char *m_data;// 用于保存字符串 };请编写String 的上述4 个函数。答案:
String::String(const char *str){ if(str == NULL)//strlen在参数为NULL时会抛异常才会有这步判断 { m_data = new char[1];m_data[0] = '';} else { m_data = new char[strlen(str)+ 1];strcpy(m_data,str);} } String::String(const String &other){ m_data = new char[strlen(other.m_data)+ 1];strcpy(m_data,other.m_data);} String & String::operator =(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;} String::~ String(void){ delete []m_data;}
127.类成员函数的重载、覆盖和隐藏区别 答案:
成员函数被重载的特征:
(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;
(4)virtual 关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;
(4)基类函数必须有virtual 关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
128.如何打印出当前源文件的文件名以及源文件的当前行号? 答案:
cout
129.文件中有一组整数,要求排序后输出到另一个文件中 答案:
void Order(vector &data)//起泡排序 { int count = data.size();int tag = false;for(int i = 0;i data[j+1]){ tag = true;int temp = data[j];data[j] = data[j+1];data[j+1] = temp;} } if(!tag)break;} } void main(void){ vectordata;ifstream in("c:data.txt");if(!in){ cout>temp;data.push_back(temp);} in.close();Order(data);ofstream out("c:result.txt");if(!out){ cout
130.一个链表的结点结构 struct Node { int data;Node *next;};typedef struct Node Node;已知链表的头结点head,写一个函数把这个链表逆序(Intel)Node * ReverseList(Node *head)//链表逆序 { if(head == NULL || head->next == NULL)return head;Node *p1 = head;Node *p2 = p1->next;Node *p3 = p2->next;p1->next = NULL;while(p3!= NULL){ p2->next = p1;p1 = p2;p2 = p3;p3 = p3->next;} p2->next = p1;head = p2;return head;} 131.一个链表的结点结构 struct Node { int data;Node *next;};typedef struct Node Node;已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。Node * Merge(Node *head1 , Node *head2){ if(head1 == NULL)return head2;if(head2 == NULL)return head1;Node *head = NULL;Node *p1 = NULL;Node *p2 = NULL;if(head1->data data){ head = head1;p1 = head1->next;p2 = head2;} else { head = head2;p2 = head2->next;p1 = head1;} Node *pcurrent = head;while(p1!= NULL && p2!= NULL){ if(p1->data data){ pcurrent->next = p1;pcurrent = p1;p1 = p1->next;} else { pcurrent->next = p2;pcurrent = p2;p2 = p2->next;} } if(p1!= NULL)pcurrent->next = p1;if(p2!= NULL)pcurrent->next = p2;return head;} 132.已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。(Autodesk)答案:
Node * MergeRecursive(Node *head1 , Node *head2){ if(head1 == NULL)return head2;if(head2 == NULL)return head1;Node *head = NULL;if(head1->data data){ head = head1;head->next = MergeRecursive(head1->next,head2);} else { head = head2;head->next = MergeRecursive(head1,head2->next);} return head;}
133.分析一下这段程序的输出(Autodesk)cla B { public: B(){ cout
133 将“引用”作为函数参数有哪些特点?
(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。
134.什么时候需要“引用”?
流操作符(>)和赋值操作符(=)的返回值、拷贝构造函数的参数、赋值操作符的参数、其它情况都推荐使用引用。
135.面向对象的三个基本特征,并简单叙述之?
1.封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)
2.继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式。
3.多态:是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
136.求下面函数的返回值(微软)
int func(x){ int countx = 0;while(x){ countx ++;x = x&(x-1);} return countx;}
假定x = 9999。答案:8 思路:将x转化为2进制,看含有的1的个数。
37、写出下列代码的输出内容 #include int inc(int a){ return(++a);} int multi(int*a,int*b,int*c){ return(*c=*a**b);} typedef int(FUNC1)(int in);typedef int(FUNC2)(int*,int*,int*);void show(FUNC2 fun,int arg1, int*arg2){ INCp=&inc;int temp =p(arg1);fun(&temp,&arg1, arg2);printf("%dn",*arg2);} main(){ int a;show(multi,10,&a);return 0;} 答:110 138。编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。
char * search(char *cpSource, char ch){ char *cpTemp=NULL, *cpDest=NULL;int iTemp, iCount=0;while(*cpSource){
if(*cpSource == ch)
{
iTemp = 0;
cpTemp = cpSource;
while(*cpSource == ch)
++iTemp, ++cpSource;
if(iTemp > iCount)
iCount = iTemp, cpDest = cpTemp;
if(!*cpSource)
break;
}
++cpSource;} return cpDest;}
139。请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
int search(char *cpSource, int n, char ch){
int i;
for(i=0;i
return i;}
140.一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。
41、用指针的方法,将字符串“ABCD1234efgh”前后对调显示 #i nclude #i nclude #i nclude int main(){
char str[] = "ABCD1234efgh";
int length = strlen(str);
char * p1 = str;
char * p2 = str + length*(unsigned char *)dst)&& *dst){
++src;++dst;}
if(ret
ret =-1;
else if(ret > 0)
ret = 1;
return(ret);} 1
48、判断一个字符串是不是回文 int IsReverseStr(char *aStr){ int i,j;int found=1;if(aStr==NULL)return-1;j=strlen(aStr);for(i=0;i
149 #include main(){ int c[3][3]={1,2,3,4,5,6,7,8,9};for(int i=0;i
printf("-------------------------n");printf("%ldn",(c+1));printf("%ldn",(*c+1));printf("%ldn",&c[0][0]);printf("%ldn",**c);printf("%ldn",*c[0]);
if(int(c)==int(*c))printf("equl");}
为什么c,*c的值相等,(c+1),(*c+1)的值不等 c,*c,**c,代表什么意思?
参考答案:
c是第一个元素的地址,*c是第一行元素的首地址,其实第一行元素的地址就是第一个元素的地址,这容易理解。**c是提领第一个元素。
为什么c,*c的值相等?
int c因为直接用c表示数组c[0][0] printf("%ldn",*c[0]);语句已将指针移到数组头。int(*c)表示c0的值为1,所以相等。数组c的存放空间示意如下:(机器中是行优先存放的)c[0][0] c[0][1] c[0][2] c[1][0] c[1][1] c[1][2] c[2][0] c[2][1] c[2][2] c是一个二维数组名,实际上它是一个指针常量,不能进行自加、自减运算,即:c++、c--、++c、--c 都是不允许的;
c: 数组名;是一个二维指针,它的值就是数组的首地址,也即第一行元素的首地址(等于 *c),也 等于第一行第一个元素的地址(& c[0][0]);可以说成是二维数组的行指针。*c: 第一行元素的首地址;是一个一维指针,可以说成是二维数组的列指针。**c:二维数组中的第一个元素的值;即:c[0][0] 所以: c 和 *c的值是相等的,但他们两者不能相互赋值,(类型不同);(c + 1):c是行指针,(c + 1)是在c的基础上加上二维数组一行的地址长度,即从&c[0][0] 变到了&c[1][0];(*c + 1):*c是列指针,(*c + 1)是在*c的基础上加上二数组一个元素的所占的长度,即从 &c[0][0]变到了&c[0][1] 从而(c + 1)和(*c + 1)的值就不相等了
150、定义 int **a[3][4], 则变量占有的内存空间为:__32___ 参考答案:
int **p;/*16位下sizeof(p)=2, 32位下sizeof(p)=4*/ 总共 3*4*sizeof(p)
51、写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值 int a = 4;(A)a +=(a++);(B)a +=(++a);(C)(a++)+= a;(D)(++a)+=(a++);a = ? 答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a)+= a;改后答案依次为9,10,10,11
52、某32位系统下, C++程序,请计算sizeof 的值 char str[] = “http://www.xiexiebang.com/” char *p = str;int n = 10;请计算
(1)sizeof(str)= ?
(2)sizeof(p)= ?
(3)sizeof(n)= ?
void Foo(char str[100]){ 请计算
sizeof(str)= ?(4)} void *p = malloc(100);请计算
sizeof(p)= ?(5)答:(1)25(2)4(3)4(4)4(5)4
53、回答下面的问题
(1).Void GetMemory(char **p, int num){ *p =(char *)malloc(num);} void Test(void){ char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);} 请问运行Test 函数会有什么样的结果? 答:输出“hello”
54、void Test(void){ char *str =(char *)malloc(100);strcpy(str, “hello”);free(str);if(str!= NULL){ strcpy(str, “world”);printf(str);} } 请问运行Test 函数会有什么样的结果? 答:输出“world”
55、char *GetMemory(void){ char p[] = "hello world";return p;} void Test(void){ char *str = NULL;str = GetMemory();printf(str);} 请问运行Test 函数会有什么样的结果? 答:无效的指针,输出不确定
56、编写strcat函数
已知strcat函数的原型是char *strcat(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat 答:
VC源码:
char * __cdecl strcat(char * dst, const char * src){ char * cp = dst;while(*cp)cp++;while(*cp++ = *src++);return(dst);}
57、strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值? 答:方便赋值给其他变量
58、MFC中CString是类型安全类么?
答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换
159.C++中什么数据分配在栈或堆中?
答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理 堆: 程序运行时动态申请,new 和malloc申请的内存就在堆上
160、函数模板与类模板有什么区别?
答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化 必须由程序员在程序中显式地指定。
1、int i=10, j=10, k=3;k*=i+j;k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低
2、do„„while和while„„do有什么区别? 答、前一个循环一遍再判断,后一个判断以后再循环
3、请写出下列代码的输出内容 #i nclude main(){ int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;} 答、10,12,120
164.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 答、函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr);程序例: #include #include int main(void){
long l;
char *str = "98765432";
l = atol(lstr);
printf("string = %s integer = %ldn", str, l);
return(0);}
165.以下三条输出语句分别输出什么? char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char* str5 = "abc";const char* str6 = "abc";cout
166 以下代码中的两个sizeof用法有问题吗?
void UpperCase(char str[])
// 将 str 中的小写字母转换成大写字母 { for(size_t i=0;i
答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
167 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A? 答:
a.cla B : public A { „„} // B公有继承自A,可以是间接继承的 b.cla B { operator A();} // B实现了隐式转化为A的转化 c.cla A { A(const B&);} // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数
d.A& operator=(const A&);// 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
168.以下代码有什么问题? struct Test { Test(int){} Test(){} void fun(){} };void main(void){ Test a(1);a.fun();Test b();b.fun();}
答:变量b定义出错。按默认构造函数定义对象,不需要加括号。
169 以下代码有什么问题? cout
170 以下代码能够编译通过吗,为什么? unsigned int const size1 = 2;char str1[ size1 ];unsigned int temp = 0;cin >> temp;unsigned int const size2 = temp;char str2[ size2 ];答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。
171.以下代码中的输出语句输出0吗,为什么? struct CLS { int m_i;CLS(int i): m_i(i){} CLS(){ CLS(0);} };CLS obj;cout
答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。
172 C++中的空类,默认产生哪些类成员函数? 答:
cla Empty { public: Empty();// 缺省构造函数
Empty(const Empty&);// 拷贝构造函数 ~Empty();// 析构函数
Empty& operator=(const Empty&);// 赋值运算符 Empty* operator&();// 取址运算符 const Empty* operator&()const;// 取址运算符 const };
173 以下两条输出语句分别输出什么? float a = 1.0f;cout
答:分别输出false和true。注意转换的应用。(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1,(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换)。因为1以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。对b的两种转换意义同上,但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。
注意,程序的输出会显示(int&)a=1065353216,这个值是怎么来的呢?前面已经说了,1以浮点数形式存放在内存中,按ieee754规定,其内容为0x0000803F(已考虑字节反序)。这也就是a这个变量所占据的内存单元的值。当(int&)a出现时,它相当于告诉它的上下文:“把这块地址当做整数看待!不要管它原来是什么。”这样,内容0x0000803F按整数解释,其值正好就是1065353216(十进制数)。通过查看汇编代码可以证实“(int)a相当于重新构造了一个值等于a的整型数”之说,而(int&)的作用则仅仅是表达了一个类型信息,意义在于为cout
4、请简述以下两个for循环的优缺点(5分)
for(i=0;i
DoSomething();else
DoOtherthing();} if(condition){ for(i=0;i
DoSomething();} else {
for(i=0;i
DoOtherthing();}
优点:程序简洁
缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。
优点:循环的效率高 缺点:程序不简洁
175 void GetMemory(char *p){ p =(char *)malloc(100);} void Test(void){ char *str = NULL;GetMemory(str);
strcpy(str, "hello world");printf(str);} 请问运行Test函数会有什么样的结果? 答:程序崩溃。
因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, "hello world");将使程序崩溃。
176 char *GetMemory(void){
char p[] = "hello world";return p;} void Test(void){ char *str = NULL;
str = GetMemory();
printf(str);} 请问运行Test函数会有什么样的结果? 答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
177 void GetMemory2(char **p, int num){ *p =(char *)malloc(num);} void Test(void){ char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");
printf(str);
} 请问运行Test函数会有什么样的结果? 答:
(1)能够输出hello(2)内存泄漏
178 void Test(void){ char *str =(char *)malloc(100);
strcpy(str, “hello”);
free(str);
if(str!= NULL)
{
strcpy(str, “world”);
printf(str);
} } 请问运行Test函数会有什么样的结果?
答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!= NULL)语句不起作用。
9、请阅读以下一段程序,并给出答案。 cla A { public:
A(){ doSth();}
virtual void doSth(){printf("I am A");} };cla B:public A { public:
virtual void doSth(){ printf("I am B");} };B b;执行结果是什么?为什么? 答:执行结果是I am A 因为b对象构造时调用基类A的构造函数A(),得此结果。
180 实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;答:双向链表删除一个节点P template void list::delnode(int p){ int k=1;listnode *ptr,*t;ptr=first;
while(ptr->next!=NULL&&k!=p){
ptr=ptr->next;
k++;}
t=ptr->next;coutdata
ptr->next=ptr->next->next;length--;delete t;}
在节点P后插入一个节点:
template bool list::insert(type t,int p){ listnode *ptr;ptr=first;
int k=1;while(ptr!=NULL&&k
{
ptr=ptr->next;
k++;} if(ptr==NULL&&k!=p)
return false;else {
listnode *tp;
tp=new listnode;
tp->data=t;
tp->next=ptr->next;
ptr->next=tp;
length++;
return true;} }
181.完成下列程序
*
*.*.*..*..*..*...*...*...*...*....*....*....*....*....*.....*.....*.....*.....*.....*.....*......*......*......*......*......*......*......*.......*.......*.......*.......*.......*.......*.......*.......#i nclude using namespace std;
const int n = 8;
main(){
int i;
int j;
int k;
for(i = n;i >= 1;i--)
{
for(j = 0;j
{
cout
for(k=1;k
{
cout
}
}
cout
}
system("pause");}
182完成程序,实现对数组的降序排序
#include using namespace std;
void sort(int* arr, int n);
int main()
{
int array[]={45,56,76,234,1,34,23,2,3};
sort(array, 9);
for(int i = 0;i
cout
cout
system("pause");}
void sort(int* arr, int n){
int temp;
for(int i = 1;i
{
for(int k = 0;k
{
if(arr[k]
{
temp = arr[k];
arr[k] = arr[k + 1];
arr[k + 1] = temp;
}
}
} }
183.以下两条输出语句分别输出什么?[C++难] float a = 1.0f;cout
51.以下反向遍历array数组的方法有什么错误?[STL易] vector array;array.push_back(1);array.push_back(2);array.push_back(3);for(vector::size_type i=array.size()-1;i>=0;--i)// 反向遍历array数组 {
cout
184 写一个函数,完成内存之间的拷贝。[考虑问题是否全面] 答:
void* mymemcpy(void *dest, const void *src, size_t count){
char* pdest = static_cast(dest);
const char* psrc = static_cast(src);
if(pdest>psrc && pdest
{
for(size_t i=count-1;i!=-1;--i)
pdest[i] = psrc[i];
}
else
{
for(size_t i=0;i
pdest[i] = psrc[i];
}
return dest;} int main(void){
char str[] = "0123456789";
mymemcpy(str+1, str+0, 9);
cout
system("Pause");
return 0;}
185 对于C++中类(cla)与结构(struct)的描述正确的为:
A,类中的成员默认是private的,当是可以声明为public,private 和protected, 结构中定义的成员默认的都是public;
B,结构中不允许定义成员函数,当是类中可以定义成员函数;
C,结构实例使用malloc()动态创建,类对象使用new 操作符动态分配内存;
D,结构和类对象都必须使用new 创建;
E,结构中不可以定义虚函数,当是类中可以定义虚函数.F,结构不可以存在继承关系,当是类可以存在继承关系.答:A,D,F
186.两个互相独立的类:ClaA 和 ClaB,都各自定义了非静态的公有成员函数 PublicFunc()和非静态的私有成员函数 PrivateFunc();
现在要在ClaA 中增加定义一个成员函数ClaA::AdditionalPunction(ClaA a,ClaB b);则可以在AdditionalPunction(ClaA x,ClaB y)的实现部分(函数功能体内部)
出现的合法的表达是最全的是:
A,x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();
B,x.PrivateFunc();x.PublicFunc();y.PublicFunc();
C,x.PrivateFunc();y.PrivateFunc();y.PublicFunc();
D,x.PublicFunc();y.PublicFunc();答:B
186.C++程序下列说法正确的有:
A,对调用的虚函数和模板类都进行迟后编译.B,基类与子类中函数如果要构成虚函数,除了要求在基类中用virtual 声名,而且必须名字相同且参数类型相同返回类型相同
C,重载的类成员函数都必须要:或者返回类型不同,或者参数数目不同,或者参数序列的类型不同.D,静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函数,但是析构函数可以是虚函数.答:A ***************************************************************************
187 头文件的作用是什么? 答:
一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
8、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char str[] = “Hello”;char
*p = str;int
n = 10;请计算
sizeof(str)= 6
(2分)
sizeof(p)=
(2分)
sizeof(n)=
(2分)void Func(char str[100]){ 请计算
sizeof(str)=
(2分)}
void *p = malloc(100);请计算
sizeof(p)= 4
(2分)
3写出下列程序的运行结果。
unsigned int i=3;cout
189.写出下列程序所有可能的运行结果。
int a;int b;int c;
void F1(){
b=a*2;a=b;}
void F2(){
c=a+1;a=c;}
main(){ a=5;
//Start F1,F2 in parallel F1();F2();
printf("a=%dn",a);}a=11
190一个链表的操作,注意代码的健壮和安全性。要求:
(1)增加一个元素;
(2)获得头元素;
(3)弹出头元素(获得值并删除)。
191.unsigned short array[]={1,2,3,4,5,6,7};int i = 3;*(array + i)= ? 答: 4
192 cla A {
virtual void func1();
void func2();} Cla B: cla A {
void func1(){cout
virtual void func2(){cout
答: A
193输出下面程序结果。
#include cla A { public: virtual void print(void)
{
cout
} };cla B:public A { public: virtual void print(void)
{
cout
cla C:public B { public: virtual void print(void){
cout
a.print();}
void main(void){
A a, *pa,*pb,*pc;
B b;
C c;
pa=&a;
pb=&b;
pc=&c;
a.print();
b.print();
c.print();
pa->print();
pb->print();
pc->print();
print(a);
print(b);
print(c);}
A::print()A::print()B::print()C::print()A::print()B::print()C::print()A::print()A::print()A::print()
------------194.程序改错 cla mml {
private:
static unsigned int x;
public:
mml(){ x++;}
mml(static unsigned int &){x++;}
~mml{x--;}
pulic:
virtual mon(){} = 0;
static unsigned int mmc(){return x;}
......};cla nnl:public mml {
private:
static unsigned int y;
public:
nnl(){ x++;}
nnl(static unsigned int &){x++;}
~nnl{x--;}
public:
virtual mon(){};
static unsigned int nnc(){return y;}
......};
代码片断: mml* pp = new nnl;..........delete pp;
A: 基类的析构函数应该为虚函数 virtual ~mml{x--;}
------------195.101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。
答: 101个先取出2堆, 33,33 第一次称,如果不相等,说明有一堆重或轻
那么把重的那堆拿下来,再放另外35个中的33 如果相等,说明假的重,如果不相等,新放上去的还是重的话,说明假的轻(不可能新放上去的轻)
第一次称,如果相等的话,这66个肯定都是真的,从这66个中取出35个来,与剩下的没称过的35个比
下面就不用说了
方法二: 第3题也可以拿A(50),B(50)比一下,一样的话拿剩下的一个和真的比一下。如果不一样,就拿其中的一堆。比如A(50)再分成两堆25比一下,一样的话就在 B(50)中,不一样就在A(50)中,结合第一次的结果就知道了。
196.写出程序结果: void Func(char str[100]){
printf("%dn", sizeof(str));}
答: 4 分析: 指针长度
197.int id[sizeof(unsigned long)];
这个对吗?为什么?? 答: 对
这个 sizeof是编译时运算符,编译时就确定了 可以看成和机器有关的常量。
8、sizeof应用在结构上的情况
请看下面的结构:
struct MyStruct {
double dda1;char dda;int type };
对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求:
sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13
但是当在VC中测试上面结构的大小时,你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗?
其实,这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了"对齐"处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。
类型
对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)
Char
偏移量必须为sizeof(char)即1的倍数
int
偏移量必须为sizeof(int)即4的倍数
float
偏移量必须为sizeof(float)即4的倍数
double 偏移量必须为sizeof(double)即8的倍数
Short
偏移量必须为sizeof(short)即2的倍数
各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍? 199
#include "stdafx.h" Y n P }2{&k O v H `,o0 #define SQR(X)X*X int main(int argc, char* argv[]){ int a = 10;int k = 2;int m = 1;
a /= SQR(k+m)/SQR(k+m);printf("%dn",a);return 0;} 这道题目的结果是什么啊? define 只是定义而已,在编择时只是简单代换X*X而已,并不经过算术法则的 a /= k+m*k+m/k+m*k+m;=>a /=(k+m)*1*(k+m);=>a = a/9;=>a = 1;
200.下面的代码有什么问题?
void DoSomeThing(...){ char* p;p = malloc(1024);// 分配1K的空间 2y x
if(NULL == p)return;p = realloc(p, 2048);// 空间不够,重新分配到2K if(NULL == p)return;} A:
p = malloc(1024);
应该写成: p =(char *)malloc(1024);
没有释放p的空间,造成内存泄漏。201下面的代码有什么问题?并请给出正确的写法。void DoSomeThing(char* p){ char str[16];int n;aert(NULL!= p);canf(p, "%s%d", str, n);if(0 == strcmp(str, "something")){ } } A: canf(p, "%s%d", str, n);
这句该写成:------------202.下面代码有什么错误?
Void test1(){
char string[10];
char *str1="0123456789";strcpy(string, str1);
}
数组越界
203.下面代码有什么问题?
Void test2()
{
char string[10], str1[10];
for(i=0;i
str1[i] ='a';}
strcpy(string, str1);}
} 数组越界
204下面代码有什么问题?LUPA开源社区+j H2B F,c U
canf(p, "%s%d", str, &n);
Void test3(char* str1){
char string[10];if(strlen(str1)
strcpy(string, str1);} }
==数组越界
==strcpy拷贝的结束标志是查找字符串中的 因此如果字符串中没有遇到 的话 会一直复制,直到遇到 ,上面的123都因此产生越界的情况 建议使用 strncpy 和 memcpy
205.写出运行结果: {
char str[] = "world";cout
char *p
= str;
cout
char i
= 10;
cout
void *pp
= malloc(10);cout
------------206.C和C++有什么不同? 从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是,c++编写面向对象的程序比c容易
从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。
从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比
c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++ C语言是结构化编程语言,C++是面向对象编程语言。LUPA开源社区 } n*r2C/M8f C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。
207在不用第三方参数的情况下,交换两个参数的值 #include void main(){
int i=60;
int j=50;
i=i+j;
j=i-j;)
第12篇:C#程序员实习报告
C#程序员实习报告
摘要
实习是一名毕业生提高自己对社会的适应能力和认知能力的一个及其重要过程,在这个过程中,理论结合实际,把大学学到的知识应用到实践中,让自己迅速适应社会,达到IT前进的快速步伐的要求。实习过程中通过理论联系实际、学校与社会之间的过渡,实现进一步提高学生的思想觉悟、适应社会能力、学习能力、业务水平,尤其是观察、判断和解决问题的工作能力,从而培养自己能够成为一名适应现代化建设和发展需要的高素质高才能的复合型人才。1 实习的目的和意义
1.加强和巩固理论知识,发现问题并运用所学知识分析问题和解决问题的能力,通过实习使学生获得基本生产的感性知识,理论联系实际,扩大知识面。
2.锻炼自己的实习工作能力,适应社会能力和自我管理的能力,锻炼和培养个人的业务能力及素质,培养当代大学生吃苦耐劳的精神。
3.了解实习单位的计算机技术的应用情况、需求情况和发展方向及前景,同时让学生接触社会、了解产业状况、了解国情,逐步实现由学生到社会的转变,培养我们初步担任技术工作的能力、初步了解企业管理的基本方法和技能。
4.亲身参与项目的实际完成工作,了解计算机专业软件开发的具体流程。
5.通过实习来认识了解自己,发现不足,提前做好自己的职业规划,为自己的未来道路画上浓厚的一笔。
2 实习的岗位及工作情况介绍
2.1 实习单位简介
厦门市智业软件工程有限公司创建于1997年,目前已拥有180多名高素质IT员工,专业提供卫生医疗行业信息化整体解决方案。智业公司总部设立在美丽的鹭岛——厦门,同时在国内设立了北京、广州、重庆、沈阳、合肥和乌鲁木齐共6个全资分公司,和多家办事处机构。
智业公司产品线基本涵盖卫生医疗全行业信息化领域,包括:医院信息系统(通过卫生部信息化领导小组评审鉴定、国家级火炬计划项目产品)、城市电子病历系统、城市健康体检信息系统、区域卫生信息化平台(国家十一五科技支撑计划项目产品)、城市妇幼保健信息系统平台(科技部中小科技企业创新基金项目产品、福建省发改委科技成果转化扶持项目)、城市社区医疗信息系统平台、区域中小医疗机构信息系统平台、医学影像存储与传输系统、实验室信息系统、医疗集成平台系统等,目前拥有数百家各级医疗机构用户。
智业产品在国内率先开发了一卡通预交金模式,推出了一系列医院就诊流程优化再造的信息化措施,并在国内率先引入了医保卡、银行卡的一卡通模式等,另外还较早地迈向了临床信息系统(CIS)的开发领域,推出了结构化的电子病历系统、临床质控系统、医学科研检索系统、临床移动工作站等系统。智业产品
不仅适用于各类国有大中型医院,还因产品的高度灵活性和强大细腻的功能设置,而被国内多家大型股份制/民营医院所选用。
2000年起,智业在国内首家开发了区域妇幼保健信息共享服务平台系统,当年即获科技部中小科技企业创新基金的大力扶持。智业还与厦门市妇幼保健院联合中标了《中国妇幼保健标准体系和共享服务研究》的国家课题,成为六家中标单位之一。截止目前,厦门市妇幼保健信息系统平台仍是国内唯一成功运行的城市级妇幼保健信息系统平台,厦门市由此成为全国妇幼保健信息化示范城市。2006年,智业开发的厦门市市民健康信息系统一期成功运行,是国内首个(目前唯一)运行的城市级卫生信息化共享服务平台。至2008年底,该项目三期均已顺利完成。2009年2月28日,[国家十一五科技支撑计划项目区域卫生信息化支撑系统厦门示范区]——厦门市市民健康信息系统正式启动,该系统已被认为是“我国区域卫生信息化建设迄今为止最为成功的实践蓝本”(新闻联播报道)。该系统是一套基于区域协同医疗,以居民健康档案信息为基础的卫生信息共享与服务的系统平台。主要建立一套可推广可移植的、能够初步解决“看病难”、“看病贵”、“看病乱”的区域协同医疗公共服务集成平台和运行机制,为创建全新的符合国家新医改政策的现代医疗服务模式提供强大的信息化技术支撑能力。系统内容涵盖市民从生命孕育的那一刻起,直到生命消逝的那一刻止,有关这个生命的所有健康信息,以及其父系和母系的家族健康史。厦门市市民健康信息系统已建立完善了100多万份市民完整的个人健康档案,建档数量居于全球首位。目前,厦门市已成为我国区域卫生信息化建设的示范城市,并成为了国家新医改的首批试点城市。
2.2 工作岗位介绍
我的工作岗位是区域运营中心的C#程序员,公司对本岗位的要求如下: 职位描述:
在项目经理的带领下,根据客户需求开发程序。
岗位要求:
1、计算机相关专业本科学历或以上;
2、熟练使用C#,精通基于ASP.NET的WEB开发;
3、有较强的软件开发过程评估和控制能力,有良好的代码书写规范;
4、逻辑思路清晰,工作认真负责,良好的团队合作精神;
5、能够独立高质量的完成工作,具有较强的领悟力;
3 实习内容及相关技术的介绍
3.1 实习内容
对市民健康网进行了解改造。
包括以下内容:
一、改造目的智业软件的厦门市民健康信息系统(网站),是居民健康信息系统的一个重要组成部分,承载着市民健康系统对外展示市民健康信息的重要职能,随着公司业务的不断发展,不断有新的项目需要部署。但原市民健康网的系统架构是针对
厦门单一区域定制开发的,在其它区域的实施过程中还需要根据需求不同进行针对性修改,给系统的部署、升级与维护带来诸多不便。为提高部署效率,方便系统的维护与升级,市民健康网的模块化定制开发已经迫在眉睫。
改造后主要能实现以下的功能:
网站通用信息的后台设置:含网站TITLE,META里的网站KEYWORDS,网
站DESCRIPTION,版权信息,联系方式,备案信息等;
网站主要功能链接(导航)的增删改;
根据需求,网站布局能够进行适当设置;
页面BANNER横幅的替换;
搜索引擎优化;
网站页面模板的选择(高级功能);
静态页面的生成机制;
改造后的目标:产品开发完成后,能在不同区域运用实施。部署时,只需在后台进行初始设置,如设定网站LOGO,TITLE,BANNER,页面风格。非必要下,不需要再改动源代码。功能升级或BUG改造,只需修改并上传BIN库里的DLL或页面风格模板。
3.2 相关技术简介
1.oracle技术
(1)Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。
(2)特点:
1、ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。这减少了 ○
ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
2、提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整○
性检查、安全性、一致性方面都有良好的表现。
3、○支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
4、○提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如 POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC平台的应用程序,并具有良好的移植性。
5、○提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。2.webservice技术
(1)Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
(2)它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的webwebservice
应用程序分支,是自包含、自描述、模块 化的应用,可以发布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
(3)Web services 可以把应用程序组件作为服务来提供,比如汇率转换、天气预报或者甚至是语言翻译等等。
使用 Web services,您可以在不同的应用程序与平台之间来交换数据 WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
WSDL 指网络服务描述语言
WSDL 使用 XML 编写
WSDL 是一种 XML 文档
WSDL 用于描述网络服务
WSDL 也可用于定位网络服务
WSDL 还不是 W3C 标准
UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。
UDDI 指通用的描述、发现以及整合(Universal Description, Discovery and Integration)。
UDDI 是一种用于存储有关 web services 的信息的目录。
UDDI 是一种由 WSDL 描述的网络服务接口目录。
UDDI 经由 SOAP 进行通迅。
UDDI 被构建于 Microsoft.NET平台之中
(4)WSDL 可描述网络服务(Web Services)
WSDL 指网络服务描述语言(Web Services Description Language)。WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
在 W3C 的 WSDL 发展史
在 2001 年 3 月,WSDL 1.1 被 IBM、微软作为一个 W3C 纪录(W3C note)提交到有关 XML 协议的 W3C XML 活动,用于描述网络服务。
(W3C 纪录仅供讨论。一项 W3C 纪录的发布并不代表它已被 W3C 或 W3C 团队亦或任何 W3C 成员认可。)
4 实习结果
几个月的实习下来,让自己走进了一个全新的领域,开始了自己真正的工作生涯。实习无所谓结果而言,更确切的说,它是一个开端,一个让自己学会成长,学会飞翔的地方。不管是从职业道德,工作专业技能还是从为人处事方面,我都感觉到了有很大的提高。
首先,在职业道德方面,有强烈的责任心和事业心,敬业爱岗,积极主动的去学习相关专业知识,认真工作,态度端正,对不了解的,不懂的知识认真学习
和进行思考。
其次,专业知识方面,学习软件开发知识,webservice等架构知识,对个人开发能力等有很大的提高,让自己在激烈的竞争中保证优势。
最后,在与人共同交流方面,让我受益匪浅,特别感谢在工作,生活上帮助过我的同事和上司,是他们教育了我为人处世方面的待人更加诚恳,待事更加负责。
5 实习总结
通过这次实习,基本达到了此次实习的目的,加强和巩固了理论知识,提高了发现问题并运用所学知识分析问题和解决问题的能力。锻炼自己的实习工作能力,适应社会能力和自我管理的能力。了解了实习单位的计算机技术的应用情况、需求情况和发展方向及前景。亲身参与了项目的实际完成工作,了解了计算机专业软件开发工作的具体流程。
虽然实习只有短短的两个星期,但是我的收获是很多的。从对项目相关的技术完全不了解,到和同事组成的团队一起克服种种困难,解决各种疑问,一起协同合作成功将软件调试成功。“实践是检验真理的唯一标准”,没有实践何来了解、进步之说。我的感触颇深,古语有云:读万卷书,行万里路。古人将读与行并列甚至有偏重行的意味,这正是说明了实践的重要性。同事也深深的体会到实习的重要性和必要性。
这次实习不仅拓展了眼界,更为重要的是使我们了解了所学专业的现阶段发展状况及未来发展动向。总体来说目前计算机行业的发展前景,以及一些当今比较流行比较热门的技术,为我们的学习指明了方向,也将激励我们计算机专业学子更加努力地学好自己的专业知识,为今后的发展打好基础。
同时,在这段时间我得到的最大体会就是,如果一个人在社会上没有一技之长,那他是没有办法很好的活下来的。工欲善其事,必先利其器。而对于我们来说,扎实稳固的技术就是我们走上工作岗位,实现人生梦想、自我价值以及在竞争越来越激烈的今天立足社会的最好利器,只有不断的加强自身专业技能学习才行。所以,我会在以后的时间里努力学习,加强自己的专业能力,使自己变得更强,只有这样才能为自己、为父母、为学校交出一份满意的答卷。
实习生活暂告一个段落,闲暇之余,我开始静静地长思。通过这次实习,我认识到只有沉下身来,静下心来认真学习,踏实做事,多用心,多动脑,才能让自身能力有好的起色。社会的竞争是激烈的,我想我们应该好好把握住大学学习的时间,充实、完善自我,全面发展,做一名出色的IT精英!
参考文献
①史济民:《软件工程》,北京高等教育出版社,2002.12;
②常永英:《ASP.NET程序设计教程(C#版)》,机械工业,2007.09;
③宋 玮:《软件工程教学的思考》,广东工业大学学报(社会科学版),;
④Benjamin Rosenzweig[美] :《ORACLE PL/SQL实例精解》,机械工业,2009.06; ⑤凯特(美):《ORACLE 9I&10G编程艺术》,人民邮电,2009.07;
第13篇:C程序员精通Perl
C程序员精通Perl
本书帮助有C和C++背景的程序员学习和使用Perl语言。
全书共17章,探讨了Perl语言的所有知识要点。既包括C程序员所熟悉的变量、数据结构、控制语句和子程序,又包括C中所没有的报告编写、文本表格操纵、CGI编程以及简单数据库接口,还讲述了如何充分利用CPAN库中广泛的Perl模块库。
本书可作为C和C++程序员学习Perl编程的参考书。对于Perl语言的初学者,本书可以帮助他们了解C和Perl之间可比较、可结合特性。
第14篇:C程序员面试简答题
经典面试题-C语言与数据结构
(自己整理的一些C语言与数据结构面试简答题,希望对大家有所帮助,同时程序员,共勉…..红色为答案)
1.用预处理指令#define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年 问题);
#define YEAR(60 * 60 * 24 * 365)UL
2、写一个"标准"宏MIN函数 ,这个宏输入两个参数并返回较小的一个
#define MIN(a, b)((a)
3、用变量a给出下面的定义
一个整型数(An integer)int a
b)一个指向整型数的指针(A pointer to an integer)int *a
c)一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)int **a d)一个有10个整型数的数组(An array of 10 integers)
int a[10] e)一个有 10 个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)int *a[10]
f)一个指向有10个整型数组的指针(A pointer to an array of 10 integers)
int(*a)[10] g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
int*(a(int))
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返 回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer)
int(*a[10])(int)
4、关键字volatile有什么含意? Volatile是一个类型修饰符,它是被设计用来修饰不同线程访问和修改的变量,它的作用是来确保本条指令不会编译器的优化而省略,且要求每次直接读值。即防止编译器优化,传说这个关键字是区别软件工程师和嵌入式工程师的一个重要标志。并给出三个不同的例子。
1、并行设备的硬件寄存器;
2、一个终端服务子程序会访问到的非自动变量;
3、多线程应用中被几个任务共享的变量
5、结构与联合有和区别?。
结构和联合都是由多个数据组成的,但是在任何时间,联合只存在某一被选定的数据成员,而结构存在了所有的数据成员;
对联合某一数据成员赋值,对其他成员的的值也会改变,但是对结构中,对其中一个数据成员赋值不影响其他的数据成员
阶段性测试
6、求下面函数的返回值(微软)
int func(x){ int countx = 0;while(x){ countx ++;x = x&(x-1);} return countx;}
7、数组与指针的区别?
一个数组是一个地址,一个指针是一个地址的地址,址
移位操作为何最好使用无符号数?
如果是有符号的话,移位可能会改变符号,造成错误。
8、关键字 static的作用是什么?
数组是对应地址,指针是指向地声明为静态变量,这样此变量会保存在全局静态数据区;
声明作用域为当前文件。这个也是经常问到的题目,建议自己搜一下理解深刻,9.#include 与 #include "file.h"的区别?
系统自带文件,自定义文件
10、下面const的含义如何?
const int *a;a可变,a指向的对象不可变
int const *a;a可变,a指向的对象不可变
int * const a;a不可变,a指向的对象不可变
int const * const a;都不能变 10.什么是内存操作越界?
对变量在使用的过程中超出定义范围,即为内存越界,如定义数组
int a[10],在操作过程中 有
a[10] = “hello world“;就会出现内存越界,因为加上‘ ’,字符串大小是11,12.什么是内存泄漏? 造成内存泄漏的原因有哪些?
使用的某块内存,却未释放,长此以往,如服务器端的程序,长期不关闭的话,会造成内存越来越少,即为内存泄露。在使用
new – delet
malloc – free时尤其注意
13、请说出const与#define 相比,有何优点?
const常量有数据类型,而宏常量没有数据类型,只是简单的替换,前者编译器能进行安全检查,后者则不能被安全检查。
14、函数式宏定义和函数调用有什么不同?
const常量有数据类型,而宏常量没有数据类型,只是简单的替换,前者编译器能进行安全检查,后者则不能被安全检查。
15、中参数传递有什么特点? 我们应当注意些什么?
一般来说包括传值和传地址,在传值的过程中应注意:形参与实参各占一个独立的存储空间,形参的存储空间是被调用才分配,调用开始系统为形参开辟一个临时存储区,然后将格实参传递给形参,从而形参得到实参的值
15、goto有什么特点? 在C语言中对goto的使用有什么注意事项?
goto灵活跳转,使某些复杂的问题可以轻易解决;但是其会破坏C的结构化编程风格,易造成不可察觉的错误。
16、使用swicth的注意事项
Break不能遗漏,这会造成每条逐句执行;default就算什么也不做,也请尽量写上。
17、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
一般来说
while(1){
} 就可以了
18、#define STRING char *;Typedef更好哪个更好一些为什么? #define是简单替换 易遇到问题 且出错不易查找
19、C语言对左值有什么限制? 只要不是常量就可以
20、程序调试中常见的错误有哪些? 考察你是不是真的有丰富的编程经验,一般是逻辑错误、语法错误、段错误;
21、什么是野指针?如何避免野指针? 释放之后未被制空的指针,free之后立即制空,同时对于指针要养成初始化的习惯 22.什么是函数指针?为什么能够使用函数指针,函数指针就是指向函数的指针变量;每个函数都有一个函数入口,函数指针即调用了此函数入口。
23、下列语句的作用是什么?
//循环体 #ifndef HEADER_FILENAME #define HEADER_FILENAME /* body of header */ #endif
意思就是如果此文件中没有定义名为 ‘HEADER_FILENAME’的头文件就在此定义,主要是为了防止头文件重复加载
24、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
全局变量存储在全局静态数据区中,局部变量存储在栈空间中
第15篇:C 程序员转正申请书
C++程序员转正申请书
尊敬的领导:
从5月中旬到现在,来中软已有两个多月了,在这段日子里可以说一直是处于学习的阶段,收获颇多,对于我从学生到一个职业人的转变具有重要意义。作为一个应届毕业生初来公司,对于能否适应这个陌生的工作环境,还是有点担心的。以下是本人在试用期间的工作表现:
刚进公司,我面试的是c++程序员,这个职位对于我来说,我是比较满意的,充满信心。不会unix命令就学习unix下的命令,一条一条的学,从最简单的ls到复杂的awk命令,每一条命令都去认真的学了,在学习shell知识、makefile等等关于c++ 的一些基础知识,再到看一些框架的代码,由于感觉一个人搞来搞去:没激情。看到和我一起入职的其他人都投入到了项目组中,总是希望自己能快速的投入到项目中去,在这个过程中,心态过于急躁,那段时间过于压抑,幸好,项目经理给予了及时的开导和沟通。
在进了prm项目组后,c++后台的人员暂时不能过来,其实我也研究了一段时间的代码!感觉很糊涂。感觉自己不能大局的把握代码流程。我就跟着大家一起学习业务知识,在这个过程中我也了解了业务的重要性,做开发就必须要了解业务,了解流程,慢慢的也投入到业务中去了,从了解项目是做各运营商计费系统,到数据对象模型,一点一点的去学。期间,安排先做测试的工作,对于这点我还是有点不满的,主要是我觉得测试没前途,没技术含量,搞开发的才有前途!同时,也怕自己做不好。
这样,我就开展测试工作了,虽然,心情有点小郁闷,但工作是工作,我没有因为情绪原因而怠慢工作,我一样的去认真学习,了解测试应该了解的业务,不懂就去问,学习测试用例该怎样写,环境的配置,测试场景的覆盖等等。在此,特别要感谢同事们在这段时间给予的照顾,有你们的帮助,才使我能够顺利的开展工作,在此过程中,通过学习,感觉测试也不是很容易的一件事,对于场景的覆盖,还是挺复杂的,感觉以前对于测试认识很肤浅,是错误的认识。测试工作对于整个项目的重要性是不可替代的,在这过程中也慢慢的去体会测试的思想,测试中发现的任何问题都可以提,通过这段时间的学习,不断培养和提高充实自己的工作动手能力,把自己的业务素质和工作能力进一步提高。
慢慢地,也逐渐改变了态度。总得来说,这段期间,我一直严格要求自己,遵守公司的各项规章制度,尽心尽力履行自己的工作职责,认真及时的做好领导布置的每一项任务,我的能力和为人处世方面都取得了不小的进步。当然我在工作中还存在一定的问题和不足,处理问题不能得心应手,有些问题就算你明白,但自己要动手操作就不是那么熟练了,对于这些不足,我会在以后的日子里虚心向周围的同事学习,专业和非专业上的问题虚心请教,努力丰富自己,寻找自身差距,扩展知识面,不断培养和提高充实自己的工作动手能力,把自己的业务素质和工作能力进一步提高,也希望领导和同事对我多提要求,多提建议,使我更快更好的完善自己,更好的适应工作需要。所以,我觉得不论你在什么岗位上,只要努力的做好自己,拥有一种积极向上的态度,你就能获得更多,你看待事物的观点就会与众不同,我想这就是所谓的境界吧!现在本人申请转正,成为公司正式的一员,望领导批准!
申请人:
申请日期:
第16篇:C程序员实习日记
实习日记
1第一次是来面试,当时感觉不怎么好,面试的人问了一些问题有些没回答上来,这并不奇怪,C#自己学习了2个月,然后就没怎么用,回答不上我觉得可以理解。没想到还能第二次来到公司,由于对环境还比较陌生,所以今天大概熟悉了一点,成都这边有50多个员工,属于研发中心,主要从事无线微波得较大型的设备的再加工,听同事说以前在北京,但由于北京人力资源太贵所以来到成都,这听起来怎么像是在压榨的感觉啊,没关系,只是来实习而已。
对于今天的第一个小任务,要求:界面、数据压入堆栈、简单冒泡排序实现数据有序输出、堆排序输出。让我快速地熟悉了C#,从界面到后台都得到了加强,此外在实现过程中对用到的冒泡排序和堆排序有了更深的理解,并能用C#熟练的实现。
实习日记
2今天对昨天的实例进行了改进和提高,将堆排序和冒泡排序封装在一个动态链接库中,提供函数调用和事件委托。此外加入XML进行配置,在XML中存入相关配置信息,提供一个单独的XmlCla对其进行操作,加深了对xml的理解。为增加程序的性能,采用简单工厂模式对其客户端和算法操作进行分离,有很好的可扩展性,对于C#的动态链接库和XML配置不怎么熟悉,花了很长一段时间看书和网上查资料,才开始动手写代码,不过感觉还是很快,因为自己有编程的能力,可以说掌握了一种快速编程的方法,所以就能驾轻就熟。
实习日记
3今天采用抽象工厂模式对实例进行改进,以达到动态加载算法实例,抽象工厂模式属于设计模式中的内容,自己在学习视频的时候注意到了,所以之前就买了本大话设计模式来学习,可以说了解了大部分设计模式。今天遇到后自己心里也有底,温故一下书就知道怎么做 了,可以说这是我学习的方法。
针对以上,在dll中提供一个接口,两个算法都继承了该接口,对于该dll的操作都通过接口ISort进行,此外,修改工厂为抽象工厂,提供一个接口创建算法,在算法中返回ISort实例,在主函数中使用该实例进行对应的排序算法操作,充分显示了抽象工厂的作用,本例子将反射和抽象工厂模式结合,增加了程序的可扩展性和可维护性。
实习日记
4由于自己编程能力还算可以吧,所以软件组的老大就叫我加入开始做一些这次项目的东西,说了一句“我可是没把你当实习生哦。”,这话一听当时感觉还好,不过后来一想,我却是吃亏了,他不把我当实习生但给我的却是实习生工资,这点有点想不过去,不过没关系,实习嘛就是学习,有基本工资也不错了,关键的公司提供的条件那是在学校里所得不到的:商业性的问题。
今天将上述实例的方法用到本次项目中,开始项目中的一些任务。仍然使用抽象工厂模式,将自定义窗体封装到类库中,将窗体的控件预留到外部进行实施定义;在XML文件中配置窗体的实际参数,利用反射按从XML中读出的参数动态加载窗体。将上述的实例方法运用到了实际项目中。
实习日记
5昨天的任务基本已完成,今天温习了一下加深了对知识的理解,可以说掌握得比较牢固了,今天又有新的任务,可以说每天都在进步。
按组长要求编写RankStyle=Group时的窗体排列方式,在XML中配置控件或窗体的参数,利用XML读接口从XML中读出参数,为了使程序具有灵活性,在组长的提示下将窗体的配置按照窗体的Name属性进行配置,之前是利用字段的方式写在XML中,但是组长说这样的话在程序中查找不方便,可我觉得没什么啊,当然了,对于我这个没有工作经验的人来说看什么都是可以的,所以要多学习学习。在FormControl中利用双层循环将控件容器中的控件按Name与读出的配置进行匹配,如果在XML中配置了该窗体,就设置该窗体的一些属性。个人感觉实现了该功能吧,最后经过组长看了一下审核基本通过。要求:
根据Group,从XML中读取控件配置信息,动态设置控件在主窗体中的显示。
实习日记6
每天都有不同的要求,哎,果然和学校是不一样啊,今天将DLL中的控件更换成窗体,方法仍然采用反射+抽象工厂模式。
虽然自己有一定编程经验,但是遇到问题是不可避免的,今天在编写过程中遇到了一个问题,就是当窗体接口和窗体类库放在一起的时候,在工厂中创建的实例无法装换成接口类型,经过多次测试和上网查阅相关资料,发现控件类实现接口,不能将接口放在同一个类库中,针对以上问题在网上查阅相关资料,结果还是没有相同的主题,没办法,只有硬着头皮在网上找,没有主题就找有没有相关的例子,结果还是没有,差点就无语了,突然看到有类似方法的一个例子,真是柳暗花明又一村啊,仔细看了看,发现他和我的结构有些差异,所以调了一下结构,一编译果然痛过了,就是将两个类库分离,再在接口中加入工厂便可创建实例并转换成接口。在主窗体中只需要引用该接口类库便可达到要求,使程序耦合性降低了。
实习日记7
由于黎甫对DLL的要求发生变化,今天就不断修正DLL程序,并验收,再结合Group的窗口排列方式对DLL中的窗体进行测试。我现在才明白,编写代码是一件很容易的事,但是编写好的代码却是很难的事情,好的代码要有可维护性、可扩展性,这样在修改的话就很简单,可不能像我昨天写得代码,根本谈不上艺术,所以一旦面对客户的要求,改动就很困难,这一点值得我继续学习。
至于可扩展性也是对维护的扩充,因为顾客的要求有可能随时都在改变,我们也得适应客户的要求,如果软件有了可扩展性,那么它的改动就比较小,就能适应顾客的要求。所有上面说的这些都是自己要学习的地方,这样在以后的商业开发中才能游刃有余,应对自如。
实习日记8
回顾前几天所做的练习,对遇到的问题进行解决,在网上查阅相关资料独立解决,并对之前的一些项目练习做好备份。将这几天练习中所用的编程方法都串联了一遍,形成了固定的模式,以便在今后可以快速的使用。
实习日记9
今天算是正式开始做公司的项目,上午黎甫和秦阳在会议室给我讲解了项目的一些功能并进行讨论,大致理解了项目后,分配了自己的一部分任务,整理过后在多次与秦阳的沟通请教下明白了自己的任务,下午秦阳建好VSS,我拷贝项目进行框架整合和测试。在编写代码的过程中也涉及了一些问题,通过看MSDN和上论坛,基本得到解决,同时也了解了一些C#其它的相关知识。
实习日记10
今天继续昨天的任务,做一个小测试,将现今做的项目所有代码进行整合测试,测试要求是在数据库中配置菜单项,动态添加几项菜单项,在不同点击下动态从DLL中加载窗体读取配置文件进行排列,顺利完成。
第17篇:最新C和C++程序员笔试题
以下是整理自8月下旬至10月份内的各大公司的笔试面试三十题(注:所有题目基本上全部为软件开发方向,题目来源:网络收集),相信一定能给正在参加各种校招的诸多朋友多少帮助,学习参考或借鉴
九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔/面试五十题
9月11日,京东:
谈谈你对面向对象编程的认识
8月20日,金山面试,题目如下:
数据库1中存放着a类数据,数据库2中存放着以天为单位划分的表30张(比如table_20110909,table_20110910,table_20110911),总共是一个月的数据。表1中的a类数据中有一个字段userid来唯一判别用户身份,表2中的30张表(每张表结构相同)也有一个字段userid来唯一识别用户身份。如何判定a类数据库的多少用户在数据库2中出现过? 百度实习笔试题(2012.5.6)
简答题1
一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程。评点:同去年9月份的一道题,见此文第3题:简答题2 线程和进程区别和联系。什么是“线程安全”
简答题3
C和C++怎样分配和释放内存,区别是什么
算法题1
一个url指向的页面里面有另一个url,最终有一个url指向之前出现过的url或空,这两种情形都定义为null。这样构成一个单链表。给两条这样单链表,判断里面是否存在同样的url。url以亿级计,资源不足以hash。
算法题2
数组al[0,mid-1] 和 al[mid,num-1],都分别有序。将其merge成有序数组al[0,num-1],要求空间复杂度O(1)系统设计题
百度搜索框的suggestion,比如输入北京,搜索框下面会以北京为前缀,展示“北京爱情故事”、“北京公交”、“北京医院”等等搜索词。
如何设计使得空间和时间复杂度尽量低。评点:老题,直接上Trie树+Hash,Trie树的介绍见:从Trie树(字典树)谈到后缀树。
人搜笔试
1.快排每次以第一个作为主元,问时间复杂度是多少?(O(N*logN))
2.T(N)= N + T(N/2)+T(2N), 问T(N)的时间复杂度是多少? 点评:O(N*logN)or O(N)? 3.从(0,1)中平均随机出几次才能使得和超过1?(e)4.编程题:
一棵树的节点定义格式如下: struct Node{ Node* parent;Node* firstChild;// 孩子节点 Node* sibling;// 兄弟节点 } 要求非递归遍历该树。
思路:采用队列存储,来遍历节点。5.算法题:
有N个节点,每两个节点相邻,每个节点只与2个节点相邻,因此,N个顶点有N-1条边。每一条边上都有权值wi,定义节点i到节点i+1的边为wi。求:不相邻的权值和最大的边的集合。 人搜面试,所投职位:搜索研发工程师:面试题回忆
1、删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
2、求数组(元素可为正数、负数、0)的最大子序列和。
3、链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
4、链表克隆。链表的结构为: typedef struct list { int data;//数据字段
list *middle;//指向链表中某任意位置元素(可指向自己)的指针 list *next;//指向链表下一元素 } list;
5、100万条数据的数据库查询速度优化问题,解决关键点是:根据主表元素特点,把主表拆分并新建副表,并且利用存储过程保证主副表的数据一致性。(不用写代码)
6、求正整数n所有可能的和式的组合(如;4=1+1+1+
1、1+1+
2、1+
3、2+1+
1、2+2)。
7、求旋转数组的最小元素(把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1)
8、找出两个单链表里交叉的第一个元素
9、字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
10、时间复杂度为O(1),怎么找出一个栈里的最大元素
11、线程、进程区别
12、static在C和C++里各代表什么含义
13、const在C/C++里什么意思
14、常用linux命令
15、解释Select/Poll模型 网易有道二面:
判断一个数字序列是BST后序遍历的结果,现场写代码。
8月30日,网易有道面试题
var tt = 'aa';function test(){ alert(tt);var tt = 'dd';alert(tt);} test(); 8月31日,百度面试题:不使用随机数的洗牌算法,9月6日,阿里笔试题:平面上有很多点,点与点之间有可能有连线,求这个图里环的数目。
9月7日,一道华为上机题:
题目描述: 选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type == 1,表示专家评委,judge_type == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。
函数接口 int cal_score(int score[], int judge_type[], int n)
上机题目需要将函数验证,但是题目中默认专家评委的个数不能为零,但是如何将这种专家数目为0的情形排除出去。
9月8日,腾讯面试题:
假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。要求高效!
又是跟上述第3题中简单题一的兄弟节点类似的一道题,我想,你们能想到的, 阿里云,搜索引擎中5亿个url怎么高效存储;
一道C++笔试题,求矩形交集的面积:
在一个平面坐标系上,有两个矩形,它们的边分别平行于X和Y轴。
其中,矩形A已知,ax1(左边), ax2(右边), ay1(top的纵坐标), ay2(bottom纵坐标).矩形B,类似,就是 bx1, bx2, by1, by2。这些值都是整数就OK了。要求是,如果矩形没有交集,返回-1,有交集,返回交集的面积。int area(rect const& a, rect const& b){...} 点评: healer_kx:
补齐代码,最好是简洁的,别用库。你可以写你的辅助函数,宏定义,代码风格也很重要。ri_aje:struct rect {
// axis alignment aumed // bottom left is(x[0],y[0]), top right is(x[1],y[1])double x [2];double y [2];};
template T const& min(T const& x, T const& y){ return x T const& max(T const& x, T const& y){ return x>y ? x : y;}
// return type changed to handle non-integer rects double area(rect const& a, rect const& b){
// perfectly adjacent rects are considered having an intersection of 0 area double const dx = min(a.x[1],b.x[1])max(a.y[0],b.y[0]);return dx>=0&&dy>=0 ? dx*dy :-1; } 下面是一个简短的证明。
对于平行于坐标轴的矩形 r,假设其左下角点坐标为(rx0,ry0),右上角点坐标为(rx1,ry1),那么由 r 定义的无限有界点集为:{(x,y)|x in [rx0,rx1] && y in [ry0,ry1]}。
根据交集的定义,则任意二维点(x,y)在矩形 a,b 的交集内等价于 {(x,y)|(x,y)in a 并且(x,y)in b}
{(x,y)|x in [ax0,ax1] && x in [bx0,bx1] 并且 y in [ay0,ay1] && y in [by0,by1]} {(x,y)|x in [max(ax0,bx0),min(ax1,bx1)] 并且 y in [max(ay0,by0),min(ay1,by1)]}
因此,交集矩形的边长分别为 min(ax1,bx1)-max(ax0,bx0)和 min(ay1,by1)-max(ay0,by0)。注意当交集为空时(a,b 不相交),则经此法计算出来的交集边长为负值,此事实可用于验证 a,b 的相交性。
鉴于笛卡尔积各个维度上的不相关性,此方法可扩展到任意有限维线性空间,比如,三维空间中平行于坐标轴的长方体的交集体积可以用类似的方法计算。
2012年创新工场校园招聘最后一道笔试题:工场很忙
创新工场每年会组织同学与项目的双选会,假设现在有M个项目,编号从1到M,另有N名同学,编号从1到N,每名同学能选择最多三个、最少一个感兴趣的项目。选定之后,HR会安排项目负责人和相应感兴趣的同学一对一面谈,每次面谈持续半小时。由于大家平时都很忙,所以咱们要尽量节约时间,请你按照以下的条件设计算法,帮助HR安排面试。
1)同学很忙。项目负责人一次只能与一名同学面谈,而同学会在自己第一个面试开始时达到工场,最后一个面试结束后离开工场,如果参加一个项目组的面试后不能立即参加下一个项目组的面试,就必须在工场等待。所以请尽可能让同学的面试集中在某一时间段,减少同学在工场等待的时间。
2)项目负责人很忙。众所周知,创业团队的负责人会有很多事情要做,所以他们希望能够将自己参与的面试集中在某一段时间内,请在保证1)的情况下,使得项目负责人等待的时间最少。
3)HR很忙。从第一轮面试开始以后,所有HR都必须等到最后一轮面试结束,所以需要在保证1)和2)的同时,也能尽快解放掉所有的HR,即让第一轮面试到最后一轮面试之间持续的时间最短。
输入(以文件方式输入,文件名为iw,例如iw.in):
第1行...第n行:同学的编号 项目的编号
样例(数据间用空格隔开,两个0表示输入结束):
32 1
3 1
3 2
0 0
表示M=3,N=3,编号为1的同学选择了项目1,2和3,编号为2的同学选择了项目1,编号为3的同学选了项目1和2
输出(以文件方式输出,文件名为iw,例如iw.out):
第1行:编号为1的项目依次面试新同学的编号序列
第2行:编号为2的项目依次面试新同学的编号序列...第n行:编号为n的项目依次面试新同学的编号序列
样例(数据间用空格隔开,0表示没有面试):
1 3 2
3 1 0 0 0 1
表示编号为1的项目在第一轮面试编号为1的同学,第二轮面试编号为3的同学,第三轮面试编号为2的同学
编号为2的项目在第一轮面试编号为3的同学,第二轮面试编号为1的同学,第二轮不用面试
编号为3的项目在第一轮和第二轮都不用面试,第三轮面试编号为1的同学
4**9 的笔试题,比较简单: 1.求链表的倒数第二个节点
2.有一个整数数组,求数组中第二大的数 阿里巴巴二道题 第一道:
对于给定的整数集合S,求出最大的d,使得a+b+c=d。a,b,c,d互不相同,且都属于S。集合的元素个数小于等于2000个,元素的取值范围在[-2^28,2^281)^2)。最后我给出了一个巧妙的证明。然后发现如果是m*n的矩阵也是类似的答案,不局限于方阵。此外,题目具体描述可以看看这里:
9月27日,小米两面:
一面:
除了聊研究,就一道题
1 数组里找到和最接近于0的两个值。二面:
1 行列有序的矩阵查找一个数
2 直方图最大矩形。点评:这里有此题的具体表述及一份答案: 3 next_permutation
4 字符串匹配 含有* ?(写代码)
5 实现strcpy memmove(必须写代码)//void * memmove(void * destination, const void * source, size_t num);) //是的标准函数,其作用是把从source开始的num个字符拷贝到destination。
//最简单的方法是直接复制,但是由于它们可能存在内存的重叠区,因此可能覆盖了原有数据。//比如当source+count>=dest&&source
//解决办法是从后往前拷贝。//对于其它情况,则从前往后拷贝。
void* memmove(void* dest, void* source, size_t count){
void* ret = dest;
if(dest =(source + count)){ //正向拷贝
//copy from lower addrees to higher addrees while(count--)*dest++ = *source++;} else {
//反向拷贝
//copy from higher addrees to lower addrees dest += count1; while(count--)*dest--= *source--;}
return ret;}
6 读数(千万亿,百万亿„„)变为数字(说思路即可,字符串查找,填写各个权值的字段,然后判断是否合法,读前面那些×权值,累加)。 9月27日,Hulu 2013北京地区校招笔试题 填空题:
1、中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,那么前序遍历结果为?
2、对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为?
3、对长度12的有序数组进行二分查找,目标等概率出现在数组的每个位置上,则平均比较次数为?
4、一副扑克(去王),每个人随机的摸两张,则至少需要多少人摸牌,才能保证有两个人抽到同样的花色。
5、x个小球中有唯一一个球较轻,用天平秤最少称量y次能找出这个较轻的球,写出y和x的函数表达式y=f(x)
6、3的方幂及不相等的3的方幂的和排列成递增序列1,3,4,9,10,12,13„„,写出数列第300项
7、无向图G有20条边,有4个度为4的顶点,6个度为3的顶点,其余顶点度小于3,则G有多少个顶点
8、桶中有M个白球,小明每分钟从桶中随机取出一个球,涂成红色(无论白或红都涂红)再放回,问小明将桶中球全部涂红的期望时间是?
9、煤矿有3000吨煤要拿到市场上卖,有一辆火车可以用来运煤,火车最多能装1000吨煤,且火车本身需要烧煤做动力,每走1公里消耗1吨煤,如何运煤才能使得运到市场的煤最多,最多是多少?
10、1,2,3,4„..n,n个数进栈,有多少种出栈顺序,写出递推公式(写出通项公式不得分)
11、宇宙飞船有100,000位的存储空间,其中有一位有故障,现有一种Agent可以用来检测故障,每个Agent可以同时测试任意个位数,若都没有故障,则返回OK,若有一位有故障,则失去响应。如果有无限多个Agent可供使用,每个Agent进行一次检测需要耗费1小时,现在有2个小时时间去找出故障位,问最少使用多少个Agent就能找出故障。
(总共12道填空题,还有一道太复杂,题目很长,还有示意图,这里没有记录下来)大题:
1、n个数,找出其中最小的k个数,写出代码,要求最坏情况下的时间复杂度不能高于O(n logk)
2、写程序输出8皇后问题的所有排列,要求使用非递归的深度优先遍历
3、有n个作业,a1,a2„..an,作业aj的处理时间为tj,产生的效益为pj,最后完成期限为dj,作业一旦被调度则不能中断,如果作业aj在dj前完成,则获得效益pj,否则无效益。给出最大化效益的作业调度算法。 有道的一个笔试题,1-9,9个数组成三个三位数,且都是完全平方数(三个三位数 占据 9个数)求解法。 点评@林晚枫&归云见鸿:(a*10+b)(a*10+b)100a^2+20ab+b^2 a 属于 [1,2,3] a=3,b=1 31 961, a=2,b=3 23 529 400+40b+b^2 25 625 27 729 28 784 29 841 a=1,b=3 13 169 100+20b+b^2 14 196 16 256 17 289 18 324 19 361 =>最终唯一解 529 784 361 具体代码如下(3个for循环,然后hash):
9月28日,大众点评北京笔试题目:
1.一个是跳台阶问题,可以1次一级,1次两级,1次三级,求N级的跳法一共多少种?
点评:老题, 2.一个文件有N个单词,每行一个,其中一个单词出现的次数大于N/2,怎么样才能快速找出这个单词?
点评:还是老题, 大众点评前面还有30道逻辑题,15道文字推理,15道数学推理,一共只给20min。 9月28日,网易笔试题:
1、英雄升级,从0级升到1级,概率100%。
从1级升到2级,有1/3的可能成功;1/3的可能停留原级;1/3的可能下降到0级; 从2级升到3级,有1/9的可能成功;4/9的可能停留原级;4/9的可能下降到1级。每次升级要花费一个宝石,不管成功还是停留还是降级。求英雄从0级升到3级平均花费的宝石数目。
点评:题目的意思是,从第n级升级到第n+1级成功的概率是(1/3)^n(指数),停留原级和降级的概率一样,都为[1-(1/3)^n]/2)。
2、将一个很长的字符串,分割成一段一段的子字符串,子字符串都是回文字符串。 有回文字符串就输出最长的,没有回文就输出一个一个的字符。例如: habbafgh 输出h,abba,f,g,h。
点评:一般的人会想到用后缀数组来解决这个问题, 10月9日,腾讯一面试题: 有一个log文件,里面记录的格式为: QQ号: 时间: flag: 如123456 14:00:00 0
123457 14:00:01 1
其中flag=0表示登录 flag=1表示退出 问:统计一天平均在线的QQ数。
点评:第8题后的腾讯面试题,读者可以参看之。
10月9日,腾讯面试题:
1.有一亿个数,输入一个数,找出与它编辑距离在3以内的书,比如输入6(0110),找出0010等数,数是32位的。 2.每个城市的IP段是固定的,新来一个IP,找出它是哪个城市的,设计一个后台系统。 10月9日,YY笔试题:
1 输出一个字符串中没有重复的字符。如“baaca”输出“bac”。
2 对于一个多叉树,设计TreeNode节点和函数,返回先序遍历情况下的下一个节点。函数定义为TreeNode* NextNode(TreeNode* node)3 分割字符串。
对于一个字符串,根据分隔符seperator,把字符串分割,如果存在多个分隔符连在一起,则当做一个分隔符。如果分隔符出现在" "符号之间,则不需要分割" "之间的字符。比如a++abc,分隔符为+,输出a abc a+"hu+" 输出a hu+ a++"HU+JI 输出a "HU JI。
请根据上述需求完成函数:void spiltString(string aString,char aSeperator)。 10月9日,赶集网笔试
10月9日,阿里巴巴2013校园招聘全套笔试题(注:下图中所标答案不代表标准答案,有问题,欢迎留言评论)
上述第15题,填空:lower+(upper-lower)/2 lower mid upper 0 6 12 7 9 12 7 7 8 8 8 8
比较4次
上述第16题,解答如下图所示:
上述第17题,解答如下图所示:
18、甲包8个红球 2个蓝球,乙包2个红球 8个蓝球。抛硬币决定从哪个包取球,取了11次,7红4蓝。注,每次取后还放进去,只抛一次硬币。问选的是甲包的概率? 点评:
贝叶斯公式 + 全概率公式作答(参看链接:http://www.xiexiebang.com/)。具体解答如下图所示:
注:上述第15~18的解答全部来自读者Lei Lei来信给出的解答,特此感谢。有任何问题,欢迎随时讨论&指正,同时,更欢迎其他朋友也一起来做这些题目(你的答案一经选用,我可以根据你的要求,贴出你的个人主页或微博地址或博客地址)。
19、已知一个n个元素的数组,第i个元素在排序后的位置在[i-k,i+k]区间,k
10月10日,暴风影音笔试:
都是非常基础的题目,这是其中一道:一个整数转换成二进制后,问里面有多少个1。10月10日人人网面试题 第一面:
1、(1)++i 和 i++,那个效率高?
(2)++++i,i++++,哪个是合法的?
(3)实现int型的++i 和 i++操作。
2、一段程序,求输出。(考察静态变量和模版类)
int g = 0;template cla B { public: int static fun(){ static int value = ++g;return value;} };
int main(){ cout ::fun()::fun()::fun()::fun()::fun()
3、(1)实现二进制转十进制。
(2)如果有下面这种能直接求二进制转十进制的代码,是怎么实现的? binary::value;// 结果为1 binary::value;// 结果为3
4、volatile、explicit、mutable表示的含义。
5、求整形数组的一个子数组,使得该子数组所有元素的和的绝对值最大。
6、(1)写求单链表是否有环的算法。(2)如果有环,如何找出环的第一个结点。
7、实现单例模式。 二面:
1、一个文本,一万行,每行一个词,统计出现频率最高的前10个词(词的平均长度为Len)。并分析时间复杂度。
2、求数组中最长递增子序列。
10月10日,网易2013校园招聘全套笔试题:
10月10日,网易,数据挖掘工程师: 1,简述你对数据与处理的认识;
2,简述你对中文分词的理解,说明主要难点和常用算法; 3,常见的分类算法有哪些; 4,简述K-MEANS算法; 5,设计一个智能的商品推荐系统; 6,简述你对观点挖掘的认识。其它题目同 点评:其它题目与上述第56题第一部分所述相同。
第18篇:JavaEE程序员的岗位职责是什么
JavaEE程序员的岗位职责是什么
现在越来越多的人对JavaEE开发工程师感兴趣,因为JavaEE程序员不论是薪资还是就业环境都很让人羡慕,因此很多人参加JavaEE培训学习JavaEE想要进入JavaEE领域中分一杯羹。但是关于JavaEE程序员的岗位职责还有很多人不是很清楚,本篇文章小编就和读者探讨一下JavaEE程序员的岗位职责是什么。
JavaEE程序员的岗位职责是什么?其实负责不同板块的JavaEE程序员的岗位职责是不同的,比如负责JavaEE开发的程序员的岗位职责包括:
1、完成软件系统代码的实现,编写代码注释和开发文档;
2、辅助进行系统的功能定,程序设计;
3、根据设计文档或需求说明完成代码编写,调试,测试和维护;
4、分析并解决软件开发过程中的问题;
5、协助测试工程师制定测试计划,定位发现的问题;
6、配合项目经理完成相关任务目标。
负责JavaEE测试的程序员的岗位职责包括:
1、具备扎实的软件测试理论基础,熟悉测试方法,测试流程;
2、熟练编写测试用例和执行测试用例,会使用禅道进行bug管理,熟练使用配置管理工具SVN;
3、会用数据库查询,了解接口测试,熟悉linux;
4、熟悉数据库Oracle基本的增删改查以及配置监听等;
5、熟悉SQL,会使用fiddler、httpwatch等工具进行接口测试。
关于JavaEE程序员的岗位职责,不是每一个岗位都一样的,首先要看你的就业选择偏向哪个方面,才能够具体而言,并且每家公司分配给你的工作任务也是不一样的,所以具体情况具体分析。不要把每个JavaEE程序员的岗位职责都想成是一样的。以上就是关于JavaEE程序员的岗位职责的简单介绍,希望对你有所帮助。
版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《c 程序员岗位职责(共18篇)》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
