梧桐树同学提出了一条面试题,试着回答了一些。不过感觉用来做面试答案还是有些不太好,同时行文匆匆,可能有些描述不准确或者错误的地方,大家指正。

题目如下:

记得阿里巴巴的题目有一道是:

(C++)谈一谈你所知道的C++的框架....

这个问题问得我突然不知道框架是什么了,感觉C++里面很少提框架这个名词啊。

【我的回答部分】

梧桐树你好,这个问题的确是问得很大啊。我尽量回答看看。

框架,在英文中叫做Framework。应用程序框架就叫做Application Framework。现在是framework满天飞的时候,你没有听过框架,但是你肯定听过.net framework这个词。否则微软的广告就做的太水了。当然,.net framework是为了.net,其实主要是C#来做的,很多同学说,C++也可以啊,用CLR的C++就可以,不过带CLR的C++还是C++吗,而且既然用了CLR,为什么就不干脆来用C#呢?不过这个只是顺便一说,因为我也没有研究过CLR,也没有用过CLR下的C++,没有研究,没有发言权。还是来谈谈C++下面的framework。

首先,要清楚的是没有framework,我们能不能做开发,做应用。想想是可以的哦。在没有framework的时候,我们直接调用函数,完成功能。just simple。

然后没有framework和有framework,到底有什么区别。最大的区别就是,没有framework的时候,是我们call函数,而有framework的时候,是framework来call我们。

比较老牌的C++的framework,应该就是MFC了,MFC的全称为Microsoft Foundation Class,也就是微软基础类库,那不还是类库吗?好像没有提到framework啊。不过你细看里面函数的话,可以看到很多函数的前缀为Afx,Af也就是Application Framework了。

那C++的STL,全称为Standard Template Library,也就是标准模板库,它是不是框架呢?我们看看它提供了些什么,它提供了字符串类,输入输出流,各种数据结构,以及算法。这些都是在我们的程序中,被我们调用来完成功能的,从我的观点,它不能算是框架,而只是一套类库。

那MFC呢,为什么它算是框架呢?首先提起MFC,想到的是什么。应该是界面吧。MFC提供了包括static,editbox,button,radio,list,tree等等控件,但是单单就是界面吗?当我们点击按钮时,它会执行动作。这里面原来还绑定了函数。同时我们在对应的函数中写下比如一个MessageBox,那到时候就会执行,显示出这个消息框。这一切都是MFC在里面做,我们所需要做的,就是拖一个按钮过来,加上对应的Buttonclick事件,然后在对应的函数中加上对应的实现就可以了。

原来framework就是,在我们写我们的软件之前,就将整个的执行流程给我们规定好了,我们在规定的点填空,然后就可以完成应用了。比如我在2009年写一个软件,但是MFC是在2000年(其实不是哈,举例而已)就完成了。它怎么知道我要完成什么,然后再来调用我写的这些函数,最终完成功能。

其实现在一般来实现框架,都是使用了面向对象技术,也就是我们常常听到,听得耳朵都生茧了,其实还没有太明白的运行时绑定,也就是面向对象中封装,继承,多态中的多态行为。但是MFC那时,由于性能的原因,用虚函数比较少,主要用宏(在侯捷老师的书中叫做巨集,其实是一个东西)来完成,不过还是很多地方使用的虚函数。这个看深入浅出MFC来了解具体的原理吧。

作为framework,只需要定义一个superclass,然后你需要实现的时候,继承这个superclass,无论是类,抽象类还是接口,然后实现它,这样framework不需要知道你,它只需要知道superclass就可以运行了。而且是它来调用你。

其实这两天想了一下,除了面向对象之外,我们C系统中用回调函数,其实也就是函数指针,不也是用来实现让其他人来调用,自己来实现被调用的部分吗?哦,其实也就是现在常常提到的控制反转(还是依赖反转)?不过C和C++的世界中,这些名词提得比较少,一下子没有联系起来。

不过MFC完成的东西很多,windows消息的封装,消息映射和消息路由是一部分,同时它也提供了CString等类给我们来使用,还提供了Document-View,还提供了序列化等等东西。

另外有名的C++框架,好像有个重量级的网络开发框架叫ACE的,但是没有了解过,仅仅是知道有这么一个东西。

linux算不算框架,从现在linux的驱动开发,使用模块来进行开发的角度,似乎也可以认为这一套算是一个框架,只要注册了模块,那它就知道,也可以来调用。

另外,有插件机制的软件,算不算框架?

我知道的有插件机制的软件,比较古老的有Winamp,现在的有firefox,以及thunderbird这些Mozilla出的系列软件,eclipse等,这些中eclipse肯定算是框架了,其他呢?

另外C++中,Qt,wXwidget等等,尽管没有用过,但是应该也算是框架,而且是跨平台的。

写了一些东西,但是比较的乱,而且可能有些意思也没有表达清楚,有空我还可以再整理整理,问题很大,对于框架,还有很多要去学的。模式都没有学好,也没法去把框架谈好。

同时,上面这段,用来做面试的答案还是比较勉强,而且作为一个比较大的题目,真正展开来讨论,几个小时也不会结束,可以考虑考虑如何将这些知识比较好的表达出来。同时和面试官做好互动。难道是面试旺旺?阿里似乎网站开发比较多,C++用得不多吧。不太清楚。

转载于:https://www.cnblogs.com/cnyao/archive/2009/10/30/interview3.html

