自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

anlian523的博客

今天不学习,明天变垃圾,后天垃圾分类

  • 博客(268)
  • 资源 (1)
  • 收藏
  • 关注

原创 JUC框架 源码解析系列文章目录 JDK8

前言笔者在接下来这段时间将对JUC框架内的重点内容进行深度解析,由于内容颇多,需要分成多篇文章,所以在这里列一个目录,方便大家翻阅。目录JUC框架的基础是CAS和自旋,而CAS则是利用Unsafe类提供的CAS操作,而原子类则依靠于CAS和自旋。下面几篇文章从源码分析JUC框架内的几个重要的原子类。JUC AtomicInteger源码解析 JDK8JUC AtomicIntegerArray源码解析 JDK8JUC AtomicStampedReference源码解析 JDK8AQS(A

2020-06-07 11:37:05 9099 13

原创 语雀 添加块级模式公式

点击公式,在公式内填入:效果如下:但这种方式的居中对齐,行间距很窄。默认是靠右对齐的。实际是这里是根据每行的来对齐的,这里都放到最左边,所以是靠左对齐的效果。调整的位置,可以达到其他的自定义的对齐效果。...............

2022-06-14 15:26:37 2267 1

原创 Sublime3 设置ctrl+鼠标左键跳转到方法

前提条件安装Package Control安装插件Sublime3的Ctags点击Project ⇒ Add Folder to Project,添加项目文件夹在项目文件夹根目录点击Ctags:Rebuild Tags设置快捷键进入Preferens ⇒ Package Settings ⇒ Ctags ⇒ Mouse Bindings - User把默认的"modifiers":["ctrl","shift"]改成只有"modifiers":["ctrl"]。注意,Preferens

2022-06-09 15:05:10 1005 1

原创 Sublime3 离线安装package control

下载https://packagecontrol.io/installation点击如上红框下载。安装将这个文件放到Sublime/Data/Installed Packages/文件夹下然后按照Preferences > Browse Packages…点击到这个Installed Packages/文件夹里(最好是选中这个下载的文件)重启sublime............

2022-06-09 15:01:50 1078

原创 Windows下 VsCode安装C++ Intellisense以及使用

文章目录安装GNU Global安装C++ Intellisense在文件夹运行gtags查看定义安装GNU Global进入官网https://www.gnu.org/software/global/download.html下载专区下载Windows安装包。下载最新版本的win32安装包,如上图所示。下载下来是一个压缩包,将其解压,如上图。将bin文件夹的路径添加到Path环境变量中去,如上图。安装C++ Intellisense安装好这个vscode的插件,最后记得重启vscod

2022-05-16 17:53:44 5888

原创 VsCode中 如何写markdown文档

插件下载插件介绍Markdown All in One为写作Markdown的语法提供了一些快捷键。Markdown Preview Enhanced为markdown文档提供了预览功能。常用快捷键功能为 ctrl + shift + v,新开一个窗口进行预览。也可以点击这个图标进行分屏预览。Markdown PDF可以将markdown文档转为pdf。在文档空白处右键即可。Paste Image用来复制 粘贴板里的图片到本地目录下。${currentFileDir

2022-05-12 19:47:59 2271

原创 Windows下 使用Python来调用PotPlayer.exe来播放音频

使用cmd如上cmd里直接输入C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe的话,会被空格隔开,导致识别为空格之前的部分。"C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe"cmd里输入如上命令,会打开空白的potplayer。"C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "C:\1.wav""C:\Program File

2021-12-28 18:17:59 5071 1

原创 TCP/IP协议详解卷一 第13章 TCP连接管理 知识点浅析

TCP连接的建立与终止一个TCP连接是由一个4元祖构成的,即两个IP地址,连个端口号。更准确地说,一个TCP连接是由一对端点或套接字构成,其中通信的每一端都由一对(IP地址,端口号)所唯一标识。一个TCP连接通常分为3个阶段:建立连接、数据传输(连接已建立)、关闭连接。下面描述一次TCP连接的建立和关闭过程。连接过程:客户端发送一个SYN报文段(即一个在TCP头部的SYN位字段置位的TCP/IP数据包),并指明自己想要连接的端口号和它的客户端初始序列号(记为ISN©)。服务器接收到客户端发送的S

2021-12-26 22:15:34 2196

原创 VS工程中报错 常量中有换行符

环境window10简体中文,所以系统环境是:GB2312,代码页936。vs工程中没有设置 源字符串集,即没有设置/source-charset,当然也没有设置 /utf-8。(另外,vs工程中,也可以单独对某个文件进行 字符集 设置的。也没有进行这样的设置)工程中大部分的文件都是按照GB2312编码来存储的。问题产生此时工程中添加了一个utf-8编码来存储的文件。文件有一行std::string sss = "廿";然后编译报错:常量中有换行符。问题解决解决方法当然就是把这个特殊文件

2021-12-23 17:02:45 9431 3

原创 TCP/UDP伪头部讲解

前言我们知道IPv4的校验和只覆盖IP协议的头部,它每经过一个路由器都要重新计算IP协议的校验和,因为IPv4有一个TTL字段每经过一个路由器都要减1。而传输层协议(TCP和UDP)的校验和是覆盖它们的头部和数据的。UDP伪头部以UDP的伪头部为例讲解:最后的单个填充字节因为校验和算法是以16bit为单位的,但UDP数据报长度可以是奇数个字节,所以如果整个UDP分组是奇数个字节,那么会虚拟地加上最后一个字节(如上图,最后一个字节),用以保证能有偶数个字节。但这个虚拟的最后这个字节,不会真的被传

2021-11-29 23:52:50 4559

原创 wireshark 抓包ARP分组

从下图的报文数据的结构来看,ARP协议属于是网络层协议,因为它被封装在了以太网帧中(从包封装的角度来讲)。但从功能上来说,ARP是为了获得获取到MAC地址,所以也可以说是属于链路层协议。Who has 192.168.0.1? Tell 192.168.0.101。翻译过来就是,谁是192.168.0.1,请告诉我192.168.0.101。从ARP的字段上看,7e:90:3c:47:04:0a这个设备和192.168.0.101绑定在了一起,它想知道192.168.0.1的MAC地址是什么,所以Ta

2021-11-23 22:38:52 8757 1

原创 校验和算法原理

读者需要先理解反码数的加法,它和正常数(即补码)的加法不一样。它会对错误式子的结果加1,这是一种修正操作。

2021-11-22 23:23:17 2392

原创 深入理解 原码,反码,补码——证明补码等于反码加1

负数的补码等于反码+1。(这只是一种算补码的方式)负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。

2021-11-22 21:37:51 8647 9

原创 draw.io 表格添加行列

基本操作如上图,点击生成如上表格单击表格,会出现。依次是:左侧插入列。如果选中的是整个表格,则在最左侧添加。如果选中的是某个单元格,则在这个单元格所在列的左侧,添加列。右侧插入列。删除列。如果选中的是某个单元格,则删除这个单元格所在列。如果选中的是整个表格,则删除最右,怀疑原因是从左到右,所以删右。左侧插入行。右侧插入行。删除行。如果选中的是整个表格,则删除最下,怀疑原因是从上到下,所以删下。如何选中第一次单击表格,则选中整个表格。选中整个表格的基础上,再单击某个单元格

2021-11-21 19:49:59 12538

原创 计算机网络自顶向下.6e 第4章 网络层 知识点浅析

前言与应用层和运输层不同的是,在网络中的每一台路由器或主机中都有一个网络层部分。当然,如上图,如果有了网络层,那也必然会有下面的数据链路层和物理层。所以,路由器不会运行 应用层、运输层协议。概述转发和路由选择网络层的作用从表面上很简单,就是把分组从一台发送主机(电脑或路由器)移动到一台接收主机。为此,需要两种功能:转发(forwarding)。当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适合的输出链路上去。这是一个路由器的本地动作。路由选择(routing)。当一个分组从发

2021-11-17 21:25:01 1159

原创 TCP报文段的数据长度是如何计算得到的

IP的总长度 - IP的头部长度- TCP的头部长度 = TCP的Data的长度

2021-10-27 01:06:27 20031 6

原创 计算机网络 对Reno算法的优化——NewReno算法

实例分析Reno和NewReno我们假设当前处于拥塞避免状态。如下图,[0-11]的这个窗口内的12个数据包从发送方发送。不过1、4数据包还没到达接收方就丢失了。一般情况下,发送方发送了seq=0,len=1的数据包后,接收方回复的ACK包为ack=1,代表接收方接下来期待的是序号seq从1的数据包。但本节例子为了简便表示,发送方发送了Data[0]后,接收方回复的是ACK[0],但代表的同样是 接收方接下来期待的是Data[1]以及以后的数据。Reno的不足之处收到的第一个ACK[0.

2021-10-22 01:02:46 1650 2

原创 浅析——为什么UTF-16需要大端小端,而UTF-8不需要

由于UTF-16的设计,直接给我们两个字节,我们并不能知道哪个字节是数据高位、哪个字节是数据低位。正如同上面的例子一样,4F既能作为高位,也能作为低位。

2021-10-15 00:07:07 2106 3

原创 Visual Studio 2019 常用快捷键

Shift+Alt+. 选中下一个相同文本Shift+Alt+; 选择所有相同文本Shift+Alt+/ 跳过下一个相同文本Shift+Alt+, 移除最后一个相同文本

2021-10-14 16:24:17 526

原创 Ubuntu16 通过gdebi安装搜狗输入法

环境Ubuntu16.04 LTS已安装好了gdebi。去搜狗输入法官网下载了搜狗输入法的deb包(我的是sogoupinyin_2.4.0.3469_amd64.deb)。输入法系统选择需要选择为fcitx,一般默认就是这个了。安装过程右键单击搜狗输入法deb包,使用gdebi打开。点击Install Package。点击安装后,出现上图。然后按照提示在终端执行sudo apt-get install -f。此时再通过gdebi右键,发现gdebi显示为already in

2021-09-28 11:02:50 252

原创 新版VSCode 1.60.0版 解决“无法将XXXX项识别为 cmdlet、函数、脚本文件或可运行程序的名称”的问题

前几天VSCode自动更新了,然后插件Task Explorer里面的任务就无法执行了。看了一下,发现了原因:以前我在user配置里有:{ "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe" //这条已经失效了}然后报错则是提示:The terminal process “C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe -C

2021-09-06 17:55:05 10579

原创 计算机网络 理解拥塞控制

TCP的流量控制服务完成了对发送方发送速率的调节——当TCP通信的接收方的接收速率无法匹配发送速率时,发送方会降低发送速率。但流量控制没有考虑到整个网络中的情况——即使路由器能够存储一些数据,但若源源不断的数据到达速率高于路由器的发出速率,任何容量的路由器都会溢出。路由器因无法处理高速率到达的流量而被迫丢弃数据的现象被称为——拥塞。从流量控制服务可知,针对于丢包情况,TCP采取的首要机制是重传,包括超时重传和快速重传。但如果网络已经处于了拥塞状态,你再进行重传,会导致同一时间段内网络传输路径上需要

2021-08-25 22:26:24 1497

原创 计算机网络 理解流量控制与SACK机制

如果应用进程读取数据时相对缓慢,而发送方发送得太多、太快,发送的数据就会很容易地使得接收缓存溢出。所以TCP为它的应用进程提供了流量控制服务(flow-control service)以消除接收缓存溢出的可能性。流量控制实际上是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。

2021-08-18 22:09:44 1545

原创 为什么TCP三次握手的时候ACK=Seq+1

简而言之,接收方反馈的ACK之所以加1,是因为发送方包含了SYN标志位或FIN标志位。也就是说,只要发送方包含了 SYN标志位或FIN标志位,即使没有包含数据,接收方也得认为 发送方消耗掉了一个序号。另外,带有 SYN标志位或FIN标志位的报文段(在三次握手和四次挥手中),也是不允许携带数据的。

2021-08-14 19:42:50 2771

原创 Beyond Compare 3 下一个差异段/向下搜索箭头 找不到了

如上红框内这个工具如果找不到了,通过勾选下图的“搜索”就能恢复。

2021-08-11 19:42:36 597

原创 Adobe Audition提示 音频输入的采样率与输出设备不匹配——问题解决

在Audition中新建音轨时,也确实是按照24位,44100Hz的选项来新建的,但在record的时候还是出现错误提示。在 编辑==>首选项==>音频硬件 中进行设置:将输入和输出都改为 声卡的输入输出。

2021-06-14 17:30:20 14183 1

原创 Python3 读取、新建、追加写入Excel文件

直接安装Anaconda,它会自带xlrd模块,和openpyxl模块。我是用的是openpyxl模块,这个模块写入excel的好处是它不会改变原有excel的样式(最开始我用的是xlwt和xlutils,但是会改变原有样式)。

2021-04-15 21:03:09 3088 2

原创 计算机网络 可靠数据传输原理——从rdt协议到GBN到SR

TCP处于运输层中,虽然下层协议——网络层协议是不可靠的,但TCP必须为它的上层提供一种可靠数据传输协议(reliable data transfer protocol)。这种协议提供的服务为:数据可以通过一条可靠的信道进行传输。借助于可靠信道,传输数据比特就不会受到损坏或丢失,而且所有数据都是按照其发送顺序交付给接受方。

2021-02-28 16:32:44 4886 4

原创 VSCode复制代码时去掉样式/语法高亮/代码高亮/黑色背景

将图中位置去掉勾即可。在settings.json文件是这样的,没有这项的话默认是true的:{ something , "editor.copyWithSyntaxHighlighting": false}

2021-02-04 10:39:12 13630 3

原创 你真的会写二分查找吗——变种二分查找

其实我已经写过一篇关于变种二分查找的博客了,但最近刷题时发现之前对变种二分查找的理解不够深刻,而且相比之前博客的实现,本文有了另一种不同的实现,虽然只是具体细节不一样。

2020-11-07 23:11:39 366 1

原创 LeetCode-SQL练习题总结(MySQL实现)

对LeetCode上的SQL练习题的免费部分进行了部分讲解,考虑大部分公司并没有升级到Mysql8,所以本文也没有使用窗口函数的解法(以后可以考虑补充,毕竟用了窗口函数解法就没有了通用性)。

2020-09-10 23:51:01 1134

原创 JUC线程池 ScheduledThreadPoolExecutor源码解析 JDK8

ThreadPoolExecutor的功能已经很强大了,但却没有延时任务的功能。对于ScheduledThreadPoolExecutor,它的父类ThreadPoolExecutor所做的提交任务都是延时时间为0的延时任务。同时,它也提供了执行周期任务的功能。

2020-09-03 20:21:42 680 1

原创 JUC线程池 ThreadPoolExecutor源码解析 JDK8

ThreadPoolExecutor提供了管理线程的功能,它的最大好处在于能够复用线程,而不必在想要异步执行时用原始的new Thread().start()起线程。在构造ThreadPoolExecutor时通过给定不同的参数,可以得到不同效果的线程池。这样,使用者可以不用关心线程的管理,而专心于业务的编写。

2020-08-31 23:19:08 1224

原创 JUC框架 CompletableFuture源码解析 JDK8

我们知道FutureTask实现了task异步执行,但对于执行结果的获取,如果异步执行还在进行中,那么线程只能get阻塞等待,或者轮询isDone,这两种方式都和我们开始实现异步的初衷相违背。所以就诞生了这个CompletableFuture,它的最大不同之处在于,通过提供回调函数的概念,把处理执行结果的过程也放到异步线程里去做。

2020-08-24 23:41:27 2309 1

原创 JUC框架 FutureTask源码解析 JDK8

FutureTask的使用方法已经在上一篇进行了讲解,其实它和SynchronousQueue很像,执行task的线程是生产者,获取执行结果的线程是消费者,消费者阻塞的原因不是生产者还没来,是因为生产者还没有生产出来执行结果。只不过,这里只有一个生产者(FutureTask对象),却可以对应到多个消费者(对同一个FutureTask对象调用get的不同线程)。

2020-08-17 00:05:00 907

原创 JUC框架 从Runnable到Callable到FutureTask 使用浅析

本文旨在简单讲解Runnable、Callable、FutureTask这几个线程执行相关的接口和类。为后面FutureTask源码讲解作铺垫。

2020-08-15 19:49:39 606

原创 JUC集合类 SynchronousQueue源码解析 JDK8

SynchronousQueue其实就是LinkedTransferQueue的升级版,相同的是它们都作为生产者和消费者交互的通道,可以直接让生产者和消费者打交道。不同的是,SynchronousQueue做的更彻底,不去支持无关的共有操作(比如size()),只提供必要的入队出队方法。并且,SynchronousQueue提供了两种逻辑结构,栈和队列。理解LinkedTransferQueue是搞懂SynchronousQueue的前提。

2020-08-15 11:42:42 2483

原创 JUC集合类 LinkedTransferQueue源码解析 JDK8

LinkedTransferQueue是一种特殊的无界阻塞队列,它提供一种Transfer的功能,用以保证生产者把数据传输给消费者。其他的普通队列,生产者是不需要关心消费者是否存在的,但现在的LinkedTransferQueue却需要保证生产者把数据确实传输给了消费者,才算是一次成功的入队操作,否则算作入队失败。

2020-08-09 22:38:05 764

原创 JUC集合类 DelayQueue源码解析 JDK8

DelayQueue是一个无界阻塞队列,它和PriorityBlockingQueue一样是一个优先队列,但区别在于队列元素只能放置Delayed对象,而且只有元素到期后才能将其出队。内部是一个最小堆,堆顶永远是最先“到期”的那个元素。如果堆顶元素没有到期,即使线程发现队列中有元素,也不能将其出队。DelayQueue需要依赖于元素对Delayed接口正确实现,即保证到期时间短的Delayed元素.compareTo(到期时间长的Delayed元素) < 0,这样可以让到期时间短的Delayed元素

2020-08-07 22:59:40 560 1

原创 JDK8 PriorityBlockingQueue(Collection<? extends E> c)构造器 源码解析

PriorityBlockingQueue的这个(Collection<? extends E> c)重载版本构造器的源码有几个地方有点难懂,但本文讲述内容不是PriorityBlockingQueue的重点理解内容,所以本文单独讲解。

2020-08-05 22:41:53 417

ArcGIS 10.1 破解文件.rar

ArcGIS 10.1 破解文件。在你安装完ArcGIS 10.1 for Desktop.iso后使用的。

2019-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除