自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 收藏
  • 关注

转载 Go组件学习——手写连接池并没有那么简单

1、背景前段时间在看gorm,发现gorm是复用database/sql的连接池。于是翻了下database/sql的数据库连接池的代码实现,看完代码,好像也不是很复杂,但是总觉得理解不够深刻,于是萌生了自己想写个连接池的想法。(最后也验证了,看源码的理解确实不够深刻,一看就会,一做就跪)2、连接池的实现原理什么是连接池顾名思义是一个池子池子里面存放有限数量即...

2019-09-08 11:44:00 245

转载 终于跑通分布式事务框架tcc-transaction的示例项目

1、背景前段时间在看项目代码的时候,发现有些接口的流程比较长,在各个服务里面都有通过数据库事务保证数据的一致性,但是在上游的controller层并没有对一致性做保证。网上查了下,还没找到基于Go开源的比较成熟的分布式事务框架。于是,准备看看之前隔壁部门大佬写的tcc-transaction,这是一个基于tcc思想实现的分布式事务框架。tcc分别代码Try,Confirm...

2019-08-31 19:09:00 335

转载 Go语言学习——如何实现一个过滤器

1、过滤器使用场景  做业务的时候我们经常要使用过滤器或者拦截器(听这口音就是从Java过来的)。常见的场景如一个HTTP请求,需要经过鉴权过滤器、白名单校验过滤、参数验证过滤器等重重关卡最终拿到数据。  Java使用过滤器很简单。XML时代,只要添加一个过滤器配置再新建一个实现了Filter接口的xxxFilter实现类;Java Configuration时代,只要在xxxC...

2019-08-30 00:58:00 455

转载 Go组件学习——database/sql数据库连接池你用对了吗

