C/C++笔试知识点整理 37



1.
sizeof 运算符是在程序的哪个阶段计算的,
class A{};
size_t a = sizeof(A);
a = ?

编译期
a = 1




2. 
你出生你年份的阶乘最后一位数是几?


【计算一个大数的阶乘的最后一个非零的数字】

【计算一个大数的阶乘的位数】 http://www.cnblogs.com/jiaohuang/archive/2010/09/22/1832964.html

3.
C++里的类,继承,多态,虚函数的用途?


参考:

 类实际上是对某种类型的对象定义变量和方法的原型,它表示现实生活中一类具有共同特征的事务的抽象。

继承:可以使代码重用,子类可以继承和父类共有的东西,并且还可以添加代码

多态: 通过迟绑定技术实现,编译时不确定要调用的函数,等到运行时根据对象的类型来确定调用哪一个函数。


多态实现的四个必要条件是:

虚函数

继承

父类指针或引用指向派生类对象


虚函数:

虚函数是为了实现多态的。

有 虚函数 和 纯虚函数  两种。

虚函数可以被实现, 通过在函数面前加  virtual 关键字实现,作用是允许 基类的指针调用子类的函数

纯虚函数不可以被实现,它只是提供一个接口,起到规范的作用,规范继承这个类的程序员必须实现这个函数。


4.
什么是设计模式,敏捷开发,重构?使用这些技术有什么好处?


设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性


简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。

在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。

换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。


重构(名词):对软件内部结构的一种调整,目的是在不改变"软件之可察行为"前提下,提高其可理解性,降低其修改成本。

重构的好处


能改进软件设计使软件更容易被理解
能帮你找到bug
提高软件的开发速度



5.
static函数与普通函数的区别?


在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
  函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
定义静态函数的好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突
<2> 静态函数不能被其他文件所用。


C语言中使用静态函数的好处:
      静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。 
      关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
 

6.
数组和链表的区别?对应stl里面的什么?map的实现原理?

二者都属于一种数据结构
从逻辑结构来看
1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。
2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素
从内存存储来看
1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小
2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦 


从上面的比较可以看出,如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。


vector  list

7.
假设开发一个手机上的文件编辑软件,需要把一个1M-200M的文件,逆序存储到另一个文件,就是前一个文件的最后一个字符存到新文件的第一个字符,以此类推。

这个感觉用栈是很危险的吧 200M 呢。

C的话,不能使用栈了,难道要先定位到文件末尾,然后读一个字符输出到新文件再重新定位倒数第二个字符再····【额  有米有什么好方法】

C++的话,难道就一次性读到 vector中么,在reverse么?【不懂 +_+】


8.
假设有一个玩家类Player, 玩家不断出现(new一个对象),不断消失(delete该对象),new和delete很频繁,如果希望不释放内存的话,如何通过 new和delete解决这个问题?



设计题
1、设计一个图片存储系统:假设有一个相册系统,每个用户不限制上传的图片数目,每张相片压缩后都在1M以内,需求如下:
(1)文件数量太大,采用传统的文件系统存储导致目录系统非常臃肿,访问速度变得缓慢;
(2)单机存储容量已经远远不能承载所有的文件;
(3)上传之后,用户只有读取操作和删除操作,不支持修改,整个系统读写比例10:1
思路:可以使用分布式的文件系统,觉得hadoop的HDFS很符合要求,这是hadoop对googleGDFS的实现。





 Windows程序的入口是哪里?写出Windows消息机制的流程

Windows程序的入口是WinMain()函数。

              

Windows应用程序消息处理机制:

A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中

B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。

C. 应用程序调用DispatchMessage,将消息回传给操作系统。

D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值