Go语言中文网 为您找到相关结果 11836

ARTS 第3周| LeetCode 140 Word Break| Go GC 历史| return defer 哪个先执行

ARTS ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。 本周内容 这一周的 ARTS 你将看到: Work Break II 这道题的评论区竟然有一半人都在吐槽测试例太恶心? 一篇文章了解 Golang GC 的“昨天、今天和明天”。 一个老 Gopher 常谈的问题,到底 return 和 defer 哪个先执行? 不要一开始就经陷入细节的地狱。 Algorithm 本周的算法题是 LeetCode 的 139.Work Break 和 140.Work Break I...阅读全文

博文 2020-06-01 10:32:45 casmo澎湃哥

golang控制结构

go中只有一种循环控制结构, for。 没有do或while循环。 Go的循环有三种形式,只有其中的一种使用分号 for init; condition;post { } //普通的循环 sum := 0 for i := 0; i < 10; i++ { sum += i } for condition {} //和while一样 for {} //死循环 break和continue break可提前退出循环,终止当前的循环, 也可在break后指定标签, 用标签决定哪个循环被终止 //break可提前退出循环,终止当前的循环 for i := 0 ; i < 10 ; i++ { i f i > 5 { break 终止这个循环,只打印 0 到 5 } println(i) } //当...阅读全文

博文 2019-12-30 16:32:45 程序小白菜

三言两语说清楚go语言的module

查看go的版本 go version go从1.11版本开始支持module功能。 如果go的版本是1.11和1.12,项目位于$GOPATH/src里面的时候,module功能不会生效,即使你目录中有go.mod文件也无济于事。 如果go的版本是>=1.13,无论你的项目路径在哪里,只要项目中有go.mod文件,module功能就会生效。 设置环境变量 我的go语言版本是1.11.5,是支持module功能的,但是需要手动开启,方式是设置环境变量,即export GO111MODULE=on,这个只在当前终端生效。 开发一个模块 假设我们开发的模块最终会上传到https://gitee.com/xxfaxy/go-module-test这个地址,我们记为A。 在$GOPATH/src之外的...阅读全文

博文 2020-02-29 22:32:39 xxfaxy

11.函数

Go语言基础之函数 Golang 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。 函数 Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 函数定义 Go语言中定义函数使用func关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔。 返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用()包裹,并用,分隔。 函数体:实现指定功能的代码块。 我们先来定义一个求两个数之和的函数: ...阅读全文

博文 2020-04-08 07:32:51 雪上霜

leetcode_24

