2020-11-29:手写代码:堆排序。

福哥答案2020-11-29: 1,先让整个数组都变成大根堆结构,建立堆的过程: 1)从上到下的方法,时间复杂度为O(NlogN)。 2)从下到上的方法,时间复杂度为O(N)。 2,把堆的最大值和堆末尾的值交换,然后减少堆的大小之后,再去调整堆,一直周而复始,时间复杂度为O(NlogN)。 3,堆的大小减小成0之后,排序完成。 golang代码如下: package class04 import ( "fmt" "testing" ) /* 堆排序 1,先让整个数组都变成大根堆结构,建立堆的过程...阅读全文

简书 2020-11-29 22:32:38 福大大架构师每日一题

go语言单链表及其常用方法的实现

目的 在刷算法题中经常遇到关于链表的操作,在使用go语言去操作链表时不熟悉其实现原理,目的是为了重温链表这一基础且关键的数据结构。 1、链表的特点和初始化 1.1、链表的特点 用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 1.2、结点 结点(node) 数据域 => 存储元素信息 指针域 => 存储结点的直接后继,也称作指针或链 首元结点 是指链表中存储的第一个数据元素的结点 头结点 是在首元结点之前附设的一个结点,其指针域指向首元结点(非必须) 头指针...阅读全文

简书 2020-11-29 21:32:45 Zppj

1. 安装Go及搭建Go开发环境

注意:Go语言1.14版本之后推荐使用go modules管理以来,也不再需要把代码写在GOPATH目录下了。无需手动配置环境变量,使用go mod 管理项目,项目可以在任意位置。 1.1 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 1.2 安装 1.2.1 Windows安装 将上一步选好的安装包下载到本地。双击下载好的文件,然后安装即可。(安装目录可自行选择) 安装完成后可以使用如...阅读全文

这是一个测试文档

这是一个测试文档, 修改一下 目测可以使用Typora进行编辑, 然后COPY到简书, 这样既可以享受Typora的快捷编辑, 又可以利用简书的在线同步与日记整理功能.完美. 这是一个小标题 我想试一下引用, 怎么感觉有点丑啊. 这是下一行 我就是粗体, 这是斜体, 这是粗体加上斜体, 这是粗体, haha, Typora是真的好用, 这是一个双引号, “哈哈”, “哈哈”, 哈哈“哈哈”, 这是一个单引号‘嘻嘻’, # 这是一个代码块 import datetime now = datetim...阅读全文

简书 2020-11-29 21:32:44 刘志远_143e

我写代码那些年--开始--自学之路

寻路准备。 决定转行IT后,接下来的事儿,就是学编程了,那时候,对计算机的使用,仅限于日常办公一类的。对于编程写代码,可以说是很迷茫,怎么搞?从哪里开始?如何下手?一头雾水。左思右想后,当时我想到了一种取巧的方式学习,我想:我不懂这个,就没必要瞎折腾,网上查也可能事倍功半,走没必要的弯路只是浪费时间,于是我就找了几个关系好的计算机学院的同学,让他们帮我出主意,该怎么学,推荐我一些书,我自己对着练。当时我让他们告诉我怎么学还不算完,还让他们帮我推荐一些书单,列出书的名字,出版社,作者。这样我比较容...阅读全文

简书 2020-11-29 21:32:44 风调雨顺_735b

分别用Python,Java,Golang,PHP实现Hello World,哪个更适合你

Python语言(只要一行,不带分号):print("Hello World")Java语言(需要五行,要带分号):public class test{ public static void main(String[] args) { System.out.println("Hello World"); }}Golang语言(五行,不带分号):package mainimport "fmt"func main() { fmt.Println("Hello World")}PHP语言(三行,带分号...阅读全文

简书 2020-11-29 21:32:44 1024小神

一文看懂 session 和 cookie

----------- cookie 大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录;再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和 cookie 有关。如果你明白了服务器后端对于 cookie 和 session 的处理逻辑,就可以解释这些现象,甚至钻一些空子无限白嫖,待我慢慢道来。 一、session 和 cookie 简介 cookie 的出现是因为 HTTP 是无状态的一种协议,换句话说,服务器记不住你,可能你每刷新一次网页,就要重新输入一次账...阅读全文

简书 2020-11-29 21:32:42 labuladong

一文带你入门 Golang

go 语言特点脚本化的语法,容易上手。静态类型+编译性,开发、运行效率都有保证函数式 & 面向对象 两种编程范式,原生支持并发编程支持,降低开发成本,维护成本,以及更好的兼容性,效率。劣势:语法糖没有 Python 和 Ruby 多。运行效率不及C,但已赶超C++,Java。第三方库不多,就是轮子少(喜欢造轮子的可以加入golang轮子大军)。安装官方: https://golang.org/国内官方站点: https://go-zh.org/Linuxhttp://golang.org/dl/...阅读全文

Segmentfault 2020-11-30 02:32:36 小白要生发

sync.Cond学习笔记

sync.Condgo/syncsync.Cond用于goroutine之间的协作,用于协程的挂起和唤醒。当多个协程之间协作时,有可能一个协程需要依赖别的协程完成后再进行某种操作,这时可依据管道进行通信,这对于两个协程之间是比较方便的。但若是多个协程依赖一个协程的完成后再进行某种操作,那么就可以使用sync.Cond来实现了;例子:package main import ( "fmt" "sync" "time" ) var locker = new(sync.Mutex) var cond =...阅读全文

Segmentfault 2020-11-30 02:32:35 byte

Golang error浅析

由于Golang的语言设计的原因,不管是不是愿意,每个golang开发者的几乎每一段代码都需要与error做缠斗。下面我就简单分析一下golang中的error相关。 error是什么? 首先需要明确的一点是,golang中对于error类型的定义是什么?不同于很多语言的exception机制,golang在语言层面经常需要显示的做错误处理。其实从本质上来讲,golang中的error就是一个接口: // The error built-in interface type is the conv...阅读全文

简书 2020-11-29 09:32:39 MontyOak

golang中defer执行时机与常见问题

defer是什么? 在Go语言中,可以使用关键字defer向函数注册退出调用,即主函数退出时,defer后的函数才被调用。defer语句的作用是不管程序是否出现异常,均在函数退出时自动执行相关代码。 defer的用途 在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等) ,为了在函数执行完 毕后,及时的释放资源,Go 的设计者提供 defer (延时机制)。 defer的执行时机 了解defer的执行时机首先要知道golang的return并非原子操作,return的底层机制如下...阅读全文

简书 2020-11-29 09:32:38 皮儿吃屁

聊聊golang的类型断言

序 本文主要研究一下golang的类型断言 类型断言 x.(T) 断言x不为nil且x为T类型 如果T不是接口类型,则该断言x为T类型 如果T类接口类型,则该断言x实现了T接口 实例1 func main() { var x interface{} = 7 i := x.(int) fmt.Println(reflect.TypeOf(i)) j := x.(int32) fmt.Println(j) } 直接赋值的方式,如果断言为true则返回该类型的值,如果断言为false则产生runtim...阅读全文

使用Golang在数秒内读取16GB的文件

By Ohm Patel 当今世界的任何计算机系统每天都会生成大量的日志或数据。随着系统的增长,将调试数据存储到数据库中是不可行的,因为它们是不可变的,而且只用于分析和故障解决目的。因此,组织倾向于将其存储在文件中,这些文件驻留在本地磁盘存储中。 我们将使用Golang从16 GB的.txt或.log文件中提取数百万行日志。 Lets Code…! 开始编码...! 让我们先打开文件。我们将使用标准的Go os.File用于任何文件IO。 f, err := os.Open(fileName) ...阅读全文

简书 2020-11-29 09:32:38 颍水书生

聊聊golang的类型断言

序本文主要研究一下golang的类型断言类型断言x.(T)断言x不为nil且x为T类型如果T不是接口类型,则该断言x为T类型如果T类接口类型,则该断言x实现了T接口实例1func main() { var x interface{} = 7 i := x.(int) fmt.Println(reflect.TypeOf(i)) j := x.(int32) fmt.Println(j) }直接赋值的方式,如果断言为true则返回该类型的值,如果断言为false则产生runtime panic;j...阅读全文

Segmentfault 2020-11-30 02:32:35 codecraft

码了2000多行代码就是为了讲清楚TLS握手流程

来自公众号:新世界杂货铺前言呼,这篇文章的准备周期可谓是相当的长了!原本是想直接通过源码进行分析的,但是发现TLS握手流程调试起来非常不方便,笔者怒了,于是实现了一个极简的net.Conn接口以方便调试。码着码着,笔者哭了,因为现在这个调试Demo已经达到2000多行代码了!虽然码了两千多行代码,但是目前只能够解析TLS1.3握手流程中发送的消息,因此本篇主要分析TLS1.3的握手流程。特别提醒:有想在本地调试一番的小伙伴请至文末获取本篇源码。结论先行鉴于本文篇幅较长,笔者决定结论先行,以助各位...阅读全文

Segmentfault 2020-11-30 02:32:35 新世界杂货铺