Visual C++方舟互娱面试经验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/87428257

Tcp的三次握手

有没有做过网络编程?

回答:没有做过,做得比较简单后,面试官就不怎么想问问题了。

自学一些书籍并做一些案例,

参考书目:

《高等学校计算机教材:Visual C++ 网络编程教程(Visual Studio 2010平台)》

《Visual C++网络编程案例实战》

学习总结:

如何读入文本文件,如果文本文件很大加入2G,怎么处理?

首先要弄清楚,读取文件真正想做什么?是扫描统计字符频率,处理图片,播放视频?不同的场合会有各自不同的处理方法。

假如大文件太大无法一下子读进内存的,通常会开一个缓冲区,比如缓冲区大小为1M(缓冲区的大小根据应用场合来决定)。先往缓冲区读取1M的数据,再处理数据。处理完毕,再读入下一个1M的数据,一直到处理完成为止。

这种利用缓冲区的处理方式很常见。也需要注意一些小细节

  • 比如一个完整的数据处理跨在两次缓冲读取中间。
  • 比如文件最后可能填不满缓冲区。


另外假如文件有一定规律,可以利用已知规律来处理。比如一些文件格式,会分成一个个小区,并有个目录表。就可以先读取目录表,接着根据目录表直接定位到具体小区的位置。这样很可能文件就算很大,每个小区也可以直接读取到内存中进行处理。



作者:黄兢成
链接:https://www.zhihu.com/question/35403869/answer/62593202
来源:知乎
 

一千万条短信,有重复,以文本文件的形式保存,一行一条,也有重复,请用5分钟找出重复最多的10条短信。

采用内存映射办法。

首先,1千万条短信按现在的短息长度将不会超过1GB空间,使用内存映射文件比较合适,可以一次映射 (如果有更大的数据量,可以采用分段映射),由于不需要频繁使用文件I/O和频繁分配小内存,这将大大提高了数据的加载速度。

其次,对每条短信的第i(i从0到70)个字母按ASCII码进行分组,也就是创建树。i是 树的深度,也是短信第个字母。

这个问题主要是解决两方面的问题:

(1) 内容的加载,

(2)短信内容的比较。

采用内存映射技术可以解决内容加载的性能问题(不仅是不需要调用文件I/O函数,而且也不需要每读出一条短信都要分配一小块内存),而使用树技术可以有效地减少比较测次数。

参考:http://blog.csdn.net/hhh3h/article/details/22973291

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/87428257