面试题之谈一谈你所知道的C++的框架相关推荐

  1. 谈一谈周公所理解的面试

    因为公司最近招聘的力度很大,所以最近公司的面试很多,加之很多同事项目紧,所以让我参加了一些技术面试.不论是作为面试官还是应聘者,参加工作以来我参与的面试的次数我自己也记不清了,所以在此想从面试官和应聘 ...

  2. 谈一谈800公斤的牛怎么过承重700公斤的桥

    谈一谈800公斤的牛怎么过承重700公斤的桥 800公斤的牛怎么过承重700公斤的桥? 思路和解答 一.物理常识: 1.拱形桥 2.平面桥 3.凹面桥 二.不借助任何外力过桥,一些其他的思考 三.总结 ...

  3. 写在工作的第十年: 谈一谈专注和基础的重要性

    写在工作的第十年: 谈一谈专注和基础的重要性 老帮菜的自我吐槽 不知不觉, 作为一个打工人, 作为一个写程序的打工人, 职业生涯的第十个年头悄然而至. 从一个充满雄心壮志的有志青年, 到如今有家有室的 ...

  4. 从996.icu来谈一谈如何高效支配时间

    引言 最近Github出现一个非常火爆的项目叫996.icu,轰动海内外,成为近日各大媒体的头条新闻,截止到今天已有12万人的Star(点赞).Github是一个全球最大的技术分享平台,但这个996. ...

  5. 谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】

    谈一谈浏览器解析CSS选择器的过程? 这是一道发散题,可以根据自己的理解自行解答. 在开始前,我们必须了解一个真相:为什么排版引擎解析 CSS 选择器时一定要从右往左解析? 简单的来说:浏览器从右到左 ...

  6. 有一群200w年薪的朋友是什么感觉?谈一谈入学中国科学院大学的几点感受吧

    我叫阿广,偶尔正经,偶尔逗比,97年生人,在求学期间当过鸡头鸡尾,当过凤尾没当过凤头.大家如果想深入了解我,可以查看本公众号的原创文章. 技术人光有技术走不长久,所以今天不更新技术文章了,也给大家谈一 ...

  7. 【建站系列教程】5、谈一谈网站的静态化

    [建站系列教程]5.谈一谈网站的静态化[进阶] 动态页面?静态页面?伪静态页面? 三个页面有何优缺点? 为什么要让网页静态化 如何网页伪静态化? 写在前面:大家好,我是热爱编程的小泽. [建站系列教程 ...

  8. 我从阿里面试回来,想和Java程序猿谈一谈

    最近小编看了一篇关于面试的文章,题目是"我从阿里面试回来,想和Java程序员谈一谈",内容不是讲面试前刷题,而是更加聚焦在面试前如何准备,以及工作当中如何学习.感觉总结的很不错,今 ...

  9. 怎么学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  10. 先查询再插入的存储过程怎么写_谈一谈 InnoDB(1) - 底层存储文件结构

    看技术文章是不是很累呢, 这次来个轻松点的~来谈一谈MySQL最主流的数据库引擎 InnoDB 吧~ 序 老王走进一号会议室, 随手打开了灯, 小张紧随其后 "王哥, 找我来干啥啊" ...

最新文章

  1. 软件疑难杂症解决办法汇总
  2. 编写书籍《C语言嵌入式系统编程修炼之道》序言
  3. R语言应用实战-基于R的C4.5算法和C5.0算法原理解析及应用案例
  4. linux查看指定用户的所有进程
  5. yeoman_使用yeoman轻松创建Yeoman生成器
  6. java快捷键 --_Java中的快捷方式“或分配”(| =)运算符
  7. G - Hard problem CodeForces - 706C DP
  8. 【Shell】数某关键字在文件中出现次数
  9. 百会ZOHO发布基于SaaS面向中小企业的CRM平台
  10. 数据挖掘肿瘤预测_肿瘤分析数据挖掘及信息解读
  11. python 操作word页眉表格_pythondocx读写word文档:插入图片和表格,设置表格样式、章节、页眉、页脚等,Pythondocx,Word...
  12. 小米Max 2完美刷成开发版获得root超级权限的流程
  13. error redefinition of 'xxx' 问题解决
  14. MySQL中的删除:drop,delete,truncate的区别和联系
  15. Web测试的常见测试点
  16. python 任务管理系统_python bottle框架开发任务管理系统 V_1.0版
  17. 3.1_28_4 JDK8新特性【Date】之ZoneId 时区信息
  18. java:从左至右显示“12345678”,接着显示“23456781”,在接着显示“34567812”,一直到“81234567”, 然后返回“12345678”
  19. 【Coling 2022】Context-Tuning: Learning Contextualized Prompts for Natural Language Generation
  20. RPM的制作(.spec文件)

热门文章

  1. PPT:Semi-supervised Classification with Graph Convolutional Networks
  2. 猫眼电影排行榜python爬虫
  3. node-mysql_Nodejs与MySQL交互(felixge/node-mysql)
  4. 炒菜机器人煎鸡蛋视频_还在用油炒鸡蛋?赶紧试试用“它”炒,鸡蛋滑嫩还不粘锅!大厨轻易不透露...
  5. 华为手机如何给应用加锁_华为手机正确防止应用后台运行被清理的操作方法
  6. python开发怎么成长_Python开发者四大进阶攻略,菜鸟的成神之路
  7. git 远程删除分支之后 本地分支更新后还在
  8. DevOps使用教程 华为云(10)GitHub git Pull Request 合并请求
  9. 计算机的典型网络地址 特殊0.0.0.0 本机127.0.0.1 内网192.168.xxx.xxx 172.xxx.xxx.xxx 10.xxx.xxx.xxx 外网
  10. java alert 乱码_在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法...