自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TimSort 排序算法

之前给数组排序写比较方法时,出现了一个报错:Comparison method violates its general contract!然后报错提示到TimSort.mergeHi()方法抛出的异常,于是我就开始溯源问题,顺便研究一下世界上最快的归并排序——TimSort排序的实现。首先在java的bug中第一次发现了TimSort的说明文档:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6804124http://svn.pyt

2021-03-07 16:14:13 925

原创 常用排序算法实现

好久没有写博客了,就以这篇最近突发奇想的常用排序算法总结做回归吧。以下是代码import java.util.concurrent.TimeUnit;/** * @Auther: yubotao * @Description: * @Date: Created in 19:28 2021/02/21 * @Modified By: */public class SortTest { private static int[] a = {2,3,5,1,6,2,4,7,5,7,3,

2021-03-07 15:20:23 248 1

原创 无题

为什么叫无题呢?因为我懒得想名字。也是写这篇文章的主要原因,因为我最近太懒了!回首过去这二十多年,这种熟悉的感觉出现了很多次。从小学到初中,我过得充实而快乐,每天做的事无非是上下学,玩儿,看电视。初中关注点都在学习上,而且非常荣幸的是,当时我的竞争对手很给力,我从来没有彻底击败过他们,因此给了我不断前进的动力。高中的主要关注点依然是学习,而且高中强者如林,从来不会缺竞争对手,也不会少了假想敌。...

2019-12-03 11:19:38 302 2

原创 sql的case when和left join

总结一下昨天写sql时新接触到的知识点。SELECT c.`name` AS '客户姓名', c.customer_adderss AS '客户地址', c.phone AS '客户联系电话', c.serial AS '客户编码', o.material_name AS '物料名称', o.material_serial AS '物料编码', o.material_single_...

2019-05-08 11:08:57 9637

原创 初次接触存储过程

最近有个需求需要查数据库中的数据,然后需要对一个结果集进行循环比对,使用sql语句已经无法满足需求了,所以大概看了一下存储过程的相关内容,这里需要特别感谢这篇文章,基本是以它为蓝本完成的。创建存储过程的格式create procedure name(param...)begin...end定义全局变量declare name varchar(32);创建临时表CREATE T...

2019-04-25 16:49:53 238

原创 与设计模式相处

模式是在某情境下,针对某问题的某种解决方案。模式必须应用于一个重复出现的问题。模式分类:何时使用模式?当你在设计的时候,如果确定在你的设计中可以利用某个模式解决某个问题,那么就使用这个模式!如果有更简单的解决方案,那么在决定使用模式之前应该先考虑这个方案。并非只有在设计时才考虑引进模式,在重构时也要这样做!反模式告诉你如何采用一个不好的解决方案解决一个问题。让设计模式自然而...

2019-03-29 09:41:49 236

原创 其他模式

桥接模式(Bridge Pattern)使用桥接模式可以同时改变实现及抽象,而不会互相影响生成器模式(Builder Pattern)生成器模式封装一个产品的构造过程,并允许按步骤构造。与工厂模式有本质不同。责任链模式(Chain of Responsibility Pattern)责任链模式可以让一个以上的对象有机会处理某个请求。比如拦截器链就是责任链模式的最佳实现。蝇量...

2019-03-29 09:41:43 459

原创 复合模式

GitHub代码复合模式(Compound Pattern)就是一种由模式所构成的模式。最典型的例子就是MVC(Model-View-Controller)。控制器把控制逻辑从视图中分离,让模型和视图之间解耦。通过保持控制器和视图之间松耦合,设计就更有弹性而且容易扩展,足以容纳以后的改变。在Web开发中,大家非常熟悉的MVC变型被称为“Model 2”,其使用了Servlet和JSP技...

2019-03-29 09:41:37 502

原创 代理模式

GitHub代码远程代理场景描述:我们想要一台远程监视器!我们可能需要引入一点新概念了,比如远程代理。远程代理就好比“远程对象的本地代表”。何谓有“远程对象”?这是一种对象,活在不同的Java虚拟机(JVM)堆中(更一般的说法为,在不同的地址空间运行的远程对象)。何谓“本地代表”?这是一种可以由本地方法调用的对象,其行为会转发到远程对象中。客户对象所做的就像是在做远程方法的调用,但其实只...

2019-03-29 09:41:26 212

原创 状态模式

GitHub代码场景描述:我们想要写一个糖果机,如下是它的状态图。我们想到最直接的解决办法就是,大段的if else块但是正如我们之前所说,if else块一旦遇到需求变更等情况,不仅面临着大量代码的重写等,还面临着出现bug的情况。并且这种设计不符合我们之前提到的开放-关闭设计原则(对扩展开放,对修改关闭)。比如我们突然要加一条随机幸运儿,有10%的几率一次获得两个糖豆。所以我们尝...

2019-03-28 19:07:31 177

原创 迭代器与组合模式

GitHub代码迭代器模式场景描述:我们目前正在吞并期,刚把一个煎饼店和一个餐厅兼并了。但是关于菜单的设计上好像遇到了写麻烦,两者采用的集合不同,一个用数组,一个用ArrayList。尝试:如果我们想要打印菜单,就需要分别对两种不同的集合进行处理。我们可以封装遍历吗?不论是那种集合,我们都可以统一进行处理。这就需要引出迭代器了。public interface Iterator {...

2019-03-28 19:02:30 239

原创 模板方法模式

GitHub代码场景描述:假设我们的咖啡馆拥有两种饮料的冲泡方法,但是它们的步骤是很类似的。因此我们想要将这种饮料冲泡法整合成一种模板式的方法,每种饮料仅针对其特定的调配模式自我实现。我们目前设计如下我们根据如上设计进行代码编写首先在超类中定义模板方法public abstract class CaffeineBeverage { final void prepareRecip...

2019-03-28 18:51:54 294

原创 适配器模式与外观模式

适配器GitHub代码外观GitHub代码适配器模式场景描述:想象一下我们维护了一套老系统,并于一个厂商通过接口进行交互。但是最近厂商更新它们的代码,并变更了接口格式,我们如何在不修改老系统代码的基础上,优雅的过渡呢?提出方案:我们可以想象一下我们平时使用的转换头,这就是一种适配器。我们可以通过这种方式来优雅的“将方形放入圆形中”。我们尝试举一个例子,假设现在有一个鸭子接口public...

2019-03-28 18:46:07 641

原创 命令模式

GitHub代码场景描述:我们需要构建一个遥控器程序,它拥有几个插槽,而这些插槽可以配置不同功能的api,并且拥有一个撤销按钮,可以撤销上一次的操作。第一构想:使用大段的if else做逻辑判断,但是这是一种非常糟糕的设计。在提出改进方案之前,让我们看一个关于餐厅点餐的示例。进而引申出命令模式命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志参数化其他对象。命令模式也支...

2019-03-28 18:36:24 209

原创 单例模式

GitHub代码场景描述:假设我们需要一个全局唯一的实例,比如线程池,缓存等。初步解决:比如所有开发人员通过约定,或者全局变量来实现。问题:将对象赋值给一个全局变量,但并不一定会立即使用它,从而占用内存资源,造成资源的浪费。更好的方案:使用单例模式。经典的单例模式代码如下:public class Singleton { private static Singleton uni...

2019-03-28 18:30:42 126

原创 工厂模式

GitHub代码场景描述:我们正在设计一个披萨店,因为我们对披萨的操作有一套固有的流程,比如切割,装盒等,但是我们有着非常多的披萨类型,风味不同,所以如何设计针对不同口味创建不同的披萨就成了整个程序的难点。简单工厂为了增加程序的弹性,并且避免频繁修改代码,我们将变化的部分拿出去,创建了一个简单工厂类。public class SimplePizzaFactory { public...

2019-03-28 18:26:21 194

原创 装饰者模式

GitHub代码场景描述:咖啡店的订单系统,初始的类设计如下现提供加入配料的服务,在原有的系统上进行扩展。初次尝试:直接为每个组合创建一个类,带来的问题就是类的数量过多,且毫无弹性可言。再次尝试:从基类Beverage下手,通过实例变量表示是否加上调料。带来的问题:如果发生需求变动,比如调整调料价格,加入新的调料等等都会造成对原有代码的修改。也没有实现弹性设计。设计原则:类应该...

2019-03-28 18:15:30 365

原创 观察者模式

GitHub代码场景描述:我们得到了一个类WeatherData,它可以从气象站取得数据,现在需要我们实现measurementsChanged()方法,将数据更新到相应的布告板上。初次尝试:public void measurementsChanged(){ float temp = getTemperature(); float humidity = getHumidit...

2019-03-28 18:06:36 236

原创 策略模式

GitHub代码场景阐述:通过设计一个超类鸭子而让子类继承,提取出部分公共方法进行实现,但后续添加需求时,因为设计上的问题导致无穷无尽的噩梦……事出有因:超类鸭子负责实现公共的呱呱叫(quack)方法,后续提出需求,想要为鸭子加入fly方法以提高产品竞争力,但是由于技术失误,将此fly方法作为公共方法在超类鸭子中实现后,程序出现bug,橡皮鸭子也会飞啦!改进策略:通过在橡皮鸭子中覆盖fly方...

2019-03-28 17:59:28 233

原创 记录使用rmi时,遇到的一点困难

今天看设计模式的代理模式时,讲到了rmi的使用,所以就想着操作一下,结果遇到了以下几个问题:rmic 不是内部命令……主要原因是环境变量的配置,需要将jdk/bin和jre/bin这两个路径加入path变量中,然后重新开一个cmd窗口。使用javac编译的时候,有的其他类是有依赖类的,但是一个一个单独编译,会报找不到符号的错误这个需要将这些依赖文件一起编译,而不能单独编译,也可以使用ja...

2019-03-19 14:40:58 203

原创 记于谦

抽烟,喝酒,烫头一谈到于谦,想必于老师的三大爱好也就呼之欲出了。一说到于谦,我们也总是能够想起郭老师,还有于谦的父亲王老先生。我还记得我第一次听到于谦这个名字时,那时的我青春无敌,可以朗朗上口的吟出:“千锤外凿出深山,烈火焚烧若等闲。粉身碎骨浑不怕,要留清白在人间。”还记得那是年少的我,因为和于谦是本家,同姓于而沾沾自喜,至于为什么会有这种莫名其妙的虚荣感,当时的我并不是很懂,当然对于于...

2019-02-28 15:01:52 260

原创 2018年终总结

时光荏苒,又稀里糊涂的混过了半年,这半年仔细想了想好像也没干啥,参与了公司一部分的业务设计,调研了一些新技术,自己稀里糊涂,囫囵吐枣的扫了几本书,又年长了一岁。接下来就透过我下半年的笔记,探寻一个有血有肉,混吃等死的灵魂吧。1.首先接着上半年的尾巴,继续调研istio,当时由于版本升级,所以又重新熟悉了一遍0.8的版本,不过后来因为开始参与业务设计及开发,所以istio后续搁置了。基本上这个时...

2019-01-10 11:47:35 309

原创 简单了解Serverless

这两天在了解serverless,所以大概看了不少的文章,主要了解了一些概念性的知识。这里简单的记录一下。介绍Serverless是一种新兴起的架构模式。它是指明显或充分地依赖第三方应用或服务来管理服务器端逻辑和状态,可以让你在服务部署级别而不是服务器部署级别来管理你的应用部署,甚至可以让你管理某个具体功能或端口地部署,能够让开发者快速迭代,更快速地开发软件。总结下来,不需要处理运维方面的事...

2019-01-04 16:23:55 746

原创 初识gRPC——Java

本文参考文章:https://blog.csdn.net/sunsun314/article/details/73780169https://www.cnblogs.com/mzsg/p/5643367.htmlhttps://grpc.io/docs/tutorials/basic/java.htmlhttp://doc.oschina.net/grpc?t=60134如果你不了解gR...

2018-12-25 18:16:58 430

翻译 gRPC over HTTP2

文章来源:https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md本文用于详细描述gRPC承载HTTP2帧的实现。Outline以下是grpc请求和响应流中消息原子的一般顺序:Request → Request-Headers *Length-Prefixed-Message EOSResponse → (Respon...

2018-12-25 17:04:52 2015

翻译 gRPC Guides

What is gRPChttps://grpc.io/docs/guides/index.htmlgRPC可以使用protocol buffers 作为其接口定义语言(IDL)及其底层信息交互格式。Overview在grpc中,一个client应用可以直接调用不同机器上的server应用的方法,好像它是一个局部对象,可以让你更加容易的构建分布式应用和服务。与许多RPC系统一样,gRPC基...

2018-12-25 16:41:46 663

原创 关于红黑树(RBT)

本文内容主要是在看完wiki后写的,所以可以直接在wiki中找到关于红黑树的讲解,传送。这里不罗嗦了,直接开始。首先,红黑树是一个满足如下属性的二叉查找树(不知道二叉查找树的朋友先去补一下相关知识):每个节点非黑即红。根节点为黑。有时可忽略这条规则,因为根节点总是可以由红变黑,但反过来可未必如此,这条规则的影响非常小。所有叶子节点(NIL)都为黑。叶子节点无值。如果一个节点为红,则它...

2018-12-22 20:07:15 331

原创 spring oauth2实现数据库存储token

之前我有写过一篇关于spring oauth2的学习笔记,当时的实现是使用了在内存中定死了用户,然后将token存到redis中,可以说是一种比较简单的实现方式。这篇文章是在之前的基础上迈了一小步,可以实现从数据库读取用户,并将token存储到数据库中。这样就可以满足一般的基本生产需求了。当然还有更加深入的将client信息保存到数据库,使用jwt等等,由于我没有深入的了解,并且也不需要如此复...

2018-12-18 15:49:28 5447 2

原创 初见HashMap源码

这篇文章算是json那篇的番外吧,毕竟是为了搞清楚那件事,才引出了这件事。本文只是简单的看了一下java 8的HashMap源码,大概只详细的看了两个方法,并且参考了几篇源码文章:https://blog.csdn.net/soga613/article/details/78958642http://www.importnew.com/28263.html那么我们就开始吧。简介翻开源码...

2018-12-10 16:29:47 186

原创 按照对象属性顺序传递json

上午刚好碰到这个问题,简单的查了一下,然后记录一下。参考文章由于前后台数据传递都是以json形式互相通信,所以就涉及json传递数据的属性排序问题。以下测试使用阿里的fastjson。首先使用JSONObject的put方法,一开始我以为是按照字符顺序排序的,但是经过测试发现并不是这样根据测试结果可以看出,应该是内部实现的时候,排序方法就有一定的问题。当我们在controller中...

2018-12-07 14:24:04 2658 1

翻译 Consumer Acknowledgements and Publisher Confirms

(Consumer) Delivery Acknowlegements当Rabbit MQ向consumer发送message时,它需要知道何时可以认定message已成功发送。在AMQP 0-9-1中,使用basic.consume方法注册一个consumer,或通过basic.get按需获取message。Delivery Identifiers: Delivery Tags当一个con...

2018-12-03 16:30:36 520

翻译 Queues

NamesQueues 有名字,这样应用才能引用它们。应用可能自己取名或者让broker为它生活吃呢过一个名字。Queue名字最多可包含255个字节的UTF-8字符。以“amq.”开头的queue名字是broker内部预留的。试图违反规则声明一个这样名字的queue 会导致一个channel级的异常,返回码为403(ACCESS_REFUSED)Server-named Queues在A...

2018-12-03 16:22:30 1135

原创 关于spring boot rabbitmq的学习使用

最近由于工作需要接触了RabbitMQ,并简单的进行了尝试。所以记录一下学习到的相关知识。在一切开始之前,我们先看一下为什么需要使用消息队列?https://blog.csdn.net/songfeihu0810232/article/details/78648706http://www.cnblogs.com/xuyatao/p/6864109.htmlGitHub测试代码Rabbi...

2018-12-03 16:11:46 305

转载 springboot中使用aop

参考文章最近接触到aop的使用,所以写点东西记录一下,虽然在spring mvc时代用过aop,但是毕竟大势已去,现在需要追赶潮流。从各方面讲,差距都不是很大,只不过springboot 用的都是注解,可能更方便些。以前印象中,springmvc的aop是可以用来实现事务和日志通知的,但是现在springboot对于事务的处理有了更好用的注解@Transactional,所以我们就简单的看看...

2018-11-24 14:13:31 417

原创 CSSAPP稀里糊涂的读书笔记(十二)并发编程

本章主要研究三种基本的构造并发程序的方法:进程。每个逻辑控制流都是一个进程,由内核来调度和维护。因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显示的进程间通信(IPC)机制。I/O多路复用。应用程序在一个进程的上下文中显式地调度它们自己的逻辑流。逻辑流被模型化为状态机,数据到达文件描述符后,主程序显式地从一个状态转换到另一状态。因为程序是一个单独地进程,所以所有地流都共享...

2018-10-26 09:20:20 232

原创 CSSAPP稀里糊涂的读书笔记(十一)网络编程

本章主要就是一些概念性的东西。代码直接看书。每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。客户端-服务器模型中的基本操作是事务(transaction)。一个客户端-服务器事务由以下四步组成。1)当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务...

2018-10-26 09:20:10 220

原创 CSSAPP稀里糊涂的读书笔记(十)系统级I/O

本章介绍Unix I/O 和标准I/O的一般概念,具体的细节什么的还是看书比较好。一个Linux 文件就是一个 m 个字节的序列,所有的I/O设备都被模型化为文件,而所有的输入和输出都被当作对响应文件的读和写来执行。这种将设备优雅地映射为文件地方式,允许Linux内核引出一个简单、低级地应用接口,称为Unix I/O,这使得所有地输入和输出都能以一种统一且一致地方式来执行:打开文件。一个...

2018-10-25 16:35:04 197 2

原创 CSSAPP稀里糊涂的读书笔记(九)虚拟内存

虚拟内存(VM)为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟内存提供了三个重要的能力:1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。2)它为每个进程提供了一致的地址空间,从而简化了内存管理。3)它保护了每个进程的地址空间不被其他进程破坏。本章从两个角度来看虚...

2018-10-25 16:30:28 306

原创 CSSAPP稀里糊涂的读书笔记(八)异常控制流

异常控制流(Exceptional Control Flow,ECF)。本章主要讨论ECF对于应用和操作系统交互的影响。异常就是控制流中的突变,用来响应处理器状态中的某些变化。在处理器中,状态被编码为不同的位和信号。状态变化称为事件。在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序)...

2018-10-25 16:19:21 189

原创 CSSAPP稀里糊涂的读书笔记(七)链接

链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载到内存并执行。本章主要讲链接的各个方面,不过本章的总结应该会比较少,毕竟链接有链接器自动执行,所以就看个大概吧。为了构造可执行文件,链接器必须完成两个主要任务:符号解析;重定位。目标文件有三种形式:可重定位目标文件。包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。...

2018-10-25 16:13:07 185

空空如也

空空如也

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

TA关注的人

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