大家评评理,我出的面试题很难吗?!

smartduck 2006-11-29 02:13:17
公司招应届本科毕业生,出个题目试试(以前公司没有笔试的),结果非常差.15个人,没有一人全对的.最好的也就对了80%,差的交白卷.晕死.


第1题: 请阅读以下的代码,试试看,你能发现错误或者不恰当地方吗?(提示: 不止一处)

class Wheel{};
class Color{};

class Car
{
private:
Wheel* wheels;
public:
Car(int wheel_count){wheels = new Wheel[wheel_count];}
~Car(){delete wheels;}
};

class Roadster : public Car
{
public:
Color color;

Roadster(){};
Roadster(const Roadster& rs)
{
this->color = rs.color;
}
~Roadster(){};
Roadster& operator=(const Roadster& rhs)
{
this->color = rhs.color;
}
const Roadster& clone()
{
Roadster the_new = *this;
return the_new;
}
};

int main(int argc, char* argv[]){
Roadster* yours = new Roadster;
Roadster mine; mine = yours->clone();
Car* pCar = yours;
delete pCar;
return 0;
};



第2题: 以下是系统表sysprocesses和sysdatabases的帮助. 请你根据这些帮助信息,写出一条语句, 显示当前系统中有谁(即工作站的名称)与哪个数据库(即数据库名称)建立了连接.

sysprocesses
sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息。这些进程可以是客户端进程或系统进程。sysprocesses 只存储在 master 数据库中。

