字节跳动面试题 —— 水壶问题

原文作者:老钱 原文链接:https://zhuanlan.zhihu.com/p/79938638 有钱的字节跳动面试题就是这么枯燥无味! 原题:给你一个装满水的 8 升满壶和两个分别是 5 升、3 升的空壶,请想个优雅的办法,使得其中一个水壶恰好装 4 升水,每一步的操作只能是倒空或倒满。 理解了这个题目的意思之后,我们的第一个方法肯定就是使用强大的脑力来进行暴力破解法,瓶子里的水在我们的脑子里颠三倒四,但是脑子有可能没那么清晰,想了几步之后就开始出现记忆错乱,然后就不得不开始慢慢重播。 甚...阅读全文

简书 2020-03-17 15:33:46 Alvin老师

【Golang】封装,继承与多态

面向对象的基本思想主要体现在封装,继承以及多态等的设计与运用上。 这篇文章主要讲述,封装、继承与多态在golang中是如何实现的。 封装 封装主要是通过访问权限控制实现的。 在Java中,共有public 、protected、default、private这四种权限控制。 而相应的在golang中,是通过约定来实现权限控制的。变量名首字母大写,相当于java中的public,首字母小写,相当于private。同一个包中访问,相当于default。由于go没有继承,也就没有protected。 ...阅读全文

简书 2020-03-17 15:32:54 冉黛玉

golang 通过 Redis GEO 实现 LBS 功能

LBS 基于位置的服务(Location Based Services,LBS),是利用各类型的定位技术来获取定位设备当前的所在位置,通过移动互联网向定位设备提供信息资源和基础服务。LBS首先读者可利用定位技术确定自身的空间位置,随后读者便可通过移动互联网来获取与位置相关资源和信息。LBS服务中融合了移动通讯、互联网络、空间定位、位置信息、大数据等多种信息技术,利用移动互联网络服务平台进行数据更新和交互,使用户可以通过空间定位来获取相应的服务。 redis 中关于 GEO 的方法 geoadd:...阅读全文

简书 2020-03-17 15:32:53 hwholiday

3.2.6Golang的切片

总目录:https://www.jianshu.com/p/e406a9bc93a9 Golang - 子目录:https://www.jianshu.com/p/8b3e5b2b4497 切片 go语言的切片与Python的切片看起来是一样的,但是却截然不同,Python的切片操作是一种深拷贝行为,切出来就是切出来了,go语言的切片操作是一种引用行为。 为什么会有切片 go语言中的数组是定长序列,查询快但是不易操作,例如我们不能对他进行追加元素。 所以就有了切片,相比于数组,切片是一个不定长序...阅读全文

简书 2020-03-17 15:32:52 寒暄_HX

golang 解决 protobuf 因为 XXX 插入数据库报错的情况

起因 在一个老项目里面直接用的 protobuf 生成的结构体与数据库交互 在 protoc 2 生成的 protobuf 没有 XXX 这些东西生成故能正常运行 因为版本升级到 protoc 3 后编译的 protobuf 就不能正常运行了,会出现数据库找不到 XXX_ 这些字段的情况 解决方案 把每张表单独生成 struct 放在 models 层里面,这样的话老服务改动太大我肯定是不能接受的 因为我们使用的 orm ,在xorm 中如果 struct 某个字段不需要映射的话就可以用 xor...阅读全文

简书 2020-03-17 15:32:51 hwholiday

构建最小golang镜像

一般来说,制作镜像都会采用Dockerfile的方式,像java、golang这类语言的镜像,原始的都很大。docker出了这类语言轻量级的alpine镜像,但golang-alpine镜像也有300多M,直接在golang-alpine中编译代码制作容器,随随便便就有四五百M了。但是go有个很好的特性就是,它可以编译成可执行文件。这个可执行文件可以不用安装go和依赖库,在环境中直接就可以运行。于是我们可以先在golang-alpine镜像中编译代码为可执行文件,再将可执行文件放到alpine镜...阅读全文

