一道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,iVBORw0KGgoAAAANSUhEUgAAAkUAAACzCAIAAAAISP+7AAAQT0lEQVR4nO3da28cVx3H8XmC4KXkNeQdIMRNi4AKVUQ8iChCSDxBMgIhQKiX0Da9ibaw4KaUlqitlVSklzTOOGkfULtSHepCCeBuIbXV+JYLTkJVDQ/cnT1zLv85M3Nmd/b4+1EU7Z49cy4z6/PzzK53kwwAgOk0t7j+/lAy6cEAAFDT3OL6f4bIMwDAtJpbXP9giDwDAEyrucX1XEmeLV94O1047/PvreULH3/88XgmAABAlmVzi+sfDpXk2XNzLyy9tbL01tvGv5U3l1feXF45+fK5ky8tnHxp4Q/Hn9/Y2BjPBAAAyLJsbnF9Y6gkz+YXXrt569aNmyX/bt66dXp+4dKlS/UHtdrvHej1V+s3MBzxTJBmmvWy2u8dmJm3bmYrlriaGifHGEIdskqdAqgoEY15JEtLS2b50tJS7ZHMLa5vDZU0ce7863/7+7/v6s/f/bsz9zzx6pHfn7736VfeeedfW5sb7w8G7w8Gm5sbj59YfPzEoiPPVvu9AyOj1c8IBH1xnJ/Jt6q0qklJEy7rupVnYTPcbK1GntkbUZTuh+Z5Np5fbYCuE6JizHm2tLT0qU9/Ros0a6G/ucX1naGSySyce+3dix98+76Tdzx44ruPPv+9/rPfP3Z8efni1saHap71X/yzkGfWVWm135NyR13w5mcqLEviIiZ1Wkm38sycV40wGG0SorWyRrRDLI6ntrC7BZhS3cmzzEivhmGWZdnc4vpTQyWTeeXVs+9e/ODHx17+zqPP3v7Q7G2PPHbbYw8vL1/c2rg8GAwGg/c2NzeOnTv/9OJ81TxzZ8v8TMVTMn1rIWlCBVrH8syYV7OFO0BrHo2UtBoiSMLuFmA6dSrPMiXDmodZlmVzi+v/GPLKs96R/mfveujz9x/90iO/7D1+19752WDw3t752XN/efHEX0/65tnoIlXxofxeyQVD6wUrtVy7qqmVmcuTWSdUL6PyYStqnpX30uuv6jEzrKtcvMvPqdRetAGZI9Ra0DbR9pJjOqNa8zMHev3+jLirzT1vH3PJPlQ3KjSZ1+z1+/lTKOxuUenbrvZ7+RiV38gsXQBj1rU8y4aR1jzMshp59rkjD37hgfu+/KsjX/nNnV8/9rO987P8euPK2srK2orP62fDpVIJjnw5Ks+z+Rk9RPLFtLiqjVarwjI1WmGKl72KvQXpRUkevZFRa65e7JfI1Ees5wyFeWnruDFCSwvG9cBia5bpFPJMDVbb8ZXyrMo+tOeZenRW+z1lJ4bdLZl727x09KDjGYh9oyNvxIg+z6pdb/ziw/f2Hrv7q7/9xW1P/vT2Z360vHxxU3n97NbNG7du3qh8vTHLCotNaZ7p5cpCr72PZO9u8WzqwAHbKmv2FaYX16nJsGvPXvKHZmZs53Dm0M3fDlwjNFvQxuxoTb1rrOTDR61hYs0zZSye+9CaZ66jE363CNtm+ubOasBYdS3Pgl9vnB3yyrOv/PrOrz3x82889ZNvHv/ht57/wfLyxY3Lwzzb2Lh+/drO9natPFNWHvviaK2atzxcglxJ41g/7L9Ah+ylRp7Zehlue6DXs72TcO8Mxvqe0eLC7VxH1Rb0I2VvTb1bnmdCI3X3YeU8C7xbxG2NPCPB0AGdyrM23g9yx1BZnp1JL7z9z3vmjh858cy9Lzx1/5+efODFJ95440KeZxuXL1+9srO5uVn99bPhXWPdKF4wyt/faFyjU14FsV1r0q4QFtdGS535frBe1BdT1Dvu643O8ajr+GgH9W2vICnz0l830kdoacF2pJTWLNPxyDPHkLQdUGUfKs+f4o51XG8MuFtGXdufWnt7QRmg+xkIjFF38qyl9+vnt0sm89Lpsx999L+rV7au7mxd3dm6dvXqtas7165s39j9780bu9evX7ty5cr29tb29lbNPMsXG/NyV664CpqlhRfd+8Wl1VI7K6y5ozqFV8ea9ZJfJDRbLutFH4/5jobhq2mWiWkRVHivgnOShRxQk6D4u4Y5HZ88KzbivPRWYR+O6vZmZnr66I2jE3C3qE9dY1sloJWcdT4DgfHpyMt4WWt/Tz1qX6763NwLp+cXzH9n0vNnz71+5uy5vOSPz86tra3VGM1EXiiP9dX5sPMK0toEdrVxoS/Www2gQp7t7u6ura1d8rC2tra7u1trPPPV/yqruYl0OgZh5xWktTHs6tV+r3CKZbxuFevhBva7CnkGTAflyh5vwgD2D/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQg0KeAQDQBVmW7VREngEAOidYnqVpmqZp2MEFb3DM2tgnAACrMHmWr9qhlu90KEhrExTBFABgKgTOs7A6GAZVh9TBKQBAlMizasgzAOimpnmWFu01ar1t3siZLeTlPnMwt3X15epFLZcn4urLc0YAgJa48uzQoUONzs+0FT+/kRqvtFlrupo1uTbPw6l0SJ6FpXd9NgcAtMSaZ4eGwueZXCg0ItRxnQwJ50xy75XyTG6TPAOA8TDz7FDRFOSZ50Ol0WUt9D8/89kcANASLc/UGHNFWrU8Kz1x8Q8PK9fmaYjrjT7nfJ5tugZv3XWehQCAnDXPXHfteWZecNuTl6RFaolaU4sBV7Mm1+aJEQPCOOXBl/blalMev/VR/0IAQM7MM/PyY/n5GQAAk8XnNwIAYkCeAQBiQJ4BAGJAngEAYkCeAQBikGXZm1U48yz4G8o936zfZdM+fgCYImHyLLX9KXETqfefJHfcVA8eAKZI4DwLpbN5VnUwnRo8AESso3mm6lQkkGcA0E1N88z6wU7W265PkEqKnw6ljc8nD8xtXX1Ze9F6lyfi6st/RgCANrR1fpbaLhhq8SDUFEp8Ospvy49WKiy96zkjAEAbxp1ncqHQiFDHdTIknDPJvVfKM7lN8gwAxqO7eeaZBP5xWBpd1kL/8zOfzQEALWk9z0pPXBpesnPVTENcb/Q552s4eOuu8ywEAOQC5Jl5wW1PXpIWqSVqTS0GXM2aXJsnRgwI45QHX9qXq015/NZH/QsBALlgnw8CAMAEkWcAgBiQZwCAGJBnAIAYkGcAgBiQZwCAGPD9Zy2a9vEDwBTh+8/aNdWDB4Ap0tHvi+lsnlUdTKcGDwAR62ieqToVCeQZAHRTp7//zPP1J3NbV19CL9ZNzNuuvjxnBABoSde//8xVKHeU35YfrVRYetd/RgCA4Lr7fTHWpqyPuk6GhHMmufdKeSa3SZ4BwHh0NM/8I0F4VI6ier1XbZM8A4Dx4PvPpEKfc76Gg7fuOs9CAECuo99/5iq0MmtqHclt+gy+tC9Xm/IUrI/6FwIAcnzeFQAgBuQZACAG5BkAIAbkGQAgBuQZACAGWZbtVESeAQA6J1ietfSG8ql+kzpvsgeAsamXZ6cWkmQ2SWaHraS2PyUOYtrzYNrHDwDTol6eHR5kWZZlg8OftNLSqt3B85uq4+na+AEgVo2uN+4c/aSV9q40di0PyDMA6KameWb9YCfrbdcnSCXFT4dSCxO/PLBua+3LrGn2Lk/E1ZfPjAAA7Wnr/MxMpsTx2cSumq6WfTpKbHEod1RaWHrXZ3MAQEvGnWdyofqo5ymOUFM4ZyrtXWikUpvkGQCMR/33g+wcPTg7bCV4nlnbqVpBjiLPQv/zM5/NAQAtCfP3Z0KelZ64yKt/pTwzb8uPlhb6nPN5tukavHXKnoUAgFyAPDMvuO3JS9IitUSt6VrEfSJNq6Z1JDfoM/jSvlxtyuMXZu1TCADI8XlXAIAYkGcAgBiQZwCAGJBnAIAYkGcAgBiQZwCAGJBnAIAYkGcAgBiQZwCAGJBnAIAY1MuzUwtJMpsks5MePQAAe+p/vn6WZYPDkx4+AABJkoT6/jMAACaLPAMAxIA8AwDEgDwDAMSg/vtBdo4enJ306AEA2MPfnwEAYkCeAQBiQJ4BAGJAngEAYkCexSxN0061AwDtIc86IU3T0szwqaPVr7e5tWaUkTa2SU1w71U97mrltEirHHCQQBBN80x4xqMSee/lj/rvZG1h8tzcVTPKgxt9ntU47q6t1EJ+2NFNAc7PrE/6CIx5LkJ3NaJFOCi1O5rqgxt9dJkqHT75p9inBJg48syJPCPPOt6Rf0SZd/039CwBJq6VPFOvSGg/ddaLFamiSU15pfYfUlqkbaIVahVcvVSakTl44W7pJq7NrWNu2G8lrj2f1HraWI9RYjuargbNctd45OnIHVmryaMSupMrCHc9t3IVVhqk/6SAJsLkmfDDqZWYt9sodPEcUuldc3ly9RJk8DUWJs95pcUY898DzQn7s/TRSoXWu6V11DZd+8fKvyNh5wfZ1fUOn1nNZ0alTYV98gBWgc/PVPIPhrxGpEVaubWyz2xd25odmZVLV1j5UWtHnj/wNRYmoWXPedXr11+lPS/vOuuGPoP32RWex6hGR+r/ibhD6mn4tKlRaK0W9mkDCOrl2amFJJlNktkkSVrLM2HQtX/A5CHJD7nWtVDTrDcSn01K06JGzeYazjfKPCttvJKqh8//B9mntdqVgdrqf75+lmWDw0kSNM9CFbp4Dkm+m6ZpwzyrMfgaq15pj/ld/5oBueYuDMk1PLNQO0aJY/xCnXpPsEodaTOt0ZH/E15rvMkPQqURVqoPNNT0+8/SIbXRtMj6UI1Ca5uujjRVhyQMwGxNrabeFR7yGZh1PEIFs768uTZOuaNKXfuPUN7DQk25sLQF124XDpnPMfLpSL2hjdOzC22mVatZN3TtkMTxRPIZqmc1IBS+zzNmodYR1iMA3UeeAQBiQJ4BAGJQ//0gO0cPzk569AAA7OHz9QEAMSDPAAAxIM90++3txftqsgAixvefWUQzER/7arIAIsb3xVi0N4vJ7p84jg4AWJFnFuQZAEydKfj+s9JVWKtm7docktCsq5q1I/825WnKc0zK9pIwd1fvrtYS264zb1caPAC0bZq+/8zKtbnZVI02XZvUaNNap/k0rYXWCq4uhKMW6hgBwBiM+/vPrOFn/R2/0i/+WptyDpU2a60mDN6nTXMwwjhLNxQ2F9r0zDPPNl07BAAmYmLf5+lTv3QTrU7APDPXaHma+zPP3OMFgHHr1vdT+yzKtdv0ac2znRptlm4Yapqt5pka866a5ByAiQj292dqo2mR9SFrZbnQJXVwdefZWmKszq4h+a/gwkxrbGsWls7dWtm6ibVyYkSatYvyHQEAodXLs1MLSTKbJLOTHn0Nbay2rOAAMHH1P18/y7LB4UkP35v/adBk2wQA1MP3nwEAYkCeAQBiQJ4BAGJAngEAYlD//SA7Rw/OTnr0AADs4fs8AQAxIM8AADEgzwAAMSDPAAAxIM8AADEgzwAAMSDPAAAxIM8AADEgzwAAMQj2fZ7aN0MCADBO5BkAIAbkGQAgBuQZACAGvB8EABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEAPyDAAQA/IMABAD8gwAEIOGefZ/qzW2Cylw0F4AAAAASUVORK5CYII=" 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节 ...
随机推荐
- SQL Server读写分离实现方案简介
读写分离是中型规模应用的数据库系统常见设计方案,通过将数据从主服务器同步到其他从服务器,提供非实时的查询功能,扩展性能并提高并发性. 数据库的读写分离的好处如下: 通过将“读”操作和“写”操作分离到不 ...
- ubuntu下修改键位
尴尬的背景: 服役5年的笔记本,最近键盘失灵,部分键位彻底失去响应.最蛋疼的是左右方向键都不能用了 ○| ̄|_ 解决方案是,通过xmodmap命令,用其他相对鸡肋些的键位替代方向键. 1 查看各个键位 ...
- 开发常用图标png、ico 图标下载
推荐几个不错的下载地址: 1.http://www.easyicon.net/ 2.http://588ku.com/sucai/ 3.http://www.iconpng.com 可直接下载png等 ...
- Ubuntu15.04安装不完全指南
0x00. 烧盘 使用UltraISO(破解版)烧录到U盘里,设置电脑从U盘启动,即可安装. 安装时可能出现not COM32R image的命令行,“boot:” 后面直接输入live即可解决问题. ...
- 阿里云ECS服务器配置(Ubuntu+JAVA+Tomcat+Mysql)
最近购买了阿里云的ECS服务器,就服务器的安装配置做简要的说明,也方便日后查看. 1.远程操作服务器 远程操作服务器可以使用putty工具,下载地址:http://pan.baidu.com/s/1q ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- 表单元素——checkbox样式美化
一.背景 设计狮童鞋总是会设计各种高大上的效果图,比如下面这个土豪金的效果. 该图中“已阅读并同意相关服务条款”前面的复选框有一个金色的边框,打钩时是一个金色的对勾.接下来说说怎样实现该效果. 二.解 ...
- 使用Jenkins配置自动化构建
持续集成是个简单重复劳动,人来操作费时费力,使用自动化构建工具完成是最好不过的了. 为了实现这个要求,我选择了Jenkins. 从http://mirrors.jenkins-ci.org/windo ...
- [LeetCode] Queue Reconstruction by Height 根据高度重建队列
Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...
- [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...