leetcode: 几个数之和系列
几个数之和系列
几个数之和系列
网上已经有各种资料已经说的很清楚了,18年3月后就关闭了留言功能,政策原因,理解一下。
企业类型公众号的可以考虑通过公众号迁移来开通留言功能,简单来说就是将别人订阅号的留言功能迁移到你的企业类型订阅号上,这样你的号就有留言功能了,迁移的目标账户必须是组织类型的账户如企业类型订阅号。迁移的具体流程为:)
那么到底什么是公众号迁移?
因为公众号不支持直接变更主体,所以公众平台推出帐号迁移功能,通过此功能可将A帐号的粉丝、违规记录、文章素材(可选)、微信号(可选)迁移至B帐号。
温馨提示:例如帐号A迁移至B,那迁移完成,A帐号被回收,B帐号获得A帐号的粉丝等信息继续使用,但主体还是B。
在这个函数中,会调用getsockopt函数,获取socket套接字是否有连接的异常,但是这个getsockopt函数有个连续调用的问题,如果你第二次调用这个函数,之前fd上的错误就被清除了,导致本来这个socket套接字是有问题的,但是检测不出来了,目前这个evhttp_connection_cb的bug就在这里,如果后端服务器根本就没有开启的情况下,该函数中的getsockopt也检测不到异常了,导致其误以为连接上了,流程会一直往下走,会继续去读取后端服务器的body,却发现读不到数据,导致连接503错误,原本应该是getsockopt检测到连接异常后,就响应500的错误的。
可以参考下典型的http会话,服务器响应由一系列文本指令组成, 并使用 CRLF 分隔,它们被划分为三个不同的块:
具体实现如下代码,收到postman发过来的消息后,将收到的消息显示出来,并回复状态ok的响应,这就完成了一个最简单的http服务器模型。
1 | #include <iostream> |
这里写法可以留意一下,将socket建立,绑定监听放在while循环之上,循环里面只要连续的accept就行了,完了之后把accept的fd给close掉,close就是代表主动关闭连接了。
如果你没有下载postman的话,也可以使用curl命令发送请求。
参考链接:https://www.geeksforgeeks.org/tcp-server-client-implementation-in-c/
建立HTTP服务器的流程都是一样的,可以参考TCP Server的建立过程,因为Http是基于Tcp协议的,底层的原理都是相通的,参考了man手册大概介绍一下。
创建socket,此时会返回一个描述符,头文件为#include <sys/socket.h>,函数原型为int socket(int domain, int type, int protocol);,domain参数指明通信将在哪个通信族发生,一般选PF_INET即Iternet版本4协议,socket参数指明通信的类型,可选择SOCK_STREAM/SOCK_DGRAM/SOCK_RAW,SOCK_STREAM类型提供基于序列的,可靠的,双向连接的字节流,可以支持带外数据传输机制,指的是TCP。 SOCK_DGRAM套接字支持数据报(无连接,不可靠的最大固定长度(通常很小)的消息),指的是UDP。 SOCK_RAW套接字提供对内部网络协议和接口的访问,仅超级用户可用。protocal协议指明与套接字使用的特定的协议,一般填0即可。
SOCK_STREAM类型的套接字是全双工字节流,类似于管道。 流套接字必须处于连接状态,然后才能在其上发送或接收任何数据。 通过connect或connectx调用创建与另一个套接字的连接。 连接后,可以使用read和write调用或send和recv调用的某些变型函数传输数据。 当会话已完成时,可以执行close。 带外数据也可以按照send中的说明进行发送,也可以按照recv中的说明进行接收。
如果发生错误,则返回-1,否则返回值是引用套接字的描述符。
所以可以这么写:
1 | // socket create and verification |
参考文章:
https://www.geeksforgeeks.org/tcp-3-way-handshake-process/
https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml
传输控制协议中的TCP三向握手(也称为TCP握手;三消息握手和/或SYN-SYN-ACK)是TCP通过基于Internet协议的网络建立TCP / IP连接的方法。 TCP的三向握手技术通常称为“ SYN-SYN-ACK”(或更准确地说是SYN,SYN-ACK,ACK),因为TCP传输了三种消息来协商和启动两台计算机之间的TCP会话。 TCP握手机制经过设计,因此,尝试进行通信的两台计算机可以在传输SSH和HTTP Web浏览器请求之类的数据之前,协商网络TCP套接字连接的参数。
这也可以看作是建立TCP连接的一种方式。 在进入细节之前,让我们看一些基础知识。 TCP代表传输控制协议,该协议表示它做了一些事情以可靠的方式控制数据的传输。
互联网上设备之间的通信过程根据当前的TCP/IP套件模型(OSI参考模型的精简版)进行。 应用程序层是TCP/IP模型的顶层堆栈,在该层中,网络引用的应用程序(如客户端上的Web浏览器)与服务器建立连接。 信息从应用程序层传输到传输层,在这里我们的主题成为现实。 该层的两个重要协议是TCP,UDP(用户数据报协议),而TCP在其中很普遍(因为它为建立的连接提供了可靠性)。 但是,您可以在查询DNS服务器中找到UDP的应用程序,以获取与该网站使用的域名的二进制等效项。
TCP通过称为“带重传的肯定确认”(PAR)的方式提供可靠的通信。 传输层的协议数据单元(PDU)称为段。 现在,使用PAR的设备重新发送数据单元,直到它收到确认为止。 如果在接收器端接收的数据单元已损坏(它使用用于错误检测的传输层的校验和功能检查数据),则接收器将丢弃该段。 因此,发送方必须重新发送未收到肯定确认的数据单元。 通过上述机制,您可以实现在发送方(客户端)和接收方(服务器)之间交换三个段,以建立可靠的TCP连接。 让我们研究一下这种机制是如何工作的:
libevent怎么实现https服务器?
动态规划是一种解决问题的算法策略,它通常用于解决涉及最优化问题的情况,比如找到最短路径、最大价值等等。动态规划算法的核心思想是将一个大问题分解成一系列小问题,并记住已经解决的小问题的答案,以避免重复计算。这种方法有助于提高计算效率。
动态规划的一般步骤如下:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。