简书 2020-03-17 15:32:50 新垣结二

用 Golang 实现基于 Redis 的安全高效 RPC 通信

前言 RPC(Remote Procedure Call),翻译过来为“远程过程调用”,是一种分布式系统中服务或节点之间的有效通信机制。通过 RPC,某个节点(或客户端)可以很轻松的调用远端(或服务端)的方法或服务,就像在本地调用一样简单。现有的很多 RPC 框架都要求暴露服务端地址,也就是需要知道服务器的 IP 和 RPC 端口。而本篇文章将介绍一种不需要暴露 IP 地址和端口的 RPC 通信方式。这种方式是基于 Redis BRPOP/BLPOP 操作实现的延迟队列,以及 Golang 中的...阅读全文

掘金 2020年03月16日 MarvinZhang

golang自动缓存-对缓存策略的补充方案

缓存的目的都是为了减少跟数据库的直接交互,提高可用性。常用的方法如,对热点数据缓存、对部分数据预加载、对频繁操作的数据放到缓存中操作等等。 在开发的过程中,我尝试了一种自动处理缓存的方法,记录下,以供参考。 在业务代码,和ORM之间,引入一个模块(SaSql)。将对于数据库的操作,分为单行操作、list操作,即读写单条记录,和读写多条记录。 以list为例: SaSql获取list数据时,优先从缓存拿,没有则通过ORM从数据库拿。核心代码示意如下: //读取缓存 cacheParams := &...阅读全文

简书 2020-03-17 09:32:49 saxon134

【Golang】Gin框架之平滑停机

