来呀,不服抓个包~~


  • 首页

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 公益404

  • 搜索

LeetCode61-70

发表于 2019-08-28 | 更新于: 2019-08-28 | 分类于 LeetCode , LeetCode61-70 | | 阅读次数:
字数统计: 1.3k 字 | 阅读时长 ≈ 7 分钟

61、旋转链表

模拟题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
int len = 0;
for(struct ListNode *ptr = head; ptr; ptr=ptr->next){
len++;
if(ptr->next==NULL){
ptr->next = head;
break;
}
}
if(len==0)
return NULL;
k %= len;
for(int i=1; i<=len-k; i++)
head = head->next;
struct ListNode *ans = head;
for(int i=1; i<len; i++)
head = head->next;
head->next = NULL;
return ans;
}
};
阅读全文 »

LeetCode51-60

发表于 2019-08-28 | 更新于: 2019-08-28 | 分类于 LeetCode , LeetCode51-60 | | 阅读次数:
字数统计: 1.3k 字 | 阅读时长 ≈ 7 分钟

51、N皇后

回溯法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public:
int record[100];
bool check(int n, int step){
for(int i=1; i<step; i++)
if(record[i]==record[step] || fabs(i-step)==fabs(record[i]-record[step]))
return false;
return true;
}
void DFS(vector<vector<string>> &ans, int n, int step){
if(step>n){
vector<string> cur_ans(n,string(n,'.'));
for(int i=1; i<=n; i++)
cur_ans[i-1][record[i]-1] = 'Q';
ans.push_back(cur_ans);
return ;
}
for(int i=1; i<=n; i++){
record[step] = i;
if(check(n, step))
DFS(ans, n, step+1);
}
}
vector<vector<string>> solveNQueens(int n) {
memset(record, 0, sizeof(record));
vector<vector<string>> ans;
for(int i=1; i<=n; i++){
record[1] = i;
DFS(ans, n, 2);
}
return ans;
}
};
阅读全文 »

加密流量测量和分析

发表于 2019-07-07 | 更新于: 2019-08-28 | 分类于 笔记 | | 阅读次数:
字数统计: 4.2k 字 | 阅读时长 ≈ 15 分钟
一、加密与非加密流量识别

1、利用 信息熵 的方法对加密流量进行识别。

对不同类型的文件,如文本、图片、压缩文件、加密文件等的前 1KB 数据的熵进行计算分析,可以发现文本文件的熵处于较低水平,压缩文件和加密文件的熵处于较高的水平,且两者较难区分。

多元组熵的定义:

(1)n元字符组集合指以大小为 n 的滑动窗口对报文序列 P 进行切割后得到的字符串 $s_i (1 \le i \le L-n+1)$ 的集合,L 表示分析报文序列以 字节 为单位的长度:
$$
S_n = \lbrace s_1, s_2, …, s_{L-n+1} \rbrace
$$
如 “data.dat” 对应的二元字符组集合为 $S_2 = \lbrace da, at, ta, a., .d, da, at \rbrace​$。

阅读全文 »

HTTP2协议解析及抓包分析

发表于 2019-07-05 | 更新于: 2019-07-05 | 分类于 笔记 | | 阅读次数:
字数统计: 1.7k 字 | 阅读时长 ≈ 6 分钟

一、HTTP2协议简介

1、HTTP2的帧格式

HTTP2的所有帧都是由一个固定的9字节头部(payload之前)和一个指定长度的负载(payload)组成,如下图所示:

其中,Stream Identifier用作流控制,用31位无符号整数表示。客户端建立的sid必须为奇数,服务端建立的sid必须为偶数,值(0x0)保留给与整个连接相关联的帧(连接控制消息),而不是单个流。

Frame Payload是主体内容,有帧类型决定,HTTP2一共有10种类型的帧:

阅读全文 »

IPSec VPN搭建及协议解析

发表于 2019-07-02 | 更新于: 2019-07-03 | 分类于 笔记 | | 阅读次数:
字数统计: 2.5k 字 | 阅读时长 ≈ 8 分钟

一、IPSec协议简介

IPSec是IETF制定的为保证在Internet上传送数据的安全保密性能的三层隧道加密协议。IPSec是应用于IP层上网络数据安全的一整套体系结构,他包括报文首部认证协议( Authentication Header, AH)、封装安全载荷协议(Encapsulating Security Payload, ESP)、互联网间密钥交换协议(Internet Key Exchange, IKE) 和一些用于网络认证及加密的算法等。IPSec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、私有性和真实性,以及如何加密数据包。

IPSec有传输(transport)和隧道(tunnel)两种工作方式,其中,传输模式适用于主机之间建立IPSec安全传输,隧道模式更适合网关之间的通信,常用来实现虚拟专用网VPN。

二、IPSec-VPN搭建

详细教程请参考:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md

以 Ubuntu 16.04为例,首先执行:

1
wget https://git.io/vpnsetup -O vpnsetup.sh

之后,在vpnsetup.sh文件中,设置YOUR_IPSEC_PSK, YOUR_USERNAME 和 YOUR_PASSWORD三个字段,如下图:

阅读全文 »

