ARTS-WEEK6

"ARTS打卡记录"

Posted by Simon on July 2, 2020

“Better code, better life. ”

ARTS打卡第六周

Algorithm

[题目] :https://leetcode-cn.com/problems/remove-duplicate-node-lcci/

[题解]

class Solution {
public:
    ListNode *removeDuplicateNodes(ListNode *head) {
        if (head == nullptr) {
            return nullptr;
        }
        unordered_map<int, int> v;
        v[head->val]++;
        ListNode *cur;
        cur = head;
        while (cur->next) {
            if (v[cur->next->val]) {
                cur->next = cur->next->next;
            } else {
                v[cur->next->val]++;
                cur = cur->next;
            }
        }
        return head;
    }
};

Review

[文章链接] :http://www.wangafu.net/~nickm/libevent-book/Ref6_bufferevent.html

[笔记] :

概念

大多数时候,除了响应事件之外,应用程序还需要执行一定数量的数据缓冲。例如,当我们想要写入数据时,通常的模式是这样的:

  • 把数据放入缓冲区
  • 等待socket可写
  • 写入尽可能多的数据
  • 记录数据写的offset,如果没写完,下次继续写

由于这种模式过于普遍,所以Libevent专门提供了一种机制来做类似的事,于是便有了bufferevent

bufferevent由底层传输(通常是套接字)、读缓冲区和写缓冲区组成。与event不同,event是当fd上有关注的事件发生(通常是可读或者可写)就会调用回调函数,而bufferevent是在读取或写入足够的数据时调用其用户提供的回调。

类型

Libevent有以下几种不同类型的bufferevent

socket-based bufferevents

  • 关心流式套接字(TCP)连接数据读写的bufferevent

asynchronous-IO bufferevents

  • Windows环境下的异步IO,使用IOCP作为底层IO模型

filtering bufferevents

  • 一个bufferevent,在将传入和传出数据传递给底层bufferevent对象之前对其进行处理,例如压缩或转换数据。

paired bufferevents

  • 两个互相传输数据的bufferevent

evbuffers

每一个bufferevent都有一个输入缓冲区和输出缓冲区,它们都是evbuffer类型。当你有数据需要写道bufferevent中是,你实际上写到了它的输出缓冲区中;当你需要从bufferevent中读数据时,你实际上是从它的输入缓冲区中读,注意不要记反了。

callbacks

bufferevent的回调函数也和普通的event不同,它关心一下类型的事件:

BEV_EVENT_READING

对bufferevent进行读取操作时发生事件

BEV_EVENT_WRITING

bufferevent进行写入取操作时发生事件

BEV_EVENT_ERROR

bufferevent的某个操作有异常时,发生事件

BEV_EVENT_TIMEOUT

bufferevent发生超时时,发生时间

BEV_EVENT_EOF

bufferevent得到文件结束标志时发生事件

BEV_EVENT_CONNECTED

当一个连接请求正常相应时发生事件

Tips

动态库版本不对导致的问题

本周主要的工作内容是对接CTP接口,中间遇到了一个问题,我的代码在Windows环境下运行正常,但是到了Linux环境在订阅合约后,没有正常收到订阅合约的响应回调,困扰了我半天的时间。

排查下来发现是在Linux环境下使用的动态库版本不对,由于动态库是一种运行时调用的库,它根据相对地址来寻找需要调用的回调函数的起始地址,所以如果版本不一致,就无法成功回调,显现就是调用订阅合约接口后没有办法正常收到行情。

以后工作中遇到类似问题可以第一时间往这方面想!

RAII思想

Share

Redis数据结构-字典