位运算
位运算12345eg: n的二进制表示中第k位是几1. 先把第k位移到最后一位 n>>k2. 看个位是几 x&11 + 2 => 求n的第k位数字: n >> k & 1
返回n的最后一位:lowbit(n) = n & -n
双指针算法
双指针算法123456789for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作
抓包初体验
Wireshark过滤规则按ip地址过滤想看源ip为xx的包过滤条件中输入:ip.src==源ip地址
自己电脑的ip地址查询:ipconfig /all
想看目标ip为xx的包过滤条件中输入:ip.dst==目标ip地址
想看源或目标ip为xx的包过滤条件中输入:ip.addr==ip地址
按MAC地址过滤想看源MAC为xx的包过滤条件中输入:eth.src==源MAC地址
自己电脑的MAC地址查询:ipconfig /all
想看目标MAC为XX的包过滤条件中输入:eth.dst==目标MAC地址
想看源或目标MAC为xx的包过滤条件中输入:eth.addr==MAC地址
按端口号过滤端口号:表示一台计算机中的特定进程所提供的服务,用来区分相同计算机所提供的不同服务
按照端口号分类:
公认端口:0~1023。它们紧密绑定于一些服务,通常这些端口的通讯明确表明了某种服务的协议,如:80端口对应与HTTP通信,21端口绑定与FTP服务,22端口绑定与ssh服务,25端口绑定于SMTP服务,135端口绑定与RPC(远程过程调用)服务。
注册端口:1024~49151。它们松散的绑定于一 ...
前缀和
前缀和一维前缀和123456789S[0] = 0S[i] = a[0] + a[1] + a[2] + ... + a[i - 1]S[i + 1] = S[i] + a[i]a[l] + ... + a[r] = S[r + 1] - S[l]//原地前缀和for (int i = 1; i < length; i++) { nums[i] += nums[i - 1];}
二维前缀和1234S[i, j] = 二维数组a[i,j]第i行j列格子左上部分所有元素的和S[i, j] = S[i - 1, j] + S[i, j - 1] - S[i - 1, j - 1] + a[i, j]以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]
差分一维差分1给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c
二维差分12给以(x1, y1)为左上角,(x2, y2)为右下角的子 ...
二分
整数二分要根据题目确定边界的等号是否取到
12345678910111213141516171819202122232425262728//check是根据题目定的一个判断方法public static boolean check(int x) { /* ... */}// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:public static int bsearch_1(int l, int r){ while (l < r) { //>>>表示无符号运算 int mid = l + r >>> 1; if (check(mid)) r = mid; // check()判断mid是否满足性质 else l = mid + 1; } return l;}// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:public static in ...
快排和归并浅析
快速排序法
确定分界点:一般为数组最左边,最右边或者中间的元素
调整范围:左段的所有数应该都小于分界点的数,右段的数应该都大于分界点的数
设置两个指针,一个指向数组最左边,一个指向数组最右边。左指针向右移动,直到遇到不小于分界点的数,进而右指针向左移动,直到遇到不大于分界点的数,然后将左右指针指向的数进行交换。交换后,左指针继续向右移动,循环上面的过程,直到左右两指针相遇,此时左右两段应该已经被分好。
递归处理左右两段
123456789101112131415161718192021public static void quickSort(int[] arr, int l, int r) { //当左指针大于等于右指针时返回 if (l >= r) return; //设置分界点,左右指针 int pos = arr[l], i = l - 1, j = r + 1; while (i < j) { //判断左段 while (arr[++i] < pos) {} //判断右段 ...
shell
man chmod 是一个用于查看 chmod 命令手册页的指令。让我为您解释一下这个命令的主要内容:
命令用途:chmod 用于更改文件或目录的权限。
基本语法:
1chmod [选项] 模式 文件...
权限表示方法:
符号模式:使用字母和符号(如 u+x, g-w, o=r 等)
八进制模式:使用数字(如 755, 644 等)
符号模式说明:
u:用户/所有者
g:组
o:其他
a:所有
+:添加权限
-:移除权限
=:设置精确的权限
r:读取权限
w:写入权限
x:执行权限
八进制模式说明:
4:读取权限
2:写入权限
1:执行权限
例如:755 表示 rwxr-xr-x
常用选项:
-R:递归地更改目录及其内容的权限
-v:显示权限更改的详细信息
示例:
chmod u+x file:给文件所有者添加执行权限
chmod 755 file:设置权限为 rwxr-xr-x
chmod -R g+w directory:递归地给目录及其内容添加组写入权限
注意事项:
只有文件所有者或超级用户 ...
计算机网络
计算机网络第一章 计算机网络概述定义计算机网络主要是由一些通用的,可编程的硬件互联而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或者视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
分类
交换方式:电路交换,分组交换,报文交换
使用者:公用网(因特网),专用网(军队,铁路,电力,银行)
传输介质:有线,无线
覆盖范围:广域网(WAN),城域网(MAN),局域网(LAN),个域网(PAN)、
拓朴结构:总线型,星型,环型,网状型
三种数据交换方式电路交换
计算机之间的数据传输是突发式的,当使用电路交换来传送计算机数据时,其线路的传输效率一般都会很低,线路上真正用来传送数据的时间往往不到10%甚至1%,因此计算机通讯通常采用分组交换。
分组交换
优点:
没有建立连接和释放连接的过程
分组传输过程中逐段占用通信链路,有较高的通信线路利用率
交换节点可以为每一个分组独立选择转发路由,使得网络有很好的生存性
缺点:
分组首部带来了额外的传输开销
交换节点存储转发分组会造成一定的时延
无法确保通信时端到端通信资源全部可用,在通 ...
hexo图片插入失败的解决方法
解决方法本人根据hexo官方文档来解决问题。
在博客所在文件夹的目录中找到_config.yml,并将文件中的post_asset_folder选项设置为true来打开。
根据官方文档的介绍,在资源文件管理功能打开以后,hexo将会在每一次通过hexo new title命令创建新文章时自动创建一个与文章同名的文件夹,将所有与文章有关的资源都会被放在这个文件夹中,方便后续的管理。
官方文档提供了两种方法,我这里采用了第二种方法,感兴趣的也可以去官方文档看看第一种方法。下载hexo-renderer-marked插件,这个可以直接在markdown中嵌入图片。
在博客文件夹下打开终端输入
npm install hexo-renderer-marked --save
如果速度很慢,导致无法下载的情况,可以选择配置路径为taobao的免费registry:
npm config set registry https://r*egistry.npm.taobao.org
配置后可通过下面方式来验证时候成功
npm config get registry或者npm info expr ...
git工作流
git工作流git