Gin的启动流程 今天我们介绍Gin平滑停机。首先我们看一下,Gin在的启动流程,如下图。所有的处理逻辑在Run()函数中,里面还是调用底层的TCP连接的listen函数。 gin_default_run.png Gin平滑停机流程 有时候我们服务器停机之前处理完之前接收的请求,这就是所谓优雅停机或者平滑停机。其流程见下图: gin_shutdown_gracefu.png Gin平滑停机示例代码 package main import ( "context" "github.com/gin-g...阅读全文

简书 2020-03-17 09:32:48 云枫随笔

leetcode_30

Golang: 思路:这题应该用map做会简单一些,但效率不会特别理想,这里补充个前缀树做法,当然,我使用前缀树其实是希望把它写成AC自动机的,这个留到下次吧。 代码如下: type Trie struct { ending bool next [26]*Trie } /** Initialize your data structure here. */ func Constructor() Trie { return Trie{} } /** Inserts a word into the t...阅读全文

简书 2020-03-17 09:32:47 淳属虚构

leetcode_41

Golang: 思路:这里补充个并查集实现,时间复杂度也是O(n),但空间复杂度会差很多,因为使用了哈希表。这题我陷入了个误区,忘记了使用题目给的数组空间是可以算作O(1)的,做的时候还在想,不用额外的空间,怎么可能呢? 代码如下: func firstMissingPositive(nums []int) int { mp:=make(map[int]int) for i:=0;i<len(nums);i++{ if nums[i]>0{ if mp[nums[i]]==0{ temp:=mp...阅读全文

简书 2020-03-17 09:32:46 淳属虚构

3.0 Golang - 子目录

0.0 总目录 3.1什么是Golang 3.1.1Golang开发环境搭建 ----------我是二级分割线---------- 3.2Golang基础 3.2.1Golang的变量与常量 3.2.3Golang的数据类型 3.2.3.1Golang的数据类型--数值型 3.2.3.2Golang的数据类型--字符串 3.2.3.3Golang的数据类型--数组 3.2.4Golang的程序结构 3.2.5Golang的运算符 3.2.6Golang的切片操作 3.2.7Golang的指针,...阅读全文

简书 2020-03-17 05:32:50 寒暄_HX

Go入门系列(六)I/O

目录: 一、终端I/O 二、文件I/O 一、终端I/O Go语言的终端I/O操作在基础包上有封装了多种,我们以fmt包为例: 如果为单次输入,可使用Scanln,如一次输入多个变量,可使用Scanf。 func main() { var name string var age int fmt.Print("请输入姓名:") _, _ = fmt.Scanln(&name) fmt.Print("请输入年龄:") _, _ = fmt.Scanln(&age) fmt.Printf("您的姓名为:...阅读全文

简书 2020-03-17 05:32:50 RabbitMask

删除排序链表中的重复元素

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路 1.这道题的核心思想是跳过值重复的结点。 2.可以设置一个哑结点,防止链表中全部的值都是重复的。 3.可以设置两个值,分别用于标记当前结点是否重复。 4.整体流程就是: 进入循环 保存当前结点 循环跳过重复结点 判断当前结点是否移动过,若移动过,需要跳过 Java代码实现 class Solution { p...阅读全文

简书 2020-03-17 05:32:49 youzhihua

Golang:使用 air 热重启

前言 在 Web 开发中,热重启在很多地方都会用到,它能极大提升开发效率,在我们修改完代码后保存,就能自动重启运行得到最新的代码的运行结果,比如前端开发的 HMR 就是一个典型的例子。 Go 语言中的热重启 在 Go 语言开发中实现热重启,推荐使用 air ,自 Go1.4 出来,官方就推荐使用 Go Modules 管理依赖,来进行模块化开发,那么我们就使用 Go Modules 构建我们的项目(注意:我使用的版本是 Go1.3)。首先创建一个项目目录如: go-restart ,然后进入目录...阅读全文

简书 2020-03-17 05:32:49 Rollover

项目经理的工具箱

PDCA PDCA循环是美国质量管理专家休哈特博士首先提出的,由戴明采纳、宣传,获得普及,所以又称戴明环。全面质量管理的思想基础和方法依据就是PDCA循环。PDCA循环的含义是将质量管理分为四个阶段,即计划(Plan)、执行(Do)、检查(Check)、处理(Act)。在质量管理活动中,要求把各项工作按照作出计划、计划实施、检查实施效果,然后将成功的纳入标准,不成功的留待下一循环去解决。这一工作方法是质量管理的基本方法,也是企业管理各项工作的一般规律。 PDCA的思想可有质量问题推广到所有问题的...阅读全文

go-channel初识

了解过go的都知道,go最为突出的优点就是它天然支持高并发,但是所有高并发情况都面临着一个很明显的问题,就是并发的多线程或多协程之间如何通信,而channel就是go中goroutine通信的‘管道’。 channel在go中时如何使用的 package main import ( "fmt" "os" "os/signal" "syscall" "time" ) var exit = make(chan string, 1) func main() { go dealSignal() exit...阅读全文

简书 2020-03-17 05:32:45 GGBond_8488

用 Golang 实现基于 Redis 的安全高效 RPC 通信

前言 RPC(Remote Procedure Call),翻译过来为“远程过程调用”,是一种分布式系统中服务或节点之间的有效通信机制。通过 RPC,某个节点(或客户端)可以很轻松的调用远端(或服务端)的方法或服务,就像在本地调用一样简单。现有的很多 RPC 框架都要求暴露服务端地址,也就是需要知道服务器的 IP 和 RPC 端口。而本篇文章将介绍一种不需要暴露 IP 地址和端口的 RPC 通信方式。这种方式是基于 Redis BRPOP/BLPOP 操作实现的延迟队列,以及 Golang 中的...阅读全文

Segmentfault 2020-03-22 11:32:34 MarvinZhang

使用Go语言创建WebSocket服务

今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务。第三部分实践环节我们使用了gorilla/websocket库帮助我们快速构建WebSocket服务,它帮封装了使用Go标准库实现WebSocket服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来,根据业务需求快速构建WebSocket服务。 Go Web 编程系列的每篇文章的源代码都打了对应版本的软件包,供大家参考。公众号中回复gohttp10获...阅读全文

掘金 2020年03月16日 kevinyan