<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sunct的博客]]></title><description><![CDATA[追逐]]></description><link>https://blog.csdn.net/sunct</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; sunct]]></copyright><item><title><![CDATA[搞懂epoll高效运行的原理(收藏)]]></title><link>https://blog.csdn.net/sunct/article/details/104094619</link><guid>https://blog.csdn.net/sunct/article/details/104094619</guid><author>sunct</author><pubDate>Mon, 27 Jan 2020 18:45:52 +0800</pubDate><description><![CDATA[转载：https://www.jianshu.com/p/31cdfd6f5a48

前言

这篇文章读不懂的没关系，可以先收藏一下。笔者准备介绍完epoll和NIO等知识点，然后写一篇Java网络IO模型的介绍，这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后，再回头看这些博客，会更加有收获。

如果你顺利啃下这篇博客，恭喜你，nginx、redis...]]></description><category></category></item><item><title><![CDATA[Vue内部运行机制解析（整理）]]></title><link>https://blog.csdn.net/sunct/article/details/103689930</link><guid>https://blog.csdn.net/sunct/article/details/103689930</guid><author>sunct</author><pubDate>Tue, 24 Dec 2019 21:18:08 +0800</pubDate><description><![CDATA[解析vue原理的好文：

https://github.com/answershuto/learnVue

https://www.jianshu.com/p/4c47c12d4b3f



1，vue的运行机制



捕获.PNG

在 new Vue() 之后。 Vue 会调用 init 函数进行初始化，其中最重要的是通过 Object.defineProperty 设置 setter 与 ...]]></description><category></category></item><item><title><![CDATA[MVCC原理探究及MySQL源码实现分析]]></title><link>https://blog.csdn.net/sunct/article/details/103189717</link><guid>https://blog.csdn.net/sunct/article/details/103189717</guid><author>sunct</author><pubDate>Thu, 21 Nov 2019 20:03:59 +0800</pubDate><description><![CDATA[最近想再次深入学习MVCC原理，收藏了以下好文章，供以后查阅

MVCC原理探究及MySQL源码实现分析

InnoDB MVCC实现原理及源码解析

MySQL InnoDB 的多版本并发控制（MVCC）



阅读以上文章发现，MVCC机制是存在一个问题，也就是缺陷。

问题：在RR情况下，事务A开启事务后修改了数据a，但未提交commit；此时事务B开启事务后，要做多次查询数据a；如果事务...]]></description><category></category></item><item><title><![CDATA[java AQS源码阅读共享锁的实现（转载）]]></title><link>https://blog.csdn.net/sunct/article/details/103023724</link><guid>https://blog.csdn.net/sunct/article/details/103023724</guid><author>sunct</author><pubDate>Tue, 12 Nov 2019 10:53:17 +0800</pubDate><description><![CDATA[转载：https://www.jianshu.com/p/76949bca657a， 补充了红色部分

一、独占锁与共享锁区别


	1)独占功能：

	
		新线程执行时，先判断同步队列是否有节点，如果有，则进入同步队列的队尾
		
		
		当锁被头节点获取后，只有头节点获取锁，其余节点的线程继续沉睡，等待锁被释放后，才会唤醒下一个节点的线程。
		
	
	
	2)共享功能：

	
		新线程...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成vue的开发解决方案]]></title><link>https://blog.csdn.net/sunct/article/details/91047721</link><guid>https://blog.csdn.net/sunct/article/details/91047721</guid><author>sunct</author><pubDate>Thu, 06 Jun 2019 17:44:29 +0800</pubDate><description><![CDATA[最近由于工作要求：前端采用vue开发，后端采用springboot开发，前后端分离开发，最后前端页面又整合到后端来。经历多次采坑，总结以下方案：

vue build后的文件部署到springboot目录
vue打包后，会生成dist目录

springboot静态资源目录如下：

SpringBoot处理静态资源和页面，设置如下：

@Override
public void addResour...]]></description><category></category></item><item><title><![CDATA[MySql千万级limit优化方案]]></title><link>https://blog.csdn.net/sunct/article/details/90441965</link><guid>https://blog.csdn.net/sunct/article/details/90441965</guid><author>sunct</author><pubDate>Wed, 22 May 2019 13:04:48 +0800</pubDate><description><![CDATA[经过实践，总结以下比较好的limit分页优化方案
1. 模仿百度、谷歌方案（前端业务控制）
类似于分段。我们给每次只能翻100页、超过一百页的需要重新加载后面的100页。这样就解决了每次加载数量数据大 速度慢的问题了
2. IN获取id
select * from table_name where id in (select id from table_name where ( user = xx...]]></description><category></category></item><item><title><![CDATA[微服务架构设计基础之领域驱动设计（转载）]]></title><link>https://blog.csdn.net/sunct/article/details/90208337</link><guid>https://blog.csdn.net/sunct/article/details/90208337</guid><author>sunct</author><pubDate>Tue, 14 May 2019 15:47:40 +0800</pubDate><description><![CDATA[DDD早于微服务「出道」十年，这两个「忘年交」的软件设计哲学是如何相爱相杀的？

