自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

秋千不会坠的博客

每周坚持更新二到三篇博客 希望能给大家一些帮助

  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 dubbo 中层次的学习—简易rpc实现

​ 很多人和我一样,在平时的工作中对于dubbo只是停留于使用阶段。甚至很多时候,必须要新开放一个rpc接口,或者新引入一个rpc接口都是要抄之前的配置(所有参数照抄,只是把接口名改一下,然后把id改一下)。其实冷静下来想想,我们正在慢慢朝着刚毕业时最鄙视的人(浑浑噩噩的码农)转变了。​ 我最近跟公司的另外一个小伙伴一起在吃dubbo。他吃完了之后都做了笔记,而我可能看的源码比较少,吃起来很累,而且可能也没有那么深刻。不过毕竟这是我第一个吃的比较透的rpc框架,也希望能够留下一些文字,写一下我吃的整个

2020-11-09 21:49:04 226

原创 数据结构篇——常见排序算法核心思想简单梳理

排序算法核心思想总结emmm 写的比较简单,不适合新手看。适合已经手写过一遍的人复习用。冒泡排序核心思想两个循环让最小的数一直往上移动最小的,第二小的。。。循环到最后就已经排好序了选择排序核心思想找出数组中最小的一个数与数组中第一个交换以此类推,找第二个。。。循环到整个数组结束插入排序核心思想把数组看做左右两份。左边是有序的,右边是无序的。从左向右遍历右数组(...

2020-03-23 23:08:04 609

原创 数据结构篇——数组扩展(稀疏数组)

其实稀疏数组更多的是一种思想,而不是一种全新独立的数据结构。它本质上也就是一个二维数组。稀疏数组简介以及应用场景当一个数组容量很大,但是其中有效数据很少且是稀疏分布时,我们就可以使用稀疏数组来减少不必要的内存消耗。注:这里的有效数据,也可以理解为与绝大部分数据不同的。加上这个理解后,稀疏数组的应用场景会多很多。其实思想很简单,构建出来一个二维数组,然后把有效数据的坐标都一一标记出来放进二维...

2020-02-22 14:42:21 257

原创 数据结构篇——栈扩展(计算器,前中后缀表达式)

上一篇博客我们讲了队列的扩展应用,本篇我们再来分析一下栈的一些应用。计算器说到栈的应用,最经典的就是计算器的实现了。对于给定的一个算数表达式,我们需要输出它的最终结果。例如:对于输入(10+2-5)*(30/6) 我们需要输出35分析过程对于一个计算表达式,我们需要考虑运算符的优先级,还要考虑括号。按照我们人类的计算思路,会把要先运算的算好再与其他继续运算。例如: 1+2*...

2020-02-22 14:18:47 532

原创 数据结构篇——队列扩展(环形链表解决约瑟夫问题)

上一篇我们详细的讲了包,栈,队列的高性能实现方案。本篇博客,我们一起来讨论一下栈和队列的扩展应用。循环队列顾名思义,循环队列就是一个首尾相连的队列。我们可以在写之前总结出它的一些特点。根据首尾相连,则在逻辑上必有两个指针分别指向头和尾,且尾的下一个就是头;根据首位相连,则该队列必定是长度固定的;根据我们前篇博客,链表相较于数组在队列的实现上优势较为明显。如果使用链表来实现,则在这里链表...

2020-02-20 20:37:15 909

原创 数据结构篇——包(bag),栈(stack),队列(queue)

前言本篇博文想要介绍的是三种功能单一且最为基础的数据结构:包,栈,队列。相信阅读此篇博客的大部分读者都能够手撕或者直接口述出这三种数据结构的实现方法。本篇博文将会从一般实现方式入手,通过分析优劣点来进一步优化三种数据结构的实现方法。包,栈,队列的简介正如前言中所说。包,栈,队列是功能单一的数据结构。包:一种只能塞值不能取值的结构。即这个类对外暴露的api永远只有add(),没有get()。...

2020-02-18 20:46:20 2128

原创 mongodb——超好用的$

如果各位看过我之前的mongo博客,大家就会发现$是非常强大的。本篇博客中我们就专门来介绍一些常用的$操作符。查询类关键字解释语法例子$eq值相等{field:{$eq:value}}db.test.find({name:{$eq:“tom”}})$gt大于{field:{$gt:value}}db.test.find({age:{$gt:13}})...

2019-09-18 14:30:26 554

原创 mongodb——curd的其他知识点

这篇博客,我们来介绍几种查询的骚操作。投影(projection)——返回指定的字段在mongodb的查询中,可以通过一个bson来指定在这个查询里返回的字段。如果不指定,则默认全部返回。bson的格式如下:{ field1: <value>, field2: <value> ... }value:1或者true表示在返回的文档中需要包含的字段0或者false...

2019-09-10 15:24:16 102

原创 mongodb——查询文档内部属性以及数组

上一篇博客中,我们学会了最基础的查询方法。即按照某一个属性,使用最简单的属性匹配方式查询。这一篇博客中我们来讲一下文档内部嵌套属性的查询以及对于数组的查询。嵌入文档查询使用场景:如果一个文档内部有层级关系,此时想要根据内部属性进行查找例子:如果一个文档格式为{ "favorite":{ "sport":"soccer", "fruit":"apple...

2019-07-30 14:46:12 2297

原创 mongodb——curd

好了,这篇博客就是正式讲crud操作啦。我会尽可能的讲的简单一点,然后本篇博客也只会讲一些简单常用的操作。mongo插入让我们先从插入命令开始。mongodb的插入命令通用格式如下:db.collection.insert( <document or array of documents>, { writeConcern: <document>...

2019-06-28 10:44:00 178

原创 mongodb——curd之外

作为数据库命令,最最重要也是最最频繁的当然就是curd操作啦,不过在curd之前,让我们从一些curd之外的命令开始学习~非curd操作就像mysql的show database,desc等等命令一样,除了curd,mongodb也有一些其他的基础指令。好啦,如果你跟我一样也是按照上一讲博客在centos中安装好了mongodb的话,现在我们在命令行中直接敲mongo就可以进入mongo的sh...

2019-05-13 23:24:17 89

原创 mongodb之centos安装

安装参考mongodb官方指导创建一个repo文件在linux的/etc/yum.repos.d/目录下先创造一个mongodb-org-4.0.repo文件命令可以参考如下:cd /etc/yum.repos.d/touch mongodb-org-4.0.repo再在文件内部输入以下内容[mongodb-org-4.0]name=MongoDB Repositoryba...

2019-05-12 22:53:06 90

原创 mongodb简介

简介mongodb是一种介于关系型数据库与非关系型数据库之间的东西,简单来说就是非关系型数据库中最像关系型数据库(这里就不展开解释关系型数据库和非关系型数据库的差别啦)。主要用来存储一些难以结构化或者无需结构化的数据,比如文档啊,音频啊之类的东西。作为主流(emmmm,其实我也不知道算不算主流)数据库的一种,该有的东西基本上都是有的。像最基本的crud,稍微复杂一点的索引,在集群部署上面的分片,...

2019-05-08 00:26:51 157

原创 菜鸟之纸上谈兵系列

菜鸡归来好久没有认真写博客了,感觉自己工作以后内心浮躁了许多,明明是个小菜鸡但是总是不务实(为了暴富,什么公众号啊,直播啊乱七八糟的都去尝试了一下,结果。。。。)。加上公司加班也挺严重的——在此不实名抵制996 啦啦啦啦啦,心情就更加丧了。  作为菜鸡就应该有菜鸡的觉悟,还是老老实实一步一步的学习吧。所以我又回归csdn咯~为什么叫做纸上谈兵这一系列的博客应该都是一个调调。就是基本上没有经...

2019-05-05 22:51:06 136

原创 重构改善既有代码的设计学习笔记——重构中的tips整理

重构原则如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易,然后再添加特性重构前,先检查自己是否有一套可靠的测试机制,这些测试必须有自我检验能力重构技术就是以微笑的步伐修改程序。如果你犯下错误,很容易便可发现它任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员重构(名词形式):对软件内部...

2019-02-13 14:37:36 147

原创 重构手法列表——大型重构

梳理并分解集成体系(Tease Apart Inheritance)现象:某个继承体系同时承担两项责任动机:混乱的继承会使得修改变得困难,并使得代码难以理解。此外这种不好的现象也极容易蔓延(添加很多很多的子类)做法:建立两个继承体系,并通过委托关系让其中一个可以调用另一个将过程化设计转化为对象设计(Convert Procedural Design to Objects)现象:出现了一些...

2019-02-13 14:27:12 997

原创 重构手法列表——处理概括关系

字段上移(Pull Up Field)现象:两个子类拥有相同的字段动机:去除重复声明;去除重复行为做法:将该字段移至超类函数上移(Pull Up Method)现象:有些函数,在各个子类中产生完全相同的结果动机:去除重复行为做法:将该函数移至超类构造函数本体上移(Pull Up Constructor Body)现象:各个子类中拥有一些构造函数,它们的本体几乎完全一致动机:去除...

2019-01-29 11:19:25 344

原创 重构手法列表——简化函数调用

函数改名(Rename Method)现象:函数的名称未能揭示函数用途动机:一个好的名称对程序解释起到非常大的作用做法:修改函数名称添加参数(Add Parameter)现象:某个函数需要从调用端得到更多的信息动机:需要信息做法:为此函数添加一个对象函数,让该对象带进函数所需信息移除参数(Remove Parameter)现象:函数本体不需要某个参数动机:多余无用的参数,会让函...

2019-01-28 17:31:33 250

原创 重构手法列表——简化条件表达式

分解条件表达式(Decompose Conditional)现象:有一个复杂的条件语句动机:有复杂的条件表达式会使代码可读性下降做法:从if then else三个段落中分别提炼出独立函数合并条件表达式(Consolidate Conditional Expression)现象:一系列条件测试都得到相同的结果动机:合并代码后使逻辑更加清晰做法:将这些测试合并为一个条件表达式,并将这个...

2019-01-28 15:10:01 257

原创 重构手法列表——重新组织数据

自封装字段(Self Encapsulate Field)现象:直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙动机:当直接访问类里面的字段不能满足需求时(比如需要延迟初始化),可以通过封装方法来获取字段做法:为这个字段设置get/set函数,并用这些函数来访问字段以对象取代数据值(Replace Data Value with Object)现象:一个数据项需要与其他数据和行为一起...

2019-01-27 14:39:51 580

原创 重构手法列表——在对象之间搬移特性

搬移函数(Move Method)现象:有函数与其所驻类之外的另一个类进行更多交流:调用后者或被后者调用动机:两个类并无太多合作,但是出现了高度耦合。做法:在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧函数完全移除搬移字段(Move Field)现象:某个字段被其所驻类之外的另一个类更多地用到动机:把职责迁移到更适合它的地方去做法:在目标...

2019-01-26 10:45:24 648

原创 重构手法列表——重新组织函数

提炼函数(Extract Method)现象:有一段代码可以被组织在一起并独立出来重构动机:粒度小的函数,复用性比较高;会使得高层函数看起来就像注释一样;细粒度的函数,复写起来比较容易做法:根据函数的意图来命名新的函数,重点在于能否取出一个有意义的名字。内联函数(Inline Method)现象:一个函数的本体与名称同样清楚易懂重构动机:非必要的间接性会带来非必要的复杂度做法:在函数...

2019-01-25 15:33:58 281

原创 重构改善既有代码的设计学习笔记——代码坏味道整理

重复代码过长函数过大的类过长参数列发散式变化:应对外界某一个变化时,某一类需要修改的东西太多霰弹式修改:应对外界某一个变化时,需要修改很多很多的类依恋情结:A类中的方法对于B类感兴趣的程度超过A类本身数据泥团:在很多地方出现相同的数据项(方法参数,两个类中相同的字段)基本类型偏执:代码中缺少小型对象,除了基本类型就是体积庞大的结构体(如数据库表对象)switch语句平行集成体...

2019-01-25 14:07:23 164

原创 分布式架构设计学习笔记——架构演变过程

好久没有写博客了,原因是啥呢?没错,就是懒。不过作为一个程序员学习是不能停止滴,这一系列的笔记我之间都是记录在某笔记软件上的,所以这一系列可能会发的比较快,但是可能有些语无伦次(毕竟都是ctrl+c,ctrl+v)~总的说起来,服务端架构演变可以表达成这样mvc垂直架构-&amp;gt;rpc远程调用架构-&amp;gt;soa-&amp;gt;msa各种架构都曾经红极一时,以下是它们的特点:mvc适合小型项目...

2019-01-24 15:18:37 198

原创 大话设计模式学习笔记(29)——设计模式总结

各种模式样例代码git地址:https://github.com/dlovetco/designMode 例子与博客中的问题配套创建型模式创建型模式隐藏了这些类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样创建性模式在创建了什么,谁创建它,它怎么被创建的以及何时创建这些方法提供了很大的灵活性。简单工厂简单工厂不符合开放封闭原则:每新增加一...

2018-03-30 16:02:23 258

原创 大话设计模式学习笔记(28)——访问者模式

源码git地址 https://github.com/dlovetco/designMode 这个是最后一个也是最难的设计模式啦。估计看到这里的同学们一定像我一样把以前学过的28个设计模式忘得差不多了,下一篇我们就会总结一下我们学过的所有设计模式。问题提出请用面向对象的方式表明: 男人成功的时候背后有个伟大的女人, 女人成功的时候背后有个不成功的男人, 男人失败时闷头喝酒 女人失...

2018-03-29 16:05:11 214 1

原创 大话设计模式学习笔记(27)——解释器模式

源码git地址 https://github.com/dlovetco/designMode 有时候我们会遇到这样的一个问题:客户端能够提供的参数并不是我们所需要的。在调用正确的api之前,我们需要先把客户端传进来的参数解析成我们所需要的格式。问题的提出音乐简谱中描绘乐曲用的是1234567,而实际发出的声音却是“哆瑞咪发嗦啦西”。实现一个简谱到音乐的转译系统。解释器模式给定...

2018-03-29 15:03:34 191

原创 大话设计模式学习笔记(26)——享元模式

源码git地址 https://github.com/dlovetco/designMode 在项目中有可能我们会需要建立许许多多个类似的对象,这些对象之间的不同可能仅仅是参数不同。盲目地不断new会不断加重服务器负担,此时我们可以考虑复用一些对象。问题提出小明做外包要建立许多个网站。有博客类的,购物类的等等。同类的网站结构几乎差不多,不同的只是某些地方的数据,像一些账户信息,文字内容。...

2018-03-29 14:27:27 123

原创 大话设计模式学习笔记(25)——中介者模式

源码git地址 https://github.com/dlovetco/designMode 有时候类与类之间的关系虽然在设计初期是相互独立的,但是随着代码量的增加很容易在类之间建立起许许多多的关系。此时再去看类图会发现此时的类图已经变成网状结构,违反了我们之前讲过的迪米特法则。解决这个问题的一种可行的办法是把网状结构改成以一个管理类中心的星型结构。问题提出以国与国之间的关系为例。所有国...

2018-03-29 13:08:35 187

原创 大话设计模式学习笔记(24)——职责链模式

问题提出小明想要请个假,但由于种种原因不得不一直向上层层传递到总经理。设请假的级别为10。组长处理的级别为1~5,经理处理的级别为6~8,总经理处理的级别为9~10。用代码实现这个请假场景。职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递改请求,直到有一个对象处理它为止。package chainofr...

2018-03-28 18:29:19 158

原创 大话设计模式学习笔记(23)——命令模式

源码git地址 https://github.com/dlovetco/designMode问题提出小明在一家烧烤店里吃烧烤。店里人很多,所以由服务员来负责记录客人们点了哪些菜。之后再把要烧烤的菜单拿到后厨给厨师。用代码实现小明点单的场景。普通情况下,一般都是客人直接像厨师发出请求。但是这样的坏处在于客人不能更改自己的订单,而且没有具体的记录下来菜单,不好算账。所以这个服务员类就是负责...

2018-03-28 16:53:15 257

原创 大话设计模式学习笔记(22)——桥接模式

源码git地址 https://github.com/dlovetco/designMode问题提出不同品牌的手机各不相同。同一款软件在不同手机上运行很有可能是不一样的。要求用代码实现这一种情况。题目中提到了两种不同的分类方式:一种是按品牌分类手机,然后对于每一个软件都需要两个实体类来表示不同手机运行情况不同;另外一种是先按照软件种类分,然后再根据手机品牌分。这两种分类方法都有很明显的...

2018-03-28 15:21:49 161

原创 大话设计模式学习笔记(21)——单例模式

源码git地址 https://github.com/dlovetco/designMode问题提出确保一个实体类在整个程序运行中只能被实例化一次。即只能有一个该类的对象。看到这个问题,有一定编程基础的同学肯定能够想到用单例模式。本篇博客我就来写一下单例模式的5种不同的实现方法。package singleton;public class Singleton { p...

2018-03-27 20:52:48 143

原创 大话设计模式学习笔记(20)——迭代器模式

源码git地址 https://github.com/dlovetco/designMode 其实迭代器模式说出来很简单,就是在java语言中的foreach遍历。只不过我们平时在用不会去深究foreach的内部算法,现在我们来自己手写一下遍历。问题提出体育老师让小明数一下有多少个同学来上体育课了。package iteratorMode;import java.util.A...

2018-03-26 19:17:55 253

原创 大话设计模式学习笔记(19)——组合模式

源码git地址 https://github.com/dlovetco/designMode问题提出要求用代码模拟出一个树的生长(由根部慢慢往上产生树枝,再产生树叶)。根可以产生树枝和树叶;树枝可以长出树叶;树叶就不能再继续生长。组合模式将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。package composit...

2018-03-26 17:52:28 162

原创 大话设计模式学习笔记(18)——备忘录模式

源码git地址 https://github.com/dlovetco/designMode问题提出玩游戏的时候在打boss之前都会保存一下,如果被boss打死了还可以读档重新来过。试着用代码实现这种保存的机制。代码写到现在,相信小伙伴们都应该知道要注意一些什么事情。 比如: - 降低类与类之间的耦合性,尽量面向接口编程 - 尽可能的降低类的可见性。客户端能接触到的类越少越好(包...

2018-03-26 15:39:43 203

原创 大话设计模式学习笔记(17)——适配器模式

源码git地址 https://github.com/dlovetco/designMode问题提出小明新买了一台电脑,但是发现显示器是HDMI的接口,而自己只有VGA的线。所以没办法只能再买一个转接口来连接显示器和主机。 用代码实现上述场景。适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。pac...

2018-03-26 14:27:21 172

原创 大话设计模式学习笔记(16)——状态模式

源码git地址 https://github.com/dlovetco/designMode问题提出人一生有很多个时期,而不同的时期应该做不同的事情。比如童年需要开心的玩耍,青年需要认真工作,老年可以享受天伦之乐。。。用代码实现上述场景。使用switch实现package statemode;public class StateMode { public stati...

2018-03-26 13:39:16 174

原创 大话设计模式学习笔记(15)——抽象工厂模式

源码git地址 https://github.com/dlovetco/designMode 前面我们学过简单工厂,工厂方法两种“工厂”有关的设计模式。今天让我们来看看这个抽象工厂是怎么回事。问题提出小明和小红是夫妻,他们决定在装修的时候提出两种室内设计。因为谁也不能说服谁,所以这两种设计都要保留,不到最后一刻都说不准采用哪一种方法。此外需要小红和小明都给出一个装修模型。要求用代码实现...

2018-03-25 21:00:26 157

原创 大话设计模式学习笔记(14)——观察者模式(发布-订阅模式)

源码git地址 https://github.com/dlovetco/designMode问题提出同学们都在上自习课,老师没人所以开始纷纷玩起来。坐在门口的同学需要完成望风任务,即发现老师回来的时候要告诉全班同学不要玩了,继续上自习。要求用代码实现上述场景。由上述问题,我们可以定义两个角色:望风的同学(小明),玩耍的同学(小刚和小红)。 先举一个简单的高耦合的例子。高耦合代...

2018-03-23 15:40:27 218

空空如也

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

TA关注的人

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