自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yitian881112的专栏

技术成长在于分享

  • 博客(175)
  • 资源 (6)
  • 收藏
  • 关注

原创 Java位运算

java 中>>是带符号的位移,将所有的二进制数据全部向右移动指定位数(但是符号位不动,实际是补位,正数补0,负数补1)对于负数而言,-2>>>1,结果是2147483647(Integer.MAX_VALUE)-1>>>1,结果是2147483647(Integer.MAX_VALUE)Node 的数据结构 (node链表 —> next是指针)对于正数而言,>>和>>>没有区别。

2023-05-16 23:30:07 569

原创 电商架构--营销中心

1. 什么是促销?促销是指卖方通过对消费者提供短期激励,以诱使其购买某种特定商品的过程。促销实质上是一种沟通活动,即营销者发出作为刺激消费的各种信息,包括营造出价格优惠、限时限量等氛围,把信息传递给一个或多个特定目标对象以影响其对商品的态度和行为。2. 促销的作用是什么?促销是运营工具,作用是帮助运营者完成其对用户的拉新、 转化、 促活、留存、传播的目的,完成对商品入市推广、销量提升、客单价提高、滞销库存清理的目的。促销有别于常态化的销售, 它有限时、限量、限消费群体以及优惠等特点。

2022-11-24 16:35:52 922

原创 排序算法汇总(Java)

常见十大排序算法排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:详细描述一、冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中相邻的

2022-11-15 10:50:21 469

转载 dubbo-底层实现

首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。

2022-11-07 22:08:53 371

原创 zookeeper集群安装

创建conf文件,在conf目录,文件名zoo.cfg,修改datadir和datalogdir路径。从镜像下载zookeeper的地址 , 这个镜像可以自行选择,笔者选择的是稳定版(stable)创建data/zoo/myid文件,里面信息为zookeeper的编号,创建log,data目录在zookeeper目录下面,与bin目录平级。在logs目录下面看到具体的报错信息如下。创建zoo目录在log目录下面。7 笔者启动之后报错了,翻找资料说是ip的端口。

2022-11-06 12:19:45 639

原创 ZooKeeper-实战

ZkClient是一个开源客户端,在ZooKeeper原生API接口的基础上进行了包装,更便于开发人员使用。ZkClient客户端在一些著名的互联网开源项目中得到了应用,例如,阿里的分布式Dubbo框架对它进行了无缝集成。ZkClient解决了ZooKeeper原生API接口的很多问题。例如,ZkClient提供了更加简洁的API,实现了会话超时重连、反复注册Watcher等问题。ZkClient社区不活跃,文档不够完善,几乎没有参考文档。异常处理简化(抛出RuntimeException)。

2022-11-05 22:11:04 582

原创 skywalking

简介在分布式链路追踪方面,Google早在2010年针对其内部的分布式链路跟踪系统Dapper[1],发表了相关论文对分布式链路跟踪技术进行了介绍(强烈推荐阅读)。其中提出了两个基本要求。第一,拥有广泛的覆盖面。针对庞大的分布式系统,其中每个服务都需要被监控系统覆盖,即使是整个系统的一小部分没有被监控到,该链路追踪系统也可能是不可靠的。第二,提供持续的监控服务。对于链路监控系统,需要小时持续保障业务系统的健康运行,保证任何时刻都可以及时发现系统出现的问题,并且通常情况下很多问题是难以复现的。

2022-11-03 20:54:09 343

原创 JSON和ProtoBuf序列化

我们在开发一些远程过程调用(RPC)的程序时,通常会涉及对象的序列化/反序列化的问题,例如一个“Person”对象从客户端通过TCP方式发送到服务器端;因为TCP协议(UDP等这种低层协议)只能发送字节流,所以需要应用层将Java POJO对象序列化成字节流,数据接收端再反序列化成Java POJO对象即可。“序列化”一定会涉及编码和格式化(Encoding & Format),目前我们可选择的编码方式有:使用JSON。将Java POJO对象转换成JSON结构化字符串。基于HTTP协议,在Web应用、移动

2022-11-02 19:06:33 2376

原创 echoServer回显服务器

例如,一个服务器处理十万以上的通道,如果一个通道都新建很多重复的Handler实例,就需要上十万以上重复的Handler实例,这就会浪费很多宝贵的空间,降低了服务器的性能。不过,可以肯定的是,第一个入站处理器的channelRead方法的msg实参类型,绝对是ByteBuf类型,因为它是Netty读取到的ByteBuf数据包。显而易见,@Sharable共享的业务处理器,如果需要操作的数据不仅仅是局部变量,则需要进行线程的同步控制,以保证操作是线程层面安全的。这一步很简单,直接复用前面的msg实例即可。

2022-11-02 19:03:31 919

原创 Decoder与Encoder重要组件

下面是一个小小的实践案例:整数解码器。其功能是,将ByteBuf缓冲区中的字节,解码成Integer整数类型。按照前面的流程,大致的步骤为:(1)定义一个新的整数解码器——Byte2IntegerDecoder类,让这个类继承Netty的ByteToMessageDecoder字节码解码抽象类。(2)实现父类的decode方法,将ByteBuf缓冲区数据,解码成以一个一个的Integer对象。(3)在decode方法中,将解码后得到的Integer整数,加入到父类传递过来的List实参中。

