一文梳理2017阿里研发岗笔试(1)知识点

本文探讨了内联函数的最佳实践,包括长度限制、析构函数处理及编译器行为,同时对比了不同排序算法的时间复杂度,如冒泡排序在特定条件下的优化表现,并分析了TCP/IP连接建立过程与系统调用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

inline函数:

  1. 一个较为合理的经验准则是, 不要内联超过 10 行的函数,较大则不会成为内联函数,谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用。
  2. 有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要, 比如虚函数和递归函数就不会被正常内联.
  3. 内联函数的定义最好放在头文件中, 编译器才能在调用点内联展开定义,当然内联函数定义也可以放在源文件中,但此时只有定义的那个源文件可以用它,而且必须为每个源文件拷贝一份定义定义在类声明之中的成员函数将自动地成为内联函数。

排序算法及其复杂度比较:

https://www.cnblogs.com/minkaihui/p/4077888.html

需要注意的是,像冒泡排序,在原数组本身有序的情况下,不需要交换,所以时间复杂度是O(n),具体实现如下:

void bubblesort()
	{
		if (len <= 1) return;
		int i, j;
		for (i = 0; i < len - 1; i++)
		{
			bool isswap = false;
			for (j = 0; j < len - i - 1; j++)
			{
				if (a[j] > a[j + 1])
				{
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
					isswap = true;
				}
			}
			if (!isswap) return;
		}
	}

TCP/IP建立连接:

链接:https://www.nowcoder.com/questionTerminal/645abac8091548898054accd89083ec7
    TCP建立连接时,首先客户端和服务器处于close状态。然后客户端发送SYN同步位,此时客户端处于SYN-SEND状态,服务器处于lISTEN状态,当服务器收到SYN以后,向客户端发送同步位SYN和确认码ACK,然后服务器变为SYN-RCVD,客户端收到服务器发来的SYN和ACK后,客户端的状态变成ESTABLISHED(已建立连接),客户端再向服务器发送ACK确认码,服务器接收到以后也变成ESTABLISHED。然后服务器客户端开始数据传输

关于系统调用:

系统调用通过中断完成,这一过程中系统由用户态变为内核态。 在内核态下,系统可以无限制的访问内核资源。

select和epoll效率差异:

链接:https://www.nowcoder.com/questionTerminal/c162e1e930a34ea3ad6c8863ccff0fa2?pos=50&orderByHotValue=0
来源:牛客网
 

select 和 epoll效率差异的原因:select采用轮询方式处理连接,epoll是触发式处理连接。

Select:

1.Socket数量限制:该限制可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.

2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍。

 

Epoll

1.Socket数量无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限制(默认4k)。

2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询。

但当所有的Socket都活跃的时候,所有的callback都被唤醒,会导致资源的竞争。既然都是要处理所有的Socket,

那么遍历是最简单最有效的实现方式。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江湖无为

感谢你们的鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值