LeetCode-Two Sum

Given an array of integers nums and an integer target, return _indices of the two numbers such that they add up to target

2021-05-10 · 1 min · 188 words · Garlic Space

Vagrant 创建Centos8 环境

使用Vagrant重新搭建一个测试环境,只需要简单几步就可以启动一个测试环境。

2021-05-07 · 1 min · 43 words · Garlic Space

Effective Go-5

Do not communication by sharing memory; instead,share memory by communicating

2021-04-27 · 11 min · 2281 words · Garlic Space

Effective Go-4

Interfaces and other types Interface Sequence这个例子,调用sort package中的方法,对于集合要实现sort的接口:Len(), Less(i,j int) bool 和 Swap(i,j int)。Sequence同时通过String()对集合内容进行格式化。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 package sequence_test import ( "fmt" "sort" "testing" ) type Sequence []int func (s Sequence) Len() int { return len(s) } func (s Sequence) Less(i, j int) bool { return s[i] < s[j] } func (s Sequence) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s Sequence) Copy() Sequence { copy := make(Sequence, 0, len(s)) return append(copy, s...) } func (s Sequence) String() string { s = s.Copy() sort.Sort(s) str := "[" for i, elem := range s { if i > 0 { str += " " } str += fmt.Sprint(elem) } return str + "]" } func (s Sequence) Stringsprint() string { s = s.Copy() sort.Sort(s) return fmt.Sprint(s) } func (s Sequence) StringIntSlice() string { s = s.Copy() sort.IntSlice(s).Sort() return fmt.Sprint(s) } func TestSequence(t *testing.T) { var s Sequence = Sequence{100, 12, 83, 34, 59, 86} t.Logf("%#v", s) t.Log(s) t.Log(s.String()) t.Log(s.Stringsprint()) t.Log(s.StringIntSlice()) } 1 2 3 4 5 6 7 8 9 === RUN TestSequence f:\GO\go_test\sequence\sequence_test.go:54: sequence_test.Sequence{100, 12, 83, 34, 59, 86} f:\GO\go_test\sequence\sequence_test.go:55: [12 34 59 83 86 100] f:\GO\go_test\sequence\sequence_test.go:56: [12 34 59 83 86 100] f:\GO\go_test\sequence\sequence_test.go:57: [12 34 59 83 86 100] f:\GO\go_test\sequence\sequence_test.go:58: [12 34 59 83 86 100] --- PASS: TestSequence (0.00s) PASS ok loop/sequence 1.996s 类型转换 String()接口通过 “for i, elem := range”方式实现,也可以像Stringsprint直接调用fmt.Sprint处理实现。 ...

2021-04-19 · 5 min · 1046 words · Garlic Space

Effective Go-3

Data 分配 通过new和make分配空间: new分配空间,返回指针 make可以进行生成slices,maps,channels,返回类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package data_test import "testing" func TestCreateslices(t *testing.T) { s := make([]string, 3) s[0] = "c" s[1] = "a" s[2] = "o" t.Log(s) } func TestCreatemap(t *testing.T) { m := make(map[string]int) m["k1"] = 1 m["k2"] = 2 t.Log(m) } func TestCreatechannel(t *testing.T) { messages := make(chan string) go func() { messages <- "ping" }() msg := <-messages t.Log(msg) } 数组(Arrays)和切片(Slices) go中更推荐使用切片而不是数组。 数组长度固定 切片可以动态调整容量(cap) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package data_test import "testing" func TestCreatearray(t *testing.T) { a := [...]int{1, 2, 3, 4} t.Log(a) s := make([]int, 4) s = a[0:4] t.Log(s) s = append(s, 5) t.Log(a) t.Log(s) } === RUN TestCreatearray f:\GO\go_test\data\data_test.go:29: [1 2 3 4] f:\GO\go_test\data\data_test.go:32: [1 2 3 4] f:\GO\go_test\data\data_test.go:34: [1 2 3 4] f:\GO\go_test\data\data_test.go:35: [1 2 3 4 5] --- PASS: TestCreatearray (0.00s) 二维切片(Two-dimensional Slices) 下面是二位数组和二位切片的示例。 ...

2021-04-15 · 5 min · 932 words · Garlic Space

Effective Go-2

