牛客cpp工程师技术面

1.简述一下智能指针

智能指针用于内存管理,对每一块分配的内存会有一个值去记录它被指向个个数,如果等于0,就释放掉这块内存。

链接:https://www.nowcoder.com/questionTerminal/668a703b28014f90b562641abb88a378?from=2021dituibook
来源:牛客网

标准回答

智能指针解决的问题

如果在程序中使用 new 从堆(自由存储区)分配内存,等到不再需要时,应使用 delete 将其释放,如果忘记释放,则会产生内存泄露。C++ 引入了智能指针 auto_ptr(C++98), 以帮助自动完成这个过程。智能指针是行为类似于指针的类对象。

有哪些智能指针

C++ 中有 4 种智能指针:auto_ptr、unique_ptr、shared_ptr、weak_ptr。其中 auto_ptr 在 C++11 中被弃用,weak_ptr 需要配合 shared_ptr 使用,并不能算是真正的智能指针。

智能指针实现原理

智能指针解决问题的思想:将常规指针进行包装,当智能指针对象过期时,让它的析构函数对常规指针进行内存释放。

auto_ptr(C++98的方案,C++11已经废弃):采用所有权模式,对于特定的对象,只能有一个智能指针可拥有它,这样只有拥有对象的智能指针的析构函数会删除该对象。然后,让赋值操作转让所有权。

unique_ptr(替代 auto_ptr):也是采用所有权模式,实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。

shared_ptr:采用引用计数实现共享式拥有概念。多个智能指针可以指向相同对象,该对象和其相关资源会在最后一个引用被销毁时候释放。它使用引用计数来表明资源被几个指针共享。例如,赋值时,计数将加 1,而指针过期时,计数将减 1。仅当最后一个指针过期时,才调用 delete。

weak_ptr:该类型指针通常不单独使用(没有实际用处),只能和 shared_ptr 类型指针搭配使用。weak_ptr 类型指针并不会影响所指堆内存空间的引用计数,可以用来解决循环引用问题。

加分回答

如何选择智能指针:

如果程序要使用多个指向同一个对象的指针,应该选择 shared_ptr;

如果程序不需要多个指向同一个对象的指针,则可以使用 unique_ptr;

如果使用 new [] 分配内存,应该选择 unique_ptr;

如果函数使用 new 分配内存,并返回指向该内存的指针,将其返回类型声明为 unique_ptr 是不错的选择。

2.内存对齐

https://blog.csdn.net/qq_38289815/article/details/105746832

3.tcp udp协议区别

主要是前者面向连接,后者不面向连接,tcp保证传输可靠性,udp只是尽可能交付
这样导致双方应用场景以及报文大小都有区别,tcp需要保证可靠,所以报文头部长20,而udp只有8,tcp一般用在需要可靠连接的领域,比如http,udp一般应用于及时性比较高,允许丢帧的场景,如视频游戏等,常见的一般都是udp

TCP协议的主要特点

(1)TCP是面向连接的运输层协议;

(2)每一条TCP连接只能有两个端点(即两个套接字),只能是点对点的;

(3)TCP提供可靠的传输服务。传送的数据无差错、不丢失、不重复、按序到达;

(4)TCP提供全双工通信。允许通信双方的应用进程在任何时候都可以发送数据,因为两端都设有发送缓存和接受缓存;

(5)面向字节流。虽然应用程序与TCP交互是一次一个大小不等的数据块,但TCP把这些数据看成一连串无结构的字节流,它不保证接收方收到的数据块和发送方发送的数据块具有对应大小关系,例如,发送方应用程序交给发送方的TCP10个数据块,但就受访的TCP可能只用了4个数据块久保收到的字节流交付给上层的应用程序,但字节流完全一样。

TCP的可靠性原理

可靠传输有如下两个特点:

a.传输信道无差错,保证传输数据正确;

b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;

(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。

(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。

(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。

UDP协议特点

(1)UDP是无连接的传输层协议;

(2)UDP使用尽最大努力交付,不保证可靠交付;

(3)UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界;

(4)UDP没有拥塞控制,因此即使网络出现拥塞也不会降低发送速率;

(5)UDP支持一对一 一对多 多对多的交互通信;

(6)UDP的首部开销小,只有8字节.

TCP和UDP的区别

(1)TCP是可靠传输,UDP是不可靠传输;

(2)TCP面向连接,UDP无连接;

(3)TCP传输数据有序,UDP不保证数据的有序性;

(4)TCP不保存数据边界,UDP保留数据边界;

(5)TCP传输速度相对UDP较慢;

(6)TCP有流量控制和拥塞控制,UDP没有;

(7)TCP是重量级协议,UDP是轻量级协议;

(8)TCP首部较长20字节,UDP首部较短8字节;

基于TCP和UDP的常用协议

HTTP、HTTPS、FTP、TELNET、SMTP(简单邮件传输协议)协议基于可靠的TCP协议。TFTP、DNS、DHCP、TFTP、SNMP(简单网络管理协议)、RIP基于不可靠的UDP协议

常见协议的端口号

FTP的20、21端口,21端口用来侦听用户的连接请求,而20端口用来传送用户的文件数据。

TELNET 23

SMTP 25

DNS 53

TFTP 69

HTTP 80

SNMP的161、162端口。SNMP的161端口用于SNMP管理进程获取SNMP代理的数据,而162端口用于SNMP代理主动向SNMP管理进程发送数据
————————————————
版权声明:本文为CSDN博主「lzj2504476514」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lzj2504476514/article/details/81454754

4.

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: , 字符串中包括大写英文字母、小写英文字母、空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值