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

通俗易懂:说说 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 九析

leetcode_695

Golang: 思路:每日一题之BFS,岛屿的最大面积,DFS和BFS都可以做,我用了BFS和栈。 代码如下: func maxAreaOfIsland(grid [][]int) int { res:=0 if len(grid)==0{ return res } for i:=0;i阅读全文

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

ARTS 第1周 LeetCode 78 Subsets | Golang 二维 slice 注意事项 | Go 官网文档

ARTS ARTS 是陈浩(网名”左耳朵耗子“)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。 算法 LeetCode 78 Subsets & 90 Subsets II 先看一下题目要求。 78.Subsets Given a set of **distinct** integers, _nums_, return all possible subsets (the power set). Note: The solution set must not contain duplicate subsets...阅读全文

博文 2020-05-18 10:32:45 casmo澎湃哥

Leetcode 876. Middle of the Linked List

Given a non-empty, singly linked list with head node head, return a middle node of linked list. If there are two middle nodes, return the second middle node. Example 1: Input: [1,2,3,4,5] Output: Node 3 from this list (Serialization: [3,4,5]) The returned node has value 3. (The judge's serialization of this node is [3,4,5]). Note that we returned a...阅读全文

博文 2019-07-24 19:32:38 大龄码农的技术点滴

leetcode_131

Golang: 思路:DP预处理,递归加回溯,这题要想效率不错,还是有些难度的 代码如下: func partition(s string) [][]string { if len(s)==0{ return [][]string{{}} } dp:=make([][]int,len(s)) for k,_:=range dp{ dp[k]=make([]int,len(s)) } for i:=len(s)-1;i>=0;i--{ for j:=i;j1 { if dp[i+1][j-1]==1&&s[i]==s[j] { dp[i]...阅读全文

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

Go 每日一库之 go-flags

简介 在上一篇文章中,我们介绍了flag库。flag库是用于解析命令行选项的。但是flag有几个缺点: 不显示支持短选项。当然上一篇文章中也提到过可以通过将两个选项共享同一个变量迂回实现,但写起来比较繁琐; 选项变量的定义比较繁琐,每个选项都需要根据类型调用对应的Type或TypeVar函数; 默认只支持有限的数据类型,当前只有基本类型bool/int/uint/string和time.Duration; 为了解决这些问题,出现了不少第三方解析命令行选项的库,今天的主角go-flags就是其中一个。第一次看到go-flags库是在阅读pgweb源码的时候。 go-flags提供了比标准库flag更多的选项。它利用结构标签(struct tag)和反射提供了一个方便、简洁的接口。它除了基本的功...阅读全文

博文 2020-01-13 21:32:41 darjun

leetcode_1338

Golang: 思路:贪心,首先,我们需要知道每个数字在数组中出现的数目,然后将这些数目做个排序,每次都删去出现最多次数的数目,直到这些删除的数目之和超过了数组长度的一半。 代码如下: func minSetSize(arr []int) int { mp:=make(map[int]int) for _,v:=range arr{ mp[v]++ } var val []int for _,v:=range mp{ val=append(val,v) } sort.Ints(val) temp:=0 for i:=len(val)-1;i>=0;i--{ temp+=val[i] if temp>=len(arr)/2{ return len(val)-i } } return 0 ...阅读全文

博文 2020-03-14 21:32:47 淳属虚构

leetcode_23

Golang: 思路:晚上的效率很低,写代码的感觉也差到了极点。。。 代码如下: func mergeKLists(lists []*ListNode) *ListNode { length:=len(lists) if length==0{ return nil } for length!=1{ for i:=0;i阅读全文

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

leetcode_455

Golang: 思路:算是贪心吧,就是尽可能喂饱更多的孩子。但是非常简单,我们的思路就是,先喂食量最小的孩子,并且用尽可能小的饼干去喂饱这些孩子。 实现思路:先对两个数组排序,双指针,最小的饼干去喂最小的孩子,行的话,双指针各向后一位,不行的话,用下一块饼干再去尝试。直到所有孩子都被喂饱,或者所有饼干都被试过了。 代码如下: func findContentChildren(g []int, s []int) int { if len(g)==0||len(s)==0 { return 0 } sort.Ints(g) sort.Ints(s) i,j:=0,0 res:=0 for i=s[i] { res++ i++ } j++ } ...阅读全文

博文 2020-01-30 21:32:45 淳属虚构

leetcode_437

Golang: 思路:这题没有好的思路,双重递归吧,第一次拿到所有节点,第二次对所有节点进行递归,看看有没有路径符合题目要求。这里讲下我最初的思路:我最开始想的是,把每一条从根节点到叶子节点的路径都提取出来(以数组的形式),然后去对数组做处理,这样会不会效率高一些。后面思考不难发现,这样如果可以实现,会有很多重复的路径被算进总和。所以,这题可能就只剩下暴力的求解思路了。 再插一句,递归这东西,在树结构里真的是无往不利。 代码如下: func pathSum(root *TreeNode, sum int) int { if root==nil { return 0 } var nodes []TreeNode traverse(root,&nodes) res:=0 for _,v:=ran...阅读全文

博文 2020-02-01 19:32:45 淳属虚构

leetcode_429

Golang: 思路:广度优先实现层序遍历 代码如下: func levelOrder(root *Node) [][]int { var res [][]int var arr[]*Node if root!=nil{ arr=append(arr,root) for len(arr)!=0{ temp:=len(arr) var level []int for i:=0;i阅读全文

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

LeetCode1.两数之和

问题描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 解题思路: 1.暴力法 利用两层循环查找和为目标值的两个整数,并返回下标。 2.HashMap两层循环 先将数组中的值和下标作为key和value存到HashMap中,然后遍历数组,计算差值是否在HashMap中,若存在,返回对应两个目标值的下标。 注意:有缺陷,对于数组中存在相同元素,得到的下标,有问题。例如[3...阅读全文

博文 2020-05-26 19:32:41 xeniogd

Golang 学习笔记:程序结构

Go语言的程序元素 Go语言包含了五种程序符号,分别是标识符(identifier)、关键字(keyword)、运算符(operator)、分隔符(delimiter)与字面量(literal)。这五种程序元素组合成各种表达式和语句。 标识符标识符是用于标识变量、函数或任何用户自定义项目的名称(程序实体) 标识符可分为两类,一类是用户定义的标识符,作为程序实体存在;另一类是预定义标识符,它们在Go语言中的源代码被声明(如数据类型)。还有一个特殊的标识符,叫空标识符,记作 "_",一般用在变量声明与包的导入中。例如,在Go语言程序中,若存在一个没有使用的变量a,那么编译时就会报错,因为Go语言要求存在的程序实体必须被使用,这时就可以使用这样一句 _=a 的代码,编译器就会认为已经使用了变量a(...阅读全文

博文 2020-06-03 13:32:41 sunlingbot

leetcode_994

Golang: 思路:广度优先搜索,这里需要注意,当我们将目前新鲜但下一轮即将腐烂的橘子添加入我们的栈时,我们最好能改变下这个橘子的状态,防止重复搜索 代码如下: func orangesRotting(grid [][]int) int { var stack [][]int freshO,res:=0,0 for i:=0;i阅读全文

博文 2020-03-04 10:32:43 淳属虚构

开发环境-windows

一、下载 golang ,下载后点击安装 国内下载地址 https://studygolang.com/dl 二、配置环境变量 GOPATH : go的工作目录,可以自定义,在该目录下一般需要创建3个文件夹,也可以只创建src文件夹 bin : go编译后的可执行的二进制文件 pkg:go编译生成的中间文件 src : go资源文件,存放第三方库和项目代码 注: 使用 go get 下载第三方包时需要进入src目录下再执行 go get 命令 GOROOT : go的安装目录,eg: D:\go GOBIN : go安装目录下的 bin 目...阅读全文

博文 2020-06-08 01:33:18 hellocassiel

leetcode_541

Golang: 思路:暴力算法 代码如下: func reverseStr(s string, k int) string { if len(s)<=1 { return s } bytes := []byte(s) reverseBytes(bytes,0,k) return string(bytes) } func reverseBytes(arr []byte,i int,k int) { j:=k-1+i //剩余字符串小于k if j>len(arr)-1 { j=len(arr)-1 swapBytes(arr,i,j) return } //剩余字符串大于k小于等于2k if j+k>=len(arr)-1 { swapBytes(arr,i,j) return }else {...阅读全文

博文 2020-02-01 03:32:56 淳属虚构

leetcode_409

Golang: 思路:这题就是套了个回文串的壳子,实际上呢,就是找到字符串里所有成对字母的数量,然后,如果有落单的,这个数目就加1。 实现:我用了个长度为52的数组存储所有单词的数目,然后统一处理,求出上文提到的数目。 代码如下: func longestPalindrome(s string) int { if len(s)<=1 { return len(s) } temp:=make([]int,52) for _,v:=range s{ if v>=97 { temp[v-97]++ }else{ temp[v-39]++ } } f,sum:=0,0 for i:=0; i< len(temp); i++ { sum=sum+temp[i] if f==0 { if temp[i]...阅读全文

博文 2020-01-30 21:32:47 淳属虚构

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 runtime.deferproc,当被执行时,延迟调用会被保存为一个 _defer 记录,并将被延迟调用的入口地址及其参数复制保存,存入 Goroutine 的调用链表中。 在函数返回之前的位置插入 r...阅读全文

博文 2020-03-01 14:34:39 张凯强zkqiang

leetcode_31

Golang: 思路:这题难度在于理解题意,什么叫下一个排列,简单来说,给定一个数组[1,2,3,4,5],我们可以把它看成一个整数12345,那么它的下一个排列也就是12354,即大于12345的最小的排列。解题过程就是,从后往前,找到非递增的第一个数,再从后往前,将它从它以后的大于它的第一个数交换,然后反转它后面的剩下的数组部分。举个比较有代表性的例子,[3,6,5,4,3],从后往前找到非递增的第一个数3,位置是arr[0],再从后往前,将它从它以后的大于它的第一个数(也就是4)交换,交换完以后,数组变成[4,6,5,3,3],可以看到,4后面的部分都是递减的,于是我们反转这些部分即可。 代码如下: func nextPermutation(nums []int) { if len(n...阅读全文

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

leetcode_807

Golang: 思路:其实就是找到每行每列的最大值,根据这些最大值来为数组里的元素增加值 代码如下: func maxIncreaseKeepingSkyline(grid [][]int) int { res:=0 maxR:=make([]int,len(grid)) maxC:=make([]int,len(grid[0])) for i:=0;imaxR[i]{ maxR[i]=grid[i][j] } if grid[i][j]>maxC[j]{ maxC[j]=grid[i][j] } } } for i:=0;i阅读全文

博文 2020-04-14 13:32:46 淳属虚构

leetcode_1189

Golang: 思路:这个,建立个数组,对应'a','b','l','o','n',每当出现'a','b','n'时,对应数组位置加二,出现'l','o'时,对应数组位置加一,然后遍历数组,找到最小值,除以2即可 代码如下: func maxNumberOfBalloons(text string) int { res:=make([]int,5) for i:=0;i阅读全文

博文 2020-02-19 15:32:50 淳属虚构

leetcode_130

Golang: 思路:这题虽然在并查集范畴内,但做法更近于广度优先搜索,和烂橘子一致,需要改变不被围绕区域内'O'的值,以防止重复的查询 代码如下: func solve(board [][]byte) { if len(board)<=2||len(board[0])<=2 { return } var stack [][]int for i:=0;i阅读全文

博文 2020-03-04 11:32:47 淳属虚构

leetcode_199

Golang: 思路:这题不是要求输出最右边的路径,而是你从最右侧看去,每一层的最右端的点。方法就是BFS进行层序遍历,每次将最右边的那个放进结果里了。 代码如下: func rightSideView(root *TreeNode) []int { var res []int var nodes []*TreeNode if root!=nil { nodes=append(nodes, root) for len(nodes)!=0{ length:=len(nodes) res=append(res, nodes[length-1].Val) i:=0 for ;i阅读全文

博文 2020-03-09 15:36:09 淳属虚构

leetcode_445

Golang: 思路:组合题,先反转链表,再让它们相加,再反转回来即可。针对题目提到的进阶,可以先将两个链表拷贝下来做大数加法,再赋值回去或者新开一条链表 代码如下: func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { l1 = reverseList(l1) l2 = reverseList(l2) temp:=addTwoLinkedLists(l1,l2) return reverseList(temp) } //两个链表相加,使用的某大佬的代码 func addTwoLinkedLists(l1 *ListNode, l2 *ListNode) *ListNode { var temp = &ListNode{} va...阅读全文

博文 2020-04-14 13:32:46 淳属虚构

让我们一起啃算法----两数之和

前言 工作一段时间之后,最大的感觉就是算法好像没什么用,确实不会算法也能胜任平常的工作,但是总觉得缺了点什么,所以最近抽空复习了以前刷的 Leetcode,希望在这里找到一群志同道合的人。 两数之和(Two Sum) 这是 LeetCode 的第一题,总体来说是比较简单的,题干如下: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。示例: 给定 nums = [2, 7, 11, 15],target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]来源:力扣 简单来说就是给定一个数组,让你找到和为 target 的两个元素的索引。 解题思路 主要有 两种解题思路 : 暴力...阅读全文

博文 2020-04-20 10:32:50 三斤和他的朋友们

2.7 Socket Programming: Creating Network Applications

在网络应用开发中,开发者首先要做的一个决定是使用 TCP 还是 UDP 作为传输层协议。TCP 是基于连接,并且基于字节流提供可靠的数据传输的协议。而 UDP 是无连接,通过数据包发送数据,并不保证送达的协议。 我们将在这一节分别利用 UDP 和 TCP 实现一套 client-server 程序。 该程序主要完成的功能是: client 从键盘读取一行字符串,并发给 server server 收到字符串并转换成大写 server 将修改后的字符串发送给 client client 收到修改后的数据并显示 2.7.1 Socket Programming with UDP UDP 在发送数据包时,需要先在数据包中附加地址的信息。网络会利用这个信息 route 数据包到达接收程序。 附加的地...阅读全文

博文 2020-05-13 03:32:47 找不到工作

learn go with tests 学习笔记(三) 指针和错误

知识点 接收者 type Circle struct { Radius float64 } func (c Circle) Area() float64 { return 0 } 声明方法的语法跟函数差不多,因为他们本身就很相似。唯一的不同是方法接收者的语法 func(receiverName ReceiverType) MethodName(args) 当方法被这种类型的变量调用时,数据的引用通过变量 receiverName 获得。在其他许多编程语言中这些被隐藏起来并且通过 this 来获得接收者。 把类型的第一个字母作为接收者变量是 Go 语言的一个惯例。 r Rectangle 断言优于逻辑 当测试用例不是一系列操作,而是事实的断言时,测试才清晰明了。 列表测试驱动 声明结构体以创建...阅读全文

博文 2020-06-02 17:32:51 硌手小石头

大神进阶之路:Python技巧小贴士

介绍 Python 炫酷功能(例如,变量解包,偏函数,枚举可迭代对象等)的文章层出不穷。但是还有很多 Python 的编程小技巧鲜被提及。因此,本文会试着介绍一些其它文章没有提到的小技巧,这些小技巧也是我平时会用到的的。让我们一探究竟吧! 整理字符串输入 整理用户输入的问题在编程过程中极为常见。通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作。但是如果问题很复杂,可能有更好的方法来解决: 1. user_input = "This\nstring has\tsome whitespaces...\r\n" 3. character_map = { 4. ord('\n') : ' ', 5. ord('\t') : ' ', 6. ord('\...阅读全文

博文 2020-01-09 23:32:46 一条Python代码

leetcode_147

Golang: 思路:既然是链表的插入排序,那就按照题意来,做插入排序 代码如下: func insertionSortList(head *ListNode) *ListNode { if head==nil||head.Next==nil { return head } temp1:=head res:=head temp2:=head.Next temp1.Next=nil for temp2!=nil{ //预留下一个点 tNext:=temp2.Next temp2.Next=nil var p1 *ListNode p2:=res for p2!=nil&&temp2.Val>p2.Val{ p1=p2 p2=p2.Next } temp2.Next=p2 if p1==nil ...阅读全文

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

leetcode_49

Golang: 思路:对所有字符串处理(排序),字母异位词必然会有同一排列。 代码如下: type Bytes []byte func (b Bytes) Len() int { return len(b) } func (b Bytes) Less(i, j int) bool { return b[i] < b[j] } func (b Bytes) Swap(i, j int) { b[i], b[j] = b[j], b[i] } func groupAnagrams(strs []string) [][]string { mp:=make(map[string][]string) for _,v:=range strs{ bytes:=[]byte(v) sort.Sort(Byt...阅读全文

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

5. Go语言中的数组与切片

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 系列导读 1. 一文搞定Go语言开发环境的搭建 2. Go 语言中五种变量创建的方法 3. Go语言中的整型与浮点型 4. Go语言中byte、rune与字符串区别? 1.7 1. 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。 声明数组,并给该数组里的每个元素赋值(索引值的最小有效值和其他大多数语言一样是 0,不是1) // [3] 里的3 表示该数组的元素个数 var arr [3]int arr[0] = 1 ar...阅读全文

博文 2020-04-01 11:35:00 王一白

python3.8版本已经更新,数据分析师和数据开发者看过来

python3.8版本已经更新,数据分析师和数据开发者看过来 新版本python3.8已经发布 作为一个放弃java转投python很多年的数据开发者,已经好久没有更新python了,也很久没有关注python的一些新功能新特性了,去年把自己做的几个小项目更新到了python3.6,然后就一直没把精力放到这一块了。 今天因为安装一个第三方库失败,打算去官网看下python的更新情况,发现已经更新至python3.8.2了,那么就当机立断下载安装,顺便学习一下python3.8的新特性吧。 安装python3.8.2 windows下的安装很简单,直接下载msi安装文件双击就可以了,然后稍微配置一下环境变量。 Linux下稍微复杂一点,主要是因为没有合适的yum安装包,具体步骤如下: # 下载...阅读全文

博文 2020-04-08 07:32:44 数据驱动手记

leetcode_890

Golang: 思路:双map映射即可,但这里错了一次,惭愧 代码如下: func findAndReplacePattern(words []string, pattern string) []string { var res []string for _,v:=range words{ flag:=0 mp1:=make(map[byte]byte) mp2:=make(map[byte]byte) for i:=0;i阅读全文

博文 2020-04-13 11:32:45 淳属虚构

leetcode_542

Golang: 思路:多源BFS 代码如下: func updateMatrix(matrix [][]int) [][]int { res:=make([][]int,len(matrix)) for k,_:=range res{ res[k]=make([]int,len(matrix[0])) copy(res[k],matrix[k]) } var stack [][]int for i:=0;i阅读全文

博文 2020-04-15 09:32:45 淳属虚构

leetcode_979

Golang: 思路:二叉树用递归就对了,但是这题我不会!!!思路是对的,但是脑子就是转不过来 代码如下: func distributeCoins(root *TreeNode) int { ans:=[]int{0} dfs979(root,&ans) return ans[0] } func dfs979(root *TreeNode,ans *[]int) int{ if root==nil{ return 0 } L:=dfs979(root.Left,ans) R:=dfs979(root.Right,ans) (*ans)[0]+=abs(L)+abs(R) return root.Val+L+R-1 ...阅读全文

博文 2020-04-20 15:38:59 淳属虚构

leetcode_213

Golang: 思路:这题我个人感觉要复杂一些,难度在于首尾相连,并且,你需要考虑的更全面一些。当然,这题做完的时间复杂度100%,空间47%,但我不太想优化了。简单来说,有房子[1...n],通过打家劫舍1得出的最大值,我们需要做出判断:如果我们没抢n,那么这个最大值没有问题,如果我们抢了n,那么就需要去看下我们抢没抢1,如果也没抢1,那么没问题,但如果抢1了,那么这个最大值就需要修改了,为max([2....n],[1...n-1])。 代码如下: func rob(nums []int) int { if len(nums) == 0 { return 0 } if len(nums) == 1 { return nums[0] } if len(nums) == 2 { if num...阅读全文

博文 2020-02-22 15:32:50 淳属虚构

leetcode_43

Golang: 思路:模拟大数乘法,实现麻烦,实现难度并不大 代码如下: func multiply(num1 string, num2 string) string { if num1[0]=='0'||num2[0]=='0'{ return "0" } bytes1:=[]byte(num1) bytes2:=[]byte(num2) res:="0" s:="" for i:=len(num2)-1;i>=0;i--{ var temp strings.Builder temp.WriteString(s) s+="0" n:=0 t:=int(bytes2[i]-'0') if t!=0{ for j:=len(num1)-1;j>=0;j--{ mu:=t*int(bytes1[...阅读全文

博文 2020-03-20 21:32:44 淳属虚构

leetcode_98

Golang: 思路:依旧是中序遍历,如果数组是递增的,那么二叉搜索树是正确的 代码如下: func isValidBST(root *TreeNode) bool { arr := inOrderValDFS(root) for i := 1; i < len(arr); i++ { if arr[i] <= arr[i-1] { return false } } return true } func inOrderValDFS(root *TreeNode) []int { var stack []*TreeNode var res []int for len(stack) != 0 || root != nil { for root != nil { stack = append(st...阅读全文

博文 2020-03-25 23:32:52 淳属虚构

揭秘!containerd 镜像文件丢失问题,竟是镜像生成惹得祸

导语 作者李志宇,腾讯云后台开发工程师,日常负责集群节点和运行时相关的工作,熟悉 containerd、docker、runc 等运行时组件。近期在为某位客户提供技术支持过程中,遇到了 containerd 镜像丢失文件问题,经过一系列分析、推断、复现、排查,最终成功找到根因并给出解决方案。现将整个详细处理过程整理成文分享出来,希望能够为大家提供一个有价值的问题处理思路以及帮助大家更好地理解相关原理。 containerd 镜像丢失文件问题说明 近期有客户反映某些容器镜像出现了文件丢失的奇怪现象,经过模拟复现汇总出丢失情况如下: 某些特定的镜像会稳定丢失文件; “丢失”在某些发行版稳定复现,但在 ubuntu 上不会出现; v1.2 版本的 containerd 会文件丢失,而 v1.3 不...阅读全文

博文 2020-05-22 12:34:22 腾讯云原生