P&A
protocol & algorithm
丸子叮咚响
日拱一卒,功不唐捐。
展开
-
PB RepeatedField::erase
一 官网说明二 使用auto iter = users->begin();for (; iter != users->end();) { if (s.find(iter->uid()) == s.end()) { iter = users->erase(iter); // iter不递增,利用erase的返回值 } else { ++...原创 2019-07-30 20:20:18 · 2655 阅读 · 0 评论 -
PB协议 初体验
写在前面基于项目需要,初体验PB协议。本文及后续文章的实操均是在window环境,C++语言。文章所述均会依据PB官网,一些语言无关的描述(例如.proto介绍)可供所有平台、语言环境参考。一 什么是PBProtocol buffers are a flexible, efficient, automated mechanism for serializing structured ...原创 2018-11-05 19:42:40 · 2315 阅读 · 0 评论 -
mail imap noop命令
一 文档说明摘自rfc35016.1.2. NOOP CommandArguments: noneResponses: no specific responses for this command (but see below)Result:OK - noop completedBAD - command unknown or arguments inval...原创 2018-09-27 20:15:38 · 1311 阅读 · 0 评论 -
mail smtp data命令
一 背景探测163的发件服务器smtp.163.com,对于流程中的data命令总是报500 bad syntax 错误,后找资料发现,data有格式要求,“end with <CRLF>.<CRLF> ”, 但尝试 “data \r\n.\r\n” 仍然失败。二 telnet流程代码未走通,先通过telnet尝试,流程如下:220 163.com An...原创 2018-08-28 20:04:05 · 3125 阅读 · 0 评论 -
直接插入排序(C++)
实现思路先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。实现升序排列代码void insert_sort(int a[], int n){ // n不合法或只有1个元素就不会排序了 if ( n < 2) { return; } // 遍历待插入元素 for(int i = 1; i < n; ++i){ if (a[i] < a[i-1]){ int j = i -原创 2020-10-30 18:25:41 · 682 阅读 · 0 评论 -
简单选择排序(C++)
#include using namespace std;void print(int a[], int num, int index) {cout << " index = " << index << " : ";for (int i = 0; i < num; ++i) {cout << a[i] << " ";}cout << endl;}/*简单选择排序(Simple Selection Sort)在原创 2020-10-30 23:40:49 · 252 阅读 · 0 评论 -
希尔排序(C++)
#include using namespace std;void print(int a[], int num, int dk, int index) {cout << "dk = " << dk << " index = " << index << " : ";for (int i = 0; i < num; ++i) {cout << a[i] << " ";}cout << endl原创 2020-10-30 23:50:24 · 335 阅读 · 0 评论 -
堆排序(C++)
#include using namespace std;void print(int a[], int num) {for (int i = 0; i < num; ++i) {cout << a[i] << " ";}cout << endl;}/*初始时把要排序的n个数的序列看作是一棵顺序存储的二叉树(一维数组存储二叉树),调整它们的存储序,使之成为一个堆,将堆顶元素输出,得到n 个元素中最小(或最大)的元素,这时堆的根节点的数最小(或者最原创 2020-10-30 23:57:31 · 828 阅读 · 2 评论 -
RC4 加解密问题
问题需要注意RC4连续加解密的状态问题(下述实现中的key的x、y值)。例如CS两端数据交互的加解密场景。官方实现// https://github.com/openssl/openssl/blob/master/crypto/rc4/rc4_enc.c/* * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (t原创 2021-08-23 20:31:47 · 265 阅读 · 0 评论 -
SnowFlake
SnowFlake算法是Twitter所采用的一种算法,目的是在分布式系统中生成全局唯一且趋势递增的ID。一 组成SnowFlake所生成的ID一共分成四部分:1.第一位 占用1bit,其值始终是0,没有实际作用。2.时间戳 占用41bit,精确到毫秒,总共可以容纳约 69 年的时间。3.工作机器id 占用10bit,其中高位5bit是数据中心...原创 2019-12-11 20:12:54 · 237 阅读 · 0 评论 -
校验和算法 Adler-32
一 简介Adler-32是校验和 算法,由Mark Adler于1995年发明,是对Fletcher校验和算法的修改。相比较相同长度的循环冗余校验,它以可靠性换取速度。二 算法通过计算两个16位校验和A和B并将它们的位连接成32位整数来获得Adler-32校验和。A是流中所有字节加上1 的总和,B是每个步骤中A的各个值的总和。在Adler-32运行开始时,A初始化为1,B初始化为0....原创 2018-11-23 17:01:57 · 6168 阅读 · 1 评论 -
BNF范式
一 定义BNF:Backus-Naur Form百度百科以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法。wikia formal grammar for expressing context-free grammars.二 语法1 在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。...原创 2018-11-07 20:12:34 · 2841 阅读 · 0 评论