分号 若在一行最后一个标识符为以下类型 数字 字符串常量 特殊标识符号;break continue fallthrough return ++ – ) } 词法分析器会在标识符后添加分号, 与C不同GO很多地方都省略分号。 另在在if for switch select控制结构后要接 “{”, 例如: 1 2 3 if i < f() { g() } 而不要写成 1 2 3 4 if i < f() { g() } 控制结构 if/switch/for If switch语句中可以接受初始化语句 1 2 3 4 if err := file.Chmod(0664); err != nil { log.Print(err) return err } For 遍历数组,切片,字符串或者map时,可以使用range子句 1 2 3 for key, value := range oldMap { newMap[key] = value } Switch中有两个比较特殊的地方, break跳出指定一个标签范围: ...

2021-04-07 · 2 min · 379 words · Garlic Space

LeetCode-Palindrome Pairs Solution

Given a list of unique words, return all the pairs of the distinct indices i, j in the given list, so that the concatenation of the two words wordsi + wordsj is

2021-04-01 · 3 min · 477 words · Garlic Space

查询和清除文件系统缓存

为了减少磁盘I/O,加快读写速度,Linux内核使用文件系统的Cache,Page Cache。

2021-03-30 · 2 min · 280 words · Garlic Space

视频的版权识别与管理

昨天正在听一位老师的英语的直播课, 当时她正在用影片的片段讲解英文听力课,讲到一半的时候,直播中断了。 显示“​stream suspended for policy violations” 后来查了下资料才知道, 平台通过Connent ID系统的运作方式来识别和管理上传的视频和音频版权。 千亿美金的YouTube:收购后的13年里 Google做了什么?这篇文章比较详细的介绍了Google收购YouTube后, 对其版权管理和内容变现盈利模式做的一些工作。 Youtube的成功离不开 Google 长远的眼光,而“ Google的生态数据、广告销售体系和Google Cloud的支持,也放大了YouTube的商业价值。” Content ID系统 Google收购Youtube后为解决其版权问题,建立一个能识别版权内容的Content ID系统。 版权所有者可以向YouTube上传自己的音频或视频文件,Content ID数据库根据这些文件来创建内容“指纹”。 如果发现有翻拍或模仿的内容,平台会给版权所有者三个选择: 禁播:禁止用户观看整个视频 获利:通过在视频中投放广告来利用视频获利;有时可以与上传者分享收益 跟踪:跟踪视频的观看情况统计信息 官网的一个视频介绍 实现思路及相关知识点整理 关于Content ID系统闭源实现, 目前没找到相关资料, 个人理解应该涉及三个方面。 视频识别 处理流程 服务整合 视频识别 视频识别主要涉及计算机视觉技术**(Computer Vision, CV),**涉及计算机视觉的基础模型,特征提取,近几年都受到深度学习的影响,出现了基于深度学习计算机视觉模型。 计算机视觉 概念 计算机视觉通过模仿人类的视觉系统,从照相机,摄影机等视频采集设备中获取原始信息,通过这些原始信息,进行语义(Semantic)解释或者逻辑理解。比如我们使用的电脑,我们需要识别显示器, 键盘,鼠标,并在头脑中形成这些物体的概念。 领域特点 **跨学科领域:**计算机视觉涉及多个领域 生物学领域:人眼及视觉神经系统,理解人脑的处理机制 物理学领域:设备越精密,越能完整的额捕获外界信息,主要涉及光学领域的研究。 计算机科学:信息检索,计算机体系结构,机器学习。 相关难题: 图像信息与语义之间巨大鸿沟。例如:如何将一个200*200RGB图像,对应12万数字组成的矩阵与具体的事物关联起来。 识别速度。实验表明,一副普通场景图片,人类需要150毫秒,人类在理解图片时,依靠过去的记忆、经验、外界知识来对图像中物体进行判断。这些都是计算机系统难以企及的。 **实现方式。**是模仿人类视觉系统还是需要开辟其他研究道路。 应用: 视频识别已经在人脸识别,光学字符识别,电影特效,视觉搜索,自动驾驶,无人商店,虚拟现实,增强现实等方面有了广泛应用。 基础模型及操作: 像素表达: 根据不同的图像类型像素表达也不同. 黑白图像:转化0或1的二元矩阵 灰度图像:每一个像素代表灰度的“强度”Intensity 范围在0-255 彩色图像:比较流行的RGB,三种颜色叠加,RGB代表三种不同的通道,每一个通道都是一个矩阵表达,每个像素代表0-255,彩色图像是一个**张量(Tensor),**也就是三个矩阵叠加一起的结果。 像素本身是真实世界中的“采样”,连续的信号采样到离散像素,难免会有失真的情况,不同分辨率会有不同程度的像素表达。 关键字 Pixel 过滤器: 移动平均(Moving Average) 这个过滤器的本质就是针对每个像素点对周围的9个像素点,计算其平均值,并形成心得矩阵。然后对新像素点视觉化。 ...

2021-03-24 · 1 min · 166 words · Garlic Space

Effective Go - 1

为了减少格式化问题带来的争议, 可以使用 gofmt程序对源码进行格式化。

2021-03-07 · 1 min · 87 words · Garlic Space