自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冬木

清心寡欲

  • 博客(76)
  • 资源 (6)
  • 收藏
  • 关注

原创 shell之匹配模式和扩展匹配模式

首先说一下什么是匹配模式,然后再介绍扩展匹配模式。匹配模式这个概念就算不知道,但是也都会使用这个功能找到匹配的文件。例如 ls ab*,找到所有以ab开头的文件。这就是利用了*可以匹配任意字符串,包括空串。匹配模式是man bash中的pattern matching,星号的含义在上面讲了。?用来匹配任意单个字符,例如a?c可以匹配到abc,adc,不能匹配空字符,所有不能匹配ac[…] 用来匹配中括号中的一个字符,例如a[bc]d,可以匹配abd和acd如果想匹配* ?[]呢,需要用反斜杠进行

2020-12-31 21:30:53 485

原创 endianconv.h

/* variants of the function doing the actual conversion only if the target * host is big endian */#if (BYTE_ORDER == LITTLE_ENDIAN)#define memrev16ifbe(p) ((void)(0))#define memrev32ifbe(p) ((void)(0))#define memrev64ifbe(p) ((void)(0))#define intrev

2020-05-17 22:57:03 213

原创 atomicvar.h

1

2020-05-17 19:32:52 342

原创 tcmalloc简单介绍

1

2020-05-17 18:03:26 479

原创 zmalloc.c

