<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Henry_Lin_Wind的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Henry_Lin_Wind</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Henry_Lin_Wind]]></copyright><item><title><![CDATA[the desired address is beyond limit for this PLC]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/124772955</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/124772955</guid><author>Henry_Lin_Wind</author><pubDate>Sat, 14 May 2022 20:08:16 +0800</pubDate><description><![CDATA[问题描述：

通过 Java连接西门子PLC（S7-1200）学习中，出现错误：the desired address is beyond limit for this PLC



下面是测试代码


        S7Connector connector = S7ConnectorFactory
                .buildTCPConnector()
                .withHost("192.168.0.195")
                .withPo]]></description><category></category></item><item><title><![CDATA[nginx 日志解析]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106944287</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106944287</guid><author>Henry_Lin_Wind</author><pubDate>Wed, 24 Jun 2020 15:39:00 +0800</pubDate><description><![CDATA[设置nginx日志格式

默认变量格式：log_format combined '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

$remote_addr变量：记录了客户端的IP地址（普通情况下）。

$remote_user变量：当nginx开启了用户认证功能后，此变量记录了客户端使用了哪个用户进行了认证。

$time_l]]></description><category></category></item><item><title><![CDATA[如何上传大文件（4GB）到虚拟机]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106489939</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106489939</guid><author>Henry_Lin_Wind</author><pubDate>Tue, 02 Jun 2020 10:21:43 +0800</pubDate><description><![CDATA[使用xhell上传大文件会报文件过大的异常。





1.百度搜索Everything，进入官网下载。这个程序体量非常小，可以放心下载。

2、下载完成后打开，点击工具一栏，选择“选项”（或者使用快捷键ctrl + p）



3、打开选项后，在左边选择HTTP服务器一栏，勾选启用，填写用户名和密码，然后点击确认。



4、查询你的电脑的ipv4地址 (win+R打开运行，键入cmd打开命令窗口，键入ipconfig查看自己的以太网IPv4地址)

5、打开电脑的浏览器，比如火狐浏览器。输入刚查到的..]]></description><category></category></item><item><title><![CDATA[分布式锁 redis]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106217380</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106217380</guid><author>Henry_Lin_Wind</author><pubDate>Tue, 19 May 2020 17:07:29 +0800</pubDate><description><![CDATA[import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.config.Config;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class Test {

    private static CountDownLatch finish = new CountD..]]></description><category></category></item><item><title><![CDATA[MYSQL 幻读]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106079401</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106079401</guid><author>Henry_Lin_Wind</author><pubDate>Tue, 12 May 2020 17:13:19 +0800</pubDate><description><![CDATA[更新数据都是先读后写的，而这个读，只能读当前的值，称 为“当前读（current read）








1. 在可重复读隔离级别下，普通的查询是快照读，是不会看到别的事务插入的数据的。因此， 

幻读在“当前读”下才会出现。 

2. 上面 session B 的修改结果，被 session A 之后的 select 语句用“当前读”看到，不能称 

为幻读。幻读仅专指“新插入的行”。





...]]></description><category></category></item><item><title><![CDATA[MySQL 自增值保存]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106077489</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/106077489</guid><author>Henry_Lin_Wind</author><pubDate>Tue, 12 May 2020 15:35:32 +0800</pubDate><description><![CDATA[不同的引擎对于自增值的保存策略不同。 



MyISAM 引擎的自增值保存在数据文件中。 
	InnoDB 引擎的自增值，其实是保存在了内存里，并且到了 MySQL 8.0 版本后，才有 了“自增值持久化”的能力，也就是才实现了“如果发生重启，表的自增值可以恢复为 MySQL 重启前的值”，具体情况是： 在 MySQL 5.7 及之前的版本，自增值保存在内存里，并没有持久化。每次重启后， 第一次打开表的时候，都会去找自增值的最大值 max(id)，然后将 max(id)+1 作为这 个表当前的自增值。举.]]></description><category></category></item><item><title><![CDATA[冒泡排序]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/105551922</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/105551922</guid><author>Henry_Lin_Wind</author><pubDate>Thu, 16 Apr 2020 10:57:21 +0800</pubDate><description><![CDATA[冒泡排序是一种基础的交换排序算法，简单的冒泡排序代码比较简单


public static void sort(int[] arr){
        int changeNum = 0;   //轮询次数
        int compareNum = 0;  //比较元素次数
        int swapNum = 0;     //交换元素次数
        for(int i =...]]></description><category></category></item><item><title><![CDATA[二叉树的遍历 （递归/栈）]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/105493202</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/105493202</guid><author>Henry_Lin_Wind</author><pubDate>Tue, 14 Apr 2020 11:02:20 +0800</pubDate><description><![CDATA[二叉树的遍历可分为两种：深度遍历和广度遍历

深度遍历又分为三种：前序、中序、后序遍历，这三种遍历方式可以用递归或栈来实现



1、递归


以如下的二叉树为例，遍历该二叉树。
     

 a.建立节点类


public class TreeNode {
    int data;
    TreeNode leftChild;
    TreeNode rightChild;

  ...]]></description><category></category></item><item><title><![CDATA[为什么不建议用Executors？]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104968827</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104968827</guid><author>Henry_Lin_Wind</author><pubDate>Thu, 19 Mar 2020 15:40:30 +0800</pubDate><description><![CDATA[为什么不建议用Executors？

Java为什么要创建Executors类？ 考虑到ThreadPoolExecutor的构造函数实在是有些复杂，所以Java并发包里提供了一个线程池的静态工厂类Executors，利用Executors你可以快速创建线程池。

不建议使用Executors的最重要的原因是：Executors提供的很多方法默认使用的都是无界的LinkedBlockingQueu...]]></description><category></category></item><item><title><![CDATA[深入理解乐观锁与悲观锁]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104941088</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104941088</guid><author>Henry_Lin_Wind</author><pubDate>Wed, 18 Mar 2020 11:39:35 +0800</pubDate><description><![CDATA[在数据库的锁机制中介绍过，数据库管理系统（DBMS）中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

乐观并发控制(乐观锁)和悲观并发控制（悲观锁）是并发控制主要采用的技术手段。

无论是悲观锁还是乐观锁，都是人们定义出来的概念，可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念，像memcache、hibernat...]]></description><category></category></item><item><title><![CDATA[从同步容器到并发容器]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104940250</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104940250</guid><author>Henry_Lin_Wind</author><pubDate>Wed, 18 Mar 2020 11:11:25 +0800</pubDate><description><![CDATA[引言

容器是Java基础类库中使用频率最高的一部分，Java集合包中提供了大量的容器类来帮组我们简化开发，我前面的文章中对Java集合包中的关键容器进行过一个系列的分析，但这些集合类都是非线程安全的，即在多线程的环境下，都需要其他额外的手段来保证数据的正确性，最简单的就是通过synchronized关键字将所有使用到非线程安全的容器代码全部同步执行。这种方式虽然可以达到线程安全的目的，但存在几个...]]></description><category></category></item><item><title><![CDATA[Redis 存储Java 对象 （序列化和反序列化）]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104058659</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/104058659</guid><author>Henry_Lin_Wind</author><pubDate>Tue, 21 Jan 2020 09:43:42 +0800</pubDate><description><![CDATA[Redis的string 类型是二进制安全的，可以储存序列化的对象。因此可以通过序列化储存java对象，再通过反序列化得到对象。

新建一个maven项目，添加相关的Jar包依赖。


&lt;dependencies&gt;
        &lt;!-- https://mvnrepository.com/artifact/redis.clients/jedis --&gt;
       ...]]></description><category></category></item><item><title><![CDATA[如何让 10 个线程按照顺序打印 0123456789]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103952428</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103952428</guid><author>Henry_Lin_Wind</author><pubDate>Mon, 13 Jan 2020 09:16:36 +0800</pubDate><description><![CDATA[如何让 10 个线程按照顺序打印 0123456789？


	设定一个 orderNum，每个线程执行结束之后，更新 orderNum，指明下一个要执行的线程。并且唤醒所有的等待线程。
	
	
	在每一个线程的开始，要 while 判断 orderNum 是否等于自己的要求值！！不是，则 wait，是则执行本线程。
	
                  w...]]></description><category></category></item><item><title><![CDATA[ForkJoin 并发]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103852423</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103852423</guid><author>Henry_Lin_Wind</author><pubDate>Mon, 06 Jan 2020 14:31:07 +0800</pubDate><description><![CDATA[分治，顾名思义，即分而治之，是一种解决复杂问题的思维方法和模式；具体来讲，指的是把一个复杂的问题分解成多个相似的子问题，然后再把子问题分 解成更小的子问题，直到子问题简单到可以直接求解。




Java并发包里提供了一种叫做Fork/Join的并行计算框架，就是用来支持分治这种任务模型的。




如何用Fork/Join 并行计算框架计算斐波那契数列

 f(n)=f(n-1)+f(n-...]]></description><category></category></item><item><title><![CDATA[并行多线程任务的创建]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103799322</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103799322</guid><author>Henry_Lin_Wind</author><pubDate>Thu, 02 Jan 2020 09:52:13 +0800</pubDate><description><![CDATA[对于简单的并行任务，你可以通过“线程池+Future”的方案来 解决；如果任务之间有聚合关系，无论是AND聚合还是OR聚合，都可以通过CompletableFuture来解决；而 批量的并行任务，则可以通过CompletionService来解决



线程池+Future





 // 线程池
private static ExecutorService myExecutor = Exe...]]></description><category></category></item><item><title><![CDATA[线程和线程池的创建及使用]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103768194</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103768194</guid><author>Henry_Lin_Wind</author><pubDate>Mon, 30 Dec 2019 16:39:33 +0800</pubDate><description><![CDATA[三种创建线程的方法

一、通过继承 Thread 类本身


public class MyThread extends Thread {
    @Override
    public void run(){
        super.run();
        System.out.println("执行子线程...");
    }
}



public class Test {...]]></description><category></category></item><item><title><![CDATA[count(*) MySQL 统计表的行数]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103455651</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103455651</guid><author>Henry_Lin_Wind</author><pubDate>Mon, 09 Dec 2019 14:56:24 +0800</pubDate><description><![CDATA[在不同的 MySQL 引擎中，count(*) 有不同的实现方式。


1、MyISAM 引擎把一个表的总行数存在了磁盘上，因此执行 count(*) 的时候会直接返回这个 

数，效率很高；

2、InnoDB 引擎执行 count(*) 的时候，需要把数据一行一行地从引擎里面读出来，然后累积计数。

以上前提是没条件过滤的情况下，如果有条件筛选，两种引擎的效率都不高。



以InnoDB...]]></description><category></category></item><item><title><![CDATA[死锁检查和查看]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103408654</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103408654</guid><author>Henry_Lin_Wind</author><pubDate>Thu, 05 Dec 2019 17:16:58 +0800</pubDate><description><![CDATA[只有以下这四个条件都发生时才会出现死锁： 

1. 互斥，共享资源 X 和 Y 只能被一个线程占用； 

2. 占有且等待，线程 T1 已经取得共享资源 X，在等待共享资源 Y 的时候，不释放共享资源 X； 

3. 不可抢占，其他线程不能强行抢占线程 T1 占有的资源；


4. 循环等待，线程 T1 等待线程 T2 占有的资源，线程 T2 等待线程 T1 占有的资源，就是循环等 

待。 

...]]></description><category></category></item><item><title><![CDATA[Mysql查看慢日志]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103119051</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/103119051</guid><author>Henry_Lin_Wind</author><pubDate>Mon, 18 Nov 2019 11:15:52 +0800</pubDate><description><![CDATA[1、开启慢日志查询

set global slow_query_log='ON';


[SQL]set global slow_query_log='ON';
受影响的行: 0
时间: 0.000s

2、查看慢日志是否开启ON为开启,OFF为关闭

show variables like 'slow_query%';



结果：慢日志已经开启以及日志文件所在位置

3、设置慢日志时间


...]]></description><category></category></item><item><title><![CDATA[select for update  和  lock in share mode 异同点及其影响]]></title><link>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/99968527</link><guid>https://blog.youkuaiyun.com/Henry_Lin_Wind/article/details/99968527</guid><author>Henry_Lin_Wind</author><pubDate>Wed, 21 Aug 2019 15:46:06 +0800</pubDate><description><![CDATA[可能用到的情景和对性能的影响

使用情景：


1. select *** for update 的使用场景

为了让自己查到的数据确保是最新数据，并且查到后的数据只允许自己来修改的时候，需要用到 for update 子句。

对主键索引加锁

2. select *** lock in share mode 使用场景

为了确保自己查到的数据没有被其他的事务正在修改，也就是说确保查到的数据是最...]]></description><category></category></item></channel></rss>