C/C++编程刷题分享—常见的经典面试题一

 ✅作者简介:嵌入式领域新星创作者,博客专家
 ✨个人主页:咸鱼弟
 🔥系列专栏:剑指offer专栏

目录

题干1:请你说说 HTTP 和 HTTPS 的区别

1.得分点

2.标准回答

题干2:简述一下 C++ 中的多态

1.得分点

2,标准回答

3.加分回答

题干3:简述一下什么是面向对象

1.得分点

2.标准回答

3.加分回答


题干1:请你说说 HTTP 和 HTTPS 的区别

解题思路

1.得分点

协议、连接方式、耗时、端口、安全性皆不同

2.标准回答

        由于HTTP简单快速的特性,当客户端向服务器端请求数据的时候,只需要传送请求方法和路径就可以取到结果,基于TCP,默认端口号为80,耗时可以简略计算为1RTT,传递的数据全部是明文传输,几乎没有安全性。

         HTTPS是基于TLS的,而TLS又基于TCP,当客户端向服务器端请求数据的时候,服务器大概率会将客户端重定向到该服务器的443端口,进行新的TCP连接,此时服务器会返回一个证书文件,而不是响应报文体。此时客户端验证证书文件紧接创建对称密钥,之后重新和服务器建立TLS连接,当服务器返回ACK确认之后,连接正式建立,此时上方整个过程耗时为3RTT,并且之后和服务器的通信数据都是通过对称密钥加密过的,几乎无法破解。

        HTTP和HTTPS的不同点总结如下: - HTTP是基于TCP的,而HTTPS是基于TLS的 - HTTP的往返时间为1RTT,而HTTPS的往返时间为3RTT - HTTP只需要创建一次TCP连接,而HTTPS需要创建两次TCP连接 - HTTP的默认端口号为80,而HTTPS的默认端口号为443 - HTTP的安全性很差,而HTTPS的安全性很强 加分回答 HTTPS虽然在安全方面有很大的优势,但是缺点也很明显,如下: - HTTPS握手阶段耗费时间,几乎是HTTP的数倍,会延长页面的首次绘制时间和增加耗电 - HTTPS的效率没有HTTP高,如果部分数据内容实际上并不需要加密,会平白浪费计算机资源 - HTTPS的证书需要购买,功能越强大的证书价格更高 - HTTPS的加密并不能阻止某些网络攻击,如黑客攻击、拒绝服务攻击等

题干2:简述一下 C++ 中的多态

解题思路

1.得分点

静态多态、动态多态、多态的实现原理、虚函数、虚函数表

2,标准回答

在现实生活中,多态是同一个事物在不同场景下的多种形态。

在面向对象中,多态是指通过基类的指针或者引用,在运行时动态调用实际绑定对象函数的行为,与之相对应的编译时绑定函数称为静态绑定。

所以多态分为静态多态和动态多态。

1. 静态多态 :静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数就调用,没有的话就会发出警告或者报错。静态多态有函数重载、运算符重载、泛型编程等。

2. 动态多态: 动态多态是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。当父类指针(引用)指向 父类对象时,就调用父类中定义的虚函数;即当父类指针(引用)指向 子类对象时,就调用子类中定义的虚函数。

3.加分回答

1. 动态多态行为的表现效果为:同样的调用语句在实际运行时有多种不同的表现形态。

2. 实现动态多态的条件: - 要有继承关系 - 要有虚函数重写(被 virtual 声明的函数叫虚函数) - 要有父类指针(父类引用)指向子类对象

3. 动态多态的实现原理 当类中声明虚函数时,编译器会在类中生成一个虚函数表,虚函数表是一个存储类虚函数指针的数据结构, 虚函数表是由编译器自动生成与维护的。virtual 成员函数会被编译器放入虚函数表中,存在虚函数时,每个对象中都有一个指向虚函数表的指针(vptr 指针)。在多态调用时, vptr 指针就会根据这个对象在对应类的虚函数表中查找被调用的函数,从而找到函数的入口地址。

题干3:简述一下什么是面向对象

解题思路

1.得分点

面向过程的思想、面向对象的思想、面向对象三大特征:封装、继承、多态

2.标准回答

面向对象思想是基于面向过程思想的,要说面向对象思想,先说说面向过程思想。

1. 面向过程思想 完成一个需求的步骤:首先是搞清楚要做什么,然后再分析怎么做,最后再通过代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,从而完成需求。在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。 面向过程编程,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能函数相互调用,完成需求。

2. 面向对象思想 面向对象的思想是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,把客观世界中的实体抽象为问题域中的对象。面向对象以对象为核心,该思想认为程序由一系列对象组成。 面向对象思想的特点: - 是一种更符合人类思维习惯的思想 - 可以将复杂的问题简单化 - 将我们从执行者变成了指挥者

3. 面向对象的三大特征:封装、继承、多态 - 封装:将事物属性和行为封装到一起,也就是 C++ 中的类,便于管理,提高代码的复用性。事物的属性和行为分别对应类中的成员变量和成员方法。 -继承:继承使类与类之间产生关系,能够提高代码的复用性以及可维护性。

- 多态:多态意味着调用成员函数时,会根据调用方法的对象的类型来执行不同的函数。

3.加分回答

面向过程和面向对象解决问题举例:以洗衣服为例。 1. 面向过程:接水到盆中 —— 放入衣服 —— 加入洗衣粉 —— 浸泡 —— 搓衣服 —— 过水 —— 拧干 —— 晾干 2. 面向对象:将衣服放入洗衣机 —— 加入洗衣粉 —— 开启 —— 晾干 通过例子可以发现面向对象的方式解决问题更加简单一些,但是面向对象还是基于面向过程的。

本次就分享到这,预祝大家面试成功! 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值