2022-11-02 19:02:46 1581

原创 Netty-bytebuf

Netty提供了ByteBuf来替代Java NIO的ByteBuffer缓冲区,以操纵内存缓冲区。ByteBuf的优势ByteBuf的逻辑部分ByteBuf是一个字节容器,内部是一个字节数组。从逻辑上来分,字节容器内部可以分为四个部分,具体如图6-14所示。第一个部分是已用字节,表示已经使用完的废弃的无效字节;第二部分是可读字节,这部分数据是ByteBuf保存的有效数据,从ByteBuf中读取的数据都来自这一部分;第三部分是可写字节,写入到ByteBuf的数据都会写到这一部分中;第四部分是可扩容字节,表

2022-11-02 18:59:00 813

原创 Netty原理与基础

Netty是为了快速开发可维护的高性能、高可扩展、网络服务器和客户端程序而提供的异步事件驱动基础框架和工具。换句话说,Netty是一个Java NIO客户端/服务器框架。基于Netty,可以快速轻松地开发网络服务器和客户端的应用程序。与直接使用Java NIO相比,Netty给大家造出了一个非常优美的轮子,它可以大大简化了网络编程流程。例如,Netty极大地简化TCP、UDP套接字、HTTP Web服务程序的开发。Netty的目标之一,是要使开发可以做到“快速和轻松”。

2022-11-02 08:34:43 643

原创 NIO- Handler业务处理器

当业务处理完成后,需要操作Java NIO底层通道时,通过一系列的ChannelOutboundHandler通道出站处理器,完成Netty通道到底层通道的操作。通道会启动该入站操作的流水线处理,在通道注册过的入站处理器Handler的channelReadComplete方法,会被调用到。上面的入站处理器实践案例InHandlerDemo,演示的是入站处理器的工作流程。通道会启动该入站操作的流水线处理,在通道注册过的入站处理器Handler的channelRegistered方法,会被调用到。

2022-11-02 08:33:53 207

原创 NIO Selector选择器

用于选择就绪的IO事件的select()方法,有多个重载的实现版本,具体如下:(1)select():阻塞调用,一直到至少有一个通道发生了注册的IO事件。强调一下,select()方法返回的数量,指的是通道数,而不是IO事件数,准确地说,是指发生了选择器感兴趣的IO事件的通道数。换句话说,一旦在通道中发生了某些IO事件(就绪状态达成),并且是在选择器中注册过的IO事件,就会被选择器选中,并放入SelectionKey选择键的集合中。通道和选择器之间的关系,通过register(注册)的方式完成。

2022-11-01 07:20:18 354

原创 Reactor反应器模式

这里的IO事件,就是NIO中选择器监控的通道IO事件。主要的升级是引入了一个线程池(ThreadPool),业务处理的代码执行在自己的线程池中,彻底地做到业务处理线程和反应器IO事件线程的完全隔离。当事件发生时,调用attachment方法,可以从选择键取出Handler处理器,将事件分发到Handler处理器中,完成业务处理。在注册serverSocket服务监听连接的接受事件之后,创建一个AcceptorHandler新连接处理器的实例,作为附件,被设置(attach)到了SelectionKey中。

2022-11-01 07:19:34 380

原创 NIO Channel(通道)类

实际上,通过read方法读数据,本身是很简单的,比较困难的是,在非阻塞模式下,如何知道通道何时是可读的呢?在阻塞模式下,SocketChannel通道的connect连接、read读、write写操作,都是同步的和阻塞式的,在效率上与Java旧的OIO的面向流的阻塞式读写操作相同。代码中的配置项,如服务器的IP、服务器端口、待发送的源文件名称(带路径)、远程的目标文件名称等配置信息,都是从system.properties配置文件中读取的,通过自定义的NioDemoConfig配置类来完成配置。

2022-11-01 07:18:46 600

原创 NIO Buffer类的重要方法

至此,大家都知道了,如何将缓冲区切换成读取模式。调用clear()之后,我们可以看到清空了position的值,即设置写入的起始位置为0,并且写入的上限为最大容量。例子中,IntBuffer是具体的Buffer子类,通过调用IntBuffer.allocate(30),创建了一个Intbuffer实例对象,并且分配了30 * 4个字节的内存空间。一个缓冲区在新建后,处于写入的模式,position写入位置为0,最大可写上限limit为的初始化值(这里是20),而缓冲区的容量capacity也是初始化值。

2022-11-01 07:18:13 324

原创 Redis客户端Lettuce深度分析介绍

相信不少读者对Netty已经有一定的了解甚至使用。作为Lettuce的底层框架,本节我们首先对Netty NIO进行简单介绍。《Netty In Action》一书中提到:「从高层次的角度看,Netty致力于解决(网络编程领域)技术和体系结构两大我们关心的问题。首先,其构建于Java NIO之上的异步及事件驱动的实现,保证了应用程序在高负载下的性能最大化和可伸缩性;其次,Netty运用一系列设计模式,将程序逻辑与网络层进行解耦,从而简化了用户的开发过程,并在最大程度上保证代码的可测性、模块化水平及可重用性。

