- 博客(24)
- 资源 (10)
- 收藏
- 关注
原创 JAVA的NIO模型
JAVA的NIO模型什么是NIONIO的基本组成NIO的epoll BUG什么是NIOjava的NIO全称为non-blocking IO,使用它可以提供非阻塞式的高伸缩性网络NIO的基本组成NIO主要有三部分:Channel、Buffer和SelectorChannel是一个对象,可以用过它进行数据的读取和写入,它是面向缓冲区的,所有的数据都通过Buffer来处理,永远不会直接将字节写入通道中,而是将数据写入包含一个字节或者多个字节的缓冲区早多线程模式下,阻塞IO时,一个线程只能处理一个请求,
2022-04-20 21:42:14
825
原创 服务注册中心概述
服务注册中心概述多款注册中心比较多款注册中心比较序号比较项EurekazookeeperNacosConsul1集群结构平级主从支持平级和主从主从2集群角色主人Leader、follower observerleader、follower、candidateserver-leader、server以及client3是否可以及时知道服务状态变化不能及时知道会及时知道不能及时知道不能及时知道4一致性协议(CAP)注重可用性(AP
2022-04-17 22:37:46
1747
原创 JAVA学习——基于AQS的共享式锁CountDownLatch解析
笔者最近在解析基于AQS的ReentrantLock实现,ReentrantLock是可重入的独占锁,今天解析一下juc包中的共享锁CountDownLatch实现,仅当笔记。CountDownLatch是一种共享锁,区别于独占锁,共享锁在某一个时刻可能有多个线程同时访问共享资源,当指定的线程都完成操作后,CountDownLatch才允许后续的操作继续进行。就好像百米赛跑,只有所有选手都跑完全程,裁判才能记录选手成绩,在此之前,裁判只能等待。CountDownLatch与ReentrantLock.
2020-06-28 22:28:42
410
原创 JAVA学习——基于AQS的ReentrantLock公平锁和非公平锁的实现
之前笔者解析了AQS的源码,在JUC中有很多锁是基于AQS实现的,今天想写个简单的ReentrantLock实现,代码也基本是在看了ReentrantLock源码后写出来的,做个笔记
2020-06-27 21:47:33
1021
原创 Java学习——AQS解析
最近在学习JUC,发现里面大部分的并发组件都是基于AQS,因此研读了一下源码,在此做个笔记。AQS(AbstractQueuedSynchronizer)翻译为抽象队列同步器,是除Synchronized关键字外java自带的锁机制。AQS使用一个int类型变量state来表示线程要竞争的资源,state的值即为可获取的资源数,当一个线程尝试获取锁时,会使用CAS方式去尝试改变state的值,如果改变成功,即获取了锁。CAS的实现是使用了Unsafe类底下的一系列compareAndSet*方法,这.
2020-06-15 22:26:45
286
原创 Java学习——ArrayList的源码解析
ArrayList是JAVA的一种泛型容器,它实际上是一个用数组实现的链表,今天解析一下ArrayList的源码,并写个简单的实现。ArrayList的依赖关系首先我们来看ArrayList的依赖继承关系:通过ArrayList继承实现的接口说明了该类具有以下特性:ArrayList具有链表的特性Collection接口表示ArrayList是一个数据集合,但是这个数据集合没有位置和顺序关系,因此ArrayList实现了类似isEmpty,contains的方法RandomAccess接口说
2020-06-02 22:57:31
222
原创 Java——CompletableFuture接口解析
CompletableFuture接口说明CompletableFuture是Future的子类,接口Future接口虽然实现了异步调用,但是存在一个问题,为了判断线程是否已完成计算,或者要获取计算结果,我们需要不断的轮询,通过循环调用Future的isDone方法或者是直接调用get的方法阻塞线程。在JDK8中,提供了CompletableFuture类来解决这类问题,它可以在线程完成计算后用when、then等方式调用我们定义后续处理方法,省去了轮询的操作(笔者最近在读RocketMQ源码,发现在B
2020-05-27 20:43:37
804
原创 java——线程创建与Callable接口解析
在Java当中,最基本的线程创建方法有两种,一种是通过继承Thread类,重写run方法:class MyThread extends Thread{ @Override public void run() { System.out.println("this is MyThread!"); } } public static void main(String[] args) { Thread myT
2020-05-20 22:27:04
438
原创 RocketMQ源码阅读笔记-NameSrv功能解析
NameServer是RocketMQ的路由管理、服务注册与服务发现中心,首先简要说明一下NameServer的主要功能:所有的Broker服务器会向所有的nameServer注册自己的信息消息生产者(Producer)在发送消息时,也会向NameServer请求Broker服务器的地址信息,然后从中选择一台broker服务器进行消息发送NameServer会与Broker服务器保持一个连接,接收Broker定时发送回来的心跳信息,如果超过一定时间没收到心跳,那么NameServer将会删除该Bro
2020-05-16 22:01:23
344
1
原创 RocketMQ-网络传输与线程框架
由于工作的原因,需要在RocketMQ源码的基础上进行修改,实现自己的功能,因此打算读读源码,写写日记,后续会使用aeron替换掉netty,比较两者的性能指标。RocketMQ主要包括NameSrv、Broker、Producer和Consumer四个模块,模块之间通过Netty进行底层网络传输,因此,RocketMQ的线程模型也是根据Netty的特点进行构建。RocketMQ在原生Netty的基础上,封装了自己的Server和Client,分别为NettyRemotingServer和NettyR
2020-05-15 17:23:13
675
原创 Netty学习前的基本知识
网络I/O的基本知识主要的I/O模型:阻塞I/O模型非阻塞I/O模型在发起I/O请求后,立即返回,然后进行轮询,直到数据到达I/O复用模型系统提供select/ poll,进程将一个或多个fd传递给select或poll系统调用,阻塞在select操作上,select会顺序扫描fd,将就绪的fd返回信号驱动I/O模型应用程序在发起IO请求后立即返回,并且通过系统调用sigact...
2020-04-12 20:51:20
530
原创 Java线程池简单实现
工作中经常用到线程池实现并发设计,基本都是使用的Java自带的线程池,写了个简单的demo,说明Java自带线程池的基本原理。ThreadPool主要有coreSize(核心线程数)、maximumSize(最大线程数)、任务队列和线程队列参数,这主要是因为线程池具有动态创建线程和销毁的特性。为此线程池的相关参数设置: private final int coreSize; //核心线...
2020-04-06 18:04:48
217
原创 AERON:archive学习笔记
由于工作上要求,需要用到aeron,一个高性能的rpc/ipc框架,之前也琢磨了一段时间,都没记录下来,现在需要用到archive,先记录一下吧,希望能坚持记录下去…为了启动Archive Service,必须先启动ArchivingMediaDriver每个订阅者(以channel +streamId标识)的结果都会会被archive记录,记录结果用一个recordingId标识re...
2020-04-03 09:59:00
881
原创 maven笔记
mvn clear 清理上次已经编译好的代码mvn compile 自动编译项目mvn test 自动运行所有的测试用例mvn package 完成打包的所有操作(包括清理、编译、测试的过程)...
2020-04-01 15:12:34
127
原创 在ubuntu系统下配置c++项目使用的vlfeat环境
由于工作原因,需要在ubuntu系统下的c++项目中使用vlfeat,上网查了一下,ubuntu系统下的vlfeat大部分是运用在MATLAB下,但是还好vlfeat也有C的接口,所以可以在ubuntu系统配置实现对vlfeat的使用,在此记录一下。1、下载vlfeat源码,下载方法一搜就有,不再赘述2、利用make . 进行编译(注意后面的.不能漏掉)3、将vlfeat所在目录路径放到系统...
2018-05-08 13:57:27
1560
3
原创 CMakeLists.txt基本语法
1、指定最低要求的cmake版本cmake_minimum_required(VERSION 2.8)2、指定项目的名称project(test)3、设定目录,编译器将在设定的目录中查找include文件INCLUDE_DIRECTORIES(./include)4、将src目录下的源文件的名字保存到变量DIR_SRCS当中aux_source_dire...
2018-05-01 20:14:19
487
原创 在win7下利用ssh向远程ubuntu服务器上传文件的方法
首先需要安装putty软件和pscp软件,这两个都可以从putty官网下载,地址如下:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html。其中putty软件是为了通过ssh连接远程ubuntu服务器,你也可以利用其它方式连接。 安装完两个软件后,将pscp.exe文件所在目录加入到系统路径当中,或者放置在要传送的文件的同级...
2018-04-24 17:53:24
1587
原创 C++设计模式:工厂模式
工厂模式:工厂模式是在简单工厂模式的基础上,将工厂类也抽象为一个接口,然后根据不同要求,编写具体的生产对象的工厂子类。代码实现思路:建立操作基类和工厂基类,然后再建立具体的操作子类继承操作基类;建立具体的工厂子类继承工厂基类。因此,当要增加新的操作时,只需要增加此功能的操作子类和工厂子类即可,而不用再修改原有代码逻辑,体现了C++的面向对象的思想。代码:#include<iostream>using
2017-08-05 21:00:49
283
原创 C++设计模式:装饰模式
装饰模式:动态地给一个对象添加一些格外的职责,这个只是对某个对象添加,而不是对整个类。就添加功能来说,装饰模式比生成子类更为灵活。实现思路:定义一个基类,然后定义装饰基类继承基类,然后每一个具体的装饰类都继承装饰基类,在需要装饰的对象上面添加功能。代码如下:#include<iostream>#include<string>using namespace std;class person{
2017-07-26 22:20:12
376
原创 C++设计模式:策略模式
策略模式:定义了算法家族,分别封装起来,然后定义一个统一的借口,算法之间可以相互替换。使用该模式可以让算法的变化不影响到使用算法的客户。模式实现:策略模式具体实现时通常与工厂模式相结合,定义一个工厂类,来决定初始化哪个算法。代码如下:#include<iostream>using namespace std;enum RA{LRU,FIFO,RANDOM};class ReplaceAlgorit
2017-07-26 20:36:04
276
原创 中兴捧月算法大赛Dijkstra派解决方案
比赛题目:最强大脑中的收官蜂巢迷宫变态级挑战,相信大家都叹为观止!最强大脑收官战打响后,收视率节节攀升,就连蚁后也不时出题难为一下她的子民们。在动物世界中,称得上活地图的,除了蜜蜂,蚂蚁当仁不让。在复杂多变的蚁巢中, 蚂蚁总是能以最快、最高效的方式游历在各个储藏间(存储食物)。今天,她看完最新一期节目,又发布了一项新任务:小蚁同学,我需要玉米库的玉米,再要配点水果,去帮我找来吧。小蚁正准备...
2017-06-19 17:29:03
3123
1
原创 C++设计模式:观察者模式
观察者模式:定义了一对多的依赖关系,让多个观察者对象同时监听一个主题对象。这个主题对象在状态发生改变时会通知所有观察者对象,使它们能够自动更新自己。代码实现思路:定义抽象的观察者基类和主题基类,通过不同的基类继承抽象基类。并且定义通知函数,当主题对象发生改变时,能通知所有观察对象。代码:#include<iostream>#include<list>#include<string>using
2017-06-18 20:17:51
335
原创 C++设计模式:简单工厂模式
简单工厂模式:将业务逻辑与界面逻辑分开,实际上是表现了c++面向对象的思想。代码实现思路:定义一个基类,保存所有类的基本信息。然后类的实例化推迟到其子类。再用一个单独的类来做创造实例的过程,就是工厂。代码:#include<iostream>#include<exception>#include<string>using namespace std;class Operation{prot
2017-06-18 16:59:24
311
原创 C++设计模式:单例模式
单例模式:保证一个类仅有一个实例,并且提供一个访问它的全局访问点。即让类本身负责保存它的唯一样例。代码实现思路:在类内定义一个私有的静态实例,并且将构造函数也定义为私有,然后定义一个共有的静态方法来获取实例,作为唯一全局访问点。代码:#include<iostream>using namespace std;class Singleton{private: static Singleto
2017-06-18 16:44:36
332
ehcache.xsd
2020-07-27
kaggle 文本情感分析数据集
2018-01-09
2017中兴捧月算法精英挑战赛Dijstra提交报告
2018-01-07
海康威视2017软件精英挑战赛初赛c++源码
2017-08-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人