:"金山kingsoft笔试题2010 c++"
:"C++ 工程师 金山software 2010年校园招聘笔试题 技术类"
:"c++ 金山 笔试题"
【知识点详解】
1. **C++类型转换的区别**
C++中主要有四种类型转换:静态_cast,动态_cast,const_cast和reinterpret_cast。静态_cast用于基本类型的转换以及指针和引用之间的转换,但不进行运行时检查。动态_cast主要用于类层次结构中的向下转型,且在转换失败时抛出异常。const_cast用于去除或添加const和volatile属性。reinterpret_cast用于任意类型间的转换,但不保证语义正确。
2. **关键字explicit**
explicit关键字用于构造函数,防止隐式类型转换,避免不必要的对象创建和潜在的错误。例如,如果一个类有一个接受单个参数的构造函数,声明为explicit可以阻止使用这个构造函数进行隐式类型转换。
3. **虚析构函数**
虚析构函数在C++中用于处理多态性,确保基类指针或引用删除派生类对象时能正确调用派生类的析构函数。未声明为虚的析构函数将仅调用基类的析构函数,可能会导致资源泄露。
4. **代码改错**
在给定的代码中,`Circle`类的构造函数使用`memset`初始化成员变量,这是不安全的,因为`memset`将对象全部设置为0,可能导致成员函数指针失效。应使用默认构造函数或成员初始化列表。此外,`wmain`函数中使用了`shapes::const_iterator`,应改为`shapes.begin()`,因为`shapes`是范围内的作用域解析运算符,不是命名空间。
5. **STL应用与问题**
使用`std::vector`时,需要注意迭代器失效的问题。在`RemoveItem`函数中,当删除元素后,迭代器`it`不再有效,应先保存下一个迭代器,然后删除当前元素,再更新迭代器。
6. **智能指针**
智能指针如`std::unique_ptr`和`std::shared_ptr`用于自动管理对象的生命周期。循环引用问题可以通过`std::weak_ptr`解决,它不增加引用计数,只有在对象存活时才能转换为`std::shared_ptr`。
7. **进制数模式**
这是一道数学问题,涉及二进制数的排列。规律是2^(n/2)+2^(n-(n/2))-1。代码实现通过计算2的指数幂并相加得到结果。证明可以通过构造法,将n位二进制数分为两类:奇数位全为0和偶数位全为0的情况,分别计算满足条件的数,最后减去全0的情况。
8. **日志分析**
获取访问次数最高的IP,可以使用哈希表或优先队列(堆)存储IP及其访问次数。对于每日前1000个IP,可以维护一个大小为1000的小顶堆。一周内的IP访问次数,可以使用滑动窗口策略,每次新数据到来时更新窗口内的IP计数。
9. **有向图路径**
- 环路检测:深度优先搜索(DFS)或广度优先搜索(BFS)过程中记录已访问节点,若回溯到已访问节点则表示存在环。
- 无环图路径计数:BFS或DFS遍历,对每个到达终点的路径计数。
- 有环图路径:可以先检测环,然后使用拓扑排序或BFS,通过限制回溯次数来避免无限循环。
10. **软件设计**
- **Winzip类似压缩软件**:设计包括文件选择界面、压缩算法实现、解压缩功能、进度显示、错误处理等。
- **简单绘图程序**:包含画布、绘图工具选择、颜色选择、撤销重做功能、保存加载图片等。
- **多线程下载客户端**:使用HTTP/FTP协议,多线程下载,断点续传,速度控制,进度显示,错误恢复机制。
- **即时通信软件**:包括用户注册登录、好友系统、消息发送接收、群组功能、语音视频通话、文件传输等。
- **在线图片分享服务**:图片上传、缩略图生成、图片预览、用户权限管理、评论系统、搜索功能、标签分类等。