2022-10-31 17:59:40 1315

原创 Java -NIO简介

OIO是面向字节流或字符流的,在一般的OIO操作中,我们以流式的方式顺序地从一个流(Stream)中读取一个或多个字节,因此,我们不能随意地改变读取指针的位置。使用的时候,必须使用Buffer的某个子类,例如使用DoubleBuffer,则写入的数据是double类型,如果其capacity是100,那么我们最多可以写入100个double数据。在这个flip翻转过程中,position会进行非常巨大的调整,具体的规则是:position由原来的写入位置,变成新的可读位置,也就是0,表示可以从头开始读。

2022-10-30 23:23:04 314

原创 操作系统-四种IO模型

操作系统中的4中常见的io模型

2022-10-30 20:26:52 1361

原创 top命令汇总

linux -top 命令

2022-10-29 09:04:45 731

原创 设计模式-工厂方法

设计模式-工厂模式

2022-10-26 23:26:12 538

原创 设计模式-原型

设计模式-原型

2022-10-24 07:37:39 130

转载 架构设计-架构要素

业务分块,做了垂直切分,切成一个个独立的系统,每个系统各自衍化,有自己的库、缓存、ES等辅助系统,系统之间的实时交互通过RPC,异步交互通过MQ,通过这种组合,共同完成整个系统功能。具体实现上比较成熟的两种资源池方案是VM、docker, 监控的点有CPU、内存、硬盘、网络IO、服务质量等,根据这些,在配合一些预留、扩张、收缩策略, 进行自动伸缩。这种模式一般只有一个数据库,一个业务应用层,一个后台管理系统,所有的业务都是用过业务层完成的,所有的数据也都是存储在一个数据库中的,好一点会有数据库的同步。

2022-10-20 11:13:16 281

原创 架构设计-反向代理

反向代理

2022-10-19 17:43:19 157

原创 Paxos 算法

(3)Propose: Proposer收到多数Acceptor的Promise应答后,从应答中选择Proposal ID最大的提案的Value,作为本次要发起的提 案。(1)Prepare: Proposer生成全局唯一且递增的Proposal ID,向所有Acceptor发送Propose请求,这里无需携带提案内容,只携带Proposal ID即可。➢ 不违背以前做出的承诺下,回复已经Accept过的提案中Proposal ID最大的那个提案的Value和Proposal ID,没有则返回空值。

2022-10-16 19:54:32 519

原创 设计模式-解释器

设计模式-解释器

2022-10-16 11:34:29 285

原创 设计模式-观察者

设计模式-观察者

2022-10-16 11:08:12 305

原创 设计模式-访问者

设计模式-访问者

2022-10-16 10:33:06 353

原创 设计模式-命令

设计模式-命令

2022-10-16 00:18:41 256

原创 设计模式-中介

设计模式-中介

2022-10-15 23:52:27 335

原创 设计模式-备忘录

设计模式-备忘录

2022-10-15 23:09:20 354

原创 设计模式-状态

设计模式-状态

2022-10-15 13:34:29 373

原创 设计模式-策略

设计模式-策略模式

2022-10-15 13:07:43 284

原创 设计模式-责任链

设计模式-责任链

2022-10-13 17:19:02 219

原创 设计模式-迭代器

设计模式-迭代器

2022-10-13 11:59:56 383

原创 设计模式-桥接

设计模式-桥接模式

2022-10-12 21:02:07 288

原创 设计模式-代理

设计模式-代理模式

2022-10-12 20:37:23 228

原创 设计模式-享元

设计模式-享元

2022-10-12 18:52:55 789

原创 设计模式-装饰器

设计模式-装饰器

2022-10-11 21:13:39 263

springcloud+nocos+mongodb+redis+es

本资源提供springcloud微服务件代码, 主要有三个模块,springcloud集成es,gateway,mongdodb, 通知有基于feign调用的整套代码注解说明 能帮助大家轻易打建springcloud基于nocos配置,注册中心的微服务架构 包含了远程共享私库 manven配置, nacos配置, 日志配置等文件

2022-08-20

post_linux_x64_6.1.2.deb

apipost_linux_x64_6.1.2.deb可支持ubuntu桌面系统,版本要求18以上; 能够实现模拟接口请求参数自动配置 接口分类,环境变量全剧配置 支持线上办公,多点共享平台数据

2022-06-18

ubuntu搜狗拼音安装包

ubuntu18版本及以上搜狗拼音安装包

2022-06-18

mqsql的jdbc

zookeeper的插件windows版,帮助搭建分布式环境,富含简单的操作流程

2018-02-24

分布式环境工具

适用于dubbo-zookeeper初学者使用,搭建分布式系统的工具

2018-02-24

rocketmqDemo

rocketmq插件,并含有demo教程,能够很好的帮助初学者了解,掌握rocketmq

2018-02-24

空空如也

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

TA关注的人

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