一道Apple公司(中国)的面试题目
Apple在中国(上海)有公司业务,但是感觉主要是做测试工作的部门,主要是保障Apple的产品质量QE。面试的时候,面试官出了一道题目,我貌似曾今开过类似的题目,但是由于当场发挥不佳没有答出来。题目大意是这样的:
在公司的某个通信协议中存在这样一个场景,甲给乙发送了一个数据帧,这个数据帧最前面的一个字节代表是数据帧的类型(总共四种),只可能为0,1,2,3。甲每次给乙发送一个数据包后,乙要通过自己写程序调用对应数据帧类型的函数来对这个数据帧进行处理。处理函数必须要和帧相对应,不然得不到真确的结果。要求不能使用if...else...,switch和三目表达式语句。
题目到这里,想必大家都已经知道可以使用C++的虚函数来做,可是到底应该怎么写呢?下面给出一种实现方法。
#include <iostream>
using namespace std;
typedef void (*pFunc)(void);
class Solution{
public:
virtual void func1(){ cout << "func1 executed ..." << endl;}
virtual void func2(){ cout << "func2 executed ..." << endl;}
virtual void func3(){ cout << "func3 executed ..." << endl;}
virtual void func4(){ cout << "func4 executed ..." << endl;}
void doSomething(int frame_id) {
if(frame_id >= && frame_id <=){
pFunc pf;
pf = (pFunc)*((int *)*(int *)this + frame_id);
pf();
}
}
}; int main(){
Solution sln;
sln.doSomething();
sln.doSomething();
sln.doSomething();
sln.doSomething();
return ;
}
执行结果如下:
aaarticlea/png;base64,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" alt="" />
其中关于如何获取指向虚函数的指针的方法,可以参见文章:http://www.cppblog.com/xczhang/archive/2008/01/20/41508.html
一道Apple公司(中国)的面试题目的更多相关文章
- 全网最全C#实习面试题目
整个内容是我在春招面试时候整理的一些题目,里面涵盖有网上搬运的(由于当时没有记录来源,如果有转载没标注来源,请与我联系),还有我面试到的.整个排版很乱,后期我会一步一步整理.整个内容大概快有两万字.整 ...
- 2016年Web前端面试题目汇总
转载: 2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢 ...
- Android面试题目及其答案
转自:http://blog.csdn.net/wwj_748/article/details/8868640 Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应 ...
- 经典面试题目——250M内存处理10G大小的log文件
前言 周末逛知乎的时候,看到的一个经典面试题目:http://www.zhihu.com/question/26435483.非常经典的一道分而治之的题目. 题目描写叙述例如以下: 有次面试遇到一个问 ...
- 前端面试题目汇总摘录(JS 基础篇)
JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...
- (转)喜马拉雅2018 Java面试题目
背景:将网上的题目整理下. java基础 1:hashTable hashMap ConcurrentHashMap 的区别.数据结构.线程安全 2:equals和==区别, 重写equals一定要重 ...
- C语言经典面试题目(转的,不过写的的确好!)
第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...
- linux面试题目—2
linux面试题目—2 二 选择题 1.关闭linux系统(不重新启动)可使用命令 B . A Ctrl+Alt+Del B halt C shutdown -r now D reboot 2.实现从 ...
- linux面试题目--1
Linux面试题目 填空题1. 在Linux系统中,以 (文件)方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节 ...
随机推荐
- Web系统性能测试术语简介
并发用户 并发一般分为两种情况.一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作.这种操作一般指做同一类型的业务,比如在信用卡审批业务中,一定数目的用户在同一时刻对已经完成的审批业务 ...
- 虚拟机Linux----Ubuntu1404----root登录设置
说明:在安装玩1404这个版本的ubuntu后,默认也是看不到root登录的,也需要修改配置文件,但是修改的文件和1204不太一样. 1.shell窗口,普通用户首先登录,切换到root用户下: su ...
- [LeetCode] Missing Ranges 缺失区间
Given a sorted integer array where the range of elements are [0, 99] inclusive, return its missing r ...
- [LeetCode] Combination Sum II 组合之和之二
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
状态说明 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置. 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同 ...
- 如何有效地解决ie7,IE8不支持document.getElmentsByClassName的问题
1.复制此代码到你js代码的最前面即可 if(!document.getElementsByClassName){ document.getElementsByClassName = functi ...
- 研究Extension和Category的一个例子
Category: 1. 无法添加实例变量 2.将类的实现分散到多个不同文件或多个不同框架中. Extension: 1. 可以添加实例变量 注: 如果Category的头文件中也使用Extensio ...
- 让PDF.NET支持不同版本的SQL Server Compact数据库
最近项目中需要用到嵌入式数据库,我们选用的数据开发框架是PDF.NET(http://www.pwmis.com/SqlMap/),之前的博文已经总结了让PDF.NET支持最新的SQLite,今天我们 ...
- String 字符串
多行字符串: http://php.net/manual/zh/language.types.string.php#language.types.string.syntax.nowdoc DEMO: ...
- Matlab中^2和.^2的区别
矩阵a a^2 -- 两个矩阵相乘 a.^2 -- 表示 矩阵对应位置相乘 如下: a=[ 1,2,3 4,5,6 7,8,9]; disp(a); disp(a^2); disp(a.^2); ...