void *zmalloc(size_t size) { void *ptr = malloc(size+PREFIX_SIZE); if (!ptr) zmalloc_oom_handler(size);#ifdef HAVE_MALLOC_SIZE update_zmalloc_stat_alloc(zmalloc_size(ptr)); return ptr;#else *((size_t*)ptr) = size; update_zmalloc_

2020-05-17 16:42:14 238

原创 ziplist

版本6.0.1ziplist.c/* Create a new empty ziplist. */unsigned char *ziplistNew(void) { unsigned int bytes = ZIPLIST_HEADER_SIZE+ZIPLIST_END_SIZE; unsigned char *zl = zmalloc(bytes); // 分配bytes个字节的内存 ZIPLIST_BYTES(zl) = intrev32ifbe(bytes); Z

2020-05-17 16:40:13 160

原创 AtomicReference

java.util.concurrent.atomic原子更新引用类型public static AtomicReference<String> af = new AtomicReference<>("init");boolean flag = false;while (!flag) { String curr = af.get(); String newValue = someFunction(curr); flag = af.CompareAndSet(curr,

2020-05-10 12:01:27 406

原创 gc过程

runtime 文档描述// 1. GC performs sweep termination.//// a. Stop the world. This causes all Ps to reach a GC safe-point.(STW)//// b. Sweep any unswept spans. There will only be unswept spans if// this GC cycle was forced before the expected time

2020-05-10 11:25:57 19066

原创 gc

gc是和内存分配紧密相关的,golang中堆区是按照class size进行划分,共定义了67种class。在1.10版本中,堆区是连续的,分为spans、bitmap和arena三部分。其中arena就是按照class size进行划分的。由于堆区的空间划分(bitmap和class size),这决定了gc需要使用非移动式的算法,golang采用mark and sweep算法。mark:通过可达性分析标记对象是否存活,即是否存在一条从根对象到目的对象的引用链。因为在mark阶段中修改对象的引用

2020-05-09 23:28:40 138

原创 synchronized and wait

1

2020-05-08 23:11:45 109

原创 sync.Cond

go version go1.13.4 linux/amd64用于同步多个协程间的条件状态比如在消费者-生产者模型中,只有在队列中有资源时,消费者才可以消费,只有在队列还能够放入资源时,生产者才可以放入资源。消费者协程和生产者协程之间需要同步队列的状态,这里的状态同步可以用sync.Cond来实现。源码分析// Wait atomically unlocks c.L and suspends execution// of the calling goroutine. After later res

2020-05-08 23:02:45 338

原创 QuorumPeer.setQuorumVerifier

1

2020-05-06 00:11:29 242

原创 配置文件解析

1

2020-05-05 23:19:10 513

原创 zookeeper源码分析

版本 zookeeper-release-3.6.1启动类~/zk/zookeeper-release-3.6.1/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerMain.java public static void main(String[] args) { Q...

2020-05-03 21:48:53 268

原创 string

package mainimport "fmt"func main() { s := "中国" s1 := []rune(s) fmt.Println(len(s)) // 6 fmt.Println(len(s1)) // 2 fmt.Printf("%x, %x\n", s1[0], s1[1]) // 4e2d, 56fd}len函数计算的是字符串底层的字节数,字符...

2020-04-06 23:58:03 100

原创 字符集与字符编码

windows下编辑文本文档,内容是abc,然后换行以ANSI编码保存,winhex打开显示为0D 0A表示\r\n以utf8编码保存,winhex显示为其中EF BB BF表明文档是由utf8编码,叫做BOM(byte order mark)以unicode编码保存,winhex显示FF FE是BOM,表明是little endian。每个字符采用两个字节表示,所以字符a编码为...

2020-04-06 11:46:33 442

原创 String

java中char类型占2个字节,String内部采用char[]表示unicode字符集包含多个平面,通常第0平面就已经满足使用,第0平面可表示的字符从0x0000 0000到0xFFFF FFFF。在String表示的字符都在第0平面时,每个char对应一个字符,且String的私有成员value存储的是第0平面的unicode码点。public final class String ...

2020-03-29 13:17:47 118

原创 字符串匹配算法

有限状态机一个有限状态机包含3部分:有限的状态集合,其中包含初始状态、中间状态和接受状态(或者叫做终止状态)有限的输入字母表状态转移函数一个简单的两状态自动机如下:状态集合为{0,1} 其中0是初始状态,也是中间状态,1是接受状态输入表为{a,b}状态转移函数表示为状态转移表如下:状态输入a输入b010100等价的状态转移图为:此...

2020-03-28 11:54:32 182

原创 go dep依赖的拓扑排序

拓扑排序go中的依赖关系可以使用有向无环图来表示,通过使用深度优先搜索算法,可以得到一个合理的依赖列表。源码分析 (以v0.5.1为例)dep/gps/pkgtree.PackageTree表示依赖树(依赖包树,导入包树),其ToReachMap方法用于生成依赖树的依赖路径,其返回值ReachMap的FlattenFn方法将map转换为已排序去重的依赖列表。ToReachMap方法调用vm...

2019-03-17 20:12:38 308

原创 go字符串拼接操作

1. 使用 + 拼接通过查看汇编代码可知 + 实际上调用的是 runtime/string.go中的concatstrings 函数,该函数源代码如下:// concatstrings implements a Go string concatenation x+y+z+...// The operands are passed in the slice a.// If buf !...

2018-05-15 16:35:22 3287

原创 linux命令之cat

概念- 短字符 - 表示来自stdin文本的文件名tac 此命令是cat的反写,功能与cat相反,cat是从第一行到最后一行顺序显示在屏幕上,而tac则是逆序显示用法将输入文件内容与stdin进行拼接echo Hello World | cat - filename # 管道符前的stdout作为cat的stdin...

2018-04-30 01:26:08 173

原创 linux重定向

概念文件描述符用于访问文件的一个抽象指针,是一个与打开的文件或数据流相关的整数,用来追踪已打开的文件。0、1和2分别是stdin、stdout和stderr的预留描述符,使用时置于重定向操作符之前。标准输入stdin默认来自键盘,使用 &lt;、&lt;&lt;,&lt;&lt;使用右侧的控制符,用于结束输入标准输出stdout命令执行成功后的正确信息,默认输出到屏幕,使用...

2018-04-30 01:18:04 205

原创 AbstractQueuedSynchronizer详解

AQS是自定义同步组件的关键,它的关注点是多线程访问共享资源受限时的线程处理策略,其中包括线程如何安全进入同步/等待队列,什么时候唤醒线程,需要取消线程时如何操作等等,而这些操作具有公共性,在所有的并发场景下都适用。而如何定义共享资源访问受限则是不同场景有不同场景的定义。 AQS的功能分为独占式线程处理策略和共享式线程处理策略,即其子类可以根据具体场景来选择使用不同的功能。AQS包含一个内部...

2018-03-19 14:30:45 270 1

原创 快捷键及命令

最大化窗口 ctrl + m 还原窗口 ctrl + super + down 谷歌浏览器菜单 f10 + enter  切换标签页 ctrl + tab 或 ctrl + 1/2/3... 新建标签页 ctrl + t关闭当前标签页 ctrl + f4 收藏当前页 ctrl + d 打开收藏夹,tab切换 ctrl + shift + o 地址栏输入 alt + ...

2018-01-27 11:57:19 199

原创 Vim

粘贴在insert模式下直接粘贴,会出现很多缩进。需要在normal模式下:set paste,然后在insert模式下粘贴,最后再:set nopaste编码命令 :set enc :set fenc :set fencs...

2018-01-25 23:52:55 133

原创 go

变长参数 nums …int格式化: 在命令行输入 gofmt –w program.go 会格式化该源文件的代码然后将格式化后的代码覆盖原始内容(如果不加参数 -w 则只会打印格式化后的结果而不重写文件);gofmt -w *.go 会格式化并重写所有 Go 源文件;gofmt map1 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件。格式化:gofmt 也可以通过在参

2018-01-02 20:31:37 392

原创 go-context

context用于控制由一个goroutine (A)开启的其他goroutine(BCD…)。当A需要结束时,希望BCD…也相应地结束。package mainimport ( "context" "fmt")//或者使用go官方解释里面的写法(WithCancel)func a(ctx context.Context) chan int { //ctx作为参数

2018-01-02 18:50:33 224

原创 go http服务器

net/http包封装了TCP连接和报文解析等细节,使用时只需要和http.ResponseWriter和*http.Request这两个对象交互就行。 对应的处理函数,需要把请求对象传递进来,将处理结果写入相应对象中。package mainimport "net/http"func main() { http.HandleFunc("/", handle) // 第一个参数表示处理所有

2017-12-14 21:15:06 474

原创 反射

反射反射的定义反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,这种动态获取的信息及动态调用对象的方法的功能称作java语言的反射机制。为什么使用反射反射被广泛应用在那些需要在运行时检测或修改程序行为得程序中,例如Spring AOP使用反射加载配置文件,降低耦合,例如工厂模式中读取配置文件、Spring容器依赖注入反射可以在

2017-11-18 19:22:45 206

原创 动态类型语言&动态语言

动态语言 动态类型语言首先,这是两个不同的概念动态语言 dynamic programming language程序运行时,允许改变程序结构(例如引进新函数、删除旧函数)或变量类型。 从这个观点来看,Perl、Python、Ruby是动态语言,C++、Java、C#不是动态语言动态类型语言 dynamically typed language在运行期检查变量类型的语言,也就是在编写代码的时候可以不

2017-11-18 18:56:34 5311

原创 Apache common-lang: ArrayUtils

方法解释

2017-10-11 15:16:06 471

原创 java泛型推断从java6到java8的变化

java6中:Map<Person, List<? extends Pet>> petPeople = new HashMap<Person, List<? extends Pet>>();不能够省略new后面类型参数部分。但是,使用泛型方法的类型参数推断可以简化一部分工作。public class New { public static <K, V> Map<K, V> map() {

2017-10-04 15:08:22 1211

原创 java初始化相关

package test;import static test.MyPrint.println;/** * Created by wangsong on 17-9-9. */public class TestExtends { public static void main(String[] args) { Derived d = new Derived();

2017-09-10 10:05:23 200

原创 空间换取时间

剑指offer 35 第一个只出现一次的字符 不需要额外空间的做法:从第一个字符开始,往后判断这个字符是否在后面出现过,如果没有,就是结果;最坏的情况是每个字符都做了判断,时间复杂度是O(n^2)。 以空间换取时间,就是借由HashMap来保存每个字符的出现次数。

2017-09-08 11:48:06 820

原创 leetcode-204-质数的个数

判断n以内的所有的质数的个数,直接的想法是判断每个数是不是质数。 然而n以内的数是由质数和合数组成的,合数可以由质数生成,质数的倍数就是一个合数。 判断一个数是否为质数,就是判断2~根下n的每个整数是否可以被n整除,若都不能被整除,则为质数,否则为合数。换个角度,即2~根下n的每个整数的倍数都是合数,通过计算出所有的合数,剩下的就是质数。更精确地说,是仅仅计算2~根下n的每个质数的倍数,而合数的

2017-09-08 10:59:35 362

原创 leetcode-50-pow

实现pow(double x, int n): double最直接的方法:挨个乘起来。时间复杂度O(n)。该种做法耗时且浪费了可重复利用的资源。根据二分查找的思想,将累乘对半、对半、再对半划分,只需算一半便可得出结果,如下图所示。 上图是pow(x,10)的例子,x^10=((x^2)^2*x)^2 而对半的思路时间复杂度是O(log n)。所以可以采用递归实现,要注意的点: - 指数

2017-09-04 14:16:53 84

原创 关于函数作为参数传递给函数

javascript中,函数可以作为参数传递给另一个函数。这是因为js中的函数名实际上是一个变量,而变量是可以作为参数进行传递的,当然也可以作为返回值进行返回。<html><body><script>function add(num1, num2) { return num1 + num2;}function b(functionName, parameter1, paramete

2017-09-01 17:30:49 1876

原创 leetcode-41-找出第一个缺失的正整数

题目要求时间复杂度为O(n)且使用常数空间,这意味着需要在原地进行排序。 数组索引0的位置存储1, 1的位置存储2,以此类推。 第一遍遍历数组,判断每个元素是否在其正确的索引位置上。如果这个元素不等于索引值加1,且大于等于1,且它可以存放到数组中,且它存放正确位置的数字和它不等,此时交换。否则,继续遍历下一个。 第二遍遍历数组,找出和索引值加1不等的,其索引值加一就是缺失的正整数。

2017-08-28 12:50:11 1407

原创 leetcode-8-字符串转数字atoi

需要尽可能考虑所有的情况,不符合的情况返回0 首先字符串有可能存在前导空白,需要去掉,然后第一个字符只能为正号负号或者数字,考虑Integer的parseInt方法,如果第一个字符时正号,需要去掉。然后从第二个字符开始,一直到字符不为数字或者结束为止,使用parseInt有可能发生溢出,溢出是异常,通过判断第一个字符是否为负号来决定是返回int所能表示的最大值还是最小值。 首先去掉前导空白,使用

2017-07-17 21:27:27 1022

原创 linux

查看版本命令 lsb_release -a wifi 蓝牙 命令 rfkill 输入可以看到相关参数

2017-07-13 11:33:25 59

Maven实战 pdf

maven是一款优秀的依赖管理工具,可以免去手动添加依赖和依赖冲突的问题,基于maven3,是最好的maven学习教材之一

2017-09-09

java开发规范-阿里

来自阿里内部的java开发规范,总结了多年的java编写代码需要注意的事项,详细规定了java编程应该严格遵守的约定,有利于代码的规范性

2017-09-09

Git权威指南 蒋鑫著

经典的Git教材,学习Git的最好的教材之一,正版扫描版,有完整的目录,是一本学习Git的很好的教材,对Git的讲解深入浅出

2017-09-09

Guava Source Code 22.0

谷歌java核心类库,支持java1.8

2017-06-05

查看java class文件工具

非常方便查看java class文件 无需安装

2017-05-31

《Python编程入门(第3版based Python3.x).pdf

Python基础入门参考资料,是基于Python3.x的,里面有完整的目录和自己在学习过程中发现的错误标识。

2017-05-05

空空如也

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

TA关注的人

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