三、后端开发
文章平均质量分 93
syrdbt
这个作者很懒,什么都没留下…
展开
-
Netty 之 NioEventLoop 源码阅读
EventExecutorGroup 继承了 ScheduledExecutorService、AbstractExecutorService、Iterable;定时调度线程池定时执行任务线程池异步提交执行任务迭代器NioEventLoop 继承了 SingleThreadEventLoop,继承了SingleThreadEventExecutor, 是一个单线程事件处理器,单线程事件调度线程池;原创 2024-08-11 16:11:52 · 550 阅读 · 1 评论 -
Netty 启动源码阅读
主从Reactor模型 :Acceptor 接收到客户端TCP连接请求并处理完成后, 将新创建的SocketChannel 注册到 I/O线程池 (sub Reactor)执行完之后才能被添加到。是一个异步过程,需要。的注册流程,所以等到。原创 2024-07-07 18:35:00 · 633 阅读 · 0 评论 -
Netty 粘包/拆包、解码工具类
1. 概述1.1 粘包发送 abc def,接收 abcdef原因滑动窗口:假设发送方 256 bytes 表示一个完整报文,但由于接收方处理不及时且窗口大小足够大,这 256 bytes 字节就会缓冲在接收方的滑动窗口中,当滑动窗口中缓冲了多个报文就会粘包Nagle 算法:会造成粘包1.2 半包现象,发送 abcdef,接收 abc def原因应用层:接收方 ByteBuf 小于实际发送数据量MSS 限制:当发送的数据超过 MSS 限制后,会将数据切分发送,就会造成半包滑动窗口原创 2024-06-30 17:49:28 · 399 阅读 · 0 评论 -
Netty 入门实例
Netty 是一款用于高效开发网络应用的 NIO 网络框架,它大大简化了网络应用的开发过程。Netty 相比 JDK NIO 的优势:● 易用性:Netty 在 NIO 基础上进行了更高层次的封装,屏蔽了 NIO 的复杂性,大大降低了开发者的上手难度;● 稳定性:Netty 修复和完善了 JDK NIO 较多已知问题,例:select 空转导致 CPU 消耗 100%,TCP 断线重连,keep-alive 检测等问题;原创 2024-06-22 23:02:39 · 803 阅读 · 0 评论 -
Java Socket 网络编程实例(阻塞IO、非阻塞IO、多路复用Selector、AIO)
之前还有一篇文章:套接字进行网络连接流程, 如下图:socket()bind()listen()accept()read()write()close()close()socket()connect()write()read()close()流程图如下, 具体代码示例可以看下面的。原创 2024-06-02 17:14:06 · 651 阅读 · 0 评论 -
Linux C++ Socket 套接字、select、poll、epoll 实例
网络编程, 就是编写程序, 使两台联网的电脑可以交换数据,套接字是网络数据传输用的软件设备, 用来连接网络的工具在 linux中 socket被认为是文件中的一种, 在网络数据传输过程中, 使用文件I/O的相关函数套接字常用网络协议:TCP、UDP套接字进行网络连接流程, 如下图:创建服务器套接字socket()绑定端口bind()监听端口listen()接受客户端请求accept()读取客户端请求的数据read()返回客户端要响应的数据write()关闭与客户端的连接close()原创 2024-05-26 16:42:04 · 1177 阅读 · 0 评论 -
享元设计模式 和 享元设计模式在 FastDateFormat类中的应用
1. 概述享元设计模式:通过尽量共项实例来避免new出实例。享元设计模式中有两个角色,一是要共享的类,二是获取或创建这些共享实例的工厂。举一个例子:例如 String 常量池,大家创建的String常量,创建String的时候,先去常量池中看一下,有该String常量直接使用该常量,如果没有就去创建,创建成功后放在常量池中,当然这些常量不允许修改的,享元模式中的共享的实例也不允许修改,一旦被修改,大家在共用的时候就会出现问题。2. 享元设计模式在 FastDateFormat类中的应用这里的Da原创 2020-11-08 17:36:32 · 836 阅读 · 0 评论 -
Spring Cloud Gateway 2.1.0 中文官网文档
原文地址:https://www.jianshu.com/p/6ff196940b67文章目录1. 如何在工程中引用Spring Cloud Gateway2. 词汇表3. 如何工作的4. 路由断言Factories4.1 After 路由断言 Factory4.2 Before 路由断言 Factory4.3 Between 路由断言 Factory4.4 Cookie 路由断言 Fact...转载 2020-03-08 12:50:57 · 1121 阅读 · 0 评论 -
SpringBoot2 整合 SpringCloud 的 Gateway 入门实例
SpringBoot原创 2020-03-07 17:52:54 · 3707 阅读 · 0 评论 -
装饰者设计模式(Decorator)、装饰者设计模式在 FilterInputStream 中的应用
1. 概述1.1 什么是装饰设计模式?假如现在有一块蛋糕,涂上奶油,就是奶油蛋糕,加上水果就是水果奶油蛋糕,加上生日快乐四个字就是生日蛋糕。奶油蛋糕,水果奶油蛋糕,生日蛋糕其核心都是蛋糕,经过装饰之后成为目的更明确的蛋糕,更能解决问题。像这种不断为对象添加装饰的模式就叫 Decorator 模式,Decorator 指的是装饰物。1.2 装饰者设计模式的角色核心角色(Componen...原创 2020-03-03 21:06:21 · 718 阅读 · 2 评论 -
桥接设计模式 (Bridge)
1. 问题引出实现某件产品,某产品有多种品牌和类型。比较直观的一种实现方式:原创 2020-02-25 20:40:11 · 387 阅读 · 0 评论 -
IP 网际协议
1. 概述IP 协议,网际协议,所有计算机网络都使用 IP 协议, 使得性能各异的网络在网络层上就像是一个统一的网络,在网络中传输数据包,上层协议使用TCP协议就是现在的互联网。IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。IP由网...原创 2019-06-20 16:40:00 · 503 阅读 · 0 评论 -
HTTP 超文本传输网络协议
1.概述超文本传输协议 (HTTP,HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP协议的特点如下所示:无连接。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以......原创 2019-06-19 15:56:16 · 886 阅读 · 0 评论 -
SpringBoot2 添加Druid作为数据库连接池实例
记录在 SpringBoot2中添加 Druid 作为数据库连接池的实例。环境:Java8 +SpringBoot2 +MyBatis +IDEA +MySQL8。1.SpringBoot2 添加Druid作为数据库连接池实例配置数据库连接池的原理,需要先指明 datasource 的类型com.alibaba.druid.pool.DruidDataSource,...原创 2019-07-01 17:44:03 · 690 阅读 · 0 评论 -
谷歌(Chorme) 浏览器查看请求头、响应头
第一步:打开浏览器,右键点击页面,点击(左键点击)检查,出现如下界面:第二步:点击Network,选择数据类型,这里选择的是docs 。第三步:重新加载页面,点击刷新符号。第四步:会看到一些传送的数据。第五步:点击查看其中一个。这里查看 243074 ,这里看一下他的headers(请求头和响应头)。243074 ,这里看一下他的headers。...原创 2019-06-19 14:46:04 · 35554 阅读 · 18 评论 -
策略设计模式(Strategy)
策略设计模式(Strategy):可以整体的替换一个算法的实现部分,能够整体的替换算法,能让我们轻松地用不同方法解决同一个问题。1. 示例程序举一个收银的例子,普通用户打95折,会员打8折,超级会员打6折。如果在一个函数里面去解决这些问题,那么增加会员类型和折扣变化的时候会导致代码臃肿,难以维护。可以使用策略模式去解决这个问题。策略模式只适用管理一组同类型的算法,并且这些算...原创 2019-06-02 23:03:25 · 7156 阅读 · 2 评论 -
在 C/S 项目中使用 Spring + MyBatis
记录在 C/S 项目中使用 Spring +MyBatis 。1.在 C/S 项目中使用 Spring + MyBatis用了Spring + MyBatis之后就再也不想回到从前(未使用框架的)的时候,感谢开发这些框架的大神。进入正题,我们先回想一下B/S项目中使用SSM ,从网页输入信息,SpringMVC接受信息(Controller层),然后调用ser...原创 2019-06-28 18:20:53 · 854 阅读 · 0 评论 -
Spring中对Controller进行AOP切面编程无效问题解决
1.问题描述对Controller类进行切面编程,没有warning,没有error,一直无效。。。2.问题原因怀疑切点表达式错误(其实没错),切入点表达式如下所示: // 定义切点表达式 @Pointcut("execution(* com.wslxxy.controller.*.*(..))") private void myPointCut()...原创 2019-05-29 23:35:45 · 3666 阅读 · 0 评论 -
Spring 中控制反转 和 依赖注入 的区别和关系
控制反转 (IOC),面向对象的一种设计原则,目的是降低耦合度。依赖注入(DI)是实现控制反转的常见方式,控制反转的另外一种实现方式是依赖查找。控制反转中的控制指的是自己控制(创建)自己的成员变量,反转指的是由通过自己去控制(创建)成员变量变成由第三方来传递给自身,也就是第三方将自己的依赖(所需的成员变量)注入到自身。1.控制反转先描述一个场景:一个对象A要引用另外一个对象B,那...原创 2019-06-26 16:29:21 · 1518 阅读 · 0 评论 -
Java 中 Holder 方式 和 枚举方式 实现单例模式
Holder 方式 和 枚举方式可以线程安全的实现单例模式。Holder 方式借助于类加载的初始化阶段<clinit>()方法是同步方法。枚举方式是因为枚举类型不能继承且只能被实例化一次。1.Holder 方式实现单例模式类加载的初始化阶段<clinit>()方法是同步方法,在类中设置一个静态类,将唯一实例放在静态类中,第一次访问实例...原创 2019-06-26 18:49:10 · 3849 阅读 · 0 评论 -
SpringBoot2 全局捕获异常实例
1.SpringBoot 全局捕获异常首先写一个会抛出异常的Controller类如下所示,i = 1/0, 0不能作为除数,显然这个Controller类 ErrorController.java 会抛出异常。@EnableAutoConfiguration@RestControllerpublic class ErrorController { @Requ...原创 2019-06-27 15:13:38 · 496 阅读 · 0 评论 -
SpringBoot2 异步执行方法实例
1.SpringBoot同步执行方法学习SpringBoot 异步执行方法之前我们先看一个同步执行的例子。首先是一个Service 类:TestAsyncService.java,这里只是为了演示,就没有访问数据库和编写接口。@Servicepublic class TestAsyncService { public String getResult() { ...原创 2019-06-27 16:14:58 · 7783 阅读 · 0 评论 -
SpringBoot2 使用Freemarker模板引擎渲染web视图
1.Freemarker模板引擎渲染web视图FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。第一步:在pom.xml中配置引入 freeMarker的依赖包 。 <!-- freeM...原创 2019-06-27 12:40:57 · 530 阅读 · 0 评论 -
SpringBoot2 读取不同环境的配置文件实例
SpringBoot可以在 application.properties中配置信息 spring.profiles.active 来读取不同环境的配置文件。1.SpringBoot2 读取不同环境的配置文件工程运行环境可能有:开发环境、测试环境和生产环境,可以通过修改 application.properties来获取不同环境的的配置信息。首先我们先讲一下用到的@Val...原创 2019-06-27 17:21:09 · 1375 阅读 · 0 评论 -
IDEA 中 SpringBoot2 整合 Mybatis 实例实例
记录在 IDEA 中使用SpringBoot2 整合 Mybatis的 实例,环境:Java8 + Maven + MySQL8。1.添加依赖添加 MyBatis 依赖,MySQL 连接依赖,,数据库用的MySQL8。 <!-- MyBatis 依赖 --> <dependency> <groupId>org.m...原创 2019-06-28 00:33:41 · 694 阅读 · 0 评论 -
Spring 基于 xml 配置的声明式事务
1.测试一个没有事务的insert语句首先测试一个没有事务的insert语句,测试插入一条数据,测试成功,如下图所示,大家可以随便找一个之前的SSM来进行插入测试,这里测试的是 private ClassService classService;的insert方法。分析一下日志,如下所示,日志的全部分析见附录。--- 创建了数据库连接池DEBUG [...原创 2019-06-28 22:26:34 · 1509 阅读 · 0 评论 -
迭代器设计模式(Iterator)
1.概述迭代器(Iterator)设计模式用于在数据集合中按照顺序去遍历,Java的List集合和Set集合都支持迭代器。迭代器(Iterator)设计模式需要有:一个迭代器(Iterator)接口。 一个具体的迭代器(Concretelterator)实现迭代器(Iterator)接口。 Aggregate(集合)创建定义迭代器(Iterator)接口。 ConcreteA...原创 2019-04-14 17:12:24 · 685 阅读 · 0 评论 -
Spring的事务管理
1.事务概述1.1 事务的四个特性ACID 原子性(Automic): 事务作为一个整体被执行,包含在事务中对数据库的操作,要么全部被执行,要么全部不被执行。 一致性(Consistency): 事务应该保证数据库从一个一致状态转变为另外一个状态。 隔离性(Isolation): 多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 持久性 (...原创 2019-05-29 21:12:23 · 176 阅读 · 0 评论 -
Spring五个事务隔离级别和七个事务传播行为
原文地址:https://yq.aliyun.com/articles/488931.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。2.不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第...转载 2019-05-29 18:22:16 · 242 阅读 · 0 评论 -
SpringMVC 存取session数据实例(@SessionAttributes 注解)
1.概述SpringMVC可以通过@SessionAttributes添加session。@SessionAttributes要在类上声明,如下所示。@SessionAttributes有三个属性:(1)names:声明需要存储到session中数据的名称。(2)types:声明存储到session中参数类型,将模型中对应类型的参数存储到session中。(...原创 2019-05-02 17:37:28 · 2208 阅读 · 0 评论 -
计算机网络之物理层
物理层,考虑的是怎样才能处理各种计算机的传输媒体上传输数据的比特流。计算机内部多采用并行传输方式,但数据在通信线路上传输一般都是串行传输。数据通信系统可分为三大部分:源系统(或发送端、发送方)、传输系统(或传输网络) 和 目的系统 (或接收端,接收方)。源系统包括源点(源点设配产生要发送的数据)和发送器。目的系统包括终点(终点设配从接收器获得数据)和接收器。数据通信系统的模...原创 2019-05-02 17:03:46 · 366 阅读 · 0 评论 -
Java 的 synchronized 关键字
synchronized 关键字用来同步“方法”或者“代码块”,可以实现原子性,可见性,有序性。采取互斥机制,即在同一时刻,只能有一个线程访问同步资源,串行的执行“方法”或者“代码块”。缺点:缺点降低了线程的并发性;不能中断;多个锁交叉容易死锁。1.问题的引出多个线程在共享一个数据的时候会出现问题,如下所示,多个线程共同访问一个变量count,对count进行+1操作,开启了...原创 2019-04-27 21:13:53 · 347 阅读 · 0 评论 -
org.springframework.beans.factory.BeanCreationException:Error creating bean with name
1. 错误描述错误描述,运行测试类,测试Service类的时候报错:错误原因:错误具体描述如下:使用注解装配 bean时发生错误。 @Resource private TaskService taskService;2. 错误分析与解决错误分析:犯了一个很低级的错误,TaskServiceImpl没有去实现TaskService接口,如下图所示...原创 2019-05-02 11:49:13 · 100829 阅读 · 7 评论 -
计算机网络体系结构
1.概述计算机体系结构: 计算机网络的各层及其协议的集合。为进行网络中的数据交换而建立的规则、标准或约定成为网络协议,简称协议。网络协议三要素: 语法、 语义、 同步。(1)语法:数据或控制信息的结构或格式。(2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。(3)同步:即事件实现顺序的详细说明。同步,在一定的条件下应当发生什么事件,同步含有时序的意思。...原创 2019-05-01 19:38:46 · 901 阅读 · 0 评论 -
Java内存模型
原文地址:http://ifeve.com/java-memory-model-6/概述Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的共...转载 2019-04-26 20:07:03 · 114 阅读 · 0 评论 -
模板方法设计模式(Template Method)
1.概述组成模板的方法被定义在父类中,由于这些方法是抽象方法,在父类中无法查看这些方法的具体实现,唯一可以知道的就是父类如何调用这些方法的。这种在父类中定义处理流程的框架,在子类中实现具体处理的模式就是模板方法(Template Method)设计模式。举一个例子:学生都需要去上课,其上课的具体流程是上课、听课、下课,但是不同类学生听课(上课、下课)的具体内容不同,不过它们的流程相同,即...原创 2019-04-14 15:57:30 · 309 阅读 · 0 评论 -
Spring AOP(面向切面编程)
1. 为什么需要切面编程如果要重复通用功能的话,最常见的面向对象的技术就是继承或委托。继承的缺点:整个工程中都是用相同的基类,会导致一个脆弱的对象体系。脆弱的简单例子,你修改基类中的方法名,则需要在每一个派生类中去修改调用。委托的缺点:可能需要对委托对象进行复杂的调用。切面提供了一种更加清晰简洁重复通用功能的功能。例:有几个类都需要在一个点执行一个相同的方法,可以把这个方法抽象成...原创 2019-04-21 15:15:15 · 288 阅读 · 0 评论 -
进程和线程的学习
1.概述进程:操作系统进行资源分配和调度的一个独立单位。线程:操作系统调度的基本单位。对计算机来说,每一个任务就是一个进程(Process),每一个进程内部中都至少有一个线程(Thread)是在运行,有时线程也被称为轻量级的进程。例如:启动一个Java虚拟机(JVM),操作系统就会创建一个新的进程(JVM进程),JVM进程中会派生或者创建很多线程。线程是程序执行的一个路径,每一个...原创 2019-04-21 10:46:34 · 422 阅读 · 0 评论 -
代理设计模式(Proxy)
1.概述在面向对象编程的过程中,“本人”和“代理人”都是对象。如果“本人”对象太忙的了,有些工作自己无法亲自完成,就将其交给“代理人”对象负责。在处理请求的时候“代理人”会尽量处理客户的请求,只有自己不能处理时,才会把工作交给“本人”。例如:可以在“代理人”判断请求的是否合法和处理异常等,“本人”要实现线程同步,则可以在“代理人”中实现同步,具体的请求处理在交给“本人”处理。2.实...原创 2019-04-20 21:36:28 · 2263 阅读 · 1 评论 -
建造者设计模式(Builder)
1.概述建造者(Builder)设计模式用于组装具有复杂结构的实例。在构建一个复杂实例的时候,我们很难一气呵成,我们首先把实例的各个部分建造出来,然后分阶段把它们组装起来。2.示例程序一个使用Builder设计模式来编写“文档的程序”的例子,文档的结构有:一个标题、几个字符串、条目项目。示例程序中有如下四个类:Builder类、Director类、TextBuilder类、HT...原创 2019-04-20 19:31:29 · 397 阅读 · 0 评论