自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Netty 经典面试题汇集

面试官: 请您说一下netty的线程组模型?我:线程组就是EventLoopGroup, 一般客户端和服务端用2个线程组就够,一个Boss线程组,一个worker线程组,boss线程组的数量为1, workd线程组的数量为默认的数量。面试官:设置boss线程组的数量为什么为1,有什么讲究嘛?我:设置boss线程组数量为1,就是为了监听socketChannel里的连接,然后将socketChannel包装成NioSocketChannel, 另外Boss线程...

2021-05-30 12:59:11 957

原创 希尔排序与桶排序算法详解

一、希尔排序 希尔排序又称缩小增量排序,是对插入排序的改进版,思想如下: (1) 根据数组的长度设置适合的增量dk=a.length/3 +1 ,然后将间隔增量的元素与之前的元素组合成一个序列,我在这里简称增量序列。 (2) 对增量元素的序列进行插入排序。 (3) 每趟排序完毕后,将增量缩小为 dk=dk/3+1, 当最后一次增量为1时,排序完毕。package sort;import java.util.Arrays;/** * @aut...

2021-05-22 17:53:43 528

原创 用Java模拟多线程下的客户端与服务端数据交互

场景 用99条子线程去接收客户端发送过来的请求,用1个主线程去接收99条子线程处理完后的结果,其中99条子线程相当于服务端的线程,99个请求相当于客户端发送过来的数据包。案例分析 此实例主要含有以下4个类。 FutureMain: 主线程,创建子线程,获取子线程的处理结果。 RequestFuture: 请求类,相当于是HttpRequest, 最核心的是get()方法和received()方法,get()方法用...

2021-05-20 22:49:45 773 3

原创 Dubbo源码学习(七)整合Spring 容器实现服务优雅启动和停止

一、整合Spring 1. 扫描包 使用AnnotationConfigApplicationContext类应用包,指定包的根路径即可。 // 5. 整合spring容器 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.example.dubbo"); context.start(); 包的路...

2021-05-18 21:59:05 463 3

原创 初探NIO

1. 什么是Netty? netty是一个基于NIO流的服务端容器,因NIO响应速度快被广泛应用。

2021-05-16 22:29:11 242

原创 手写简易版HashMap

前言 我们发现HashMap在jdk 1.8之后用了数组+链表+红黑树的结构,为了加深对HashMap底层设计的理解,自己也读了一些hashmap相关的源码,因此想通过手写hashmap去理其底层的操作原理。HashMap源码解析 目标: 基于数组+链表结构实现一个HashMap,包含get()、put()、remove()方法。 环境: jdk1.8 知识储备: hashcode, 幂等性, 数组,链表,红黑树。 原理: Hash...

2021-05-16 10:26:36 2408 5

原创 图解LRU算法

一、什么是LRU算法? LRU 全称Least Recently Used, LRU算法是一种操作系统层面上的页面置换算法,将最近最久未使用的页面进行淘汰。二、基于双向链表+Map实现LRU算法 为什么选用双向链表做cache? 因为双向链表能够很方便地找到上一个节点和下一个节点,对节点的操作相对来说比较容易。单向的不能找到上一个节点,在操作时不能提供当前节点的上一个节点遍历。 1. 用双向链表看成cache缓存, 数据...

2021-05-07 09:15:07 5024 1

原创 快速排序算法详解

前言 什么是快速排序? 这是我之前遇到的一个面试题,当时没回答来,我只写过冒泡排序、选择排序、插入排序呀,啥是快速排序,委屈巴巴, 一首凉凉送我自己。1. 什么是快速排序算法? 快速排序算法是对冒泡排序算法的一种改进,没有两两相邻之间的比较换位,主要采用的思想是通过递归+独立排序的形式将无序的数列进行分割成可以独立排序的2部分数列,其中一部分数列比另外一部书数列小,每次排序两个独立的数列,直到排序完毕,即可完成最终的排序, 在算法时间复杂度上比冒泡排序小很多。...

2021-05-06 08:32:09 4034

原创 Dubbo源码学习系列(六) 手写简易RPC

前言 此文为了加深对RPC的理解,运用Socket网络编程技术手写一个简易版的RPC框架。一、项目工程目录二、手写服务端package com.example.rpc.server;import com.example.rpc.api.UserInterface;import com.example.rpc.client.Invocation;import java.io.IOException;import java.io.ObjectInputStre...

2021-05-04 16:38:34 350

原创 Dubbo 源码学习系列(五) 优化篇《工厂模式在Dubbo中的应用》

前言 前四篇实现了基于zookeeper和Netty的远程调用的流程,我们可以继续对代码进行优化,利用简单工厂模式使其支持两种协议,代码会更加简洁、有层次感。可以将共有方法抽离出来成一个接口,我在用Http实现的时候,服务端使用了start(URL url)方法,客户端实现了send(URL url,Invocation invocation)方法,同样使用netty时,用Start()方法启动nettyServer, 用nettyClient去发送Invocation对象。 ...

2021-05-03 18:36:24 336 3

原创 Dubbo源码学习系列(四) 整合网络框架Netty

1. Netty简介

2021-05-03 13:36:47 1182 2

原创 Dubbo源码学习系列(三) 整合zookeeper注册中心并提供watcher机制

1. 使用zookeeper注册中心替换map 在上一篇文章中,用到了RemoteRegistryMap替换了zookeeper实现服务的缓存,此方式的缺点是需要通过文件来共享map,如果服务提供者接口列表发生变化,那么也不能及时修改,那么我们怎么使用zookeeper注册中心实现服务注册和发现功能? zookeeper 本身是一个文件系统,可以在将服务的url相关信息挂载到指定节点目录下,然后通过watch机制监听服务提供者接口服务是否发生变化,如果有变化,那么watcher将...

2021-05-02 06:58:35 802 5

原创 Non-resolvable parent POM for com.example:dubbo:0.0.1-SNAPSHOT: Could not transfer artifact org.spri

请检查settings.xml文件配置是否正确,我就是在删除settings.xml文件里配置不小心少删了一个标签导致报的错。修改完毕后,重写点击如下按钮:可以下载依赖了!

2021-05-01 22:56:41 1421

空空如也

空空如也

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

TA关注的人

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