- 博客(37)
- 收藏
- 关注
原创 java nio :ByteBuffer
java nio :ByteBufferbytebuffer基本函数// 分配了一个能存储8字节的ByteBuffer,并且只能写入ByteBuffer buffer = ByteBuffer.allocate(8);// 由写切换成读buffer.flip();// 读转写buffer.clear();基本使用流程向buffer写入数据,比如调用channel.read(buffer)调用flip()切换成读模式向buffer读取数据,比如调用buff
2021-11-30 16:51:41
280
原创 netty启动源码
netty启动源码初始化服务端Channelbind():用户代码入口initandRegister:初始化并注册newChannel():创建服务端channelinit():初始化服务端channelset ChannelOptions,channelArrtsset ChildOptions,ChildAttrs:为服务端channel创建的新连接的channel创建的config handler:配置服务端pipelineadd ServerbootstrapAccep
2021-11-12 15:40:05
236
原创 ByteBuf
ByteBuf创建// 创建容量为256字节的bytebuf,会自动扩容ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer();直接内存和堆内存堆内存ByteBuf byteBuf = ByteBufAllocator.DEFAULT.heapBuffer(10);直接内存ByteBuf byteBuf = ByteBufAllocator.DEFAULT.directBuffer(10)直接
2021-11-10 17:09:53
193
原创 Handler&Pipeline
Handler&PipelineChannelHandler用来处理channel上的各种事件,分为入站,出站两种,所有channelhandler被连成一串,就是pipeline入站处理器通常是channelInboundHandlerAdapter的子类,主要用于读取客户端的数据,写回结果出战处理器通常是channelOutboundHandlerAdapter的子类,主要对写的结果进行加工、super.channelRead(ctx,student):将数据传递给下一个hand
2021-11-10 17:09:26
205
原创 Netty组件-EventLoop
Netty组件-EventLoopEventLoop本质上是一个子线程执行器,里面有run方法处理channel上源源不断地io任务,继承关系:一条线继承自juc.ScheduledEvecutorService,因此包含了线程池中所有的方法继承自netty自己的OrderdEventExecutor提供了boolean inEventLoop(Thread thread)方法判断一个线程是否属于此EventLoop提供了parent方法来看看自己属于哪个EventLoopGrou
2021-11-10 17:08:44
80
原创 Netty组件-Channel
Netty组件-Channel主要方法close():可以用来关闭channelcloseFuture:用来处理channel的关闭sync方法作用是同步等待channel的关闭而addListener方法是异步等待channel关闭pipeline方法添加处理器write方法将数据写入writeAndFlush方法将数据写入并刷出、注意点客户端的connect是异步非阻塞方法,需要和sync配合使用,sync会阻塞当前线程,直到nio建立连接或者使用chann
2021-11-10 17:08:14
268
原创 netty
netty入门概述简介netty是基于事件驱动的网络应用框架,用于快速开发可维护,高性能的网络服务器和客户端优势Netty vs NIO需要自己构建协议需要解决TCP传输问题,如粘包,半包epoll空轮询导致CPU100%netty对API进行增强,更易用,如FastThreadLocal:ThreadLocal,ByteBuf:ByteBufferNetty vs 其它网络框架netty的开发迭代更迅速,API更简洁,文档更优秀hello
2021-11-10 17:06:40
393
原创 设计模式 : 命令模式
命令模式定义与类型将请求封装成对象,以便使用不同的请求命令模式解决了应用程序种对象的职责和它们之间的通信方式行为型适用场景请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互需要抽象出等待执行的行为优点降低耦合容易扩展新命令或者一组命令缺点命令的无限扩展会增加类的数量,提高系统的复杂度演示地址https://github.com/steins4/designpattern/tree/master/src/main/java/com/s
2021-11-08 10:08:17
202
原创 设计模式 : 访问者模式
访问者模式定义与类型封装作用于某数据结构中的各元素的操作可以在不改变各元素的类的前提下,定义作用于这些元素的操作行为型适用场景一个数据结构包含很多类型对象数据结构与数据操作分离优点增加新的操作很容易,即增加一个新的访问者缺点增加新的数据结构困难具体元素变更困难演示地址https://github.com/steins4/designpattern/tree/master/src/main/java/com/steins/designpatte
2021-11-08 10:07:37
371
原创 设计模式 : 原型模式
原型模式定义与类型定义指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象不需要知道任何创建的细节类型创建型适用场景类初始化消耗较多资源new产生的一个对象需要非常繁琐的过程构造函数比较复杂循环体中生产大量对象优点:原型模式性能比直接new一个对象性能高简化创建过程缺点必须配备克隆方法对克隆复杂对象或对克隆出的对象进行复杂改造时,容易引入风险深拷贝,浅拷贝要运用得当演示地址https://github.c
2021-11-08 10:07:10
73
原创 设计模式 : 享元模式
享元模式定义与类型提供了减少对象数量从而改善应用所需的对象结构的方式运用共享技术有效的支持大量细粒度的对象类型:结构型适用场景常常应用于系统底层的开发,一边解决系统的性能问题系统有大量的相似对象,需要缓冲池的场景优点减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率减少内存之外的其他资源占用缺点关注内/外部状态,关注线程安全问题使系统程序的逻辑复杂化演示地址https://github.com/steins4/designpat
2021-11-07 11:31:03
64
原创 设计模式 : 备忘录模式
备忘录模式定义与类型保存一个对象的某个状态,以便在适当的时候恢复对象行为型适用场景保存及恢复数据相关业务场景后悔的时候,即想恢复到之前的状态优点为用户提供一种可恢复机制存档信息的封装缺点资源占用演示地址https://github.com/steins4/designpattern/tree/master/src/main/java/com/steins/designpattern/behavioral/memento...
2021-11-07 11:30:32
74
原创 设计模式 : 组合模式
组合模式定义与类型将对象组合成树形结构以表示“部分-整体”的层次结构组合模式使客户端对单个对象和组合对象保持一致的方式处理类型:结构型适用场景希望客户端可以忽略组合对象与单个对象的差异时处理一个树形结构时优点清楚地定义分层次的复杂对象,表示对象的全部或部分层次让客户端忽略层次的差异,方便对整个层次结构进行控制进化客户端代码符合开闭原则缺点限制类型时会较为复杂’使设计变得更加抽象演示地址https://github.com/steins4
2021-11-06 10:51:32
50
原创 设计模式 : 适配器模式
适配器模式定义与类型将一个类的接口转换成客户期望的另一个接口使原本接口不兼容的类可以一起工作类型:结构型适用场景已经存在的类,它的方法和需求不匹配时不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案优点、能提高类的透明性和复用,现有的类复用但不需要改变目标类和适配器类解耦,提高程序扩展性符合开闭原则缺点适配器编写过程中需要全面考虑,可能会增加系统的复杂性增加系统代码可读的难度演示地址
2021-11-06 10:50:36
62
原创 设计模式 : 外观模式
外观模式定义与类型又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口外观模式定义了一个高层接口,让子系统更容易使用类型:结构型适用场景子系统越来越复杂,增加外观模式提供简单调用接口构建多层系统结构,利用外观对象作为每层的入口,简化层间调用优点简化了调用过程,无需了解深入子系统,防止带来风险减少系统依赖,松散耦合更好的划分访问层次符合迪米特法则,即最少知道原则缺点增加子系统,扩展子系统行为容易引入风险不符合开闭原则演示地址ht
2021-11-06 10:50:05
65
原创 NIO:非阻塞IO
NIO:非阻塞IO三大组件Channel&Buffer:channel:数据传输的双向通道常见的channelFileChannelDatagramChannel适用UDP网络编程SocketChannelServerSocketChannelBuffer存储数据的内存缓冲区常见的BufferByteBuffer:MappedByteBufferDirectByteBufferHeapByteBufferSho
2021-11-05 15:20:37
63
原创 设计模式 : 迭代器模式
迭代器模式定义与类型提供一个方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示行为型适用场景访问一个集合对象的内容而不需暴露他们内部表示为遍历不同的集合结构提供一个统一的接口优点分离了集合对象的遍历行为缺点类的个数成对增加演示地址https://github.com/steins4/designpattern/tree/master/src/main/java/com/steins/designpattern/behavioral
2021-11-05 10:49:53
65
原创 设计模式 : 模板方法
模板方法定义与类型定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤行为型适用场景一次性实现一个算法的不变部分,并将可变的行为留给子类来实现各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复优点提高复用性提高扩展性符合开闭原则缺点类数目增加增加了系统实现的复杂度继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍演示地址https://
2021-11-05 10:48:31
54
原创 设计模式 : 桥接模式
桥接模式定义与类型将抽象部分与它的集体实现部分分离,是他们都可以独立的变化通过组合的方式建立两个类之间联系,而不是继承类型:结构性适用场景抽象和具体实现之间增加更多的灵活性一个类存在两个或多个独立变化的维度,且这两个或多个维度都需要独立进行扩展不希望使用继承,或因为多层继承导致系统类的个数剧增优点分离抽象部分及其具体实现部分提高了系统的可扩展性符合开闭原则符合合成复用原则缺点增加了系统的理解和设计难度需要正确识别出系统中两个独立变化的维度
2021-11-05 10:47:22
76
原创 设计模式 : 装饰者模式
装饰者模式定义与类型在不改变原有对象的基础之上,将功能附加到对象上提供了比继承更有弹性的替代方案结构型适用场景扩展一个类的功能或给一个类添加附加职责动态的给一个对象添加功能,这些功能可以再动态的撤销优点继承的有利补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果符合开闭原则缺点会出现更多的代码,更多的类,增加程序复杂性动态装饰时,多层装饰时会更复杂演示地址https://
2021-11-04 19:10:24
64
原创 设计模式 : 责任链模式
责任链模式定义与类型为请求创建一个接受此次请求对象的链行为型适用场景一个请求的处理需要多个对象当中的一个或几个协作处理优点请求的发送者和接收者(请求的处理)解耦责任链可以动态组合缺点:责任链太长或者处理时间过长,影响性能责任链有可能过多演示地址:https://github.com/steins4/designpattern/tree/master/src/main/java/com/steins/designpattern/behaviora
2021-11-04 19:09:50
71
原创 设计模式 : 策略模式
策略模式定义与类型定义:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。类型行为型适用场景:系统有很多类,而它们的区别仅仅在于他们的行为不同一个系统需要动态的在几种算法中选择一种优点开闭原则避免使用多重条件转移语句提高算法的保密性和安全性缺点客户端必须直到所有的策略类,并自行决定使用哪一个策略类产生很多策略类演示地址https://github.com/steins4/d
2021-11-04 19:09:20
50
原创 设计模式 : 观察者模式
观察者模式定义与类型定义了对象的一对多依赖,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,它的所有依赖都会收到通知并更新行为型适用场景关联行为场景,建立一套触发机制优点:观察者和被观察者之间建立一个抽象的耦合观察者模式支持广播通信缺点:观察者之间有过多的细节依赖,提高时间消耗及程序复杂度使用要得当,避免循环调用演示地址:https://github.com/steins4/designpattern/tree/master/src
2021-11-04 19:08:47
56
原创 设计模式 : 单例模式
单例模式定义与类型定义:保证一个类只有一个实例,并提供一个全局访问点类型:创建型适用场景想确保任何情况下都绝对只有一个实例优点在内存中只有一个实例,减少了内存开销避免对资源的多重占用设置全局访问点,严格控制访问缺点没有接口,扩展苦难重点私有构造器线程安全延迟加载序列化和反序列化安全反射演示地址https://github.com/steins4/designpattern/tree/master/src/
2021-11-03 10:41:10
64
原创 设计模式 : 建造者模式
建造者模式定义与类型定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道类型:创建型适用场景如果一个对象有非常复杂的内部结构(很多属性)想把复杂对象的创建和使用分离优点:封装性好,创建和使用分离扩展性好,建造类之间独立,一定程度上解耦缺点:产生多余的builder对象产品内部发生变化,建造者都要修改,成本较大演示地址:https:
2021-11-03 09:35:03
57
原创 设计模式 : 抽象工厂
抽象工厂定义与类型定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口无需指定他们具体的类类型:创建型适用场景:客户端不依赖于产品类实例如何被创建,实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现优点:具体产品在应用层代码隔离,无需关心创建细节将一个系列的产品族统一到一起创建缺点:规定了所有可能被创建的产品集合,产品族中扩展新的产品
2021-11-02 17:11:26
57
原创 设计模式 : 工厂方法
工厂方法定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。适用场景:创建对象需要大量重复的代码客户端不依赖于产品类实例如何被创建,实现等细节一个类通过其子类来指定创建哪个对象优点:用户只需要关心所需产品对应的工厂,无需关心创建细节加入新产品符合开闭原则,提高可扩展性缺点:类的个数容易过多,增加复杂度增加了系统的抽象性和理解难度演示地址:https://github.com/steins
2021-11-02 16:29:53
53
原创 设计模式 : 简单工厂
简单工厂定义和类型定义:有一个工厂决定创建出哪一个产品类的实例类型:创建型使用场景:工厂类负责创建的对象比较少客户端只知道传入工厂类的参数,对于如何创建对象不关心优点:只需要传入一个正确的参数,就可以获取你所需要的对象,而无需直到其创建细节缺点:工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则演示地址:https://github.com/steins4/designpattern/tree/master/src/mai
2021-11-02 15:55:11
61
原创 设计模式 : 代理模式
代理模式定义和类型定义:为其他对象提供一种代理,以控制对这个对象的访问代理对象在客户端和目标对象之间起到中介的作用适用场景增强对象优点:代理模式能将代理对象与真实被调用的目标对象分离一定程度上降低了系统的耦合度,扩展性好保护目标对象增强目标对象缺点:代理模式会造成系统设计中类的数目增加在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢增加系统的复杂度扩展:静态代理动态代理CGLib代理演示地址:https://gi
2021-11-02 15:53:21
77
原创 面试题57和为s的数字面试题58
/** * @Author Administrator * @Author 2020/11/22 * 面试题57:和为s的数字 * 题目一:和为s的两个数字 * 输入一个递增排序的数组和一个数字s,在数组中查找两个字, * 使得它们的和正好是s,如果由多对数字的和等于s,则输出任意一组即可 */public class FindNumsWithSum { /** *题目一:和为s的两个数字 *
2020-11-22 18:48:57
80
转载 操作系统运行环境和运行机制
操作系统运行环境和运行机制 中央处理器(CPU)处理器由运算器,控制器,一系列的寄存器以及高速缓存构成两类寄存器:用户可见寄存器:高级语言编译器通过优化算法分配并使用,已减少程序访问内存次数控制和状态寄存器:用于控制处理器的操作,通常由操作系统代码使用用于控制处理器的操作在某种特权级别下可以访问,修改常见的控制和状态寄存器:程序计数器:记录将要取出的指令的地址指令寄存器:记录最近取出的指令程序状态字:记录处理器的运行状态如条件码,模式,控制...
2020-11-21 19:50:06
128
原创 面试题56:数组中数字出现的次数
/** * 面试题56:数组中数字出现的次数 */public class FindNumsAppearOnce { /** * 题目1:数组中只出现一次的两个数字 * 一个整型数组中出两个数字之外,其他数字都出现了两次。 * 请写程序找出这两个只出现一次的数字,要求时间复杂度是O(n),空间复杂度是O(1) */ public static int[] findNumsAppearOnce(int[] nums,int le
2020-11-21 17:35:29
58
原创 面试题54,二叉搜索树的第k大节点;面试题53:在排序数组中查找数字
/** * 题目二:找到0~n-1中缺失的数字 * 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字 * 都在范围0~n-1中。在范围0~n-1内的n个数字中有且仅有一个数字不在该数组中,请找出这个数字. */public class GetMissingNumber { public static int getMissingNumber(int[] array,int length){ if(array == null || len
2020-11-20 14:13:23
65
原创 面试题49,50,51,52
面试题49,50,51,52/** * 面试题49:丑数 * 我们把只含有因子2,3,5的数成为丑数。求按从小到大的顺序的第1500个丑数。 * 例如,6,8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当作第一个丑数 */public class GetUglyNumber { /** *判断是否是丑数 */ public static boolean isUgly(int number){ while(numbe
2020-11-18 20:10:16
93
转载 操作系统第一周01
操作系统是什么操作系统是计算机系统的一个系统软件他们能以尽量有效,合理的方式组织和管理计算机的软硬件资源合理地组织计算机的工作流程,控制程序的执行并向用户提供各种服务功能使得用户能够灵活,方便的使用计算机,使整个计算机系统高效率运行 有效: 系统效率,资源利用率 合理: 各种软硬件资源的管理是否公平合理 方便使用: 两种角度:用户界面 与 编程接口怎样管理资源跟踪记录资源的使用状况确定资源分配策略–算法静态分配算法..
2020-11-18 10:23:46
75
原创 面试题47:礼物的最大价值 面试题46
/** * @Author Administrator * @Author 2020/11/17 * 面试题47:礼物的最大价值 * */public class MaxValueOfGift { public static int maxValueOfGift(int[][] values,int rows,int cols){ if(cols<=0 || rows <= 0 || values == null){ return
2020-11-17 12:25:58
107
原创 34,35
34,35/** * 面试题34:二叉树中和为某一值的路径 * 输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。 * 从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 */public class FindPath { public void findPath(BinaryTreeNode pRoot,int exceptedSum){ if(pRoot == null){ return ;
2020-11-09 20:27:16
62
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人