#代码

常见排序算法原理——Go语言实现

发布于:2019-06-17

冒泡排序——Bubble Sort 算法原理 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 package main import "fmt" func main() { arr := []int{1, 3, 45, 32, …...

进入阅读

GO程序性能调试工具——pprof

发布于:2018-10-13

pprof pprof是Golang的runtime内建的用于可视化和分析性能分析数据的工具,能帮助我们对程序运行时的 CPU、内存进行分析。 pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告) pprof能做的分析包括: CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置 Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏 Block …...

进入阅读

Goroutine间的通信——channel机制

发布于:2018-06-25

并发与并行 关于并发和并行的区别,引用一个经典的描述: 并发是同一时间应对(dealing with)多件事情的能力。 并行是同一时间动手(doing)做多件事情的能力。 雨痕老师《Go 语言学习笔记》上的解释: 并发是指逻辑上具备同时处理多个任务的能力;并行则是物理上同时执行多个任务。 并发是代码的特性,并行是正在运行的程序的特性。随着抽象层次的降低,并发模型实际上变得更难也更重要,而越低层次的并发模型对我们也越重要。要想并发程序正确地执行,就要深入研究并发模型。 要想一段并发的代码没有任何bug,是非常困难的。有些并发bug是在系统上线数年后才发现的,原因常常是很诡异的,比如用户数 …...

进入阅读

Go的异常处理-panic,defer,recover

发布于:2017-12-14

Go的异常处理 Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。 在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为0了)。才使用Go中引入的Exception处理:defer, panic, recover。 Go的异常处理可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理 panic Golang里比较常见的错误 …...

进入阅读

Go语言并发编程

发布于:2017-03-12

并发编程 Go语言是在多核和网络化的时代背景下诞生的原生支持并发的编程语言。毫不夸张的说Go语言的这一特性是吸引很多编程玩家痴迷于Go语言开发的重要原因。 在早期,CPU都是以单核的形式顺序执行机器指令,Go语言的祖先C语言正是这种顺序编程语言的代表。所有的指令都是以串行的方式执行,在相同的时刻有且仅有一个CPU在顺序执行程序的指令。 随着处理器技术的发展,单核时代以提升处理器频率来提高运行效率的方式遇到了瓶颈,目前各种主流的CPU频率基本被锁定在了3GHZ附近。单核CPU的发展的停滞,给多核CPU的发展带来了机遇。相应地,编程语言也开始逐步向并行化的方向发展。 常见的并发编程主要是基于多线程 …...

进入阅读

Go语言中的数据类型

发布于:2017-01-21

Go语言类型分类分类 Go语言将数据类型分为四类: 基础类型:数值、字符串、布尔型 复合类型:数组、结构体 引用类型:指针、切片、字典、函数、通道 接口类型:接口、错误 数值类型 Go语言的数值类型包括几种不同大小的整数、浮点数和复数,每种数值类型都决定了对应的大小范围和是否支持正负符号。 有符号整数类型包括:int8、int16、int32和int64 无符号整数类型包括:uint8、uint16、uint32和uint64 浮点数类型包括:float32、float64 复数类型包括:complex64、complex128 还有两种一般对应特定CPU平台机器字大小的有符号和无符号整 …...

进入阅读

Mysql查询执行计划—Explain

发布于:2016-04-06

explain 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句。找出这些SQL语句并不意味着完事了,我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。 explain语法和示例 explain select * from servers; …...

进入阅读

算法研究(PHP版本)——拓扑排序问题

发布于:2015-06-02

问题 假设一个工程分为若干阶段,每个阶段需要耗费一定的天数,有些工程的开始必须以其他一个和多个工程的结束为前提。假设每次只能同时进行一个阶段,问如何安排执行工程的阶段确保工程能顺利的完成。 解决问题的思路 用一个有向图表示一个工程的各子工程及其相互制约的关系,其中以顶点表示活动,弧表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称AOV (Activity On Vertex network)网。 在AOV网没有回路的前提下,我们将全部活动排列成一个线性序,使得若AOV网中有弧<i,j>存在,则在这个序列中,,i一定排在j的前面,具有这种性质的线性序列称为拓扑有序序 …...

进入阅读

算法研究(PHP版本)——带权二分图最佳匹配问题

发布于:2015-05-13

问题 假设要给5位工人分配不同的5项工作,每位工人都能完成这5项工作,但是每一位工人完成不同工作能带来的效益是不一样的,如何分配工作能使得总效益达到最大值。 解决问题的思路 对于这个问题最容易想到的解决思路是请举所有的排列组合,然后计算总的效益后取最大值即可。上述问题的因子是5,5求全排列一共有120种组合,对于计算机而言,循环求120次求解不是很难的问题,效率也高,但是一旦问题变大,例如因子变为20,那么时间复杂度和空间复杂度都会呈现几何级数级别的上升。 上述问题可定义为寻找带权二分图最佳匹配,解决这个问题的著名算法是KM算法。 对KM算法的描述,基本上可以概括成以下几个步骤: 初始化可行 …...

