自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梅雨心情的博客

欢迎大家评论指正!!!

  • 博客(57)
  • 资源 (3)
  • 收藏
  • 关注

原创 使用Goroutine和channel实现并发的多个例子

在现实场景中,因为业务需求,可能需要实现function level的并发,并且需要控制发送者或者控制接收者的数量。所以我稍稍总结了一下,具体发送者和接收者不同的示例,而不是简单使用随机数什么的控制并发的停止。一、一个发送者和多个接收者的例子import ( "fmt" "strings" "sync")// sender: 1, receivers: Mconst ( N...

2020-03-08 13:30:39 1002

转载 (转)Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解...

2019-05-02 13:22:23 264

原创 I/O模型——select、poll、epoll

操作系统处理I/O为两个阶段:1、等待数据传到I/O设备2、I/O设备将数据复制到user space或者同样理解为:1、等到数据传到kernel内核space2、kernel内核区域将数据复制到user space(理解为进程或者线程的缓冲区)阻塞I/O模型非阻塞I/O模型I/O多路复用模型——select、poll、epoll一、阻塞I/O模型下面两个阶段都被阻塞...

2019-04-19 11:06:26 382

转载 Golang内存管理(转)

一、没有虚拟内存的问题最开始,CPU执行指令,通过内存地址将物理内存中的数据载入到寄存器,然后执行机器指令。但之后出现了问题:1、内存访问冲突:多个程序使用同一块内存空间,会导致数据读写错乱2、内存不够用:一个程序直接申请一块内存3、程序开发成本高:开发者需要考虑程序需要的内存容量和相应的内存地址二、虚拟内存虚拟内存:用户程序只需通过虚拟内存地址获取数据,系统会将虚拟地址翻译成实际的物...

2019-04-19 10:56:41 3122

原创 Golang的变量内存分配和逃逸分析

内存分配方式逃逸分析总结一、内存分配方式一个执行的程序在内存中的分配总共有五部分:1、text:存储程序的二进制指令和一些静态内容2、data:存储已经初始化的全局变量,静态分配3、bss:存储未被初始化的全局变量,静态分配4、stack:栈,主要用来函数调用时存储局部变量。内存由系统管理,通过压栈的方式自动分配和通过出栈的方式自动释放。5、heap:堆,用于动态分配内存,由...

2019-04-18 09:40:47 1890

原创 (一)MySQL基本操作、数据类型与数据表操作

MySQL入门与命令MySQL默认端口号:3306MySQL中的超级用户:root1、数据库命令基本操作MySQL语句规范关键字和函数名称全部大写数据库名称、表名称、字段名称全部小写SQL语句必须以分号结尾修改MySQL的提示符prompt \d 使用当前的数据库名作为提示符显示当前服务器版本SELECT VERSION();显示当前日期时间SELECT NOW...

2019-04-10 16:51:29 168

原创 乐观锁、悲观锁以及CAS机制的研究

乐观锁:拿数据的时候都认为在使用该数据的过程中,别人不会修改它,所以在此过程中不会上锁。而当更新数据之后,会判断在此期间有没有其他人更改这个数据。悲观锁:拿数据的时候都认为在使用过程中,别人会修改它,所以一开始就会上锁,别人想拿该数据就会阻塞,直到获取到锁。(共享资源只给一个线程使用,其他线程阻塞,直到资源使用完后释放锁,其他线程才有权限访问该资源)乐观锁:适用于多读的类型,可以提高吞吐量。...

2019-04-10 08:45:12 399

原创 链表问题:反转和判断是否有环

