<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yan__Ran的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Yan__Ran</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Yan__Ran]]></copyright><item><title><![CDATA[现代操作系统原理与实现]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/127488279</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/127488279</guid><author>Yan__Ran</author><pubDate>Mon, 24 Oct 2022 11:08:05 +0800</pubDate><description><![CDATA[随书笔记]]></description><category></category></item><item><title><![CDATA[关于博客迁移的通知]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/127266597</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/127266597</guid><author>Yan__Ran</author><pubDate>Tue, 11 Oct 2022 16:42:18 +0800</pubDate><description><![CDATA[现学习方向：JAVA、GO、操作系统。]]></description><category></category></item><item><title><![CDATA[MySQL join和索引]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125893125</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125893125</guid><author>Yan__Ran</author><pubDate>Thu, 21 Jul 2022 09:08:11 +0800</pubDate><description><![CDATA[S1jionS2后，S1中的列会与S2中的列一一合并一次最后组成新的表。在join中可以交换位置，最终生成的新表都是一样的；偶然发现的，下载之后连接上自己的库操作操作发现还挺方便的，可以在里面创建管理你的数据库。例如在使用S1joinS2合并表的时，我们想要让S1中的l1列与S2中的l2列相等匹配时，我们可以将语句改成S1joinS2onS1.l1=S2.l2。可以看到合并时不再像之前那样“傻瓜式”合并了，而是将classid和id相等的列合并成一条而形成的新的表。...]]></description><category></category></item><item><title><![CDATA[使用JDBC实现Java代码连接MySQL]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125860306</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125860306</guid><author>Yan__Ran</author><pubDate>Mon, 18 Jul 2022 22:07:51 +0800</pubDate><description><![CDATA[在连接过程中遇到了n多问题，各种异常碰了个遍，网上教程太杂太老，所以决定写个复盘。]]></description><category></category></item><item><title><![CDATA[Netty编解码器、实现群聊以及简单开发Http服务器]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125800462</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125800462</guid><author>Yan__Ran</author><pubDate>Mon, 18 Jul 2022 12:30:37 +0800</pubDate><description><![CDATA[短连接下的模式是完成一次三次握手发送一个信息，而长连接是一段时间保持TCP连接不断开。并且在Http协议下，总是客户端主动向服务端发起连接（服务端被动、客户端主动），所以。后来结合了SpringBoot框架搞了一个基于WebSocket协议的网页版聊天室，中道未遂最后被告知web搞太早了，所以决定先搁置一段。WebSocket协议是全双工通信（通信的双方可以同时发送和接收消息），实现了多路复用。因为我们要监听用户的在线和离线状态，也就是通道就绪事件和通道未就绪事件，所以通过重写。...]]></description><category></category></item><item><title><![CDATA[Netty核心原理]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125771796</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125771796</guid><author>Yan__Ran</author><pubDate>Fri, 15 Jul 2022 11:09:24 +0800</pubDate><description><![CDATA[NIO学习完，发现一个问题就是---使用起来就很麻烦，几个小demo给我搞得眼花缭乱....这时Netty出现了。]]></description><category></category></item><item><title><![CDATA[Java网编之：多路复用NIO 以及一些感悟]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125756317</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125756317</guid><author>Yan__Ran</author><pubDate>Wed, 13 Jul 2022 20:05:31 +0800</pubDate><description><![CDATA[目录一、同步阻塞：BIO二、同步非阻塞：多路复用NIO1、NIO概念2、NIO三大核心：Buffer、Channel、Selector三、进一步理解NIO1、缓冲区：Buffer（1）缓冲区对象的创建（2）缓冲区对象添加数据（3）缓冲区对象读取数据（4）常用的ByteBuffer类                堆外内存：DirectByteBuffer类                堆内内存：HeapByteBuffer类2、通道：Channel（1）服务器端实现：ServerSocketChannel]]></description><category></category></item><item><title><![CDATA[Java网编之：Socket套接字]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125743175</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125743175</guid><author>Yan__Ran</author><pubDate>Tue, 12 Jul 2022 20:38:29 +0800</pubDate><description><![CDATA[目录一、Socket概念二、Socket基本操作三、Socket建立通信原理四、服务器端：ServerSocket类1、构造方法2、常用方法五、客户端与服务器端相互沟通：Socket类1、构造方法2、常用方法六、IP地址：InetAddress类七、测试demo1、模拟客户端Client2、模拟服务器端ServerSocket使用TCP，提供两台计算机之间的通信，主要用于描述IP和端口，在建立网络连接时使用。其中Socket类（客户端和服务器均可使用）提供了前3个操作方法；而SeverSocket类（仅服务]]></description><category></category></item><item><title><![CDATA[初识数据库：MySQL基础使用]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/124050878</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/124050878</guid><author>Yan__Ran</author><pubDate>Mon, 11 Jul 2022 12:04:00 +0800</pubDate><description><![CDATA[一、数据库基础

1.1 数据库

数据库即为保存有组织数据的容器，而数据库软件称为DBMS（数据库管理系统）。通俗来讲，数据库就是通过DBMS创建和操控的容器。我们平时访问数据库并不是直接访问数据库本身，而是使用DBMS，然后通过DBMS访问数据库。

1.2 表

表是一种结构化的文件，可以用于存储某种特定类型的数据。简而言之，表就是某种特定类型数据的结构化清单。

同时注意：数据库中每个表都有一个名字来标识自己，这个名字是唯一的。


模式

模式就是关于数据库和表的布.........]]></description><category></category></item><item><title><![CDATA[AVL 平衡二叉搜索树]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125513921</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125513921</guid><author>Yan__Ran</author><pubDate>Thu, 30 Jun 2022 00:33:37 +0800</pubDate><description><![CDATA[二叉搜索树（BST）虽能缩短查找效率，但如果数据有序或接近有序，BST将退化为单支树，此时查找元素就相当于在顺序表中搜索元素，效率低下。那么此时如果能保证每个结点的左右子树高度差的绝对值不超过1，就可以降低树的高度，从而减少平均搜索长度。所以AVL带着这个使命诞生了。在二叉树中，如果每个结点的子树的高度差距为0、1或-1，则称这棵树是平衡二叉树，即AVL。执行插入或删除操作后如果导致了AVL的不平衡，那么我们需要执行旋转操作来重新平衡这棵树。旋转操作主要有LL、RR、LR、RL四种类型。向左子树中的左孩子插]]></description><category></category></item><item><title><![CDATA[BST 二叉搜索树]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125450836</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125450836</guid><author>Yan__Ran</author><pubDate>Tue, 28 Jun 2022 10:00:06 +0800</pubDate><description><![CDATA[目录一、BST概念二、BST的查找、插入和遍历1、查找2、插入3、遍历（1）前序（2）中序（递增显示）（3）后序（4）深度优先（5）广度优先4、删除（1）无左子结点时（2）有左子结点时三、定义一个树接口四、实现BST类 五、数据压缩：哈夫曼编码前几天学习了堆排序，其实堆排序用到的结构就是二叉树。那么BST是满足如下规则的二叉树：遵循BST“左小右大”的原则，查询时从根结点向下依次查找各个子树，直到 子树为空 或 已查询到 为止。否则设置的对比current结点将一直与目标值比较，小于当前结点时赋给curre]]></description><category></category></item><item><title><![CDATA[Java实现一些排序：不要再只会冒泡啦]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125362704</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125362704</guid><author>Yan__Ran</author><pubDate>Wed, 22 Jun 2022 10:04:02 +0800</pubDate><description><![CDATA[归并排序算法将数组分为两半，然后对每个部分持续递归划分子数组。直到每组只有一个元素后开始合并排序，接下来就是不断合并排序合并排序....最终两部分排好序后直接合并即可： 代码实现如下：  


其中方法merge的归并实现主要是靠下标跟踪，两数组元素逐一比较后，得出较小的元素放入最终数组temp中，被放入元素的所属原数组下标++（为了接着往下走）。通过两两比较最终全部放入temp中实现排序：快速排序主要是通过选出一个pivot（基准）元素，然后将数组分为两部分，使得第一部分中的所有元素都.........]]></description><category></category></item><item><title><![CDATA[Java链表：实现MyArrayList和MyLinkedList]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125324693</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125324693</guid><author>Yan__Ran</author><pubDate>Sat, 18 Jun 2022 23:49:12 +0800</pubDate><description><![CDATA[目录一、线性表1、Interface：MyList2、Class：MyArrayList（1）关于MyArrayList的有参构造函数（2）检验数组是否full的函数ensureCapacity3、Class：MyLinkedList二、栈和队列（1）GenericQueue（2）GenericStack三、优先队列一个月前学习了线性表、栈、队列和优先队列的相关特性和接口、类中的方法。博客：Java数据结构：线性表、栈、队列和优先队列_颜 然的博客-优快云博客 下面 --> 如何自己实现一个这样的数据结构]]></description><category></category></item><item><title><![CDATA[阻塞队列BlockingQueue的实现：生产者消费者问题&&实现线程池MyThreadPool]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125194264</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125194264</guid><author>Yan__Ran</author><pubDate>Thu, 16 Jun 2022 11:09:59 +0800</pubDate><description><![CDATA[一、前言 锁的另一种实现：ReentrantLock二、阻塞队列：BlockingQueue三、Java自定义实现BlockingQueue接口中的put()和take()两种锁的实现方式1、synchronized锁版本：*2、ReentrantLock锁版本：                 Condition类四、使用阻塞队列自定义实现ThreadPool1、execute()方法和submit()方法的比较2、ThreadPool实现思路3、实现写阻塞队列的时候我发现了一个锁的另一种实现。以往我们都]]></description><category></category></item><item><title><![CDATA[Java线程池初步学习]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125176639</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125176639</guid><author>Yan__Ran</author><pubDate>Wed, 08 Jun 2022 21:56:13 +0800</pubDate><description><![CDATA[目录一、什么是线程池二、为什么要有线程池？还有什么池？三、多线程学习：ExecutorServise接口1、线程池的关闭2、FixedThreadPool执行逻辑 3、CachedThreadPool执行逻辑四、ScheduledThreadPool线程池：周期性和定时性1、定时性:schedule方法2、周期性：scheduleAtFixedRate方法虽然启动一个新线程很方便，但是创建线程需要操作系统资源，比如说线程资源或者栈的空间。频繁地创建和销毁大量的线程会消耗大量时间。所以我们可以把很多小任务让一]]></description><category></category></item><item><title><![CDATA[Java数据结构：规则集Set和映射Map]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/125022489</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/125022489</guid><author>Yan__Ran</author><pubDate>Sun, 29 May 2022 21:54:20 +0800</pubDate><description><![CDATA[目录

一、规则集：Set接口

1、散列式：HashSet类

2、链式散列集：LinkedHashSet类

3、树形集：TreeSet类

4、比较：线性表和规则集

二、映射：Map接口

1、Map的三个实例化：HashMap类、LinkedHashMap类和TreeMap类

2、实例操作：统计单词出现次数

上一篇学习了集合Collection接口中的List接口（线性表）和Queue接口（队列），接下来学习剩下一个接口：规则集Set接口还有和他很相像的Map接口。

一、规则集：Set接..]]></description><category></category></item><item><title><![CDATA[Java数据结构：线性表、栈、队列和优先队列]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/124902813</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/124902813</guid><author>Yan__Ran</author><pubDate>Thu, 26 May 2022 12:27:00 +0800</pubDate><description><![CDATA[目录

一、集合：Collection接口

二、迭代器：Iterable接口

迭代器与for循环

1、iterator()方法：获取迭代器

2、forEach()方法：每个都操作

三、线性表：List接口

1、双向遍历：ListIterator接口

2、线性表具体类：ArrayList类和LinkedList类

四、Comparator接口

Comparable接口和Comparator接口之间的不同

一些排序和比较的编程设计

五、Collections类：执行集合和线性表中通用操作的]]></description><category></category></item><item><title><![CDATA[Java 线程操作]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/124789327</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/124789327</guid><author>Yan__Ran</author><pubDate>Wed, 18 May 2022 22:17:37 +0800</pubDate><description><![CDATA[一、进程与线程


计算机中，把一个任务（浏览器、播放器或是其他）称为进程，而进程的子任务则称为线程


多进程模式（每个进程只有一个线程）：

┌──────────┐ ┌──────────┐ ┌──────────┐
│Process   │ │Process   │ │Process   │
│┌────────┐│ │┌────────┐│ │┌────────┐│
││ Thread ││ ││ Thread ││ ││ Thread ││
│└────────┘│ │└────────┘│ │]]></description><category></category></item><item><title><![CDATA[Java（8）二进制IO]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/124619930</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/124619930</guid><author>Yan__Ran</author><pubDate>Wed, 11 May 2022 21:35:25 +0800</pubDate><description><![CDATA[Java提供了很多类用于实现文本IO和二进制IO。二进制文件的优势在于处理效率比文本文件高，因为文本文件需要编码和解码，而二进制文件则不需要。



下面学习二进制IO类。二进制输入类根类为InputStream，二进制输出类根类为OutputStream，它们都是抽象类，后面延伸出了很多子类：


	FileInputStream类和FileOutoutStream类
	
这两个类用于从文件读取字节和向文件写入字节，这两个类相较于父类没有引入新的方法。


几乎所有的IO类中的方法都会抛出异常java..]]></description><category></category></item><item><title><![CDATA[Java（7）泛型]]></title><link>https://blog.youkuaiyun.com/Yan__Ran/article/details/124595359</link><guid>https://blog.youkuaiyun.com/Yan__Ran/article/details/124595359</guid><author>Yan__Ran</author><pubDate>Thu, 05 May 2022 22:35:51 +0800</pubDate><description><![CDATA[目录

1、泛型性质

2、泛型声明

3、通配泛型

4、泛型类型参数的注意点

1、泛型性质

使用泛型能够提高代码的安全性，可以在编译时就发现错误而不是运行时，同时也更具宽容性，不必使用强转。

同时注意，泛型类型必须是引用类型而不能是基本类型。比如说想要给一个int值创建一个ArrayList对象，我们应该使用：


ArrayList&lt;Integer&gt; intList = new ArrayList&lt;&gt;();

//而不是使用ArrayList&lt;int...]]></description><category></category></item></channel></rss>