- 博客(19)
- 收藏
- 关注
原创 工厂模式
理解 工厂模式,作为一种对象创造型模式,也是我们很常用的设计模式,他将对象的使用和创建分离,让调用者不用关心对象是如何创造的。比如你去4S点买车,你只要跟老板说你是要保时捷卡宴,还是911就好了,不用关心这辆车是怎么造出来的。作用 工厂模式剥离了对象的创建和使用,当业务发生变化时方便于代码的扩展和修改,比如你要注册一个账号,之前注册的是一个QQ账号,后来你想换个微信账号了,你不用...
2019-12-28 20:39:43 98
原创 代理模式
理解 用演员和经纪人来形容代理模式最恰当不过,一个演员每天要拍电影,拍广告,拍电视剧有很多事情要做,但是每天有很多人来找他谈合作,以及各种行程需要合理安排,如果这些全都要演员自己来弄肯定忙不过来,容易出错,所以就有了经纪人(代理人),这些代理人帮演员打理行程,应对合作商,演员只需要专心于演戏就好了。演员和经纪人之间其实就是代理模式。作用 在我们写程序的时候也经常遇到,我们的业务代...
2019-12-28 18:37:20 135
原创 单例模式
理解 作为设计模式中最简单的模式之一,单例模式很容易理解,单例即代表全局唯一,单例模式即通过自身来保证自己的全局唯一性,就算系统想new出另外一个新的实例也不行。作用 防止重复构建实例,保证唯一性,减少内存开销。有时候业务也有这样的需要,比如系统需要且仅需要一个和数据库的链接。实现 要想不能让外部进行new出实例,单例模式通过将构造方法私有化来实现,然后对外提供一个ge...
2019-12-27 23:16:42 78
原创 Netty源码详解
线程组初始化EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(1);流程如下:Created with Raphaël 2.2.0开始io.netty.util.concurrent.MultithreadEventExecutor...
2019-12-26 21:30:55 299
原创 vscode的常用插件
中文包 设置中文语言使用快捷键【Ctrl+Shift+P】,弹出的搜索框中输入【configure language】,然后选择搜索出来的【Configure Display Language】,locale的属性值为“zh-CN”,安装插件名为【Chinese (Simplified)Language Pack for Visual Studio Code】,重启VSCode软件生效。...
2019-12-24 10:15:59 85
原创 springboot——项目文件上传失败
之前给博客做了一个后台,具备图片上传功能,后台是基于springboot实现的,服务器也是利用的springboot自带的tomcat,一开始做出来的时候还可以,但过了一段时间使用上传功能发现上传失败了,报错如下:2019-09-16 17:27:10.277 [http-nio-8083-exec-2] ERROR org.apache.catalina.core.Container...
2019-12-23 18:13:26 1033
原创 spring——由JMS到BeanPostProcessor和SmartInitializingSingleton
起因 最近手上项目从activemq切换阿里云的rocketmq,众所周知amq的listener属于JMS架构,spring项目中只需要在方法级别上加一个@Listener(destination=“xxx”)就好了,然后反手在看阿里云官方提供的样例代码,不免陷入了人生和社会的大思考。 为了看得更加明了,这是一段阿里云上给的rocketmq的消费者示例代码:Properties...
2019-12-23 17:25:34 636
原创 zookeeper集群运行详解
CAP理解 我们说到zk集群经常会说到zk具有CAP中的CP,那CAP是什么呢?CAP是指衡量分布式系统的三个维度:C:数据一致性。表示任意时候,客户端从服务器的任意一个节点获取一个数据,该数据的值都是一致的。A:服务可用性。表示任意时候,面对客户端的请求,服务端都能在合理的时间内做出正确的响应,而不是让前端看到404、内存溢出之类的问题。P:分区容错性。...
2019-12-23 17:01:56 183
原创 SQL PARTITION BY
前两天看前辈们的老代码,看到了一句神奇的SQL,生平第一次见:select ……………… from (select xx1,xx2,xx3,……,row_number() over(partition by xx4,xx5 order by xx6 desc,xx7 desc) rownum from xxxx_tbl where xxx8='sdfdsf' ……)whe...
2019-12-16 13:28:16 2193
原创 Reactor线程模型
在BIO时代,我们写一个服务端,由于其同步阻塞特性,我们采取的方式是这样的:当服务端收到一个客户端请求后,不得不为这个客户端单独开一个线程来阻塞读取这个客户端后续发来的数据。如果学过多线程,我们很清楚,如果线程开多了是一件很糟糕的事情,过多的上线文切换,很耽误服务器的正常的工作。这也意味着这种模式的请求量瓶颈很低。故而在NIO应运而生,在NIO下服务端是这样的: 这种模式下,...
2019-12-13 12:25:30 450
原创 mysql order by+limit数据重复问题
前段时间遇到一个问题mysql查询问题,当我们使用select * from xxxx_tbl order by col1 limit 0,5 时,如果col1在表中存在重复,那么我们通过limit分页查出来的数据就可能存在不全,或者重复。案例表结构如下:字段类型注释idvarchar(20)主键col1varchar(20)col1col2...
2019-12-12 20:27:09 1151
原创 java的泛型使用
案例问题 今天遇到这么一个问题,公共调度类:package fanxingTest;public abstract class BaseFunction { public void excuete(BaseContent baseContent){ fun1(baseContent); fun2(baseContent); ...
2019-12-11 23:01:27 81
原创 zookeeper集群搭建
集群搭建事项zk集群,只要大多数(超过半数)的机器准备好了,就可以提供服务了。容错集群至少三台,建议采用奇数台来搭建集群。每台服务运行在独立的机器上。集群搭建1.集群配置基本参数介绍在第二章说到zoo.cfg中有两个配置参数和集群有关:initLimit和syncLimit,除此之外还有一些其他的配置。initLimit:表示集群同步初始化允许容忍的最长时间,是tickTime...
2019-12-10 21:51:26 116
转载 网络通讯模型
OSI网络模型 说到网络编程总会从这里谈起,所以今天来把这个东西一次性理一理。OSI网络模型一共七层,按从底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。这个顺序是从底层到高层,怎么算底层?和物理介质接触的算底层,所以其实这七层可以化成一个金字塔形状。那为什么会有这种模型呢,早期在互联网诞生之际,各个厂家和企业都有定义自己的网络结构和协议,但是这样的结果就是没有一...
2019-12-09 14:49:26 473
转载 Buffer和Channel
在细讲Buffer和Channel前,我们先对几个概念梳理一下。我们在做网络编程的时候时常听到三种东西:BIO,NIO,AIO。 BIO是java中普通的IO包,jdk1.4时出现了NIO,N表时New,所以其实就是新版的IO,jdk1.7时出现了AIO,也叫NIO2.0。那这三种IO有什么区别呢?IO是同步阻塞IO,NIO是同步非阻塞IO,AIO是异步非阻塞IO。这里有几个名词,同步和异...
2019-12-09 14:36:07 653
转载 &的妙用
最近看Netty源码,看到了一段这样的代码:private static boolean isPowerOfTwo(int val) { return (val & -val) == val;}一开始无法理解是什么意思,看方法名然后搜了一下,发现是用来判断一个数字是否为2的次方的,例如1,2,4,8,……这样的数。那为什么可以用来判断一个数是否为2的次方呢(...
2019-12-09 10:35:40 135
原创 基于zookeeper实现分布式锁
分布式锁,顾名思义即在多个进程间做一个拦截,让程序走到某一段代码时只能依次通过,不能同时执行,从而避免 一些问题。常用实现分布式锁的方式有zk,redis,数据库等这些多套服务会共同访问的服务来实现。上一章详细介绍了zk的各种特点和机制,所以这里基于这些特点和机制来进行一个分布式锁的应用。临时节点+watch zk的节点不可重复创建,所以我们便可以通过这个特性来进行加锁。Cre...
2019-12-08 17:49:40 126
原创 zookeeper的详细介绍
zk的配置介绍 我们打开上一章安装时介绍的conf目录下的zoo.cfg文件,我们可以看到有几项显而易见的配置项:tickTime、initLimit、syncLimit、dataDir、clientPort,其中initLimit和syncLimit和zk集群相关,等到了讲集群的地方再介绍。tickTime:是zk用于计算时的最小时间单位,单位为毫秒,tickTime=2000,表示...
2019-12-07 21:04:33 439
原创 zookeeper的基本安装和使用
zk的下载和启动下载地址:https://archive.apache.org/dist/zookeeper/(比如3.4.14版本),尽量不要下最新的,越新的越容易有问题。下的文件是.tar.gz的压缩包,是可以在windows和linux上都可以使用的。(不要感觉是.tar.gz包就觉得在windows上没法用)window下下载之后,用压缩软件连续解压两次,就能解压出来了,lin...
2019-12-07 00:06:54 107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人