Golang: 思路:不要总是递归,没啥意思,循环也可以解决的嘛。这个自己画画过程图也就结了,不是很难。 代码如下: func swapPairs(head *ListNode) *ListNode { if head==nil { return nil } if head.Next==nil{ return head } res:=head.Next temp1:=head temp2:=head.Next var temp3 *ListNode for temp2!=nil { temp1.Next=temp2.Next temp2.Next=temp1 if temp3!=nil { temp3.Next=temp2 } temp3=temp1 if temp1.Next!=nil {...阅读全文

博文 2020-02-03 19:32:42 淳属虚构

Go的条件语句「遇到问题该怎么办?先假设、后执行」

IF 条件语句 package main import "fmt" func main() { var A, B int = 520, 1314 if A > B { fmt.Println("A > B") } if A < B { fmt.Println("B < A") } fmt.Println("程序到此运行结束......") } /* 输出: B < A 程序到此运行结束...... */ 复制代码上面我们声明两个 int 变量 A = 520 和 B = 1314 第一个 IF 语句后面跟着的是 A > B,这个结果得出 False,在这里 A 是小于B的,所以括号里的内容不执行 第二个 IF 语句后面跟着的是 A < B,这个结果得出 True,所以执行 IF 括号中的内容...阅读全文

博文 2020-03-30 16:34:22 陈九礼

golang中接口的面向对象(二)--继承

在上一节 golang中接口的面向对象(一)--多态特征中,我们学习了galang中的多态,参考https://blog.51cto.com/91235688/2499405 继承那么这一节中,我们继续用上一节中的例子,来学习继承。我们修改上一节中的示例代码,如下所示:type geometry interface { sayHi() //geometry 只有一个方法sayHi()}type rect struct { geometry //这里使用匿名字段,使得rect 继承了 geometry 类型 len, wid float32}func (r rect) sayHi() { //这里rect 作为继承者,重写了sayHi方法 fmt.Println("i am a rect")}...阅读全文

博文 2020-05-30 23:34:00 roddger

25. 学习 Go 协程:详解信道/通道

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道,我把他叫做...阅读全文

博文 2020-06-02 11:35:02 王一白

leetcode_1221

Golang: 思路:这题题意有点问题,输入也不是平衡字符串,对输出也有要求。简单来说,定义一个sum=0,从0开始往下走,找到一个平衡字符串,sum+1。然后从剩下的字符串里继续走,直到找完整个字符串为止。 代码如下: func balancedStringSplit(s string) int { i:=0 count:=0 sum:=0 for i<=len(s)-1{ if s[i]=='L'{ sum++ }else{ sum-- } if sum==0 { count++ } i++ } return count ...阅读全文

博文 2020-02-14 00:32:56 淳属虚构

leetcode_357

Golang: 思路:简单DP,这里可以注意到,当n>10,即这个数字的长度>10后,所有这个长度的数字都会有重复的现象发生,所以也可以直接穷举。 代码如下: DP的放在这里,双百时空间复杂度 func countNumbersWithUniqueDigits(n int) int { if n<0{ return 10 } arr1:=make([]int,11) arr1[0],arr1[1]=1,10 temp:=9 flag:=9 for i:=2;i=10 { return arr1[10] }else{ return arr1[n] } } 穷举的放在这...阅读全文

博文 2020-02-21 14:32:44 淳属虚构

第五章 九析带你轻松完爆 go - 字符串操作

目录1 前言2 字符串操作 2.1 字符串声明与赋值 2.2 字符串长度 2.3 字符串轮询 2.4 字符串中字符替换1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 字符串操作2.1 字符串声明与赋值 字符串声明和赋值使用 := 操作符。代码如下:package mainimport "fmt"func main() { s := "hello jiuxi" fmt.Println(s)}2.2 字符串长度 获取字符串长度可以使用函数 len()。但是英文字符和中文字符 len() 的处理结果不同,英文字符长度为 1,中文字符长度为 3。代码如下:package mainimport "fmt"func main() { enStr := "h" cnS...阅读全文

博文 2020-02-29 22:33:11 九析

leetcode_56

Golang: 思路:找到插入区间与原区间的交集,一次遍历,然后统一处理。 代码如下: func insert(intervals [][]int, newInterval []int) [][]int { i:=0 flag:=0 for i=intervals[i][0] { if newInterval[0]<=intervals[i][1]{ flag=1 break }else{ i++ } }else{ break } } j:=i flag2:=0 for j=intervals[j][0] { if newInterval[1]<=int...阅读全文

博文 2020-03-19 15:33:55 淳属虚构

Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]

Go是一门简单有趣的语言,但与其他语言类似,它会有一些技巧。。。这些技巧的绝大部分并不是Go的缺陷造成的。如果你以前使用的是其他语言,那么这其中的有些错误就是很自然的陷阱。其它的是由错误的假设和缺少细节造成的。 如果你花时间学习这门语言,阅读官方说明、wiki、邮件列表讨论、大量的优秀博文和Rob Pike的展示,以及源代码,这些技巧中的绝大多数都是显而易见的。尽管不是每个人都是以这种方式开始学习的,但也没关系。如果你是Go语言新人,那么这里的信息将会节约你大量的调试代码的时间。 目录 初级篇 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accidental Variable Shadowing...阅读全文

博文 2020-05-19 10:36:25 开发者阿俊

golang中slice处理遇到的一个关于引用的坑

前两天在解扫地机器人算法的问题时,遇到一个坑 部分代码如下: func move2(startPoint Point) [][]Point { allFootPrint := [][]Point{{startPoint}} for i := 0; i < N; i++ { allNewFootPrint := make([][]Point, 0) for len(allFootPrint) > 0 { curFootPrint := allFootPrint[len(allFootPrint)-1] allFootPrint = allFootPrint[:len(allFootPrint)-1] last := curFootPrint[len(curFootPrint)-1] for _...阅读全文

博文 2019-08-22 15:33:51 ustb80

排序(二)

归并排序 归并排序使用分治思想,分支算法一般都是用递归来实现的。 归并排序是一个稳定的排序算法,在merge过程中可以保证值相同的元素在合并前后顺序不变; 归并排序的时间复杂度是O(nlogn),他的执行效率和排序的原始数组的有序成都是无关的,任何情况的时间复杂度都是O(nlogn) 但是归并排序在合并的时候需要借助额外的存储空间,空间复杂度为O(n),所以不是原地排序算法; 快速排序 如果快排的partition函数不使用额外内存空间来进行,则可以做到原地排序; 快排是不稳定的; 虽然快速排序最坏情况的时间复杂度是O(n2),但是平均时间复杂度为O(nlogn),而且最坏情况的概率很小,可以通过合理地选择pivot来避免这种情况; 代码实现(Golang) type Sort struct...阅读全文

博文 2019-12-23 01:32:53 元气蛋蛋

Go Web 编程之 静态文件

概述 在 Web 开发中,需要处理很多静态资源文件,如 css/js 和图片文件等。本文将介绍在 Go 语言中如何处理文件请求。 接下来,我们将介绍两种处理文件请求的方式:原始方式和http.FileServer方法。 原始方式 原始方式比较简单粗暴,直接读取文件,然后返回给客户端。 func main() { mux := http.NewServeMux() mux.HandleFunc("/static/", fileHandler) server := &http.Server { Addr: ":8080", Handler: mux, } if err := server.ListenAndServe(); err != nil { log.Fatal(err) } } 复制代码...阅读全文

博文 2020-01-14 11:34:29 darjun

使用 gorilla/mux 增强 Go HTTP 服务器的路由能力

今天这篇文章我们将会为我们之前编写的HTTP服务器加上复杂路由的功能以及对路由进行分组管理。在之前的文章《深入学习用 Go 编写HTTP服务器》中详细地讲了使用net/http进行路由注册、监听网络连接、处理请求、安全关停服务的实现方法,使用起来非常方便。但是net/http有一点做的不是非常好的是,它没有提供类似URL片段解析、路由参数绑定这样的复杂路由功能。好在在Go社区中有一个非常流行的gorilla/mux包,它提供了对复杂路由功能的支持。在今天这篇文章中我们将探究如何用gorilla/mux包来创建具有命名参数、GET/POST处理、分组前缀、限制访问域名的路由。 安装gorilla/mux包 我们在之前写的HTTP服务的代码根目录,使用go get命令从GitHub安装软件包,如...阅读全文

博文 2020-02-06 10:34:19 kevinyan

leetcode120

Golang: 思路:这题是基础DP,想一想就出来了,但是槽点满满,题目对于相邻这个定义的解释太扯淡了。搬我的题解过来吧。 初始: [2], [3,4], [6,5,7] 第一轮过后:3+2=5,4+2=6 [2], [5,6], [6,5,7] 第二轮过后:6+5=11,[5+5=10,5+6=11,取小值10],7+6=13 [2], [5,6], [11,10,13] 代码如下: func minimumTotal(triangle [][]int) int { if len(triangle)==1 { return triangle[0][0] } for i:=1; i阅读全文

博文 2020-02-21 14:32:50 淳属虚构

第三章 九析带你轻松完爆 go - 变量声明

1 前言 go 语言跟很多编译型语言一样,在使用变量前首先需要声明。声明方式有两种:单行声明和批量声明,声明关键字为 var,且如果声明局部变量而不使用则会编译报错。 同时需要注意的是,go 语言语句并没有分号“;”做结尾,并且单行声明语法如下:var var_name var_type 例如:var name string 批量声明语法如下:var ( name string age int gender string)2 代码样例 如下是 go 语言使用过程中一个代码样例:package mainimport "fmt"func main() { var username string = "mark" var password string = "helloworld" var ( a...阅读全文

博文 2020-02-23 23:33:18 九析

和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 示例: 输入:target = 9 输出:[[2,3,4],[4,5]] 思路 1.这道题可以使用“双指针”的思想解决。 2.设置两个指针,分别指向首位两个元素。 当nums[low]+nums[high]==target时,返回双指针对应的数字 当 nums [ low] > target - nums [ high] 时,说明右边的值过大,high- 1 当 nums [ low] < target - nums [ high] 时,说明左边的值过小,low+ 1 Java代码实现 public class Solution { public int...阅读全文

博文 2020-03-03 15:33:03 youzhihua

leetcode_25

Golang: 思路:K个一组翻转列表,其实和k个一组翻转数组本质是一样的 代码如下: func reverseKGroup(head *ListNode, k int) *ListNode { if k<=1{ return head } node:=head var arr []*ListNode for i:=0;i0; i-- { arr[i].Next=arr[i-1] } } arr[0].Next=reverseKGroup(node,k) return a...阅读全文

博文 2020-03-16 09:32:47 淳属虚构

让我们一起啃算法----移除元素

移除元素(Remove-Element) 题干如下: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3,0,4,2], val = 2,函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需...阅读全文

博文 2020-05-07 10:32:47 三斤和他的朋友们

调度相关的重要数据结构

声明 下面的分析均基于Golang1.14版本。 以下数据结构均做了裁剪,只留了部分调度密切相关的重要结构。 一、G的定义 裁剪了大部分字段,后面填坑把其它字段的作用及用途整理。 type g struct { stack stack // offset known to runtime/cgo G的栈信息含栈的起始和终止地址 m *m // current m; offset known to arm liblink 运行时绑定的M sched gobuf // 运行时的上下文 goid int64 // g id 唯一的标识id } type stack struct { lo uintptr hi uintptr } type gobuf struct { sp uintptr // ...阅读全文

博文 2020-05-11 07:32:41 不争_900c

图解kubernetes Kubelet驱逐管理关键实现

驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有...阅读全文

博文 2020-02-25 13:34:30 8小时_2020

leetcode_169

Golang: 思路:很早以前做过的简单题,但那会儿还不知道有简单的方法。多数元素,是指元素的数目大于数组长度的一半。那么,如果让每一个多数元素和其他任意元素抵消,那么最后剩下来的还是多数元素。 代码如下: func majorityElement(nums []int) int { temp,count:=-1,0 for i:=0;ilen(nums)/2{ return count } if count==0{ temp=-1 } } return nums[temp] ...阅读全文

博文 2020-03-13 11:32:59 淳属虚构

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 trie. */ func (this *Trie) Insert(word string) { temp:=this for _,v:=range word { nxt:=v-'a' if temp....阅读全文

博文 2020-03-17 09:32:47 淳属虚构

第三十一章:JWT与Golang

JWT基础概念 JWT是 json web token的简称 其中的 token 是令牌的意思, 其实这个令牌实质上是服务端生成的一段有规则的字符串 我们看看JWT官方自己对其的定义 JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be...阅读全文

博文 2020-04-05 20:32:50 captain89

手把手golang教程——数组与切片

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第五篇,这一篇我们将会了解golang中的数组和切片的使用。 数组与切片 golang当中数组和C++中的定义类似,除了变量类型写在后面。 比如我们要声明一个长度为10的int型的数组,会写成这样: var a [10]int 复制代码 数组的长度定义了之后不能改变,这点和C++以及Java是一样的。但是在我们日常使用的过程当中,除非我们非常确定数组长度不会发生变化,否则我们一般不会使用数组,而是使用切片(slice)。 切片有些像是数组的引用,它的大小可以是动态的,因此更加灵活。所以在我们日常的使用当中,比数组应用更广。 切片的声明源于数组,和Python中的list切片类似,我们通过指定左右区间的范围来声...阅读全文

博文 2020-05-17 22:34:25 承志

24. 理解 Go 语言中的协程:goroutine

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 说到Go语言,很多没接触过它的人,对它的第一印象,一定是它从语言层面天生支持并发,非常方便,让开发者能快速写出高性能且易于理解的程序。 在 Python (为Py为例,主要是我比较熟悉,其他主流编程语言也类似)中,并发编程的门槛并不低,你要学习多进程,多线程,还要掌握各种支持并发的...阅读全文

博文 2020-06-01 08:33:29 Python编程时光

9. Go 语言流程控制:switch-case

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 上一篇讲了 if -else 条件语句,今天先来讲讲 switch - c...阅读全文

博文 2020-05-01 18:32:40 Python编程时光

Golang筑基 —— 语言结构、语法篇

Goalng结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 下面以代码示例说明: package main import "fmt" func main(){ //声明变量a var a string //给变量a赋值 a = "hello world!" //输出a fmt.Println(a) } package :包名,Golang中所有的文件都要有package,用于标记文件的内容属于哪个包;包分为两类main包和非main包,一个程序只能有一个main包。包之间不能交叉引用,类似于c/c++不能交叉引用.h文件。 import :引用的包,可以为自定义的包,也可以是系统包,fmt就是系统包,实现输出的功能 main:主函数,只有mai...阅读全文

博文 2020-01-07 19:32:43 技术修仙

leetcode_739

Golang: 思路:栈结构可以很好的解决这个问题,用栈来记录一个递增的序列,栈内的元素为对应的元素下标即可。 代码如下: func dailyTemperatures(T []int) []int { res:=make([]int,len(T)) var stack []int i:=len(T)-1 for i>=0{ if len(stack)==0{ stack=append(stack,i) }else{ for true{ if len(stack)!=0&&T[i]>=T[stack[len(stack)-1]] { stack=stack[:len(stack)-1] }else{ if len(stack)!=0 { res[i]=stack[len(stack)-1]-...阅读全文

博文 2020-03-11 13:33:09 淳属虚构

3.变量和常量

Go语言基础之变量和常量 | Golang 变量和常量是编程中必不可少的部分,也是很好理解的一部分。 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range ...阅读全文

博文 2020-04-04 09:32:48 雪上霜

12. Go 语言流程控制:defer 延迟语句

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 今天是最后一篇讲控制流程了,内容是 defer 延迟语句,这个在其他编程语...阅读全文

博文 2020-05-07 09:32:42 Python编程时光

leetcode_1005

Golang: 思路:这题还是贪心解法,如果一个数组中有负数,先翻转负数,如果负数的数目大于等于k,那么把所有最小的负数翻转完即可。如果不是,那么我们就要对此时全部是正数的数组进行翻转,那么翻转的是当前数组中最小的元素。 代码如下: func largestSumAfterKNegations(A []int, K int) int { sort.Ints(A) temp,k:=0,K if A[0]<0{//代表有负数,那么先翻转负数部分 i:=0 for ;i阅读全文

博文 2020-03-13 11:32:56 淳属虚构

编程语言的一些基础概念(三):面向对象

在前面两篇中,主要讲了函数式编程语言的一些基础概念。这篇是 Coursera Programming Languages, Part C 的总结,通过 Ruby 介绍面向对象编程里的一些概念。了解这些概念能让你在上手任何一门新的面向对象语言时,都更加得心应手。 虽然用的是 Ruby,但是不会涉及很深的 Ruby,即使不懂 Ruby,读下来应该没问题。对于已经了解面向对象编程的朋友,可以考虑直接跳到子类和继承那部分,或许你会有一些新的启发。 面向对象编程 & Ruby 面向对象编程(Object Oriented Programming)简称 OOP,像 Java,C++ 等语言的主要编程模式都是面向对象的。OOP 主要是通过 对象(Object) 来抽象表示,比如说平面上的一个点,可以抽象表...阅读全文

博文 2019-07-01 00:32:42 闭眼卖布

golang初探与命令源码分析

前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main.go的目录下执行go run main.go却报hello函数没有定义的错: image 代码结构如下: **gopath ---- src** **----gohello** **----hello.go** ** ----main.go** main.go如下: package main import "fmt" func main() { fmt.Println("my name is main") hello() } hello.go如下: package main import "...阅读全文

博文 2019-10-18 01:32:53 aside section ._1OhGeD

前端工程师吐后端工程师(第九讲)——最不擅长的数据库操作

第八讲中我们介绍了如果使用Gin写一些常用的接口,本讲我们主要介绍一下数据库如何操作。这一讲没有具体页面,可能对于前端工程师会不太习惯。首先我们要单件一个mysql数据库环境。如果不会的话可以参考这个教程https://www.jianshu.com/p/3a0de5da49f3,在搭建完成MySQL,并且启动MySQL之后。数据的管理员账户名设置成root,数据库密码设置为00000000。因为后续我们在代码中使用的数据库相关代码,会以这个为准.我们可以通过mysql -h 127.0.0.1 -P 3306 -u root -p 000000000 指令来连接刚刚搭建在本机上的数据库。127.0.0.1为本机IP,3306为数据库具体端口,root为数据库用户名,000000000为数据...阅读全文

博文 2020-01-08 19:32:47 陈辰CC老师

通俗易懂:说说 Python 里的线程安全、原子操作

首发于微信公众号:Python编程时光 在线博客地址:python.iswbm.com/en/latest/c… 在并发编程时,如果多个线程访问同一资源,我们需要保证访问的时候不会产生冲突,数据修改不会发生错误,这就是我们常说的 线程安全 。 那什么情况下,访问数据时是安全的?什么情况下,访问数据是不安全的?如何知道你的代码是否线程安全?要如何访问数据才能保证数据的安全? 本篇文章会一一回答你的问题。 1. 线程不安全是怎样的? 要搞清楚什么是线程安全,就要先了解线程不安全是什么样的。 比如下面这段代码,开启两个线程,对全局变量 number 各自增 10万次,每次自增 1。 from threading import Thread, Lock number = 0 def target()...阅读全文

博文 2020-05-14 19:34:39 王一白

go 的程序控制

go 的程序控制大致分成三种 if for case 语句 1、 if 循环 if-else 语句之间可以有任意数量的 else if。条件判断顺序是从上到下。如果 if 或 else if 条件判断的结果为真,则执行相应的代码块。 如果没有条件为真,则 else 代码块被执行。 语法结构 if condition{}else if condition{ }else{ } 定义示列 package main import "fmt" func iftest() { score :=61 if score > 60{ fmt.Println("成绩合格") } else if score >90{ fmt.Println("成绩优秀") }else if score<0 { fmt.Print...阅读全文

博文 2020-01-11 17:33:11 水滴石川1

leetcode_59

Golang: 思路:如果你已经做过了leetcode_54,那相比你对于螺旋已经有了一定的了解。这题的思路很简单,先初始化一个二维矩阵,再赋值。这里和leetcode_54不一样的是,建立的矩阵是n*n矩阵,所以只需要一直螺旋下去就可以了。那么螺旋赋值到什么时候结束呢?答案是当赋的值到达n*n后,就可以结束了,因为总共就赋值那么多次,也不用再去考虑溢出。 代码如下: func generateMatrix(n int) [][]int { res:=make([][]int,n) for i:=0; i阅读全文

博文 2020-01-28 17:32:38 淳属虚构

go 函数 学习笔记

什么是函数有输入、输出,用来执行特定功能的代码块func functionnname([partmeternam type]) [return type] { // function body }函数的几种类型无参数返回值的函数有参数返回值的函数 defer 语句 1、无参数返回值的函数package main import "fmt" func functiontest1(a,b int) int { return a + b // 输出 15 } func main() { sum1 :=functiontest1(12,3) fmt.Println(sum1) } 2、有参数返回值的函数 多返回值package main import "fmt" func functiontest2(...阅读全文

博文 2020-04-17 19:33:12 水滴石川1

让我们一起啃算法----有效的括号

有效括号(Valid-Parentheses) 题干如下: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 3.注意空字符串可被认为是有效字符串。示例 1: 输入: "()" 输出: true示例 2: 输入: "()[]{}" 输出: true示例 3: 输入: "(]" 输出: false示例 4: 输入: "([)]" 输出: false示例 5: 输入: "{[]}" 输出: true来源:力扣 解题思路 这题是我大学老师教 栈 这种数据结构的应用场景时讲解的题目,稍微有一丢丢怀念。解题思路很简单:从左到右遍历字符串,遇到 左括号: [ ( { ...阅读全文

博文 2020-05-03 22:32:41 三斤和他的朋友们

leetcode_860

Golang: 思路:注意这里并不可以把所有钱都收上来然后依次找掉,所以必须要一个人一个人的解决。这里用了一点贪心,即在处理20美元上,优先选择10+5的处理方法,其次是5+5+5。 闲话:写完这题我的简单题就完成了170道了,后面会转去挑一些中等题做。 代码如下: func lemonadeChange(bills []int) bool { if len(bills)==0{ return true } m5,m10:=0,0 for i:=0;i0 { m5-- m10++ }else{ return false } }else { if m10>...阅读全文

博文 2020-02-04 11:32:41 淳属虚构

12. Go 语言流程控制:defer 延迟语句

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 今天是最后一篇讲控制流程了,内容是 defer 延迟语句,这个在其他编程语言里好像没有...阅读全文

博文 2020-05-07 11:36:18 王一白

图解kubernetes调度器SchedulingQueue核心源码实现

SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要讨论SchedulingQueue的设计与实现的各种实现, 了解探究其内部实现与底层源码,本系列代码基于kubernets1.1.6分析而来,图解主要位于第二部分 SchedulingQueue设计 队列与优先级 队列与场景 类型 描述 通常实现 队列 普通队列是一个FIFO的数据结构,根据元素入队的次序依次出队 数组或者链表 优先级队列 优先级队列通常是指根据某些优先级策略,高优先级会优先被获取 数组或者树 其实在大多数的调度场景中,大多都是采用优先级队列来实现,优先满足优先级比较高的任务或者...阅读全文

博文 2020-01-13 11:34:24 代码仔

leetcode_763

Golang: 思路:这题贪心解法其实很好想,不过我最终实现了O(n)的时间复杂度解法,执行效果上在时间复杂度上超过100%。 代码如下: func partitionLabels(S string) []int { var res []int arr:=make([][]int,26) used:=make([]int,26) for i:=0;i阅读全文

博文 2020-03-13 11:32:58 淳属虚构

leetcode_86

Golang: 思路:搬运我的题解 这题在第一次做的时候嫌麻烦,直接用数组解决了,时间百分百,空间百分之五,还是有些不满意的,就用双指针重新写了下,然后来到了双百效率 思路在代码里有提及,就不再详述了,简单说一下这里替换的含义 1->4->3->2->5->2, x = 3 发生替换的时候 p1 p2 p3 1->4->3->2->5->2 这里怎么替换,就是: 先从原链表里提取出p3, 然后将p3插到p1及p1后面的元素之间, 更新p1,更新p3 代码如下: func partition(head *ListNode, x int) *ListNode { if head==nil||head.Next==nil { return head } //什么时候需要替换呢? //当我找到某个元...阅读全文

博文 2020-03-01 15:32:45 淳属虚构

记Python “用户环境”的一次完美应用

首发于个人公众号:《Python编程时光》 我的博客原文:python.iswbm.com/en/latest/c… 我的 Github:github.com/iswbm/Pytho… 在之前写过一篇关于虚拟环境使用的文章 :Python 虚拟环境使用指南. 但是还没有好好的介绍一下 Python 的用户环境,原因是自己一直没遇到要使用 用户环境 的使用场景,所以就一直懒得写。 恰巧这两天,自己遇到了一个使用用户环境的体验可以完爆虚拟环境的案例,就拿出来分享一下。 1. 我的使用背景 公司有数以万计的服务器,为了对实现对访问记录进行集中管理以及出于安全考虑,每台服务器都有访问限制,必须使用公司的跳板机才能登陆。 每个公司的员工在跳板机上都有自己的用户、 家目录,对于很多需要 root 权限的...阅读全文

博文 2020-04-29 14:36:32 王一白

第四章 九析带你轻松完爆 go - 常量使用

1 单行声明 常量单行声明使用的语法如下。常量声明的位置可以是全局(所有函数外部)、局部(函数内部)。// PI is for math caculateconst PI = 3.142 批量声明 批量声明的方法跟变量声明类似,语法如下:const ( MON = 1 TUD = 2 WEN = 3 )3 iota 使用 iota 是常量的初始值定义符。默认值是 0。但是如果在批量常量定义的时候,出现在第几行,值等于“行号-1”。3.1 依次递增 代码如下:const ( t1 = iota t2 t3) 输出结果:0123.2 嵌入匿名常量 匿名常量用 _ 表示,代码如下:const ( t1 = iota t2 _ t3) 输出结果:0133.3 批量声明中多次使用 代码如下:const...阅读全文

博文 2020-02-23 22:33:15 九析