<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Stillsings的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Listen_heart</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Listen_heart]]></copyright><item><title><![CDATA[设计模式-工厂模式（Java）]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/111563399</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/111563399</guid><author>Listen_heart</author><pubDate>Tue, 22 Dec 2020 18:20:18 +0800</pubDate><description><![CDATA[简单工厂模式


一个抽象接口，多个抽象接口实现类，一个工厂类



/**
简单工厂模式
一个抽象接口，多个抽象接口实现类，一个工厂类
**/
public abstract class Car{
    public abstract void run();
    public abstract void stop(); 
}
public class Ford extends Car{
    public void run(){
        System.out.println("Ford i]]></description><category></category></item><item><title><![CDATA[设计模式-适配器模式（Java）]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/111562917</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/111562917</guid><author>Listen_heart</author><pubDate>Tue, 22 Dec 2020 17:36:09 +0800</pubDate><description><![CDATA[/**
适配器模式
两种完全不同的事物联系到一起
**/
public class Phone{
    public static final int V = 220;
    private VoltageAdapter adapter;
    public void charge(){
        adapter.changeVoltage();
    }
    public void setVoltageAdapter(VoltageAdapter adapter){
        t.]]></description><category></category></item><item><title><![CDATA[设计模式-装饰者模式（Java）]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/111561910</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/111561910</guid><author>Listen_heart</author><pubDate>Tue, 22 Dec 2020 16:58:52 +0800</pubDate><description><![CDATA[/**
装饰者模式是对业务逻辑的再一次封装，开发者在使用时可以自由搭配，就如同Java的IO流一样
*/
public class Food{
    private String name;
    public Food(){

    }
    public Food(String name){
        this.name = name;
    }
    public String make(){
        return food;
    }
}
public class Br.]]></description><category></category></item><item><title><![CDATA[设计模式-观察者模式（Java）]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/111561435</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/111561435</guid><author>Listen_heart</author><pubDate>Tue, 22 Dec 2020 16:44:05 +0800</pubDate><description><![CDATA[/**
观察者模式observer
当一个对象的状态发生改变时，该对象依赖的所有对象都被通知并自动更新
**/
public interface Message{
    public void getMessage(String mode);
}
public class Computer implements Message{
    private String mode = "computer";
    public Computer(){

    }
    @override
    pu.]]></description><category></category></item><item><title><![CDATA[设计模式-Java：为什么说枚举是单例模式最好的实现方式？]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/109993966</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/109993966</guid><author>Listen_heart</author><pubDate>Mon, 23 Nov 2020 14:28:49 +0800</pubDate><description><![CDATA[单例模式

单例模式即指在一个应用程序中，一个类的实例化对象只存在一个（如Spring默认为单例模式），没有办法通过new去创建对象（构造方法private修饰），只能通过getInstance来获得对象。

简单Demo实现


public class Singleton {
    private static Singleton singleton;

    public Singleton() {
    }

    private static Singleton getInstance()]]></description><category></category></item><item><title><![CDATA[建立二叉排序（搜索）树]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/108392581</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/108392581</guid><author>Listen_heart</author><pubDate>Thu, 03 Sep 2020 20:29:52 +0800</pubDate><description><![CDATA[建立二叉排序（搜索）树
描述
输入一组数，对输入的数建立二叉树排序（搜索），并前中后序遍历二叉树。

28, 40, 20, 54, 66, 79


对待排序的数据进行排序
定义二叉树结构体，递归建立二叉树
递归前中后序遍历

定义二叉树节点结构体
struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL){} 
};]]></description><category></category></item><item><title><![CDATA[虚拟内存]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/108371756</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/108371756</guid><author>Listen_heart</author><pubDate>Wed, 02 Sep 2020 22:24:07 +0800</pubDate><description><![CDATA[虚拟内存
定义
程序不需要全部装入内存，运行时根据需求动态调入所需的数据，若内存不够，还需要置换一些数据。
实现

请求调页功能：访问的数据不在内存时，由操作系统负责将所需的信息从外存调入内存
页面置换功能：内存空间不够时，将内存中暂时用不到的数据换到外存中


...]]></description><category></category></item><item><title><![CDATA[进程是什么？线程是什么？进程与线程的区别？进程、线程通信方式，进程同步与互斥]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/108220844</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/108220844</guid><author>Listen_heart</author><pubDate>Tue, 25 Aug 2020 16:37:25 +0800</pubDate><description><![CDATA[文章目录一、进程是什么？二、线程是什么？三、线程与进程的比较四、进程、线程通信方式五、同步与互斥1、同步2、互斥3、实现

一、进程是什么？
从不同的角度，进程有不同的定义。
一种角度定义为，进程是程序的一次执行过程。这个定义可能很抽象，进一步解释，比如建造一栋房屋，需要制定计划，第一步干什么，第二步干什么，有很多步骤和实现方式。而这个实现过程便称为进程（process）。我们称之为P进程，是指想清楚做一件事的过程，而这件事其做没做并不重要。
从另一种角度，也是我们更加所熟知的一种角度。进程是指程序在操作系]]></description><category></category></item><item><title><![CDATA[八大内部排序]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/108208203</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/108208203</guid><author>Listen_heart</author><pubDate>Mon, 24 Aug 2020 21:43:59 +0800</pubDate><description><![CDATA[八大排序

前言

排序，就是重新排列表中的元素，使得表中元素满足按关键字有序的过程。

排序有许多种，常用的八大内部排序为冒泡排序、插入排序、选择排序、希尔排序、快速排序、归并排序、基数排序、堆排序

这几种排序没有绝对的优劣，每种排序都有他们适用范围



一、冒泡排序

冒泡排序每一趟排序可以确定一个元素的最终位置，若一次扫描并没有元素进行交换，则说明表已有序。


void bubbleSort(ElemType a[], int n){
	for(int i = 0; i &lt; n - 1;.]]></description><category></category></item><item><title><![CDATA[java网络编程-Netty]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104505747</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104505747</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:58:38 +0800</pubDate><description><![CDATA[Netty

一个非阻塞的客户端-服务端网络通讯框架
基于异步事件驱动模型
简化Java的TCP和UDP编程

关键技术（责任链）

通道Channel

ServerSocketChannel / NioServerChannel
SocketChannel / NioSocketChannel


事件 EventLoop

为每个通道定义一个EventLoop，处理所有的I/O事件
Even...]]></description><category></category></item><item><title><![CDATA[java网络编程-BIO、NIO、AIO总结]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104476397</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104476397</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:58:19 +0800</pubDate><description><![CDATA[总结


]]></description><category></category></item><item><title><![CDATA[java网络编程-AIO编程]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104474396</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104474396</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:58:07 +0800</pubDate><description><![CDATA[AIO编程
NIO减少了线程多的压力（目前一台计算机最多几百个线程），但不是真异步。
网络通讯的同步：是指客户端和服务器端直接的通讯等待方式。这里的同步的反义词是异步，即无需等待另外一段操作完成。
AIO（Asynchronous I/O，异步I/O)
采用回调方法进行处理读写操作

AsynchronousServerSocketChannel 服务器接收请求通道

bind 绑定到某个端口 a...]]></description><category></category></item><item><title><![CDATA[java网络编程-NIO编程]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104456323</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104456323</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:57:57 +0800</pubDate><description><![CDATA[NIO编程
传统的TCP和UDP通讯：Blocking I/O（阻塞，需要等待慢的一方，效率不高）
Non-Blocking I/O

提供非阻塞通讯等方式
避免同步I/O通讯效率过低
一个线程可以管理多个连接
减少线程多的压力

三个重要的类

Buffer缓存区
Channel通道
Selector多路选择器

Buffer缓存区，一个可以读写的内存区域

ByteBuffer, CharBu...]]></description><category></category></item><item><title><![CDATA[java网络编程-HTTP编程]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104448012</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104448012</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:57:36 +0800</pubDate><description><![CDATA[HTTP编程
Java HTTP编程

支持模拟成浏览器的方式去访问网页
URL, Uniform Resource Locator，代表一个资源
URLConnection

获取资源连接器
根据URL的openConnection（）方法获得URLConnection
connect方法，建立和资源的联系通道
getInputStream方法，获取资源的内容



示例代码：
Get获取网页h...]]></description><category></category></item><item><title><![CDATA[java网络编程-TCP]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104432249</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104432249</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:57:22 +0800</pubDate><description><![CDATA[TCP编程
TCP协议：有链接、保证可靠的无误差通讯

服务器：创建一个ServerSocket，等待连接
客户机：创建一个Socket，连接到服务器
服务器：ServerSocket接收到连接，创建一个Socket和客户的Socket建立专线连接，后续服务器和客户机的对话（这一对Socket）会在一个单独的线程（服务器端）上运行
服务器的ServerSocket继续等待连接，返回 1


Ser...]]></description><category></category></item><item><title><![CDATA[java网络编程-UDP]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104431668</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104431668</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:57:09 +0800</pubDate><description><![CDATA[UDP编程
DatagramSocket：通讯的数据管道

send 和 receive 方法
（可选，多网卡）绑定一个IP和Prot

DatagramPacket

集装箱：封装数据
地址标签：目的地IP+Port

UpdRev源代码：
package com.lihuan.network.demo01;

import java.io.IOException;
import java.ne...]]></description><category></category></item><item><title><![CDATA[多线程管理]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104429659</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104429659</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:56:56 +0800</pubDate><description><![CDATA[细粒度
线程之间有同步协作

等待
通知/唤醒
终止

线程状态

NEW 刚创建（new）
RUNNABLE 就绪态（start）
RUNNING 运行中（run）
BLOCK 阻塞（sleep）
TERMINATED 结束（terminated）

Thread的部分API已经废弃

暂停和恢复suspend/resume
消亡stop/destroy

线程阻塞/和唤醒

sleep，时间一...]]></description><category></category></item><item><title><![CDATA[java多线程与多进程简单示例]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104418427</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104418427</guid><author>Listen_heart</author><pubDate>Sun, 05 Jul 2020 21:54:17 +0800</pubDate><description><![CDATA[多进程

package com.lihuan.thread.demo01;

public class ProcessDemo1 {
    public static void main(String[] args) {
        while (true){
            int a = (int) (Math.random() * 100);
            Sys...]]></description><category></category></item><item><title><![CDATA[Oracle存储设置与管理]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104760055</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104760055</guid><author>Listen_heart</author><pubDate>Mon, 09 Mar 2020 20:27:58 +0800</pubDate><description><![CDATA[Oracle 数据库重做日志文件的作用和工作方法
作用：重做日志文件是用于存储数据库的事务日志文件。以便系统在出现系统故障和介质故障时能够进行故障恢复。在数据库中，任何修改数据库的操作都会产生重做日志，当系统出现故障时，通过分析日志可以知道在故障发生前系统做了哪些动作，并可以重做这些动作使系统恢复到故障之前的状态。（重做日志文件是以重做记录的形式记录、保存用户对数据库所进行的修改操作，包括用户执行...]]></description><category></category></item><item><title><![CDATA[Oracle数据库系统结构]]></title><link>https://blog.youkuaiyun.com/Listen_heart/article/details/104759691</link><guid>https://blog.youkuaiyun.com/Listen_heart/article/details/104759691</guid><author>Listen_heart</author><pubDate>Mon, 09 Mar 2020 20:01:34 +0800</pubDate><description><![CDATA[Oracle 数据库体系结构的组成及其关系
Oracle数据库由数据库存储结构和数据库实例两部分构成。
其中存储结构包括物理存储结构和逻辑存储结构，是数据存储及空间分配的基础；
实例是构成Oracle数据库的软件结构，包括内存结构和后台系统，是数据库运行与管理的基础。
Oracle 数据库数据文件的作用
数据文件：是数据库中所有数据的实际存储空间，所有数据文件的大小和构成了数据库的大小。
Orac...]]></description><category></category></item></channel></rss>