二叉树的深度遍历

深度优先与广度优先深度优先是对广度优先而言的,可以想象去遍历你的计算机目录有两种遍历方案:刨根问底,把第一个文件夹翻到底,然后再返回上一层,翻下个文件夹把一级目录的文件夹先便利一遍,然后再遍历二级目录……深度优先是第一种,这里不再多说举个例子如果我想遍历树状结构://1//|\//920//|\//


Let's Go 13 — channel的应用

单向Channel可以将channel隐式转换为单向队列,只收或只发。c:=make(chanint,3)varsendchan<-int=c//send-onlyvarrecv<-chanint=c//receive-onlysend<-1//<-send//Error:r


Let's Go 12 — Goroutine 和 Channel

Goroutine也就是Golang的多线程只需在函数调用语句前添加go关键字,就可创建并发执行单元。gofunc(){//yourcode...}开发⼈人员无需了解任何执行细节,调度器会自动将其安排到合适的系统线程上执行。事实上,入口函数main就以goroutine运行。关于调度器的说明调度器不


内存不够,要不试试 OpenJ9 ?

2020年了,拿512M的小鸡跑Java还是不太够用(手持传家宝,升级升不起面板里内存天天爆红,把Java关掉马上就好起来,不管怎么设置启动参数,效果也是微乎其微……从网上搜索了一下关于内存优化的内容,为何不从JRE下手呢?就发现了这么一个好东西——adoptopenjdk这里顺便吐槽一下Oracl


Let's Go 11 — 接口

接口接口是一个或多个方法签名的集合接口命名习惯以er结尾,结构体。接口只有方法签名,没有实现。接口没有数据字段。可在接口中嵌入其他接口。类型可实现多个接口。接口可用作变量类型,或结构成员。任何类型的方法集中只要拥有与之对应的全部方法(指有相同名称、参数列表(不包括参数名)以及返回值),就表示它&qu


Let's Go 10 — 表达式

表达式根据调用者不同,方法分为两种表现形式:instance.method(args...)---><type>.func(instance,args...)前者称为methodvalue,后者methodexpression。两者都可像普通函数那样赋值和传参


使用rebase保证commit树的整洁

如果你跟我一样,以前只会用gitadd/commit/pull/push这几个简单的命令,或许这篇文章能够帮到你一丢丢近期我终于(为什么要说终于?我注册Github已经4年了!)参与了一些开源项目,开源世界的人都很热心,很感谢在他们的帮助下学会这些一切都从commit树说起


Let's Go 9 — 方法

方法方法就是一种特殊的函数方法总是绑定对象实例,并隐式将实例作为第一实参(receiver)。(简单说就是能像Java那样:"对象.函数",并且对象会隐式的作为该函数的一个参数)方法有以下特性:只能为当前包内命名类型定义方法。参数receiver可任意命名。如方法中未曾使用,可省


Let's Go 8 — 结构体与Map

Struct在前面提到过,struct是值类型,所以支持"=="、"!="相等操作符由于是值类型,复制和传参会复制全部内容。可用"_"定义补位字段,支持指向自身类型的指针成员//声明一个结构体typeNodestruct{//_int补位字


Let's Go 7 — 数组与切片

数组和以往认知的数组有很大不同。数组是值类型,赋值和传参会复制整个数组,而不是指针。数组长度必须是常量,且是类型的组成部分。[2]int和[3]int是不同类型。支持"=="、"!="操作符,因为内存总是被初始化过的。(因为是值类型,所以如果两个数组内元素顺序