列名 数据类型 描述
spid smallint SQL Server 进程 ID。
kpid smallint Microsoft Windows NT 4.0® 线程 ID。
blocked smallint 分块进程的进程 ID (spid)。
waittype binary(2) 保留。
waittime int 当前等待时间(以毫秒为单位)。当进程不处于等待时,为 0。
lastwaittype nchar(32) 表示上次或当前等待类型名称的字符串。
waitresource nchar(32) 锁资源的文本化表示法。
dbid smallint 当前正由进程使用的数据库 ID。
uid smallint 执行命令的用户 ID。
cpu int 进程的累计 CPU 时间。无论 SET STATISTICS TIME ON 选项是 ON 还是 OFF,都为所有进程更新该条目。
physical_io int 进程的累计磁盘读取和写入。
memusage int 当前分配给该进程的过程高速缓存中的页数。一个负数,表示进程正在释放由另一个进程分配的内存。
login_time datetime 客户端进程登录到服务器的时间。对于系统进程,是存储 SQL Server 启动发生的时间。
last_batch datetime 客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间。对于系统进程,是存储 SQL Server 启动发生的时间。
ecid smallint 用于唯一标识代表单个进程进行操作的子线程的执行上下文 ID。
open_tran smallint 进程的打开事务数。
status nchar(30) 进程 ID 状态(如运行、休眠等)。
sid binary(85) 用户的全局唯一标识符 (GUID)。
hostname nchar(128) 工作站的名称。
program_name nchar(128) 应用程序的名称。
hostprocess nchar(8) 工作站进程 ID 号。
cmd nchar(16) 当前正在执行的命令。
nt_domain nchar(128) 客户端的 Windows NT 4.0 域(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 域。
nt_username nchar(128) 进程的 Windows NT 4.0用户名(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 用户名。
net_address nchar(12) 指派给每个用户工作站上的网络接口卡唯一标识符。当用户登录时,该标识符插入 net_address 列。
net_library nchar(12) 用于存储客户端网络库的列。每个客户端进程都在网络连接上进入。网络连接有一个与这些进程关联的网络库,该网络库使得这些进程可以建立连接。有关更多信息,请参见客户端和服务器 Net-Library。
loginame nchar(128) 登录名。


sysdatabases
Microsoft® SQL Server™ 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。

列名 数据类型 描述
name sysname 数据库的名称。
dbid smallint 数据库 ID。
sid varbinary(85) 数据库创建者的系统 ID。
mode smallint 用于创建数据库时在内部锁定该数据库。
status int 状态位,其中某些状态位可由用户使用 sp_dboption(read only、dbo use only、single user 等)进行设置:
1 = autoclose;使用 sp_dboption 设置。
4 = select into/bulkcopy;使用 sp_dboption 设置。
8 = trunc. log on chkpt;使用 sp_dboption 设置。
16 = torn page detection,使用 sp_dboption 设置。
32 = loading。
64 = pre recovery。
128 = recovering。
256 = not recovered。
512 = offline;使用sp_dboption 设置。
1024 = read only;使用 sp_dboption 设置。
2048 = dbo use only;使用sp_dboption 设置。
4096 = single user;使用 sp_dboption 设置。
32768 = emergency mode。
4194304 = autoshrink。
1073741824 = cleanly shutdown。
可以同时打开多个位。

status2 int 16384 = ANSI null default;使用 sp_dboption 设置。
65536 = concat null yields null,使用 sp_dboption 设置。
131072 = recursive triggers,使用 sp_dboption 设置。
1048576 = default to local cursor,使用 sp_dboption 设置。
8388608 = quoted identifier,使用sp_dboption 设置。
33554432 = cursor close on commit,使用 sp_dboption 设置。
67108864 = ANSI nulls,使用 sp_dboption 设置。
268435456 = ANSI warnings,使用 sp_dboption 设置。
536870912 = full text enabled,使用sp_fulltext_database 设置。
crdate datetime 创建日期。
reserved datetime 留作以后使用。
category int 包含用于复制的信息位图:
1 = 已发布。
2 = 已订阅。
4 = 合并已发布。
8 = 合并已订阅。
cmptlevel tinyint 数据库的兼容级别。有关更多信息,请参见 sp_dbcmptlevel。
filename nvarchar(260) 数据库主文件的操作系统路径和名称。
version smallint 创建数据库时使用的 SQL Server 代码内部版本号。仅供 SQL Server 工具在内部用于升级处理。



...全文
1206 80 打赏 收藏 转发到动态 举报
写回复
用AI写文章
80 条回复
切换为时间正序
请发表友善的回复…
发表回复
睡在床板下_ 2006-11-30
  • 打赏
  • 举报
回复
没工作时,我一直以为 掌握了 c++的语法就是厉害的人.. 所以讨厌那些 考算法的面试题,觉的没含量..
工作了一段时间, 才发现,那些考算法的公司出的题目真是好题...其实c++语法的问题,都是很容易解决的... 大部分编译的时候或运行的时候都会出错,并提示,,参考一些书籍和问问同事,这些问题大都是可以解决的...相反的, 如果遇到麻烦点的算法问题, 那就不是 简单能解决的..

lz 第一题, 放电脑上编译一下, 难道检查不出问题??
所以lz 出的题 , 最好是放到大学的期末考试中去...
kyxfx 2006-11-30
  • 打赏
  • 举报
回复

1. 全是重点本科或研究生, 大多是计算机系
2. 来笔试的都是精英, 从80人里面挑出来的

____________________________________________________________________________________
不知道楼主的精英是怎么挑的,不知道是不是挑简历看成绩,如果是这样那也不奇怪了
fafeiboy 2006-11-30
  • 打赏
  • 举报
回复
哪个公司啊?
jiangkeredgirl 2006-11-30
  • 打赏
  • 举报
回复
mark
-------------
搭车问。去公司用C++ 一般要培训多久?才加入项目开发
sankt 2006-11-30
  • 打赏
  • 举报
回复
[17.2] 如何处理构造函数的失败?
[Recently fixed typo ("its" vs. "it's") thanks to Wes Bemont (on 4/01). Click here to go to the next FAQ in the "chain" of recent changes.]
抛出一个异常。

构造函数没有返回类型,所以返回错误代码是不可能的。因此抛出异常是标记构造函数失败的最好方法。

如果你没有或者不愿意使用异常,这里有一种方法。如果构造函数失败了,构造函数可以把对象带入一种“僵尸”状态。你可以通过设置一个内部状态位使对象就象死了一样,即使从技术上来说,它仍然活着。然后加入一个查询(“检察员”)成员函数,以便类的用户能够通过检查这个“僵尸位”来确定对象是真的活着还是已经成为僵尸(也就是一个“活着的死对象”)。你也许想有另一个成员函数来检查这个僵尸位,并且当对象并不是真正活着的时候,执行一个 no-op(或者是更令人讨厌的如 abort())。这样做真的不漂亮,但是如果你不能(或者不想)使用异常的话,这是最好的方法了。
yanran_hill 2006-11-30
  • 打赏
  • 举报
回复
想问一下,在构造函数中抛异常,这种写法好吗?
eeyyllehs 2006-11-30
  • 打赏
  • 举报
回复
这是不是IBM的面试题啊?
flashtong 2006-11-30
  • 打赏
  • 举报
回复
我交白卷是肯定的事实了
David_Hu 2006-11-30
  • 打赏
  • 举报
回复
我想知道去公司培训要不要交钱啊..哈哈,,纯属个人问题。
kenneth_lueng 2006-11-30
  • 打赏
  • 举报
回复
看完
头晕
接分
走人
smartduck 2006-11-29
  • 打赏
  • 举报
回复
其实, 题目长, 不一定难, 有些题目短的那才难. 例如, 让你写个strstr函数出来.我看就比这个难多了.实现功能不难,性能符合要求也不难,但要你写一个经的起推敲的strstr函数出来,如果不是事先漏题,我觉得自己没有这个水平.
smartduck 2006-11-29
  • 打赏
  • 举报
回复
to sankt(做最好的自己) :
不怕你笑话, 就是对着 effective c++ 出的.
你的几个修正,我觉得很好. 例如,从实际上来说,clone()在这里是不应该返回const Roadster&, 我只是想看看应聘者知不知道"不要返回局部变量的引用"的,结果,搞得程序别扭了不少.

不过, 对于你把wheels = new Wheel[wheel_count] 放到try{}catch里, 我觉得是好的, 只是平时我就比较少这么做. 我认为, 每次我写new的时候都清醒的意识到了可能内存不足的情况, 但是, 在一个工程里面, new出现的次数也太多了吧, 总不能每次都考虑, 而且也考虑不了那么多. 还有, 如果new失败了,catch块中的delete是不是就没有必要了?
本来,还想看看应聘者是否知道"构造函数和析够函数不要抛出异常"的原则的,但是不知道怎么在这个例子里面加进去,所以就没有加了.

对于,Car(), 个人当时认为也可以不加, 因为如果车子没有轮子,那这应该就是部烂车了.如果允许一部烂车出厂,那这个Car的实例就是一个脏的实例,以后就要频繁的判断wheels!=NULL了.

的确, 如果基类Car中使用Vector,那么整个程序就简单多了.什么拷贝构造函数,赋值操作符通通都可以省去. 作为一个考题来说,这是一个败笔.因为你可以说,把Wheel*改成std::vector<Wheel>,然后删除那些不必要的函数,这改法也是对的,那就什么都考不到了.

本人水平有限,大家的批评,我接受.
helanshan 2006-11-29
  • 打赏
  • 举报
回复
不是很难,但我不会有耐心看下去..
g961681 2006-11-29
  • 打赏
  • 举报
回复
up
lxhtzy 2006-11-29
  • 打赏
  • 举报
回复
毕业生的工作经验我们肯定是不做要求的了, 而这些本身学校里学c++的, 比我想象要差.
----------------------------------------------------------------------------
不要对毕业生看得懂很多,其实不多

所以我努力
sankt 2006-11-29
  • 打赏
  • 举报
回复
当然如果基类Car中使用Vector,那么整个程序就简单多了

一点浅见,愿与大家交流一下

sankt 2006-11-29
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

class Wheel{};
class Color{};

class Car
{
private:
Wheel* wheels;
//这里是否还缺少一个成员变量,即记录Wheel对象的个数??
public:
Car() //这里加入默认构造,以适应子类的默认构造,否则无法通过编译
{
wheels = NULL;
}
Car(int wheel_count)
{
try
{
wheels = new Wheel[wheel_count];
}
catch(bad_alloc&)
{
delete []wheels;
}
}
Car& operator=(const Car&rhs)
{
if(this != &rhs)
{
//
}
}
Car(const Car& rhs);
{
//
}

virtual ~Car()
{
delete []wheels;
}
};

class Roadster : public Car
{
public:
Color color;

Roadster(){};
Roadster(const Roadster& rs) : Car(rs)
{
this->color = rs.color;
}
~Roadster(){};
Roadster& operator=(const Roadster& rhs)
{
if(this != &rhs)
{
Car::operator=(rhs);
this->color = rhs.color;
}
return *this;

}
Roadster* clone()
{
return new Roadster(*this);
}
};

int main(int argc, char* argv[])
{
Roadster* yours = new Roadster;
Roadster* mine;
mine = yours->clone();

delete mine;

Car* pCar = yours;
delete pCar;
system("pause");

return 0;
};


总结:
如果看了effective c++,那么这个题就非常简单了。
我大概列举一下:
Item 11: Declare a copy constructor and an assignment operator for classes with dynamically allocated memory.
条款14: 确定基类有虚析构函数
条款15: 让operator=返回*this的引用
条款16: 在operator=中对所有数据成员赋值
条款17: 在operator=中检查给自己赋值的情况
sankt 2006-11-29
  • 打赏
  • 举报
回复
第一题不错啊,很多C++的基础知识都考到了
y81348016 2006-11-29
  • 打赏
  • 举报
回复
多出几道 适当有点简单的 给我们点自信出来 你怎么一整 谁还有自信 混都饭吃都不容易
第一道能看出些错误 因为现在正在研究c++
第二个跟本就看不懂 虽然学过数据库
xu_yuanjie 2006-11-29
  • 打赏
  • 举报
回复
第一题还勉强做得出一点,
第二题一看就傻了,最怕这东西。
加载更多回复(60)

64,700

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