赞
踩
开场 简单自我介绍
1 : 平时渎书吗? 读什么书? 哪里让你感触最深?
我大概聊了下侯捷老师的STL源码剖析
2 sizeof(类) 大小 包含虚函数时呢? 两个虚函数时呢?每个对象都有一个虚函数指针吗? 每个对象都有一个虚函数吗?
3 多态 : 面试官描述, 让你判断会不会形成多态
4 问我什么是纯虚函数?纯虚函数的作用,具有纯虚函数的类能实例化出对象吗? 为什么?
5问我什么是接口? 我扯的多了,扯到接口继承,和实现继承了。
6 容器? 都知道哪些容器?平时都用哪些容器? 怎么用?(序列式+ 关联式bulabula)
7 模拟实现STL reverse算法(简单哦)
8 问我 map, 怎么遍历map?
我说:借助迭代器,
问我怎么定义迭代器?
我说 :可以借助C++11提供的auto 关键字来接收,auto 关键字会让编译器自己推导迭代器类型, 代替了我们一长串类型的定义
9 情景模拟: 一篇英文文章(文件):问我将来想知道文章中所有单词出现的频率, 问我怎么做?
答 : 选用数据结构 unordered_map<string, int> + 文件指针 +boost库中 boost::splite()函数进行使用,
问我: 选哪个文件流? open ? fopen? sstrean?
我选的fopen()
问我 fopen()的参数是什么? 我说 文件的path 和 打开的方式 。 因为只读,所以选取 ‘r’ 的方式 又问我为什么选 r ?
我说因为已知是英语文章, 所以字符将来都是ASIIC表中的, 所以不会出现 unicode/UTF-8 所以不必用 rb方式 当然 用rb方式 也没错
问我 r 跟 rb方式的底层实现有什么区别?
我说具体不清楚,但我觉得应该是分两方面:
一:ASIIC部分不做处理
二:非ASICC的unicode 编码 应该是安源码情况进行编译。
问我: 假如不选取rb方式: 会不会出什么错?
我说: 如果出现了非ASIIC字符,那么到时候可能会出错的。
问我 怎么读取文件?读多长?怎么处理?
fgets() 读一行 ,先进行处理 处理采用splite 函数进行切割,将切割的结果保存在一个容器里,一般情况下,单词之间应该是以空格进行分割的
他又说:一篇文章肯定不会只有一个空格切分啊,我一个空格的话就模糊了吧。
(汗,其实我忘了splite是不是可以定义一组字符方式,我记得好像可以 ), 我就直说说,我记得splite函数好像是可以定义一组划分方式的,用的时候我可以直接man一下确定下。
他说 行 知道了。
10 为什么选用 unordered_map(他一直说ordered_map 我纠正了两次unordered_map ,他还是ordered 汗,懒得纠正 )
我就说 因为是一篇文件 ,所以说数据量可能很大,选用 unordered_map可以快速查询到相应单词是否出现,时间复杂度为O(1), 代价是底层维护一段比较大的内存空间. (string作为key其实底层通过 哈希函数进行处理过后才存储的)
他说 行知道了。
11 让我说一下平时的学习中写过什么作品?
汗: 第一次听这种问法,不清楚他问的项目还是啥? 我就稍微问了下他 哪方面, 他说平时练习之类的。
我也就没提项目: 我就说了下 用TCP写了个英译汉字典的
实现的是 翻译。 底层数据结构是 unordered_map
查询到了返回 ,没查询到 也反馈个信息
他也没多谈
12 问我有没有 获取网页?
我说我用python 爬取过大量的网页, 简单说了下python的 爬虫
他就问有没有用C++实现过爬虫, 引导了我一会儿,汗 。。。这个我就说没试过,不太清楚
13 提问环节?
我就简单问了下C++标准库有没有实现协程? 网上大家都是每个人自己实现的 。 他给了我个参考QEMU 让我参考一下源码
面试结束 :全程 42分钟 一面52分钟
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。