- 博客(23)
- 收藏
- 关注
原创 记一次笔试遇到leetcode原题却没a出来的经历
给 N x 3 网格图涂色的方案数你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿。三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。给你网格图的行数 n 。请你返回给 grid 涂色的方案数。由于答案可能会非常大,请你返回答案对 10^9 + 7 取余的结果。输入:n = 1输出:12解释:总共有 12 种可行的方法:示例 1:示例 2:输入:n = 2输出:54示例 3:输入:n = 3输出:246
2021-03-06 20:48:09
303
1
原创 介绍一下 Golang for range 循环原理
下面的代码是死循环么?语法糖下面的代码有什么问题么?切片For Range原理其它语法糖- map- channel- 数组- 字符串下面的代码是死循环么?func main() { v := []int{1, 2, 3} for i := range v { v = append(v, i) }}上面的代码先初始化了一个内容为1、2、3slice,然后遍历这个slice,然后给这个切片追加元素。随着遍历的进行,数组v也在逐渐增大,那么这个for循环是一个死循环么?.
2020-12-15 20:56:26
766
原创 记一次NACOS不限制日志级别的错误
最近参与的项目Nacos,Nacos客户端连接时心跳日志打印频繁,生产环境中日志文件生成太快,如果不限制日志级别,很容易就会发生下面的问题。原因:这些信息其实是心跳日志,是INFO日志,因此你会看到不断有心跳日志打印在控制台中。解决:多数都是Nacos中com.alibaba.nacos.client.naming路径打印,将该路径日志级别提升至error。调高Nacos的日志级别,比如将nacos的客户端日志级别设置为ERROR,那对于nacos客户端日志它只会打印ERROR及以上的日志,这样就能屏
2020-11-19 09:41:28
1727
原创 Go-Kit 微服务:使用内置http发布服务
Go-Kit微服务文档 :https://github.com/go-kit/kit/安装go get gitHub.com/go-kit/kit其他的框架:go-micro、kiteGo-Kit工具包集合,帮助开发者灵活自由的创建微服务体系。文档https://godoc.org/github.com/go-kit/kit微服务体系的基本需求HTTP REST、RPC日志功能限流API监控服务注册与发现API网管服务链路追踪服务熔断Go-Kit得三层架
2020-10-23 10:28:06
573
转载 Rust借用机制的理解分析
Rust初学者大多会遇到这样的问题:为什么同一资源不可被同时可变借用和不可变借用?为什么Rc一定只能是只读的,一定要配合std::cell系列(Cell,RefCell,UnsafeCell)才能提供可变性?为什么不设计一个可变的Rc?为什么Mutex/RwLock一般都会配合Arc使用?……这一类借用规则的问题,实际上都可以通过另一种思路来很好地解答,当然这也是很多大佬一定程度上认可的理解方式:Rust中的借用,分为不可变借用共享借用,和可变借用独占借用无论在教程中,还是
2020-10-22 11:15:31
526
原创 Gin框架的路由、重定向、数据解析、中间件和同步异步
安装go get -u github.com/gin-gonic/ginGin 路由入门gin.Default() 中 Default()中的代码engine := New()//默认用了两个中间件,日志和恢复engine.Use(Logger(), Recovery()) 中间件基本路由Gin框架中采用的路由库是基于 httprouter做的Restful风格的API Gin支持Restful风格的API Representational State T
2020-10-20 09:17:37
2618
原创 理解Golang包的import导入机制
1 理解 Go importGo 中的程序由各种包组成。包依赖于其它包,这些包内置于标准库或者第三方。包首先需要被导入才能使用包中的导出标识符。这是通过结构体调用 import 声明 来实现的.import ( "encoding/json" "errors" "fmt" "net")热身1.1 使用点操作引入包使用点操作引入包时,可以省略包前缀:import . "fmt" // fmt 前多了 . 字符func main() { Println("hello
2020-10-12 14:04:56
3815
2
原创 Zookeeper分布式过程协同 part III
开始使⽤ZooKeeper开始之前,让我们再次确认一下zookeeper到底是做什么工作,它能做些什么。zookeeper是分布式协调通知工作的一致性框架,就是多个服务模块在分布式系统中,多个系统之间的的通知调度,需要有一个协调调度的通知机制,保证全部的提供一执行服务的软件,这就是zookeeper,类似班主任。班主任手中有一个花名册,册中记录了每位同学的信息。假设你向班任请求寻找靠近后门的倒数第三排的第6位同学,此时班主任也未必能想到那个人到底是谁。但班任手中有一份服务的注册列表,班中的每位同学都
2020-07-31 17:13:10
151
原创 Zookeeper分布式过程协同 (part II)
第一节忘记了?不要紧,传送门:死磕Zookeeper分布式过程协同了解ZookeeperZookeeper基础应⽤间需要共享⽤于协作的原语(具有原子性的一段代码),⽤于协作需求的服务的⽅法往往是:提供原语列表、暴露每个原语的实例化调⽤方法,以及控制这些实例。⽐如,可以说分布式锁机制组成了⼀个重要的原语,暴露出创建(create)、获取(acquire)和释放(release)三个调⽤⽅法。这种设计存在⼀些缺陷:⾸先,要么预先提出⼀份详尽的原语列表,要么提供API的扩展,以便引⼊新的原语;其次,这种⽅
2020-06-27 19:32:25
184
原创 死磕Zookeeper分布式过程协同
微信公众号:Collision Resistance前言当今如此庞大的数据量背后,⽆法依赖单个服务器的性能升级来处理,优化变得异常困难,也无法进行水平扩展,分布式系统和应用受到青睐。它不仅可以提供强大的计算能力,而且具有容灾性(即在机器发生故障时,系统的可用性基本不受影响)。在⼤数据和云计算盛⾏的今天,应⽤服务由很多个独⽴的程序组成,如何让⼀个应⽤中多个独⽴的程序协同⼯作?ZooKeeper从⽂件系统API得到启发,提供⼀组简单的API,使得开发⼈员可以实现通⽤的协作任务,包括选举主节点、管理组内成员
2020-05-24 20:39:07
250
原创 2020-5-10 母亲节
2020不一样的开场让假期不断演唱,把工作和学习都搬到了家里却因此让这一段时间成为长大后陪伴妈妈最长的日子也解锁了更多陪伴妈妈的方式就像小时候,妈妈牵着我的手教我认识世界现在,换我牵着妈妈的手追赶未来吧...
2020-05-10 11:55:17
99
原创 Golang之kafka知识点
同步的函数调函数异步化;进程间的通信。高吞吐、低延迟、高容错。1 消息队列的通信模式1.1 点对点模式(queue)消息生产者将消息发送到queue中,然后消息消费者从queue中取消息。一个消息被消费以后就没有了,不存在重复消费。1.2 发布订阅模式(topic)消息生产者发布消息到topic中,同时多个消息消费者消费该消息。与点对点模式不同,发送到topic的消息会被所有订阅者消费。...
2020-05-08 12:29:34
717
原创 redis 面试知识点总结
1 redis持久化机制由于redis基于内存运行,如果断电关闭,内存中的数据就不再存在,数据丢失。但是redis支持关机再启动数据依然存在,这就是redis持久化。实则是在某一时刻把redis中的数据写入了磁盘中的持久化文件中。两种持久化方式1.1 RDBRDB是Redis用来进行持久化的一种方式(默认开启的是RDB持久化),是把当前内存中的数据集快照写入磁盘(数据库中所有键值对数据),...
2020-04-21 00:23:39
170
原创 Golang之NSQ
1 NSQ1.1 NSQ简介NSQ是一个基于go语言开发的一个比较流行的分布式的消息队列。1.2 NSQ优势不存在单点故障,容错性能高以及高可用性,可靠的消息交付支持横向扩展,没有集中式代理配置和部署简单1.2.1 NSQ适用于异步处理参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间。1.2.2 NSQ适用于应用解耦通过使用消息队列将不同...
2020-04-10 13:04:23
1165
转载 深入Golang调度器之GMP模型(转)
1 前言随着服务器硬件迭代升级,配置也越来越高。为充分利用服务器资源,并发编程也变的越来越重要。在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别。并发: 逻辑上具有处理多个同时性任务的能力。并行: 物理上同一时刻执行多个并发任务。通常所说的并发编程,也就是说它允许多个任务同时执行,但实际上并不一定在同一时刻被执行。在单核处理器上,通过多线程共...
2020-03-11 18:12:29
187
原创 Golang之并发编程
1 并发概述并发编程是指在一台处理器上“同时”处理多个任务,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。宏观的并发是指在一段时间内,有多个程序在同时运行。并发在微观上,是指在同一时刻只能有一条指令执行,但多个程序指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个程序快速交替的执行。2 什么是并发?...
2020-03-11 17:08:58
293
原创 Go defer语句&作用域
1 defer 语句defer是Go语言提供的关键字,用于资源的释放,会在函数返回之前进行调用。defer语句是Go中一个非常有用的特性,可以将一个方法延迟到包裹该方法的方法返回时执行,在实际应用中,defer语句可以充当其他语言中try…catch…的角色,也可以用来处理关闭文件句柄等收尾操作。1.1 defer 执行func main() { //defer 语句 deferDem...
2020-03-05 10:51:56
3006
原创 Go之Map
1 Go基础 mapGo语言中提供的映射关系容器为map,其内部使用散列表实现。1.1 map 定义map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。声明方法map[KeyType]ValueType// KeyType 表示键的类型。// ValueType 表示键对应的值的类型make(map[KeyType]Value...
2020-02-18 21:44:57
194
原创 Golang中切片的定义、使用
1 Go语言中切片 slice切片(Slice)是Go语言类型系统中的一种基本的数据类型,类似于C++中的vector,都是围绕动态数组概念构建的,可以按需自动增长和缩小。但是切片本身并不是动态数组,而是对底层数组的抽象。切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。1.1 切片的声明两种声明切片类型...
2020-02-11 22:25:36
3855
1
原创 Go语言运算符&流程控制&数组
1 Go语言运算符1.1 算数运算符a := 30 b := 20运算符描述实例+加a + b = 50-减号a - b = 10*乘a * b = 600/除(求商)a / b = 1%除(求余)a % b = 10注意 ++和--在Go语言中为单独的语句,不是运算符。1.2 关系运算符运算符描述...
2020-02-09 22:33:41
170
原创 Golang 常见字符串操作
1 字符串1.1 多行字符串声明Go把字符串定义为一个多行的字符串,使用 ``s1 := `helloworldLOL` fmt.Println(s1)/*打印结果为: hello world LOL*/1.2 转义字符Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等转义符意义\r回车符(返回行首)\n换行符(直接...
2020-02-08 22:22:48
715
原创 Go语言变量/常量
张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五Created with Raphaël 2.2.0开始我的操作确认?结束yesno...
2020-02-07 18:28:17
108
原创 搭建Go开发环境
之前学的笔记都写在sublime上(错误示范),遇到问题想看文档很麻烦,不知道去哪里找,走了不少弯路,希望搞技术的可以养成写博客的好习惯吧,写博客也是一种鼓励。共勉Golang开发环境环境可以选择Goland或者是VSCode,但是由于Goland是收费的,使用破解版的(律师函警告)容易出现问题,如果你也是学生,那就二选一吧,我习惯使用Goland,这里介绍VSCode环境的搭建。安装Go开...
2020-02-02 19:11:28
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人