这里的问题都是来自于LeetCode,并且算法均由Golang实现。链表的反转两两交换链表中的节点判断链表中是否有环找到环形链表中尾节点连接到链表中的位置首先需要定义链表节点的结构type ListNode struct { Val int Next *ListNode}一、链表的反转两个节点指向反转,然后逐步后移func reverseList(head *L...

2019-04-08 18:23:12 581

原创 Linux基础与常用命令

Linux系统中“一切皆文件”一、Linux简介根分区(/)swap分区(交换分区):相当于虚拟内存,一般设置为物理内存的两倍Grub:一个系统引导工具,通过它可以加载内核,从而引导系统启动/boot分区:放置Linux启动所用到的文件,如kernel和initrd文件1、简单的指令显示日期date、date +%Y%m%d列出目录内容ls、 ls -l、 ls -l 具...

2019-04-08 10:41:08 102

原创 有关Golang channel关闭的优雅方式

今天看到了一篇很不错的文章,读完之后我简单重写了示例代码,文字内容也不一致,有兴趣的同学可以去读一下原文或译文。有关channel的问题保证channel关闭一次的方式关闭channel的优雅方式一、有关channel的问题Golang面试有关channel的问题肯可能会问到:Q:如何关闭一个channelA:close()Q:怎么判断一个channel已经关闭了A:(1...

2019-04-03 15:21:14 2166 2

原创 goka——基于kafka的go语言流处理框架

一、goka简单介绍(第一和第二部分基于官方博客,对部分内容进行精简翻译原文地址)为了实现组合性、可扩展性和容错性,Goka鼓励开发者通过使用emitters(发射者)、processors(处理者)和views(视图,group表的持久高速缓存)三种组件来分解application到微服务中。下图描绘了使用的三种组件、kafka和扩展的API的架构图。emitters.发射者,在kafk...

2019-03-14 17:51:03 5454

原创 Golang有关defer延迟函数的讨论与研究

延迟函数defer是Golang的一个语法糖,逻辑上defer是与普通函数适配的。所以在使用defer时,应该对应到一个函数中,而不是一个for循环语句内或一个代码块中,因为这样做是危险和无意义的。import ( "fmt" "sync")func main() { /* 问题一:defer nil函数 */ func(){ var run func() = nil ...

2019-03-05 16:17:28 299

原创 goroutine并发控制方式的总结

一、sync.WaitGroup{} 进行goroutine的控制WaitGroup等待组是控制goroutine并发的一种方式,在我看来真正的意义是照顾弱势的“子goroutine”,通过Add()方法,确定预期要运行的goroutine的个数,然后goroutine内部通过defer延迟函数执行Done()方法,对一个goroutine运行结束后,进行计数减一,最后在“父goroutine”...

2019-03-01 17:41:44 496

原创 BUG: golang.org/x/crypto/ssh/terminal/util.go undefined: unix.IoctlGetTermios

最近使用到logrus库,但是logrus依赖于golang.org/x/crypto/ssh/terminal, 这个库在gopath下不在vendor里是不会报错的,但是添加到vendor后,会报下面的错误,开始感觉可能是go版本,或者是mac系统的原因。后来我做了一些尝试,Mac系统下,golang.org/x/crypto/ssh/terminal库装在GOPATH下而不在vendor...

2019-02-26 14:37:59 2462

原创 Go语言time库的深入研究

本人机器的go版本为1.10.3,所以对于time库的研究是基于go1.10.3,下面是time库下的所有go文件。先排除xxx_test.go文件,主要的文件为:time.goformat.gozoneinfo.gosleep.gotick.go其他的sys_xxx.go和zoneinfo_xxx.go都是zoneinfo.go的附庸,兼容不同平台打开$GOROOT/lib...

2019-02-21 15:55:22 762

原创 spf13/viper——Go应用程序的完整配置解决方案

spf13/viper——Go应用程序的完整配置解决方案一、viper的简单介绍1.viper支持的功能:1、可以设置默认值2、可以加载多种格式的配置文件,如JSON,TOML,YAML,HCL和Java属性配置文件3、应用程序运行过程中,保持监听和重新读取配置文件4、可以从环境变量读取配置5、可以从远程配置系统读取配置6、可以读取命令行标志作为配置7、可以从缓冲区中读取8、设...

2019-01-15 22:08:57 6622

原创 golang下载非标准库包的曲径通幽~~

今天在学习github.com/spf13的时候,跑它的测试代码,发现需要关联一堆的包。然后借助Goland的强大功能下载,紧接着便遇到了下载不了golang.org/x/sys和golang.org/x/text两个包。第一反应是没有翻墙的问题,但是电脑可以连外网依然下载不成功。import ( "golang.org/x/sys/unix" "golang.org/x/text/tran...

2019-01-04 18:25:30 394

原创 go语言map转struct,使用mitchellh/mapstructure,mapstructure.Decode遇到的坑

Golang中的map转strcut在go语言的项目中,map与struct相互转换的需求很常见。网上有一些简单粗暴的解决方法,利用json的序列化和反序列化进行map与struct的转换,但是当map或struct有比较复杂的复合结构时,这种方法会忽略复杂结构的字段。所以这里介绍一种比较好的转换方式。使用mapstructure.Decode先直接上代码吧!type params str...

2018-11-30 18:47:52 11001 3

转载 windows常用命令行命令

windows常用命令打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口…也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令注:/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口控制台命令窗口中一些技巧复制内容:右键弹出快捷菜单,选择“标记(K)”,然后选中所需复制的内容,然后右键即可粘贴内容:右键弹出快捷菜单,选择“粘贴§”在...

2018-11-20 20:25:46 1175

转载 浅谈C中的wprintf和宽字符显示

转载一篇好文章,原文:https://blog.csdn.net/lovekatherine/article/details/1868724 。今天在CSDN的Blog首页看到一篇文章“也谈计算机字符编码 ”,由于前一阵业余翻译了“UTF-8 and Unicode FAQ for Unix/Linux”一文,自己对字符集、编码和Unicode等内容一直保着者很强的兴趣,自然不会放过这样的文章。...

2018-11-14 10:54:29 402

原创 在Makefile趟过的一些坑

“make: Nothing to be done for xxx” && “ *** missing separator. Stop.”我实际的操作是在Makefile里面添加了一个命令,保存之后,敲了命令之后就出现了如标题这样的问题,百度看了很多别人的博客、帖子,说的都是因为Makefile没有做make clean,或者make没有安装成功,写命令的格式不对之类的问题。但...

2018-11-02 11:48:28 866

原创 protobuf的安装和入门

protobuf的安装和入门mac环境下protobuf的安装1.安装google protocol buffer 编译器,点击这里下载合适的压缩包。2.安装golang protobuf,点击这里下载压缩包。3.将下载后的protobuf编译器解压后,将bin目录下的可执行文件protoc复制到$GOPATH/bin目录下。4.解压golang的protobuf,将整个proto...

2018-11-02 11:26:01 399

转载 go语言的类型转换 整型转字符串 字符串转整型

golang是强类型语言,在应用过程中类型转换基本都会用到。下面整理一下常用的类型转换,会持续更新。整形转字符串fmt.Println(strconv.Itoa(100))该方法的源码是:// Itoa is shorthand for FormatInt(i, 10).func Itoa(i int) string { return FormatInt(...

2018-08-22 20:27:42 6365

原创 Go语言字符串拼接的三种方式

Go语言字符串拼接的三种方式使用bytes.Buffer实现字符串拼接通过创建一个缓冲byte类型的缓冲器str1,然后通过WriteString方法将传入的字符串放入缓冲器的尾部,已达到拼接的作用,然后调用缓冲器str1的String()方法,可以返回放入缓冲器中的内容(实际返回的是缓冲器中未读的部分),返回类型为string。 var str1 bytes.Buffer ...

2018-08-22 20:08:14 11868

原创 govendor的安装与实践

govendor的安装与实践 govendor是Golang的依赖包管理工具,它的出现可以避免不同用户在clone同一个项目后从外部获取不同依赖库版本的问题。govendor会将项目需要的依赖包添加到项目的vendor目录下,并且该目录中vendor.json文件会保存添加的依赖包的路径等信息。 Golang项目中的go文件在查找依赖的顺序是,先在vendor中查找,vendor没找...

2018-08-13 21:41:02 13705

原创 open(java.nio.file.Path) in FSDirectory cannot applied to (java.io.File) 解决方式

问题的缘由就是Lucene版本不兼容,下面的FSDirectory.open()在Lucene5.0.0版本下,open的参数是Path而不是File。String path = " ... ";directory = FSDirectory.open(new File(path));所以在Lucene5.0.0版本下,正确的打开方式如下,这样得到的就是File,然后能正常赋给dire...

2018-08-07 19:03:23 2125

原创 SpringBoot、thymeleaf和Bootstrap的填坑过程

一、导入了thymeleaf的依赖后,在HTML5文件中使用thymeleaf的几个标签仍然有问题,其实大概是版本问题,具体可以看https://stackoverflow.com/questions/41354509/html-errors-when-serving-spring-mvc-but-not-when-viewing-the-page-statically,最后需要导入以下依赖即可。...

2018-07-30 20:52:19 4171

原创 利用Gson对json进行flatten(扁平化)处理

目录一.Gson的简单介绍二.通过构建json树实现两层json的解析三.通过递归实现多层json的解析一.Gson的简单介绍Gson是Google发布的一个处理json的java库。通过使用Gson可以将java对象序列化为json字符串,或是将json字符串反序列化为java对象。在Gson中,JsonElement是抽象类,由JsonObject、JsonArray、...

2018-07-25 16:01:13 5412

原创 Kafka mirror调研学习与实验总结

一、Kafka mirror基本概念:维护现有的kafka集群,将源集群的消息数据同步到镜像集群。       Kafka mirror的工作过程是创建一个mirror_consumer,从源集群中需要同步的主题消费消息数据,再通过创建的mirror_producer将mirror_consumer消费到的消息push到镜像集群。下图摘自《Apache Kafka源码剖析》。二、Kaf...

2018-07-17 19:42:38 1550

转载 Mac终端解压缩命令大全

tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.t...

2018-07-17 19:23:30 6998

转载 kafka中server.properties配置文件的参数说明

转自:http://blog.csdn.net/lizhitao/article/details/25667831server.properties中所有配置参数说明(解释)如下列表:参数说明(解释)broker.id =0每一个broker在集群中的唯一表示,要求是正数。当该服务器的IP地址发生改变时,broker.id没有变化,则不会影响consumers的消息情况log.dirs=/data...

2018-07-10 20:03:19 374

原创 初识LISP(3)——谓词、字符及数组

一、LISP—谓词谓词描述atom它接受一个参数,并返回t如果参数是一个原子或,否则nil。equal它有两个参数,并返回t,如果他们在结构上相同或否则nileq它有两个参数,并返回t,如果它们是相同的相同的对象,共享相同的内存位置或否则nileql它有两个参数,并返回t如果参数相等,或者如果他们是

2017-04-09 14:05:07 1757

原创 初识LISP(2)——结构、循环与函数

一、LISP—决策Construct描述cond这个结构是用于用于检查多个测试行动作条件。它可以嵌套if或其他编程语言语句。ifif结构有多种形式。在最简单的形式,它后面跟着一个测试条,测试操作和一些其它相应措施(次)。如果测试子句的值为true,那么测试的动作被执行,否则,由此产生的子句求值。when

2017-04-08 13:51:17 3930

原创 初识LISP(1)——基本的结构、语法与数据类型

;宏定义(defmacro setTo10(num)  (setq num 10)  (print num))(setq x 25)(print x)(setTo10 x);显示数据类型和所属范围(setq x 281474976710656)  ;构建一个符号指定一个值(setq x 281474976710657)(print (type-of x)

2017-04-07 21:37:42 5027

转载 (转)为什么LISP语言如此先进?

很高兴今天又读到了一篇非常有启发性的文章。说实话,读完后虽然有些部分还是觉得有点模糊,但这种模糊里还是有一点感觉。哈哈,先不说这些玄乎的话了。在我看来,是应该学习LISP的,感觉这门语言被推向了神坛,不免会引起我们这些小白的好奇心。当然,转载这篇文章也不止这一个原因。我觉得一个优秀的程序员乃至一个计算机科学家,是应该钻研几年编程语言后,回过头就这几门语言来思考一下这些语言能做什么(这里我的意思是,

2017-04-07 12:38:25 727

原创 通过Python实现定时器和利用魔法方法改善友好交互

实现Python的定时器是需要用到time库,其中需要调用的是localtime()方法,返回的是struct_time的时间格式,实际中只取前六位(年、月、日、时、分、秒)来达到实现计时的目的。今天的博文的重点有两个,一个是定时器实现计算间隔时间和两个间隔时间相加的过程,另一个是对魔法方法“__str__”和“__repr__”的理解和讨论。           作为一个新手,写博文的过程是

2017-04-01 15:00:55 795

原创 利用Python对文本文件进行简单的处理

在诸多软件压缩包中或是项目压缩包中都会存在一个readme.txt文件,其中的内容无非是对软件的简单介绍和注意事项。但是在该文本文件中,内容没有分段分行,是非常冗杂地混在一起。当然处理手段多种多样,而我正好尝试利用Python解决这个问题。另外,这些内容或许对将来爬虫爬下的内容进行处理也是有些帮助的,只不过面对的混乱和处理需求不同而已。      这里的思路很简单,打开一个文本文档,对其中具有

2017-03-28 23:21:23 12560

原创 利用Python的内嵌函数和递归研究汉诺塔问题

最近因为需要准备写爬虫等,所以开始学习Python。就汉诺塔问题来讲,简单的实现办法就是递归,没有什么可说的,懂递归的人随便用Java或C++都可以写出汉诺塔。但是现在我想知道给定层数下的汉诺塔完成后的最少步数是多少,大概值得菜鸟们稍微思考一会了,比如我。        在正常的迭代函数中,定义一个计数值,每次循环便加一,最后将计数值打印出来即可。但这里使用了递归,就有了一个小问题。如果在递归

2017-03-27 20:05:18 754

转载 (转)Lisp的本质

因为这学期学习《人工智能》课程的原因,无意中接触到了LISP语言,本着了解的态度在网上搜了搜关于LISP的文章,于是看到我转载的文章《LISP的本质》。对于我这样对于java、xml、C,乃至LISP都一般的人来说,看这篇文章至少可以将散碎的知识分个类,对,就是这样。重新审视XML千里之行始于足下。让我们的第一步从XML开始。可是XML已经说得更多的了,还能有什么新意思可说呢?

2017-03-12 16:17:40 629

转载 关于iptables解释

                                                                         (转)iptables的解释一:前言防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何

2016-12-24 19:14:59 514

《函数式编程思维》

本书关注各种OOP语言共同的实现方法,展示如何通过函数式编程解决问题。

2019-01-18

编译原理课件

作为入门初学和复习指导

2016-08-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除