进入阅读

算法研究(PHP版本)——最大匹配问题

发布于:2015-05-07

问题 假设某一婚介单位要给10位男生和10位女生安排1对1相亲,每个男生都有自己喜好的几位女生(喜好程度假设相同)。问如何进行男女匹配使得男生最大限度的能和自己喜好的女生进行约会,即使得能安排到喜好女生的男生数目最大。 解决问题的思路 此问题实质上是经典的二分图最大匹配问题,求解二分图最大匹配问题的一个算法是匈牙利算法。 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 二分图以及匹配相关概念 二分图 简单来说,如果图中点可以被分 …...

进入阅读

算法研究(PHP版本)——妖怪与和尚过河问题

发布于:2015-03-09

问题 有三个和尚(或传教士)和三个妖怪(或食人怪)过河,只有一条能装下两个人(和尚或妖怪)的船,在河的任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉的危险。你能不能找出一种安全的渡河方法呢? 解决问题的思路 题目的初始条件是三个和尚和三个妖怪在河的一边(还有一条船),解决问题后的终止条件是三个和尚和三个妖怪安全地过到河的对岸,如果把任意时刻妖怪和和尚的位置看作一个“状态”,则解决问题就是找到一条从初始状态变换到终止状态的路径。 从初始状态开始,每选择一批妖怪或和尚过河(移动一次小船),就会从原状态产生一个新的状态,如果以人类思维解决这个问题,每次都会选择最佳的妖怪与和尚组 …...

进入阅读

算法研究(PHP版本)——三只水桶等分水问题

发布于:2015-03-05

问题 有一个容积为8升的水桶里装满了水,另外还有一个容积为3升的空桶和一个容积为5升的空桶,如何利用这两个空桶等分8升水?附加条件是三个水桶都没有体积刻度,也不能使用其它辅助容器。 解决问题的思路 如果我们把某一时刻三个水桶中存水的容积称为一个状态,则问题的初始状态是8升的水桶装满水,求解的解出状态(最终状态)是8升水桶中4升水,5升水桶中4升水。穷举法的实质就是把从初始状态开始,根据某种状态变化的规则搜索全部可能的状态,每当找到一个从初始状态到最终状态的变化路径,就可以理解为找到了一种答案。 这样的状态变化搜索的结果通常是得到一棵状态搜索树,根节点是初始状态,叶子节点可能是最终状态,也可能是 …...

进入阅读

PHP魔法函数

发布于:2014-11-19

魔法函数 PHP将所有以**__(两个下划线)**开头的类方法保留为魔术方法,这些方法会在特定的情况下被调用。 它们在面向对向编程中起着至关重要的作用,在定义类方法时,除了魔术方法,建议不要以__为前缀。 善用魔法函数往往能使PHP代码更优雅,但是也会使得部分逻辑被"隐藏"起来了,所有阅读源代码时关注一些魔法函数非常重要! 下面逐一介绍几项重要的魔法函数。 __construct() __construct()被称为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。 如果子类中定义了构造函数则不会隐式调用其父类的构造函 …...

进入阅读

javascript类型判断

发布于:2014-10-06

javascript的数据类型 js数据分为两种类型:原始数据类型和引用数据类型。 原始数据类型有:string、number、boolean、undefined和null 引用数据类型有:Function、Object、Date、RegExp、Number、String、Boolean和自定义类等. 其中原始数据类型也称基础数据类型,是不可拆分的数据类型,他存在于栈中;而引用数据类型也是通常意义上所说的类,存在于堆中。 这两者的一个重要的区别在于原始数据类型在赋值的时候使用的是传值的方式,而引用数据类型在赋值时使用的是传址(指针)的方式。 var str1 = …...

进入阅读

javascript异步编程4种实现方式

发布于:2014-09-22

javascript异步编程 javascript语言的执行环境是“单线程”的。所谓“单线程”,就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异 …...

进入阅读

MYSQL中UNIX时间戳与日期的相互转换

发布于:2013-06-18

前言 在MYSQL数据库中时间字段的存储通常采用时间戳的格式,但是这一格式在查询时并不直观易读,所以通常会在查询的时候将时间戳格式转换为普通的日期格式。相反的,在交互页面,用户的输入都是普通的时间格式,那么在存储进数据库时同样存在需要转换成时间戳格式的问题,本文就介绍这一相互转换。 MYSQL中转换 UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Select UNIX_TIMESTAMP("2006-11-04 …...

进入阅读

MySQL Show命令的使用

发布于:2012-02-07

MySQL show在实际的应用中是常用于查询数据库的表结构,状态,帐号信息,日志情况,错误信息等等,以下的文章就是对MySQL show的实际操作用法的介绍。 #显示当前数据库中所有表的名称 show tables; show tables from database_name; #显示mysql中所有数据库的名称 show databases; #显示系统中正在运行的所有进程,也就是当前正在执行的查询。 show processlist; #显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。 show table status; # …...

进入阅读

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)