<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小小小跟班的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/windforce828</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; windforce828]]></copyright><item><title><![CDATA[Java 多线程]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106571791</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106571791</guid><author>windforce828</author><pubDate>Fri, 05 Jun 2020 15:34:34 +0800</pubDate><description><![CDATA[线程的概念，百度是这样解释的：线程（英语：Thread）是操作系统能够进行运算调度的最小单位。它被包含在进程之中，是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流，一个进程中可以并发多个线程，每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程（Lightweight Processes），但轻量进程更多指内核线程（Kernel Thread），而把用户线程（User Thread）称为线程。

1.1 线程与进程的区别

进程：指在系统中正在运行的一个应用]]></description><category></category></item><item><title><![CDATA[Spring@Transactional 注解的失效场景]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106551251</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106551251</guid><author>windforce828</author><pubDate>Thu, 04 Jun 2020 16:58:55 +0800</pubDate><description><![CDATA[@Transactional 注解相信大家并不陌生，平时开发中很常用的一个注解，它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节，不然你会发现@Transactional总是莫名其妙的就失效了。

一、事务

事务管理在系统开发中是不可缺少的一部分，Spring提供了很好事务管理机制，主要分为编程式事务和声明式事务两种。

编程式事务：是指在代码中手动的管理事务的提交、回滚等操作，代码侵入性比较强，如下示例：

try {
    //TODO]]></description><category></category></item><item><title><![CDATA[数据库（十）_MySQL主从复制]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106385389</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106385389</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 16:50:40 +0800</pubDate><description><![CDATA[复制的基本原理

slave 会从 master 读取 binlog 来进行数据同步
三个步骤

master将改变记录到二进制日志（binary log）。这些记录过程叫做二进制日志事件，binary log events；
salve 将 master 的 binary log events 拷贝到它的中继日志（relay log）;
slave 重做中继日志中的事件，将改变应用到自己的数据库中。MySQL 复制是异步且是串行化的。

复制的基本原则

每个 slave只有一个 master
每个 sa]]></description><category></category></item><item><title><![CDATA[数据库（九）_MySQL分区、分表、分库]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106385028</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106385028</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 16:46:19 +0800</pubDate><description><![CDATA[MySQL分区
一般情况下我们创建的表对应一组存储文件，使用MyISAM存储引擎时是一个.MYI和.MYD文件，使用Innodb存储引擎时是一个.ibd和.frm（表结构）文件。
当数据量较大时（一般千万条记录级别以上），MySQL的性能就会开始下降，这时我们就需要将数据分散到多组存储文件，保证其单个文件的执行效率
能干嘛

逻辑数据分割
提高单一的写和读应用速度
提高分区范围读查询的速度
分割数据能够有多个不同的物理文件路径
高效的保存历史数据

怎么玩
首先查看当前数据库是否支持分区

MySQL5.6]]></description><category></category></item><item><title><![CDATA[数据库（八）_MySQL调优]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106383714</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106383714</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 16:28:05 +0800</pubDate><description><![CDATA[日常工作中你是怎么优化SQL的？
SQL优化的一般步骤是什么，怎么看执行计划（explain），如何理解其中各个字段的含义？
如何写sql能够有效的使用到复合索引？
一条sql执行过长的时间，你如何优化，从哪些方面入手？
什么是最左前缀原则？什么是最左匹配原则？

影响mysql的性能因素


业务需求对MySQL的影响(合适合度)


存储定位对MySQL的影响

系统各种配置及规则数据
活跃用户的基本信息数据
活跃用户的个性化定制信息数据
准实时的统计信息数据
其他一些访问频繁但变更较少的数据
二进制.]]></description><category></category></item><item><title><![CDATA[数据库（七）_MySQL锁机制]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106382946</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106382946</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 15:48:14 +0800</pubDate><description><![CDATA[数据库的乐观锁和悲观锁？
MySQL 中有哪几种锁，列举一下？
MySQL中InnoDB引擎的行锁是怎么实现的？
MySQL 间隙锁有没有了解，死锁有没有了解，写一段会造成死锁的 sql 语句，死锁发生了如何解决，MySQL 有没有提供什么机制去解决死锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。
在数据库中，除传统的计算资源（如CPU、RAM、I/O等）的争用以外，数据也是一种供许多用户共享的资源。数据库锁定机制简单来说，就是数据库为了保证数据的一致性，而使各种共享资源在被并发访问变得有序所.]]></description><category></category></item><item><title><![CDATA[数据库（六）_MySQL事务]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106380827</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106380827</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 15:21:56 +0800</pubDate><description><![CDATA[事务的隔离级别有哪些？MySQL的默认隔离级别是什么？
什么是幻读，脏读，不可重复读呢？
MySQL事务的四大特性以及实现原理
MVCC熟悉吗，它的底层原理？

MySQL 事务主要用于处理操作量大，复杂度高的数据。比如说，在人员管理系统中，你删除一个人员，你即需要删除人员的基本资料，也要删除和该人员相关的信息，如信箱，文章等等，这样，这些数据库操作语句就构成一个事务！
ACID — 事务基本要素
事务是由一组SQL语句组成的逻辑处理单元，具有4个属性，通常简称为事务的ACID属性

A (Atomici.]]></description><category></category></item><item><title><![CDATA[数据库（五）_MySQL查询机制]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106380520</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106380520</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 14:19:12 +0800</pubDate><description><![CDATA[count(*) 和 count(1)和count(列名)区别

执行效果上：

count(*)包括了所有的列，相当于行数，在统计结果的时候，不会忽略列值为NULL
count(1)包括了所有列，用1代表代码行，在统计结果的时候，不会忽略列值为NULL
count(列名)只包括列名那一列，在统计结果的时候，会忽略列值为空（这里的空不是只空字符串或者0，而是表示null）的计数，即某个字段值为NULL时，不统计

执行效率上：

列名为主键，count(列名)会比count(1)快
列名不为主键，coun.]]></description><category></category></item><item><title><![CDATA[数据库（四）_MySQL索引]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106375520</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106375520</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 13:58:28 +0800</pubDate><description><![CDATA[索引

说说你对 MySQL 索引的理解？
数据库索引的原理，为什么要用 B+树，为什么不用二叉树？
聚集索引与非聚集索引的区别？
InnoDB引擎中的索引策略，了解过吗？
创建索引的方式有哪些？
聚簇索引/非聚簇索引，mysql索引底层实现，为什么不用B-tree，为什么不用hash，叶子结点存放的是数据还是指向数据的内存地址，使用索引需要注意的几个地方？


MYSQL官方对索引的定义为：索引（Index）是帮助MySQL高效获取数据的数据结构，所以说索引的本质是：数据结构
索引的目的在于提高查询效率.]]></description><category></category></item><item><title><![CDATA[数据库（三）_MySQL数据类型]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106374755</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106374755</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 10:32:50 +0800</pubDate><description><![CDATA[数据类型
主要包括以下五大类：

整数类型：BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型：FLOAT、DOUBLE、DECIMAL
字符串类型：CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型：Date、DateTime、TimeStamp、Time、Year
其他数据类型：BINARY、VARBINAR.]]></description><category></category></item><item><title><![CDATA[数据库（二）_MySQL存储引擎]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106374136</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106374136</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 10:25:45 +0800</pubDate><description><![CDATA[存储引擎
存储引擎是MySQL的组件，用于处理不同表类型的SQL操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能，使用不同的存储引擎，还可以获得特定的功能。
使用哪一种引擎可以灵活选择，一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求，使用合适的存储引擎，将会提高整个数据库的性能 。
MySQL服务器使用可插拔的存储引擎体系结构，可以从运行中的 MySQL 服务器加载或卸载存储引擎 。

查看存储引擎

-- 查看支持的存储引擎
SHOW ENGINES

-- 查看默认存储引擎.]]></description><category></category></item><item><title><![CDATA[数据库（一）_MySQL架构]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106374073</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106374073</guid><author>windforce828</author><pubDate>Wed, 27 May 2020 10:09:21 +0800</pubDate><description><![CDATA[MySQL架构
和其它数据库相比，MySQL有点与众不同，它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上，插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。


连接层：最上层是一些客户端和连接服务。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念，为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具.]]></description><category></category></item><item><title><![CDATA[Linux命令 kill -9 的原理]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106119445</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106119445</guid><author>windforce828</author><pubDate>Thu, 14 May 2020 14:34:43 +0800</pubDate><description><![CDATA[相信很多程序员对于Linux系统都不陌生，即使自己的日常开发机器不是Linux，那么线上服务器也大部分都是的，所以，掌握常用的Linux命令也是程序员必备的技能。
但是，怕就怕很多人对于部分命令只是一知半解，使用不当就能导致线上故障。
前段时间，我们的线上应用报警，频繁FGC，需要紧急处理问题，于是有同事去线上重启机器（正常程序应该是先采集堆dump，然后再重启，方便排查是否存在内存泄露等问题）。
但是在重启过程中，同事发现正常的重启命令应用无反应，然后尝试使用kill命令"杀"掉Java进程，但是仍然无效]]></description><category></category></item><item><title><![CDATA[redis 缓存更新一致性]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/106113442</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/106113442</guid><author>windforce828</author><pubDate>Thu, 14 May 2020 13:10:01 +0800</pubDate><description><![CDATA[当执行写操作后，需要保证从缓存读取到的数据与数据库中持久化的数据是一致的，因此需要对缓存进行更新。
因为涉及到数据库和缓存两步操作，难以保证更新的原子性。
在设计更新策略时，我们需要考虑多个方面的问题:

对系统吞吐量的影响：比如更新缓存策略产生的数据库负载小于删除缓存策略的负载
并发安全性：并发读写时某些异常操作顺序可能造成数据不一致，如缓存中长期保存过时数据
更新失败的影响：若某个操作失败，如何对业务影响降到最小
检测和修复故障的难度: 操作失败导致的错误会在日志留下详细的记录容易检测和修复。并发问题导]]></description><category></category></item><item><title><![CDATA[Java_遍历 HashMap 的 5 种最佳方式]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/105363665</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/105363665</guid><author>windforce828</author><pubDate>Tue, 07 Apr 2020 14:14:17 +0800</pubDate><description><![CDATA[在本文中，我们将通过示例讨论在 Java 上遍历 HashMap 的五种最佳方法。

使用 Iterator 遍历 HashMap EntrySet
使用 Iterator 遍历 HashMap KeySet
使用 For-each 循环迭代 HashMap
使用 Lambda 表达式遍历 HashMap
使用 Stream API 遍历 HashMap


1. 使用 Iterator 遍历 H...]]></description><category></category></item><item><title><![CDATA[Java_JVM 级锁]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/104897964</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/104897964</guid><author>windforce828</author><pubDate>Mon, 16 Mar 2020 13:56:40 +0800</pubDate><description><![CDATA[synchronized

synchronized 关键字是一把经典的锁，也是我们平时用得最多的。在 JDK1.6 之前， syncronized 是一把重量级的锁，不过随着 JDK 的升级，也在对它进行不断的优化，如今它变得不那么重了，甚至在某些场景下，它的性能反而优于轻量级锁。在加了 syncronized 关键字的方法、代码块中，一次只允许一个线程进入特定代码段，从而避免多线程同时修改同...]]></description><category></category></item><item><title><![CDATA[Java_BigDecimal类]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/104859458</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/104859458</guid><author>windforce828</author><pubDate>Sat, 14 Mar 2020 13:58:18 +0800</pubDate><description><![CDATA[前言

我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题。如下一段代码：
System.out.println(0.05 + 0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);

输出：
0.060000000000000005
0...]]></description><category></category></item><item><title><![CDATA[Python__Pyinstaller打包命令实现打包exe]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/104859379</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/104859379</guid><author>windforce828</author><pubDate>Sat, 14 Mar 2020 13:52:39 +0800</pubDate><description><![CDATA[1、前言

嘿，各位小伙伴，晚上好呀，我相信各位小伙伴都是python的爱好者。也许我们不一定是专业的程序员，但是我们仍然可以通过代码提高我们的效率，尽量少加班，多陪陪媳妇。再不行，让代码替我们干着重复的工作，我们有节省出来的时间打游戏不好嘛，是吧，哈哈哈。
但是呢，我们开发的脚本一般都会用到一些第三方包，可能别人也需要用到我们的脚本，如果我们将我们的xx.py文件发给他，他是不能直接用的，他还...]]></description><category></category></item><item><title><![CDATA[常见9种 OOM 原因及解决方案]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/104819055</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/104819055</guid><author>windforce828</author><pubDate>Thu, 12 Mar 2020 14:51:58 +0800</pubDate><description><![CDATA[当 JVM 内存严重不足时，就会抛出 java.lang.OutOfMemoryError 错误。本文总结了常见的 OOM 原因及其解决方法，如下图所示。如有遗漏或错误，欢迎补充指正。


1、Java heap space

当堆内存（Heap Space）没有足够空间存放新创建的对象时，就会抛出 java.lang.OutOfMemoryError:Javaheap space 错误（根据实际...]]></description><category></category></item><item><title><![CDATA[100 个网络基础知识]]></title><link>https://blog.youkuaiyun.com/windforce828/article/details/104777154</link><guid>https://blog.youkuaiyun.com/windforce828/article/details/104777154</guid><author>windforce828</author><pubDate>Tue, 10 Mar 2020 16:23:52 +0800</pubDate><description><![CDATA[1、什么是链接？

链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。

2、OSI 参考模型的层次是什么？

有 7 个 OSI 层：物理层，数据链路层，网络层，传输层，会话层，表示层和应用层。

3、什么是骨干网？

骨干网络是集中的基础设施，旨在将不同的路由和数据分发到各种网络。它还处理带宽管理和各种通道。

4、什么是 LAN？

LAN 是局域网的缩写...]]></description><category></category></item></channel></rss>