<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Sampson_S的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Sampson_S</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Sampson_S]]></copyright><item><title><![CDATA[【Linux】网络相关命令]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/113374922</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/113374922</guid><author>Sampson_S</author><pubDate>Fri, 29 Jan 2021 11:48:44 +0800</pubDate><description><![CDATA[网络相关命令
ping
ping 命令是用来测试TCP/IP 网络是否畅通或者测试网络连接速度的命令，对确定网络是否正确连接，以及网络连接的状况十分有用。简单的说，ping就是一个测试程序，如果ping运行正确，大体上就可以排除网络访问层、网卡、Modem的输入输出线路、电缆和路由器等存在的故障，从而缩小问题的范围。
ping命令的原理是根据计算机唯一标示的IP 地址，当用户给目的地址发送一个数据包时，对方就会返回一个同样大小的数据包，根据返回的数据包用户可以确定目的主机的存在，并初步判断目的主机的操作系统]]></description><category></category></item><item><title><![CDATA[【Linux】内存与磁盘]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/113364073</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/113364073</guid><author>Sampson_S</author><pubDate>Fri, 29 Jan 2021 11:07:42 +0800</pubDate><description><![CDATA[内存与磁盘
内存和磁盘都是计算机中的存储器，都具有存储功能，属于存储设备。在计算机中，磁盘和内存是相互配合共同作业的。
区别：

1、内存是一种高速，造价昂贵的存储设备；而磁盘速度较慢、造价低廉。
2、内存属于内部存储设备，磁盘属于外部存储设备。
3、内存是通过电流来实现存储；磁盘是通过磁记录来实现存储。所以电脑断电后，内存中的数据会丢失，而磁盘中的数据可以长久保留。

内存
内存是程序与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的。其作用是存放CPU中的运算数据，以及与硬盘等外部存储设备]]></description><category></category></item><item><title><![CDATA[【Linux】计算机组成与进程命令]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/113331174</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/113331174</guid><author>Sampson_S</author><pubDate>Thu, 28 Jan 2021 16:16:35 +0800</pubDate><description><![CDATA[计算机组成与进程命令
计算机组成五大部件

1、运算器 ：也叫算数逻辑单元，完成对数据的各种常规运算，如加减乘除，也包括逻辑运 算，移位，比较等。
2、控制器 ：它是整个计算机系统的控制中心，它指挥计算机各部分协调地工作，保证计算 机按照预先规定的目标和步骤有条不紊地进行操作及处理。
3、存储器 ：存储程序和各种数据。
4、输入设备 ：把人所熟悉的信息如，图片，声音，文字，转换为计算机能够识别的信息存储起来。
5、输出设备 : 把计算机机能识别的信息转换为人能识别的信息，进行呈现。 一台计算机可以抽象成下图]]></description><category></category></item><item><title><![CDATA[【Linux】Linux 用户和用户组管理]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/113307358</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/113307358</guid><author>Sampson_S</author><pubDate>Thu, 28 Jan 2021 11:39:55 +0800</pubDate><description><![CDATA[Linux 用户和用户组管理
Linux系统是一个多用户多任务的分时操作系统，任何一个要使用系统资源的用户，都必须首先向系统管理员申请一个账号，然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪，并控制他们对系统资源的访问；另一方面也可以帮助用户组织文件，并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后，就能够进入系统和自己的主目录。
实现用户账号的管理，要完成的工作主要有如下几个方面：

用户账号的添加]]></description><category></category></item><item><title><![CDATA[【Java网络编程】Netty 网络框架]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109366278</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109366278</guid><author>Sampson_S</author><pubDate>Thu, 29 Oct 2020 20:21:58 +0800</pubDate><description><![CDATA[Netty 网络框架
Netty 是一个利用 Java 的高级网络的能力，隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Netty 提供高性能和可扩展性，让你可以自由地专注于你真正感兴趣的东西，你的独特的应用！
Netty 是一个高性能、异步事件驱动网络库，它提供了对 TCP、UDP 和文件传输的支持使（这里首先就要搞清楚异步的 NIO 框架是什么意思）用更高效的 socket 底层，对 selector 空轮询引起的 cpu 占用飙升在内部进行了处理，避免了直接使用 NIO 的陷阱]]></description><category></category></item><item><title><![CDATA[【Java网络编程】常用的网络模型代码实例]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109365676</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109365676</guid><author>Sampson_S</author><pubDate>Thu, 29 Oct 2020 18:32:58 +0800</pubDate><description><![CDATA[常用的网络模型代码实例

【Java网络编程】常用的网络模型

1.1 BIO模型代码演示
1.1.1 服务端代码演示
//TCP协议代码
public class BIOServer {
    private ServerSocket socket;//开发TCP的工具包
    private final int port = 5676;

    public BIOServer() {
        try {
            //将服务器绑定到特定端口上
            soc]]></description><category></category></item><item><title><![CDATA[【Java网络编程】常用的网络模型]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109363077</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109363077</guid><author>Sampson_S</author><pubDate>Thu, 29 Oct 2020 17:21:36 +0800</pubDate><description><![CDATA[常用的网络模型
1.1 BIO 模型
网络编程的基本模型是 C/S 模型，即两个进程间的通信。服务端提供 IP 和监听端口，客户端通过连接操作想服务端监听的地址发起连接请求，通过三次握手连接，如果连接成功建立，双方就可以通过套接字进行通信。传统的同步阻塞模型开发中，ServerSocket 负责绑定 IP 地址，启动监听端口；Socket 负责发起连接操作。连接成功后，双方通过输入和输出流进行同步阻塞式通信。 简单的描述一下 BIO 的服务端通信模型：采用 BIO 通信模型的服务端，通常由一个独立的 Acc]]></description><category></category></item><item><title><![CDATA[【Java网络编程】 五种 IO 模型]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109343314</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109343314</guid><author>Sampson_S</author><pubDate>Wed, 28 Oct 2020 21:14:50 +0800</pubDate><description><![CDATA[五种 IO 模型
我们在研究几种常见模型之前先要搞清楚如下几个概念：
阻塞：
当某个事件或者任务在执行过程中，它发出一个请求操作，但是由于该请求操作需要的条件不满足，那么就会一直在那等待，直至条件满足。
非阻塞：
当某个事件或者任务在执行过程中，它发出一个请求操作，如果该请求操作需要的条件不满足，会立即返回一个标志信息告知条件不满足，不会一直在那等待。
同步：
如果有多个任务或者事件要发生（主要指 IO 事件），这些任务或者事件必须逐个地进行并且必须应用程序参与，一个事件或者任务的执行会导致整个流程的暂时等]]></description><category></category></item><item><title><![CDATA[【Java网络编程】IP协议详解]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109332924</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109332924</guid><author>Sampson_S</author><pubDate>Wed, 28 Oct 2020 18:15:36 +0800</pubDate><description><![CDATA[IP协议详解
了解IP地址之前，我们需要了解MAC地址，也就是物理地址，每一台机器都以偶唯一的MAC地址，MAC地址由厂商分配。
MAC地址由厂商分配，那么我们无法通过MAC地址来获取该主机的网络地址，所以网络层就有了IP协议，制定了一套新地址，使得我们能够区分两台主机是否同属一个网络，这套地址就是网络地址，也就是所谓的IP地址。
IP地址目前有两个版本，分别是IPv4和IPv6，IPv4是一个32位的地址，常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分，前面部分代表网络地址，后面部分表示该]]></description><category></category></item><item><title><![CDATA[【Java网络编程】TCP协议详解]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109331492</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109331492</guid><author>Sampson_S</author><pubDate>Wed, 28 Oct 2020 14:52:23 +0800</pubDate><description><![CDATA[TCP协议详解
在前面计算机网络概述中，我们知道了TCP是面向连接的，可靠的，数据传输服务的网络传输协议。而在TCP 协议特点中有几个关键的点，即：

a、TCP 通信是需要建立连接的。
b、数据的发送时全双工的。
c、TCP 通信是可靠的。

在进行Java网络编程时，我们经常通过TCP协议进行传输，把数据封装成报文传输，而报文的传输使格式化传输而TCP首部就决定了每一个消息的格式和类型。
TCP 首部格式

各个字段的作用与含义：

a、源端口号和目的端口号。


各占两个字节，我们知道端口号就是标识特]]></description><category></category></item><item><title><![CDATA[【Java网络编程】计算机网络概述]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/106403801</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/106403801</guid><author>Sampson_S</author><pubDate>Wed, 28 Oct 2020 14:01:07 +0800</pubDate><description><![CDATA[计算机网络概述
网络概述
什么是网络
计算机网络由若干结点和连接这些结点的链路组成，计算机网络中的结点可以是计算机、集线器、交换机和路由器等。
网络有什么作用
信息的传递。当然我们要知道的是仅仅有网络是无法进行信息传递的，我们还需要在计算机上安装相应的软件才可以。
什么叫做互联网
如果把网络再通过路由器连接在一起就形成了互联网。世界上最大的互联网就是因特网。
信息在网络中的传输流程
由于网络是比较抽象的，所以我们在研究信息通过网络的传输过程时通常根据信息传递过程中的不同特点将网络分为若干层，分层去研究将抽象]]></description><category></category></item><item><title><![CDATA[【Java多线程】线程池]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109194646</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109194646</guid><author>Sampson_S</author><pubDate>Wed, 21 Oct 2020 15:10:02 +0800</pubDate><description><![CDATA[线程池
线程池是在JDK 1.5之后出现的概念，它为我们提供了一个Executor接口用于创建线程池。
在JDK 1.5之前，如果我们在并发编程的过程中需要实现多个线程的话，采用的是多线程计数的方式，而之所以出现了线程池的概念，原因就是因为多线程计数在部分条件下无法满足程序的要求。
多线程计数能够最大限度发挥多核处理器的计算能力，但是对于多线程来说，并不是线程数量越多，程序运行的效率越高，那么如果随意的去创建线程的话，反而会对系统性能带来不利的影响，原因就是因为线程的数量与系统性能不是一个正比的关系，而是一]]></description><category></category></item><item><title><![CDATA[【Java多线程】阻塞队列]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109168670</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109168670</guid><author>Sampson_S</author><pubDate>Mon, 19 Oct 2020 22:27:20 +0800</pubDate><description><![CDATA[阻塞队列
阻塞队列（BlockingQueue）是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法，即针对一个有界队列，当前队列满时，添加元素的操作会被阻塞；当前队列空时，从队列中获取元素的操作也会被阻塞。

1、支持阻塞的插入方法：意思是当队列满时，队列会阻塞插入元素的线程，直到队列不满。
2、支持阻塞的移除方法：意思是在队列为空时，获取元素的线程会等待队列变为非空。

阻塞队列常用于生产者和消费者的场景，生产者是向队列里添加元素的线程，消费者是从队列里取元素的线程。阻塞队列就是生产者]]></description><category></category></item><item><title><![CDATA[【Java多线程】线程安全的集合]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109149575</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109149575</guid><author>Sampson_S</author><pubDate>Sun, 18 Oct 2020 21:56:28 +0800</pubDate><description><![CDATA[线程安全的集合
Vector
Vector集合是对ArrayList集合线程安全的实现，它们两者在方法的实现上没有什么太大的区别，最大的区别就是，Vector在方法前面加上了synchronized关键字，用于保证线程安全。

【Java集合框架库】Vector类和Stack类

Vector存在的问题：

1、它的add()和get()方法都能够获取当前Vector对象的对象锁，但是有可能会发生读读互斥。
2、当threadA在1下标处添加一个元素，threadB在2下标处修改一个元素时，同样有可能会发生]]></description><category></category></item><item><title><![CDATA[【Java多线程】ReentrantLock]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109145545</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109145545</guid><author>Sampson_S</author><pubDate>Sun, 18 Oct 2020 17:47:14 +0800</pubDate><description><![CDATA[ReentrantLock
在实现线程同步时，大多情况下使用的是Synchronized关键字实现，但是Synchronized的锁太过封闭，获得锁和释放锁都是系统自动的。所以为了更灵活的操作，在JDK1.5版本之后，就诞生了Lock接口以及其实现类。
lock接口也是对资源上锁的一种工具，它不同于Synchronized的隐式上锁与解锁，lock接口中的获取锁和释放锁，是需要手动去操作的。
Synchronized关键字的同步代码出现以下三种情况才会释放锁：

1、同步代码块执行完成，自动释放锁。
2、同]]></description><category></category></item><item><title><![CDATA[【Java多线程】线程通信]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109142281</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109142281</guid><author>Sampson_S</author><pubDate>Sun, 18 Oct 2020 17:46:56 +0800</pubDate><description><![CDATA[线程通信
在客户端与服务端的通信过程中，一般情况下有两种通信模型，它们分别是同步阻塞模型和异步非阻塞模型。

对于同步阻塞模型，当请求的事件出于某种原因没有返回结果时，此时线程将一直处于阻塞状态而不进行其他操作，例如我们去商场买电脑，我们需要等待卖家对我们的电脑做一系列的售后工作，此时我们并不能去做其他事情，只能等待卖家完成这些工作，这种模式就是同步阻塞模型。
而对于异步非阻塞模型，当客户端请求事件时，服务器会先返回其事件所工作的线程工号，此时客户端可以继续进行其他操作，等待该事件处理完成，并通过工号查询所]]></description><category></category></item><item><title><![CDATA[【Java多线程】死锁]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109102721</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109102721</guid><author>Sampson_S</author><pubDate>Fri, 16 Oct 2020 20:32:59 +0800</pubDate><description><![CDATA[死锁
多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而，并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局（互相等待），若无外力作用，这些进程都将无法向前推进。
所谓死锁是指两个或两个以上的线程在执行过程中，因争夺资源而造成的一种互相等待的现象，若无外力作用，它们都将无法推进下去。

死锁中的经典例题：哲学家就餐问题
相关链接：Java多线程：死锁

造成死锁的必要条件

互斥条件：某个资源在某一时间段内只能由一个线程占用。
不可抢占条件：线程所得到的资源在]]></description><category></category></item><item><title><![CDATA[【Java多线程】悲观锁和乐观锁]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109100145</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109100145</guid><author>Sampson_S</author><pubDate>Thu, 15 Oct 2020 17:35:58 +0800</pubDate><description><![CDATA[悲观锁
悲观锁：总是假设最坏的情况，每一次去拿数据都默认别人会修改，所以每次拿数据都会上锁，这样就会导致有其他人想要拿数据就会阻塞直到获取到这把锁。

synchronized关键字的实现是悲观锁。

悲观锁机制存在的问题：

1、多线程竞争下，加锁、解锁都会导致比较多的上下文切换和调度延时，引起性能问题。
2、一个线程池有锁会导致其他需要此锁的线程阻塞。
3、数据量大时，独占锁回导致效率低下。
4、如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级导致，引起性能问题。

乐观锁
乐观锁：每次那]]></description><category></category></item><item><title><![CDATA[【Java多线程】线程同步]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109073378</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109073378</guid><author>Sampson_S</author><pubDate>Wed, 14 Oct 2020 20:29:24 +0800</pubDate><description><![CDATA[线程同步
首先，我们先来看一个Java多线程的实例，模拟银行叫号系统，代码如下：
//模拟银行叫号系统
class Number extends Thread {
    private static int index = 1;//号码
    //由于static变量的生命周期很长，同时共享资源或许会很多
    //所以使用static修饰的共享资源对系统资源造成浪费
    private String name; //柜台名称
    private static final int MAX = ]]></description><category></category></item><item><title><![CDATA[【JavaSE高级】Java8新特性 - Lambda表达式]]></title><link>https://blog.youkuaiyun.com/Sampson_S/article/details/109057798</link><guid>https://blog.youkuaiyun.com/Sampson_S/article/details/109057798</guid><author>Sampson_S</author><pubDate>Tue, 13 Oct 2020 19:57:30 +0800</pubDate><description><![CDATA[Java8新特性 - Lambda表达式
Java是面向对象语言，除了原始数据类型之处，Java 中的所有内容都是一个对象。而在函数式语言中，我们只需要给函数分配变量，并将这个函数作为参数传递给其它函数就可实现特定的功能。JavaScript 就是功能编程语言的典范（闭包）。
Lambda 表达式的加入，使得 Java 拥有了函数式编程的能力。在其它语言中，Lambda 表达式的类型是一个函数；但在 Java 中，Lambda 表达式被表示为对象，因此它们必须绑定到被称为功能接口的特定对象类型。
Lambd]]></description><category></category></item></channel></rss>