随笔分类 - Golang
Google开源的编程语言,具有与生俱来的高并发处理能力,占用资源少,简洁高效
摘要:给定一个整数数组,找出平均数最大且长度为K的下标连续的子数组, 并输出该平均数。 如[1,12,-5,-6,50,3], k=4 返回 12.75 滑动窗口 func findMaxAverage(nums []int, k int)float64{ var sum = 0 var n = len(
阅读全文
摘要:两个有序数组nums1和nums2,将nums2合并到nums1中,使nums1成为一个有序数组。 初始化nums1和nums2的元素数量分别为m和n。 假设nums1的空间大小等于m+n(足够)。 一般解法,先拷贝,再排序 package main import ( "fmt" "sort" )
阅读全文
摘要:给定一个链表,判断链表中是否有环。 如果链表中存在某个节点,可以通过连续跟踪next指针再次到达该节点,则链表中存在环。 如果链表中存在环,则返回true,否则返回false。 直接遍历链表,使用set做标记位(标记是否已经到达过) package main import ( "fmt" ) typ
阅读全文
摘要:总共有n枚硬币,排成阶梯形状,满足第K行有K个硬币。 求形成的完整阶梯行的总行数。 例如n=5时, 1 1 1 1 1 此时完整的阶梯行的总行数为2,因为第3行未排满。 n为一个非负整数,且在32位有符号整型的范围内。 暴力破解 func arrangeCoins(n int)int{ for i:
阅读全文
摘要:递归 func fibRecursive(n int)int{ if n==0{ return 0 } if n==1{ return 1 } return fibRecursive(n-1) + fibRecursive(n-2) } 动态规划 func fibDynamic(n int)int{
阅读全文
摘要:给定一个升序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。 暴力破解,O(n2) map打标记,O(n),但是空间复杂度也为O(n) 二分查找(对于每
阅读全文
摘要:给定一个无序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。 暴力解法 map打标记 package main import ( "fmt" ) fun
阅读全文
摘要:整形数组nums,在数组中找出由三个数字组成的最大乘积,并输出这个乘积。(乘积不会越界。不考虑超过int的最大值) 重点考察:线性扫描。 暴力破解 先排序 全是正数或全是负数,则nums[length-1]*nums[length-2]*nums[length-3] 有负数有正数,则要么是nums[
阅读全文
摘要:递归版牛顿迭代 package main import ( "fmt" ) func newton(n int)int{ if n==0{ return 0 } return int(sqrt(float64(n), float64(n))) } func sqrt(x, n float64)flo
阅读全文
摘要:不能使用sqrt函数,得到x的平方根的整数部分(x>0)。 package main import "fmt" func mySqrt(x int) int { var left = 0 var right = x for left<=right{ mid := (left+right)/2 if
阅读全文
摘要:给定一个整数数组nums,编写一个能返回数组中心下标的方法。 中心下标:是数组的一个下标,其左侧所有元素相加的和等于右侧元素相加的和。 如果数组不存在,则返回-1.如果数组存在多个中心下标,返回最靠近左侧的那个。 注意:中心下标可能会出现在数组的两端。 package main import "fm
阅读全文
摘要:一个有序数组nums,原地删除重复出现的元素,使每个元素只能出现一次,返回删除后数组的新长度。 不能使用额外的数组空间,必须在原地修改输入的数组,并在使用O(1)额外空间的条件下完成(临时变量、指针等) 例如:输入:[0,1,2,2,3,3,3,4] 输出:5 重点考察:双指针算法 package
阅读全文
摘要:暴力破解 func isPrime(n int) bool{ for i:=2;i*i<=n;i++{ if n%i==0{ return false } } return true } func bf(n int)int{ sum := 0 for i:=2;i<n;i++{ if isPrime
阅读全文
摘要:给定一个单链表: 1->2->3->4->5, 反转后输出为: 5->4->3->2->1 PrintNodeList输出头节点及后续节点 ReverseNodeList1是迭代的方式 ReverseNodeList2是递归的方式 package main import ( "fmt" ) type
阅读全文
摘要:这里我们尝试将Protobuf和RPC结合在一起使用,通过 Protobuf来最终保证RPC的接口规范和安全。 Protobuf中最基本的数据单元是message,是类似Go语言中结构体的存在。在message中可以嵌套message或其他基础数据类型的成员。 首先创建hello.proto文件,其
阅读全文
摘要:Go语言内在的RPC框架已经支持在HTTP协议上提供RPC服务。但是框架的HTTP服务同样采用了内置的Gob协议,并且没有提供采用其他协议的接口,因此从其他语言依然无法访问,在前面的例子中,我们已经实现了在TCP协议之上运行jsonrpc服务,并且通过nc命令行工具成功实现了RPC方法调用。现在我们
阅读全文
摘要:标准库的RPC默认采用Go语言特有的Gob编码,因此从其他语言调用Go语言实现的RPC服务将比较困难。在互联网的微服务时代,每个RPC以及服务的使用者都可能采用不同的编程语言,因此跨语言是互联网时代RPC的一个首要条件。得益于RPC的框架设计,Go语言的RPC其实也是很容易实现跨语言的。 Go语言的
阅读全文
摘要:在涉及RPC的应用中,作为开发人员一般至少有3种角色:首先是服务器端实现RPC方法的开发人员,其次是客户端调用RPC方法的人员,最后也是最重要的是制定服务器端和客户端RPC接口规范的设计人员。为了简化将以上几种角色的工作全部放到一起,虽然看似实现简单,但是不利于后期的维护和工作的切割。 如果要重构H
阅读全文
摘要:Go语言的RPC包的路径为net/rpc,也就是放在了net包目录下面。因此我们可以猜测该RPC包是建立在net包的基础之上的 。 我们首先构造一个HelloService类型,其中的Hello()方法用于实现打印功能: 其中的Hello()方法必须满足Go语言的RPC规则 :方法只能有两个可序列化
阅读全文
摘要:web应用工作原理 具体代码 方式一:使用http.HandleFunc 方式二:使用http.Handle 结果
阅读全文

浙公网安备 33010602011771号