- 博客(20)
- 收藏
- 关注
原创 Netty(四)
再来看看他是如何执行io任务和普通任务的,如何区分事件的呢,来看下面这段源码final int ioRatio = this.ioRatio;if (ioRatio == 100) { try { processSelectedKeys(); } finally { // Ensure we always run tasks. runAllTasks(); }} else { final long ioStartTi.
2021-08-15 15:24:35 177
原创 Netty(三)
下面来分析NioEventLoop首先我们得明确几个问题,NioEventLoop中都有什么NioEventLoop包含三个 selector、线程、任务队列下面来看看源码selector创建是在他的构造方法中有一段final SelectorTuple selectorTuple = openSelector();代码跟进去查看private SelectorTuple openSelector() { final Selector unwrappedSelect
2021-08-15 11:32:05 912
原创 Netty(二)
Netty源码分析先来一段测试的服务端和客户端代码方便我们debug跟踪源码(用的是netty-all-4.1.42版本)Netty-Serverpublic class NettyServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup parentGroup = new NioEventLoopGroup(); EventL
2021-08-14 20:28:22 398
原创 粘包和半包
首先得知道什么是粘包和半包粘包就是我们客户端向服务器发送数据是出现的一种现象比如 发送的是 ab cd, 接收的却是abcd这种就叫粘包粘包的原因就是我们的tcp协议有一种叫做滑动窗口,那什么是滑动窗口呢,下面先来解释滑动窗口最初的TCP协议是,如图这种一问一答的形式,大家可想到这样效率太低了,所以就引入了新的,如下图设置一个窗口,打个比方窗口大小为4一次能发送4次请求,如果要发第五个请求则需等待,等服务器返回第一个请求的响应,我们的窗口就会往下滑动,这是我们的...
2021-08-12 13:40:30 425
原创 Redis事务
Redis事务有四个操作命令Multi 开启事务Exec 提交事务Watch 可以监听一个或多个key,在提交的时候看与之前是否发生变化,如果发生了变化则不提交,没有发生变化则提交(原理就类似于乐观锁,给每次修改都加上了一个版本号)Discard 取消事务Redis事务没有回滚,只有取消事务下面来看代码演示大家可以开启两个redis客户端界面大家可以看到右手边的客户端是提交了事务然后我们再来把左手边的客户端提交事务会发现在两边客户端来获取这个key的值都是左...
2021-08-09 23:38:04 97
原创 Netty(一)
Netty 简介Netty 是一个 NIO 客户端服务器框架,可快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,例如 TCP 和 UDP 套接字服务器。“快速简便”并不意味着最终的应用程序将遭受可维护性或性能问题的困扰。Netty 经过精心设计,结合了许多协议(例如FTP,SMTP,HTTP 以及各种基于二进制和文本的旧式协议)的实施经验。结果,Netty 成功地找到了一种无需妥协即可轻松实现开发,性能,稳定性和灵活性的方法。(NIO可以查看我前面的文章htt
2021-07-05 20:26:15 110
原创 BIO,NIO,AIO
学习目标掌握BIO和NIO学习内容:1.BIO是什么2.NIO是什么学习产出:1.BIOBIO是一个同步并阻塞的IO模式,传统的 java.io 包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。这也就意味着如果我么在读取某一个大的文件时,读取了很久,那么这个线程就会被夹死在这里,其他的后续任务
2021-06-29 18:10:26 101
原创 form表单隐藏域
在form表单action中请求的servlet如果需要设置参数但是又不想显示出来则可以使用到隐藏域这样是没有使用的<form action="filmServlet.action?op=1" method="post"> 用户名<input type="text" name="uname" id="uname"/> 密码<input type="password" name="upwd" id="upwd"/>
2021-06-08 15:13:34 2010
原创 ajax的学习
项目场景:利用ajax完成视频在播放但是登录或退出后界面并不改变问题描述:如果我们没有用ajax我们是无法保证一般在播放视频,另一边同时又在完成登录后不会跳转页面原因分析:比如我输入了正确的账号和密码然后点击登录如果没有ajax是会跳转到另一个页面,如果用了ajax他只会修改指定的位置而不影响主页面的正常运行解决方案:首先的知道什么是ajaxajax就是Asynchronous 异步JavaScriptXML这三个的结合体ajax是通过XMLHttpRequest从
2021-06-08 15:04:24 82
原创 Servlet转发和重定向的区别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、转发和重定向是什么?二、使用步骤1.引入库2.读入数据总结前言主要是探究servlet跳转也面的两个方式转发和重定向的区别一、转发和重定向是什么?当我们在登录页面的时候输入了账号密码然后点击登录按照正常的逻辑应该要跳转一个登录成功或者是失败的页面,那么如何跳转过去呢,这几就涉及到转发和重定向转发request.getRequestDispatcher(“填要去的页面”).forward(request,resp
2021-06-05 19:17:03 894
原创 Servlet生命周期详解
学习目标:Servlet生命周期学习内容:Servlet的在底层究竟是如何运行的学习产出:首先servlet是运行在容器里面的,那么servlet也就有一个创建到销毁的过程那么它的调用顺序是1.servlet先调用他自己的无参构造方法2.再调用init初始化方法3.然后调用service方法4.通过service方法来判断发过来的请求是get或者post等等5.判断后来用特定的doGet或者doPost等方法来处理6.最后容器关闭时调用destroy方法销毁servlet下面我来实
2021-06-05 16:14:04 613
原创 js中this
在javascript中this的指向今天做项目是遇到了一个问题代码是如下:<script type="text/javascript"> let vm=new Vue({ el:"#app", data:{ fodds:{}, }, mounted: function(){//页面一加载就会运行 axios.all([checkLogin(), findAllFoods()]) .th
2021-05-07 16:31:24 87
原创 SpringBoot
创建一个简单的SpringBoot项目:@SpringBootApplication//启动类上的启动注解public class Springboot1Application { public static void main(String[] args) { SpringApplication.run(Springboot1Application.class, args); }做个控制层的类@RestController//控制层注解 表明以@Restfu
2021-04-21 15:11:58 172 2
原创 SpringAOP两种代理原理
SpringAOP代理:spingAOP代理有两种,如果不清楚的可以看看我上篇文章JDK动态代理:目标类必须实现一个接口CGLIB代理:目标类必须继承一个类JDK动态代理:JDK为什么一定要目标类实现一个接口呢,这其实就得看看JDK动态代理的原理了,其实JDK动态代理它是先生成一个代理类然后他也是实现了目标类实现的接口里面的方法,只是他还是调用的是目标类的方法。下面我们来自定义实现一下//创建一个接口public interface StudentBiz { int add(St
2021-04-14 14:14:20 159
原创 SpringAOP原理
SpringAOP:面向切面编程首先要懂几个专业术语Aspect:切面,其实也就是一个普通的类,不依赖任何的类Join point:连接点,某个程序执行到某个方法的时候,可能在这个方法前要执行或者在这个方法后要执行或者异常要执行等这个要执行的特定方法叫做连接点Advice:增强(建议),增强有几种前置、后置、异常、环绕等,就是在程序某个方法上要执行的特定的操作叫做增强Pointcut:切入点,其实也就是一个表达式,用来判断在什么方法上要切入Target object:目标类对象,就是需要增
2021-04-11 17:02:27 91
原创 初学Spring IOC和DI原理基于注解
下面是我对spring IOC和DI的理解IOC就是控制反转:将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理从此在开发过程中不再需要关注对象的创建和生命周期的管理在需要时由Spring框架提供这个由spring框架管理对象创建和生命周期的机制称之为控制反转比如就是我们以前创建一个类是需要自己来手工来new来创建,但是我们用springIOC的话就可以让容器来帮我们自动创建,把我们所需要创建的类托管给spring容器但是也不是所有的类都可以被容器托管只有在一个类上有以下注
2021-04-08 10:34:22 135 1
原创 HashMap解析
简介:HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代
2020-12-24 11:31:32 472
原创 AVL树的分析
AVL树又叫做平衡之二叉树,什么是平衡和不平衡就是由一个平衡因子来判断的一棵AVL树是其每个结点的左子树和右子树的高度最多相差1的二叉查找树(空树的高度为-1),这个差值也称为平衡因子(其取值可以是1,0,-1,平衡因子是某个结点左右子树层数的差值,因为没有规定左子树减右子树还是右子树减左子树,所以有负和正的区别)假如我们要在AVL树中插入或者删除一个节点的话那么就有可能会影响平衡所以就有了旋转的概念,这里假设结点X是失衡点,它必须重新恢复平衡旋转分为四种:在结点X的左孩子结点的左子树中插入元素
2020-12-22 16:34:22 125
原创 indexof(int ch)源码解析
Java.lang包中String.indexof(int ch)源码解析:举一个例子:String fileName="a.jpg";System.out.println( fileName.indexOf( 46 ) );结果会输出1;我们点进去查看源码:public int indexOf(int ch) { return indexOf(ch, 0); }public int indexOf(int ch, int fromIndex) {
2020-12-21 11:46:57 855
原创 Integer.toBinaryString源码分析
Integer.toBinaryString源码分析1.先调用toUnsignedString0(int i,int val, int shift)的方法public static String toBinaryString(int i) { return toUnsignedString0(i, 1); }2.进入toUnsignedString0(int i,int val, int shift)的方法private static String toUnsignedSt
2020-12-15 16:20:41 229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人