LeetCode41-50

发表于 2019-05-09 | 更新于: 2019-08-28 | 分类于 LeetCode , LeetCode41-50 | | 阅读次数:
字数统计: 1.4k 字 | 阅读时长 ≈ 7 分钟

41、缺失的第一个正数

数组中元素互换,让元素大小与下标相对应。数值小于0或者大于数组长度的元素值,直接略过,之后遍历整个数组,第一次出现数值和下标不相等的位置就是ans,如果全部满足,返回数组长度即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
nums.push_back(-1); // 添加一个无用元素,方便后续操作
for(int i=0; i<nums.size(); i++){
if( nums[i]<0 || nums[i]>=nums.size() || nums[nums[i]]==nums[i] )
continue;
swap(nums[nums[i]], nums[i]);
i--;
}
for(int i=1; i<nums.size(); i++){ // i 从 1 开始,保证正整数
if( nums[i]!=i )
return i;
}
return nums.size();
}
};
阅读全文 »

LeetCode31-40

发表于 2019-05-09 | 更新于: 2019-05-09 | 分类于 LeetCode , LeetCode31-40 | | 阅读次数:
字数统计: 1.3k 字 | 阅读时长 ≈ 6 分钟

31、下一个排列

偷个懒,直接使用库函数next_permutation。

1
2
3
4
5
6
class Solution {
public:
void nextPermutation(vector<int>& nums) {
next_permutation(nums.begin(), nums.end());
}
};

32、最长有效括号

用栈进行括号匹配消除,在消除过程中记录最大长度值。

阅读全文 »

双仓库部署实现博客访问加速

发表于 2019-04-22 | 更新于: 2019-04-22 | 分类于 笔记 | | 阅读次数:
字数统计: 685 字 | 阅读时长 ≈ 2 分钟

博客停更了将近半年的时间,然后近期闲着打算接着写写记录下日常学习过程,其中被同学吐槽,你这访问太慢了啊,页面好大会转不出来,怎么回事小老弟?github pages国内访问的话,速度还是很慢的,想要更好的提升访问速度,得将博客迁移到国内才行,幸运的是,国内的coding.net也提供pages服务。下面,我们主要讲解如何实现个人博客的双仓库部署。

1、注册 coding 账号,创建一个和注册名一样的仓库,部署公钥,此处部署的公钥一定要和github pages上的公钥一致。运行 ssh -T git@git.coding.net 指令,测试公钥是否添加成功,如下图所示,代表成功添加了公钥。

2、deploy部署配置,更改本地 根目录下的_config.yml文件,如下图,这样才可以实现两个仓库的同步推送。

阅读全文 »

Ubuntu个性美化

发表于 2019-04-20 | 更新于: 2019-04-20 | 分类于 笔记 | | 阅读次数:
字数统计: 625 字 | 阅读时长 ≈ 2 分钟

1、安装VMware Tools

在VMware中安装虚拟机后,记得安装VMware Tools。在虚拟机中找到名为VMwareTools…tar.gz的压缩包(一般在media文件夹中),复制到某个文件夹中后执行:tar -xvzf VMwareTools…tar.gz进行解压。之后会看到一个 ./vmware-install.pl的执行程序,执行后安装,一路默认即可,安装完成后,重启虚拟机。

2、卸载自带软件

1
2
3
dpkg --list   # 查看自带已安装程序
sudo apt-get --purge remove <programname> # 卸载程序和所有配置文件
sudo apt-get remove <programname> # 只卸载程序

当然也可以在软件管理中进行查看已安装软件,卸载软件等操作。

3、GTK,GTK+,Qt, KDE,GNOME, Unity的区别与联系

阅读全文 »

Ubuntu官方源和PPA源简介

发表于 2019-04-20 | 更新于: 2019-04-20 | 分类于 笔记 | | 阅读次数:
字数统计: 684 字 | 阅读时长 ≈ 2 分钟

在ubuntu中,软件的安装主要有3种方式:

  • 通过apt包管理工具从官方软件源安装

  • 通过deb格式的软件包安装,以安装搜狗输入法为例:

    1
    2
    3
    4
    下载 sogou.deb
    sudo dpkg -i sogou.deb #出现安装不成功,需要依赖
    sudo apt-get install -f #安装依赖
    sudo dpkg -i sogou.deb
  • 使用软件的源码手动编译安装

下面我们主要介绍第一种安装方式,即apt命令从软件源安装。软件源分为 Ubuntu官方软件源 和 PPA软件源 两种。

阅读全文 »
1234
大宝哥spring

大宝哥spring

机会总是留给有准备的人

39 日志
17 分类
4 标签
RSS
E-Mail Skype
近期文章
  • cycleGAN实现--tensorflow2.0
  • Pix2Pix模型实现--tensorflow2.0
  • cDCGAN生成指定手写数字--tensorflow2.0
  • DCGAN手写数字生成--tensorflow2.0
  • v2ray+websocket+TLS通过cloudflare转发防IP被ban
© 2018 — 2020 大宝哥spring | 本站共计: 62.6k 字
你是本站的第 位访问者 本站总访问量 次
0%