1、案例case1: maxOpenConns > 1func fewConns() { db, _ := db.Open("mysql", "root:rootroot@/dqm?charset=utf8&parseTime=True&loc=Local") db.SetMaxOpenConns(10) rows, err := db....

2019-08-25 17:28:00 251

转载 数据库炸了——是谁动了我的wait_timeout

1、起因  隐约听到坐在我对面的测试说测试环境的接口有问题  他们一番商讨后,朝我这边反馈说,现在测试环境的接口报504  我条件反射的回了句那是接口超时,再多试几次(测试环境的性能比较差,尤其是数据库,经常504  测试同学并不信服的点点头  再一会,有同事反馈自测自己的功能发现操作数据库失败,我去瞅了一眼  invalid connection,嗯,这个...

2019-08-18 18:32:00 185

转载 Go组件学习——gorm四步带你搞定DB增删改查

1、简介ORM  Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作。gorm  gorm就是基于Go语言实现的ORM库。  类似于Java生态里大家听到过的Mybatis、Hibernate、SpringData等。Github...

2019-08-04 16:49:00 708

转载 Go组件学习——cron定时器

1 前言  转到Go已经将近三个月,写业务代码又找到了属于Go的条件反射了。  后置声明和多参数返回这些Go风格代码写起来也不会那么蹩脚,甚至还有点小适应~  反而,前几天在写Java的时候,发现Java怎么启动这么慢,Java怎么能够容忍这些用不到的代码还理直气壮的躺在那……等等,这些话在哪听过类似的???  “Go为什么要后置声明,多别扭啊”  “Go里面为啥要定...

2019-07-28 18:54:00 263

转载 Go语言学习——channel的死锁其实没那么复杂

1 为什么会有信道  协程(goroutine)算是Go的一大新特性,也正是这个大杀器让Go为很多路人驻足欣赏,让信徒们为之欢呼津津乐道。  协程的使用也很简单,在Go中使用关键字“go“后面跟上要执行的函数即表示新启动一个协程中执行功能代码。func main() { go test() fmt.Println("it is the main gor...

2019-07-07 12:24:00 83

转载 Go语言学习——彻底弄懂return和defer的微妙关系

疑问  前面在函数篇里介绍了Go语言的函数是支持多返回值的。  只要在函数体内,对返回值赋值,最后加上return就可以返回所有的返回值。  最近在写代码的时候经常遇到在return后,还要在defer里面做一些收尾工作,比如事务的提交或回滚。所以想弄清楚这个return和defer到底是什么关系,它们谁先谁后,对于最后返回值又有什么影响呢?动手验证  了解下来...

2019-06-29 18:39:00 136

转载 Go语言入门——interface

1、Go如何定义interface  Go通过type声明一个接口,形如type geometry interface { area() float64 perim() float64}  和声明一个结构体一样,接口也是通过type声明。  type后面是接口名称,紧挨着是关键字interface。  接口里面定义的area()和...

2019-06-23 18:18:00 116

转载 Go语言入门——函数

写了快一个月的Go,已经没有什么陌生感了。一行代码写完,不会在行尾本能的敲上“;”,直接Enter键换行;定义变量把变量名放在前面,类型放在后面;使用struct去定义自己想要的数据模型就好比定义一个Java中的model一样……这些不用可以经过大脑加工思考,就想自己还在写Java一样。还记得当时在看《Go实战》的时候看到变量类型后置的声明方式,我还...

2019-06-15 23:54:00 88

转载 Go语言入门——数组、切片和映射(下)

上篇主要介绍了Go语言里面常见的复合数据类型的声明和初始化。这篇主要针对数组、切片和映射这些复合数据类型从其他几个方面介绍比较下。1、遍历  不管是数组、切片还是映射结构,都是一种集合类型,要从这些集合取出元素就要查找或者遍历。  对于从其他语言转到Go语言,在遍历这边还是有稍稍不同的。数组遍历形式1package mainimport "fmt"...

2019-05-26 12:49:00 137

转载 Go语言入门——数组、切片和映射

按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始”但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了。1、简介Go是什么?Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。——摘自百度百科Gi...

2019-05-19 10:30:00 137

转载 2018的穿肠毒药和2019的心灵鸡汤

  今年这个春节,《流浪地球》大火,路人皆知,准确的说,连银河系都知道地球要跑路了,还顺带无情的抛弃了月亮。 所以,太阳不高兴了,整个春节也没给我们什么好脸,甚至连脸都没露~   人,有时候很感性。风和日丽的时候心情也跟着明朗起来,乌云密布、阴雨连连的时候,自然也开心不起来。   今天和几个同行小聚了下,闲聊之余也是感慨颇多。无论是当前不太乐观的大环境,还是自身成...

2019-02-17 10:34:00 134

转载 《数据结构与算法之美》——冒泡排序、插入排序、选择排序

排序,是每一本数据结构的书都绕不开的重要部分。排序的算法也是琳琅满目、五花八门。每一个算法的背后都是智慧的结晶,思想精华的沉淀。个人觉得排序算法没有绝对的孰优孰劣,用对了场景,就是最有的排序算法。当然,撇开这些业务场景,排序算法本身有一些自己的衡量指标,比如我们经常提到的复杂度分析。我们如何分析一个算法?排序算法的执行效率1、最好、最坏和平均情况的时间复杂度2、时间复杂度...

2019-01-13 21:35:00 117

转载 《数据结构与算法之美》- 栈

栈,在这里说的是一种数据结构。你还可能知道的栈提到“栈”,做Java的同学还会想起Java内存模型中的“栈”,与之紧密关联的还有一个名词——堆,但是这里,此栈非彼栈。引用《深入理解Java虚拟机》中有关栈的介绍经常有人把Java内存区分为堆内存(Heap)和栈内存(Stack),这种分法比较粗糙,Java内存区域的划分实际上远比这复杂。这种划分方式的流行只能说明大多数程序员最关...

2018-12-01 22:51:00 155

转载 Spring Boot系列——AOP配自定义注解的最佳实践

AOP(Aspect Oriented Programming),即面向切面编程,是Spring框架的大杀器之一。首先,我声明下,我不是来系统介绍什么是AOP,更不是照本宣科讲解什么是连接点、切面、通知和切入点这些让人头皮发麻的概念。今天就来说说AOP的一些应用场景以及如何通过和其他特性的结合提升自己的灵活性。AOP应用举例AOP的一大好处就是解耦。通过切面,我们可以将那些反复出...

2018-11-11 16:59:00 137

转载 Spring Boot系列——死信队列

在说死信队列之前,我们先介绍下为什么需要用死信队列。如果想直接了解死信对接,直接跳入下文的"死信队列"部分即可。ack机制和requeue-rejected属性我们还是基于上篇《Spring Boot系列——7步集成RabbitMQ》的demo代码来说。在项目springboot-demo我们看到application.yaml文件部分配置内容如下...listener:...

2018-10-28 19:53:00 374

转载 Spring Boot系列——7步集成RabbitMQ

RabbitMQ是一种我们经常使用的消息中间件,通过RabbitMQ可以帮助我们实现异步、削峰的目的。今天这篇,我们来看看Spring Boot是如何集成RabbitMQ,发送消息和消费消息的。同时我们介绍下死信队列。集成RabbitMQ集成RabbitMQ只需要如下几步即可1、添加maven依赖<!--rabbitmq--><dependency&gt...

2018-10-22 23:09:00 122

转载 让我头疼一下午的Excel合并单元格

Excel导出常见问题excel导出其实不算什么难事在网上copy下模板代码,填充自己的业务数据,提供一个http接口基本就可以得到你要导出的数据了。但是,凡事都有例外,截止今天,excel导出我遇到的主要是两大类问题1、大数据量的excel数据,比如几十万条甚至更多的数据导出2、因为excel中内容的问题,导致导出后的excel不能直接打开,报错“由于一些内容不可取,Exce...

2018-10-15 22:33:00 361

转载 告别set和get,两大利器轻松搞定model转换

场景一:一般我们遇到需要新建model,常规做法就是创建一个类,老老实实的定义好model中的所有属性,一般来说属性对应的set方法和get方法都是少不了的,有时候还需要toString甚至equals和hashCode方法。现在的IDE已经很成熟了,一般不会手写set和get方法,采用IDE自带的快捷方式自动生成居多。如下图所示该方式相对手写方法来说,效率已经有了很大的提升,但还...

2018-09-15 20:03:00 141

转载 Spring Boot系列——如何集成Log4j2

上篇《Spring Boot系列——日志配置》介绍了Spring Boot如何进行日志配置,日志系统用的是Spring Boot默认的LogBack。事实上,除了使用默认的LogBack,Spring Boot还可以使用Log4j、Log42等作为自己的日志系统。今天就那Log4j2来举例,说明Spring Boot是如何集成其他日志系统的。添加jar包依赖上篇提到过,Spring...

2018-09-07 23:32:00 243

转载 Spring Boot系列——日志配置

日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节。但是,这丝毫不影响它在任何一个系统中的重要的地位。为了保证服务的高可用,发现问题一定要即使,解决问题一定要迅速,所以生产环境一旦出现问题,预警系统就会通过邮件、短信甚至电话的方式实施多维轰炸模式,确保相关负责人不错过每一个可能的bug。预警系统判断疑似bug大部分源于日志。比如某个微服务接口由于各种原因导...

2018-09-02 20:47:00 228

转载 没做过大项目,但我会建大项目

刚出来实习的时候,参与的项目使用的还是SSH框架。那时候还在使用SVN进行版本管理,常常在合并代码的时候遇到各种莫名其妙的问题。那时候使用着曾经宇宙最好用的Java IDE Eclipse写代码,也没有觉得界面简陋影响编码。那时候还不知道啥s是微服务,只知道有需求了就把代码往单体项目的代码里加,而且是前端和后台代码放一起的那种。什么Vue、React、Angular,不存在的,jQ...

2018-09-01 23:42:00 186

转载 Spring Boot系列——Spring Boot如何启动

Spring Boot启动过程​上篇《Spring Boot系列——5分钟构建一个应用》介绍了如何快速创建一个Spring Boot项目并运行。虽然步骤少流程简单,为开发者省去了很多重复性的配置工作,但是其底层实现并没有这么简单。这篇,我们就通过入口类TutorialApplication看看Spring Boot是如何启动的。注解写过Spring Boot都知道需要有一个入口类...

2018-08-26 20:22:00 87

转载 分库分表利器——sharding-sphere

背景得不到的东西让你彻夜难眠,没有尝试过的技术让我跃跃欲试。本着杀鸡焉用牛刀的准则,我们倡导够用就行,不跟风,不盲从。所以,结果就是我们一直没有真正使用分库分表。曾经好几次,感觉没有分库分表(起码要分表),项目就做不下去了,但是由于跨部门、工具约束、项目被砍等各种原因最终都偃旗息鼓,乖乖的搞单表加索引去了。应该是没有及时同步公司内部知识库的原因,过去的几次分库分表的尝试也是让人哭...

2018-07-29 18:25:00 692

转载 并发和多线程-八面玲珑的synchronized

上篇《并发和多线程-说说面试常考平时少用的volatile》主要介绍的是volatile的可见性、原子性等特性,同时也通过一些实例简单与synchronized做了对比。相比较volatile,其实我们应该更加熟悉synchronized,平时开发中接触和使用也更多一些。那么为什么说synchronized是八面玲珑呢,因为它可以混迹在很多“场所”(方法、代码块),与各种角色(类、对...

2018-06-10 18:47:00 82

转载 并发和多线程-说说面试长提平时少用的volatile

说到volatile,一些参加过面试的同学对此肯定不陌生。它是面试官口中的常客,但是平时的编码却很少打照面(起码,我是这样的)。最近的面试,我也经常会问到volatile相关的问题,比如volatile和sychronized的区别;volatile的使用场景;volatile的实现原理等等。问这些问题其实主要还是考察多线程、锁等方便的知识储备。虽然volatile在我们日常编码使...

2018-06-02 22:22:00 110

转载 Dubbo源码-Dubbo是如何随心所欲自定义XML标签的

叨叨今天考虑了很久要不要写这篇文章。距离《Dubbo源码》系列的开篇到现在已经快两个月时间了。当时是想着工作上的RPC框架使用存在一些让人头疼的问题,就来看看Dubbo给出了一套什么样的解决方案。结果,写完第一篇没几天,工作上因为要赶一个项目的进度,关小黑屋了,前段时间刚放出来-_-!琢磨着,做事不能半途而废。今天就又打开了Dubbo项目,pull下代码,在十多个子模块之间来回滚...

2018-05-20 22:36:00 124

转载 文件预览——一路躺过来的那些坑

因为最近项目比较紧,所以dubbo源码系列是顾不上了。恰巧这周花了几天在做文件预览这块,两三天的时间下来,有过一些走弯路的经验教训(准确说,全都是弯路),在这里给大家分享下~背景基于产品需求,需要支持文件预览的功能。顾名思义,要支持类似word、excel、TXT、PDF等格式文件的在线预览。业界对于文件预览功能的实现也是各显神通。大体主要分为两种,一种是自主研发,另外就是购买成...

2018-04-15 00:09:00 207

转载 Dubbo源码-从HelloWorld开始

Dubbo简介Dubbo,相信做后端的同学应该都用过,或者有所耳闻。没错,我就是那个有所耳闻中的一员。公司在好几年前实现了一套自己的RPC框架,所以也就没有机会使用市面上琳琅满目的RPC框架产品。之所以想好好看看Dubbo,有以下几个原因公司内部的框架一直在做迭代更新,配置越来越简洁,性能越来越好。但是作为使用者,它就像一个黑盒子,我们无法感知其内部的改动以及实现的原理现在使...

2018-03-25 12:41:00 91

转载 匆匆三月,归来已非少年

在前面的文章中,有提到过后面有时间会说说这次出差之旅。我想,现在,应该算是一个不错的时机。平时听到同学朋友说可以出差,自己的眼睛总是放光,全然没有把他们嘴上说的各种苦逼经历放在心上,自己想当然的认为他们跟我说的不是出差,而是去度假。如此偏执的我,遇到一次出差的机会,内心自然是很难拒绝。于是我就迎来了一次有些刻骨铭心的出差。此次出差,使命重大,肩负着两家公司的深厚寄托。我们作为雄狮...

2018-03-17 15:51:00 97

转载 2017年度总结

滴答~ 滴答~ 滴答~无论你在意,还是不在意,时间总是按照自己的节奏,从你的身旁悄悄溜走。他无声无息,来去无踪,却又让人着迷。这一年,是忙碌的,以至于没有太多的时间捕捉生活的细枝末节。这一年,又是引人思考的,因为有些问题就直愣愣的摆在面前,绕不开,躲不过。这一年,是充实的,因为,写起这篇年度总结的时候,脑海中浮现出很多的关键词……我与生活相互打磨细数过往,我们总能从各个途径听到不...

2018-02-15 19:32:00 156

转载 把玩爬虫框架Gecco

如果你现在接到一个任务,获取某某行业下的分类。作为一个非该领域专家,没有深厚的运营经验功底,要提供一套摆的上台面且让人信服的行业分类,恐怕不那么简单。找不到专家没有关系,我们可以爬虫。把那些专家的心血抽丝剥茧爬出来再统计即可。确定好思路,我和即将要说的爬虫框架Gecco打了一天的交道。Gecco简介Gecco是一款用java语言开发的轻量化的易用的网络爬虫。Gecco整合了js...

2018-01-21 13:21:00 221

转载 照虎画猫写自己的Spring——自定义注解

Fairy已经实现的功能读取XML格式配置文件,解析得到Bean读取JSON格式配置文件,解析得到Bean基于XML配置的依赖注入所以,理所当然,今天该实现基于注解的依赖注入了。基于XML配置文件方式的依赖注入一直是使用依赖注入的标配。使用配置文件让开发变的更加灵活,告别了硬编码和扩展性差的问题。但是,随着时间的推移以及大量开发人员的深度使用,越发觉得配置文件显得非常臃肿...

2017-12-03 19:02:00 95

转载 照虎画猫写自己的Spring——依赖注入

前言上篇《照虎画猫写自己的Spring》从无到有讲述并实现了下面几点声明配置文件,用于声明需要加载使用的类加载配置文件,读取配置文件解析配置文件,需要将配置文件中声明的标签转换为Fairy能够识别的类初始化类,提供配置文件中声明的类的实例一句话概括:不借助Spring容器,实现了Bean的加载和实例化要想契合Fairy取名时的初衷(东西不大,但是能量无穷),只有一套加载...

2017-11-25 21:39:00 97

转载 照虎画猫写自己的Spring

从细节跳出来看了部分Spring的代码,前面用了四篇内容写了一些读书笔记。回想起来,论复杂度,Spring够喝上好几壶的。他就像一颗枝繁叶茂的大树,远处看,只是一片绿;走近看,他为你撑起一片小天地,为你遮风避雨;往深了看,他盘根错节,根基夯实。在看Spring代码的过程中,我几度有些迷糊,因为一行简单的函数调用,你要是一直跟踪下去,从一个函数跳到另一个函数,又从一个类进入到另一个接...

2017-11-20 00:09:00 89

转载 Spring读书笔记——bean创建(下)

有关Spring加载bean系列,今天这是最后一篇了,主要接上篇对于从Spring容器中获取Bean的一些细节实现的补充。《Spring读书笔记——bean加载》——Spring如何加载消化一个xml配置文件《Spring读书笔记——bean解析》——Spring如何将xml文件的各种标签转换为BeanDefinition并注册到Spring容器下《Spring读书笔记——bea...

2017-11-04 12:10:00 129

转载 Spring读书笔记——bean创建(上)

通过《Spring读书笔记——bean加载》和《Spring读书笔记——bean解析》,我们明白了两件事。Spring如何加载消化一个xml配置文件Spring如何将xml文件的各种标签转换为BeanDefinition并注册到Spring容器下现在,我们理所当然的还差bean是如何被创建出来这一环节了。从getBean说起我们经常使用下面的方式实现先加载xml文件,然后获...

2017-10-22 11:09:00 91

转载 Spring读书笔记——bean解析

前情回顾上篇《Spring读书笔记——bean加载》我们从代码角度介绍了有哪些类负责解析XML文件,又是如何一步步从XML格式脱变成我们熟悉的bean的,直到DefaultBeanDefinitionDocumentReader的registerBeanDefinitions方法。我们抽丝剥茧,终于快看到Spring是如何解析bean的代码了。在此之前,我们回一下上篇看到过的主要类和...

2017-10-15 22:48:00 97

空空如也

空空如也

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

TA关注的人

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