没有合适的资源?快使用搜索试试~ 我知道了~
首页上海地区(杭州一带)面试java程序员必考的题目。
上海地区(杭州一带)面试java程序员必考的题目。
3星 · 超过75%的资源 需积分: 9 38 下载量 41 浏览量
更新于2023-03-03
评论
收藏 241KB PDF 举报
本人在杭州和上海面试程序员的时候,经常碰到的一些题目,有一次有哥们拿来这个文档,是一老大整理完毕的,看后十分有感,希望新人程序员们在进入一个公司之初的时候能够看一看这些题目。对笔试题目来说,很有用。
资源详情
资源评论
资源推荐
一、请填写 BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分)
请写出 BOOL flag 与“零值”比较的 if 语句。(3 分)
标准答案:
if ( flag )
if ( !flag )
如下写法均属不良风格,不得分。
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
请写出 float x 与“零值”比较的 if 语句。(4 分)
标准答案示例:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
如下是错误的写法,不得分。
if (x == 0.0)
if (x != 0.0)
请写出 char *p 与“零值”比较的 if 语句。(3 分)
标准答案:
if (p == NULL)
if (p != NULL)
如下写法均属不良风格,不得分。
if (p == 0)
if (p != 0)
if (p)
if (!)
二、以下为 Windows NT 下的 32 位 C++程序,请计算 sizeof 的值(10 分)
char str[] = “Hello”;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = 6 (2 分)
sizeof ( p ) = 4 (2 分)
sizeof ( n ) = 4 (2 分)
void Func ( char str[100])
{
请计算
sizeof( str ) = 4 (2 分)
}
void *p = malloc( 100 );
请计算
sizeof ( p ) = 4 (2 分)
三、简答题(25 分)
1、头文件中的 ifndef/define/endif 干什么用?(5 分)
答:防止该头文件被重复引用。
2、#include <filename.h> 和 #include “filename.h” 有什么区别?(5 分)
答:对于#include <filename.h> ,编译器从标准库路径开始搜索 filename.h
对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h
3、const 有什么用途?(请至少说明两种)(5 分)
答:(1)可以定义 const 常量
(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被 const 修饰的东西都受到
强制保护,可以预防意外的变动,能提高程序的健壮性。
4、在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)
答:C++语言支持函数重载,C 语言不支持函数重载。函数被 C++编译后在库中的名字与 C
语言的不同。假设某个函数的原型为: void foo(int x, int y);
该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像_foo_int_int 之类
的名字。
C++提供了 C 连接交换指定符号 extern“C”来解决名字匹配问题。
5、请简述以下两个 for 循环的优缺点(5 分)
for (i=0; ii++)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
if (condition)
{
for (i=0; ii++)
DoSomething();
}
else
{
for (i=0; ii++)
DoOtherthing();
}
优点:程序简洁
缺点:多执行了 N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循
环进行优化处理,降低了效率。
优点:循环的效率高
缺点:程序不简洁
四、有关内存的思考题(每小题 5 分,共 20 分)
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行 Test 函数会有什么样的结果?
答:试题传入 GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能
真正的改变传入形参的值,执行完
char *str = NULL;
GetMemory( str );
后的 str 仍然为 NULL;
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行 Test 函数会有什么样的结果?
答:可能是乱码。 char p[] = "hello world";
return p;
的 p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常
犯的错误,其根源在于不理解变量的生存期。
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 )Test 函数中也未对 malloc 的内存进行释放。
(3)GetMemory 避免了试题 1 的问题,传入 GetMemory 的参数为字符串指针的指针,但是
在 GetMemory 中执行申请内存及赋值语句
*p = (char *) malloc( num );
后未判断内存是否申请成功,应加上:
if ( *p == NULL )
{
...//进行申请内存失败处理
}
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
请问运行 Test 函数会有什么样的结果?
答:执行
char *str = (char *) malloc(100);
后未进行内存是否申请成功的判断;另外,在 free(str)后未置 str 为空,导致可能变成一个“野”
指针,应加上:
str = NULL;
五、编写 strcpy 函数(10 分)
已知 strcpy 函数的原型是
char *strcpy(char *strDest, const char *strSrc);
其中 strDest 是目的字符串,strSrc 是源字符串。
(1)不调用 C++/C 的字符串库函数,请编写函数 strcpy
char *strcpy(char *strDest, const char *strSrc);
assert((strDest!=NULL) && (strSrc !=NULL)); // 2 分
char *address = strDest; // 2 分
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2 分
NULL ;
return address ; // 2 分
}
(2)strcpy 能把 strSrc 的内容复制到 strDest,为什么还要 char * 类型的返回值?
答:为了实现链式表达式。 // 2 分
例如 int length = strlen( strcpy( strDest, “hello world”) );
六、编写类 String 的构造函数、析构函数和赋值函数(25 分)
已知类 String 的原型为:
class 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::~String(void) // 3 分
{
delete [] m_data;
// 由于 m_data 是内部数据类型,也可以写成 delete m_data;
}
// String 的普通构造函数
String::String(const char *str) // 6 分
{
if(str==NULL)
{
m_data = new char[1]; // 若能加 NULL 判断则更好
*m_data = ‘\0’;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
// 拷贝构造函数
String::String(const String &other) // 3 分
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
剩余36页未读,继续阅读
youyi7890
- 粉丝: 13
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 数据结构1800题含完整答案详解.doc
- 医疗企业薪酬系统设计与管理方案.pptx
- 界面与表面技术界面理论与表面技术要点PPT学习教案.pptx
- Java集合排序及java集合类详解(Collection、List、Map、Set)讲解.pdf
- 网页浏览器的开发 (2).pdf
- 路由器原理与设计讲稿6-交换网络.pptx
- 火电厂锅炉过热汽温控制系统设计.doc
- 企业识别CIS系统手册[收集].pdf
- 物业管理基础知识.pptx
- 第4章财务预测.pptx
- 《集成电路工艺设计及器件特性分析》——实验教学计算机仿真系.pptx
- 局域网内共享文件提示没有访问权限的问题借鉴.pdf
- 第5章网络营销策略.pptx
- 固井质量测井原理PPT教案.pptx
- 毕业实习总结6篇.doc
- UGNX建模基础篇草图模块PPT学习教案.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1