LeetCode|344. 反转字符串

题目描述 等级: 简单 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例2: 输入:["H","a","n","n","a","h"] 输出:["h","a","n","n"...阅读全文

Segmentfault 2019-12-06 13:32:40 clawhub

LeetCode|350. 两个数组的交集 II

题目描述 等级: 简单 给定两个数组,编写一个函数来计算它们的交集。 示例1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪...阅读全文

Segmentfault 2019-12-06 13:32:39 clawhub

LeetCode|371. 两整数之和

题目描述 等级: 简单 不使用运算符 + 和 - ,计算两整数a 、b之和。 示例1: 输入: a = 1, b = 2 输出: 3 示例2: 输入: a = -2, b = 3 输出: 1 思路 对于位运算的考察。 在位运算中,异或操作获取的是两个数的无进位和,异或:相同为0,不同为1。如, 2^3 0010 ^ 0011 ------- 0001 我们知道,2+3=5,5的二进制是0101。前面已经知道了无进位和,下面获取进位的数:看a&b 2&b 0010 & 0011 -------- ...阅读全文

Segmentfault 2019-12-06 13:32:38 clawhub

一次UDP通迅的问题排查

通迅模型 (A-->B-->A):A通过UDP发送数据给B(A可以是指定目的地,也可以是广播发送消息给B),B收到消息后根据来源地址和端口向A回发消息,就这么简单的一个通迅过程。 关于golang udp方面的讲解可以参考下https://colobu.com/2016/10/19/Go-UDP-Programming/这篇文件,讲的挺详细。什么时候udp socket是connected状态,什么时候是unconnected状态,什么时候用read/write,什么时候用readFromUDP...阅读全文

Segmentfault 2019-12-06 13:32:37 ample

说说 Go 中的变量(附粗制滥造面试题)

和其他语言没有区别,Go 中的数据也是两种表示方式,常量和变量,本文先说说变量吧。 为了增加文章的趣味性(多掉些头发),文末搜集了一些常见的面试题。部分是自己瞎编的,顺便为自己明年可能到来的面试做些准备。 什么是变量 变量是可以理解为使用一个名称绑定一个用来存放数据的内存块。 变量,首先是量,即为数据,而后是变,即表示内存块中的数据是可变的。与变量相对的是常量,常即恒常,表示数据不可变。常量的值是在编译期就确定了。 变量的定义 Go 中变量的定义有多种方式,先看一个变量完整的定义组成。如下: 变...阅读全文

Segmentfault 2019-12-06 13:32:36 波罗学

战旗直播基于consul服务注册与发现的GRPC服务实战与感想

前言 鄙人关注consul也有一段时间了,从2017年开始了解它的一些特性,它能帮助解决哪些问题,然后怎么应用到微服务中去。随着时间的推移,微服务的发展也是非常的迅速,可以说日新月异,每天都在变化。consul工具所提供的功能也在不断地新增和完善。OK,有些扯远了,咱们还是回到主题上来吧。在微服务领域有个重要的概念——服务注册与发现。google或baidu一下,会发现有大量的关于服务注册发现的文章、博客等,有基于consul的、也有基于etcd和zoomkeeper的,每个工具都有自己的特点和...阅读全文

Segmentfault 2019-12-06 13:32:35 ample

02Gin源码解读

简介 HttpRouter 实现 数据结构 添加路由 addRoute insertChild 获取数据 总结 简介 Gin 源码解读, 基于 v1.5.0 版本. HttpRouter 实现 添加路由主要是由 addRoute 完成: func (engine *Engine) addRoute(method, path string, handlers HandlersChain) { assert1(path[0] == '/', "path must begin with '/'") a...阅读全文

Segmentfault 2019-12-06 13:32:35 帅气猫咪

strconv.Itoa(1) string(1)区别?int转string用strconv.Itoa

strconv.Itoa(1) string(1)区别? 融云SDK创建token方法,rc.UserRegister的第一个参数要求是string类型的。user结构体ID是int类型的。所以我使用了string(id) 进行了转化,不过这样写SDK报错。后我尝试修改为strconv.Itoa(id) 就可以了。这有啥区别呢? https://blog.csdn.net/TCatTime/article/details/100192117 得出结论:int转string要用strconv.It...阅读全文

Segmentfault 2019-12-06 13:32:34 SmallForest

【golang】iris的jwt实践,获取jwt、携带jwt、验证jwt、设置过期时间、自定义错误处理函数、格式化错误返回

golang iris的jwt实践 由于jwt原理已经有很多文章提及过了,这里不再赘述,本文主要介绍jwt在iris中的实践,文章的最后会给出完整代码,可以运行起来边测试边看。如果文章对你有帮助,点个赞或者留下评论将会是对我的极大鼓励! jwt使用方向 本文将jwt用于登录功能,如果是其他功能需求其实也类似,可以触类旁通。 iris中jwt的使用思想 iris基于中间件思想设计,对于一些重复性的操作,可以通过注册中间件来完成。对于登录功能,我们自然不希望每个api中手动判断是否过期,是否合法等,...阅读全文

Segmentfault 2019-12-06 13:32:34 JabinGP

golang切片内存应用技巧

在 Go 语言中切片是使用非常频繁的一种聚合类型,它代表变长的序列,底层引用一个数组对象。一个切片由三个部分构成:指针、长度和容量。指针指向该切片自己第一个元素对应的底层数组元素的内存地址。 切片的类型声明如下: type slice struct { array unsafe.Pointer len int cap int } 多个切片之间可以共享底层数组的数据,并且引用的数组区间可能重叠。利用切片 的这个特性我们可以在原有内存空间中对切片进行反转、筛选和去重等操作,这样就不用声明一个指向新内...阅读全文

Segmentfault 2019-12-06 13:32:33 KevinYan

golang并发控制

golang并发控制 给大家推荐一个并发控制包, 有了github.com/lxzan/runner, 妈妈再也不担心我的爬虫把别人家网站搞挂了 package github.com/lxzan/runner example // 并发10个任务, 每10ms检查一次新任务 package main import ( "context" "fmt" "github.com/lxzan/runner" "os" "os/signal" "syscall" "time" ) func main() ...阅读全文

Segmentfault 2019-12-06 13:32:33 codebeast

gochat - 纯go实现的im即时通讯系统🚀

项目推荐 🚀 项目地址: https://github.com/LockGit/go... 类别:Go 项目描述: gochat为纯go实现的即时通讯系统,支持私信消息与房间广播消息,各层之间通过rpc通讯,支持水平扩展。 使用redis作为消息存储与投递的载体,相对kafka操作起来更加方便快捷,所以十分轻量。 各层之间基于etcd服务发现,在扩容部署时将会方便很多。 由于go的交叉编译特性,编译后可以快速在各个平台上运行,gochat架构及目录结构清晰, 并且本项目还贴心的提供了docker...阅读全文

Segmentfault 2019-12-06 13:32:33 gochat

golang RabbiMQ简单操作

安装erlang 因为RabbitMQ是基于erlang开发的 安装RabbiMQ 上述步骤自行百度windows linux都支持 安装注意事项: erlang要和RabbiMQ版本对应上 RabbiMQ windows安装需要将.erlang.cookie改成一样的 rabbitMQ常用的命令 启动监控管理器:rabbitmq-plugins enable rabbitmq_management 关闭监控管理器:rabbitmq-plugins disable rabbitmq_manage...阅读全文

Go入手

1、Mac配置环境 1.1 安装go: https://golang.org/dl/ 下载画圈文件,安装即可1.2 配置环境vim ~/.bash_profile 打开配置文件复制下面这些: export PATH="/opt/local/bin:/opt/local/sbin:/usr/local/go/bin:$PATH" export GOROOT=/usr/local/go export GOPATH=/Users/你的go目录/Go export GOBIN=$GOPATH/bin e...阅读全文

golang protobuf unknown字段透传

需求背景: 云端在线架构有上游A-中间模块B-下游C三个模块,都是proto格式数据传输交互。流量方向为从A->B->C,当A模块需要给proto增加某个字段,这个字段中间模块B并不关系,只需要透传给下游模块C来使用。 那么A和C模块都升级proto的情况下,作为透传模块的B能不能不升级proto文件呢?答案是肯定的,这就要说到proto3的unknown字段支持了(proto2和大于proto 3.5版本的支持) proto定义: A模块和c模块的proto: syntax = "proto3...阅读全文

饿了么监控体系:从架构的减法中演进而来

本文根据黄杰老师在〖2019 Gdevops全球敏捷运维峰会-广州站〗现场演讲内容整理而成。讲师介绍黄杰,前饿了么框架工具部监控平台负责人。2015年加入饿了么,负责整个监控平台的构建及周边工具链的建设。之前曾在携程、eBao等多家公司工作,在监控、消息系统及大数据等领域积累了丰富经验。分享概要1、背景2、遇到的问题3、场景化4、系统设计大家好!很荣幸有这样的机会和大家交流,今天分享的主题为《饿了么监控体系的演进》。我差不多是2015年中加入饿了么,主要是负责饿了么整个监控平台的搭建,从0开始搭...阅读全文