ARTS挑战第六周

1.Algorithm

1.1 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

1.1.1 递归求解

  • 1.对数组的末尾+1
    • 1.1如果是9,该位置为0,剩余元素进入步骤1
    • 1.2如果不是9,该元素+1退出
  • 2.输出
    • 2.1如果首位为0,加一位元素,并且置为1
    • 2.2如果首位不为0,直接输出

找到有规律的点,也就是重复的步骤

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] == 9) {
                digits[i] = 0;
            } else {
                digits[i] += 1;
                break;
            }
        }
        if (digits[0] == 0) {
            digits = new int[digits.length + 1];
            digits[0] = 1;
        }
        return digits;
    }
}

2.Review

3.Tip

3.1 C# Linq之GroupBy()

使用GroupBy后,返回IGrouping<Tey,Source>接口的枚举对象

foreach(var item in igrouping)
{
	item.key //输出分组依赖的内容
	item["HRID"]	//遍历该组中的每条数据
}

4.Share

4.1 三次握手,四次挥手

4.1.1 三次握手

当客户端和服务端都可以接受发送信息时,TCP连接才可以建立。
就像两个人打电话:

客户端 服务端 A B SYC ACK/SYC ACK 你能听见吗?SYC 我能听见(ACK)/你呢?(SYC) 我也能(ACK) 客户端 服务端 A B

【问题1】为什么不是两次握手:

  • 情况一:第二次握手时ACK/和SYC丢失,此时服务端认为连接已经建立,开始发送客户端请求的响应内容,但是客户端还在等待服务端的ACK/SYC,此时就产生了死锁。
  • 情况二:客户端发送的SYC在经过很久以后到达服务端,此时客户端已经停止等待响应了,这个SYC其实已经无效,但是服务端收到后就进入链接状态造成资源浪费

4.1.2 四次挥手

客户端 服务端 C S FIN ACK FIN/ACK ACK FIN 请求关闭 ACK 你关闭吧,但是我还要给你发点东西,你得接收啊 FIN/ACK 我也要关了 ACK 我知道了 客户端 服务端 C S

【问题2】为什么客户端最后还要等待2MSL?
【问题3】为什么建立连接是三次握手,关闭连接确是四次挥手呢?
【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
【问题5】什么是TIME_WAIT状态?

对三次握手通俗的一个解释
面试必备:三次握手与四次挥手
以下两个讲的差不多
TCP的三次握手与四次挥手理解及面试题(很全面)
TCP的三次握手与四次挥手(详解+动图)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值