
Java
文章平均质量分 90
颜 然
西安邮电大学21届计科学生,目前为西邮Linux兴趣小组成员。匀速乃极速。
展开
-
Netty编解码器、实现群聊以及简单开发Http服务器
短连接下的模式是完成一次三次握手发送一个信息,而长连接是一段时间保持TCP连接不断开。并且在Http协议下,总是客户端主动向服务端发起连接(服务端被动、客户端主动),所以。后来结合了SpringBoot框架搞了一个基于WebSocket协议的网页版聊天室,中道未遂最后被告知web搞太早了,所以决定先搁置一段。WebSocket协议是全双工通信(通信的双方可以同时发送和接收消息),实现了多路复用。因为我们要监听用户的在线和离线状态,也就是通道就绪事件和通道未就绪事件,所以通过重写。...原创 2022-07-18 12:30:37 · 717 阅读 · 0 评论 -
Netty核心原理
NIO学习完,发现一个问题就是---使用起来就很麻烦,几个小demo给我搞得眼花缭乱....这时Netty出现了。原创 2022-07-15 11:09:24 · 1631 阅读 · 0 评论 -
Java网编之:多路复用NIO 以及一些感悟
目录一、同步阻塞:BIO二、同步非阻塞:多路复用NIO1、NIO概念2、NIO三大核心:Buffer、Channel、Selector三、进一步理解NIO1、缓冲区:Buffer(1)缓冲区对象的创建(2)缓冲区对象添加数据(3)缓冲区对象读取数据(4)常用的ByteBuffer类 堆外内存:DirectByteBuffer类 堆内内存:HeapByteBuffer类2、通道:Channel(1)服务器端实现:ServerSocketChannel原创 2022-07-13 20:05:31 · 1085 阅读 · 0 评论 -
Java网编之:Socket套接字
目录一、Socket概念二、Socket基本操作三、Socket建立通信原理四、服务器端:ServerSocket类1、构造方法2、常用方法五、客户端与服务器端相互沟通:Socket类1、构造方法2、常用方法六、IP地址:InetAddress类七、测试demo1、模拟客户端Client2、模拟服务器端ServerSocket使用TCP,提供两台计算机之间的通信,主要用于描述IP和端口,在建立网络连接时使用。其中Socket类(客户端和服务器均可使用)提供了前3个操作方法;而SeverSocket类(仅服务原创 2022-07-12 20:38:29 · 888 阅读 · 0 评论 -
AVL 平衡二叉搜索树
二叉搜索树(BST)虽能缩短查找效率,但如果数据有序或接近有序,BST将退化为单支树,此时查找元素就相当于在顺序表中搜索元素,效率低下。那么此时如果能保证每个结点的左右子树高度差的绝对值不超过1,就可以降低树的高度,从而减少平均搜索长度。所以AVL带着这个使命诞生了。在二叉树中,如果每个结点的子树的高度差距为0、1或-1,则称这棵树是平衡二叉树,即AVL。执行插入或删除操作后如果导致了AVL的不平衡,那么我们需要执行旋转操作来重新平衡这棵树。旋转操作主要有LL、RR、LR、RL四种类型。向左子树中的左孩子插原创 2022-06-30 00:33:37 · 252 阅读 · 0 评论 -
Java链表:实现MyArrayList和MyLinkedList
目录一、线性表1、Interface:MyList2、Class:MyArrayList(1)关于MyArrayList的有参构造函数(2)检验数组是否full的函数ensureCapacity3、Class:MyLinkedList二、栈和队列(1)GenericQueue(2)GenericStack三、优先队列一个月前学习了线性表、栈、队列和优先队列的相关特性和接口、类中的方法。博客:Java数据结构:线性表、栈、队列和优先队列_颜 然的博客-优快云博客 下面 --> 如何自己实现一个这样的数据结构原创 2022-06-18 23:49:12 · 719 阅读 · 0 评论 -
阻塞队列BlockingQueue的实现:生产者消费者问题&&实现线程池MyThreadPool
一、前言 锁的另一种实现:ReentrantLock二、阻塞队列:BlockingQueue三、Java自定义实现BlockingQueue接口中的put()和take()两种锁的实现方式1、synchronized锁版本:*2、ReentrantLock锁版本: Condition类四、使用阻塞队列自定义实现ThreadPool1、execute()方法和submit()方法的比较2、ThreadPool实现思路3、实现写阻塞队列的时候我发现了一个锁的另一种实现。以往我们都原创 2022-06-16 11:09:59 · 993 阅读 · 0 评论 -
Java线程池初步学习
目录一、什么是线程池二、为什么要有线程池?还有什么池?三、多线程学习:ExecutorServise接口1、线程池的关闭2、FixedThreadPool执行逻辑 3、CachedThreadPool执行逻辑四、ScheduledThreadPool线程池:周期性和定时性1、定时性:schedule方法2、周期性:scheduleAtFixedRate方法虽然启动一个新线程很方便,但是创建线程需要操作系统资源,比如说线程资源或者栈的空间。频繁地创建和销毁大量的线程会消耗大量时间。所以我们可以把很多小任务让一原创 2022-06-08 21:56:13 · 471 阅读 · 0 评论 -
Java数据结构:规则集Set和映射Map
目录一、规则集:Set接口1、散列式:HashSet类2、链式散列集:LinkedHashSet类3、树形集:TreeSet类4、比较:线性表和规则集二、映射:Map接口1、Map的三个实例化:HashMap类、LinkedHashMap类和TreeMap类2、实例操作:统计单词出现次数上一篇学习了集合Collection接口中的List接口(线性表)和Queue接口(队列),接下来学习剩下一个接口:规则集Set接口还有和他很相像的Map接口。一、规则集:Set接..原创 2022-05-29 21:54:20 · 396 阅读 · 1 评论 -
Java数据结构:线性表、栈、队列和优先队列
目录一、集合:Collection接口二、迭代器:Iterable接口迭代器与for循环1、iterator()方法:获取迭代器2、forEach()方法:每个都操作三、线性表:List接口1、双向遍历:ListIterator接口2、线性表具体类:ArrayList类和LinkedList类四、Comparator接口Comparable接口和Comparator接口之间的不同一些排序和比较的编程设计五、Collections类:执行集合和线性表中通用操作的原创 2022-05-26 12:27:00 · 1093 阅读 · 0 评论 -
Java 线程操作
一、进程与线程计算机中,把一个任务(浏览器、播放器或是其他)称为进程,而进程的子任务则称为线程多进程模式(每个进程只有一个线程):┌──────────┐ ┌──────────┐ ┌──────────┐│Process │ │Process │ │Process ││┌────────┐│ │┌────────┐│ │┌────────┐│││ Thread ││ ││ Thread ││ ││ Thread │││└────────┘│ │└────────┘│ │原创 2022-05-18 22:17:37 · 1043 阅读 · 0 评论 -
Java(8)二进制IO
Java提供了很多类用于实现文本IO和二进制IO。二进制文件的优势在于处理效率比文本文件高,因为文本文件需要编码和解码,而二进制文件则不需要。下面学习二进制IO类。二进制输入类根类为InputStream,二进制输出类根类为OutputStream,它们都是抽象类,后面延伸出了很多子类: FileInputStream类和FileOutoutStream类 这两个类用于从文件读取字节和向文件写入字节,这两个类相较于父类没有引入新的方法。几乎所有的IO类中的方法都会抛出异常java..原创 2022-05-11 21:35:25 · 758 阅读 · 0 评论 -
Java(7)泛型
目录1、泛型性质2、泛型声明3、通配泛型4、泛型类型参数的注意点1、泛型性质使用泛型能够提高代码的安全性,可以在编译时就发现错误而不是运行时,同时也更具宽容性,不必使用强转。同时注意,泛型类型必须是引用类型而不能是基本类型。比如说想要给一个int值创建一个ArrayList对象,我们应该使用:ArrayList<Integer> intList = new ArrayList<>();//而不是使用ArrayList<int...原创 2022-05-05 22:35:51 · 218 阅读 · 0 评论 -
Java(6)抽象类和接口
目录一、抽象类(abstract)1、定义2、也不是完全不能new3、意义4、示例二、接口(interface)1、定义2、示例三、比较:Comparable接口四、克隆:Cloneable接口深复制和浅复制五、接口和抽象类对比1、相同点2、不同点(1)构造方法(2)继承(3)根类3、相比之下一、抽象类(abstract)1、定义方法头或者类头使用abstract关键字即表示为抽象类或抽象方法。抽象类不能使...原创 2022-04-30 11:41:15 · 602 阅读 · 0 评论 -
Java(5)继承和多态之父子关系
一、继承(1)定义从已经存在的类中定义新的类,称为继承。由继承可以引出父类和子类的定义:继承使得你可以定义一个通用的类(即父类、超类、基类),之后继承该类成为一个更特定的类(即子类、继承类、派生类)(2)语法xx(子类)extends XXX(父类)关键字extends告诉编译器,XX类继承自XXX类。经过上面的语句,XX继承了XXX中的方法和数据域。(3)注意点虽说继承了父类的数据域,但如果在父类中的数据是用“private”修饰,就不能直接在子类中访问。如果;父类...原创 2022-04-26 22:24:22 · 1816 阅读 · 0 评论 -
Java(4)面向对象思考(类的设计和String类的详细学习)
面向过程和面向对象的程序设计有很大的不同,Java中主要为面向对象进行程序设计,将焦点放在类的设计上。面向对象的范式将数据和操作方法包含、耦合在一起,从而构成对象。一、类的关系通常来讲,类之间的关系包括:关联、聚合、组合、继承。1、关联关联是描述两个类之间活动的一种二元关系2、聚合、组合聚合是一种特殊的关联形式,它表示两个对象之间的归属关系。如果被聚集对象的存在依赖于聚集对象,则称这两个对象间的关系为组合。(由于聚合和组合关系都以同样的方式用类表示,所以不区分它.原创 2022-04-19 22:19:06 · 1283 阅读 · 2 评论 -
Java(3)对象和类
一、为对象定义类我将对象与类之间的关系总结为了以下这张图:总而言之,类(class)是一个模板,而对象(object) 是一个实体,可以理解为对象是类的具象化体现。并且一个模板可以产生多个实体,也就是说可以从一个类中创建多个对象。同时类还提供了一种特殊类型方法:构造方法...原创 2022-04-15 19:37:09 · 1150 阅读 · 0 评论 -
Java(2)详探方法、数组
目录一、方法1、自定义方法2、 方法重载和方法重写3、方法抽象二、一维数组声明数组变量创建数组并赋值1、“声明变量、创建数组、数组赋值给变量”合三为一:2、foreach循环3、复制数组4、数组传参5、可变长参数列表6、Arrays类数组由小到大排序:sort方法或paralleSort方法数组二分查找:binarySearch方法检测两数组是否严格相等:equals方法填充整个数组或部分数组:fill方法一步打印数组中的所有元素...原创 2022-04-08 19:15:32 · 553 阅读 · 0 评论 -
Java(1)简单的方法、字符和字符串
Linux终端编写、运行Java程序javac是java的编辑器,能将 .java 文件编译为 .class 可执行文件:使用vim编辑器对程序进行编写 javac + 文件名.java java + 文件名第一章 计算机、程序和Java概述温习了计算机基础知识、程序和操作系统,并且初始Java及其基本语法。1、梦开始的地方:简单的Java程序public class Welcome //类{ public static void main(String[..原创 2022-04-07 14:48:42 · 632 阅读 · 0 评论