c++面试总结及其面试题

面试题

在互联网应用中,常常需要将二进制流数据,转换为可以阅读的字符串编码,二进制数据的十六进制表达,就是其中的一种,现在要求使用大写字母和数字来表达一段给定长度的二进制数据,使得表达式这段二进制的编码字符串尽量短。

注意:由于字母1和数字1,字母0和数字0容易混淆,这几个字符和数字不允许出现在编码后的字符串中。

请编写 编码函数 和 解码函数:

将二进制数据进行编码,并返回编码后的结果

bStream[in] 待编码的二进制流

length[in] 待编码的二进制流的数组大小(长度)

res[out]编码后的结果

调用时,如果res为空,调用该函数,返回完全编码后的所需要的字符串的长度,不包含字符串结束符号'\0'

如果res不为空,调用该函数,res中保存的时编码后的结果,函数返回结果编码字符串的长度。

二进制流的编码,一般通过两次调用该函数完成,第一次使res为空,得到应该分配的字符串缓存的长度,更具该长度,为res分配缓存,再次调用更改函数,使得编码后的结果,保存在res中。

虚函数和非虚函数有什么区别?

虚函数用于实现多态,允许在运行使动态选择函数实现。

非虚函数在编译时就确定调用的函数实现,不具备多态性。

静态多态和动态多态有什么区别?

静态多态发生在编译阶段,主要通过函数重载和运算符重载来实现。

动态多态是在运行时解析的多态,通过继承和虚函数来实现。

内存对齐有什么作用呢?

提高内存读取,减少内存碎片,符合硬件要求。

c++对象的大小和什么有关

1.成员变量的大小和对齐。

2.虚函数表的大小。

3.继承关系。

4.编译器和平台。

什么是内存泄漏,怎么避免内存泄漏?

1.正确使用内存分配和释放函数。

2.智能指针。

3.RAII原则。

4.垃圾回收。

5.使用标准容器和数据结构。

6.内存分析工具。

QT中使用配置文件使用了哪个类

Qsettings

你了解dump文件吗?

Dump 文件是一种在程序异常终止或崩溃时生成的文件,它保存了关键的程序内存和状态信息,以帮助开发人员分析问题并进行调试。

当数组越界销毁时回发生什么?

程序崩溃、数据损坏。

c++的三大特性

1.面向对象编程

2.泛型编程

3.底层控制

构造函数可以分为哪几种

1.默认构造函数

2.带参数的构造函数

3.拷贝构造函数

4.移动构造函数

5.隐式构造函数

多线程对于共同资源的访问

互斥锁和信号量

指针和引用的区别

指针是一个变量,引用时一个别名。指针可以为空、改变目标对象、需要额外的内存、可以先不初始化。

有序单链表去重

50个台阶每次1或3

经验与教训

投简历/面试时遇到的坑

1.简历需要写的丰满,但不能够滥用精通掌握之类的词,得严谨(有一部分面试官抓着简历问) 2.简历要扬长避短,不懂的点不能写

如何避开外包公司

1.投简历初期主动找上门的基本是外包 2.投简历前或收到发简历邀请之后百度一下xx公司是不是外包

上家公司如何写

1.有IT行业工作经验的写上家信息

2.没有工作经验的随便挑一个其他城市的IT公司,避开社保公积金等问题

3.写同一城市的公司也可以,但一定确保有人能帮助过背调

4.得熟练说出选定的上家公司工商信息,地点在哪,你住哪,怎么到公司,一般不会这么问,但我在HR面的时候就被这样问到 挂了

算法究竟重不重要

算法很重要,但在有限的时间,如何获得最大的效果?

动态规划,字符串的算法,回溯类算法面试可能考到,但这一类算法往往比较难,机试出现可能性较大

面试真真需要的是掌握简单常用的算法,因为面试时间往往非常有限,一般给到算法题的时间往往最多15min,而面试要在15min内写出很难得算法不太实际,所以面试的算法有以下特点

1.若是遇到难的写起来耗时的算法,只要求描述算法思想,或者给出简单伪代码

2.遇到常见算法,需要自己手敲出来,并且边敲的过程边和面试官说明思路,我为啥要这样做

面试常见的要求手写的算法:二分查找快速排序、归并排序、堆排序(比较费劲,用于作区分),不调用库函数自己手写处理字符串的算法

若用到力扣,则可能会出现链表或者二叉树的算法,因为链表和二叉树建表建树比较费劲,力扣直接写核心算法就行

刷题推荐:代码随想录 有配套网站 有免费配套视频 讲解详细 难度梯度设置合理

面试时遇到的坑
  1. 常见考点(个人经历)

    • 虚函数和动态多态 频率:几乎必考

    • epoll (水平触发边缘触发,为何用epoll,好在哪)

    • 线程间通信和进程间通信

    • 问做过的项目及其细节

    • SQL事务 Redis五大数据类型

  2. 面试被问的没答上或答的不理想的问题:

    • 你大学的绩点是所少?

    • 你们的这个项目(网盘)项目和FTP server有什么区别呢?直接用现成的FTP server不是更好吗?(可以从秒传 断点续传 等一些原生FTP server不具备的功能入手)

  3. 做过两个大项目(网盘和搜索引擎),我该怎么去说,选择哪个项目去说

    • 选哪个项目呢?因人而异,但一定要做到的是面试有东西可以说,能够自圆其说

    • 关于项目的一些事:面试官压根不知道你做了啥项目,也不知道具体细节,所以能够流畅说,自圆其说就OK

    • 网盘项目(一定要掌握)

      • 较难的面试点:

        • 秒传、断点续传实现细节

        • 有现成的FTP server 为何你们公司要开发这个产品

        • epoll的各种难点

      • 理解起来相对容易,问起来有东西可说,容易做到自圆其说

    • 搜索引擎项目(尽可能掌握):该项目较为庞大,项目结构就是企业级项目

      • 面试点

        • 你们的七个库是怎么建立的

        • 你们分词是怎么分的

        • 说一说simhash/cppjieba原理,了解自然语言处理吗(用到自然语言处理,可不深究)

        • 说一说你们关键词推荐是基于什么来实现的(最小距离编辑算法 + 项目文档上的页面排序规则)

      • 被问到的说不出来怎么办:就说这一部分是同事负责的,但一定要确保自己说出来的那一部分能够自圆其说

  4. C语言部分一些可能被问到的基础问题猜测

    • 说一说extern关键字的作用

    • 说一说static关键字的作用(static难点在于被static 修饰的变量/函数只在本文件有效,出了本文件无法被访问,多文件时需注意)

被问到的超纲的知识:

异步 典型例子 DMA 与之关联又极易混淆的知识点:同步IO和异步IO

大公司和小公司面试比较,区别在哪

小公司:没有那么多时间去培养一个人,更加注重一上手就能干活,就能创造价值的人,小公司面试时更加注重问项目经历,我第一场面试一小时,问项目问了50min

大公司:对于校招和毕业一两年社招人员,尚欠缺开发经验,此时注重的是未来的潜力,大公司甚至愿意给在某一方面欠缺开发建议的小白尝试的机会,面试的过程包括自我介绍 C++基础 项目经历 智力题(5-10min) 算法题(15min左右),不同公司可能不一样 有的算法题也放在后面面试,但大方向一致

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值