背景

微服务现在可以说是软件研发领域无人不提的话题，然而业界流行的对比多数都是所谓的Monolithic(单体应用)，而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了，那么微服务作为新的架构标准与SOA有什么差异点呢？其本质区别在于设计原理，微服务是去中心化设计，SOA是「集成」形成中心设...]]></description><category></category></item><item><title><![CDATA[Vue+Element UI封装Axios请求，支持PayLoad、Form Data两种方式]]></title><link>https://blog.csdn.net/sunct/article/details/90202739</link><guid>https://blog.csdn.net/sunct/article/details/90202739</guid><author>sunct</author><pubDate>Tue, 14 May 2019 11:24:06 +0800</pubDate><description><![CDATA[由于Element的Loading是全局等待条，每次请求都需要显示，有时候不太方便。

下面做了一个处理，根据情况，在请求参数中添加showLoading=true，自行显示全局等待条。


import Axios from 'axios'
import qs from 'qs'
import { Message, Loading } from 'element-ui';

let loadi...]]></description><category></category></item><item><title><![CDATA[Vue+iView LoadingBar封装Axios请求]]></title><link>https://blog.csdn.net/sunct/article/details/90202621</link><guid>https://blog.csdn.net/sunct/article/details/90202621</guid><author>sunct</author><pubDate>Tue, 14 May 2019 11:17:42 +0800</pubDate><description><![CDATA[import Axios from 'axios'
import qs from 'qs'
import iView from 'iview'


Axios.defaults.timeout = 60000
Axios.defaults.baseURL = ''


//http request 拦截器
Axios.interceptors.request.use(
  config =&gt...]]></description><category></category></item><item><title><![CDATA[mybatis批量新增和批量更新的效率对比]]></title><link>https://blog.csdn.net/sunct/article/details/90147304</link><guid>https://blog.csdn.net/sunct/article/details/90147304</guid><author>sunct</author><pubDate>Sun, 12 May 2019 23:24:39 +0800</pubDate><description><![CDATA[今天，为了更多了解下，mybatis批量新增和批量更新在simple/batch模式 + MySQL的rewriteBatchedStatements下效率有什么区别，做了一次实验。
实验结果，让人意想不到，如果没有亲自测试，可能一直会被网上帖子误导。
实验参数


mybatis的执行类型ExecutorType

simply模式
batch模式



形成的SQL语句方式

insert：批...]]></description><category></category></item><item><title><![CDATA[mybatis如何开启batch模式]]></title><link>https://blog.csdn.net/sunct/article/details/90146775</link><guid>https://blog.csdn.net/sunct/article/details/90146775</guid><author>sunct</author><pubDate>Sun, 12 May 2019 22:39:59 +0800</pubDate><description><![CDATA[一般来说，对于SSM项目工程来说，mybatis的ExectoryType默认是simple，那么又如何能动态使用batch模式呢？
直接上源码实现干货：
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.sessi...]]></description><category></category></item><item><title><![CDATA[扩展tk.mybatis的批量更新的功能]]></title><link>https://blog.csdn.net/sunct/article/details/90146681</link><guid>https://blog.csdn.net/sunct/article/details/90146681</guid><author>sunct</author><pubDate>Sun, 12 May 2019 22:32:39 +0800</pubDate><description><![CDATA[tk.mybatis没有带批量更新的功能，批量更新却是经常使用的，所以需要自己实现。
批量更新网上主要有2种方式：case when方式、foreach方式
但是foreachzhe这种方式效率非常低下，不知道为何那多么帖子在流传，请看我另一个文章。
扩展tk.mybatis的批量更新，采用case when方式，源码干货如下：

首先定义下mapper接口

import org.apache....]]></description><category></category></item><item><title><![CDATA[javascript XMLHttpRequest实现下载文件]]></title><link>https://blog.csdn.net/sunct/article/details/90106429</link><guid>https://blog.csdn.net/sunct/article/details/90106429</guid><author>sunct</author><pubDate>Sat, 11 May 2019 11:32:22 +0800</pubDate><description><![CDATA[查阅网上关于JavaScript实现下载文件功能，主要有几种方式：

1. window.open(url)  这是最差劲最不负责任的做法，因为会下载会弹出白页面

2. 构造form表单，form.submit()  这种方式有一个问题：不能加入等待对话框

