- 博客(30)
- 收藏
- 关注
原创 netty源码源码学习 ChannelInboundHandler And ChannelOutboundHandler (二)
ChannelInboundHandlerChannelOutboundHandler extends ChannelHandler其中比较重要的ChannelInitializer initChannel 将自定义的handler 添加到pipelinenew ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Excepti
2020-11-14 17:04:05
135
原创 netty源码学习 ChannelHandler(一)
channelHandlerchannelHandler自己本来没有很多方法,但是你通常必须实现其中一个子类型。ChannelInboundHandler 通常用处理入站(inbound)的IO事件类型ChannelOutboundHandler 通常用处理出站(outbound)的IO事件类型另外,下边的一些适配器类,给你提供了便利。ChannelInboundHandlerAdapter 通常用处理入站的IO事件类型ChannelOutboundHandlerAdapter 通常用处
2020-11-14 14:15:38
189
原创 【微服务】Spring-Ribbon,客户端的负载均衡
原来Feign负载均衡还是通过Ribbon实现的,那么Ribbo又是如何实现负载均衡的呢?ribbon feign nginx 负载均衡的区别是什么?Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是 Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Bala.
2020-08-16 07:02:30
134
原创 SpringBoot + Elasticsearch + Kibana (7.8.1)入门应用
一、下载安装ElasticSearch 下载地址…/elasticsearch-7.8.1/bin 的 elasticsearch.bat…/elasticsearch-7.8.1/config/elasticsearch.yml//# 主要配置 network.host: 127.0.0.1http.port: 9200//# 解决跨域访问http.cors.enabled: truehttp.cors.allow-origin: "*"Kibana下载地址 一个客户端数据
2020-08-04 15:30:12
1537
翻译 使用流水线(pipelining)加速Redis查询
原文地址请求/响应协议和RTT(往返时间(Round Trip Time))Redis是一个TCP服务器使用客户端-服务器模型,被称为请求/响应协议。这意味着请求通常通过以下步骤完成:客户端向服务器发送一个查询,并从套接字读取服务器响应(通常以阻塞的方式)。服务器处理命令并将响应发送回客户机。客户端和服务器通过网络连接。这样的链路可以非常快(环回接口),也可以非常慢(在Internet上建立的连接,在两台主机之间有许多跳点)。无论网络延迟是什么,数据包从客户机传输到服务器,然后从服务器返回到
2020-08-02 15:57:16
251
翻译 redis持久化策略AOF和RDB优缺点对比
原文地址redis提供了不同范围的持久化选选项RDBAOF如果数据存在时间少,可以两者都不用在同一个实例中合并AOF和RDB是可能的。注意,在这种情况下,当Redis重新启动AOF文件将被用来重建原始数据集,因为它被保证是最完整的。需要理解的最重要的事情是RDB和AOF持久性之间的不同权衡。让我们从RDB开始:RDB 的好处:RDB是一个非常紧凑的单文件时间点表示你的Redis数据。RDB文件是完美的备份。例如,您可能希望在最近的24小时内每小时归档一次RDB文件,并在30天内每天保存
2020-08-02 03:28:53
476
原创 java虚拟机问题总结
一、内存区域与内存溢出异常java虚拟机运行时数据区?(内存空间分配)简述基本概念:程序计数器,java虚拟机栈,本地方法栈,方法区,堆,运行时常量池,直接内存。对象创建过程?(不是类加载过程)对象的内存布局?(可以解释为什么wait方法,是对象方法,而sleep方法是线程方法。)java堆溢出?OutOfMemoryError异常。出现oom异常的情况有哪些?(可以根据运行时数据区特点来描述)StackOverflowError异常,虚拟机栈溢出和本地方法栈溢出异常简述?本机直接内存溢出
2020-07-26 21:03:43
100
翻译 5.10。在Spring应用程序中使用AspectJ【spring 核心技术 翻译】
5.10。在Spring应用程序中使用AspectJ到目前为止,我们在本章中讨论的所有内容都是纯粹的Spring AOP。在本节中,我们将介绍如果您的需求超出了Spring AOP单独提供的功能,那么如何使用AspectJ编译器或weaver来代替Spring AOP,或者在Spring AOP之外使用它。Spring附带了一个小的AspectJ方面库,它在您的发行版中作为Spring-aspect .jar独立提供。您需要将其添加到类路径中,以便在其中使用切面。使用AspectJ向Spring和Asp
2020-07-16 14:30:00
587
翻译 5.9。通过编程创建@AspectJ代理 【spring 核心技术 翻译】
5.9。通过编程创建@AspectJ代理除了使用<aop:config>或<aop:aspectj-autoproxy>在配置中声明方面之外,还可以通过编程方式创建通知目标对象的代理。有关Spring的AOP API的完整细节,请参阅下一章。在这里,我们希望关注通过使用@AspectJ aspect自动创建代理的能力。可以使用org.springframework.aop.aspectj.annotation.AspectJProxyFactory类创建由一个或多个@Aspect
2020-07-16 11:05:49
109
翻译 5.8。代理机制 【spring 核心技术 翻译】
5.8。代理机制Spring AOP使用JDK动态代理或CGLIB为给定的目标对象创建代理。JDK动态代理构建在JDK中,而CGLIB是一个通用的开源类定义库(重新打包到spring-core中)。如果要代理的目标对象实现至少一个接口,则使用JDK动态代理。由目标类型实现的所有接口都被代理。如果目标对象没有实现任何接口,则创建一个CGLIB代理。如果您想强制使用CGLIB代理(例如,代理为目标对象定义的每个方法,而不仅仅是由其接口实现的方法),您可以这样做。不过,你应该考虑以下问题:使用CGLIB
2020-07-16 11:03:36
129
翻译 5.7。混合类型切面
5.7。混合类型切面通过使用自动代理支持、模式定义的<aop:aspect>方面、<aop:advisor>声明的通知、甚至在相同配置中其他风格的代理和拦截器,完全有可能混合使用@AspectJ风格的方面。所有这些都是通过使用相同的底层支持机制实现的,并且可以毫无困难地共存。...
2020-07-16 10:16:45
82
翻译 5.6。选择要使用的AOP声明风格 【spring 核心技术 翻译】
5.6。选择要使用的AOP声明风格一旦您确定了一个方面是实现给定需求的最佳方法,那么如何在使用Spring AOP或AspectJ以及在方面语言(代码)风格、@AspectJ注释风格和Spring XML风格之间做出选择呢?这些决定受到许多因素的影响,包括应用程序需求、开发工具和团队对AOP的熟悉程度。5.6.1。Spring AOP还是Full AspectJ?使用最简单的方法。Spring AOP比使用完整的AspectJ更简单,因为不需要在开发和构建过程中引入AspectJ编译器/ weaver
2020-07-16 10:15:45
101
翻译 5.4。@Aspectj的支持 【spring 核心技术 翻译】
5.4。@Aspectj的支持@AspectJ引用了一种将方面声明为带有注释的常规Java类的样式。@AspectJ样式是由AspectJ项目作为AspectJ 5发行版的一部分引入的。Spring使用AspectJ提供的用于切入点解析和匹配的库来解释与AspectJ 5相同的注释。然而,AOP运行时仍然是纯粹的Spring AOP,并且不依赖于AspectJ编译器或weaver。使用AspectJ编译器和weaver可以使用完整的AspectJ语言,在与Spring应用程序一起使用AspectJ中对此进
2020-07-16 10:01:40
347
翻译 5. 使用Spring进行面向切面编程【spring 核心技术 翻译】
面向方面程序设计(AOP)通过提供另一种考虑程序结构的方法来补充面向对象程序设计(OOP)。OOP中模块性的关键单元是类,而AOP中模块性的单元是方面。方面支持跨多个类型和对象的关注点(如事务管理)的模块化。(在AOP文献中,这样的关注点通常被称为“横切”关注点。)Spring的关键组件之一是AOP框架。虽然Spring IoC容器不依赖于AOP(这意味着如果您不想使用AOP,就不需要使用AOP),但AOP对Spring IoC进行了补充,提供了一个非常强大的中间件解决方案。带有AspectJ切入点的S
2020-07-15 16:30:50
185
翻译 1.16 BeanFactory【spring 核心技术 翻译】
1.16 BeanFactoryBeanFactory API为Spring的IoC功能提供了底层基础。它的特定契约主要用于与Spring的其他部分和相关的第三方框架的集成,它的DefaultListableBeanFactory实现是高级别的GenericApplicationContext容器中的一个关键委托。BeanFactory和相关接口(如BeanFactoryAware、InitializingBean、DisposableBean)是其他框架组件的重要集成点。由于不需要任何注释甚至反射,它们
2020-07-15 15:44:57
98
翻译 1.15。ApplicationContext的附加功能 【spring 核心技术 翻译】
1.15。ApplicationContext的附加功能正如在引言中所讨论的,org.springframework.beans.factory 包提供了管理和操作bean的基本功能,包括以编程的方式。org.springframework.context 包添加了ApplicationContext接口,它扩展了BeanFactory接口,此外还扩展了其他接口,以更面向应用程序框架的风格提供额外的功能。许多人以一种完全声明式的方式使用ApplicationContext,甚至不是通过编程来创建它,而是依
2020-07-14 23:56:06
617
翻译 1.14。注册一个LoadTimeWeaver 【spring 核心技术 翻译】
1.14。注册一个LoadTimeWeaver当类装入Java虚拟机(JVM)时,Spring使用LoadTimeWeaver动态地转换类。要启用加载时编织,可以将@EnableLoadTimeWeaving织造添加到一个@Configuration类中,如下面的示例所示:@Configuration@EnableLoadTimeWeavingpublic class AppConfig {}或者,对于XML配置,您可以使用<context:load-time-weaver>元素
2020-07-14 10:05:35
195
翻译 1.13。环境抽象 【spring 核心技术 翻译】
1.13。环境抽象环境接口是集成在容器中的抽象,它为应用程序环境的两个关键方面建模: profiles 和 properties。profiles文件是一个命名的bean定义逻辑组,只有在给定的概要文件处于活动状态时才向容器注册。bean可以被分配给一个配置文件,无论这个配置文件是用XML定义的还是用注释定义的。与概要文件相关的Environment对象的作用是确定哪些概要文件(如果有的话)当前处于活动状态,以及默认情况下哪些概要文件(如果有的话)应该处于活动状态。properties在几乎所有的应用
2020-07-13 16:33:49
125
翻译 1.12。基于java的容器配置【spring 核心技术 翻译】
1.12。基于java的容器配置1.12.1。基本概念:@Bean和@Configuration本节介绍如何在Java代码中使用注释来配置Spring容器。它包括以下主题:Spring新的java配置支持中的核心构件是@configuration注释的类和@bean注释的方法。@Bean注释用于指示方法实例化、配置和初始化将由Spring IoC容器管理的新对象。对于那些熟悉Spring的 XML配置的人来说,@Bean注释扮演着与元素相同的角色。您可以对任何Spring @Component使用@
2020-07-12 22:33:15
167
翻译 1.9 基于注解的容器配置 【spring 核心技术 翻译】
在配置Spring时,注释比XML更好吗?基于注释的配置的引入提出了这样一个问题:这种方法是否比XML“更好”。简短的回答是“视情况而定”。长话短说,每种方法都有其优缺点,通常由开发人员决定哪种策略更适合他们。由于其定义方式,注释在其声明中提供了大量上下文,从而使配置更短、更简洁。但是,XML擅长在不修改源代码或重新编译组件的情况下连接组件。一些开发人员倾向于让连接靠近源,而另一些人则认为带注释的类不再是pojo,而且配置变得分散且更难控制。无论选择,spring可以容纳两种风格,甚至混合在一起。值
2020-07-12 15:49:05
122
翻译 1.11。使用JSR 330标准注释【spring 核心技术 翻译】
1.11。使用JSR 330标准注释从Spring 3.0开始,Spring提供了对JSR-330标准注解(依赖注入)的支持。这些注释的扫描方式与Spring注释相同。要使用它们,您需要在类路径中包含相关的jar。如果你使用Maven, javax。注入工件在标准Maven存储库中可用(https://repo1.maven.org/maven2/javax/inject/javax.inject/1/)。你可以添加以下依赖到你的文件pom.xml:<dependency> <
2020-07-12 15:44:50
114
翻译 1.10 扫描classPath 和 组件管理【spring 核心技术 翻译】
1.10 扫描classPath 和 组件管理本章中的大多数示例使用XML指定在Spring容器中生成每个BeanDefinition的配置元数据。上一节(基于注释的容器配置)演示了如何通过源代码级注释提供大量配置元数据。然而,即使在这些示例中,“基本”bean定义也显式地定义在XML文件中,而注释仅驱动依赖项注入。本节描述通过扫描类路径隐式检测候选组件的选项。候选组件是与筛选标准匹配的类,并有相应的bean定义注册到容器中。这样就不需要使用XML来执行bean注册。相反,您可以使用注释(例如@Compo
2020-07-12 15:34:52
147
原创 7.5.2 基数排序
public class RadixSort2 { public static void main(String[] args) { int arr[] = { 10, 5, 2, 1, 4, 3, 8, 9, 23, 44, 55, 22, 11, 25, 37 }; rsort(arr, 2); System.out.println(Arrays.toString(arr))...
2019-11-23 12:13:30
80
原创 7.5.1 归并排序
根据B站视频,av9982752,总结的归并排序算法。public class MergeSort1 { public static void main(String[] args) { int arr[] = { 10, 5, 2, 1, 4, 3, 8, 9, 23, 44, 55, 22, 11, 25, 37 }; mergeSort(arr, 0, arr.length...
2019-11-23 11:16:08
84
原创 7.3.1 交换排序(一) 冒泡排序
根据b站 av61234120 写的一个简单的冒泡排序/** * @author yangxp * 冒泡排序 最大的向右边冒泡 */public class BubbleSort1 { public static void main(String[] args) { int arr[] = { 2, 7, 5, 3, 6, 4, 9, 8, 1 }; bubbleSor...
2019-11-21 11:58:56
90
原创 7.4.1 选择排序(一)简单选择排序
根据B站视频av61236201,写的一个简单排序算法。(友情提示:观看视频时,注意保护好颈椎)public class SimpleChooseSort { public static int[] arr = { 22, 59, 86, 99, 44, 11, 22, 33, 46, 33, 26 }; public static void main(String[] args)...
2019-11-21 11:54:40
162
原创 7.4.2 选择排序(二)堆排序
根据B站av47196993视频,写的堆排序算法。基础知识补充1、二叉树2、完全二叉树、满二叉树完全二叉树:从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。 满二叉树:所有非叶子结点的度都是2。3、堆堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。4、大根堆、小根堆5、求给定节点arr[i]的父结点和孩子...
2019-11-21 11:51:34
136
原创 7.3.2 交换排序(二) 快速排序
(1)根据B站视频,av39093184理论学习的一种快速排序算法。有什么问题,大佬可以评论一下。基准值选择最右端,快速排序算法有很多种,这只是其中一种实现。public class Qsort3 { public static int[] qsort(int arr[], int start, int end) { int pivot = arr[end]; int i =...
2019-11-19 01:36:06
231
5
原创 ReentrantLock的公平锁和非公平所
众所周知,ReentrantLock根据构造方法参数的true和false,分为公平锁和非公平所。默认值是NonfairSync(非公平锁)。运行一下代码public class ReentrantLockDemo1 { private static Lock lock = new ReentrantLock(false); private static Object obje...
2019-09-04 23:57:54
151
原创 浅谈Object对象的wait()、notify()方法。
1、为什么wait()、notify()方法要放到Object中,而不是Thread中?wait()方法:该方法用来使得当前线程进入等待状态,直到接到通知或者被中断打断为止。在调用wait()方法之前,线程必须要获得该对象的对象级锁,否则会抛出IllegalMonitorStateException异常;换句话说就是该方法只能在同步方法或者同步块中调用。调用wait()方法之后,当前线程则释放...
2019-08-30 00:16:00
233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人