3. 使用XMLHttpRequest，获取response 实现下载， 但是有一个小问题：后台header中filename不能...]]></description><category></category></item><item><title><![CDATA[扩展tk.mybatis的流式查询功能]]></title><link>https://blog.csdn.net/sunct/article/details/90033861</link><guid>https://blog.csdn.net/sunct/article/details/90033861</guid><author>sunct</author><pubDate>Thu, 09 May 2019 14:37:57 +0800</pubDate><description><![CDATA[mybatis查询默认是一次获取全部， 有时候需要查询上万上百万数据时，如果一次性读取到内存中，会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询功能。 直接上干货：
@Options注解是关键
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.S...]]></description><category></category></item><item><title><![CDATA[基于SpringBoot和tk.mybatis的支持事务的读写分离的源码实现]]></title><link>https://blog.csdn.net/sunct/article/details/89890521</link><guid>https://blog.csdn.net/sunct/article/details/89890521</guid><author>sunct</author><pubDate>Mon, 06 May 2019 20:18:47 +0800</pubDate><description><![CDATA[至于什么是读写分离，请大家自己去百度吧。直接上干货源码：

先定义数据源读写类型

/**
 * 数据源类型
 *
 * @author sunchangtan
 */
public enum DataSourceType {
    WRITE, READ
}


定义数据库连接的Holder

import java.sql.Connection;
import java.util.HashM...]]></description><category></category></item><item><title><![CDATA[每日力扣：403. 青蛙过河]]></title><link>https://blog.csdn.net/sunct/article/details/89442476</link><guid>https://blog.csdn.net/sunct/article/details/89442476</guid><author>sunct</author><pubDate>Sun, 21 Apr 2019 23:59:46 +0800</pubDate><description><![CDATA[package com.sample.suncht.algo;

import java.util.*;

/**
 * 403. 青蛙过河
 * &lt;p&gt;
 * 一只青蛙想要过河。 假定河流被等分为 x 个单元格，并且在每一个单元格内都有可能放有一石子（也有可能没有）。 青蛙可以跳上石头，但是不可以跳入水中。
 * &lt;p&gt;
 * 给定石子的位置列表（用单元格序号升序表示）...]]></description><category></category></item><item><title><![CDATA[关于线程池ThreadPoolExecutor的深度思考]]></title><link>https://blog.csdn.net/sunct/article/details/89385668</link><guid>https://blog.csdn.net/sunct/article/details/89385668</guid><author>sunct</author><pubDate>Thu, 18 Apr 2019 20:59:09 +0800</pubDate><description><![CDATA[今天，又一次梳理了下关于线程池ThreadPoolExecutor的运行原理，重新阅读源码，又一次加深理解。

在梳理ThreadPoolExecutor运行原理前，问了自己几个问题：

（1）task什么时候执行，如何执行？

（2）当thread数&lt;core size时，task执行完后，thread又如何保持运行中，而不被销毁？

（3）当task个数&gt;core size &am...]]></description><category></category></item><item><title><![CDATA[彻底弄懂HTTP缓存机制及原理（转载）]]></title><link>https://blog.csdn.net/sunct/article/details/89374645</link><guid>https://blog.csdn.net/sunct/article/details/89374645</guid><author>sunct</author><pubDate>Thu, 18 Apr 2019 11:17:50 +0800</pubDate><description><![CDATA[转载：http://www.cnblogs.com/chenqf/p/6386163.html

文章写不错，故转载记录下



前言

Http 缓存机制作为 web 性能优化的重要手段，对于从事 Web 开发的同学们来说，应该是知识体系库中的一个基础环节，同时对于有志成为前端架构师的同学来说是必备的知识技能。
但是对于很多前端同学来说，仅仅只是知道浏览器会对请求的静态文件进行缓存，但是为什么...]]></description><category></category></item><item><title><![CDATA[SkipList 跳表（转载）]]></title><link>https://blog.csdn.net/sunct/article/details/89354811</link><guid>https://blog.csdn.net/sunct/article/details/89354811</guid><author>sunct</author><pubDate>Wed, 17 Apr 2019 14:05:58 +0800</pubDate><description><![CDATA[转载：https://kenby.iteye.com/blog/1187303



为什么选择跳表

目前经常使用的平衡数据结构有：B树，红黑树，AVL树，Splay Tree, Treep等。

想象一下，给你一张草稿纸，一只笔，一个编辑器，你能立即实现一颗红黑树，或者AVL树

出来吗？ 很难吧，这需要时间，要考虑很多细节，要参考一堆算法与数据结构之类的树，

还要参考网上的代码，相当麻烦...]]></description><category></category></item><item><title><![CDATA[python sqlalchemy默认2小时后出现MySQL Server gone away问题]]></title><link>https://blog.csdn.net/sunct/article/details/89350356</link><guid>https://blog.csdn.net/sunct/article/details/89350356</guid><author>sunct</author><pubDate>Wed, 17 Apr 2019 10:18:23 +0800</pubDate><description><![CDATA[python sqlalchemy在2小时后会报以下错：


OperationalError('(pymysql.err.OperationalError) (2006, "MySQLserver has gone away (BrokenPipeError(32, \'Broken pipe\'))")',)

原因是，sqlalchemy数据库连接的默认2小时超时断开，导致MySQL Se...]]></description><category></category></item></channel></rss>