自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(213)
  • 资源 (3)
  • 收藏
  • 关注

转载 搞懂epoll高效运行的原理(收藏)

转载:https://www.jianshu.com/p/31cdfd6f5a48前言这篇文章读不懂的没关系,可以先收藏一下。笔者准备介绍完epoll和NIO等知识点,然后写一篇Java网络IO模型的介绍,这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后,再回头看这些博客,会更加有收获。如果你顺利啃下这篇博客,恭喜你,nginx、redis...

2020-01-27 18:45:52 490

转载 Vue内部运行机制解析(整理)

解析vue原理的好文:https://github.com/answershuto/learnVuehttps://www.jianshu.com/p/4c47c12d4b3f1,vue的运行机制捕获.PNG在 new Vue() 之后。 Vue 会调用 init 函数进行初始化,其中最重要的是通过 Object.defineProperty 设置 setter 与 ...

2019-12-24 21:18:08 1061

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

最近想再次深入学习MVCC原理,收藏了以下好文章,供以后查阅MVCC原理探究及MySQL源码实现分析InnoDB MVCC实现原理及源码解析MySQL InnoDB 的多版本并发控制(MVCC)阅读以上文章发现,MVCC机制是存在一个问题,也就是缺陷。问题:在RR情况下,事务A开启事务后修改了数据a,但未提交commit;此时事务B开启事务后,要做多次查询数据a;如果事务...

2019-11-21 20:03:59 453

转载 java AQS源码阅读共享锁的实现(转载)

转载:https://www.jianshu.com/p/76949bca657a, 补充了红色部分一、独占锁与共享锁区别 1)独占功能: 新线程执行时,先判断同步队列是否有节点,如果有,则进入同步队列的队尾 当锁被头节点获取后,只有头节点获取锁,其余节点的线程继续沉睡,等待锁被释放后,才会唤醒下一个节点的线程。 2)共享功能: 新线程...

2019-11-12 10:53:17 329

原创 SpringBoot集成vue的开发解决方案

最近由于工作要求:前端采用vue开发,后端采用springboot开发,前后端分离开发,最后前端页面又整合到后端来。经历多次采坑,总结以下方案:vue build后的文件部署到springboot目录vue打包后,会生成dist目录springboot静态资源目录如下:SpringBoot处理静态资源和页面,设置如下:@Overridepublic void addResour...

2019-06-06 17:44:29 25002 3

原创 MySql千万级limit优化方案

经过实践,总结以下比较好的limit分页优化方案1. 模仿百度、谷歌方案(前端业务控制)类似于分段。我们给每次只能翻100页、超过一百页的需要重新加载后面的100页。这样就解决了每次加载数量数据大 速度慢的问题了2. IN获取idselect * from table_name where id in (select id from table_name where ( user = xx...

2019-05-22 13:04:48 10586

转载 微服务架构设计基础之领域驱动设计(转载)

DDD早于微服务「出道」十年,这两个「忘年交」的软件设计哲学是如何相爱相杀的?背景微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微服务作为新的架构标准与SOA有什么差异点呢?其本质区别在于设计原理,微服务是去中心化设计,SOA是「集成」形成中心设...

2019-05-14 15:47:40 212

原创 Vue+Element UI封装Axios请求,支持PayLoad、Form Data两种方式

由于Element的Loading是全局等待条,每次请求都需要显示,有时候不太方便。下面做了一个处理,根据情况,在请求参数中添加showLoading=true,自行显示全局等待条。import Axios from 'axios'import qs from 'qs'import { Message, Loading } from 'element-ui';let loadi...

2019-05-14 11:24:06 2963

原创 Vue+iView LoadingBar封装Axios请求

import Axios from 'axios'import qs from 'qs'import iView from 'iview'Axios.defaults.timeout = 60000Axios.defaults.baseURL = ''//http request 拦截器Axios.interceptors.request.use( config =&gt...

2019-05-14 11:17:42 1810

原创 mybatis批量新增和批量更新的效率对比

今天,为了更多了解下,mybatis批量新增和批量更新在simple/batch模式 + MySQL的rewriteBatchedStatements下效率有什么区别,做了一次实验。实验结果,让人意想不到,如果没有亲自测试,可能一直会被网上帖子误导。实验参数mybatis的执行类型ExecutorTypesimply模式batch模式形成的SQL语句方式insert:批...

2019-05-12 23:24:39 7514 5

原创 mybatis如何开启batch模式

一般来说,对于SSM项目工程来说,mybatis的ExectoryType默认是simple,那么又如何能动态使用batch模式呢?直接上源码实现干货:import org.apache.ibatis.session.ExecutorType;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.sessi...

2019-05-12 22:39:59 11485 2

原创 扩展tk.mybatis的批量更新的功能

tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。批量更新网上主要有2种方式:case when方式、foreach方式但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章。扩展tk.mybatis的批量更新,采用case when方式,源码干货如下:首先定义下mapper接口import org.apache....

2019-05-12 22:32:39 12687 11

原创 javascript XMLHttpRequest实现下载文件

查阅网上关于JavaScript实现下载文件功能,主要有几种方式:1. window.open(url) 这是最差劲最不负责任的做法,因为会下载会弹出白页面2. 构造form表单,form.submit() 这种方式有一个问题:不能加入等待对话框3. 使用XMLHttpRequest,获取response 实现下载, 但是有一个小问题:后台header中filename不能...

2019-05-11 11:32:22 11310

原创 扩展tk.mybatis的流式查询功能

mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询功能。 直接上干货:@Options注解是关键import org.apache.ibatis.annotations.Options;import org.apache.ibatis.annotations.S...

2019-05-09 14:37:57 3007 1

原创 基于SpringBoot和tk.mybatis的支持事务的读写分离的源码实现

至于什么是读写分离,请大家自己去百度吧。直接上干货源码:先定义数据源读写类型/** * 数据源类型 * * @author sunchangtan */public enum DataSourceType { WRITE, READ}定义数据库连接的Holderimport java.sql.Connection;import java.util.HashM...

2019-05-06 20:18:47 1617 2

原创 每日力扣:403. 青蛙过河

package com.sample.suncht.algo;import java.util.*;/** * 403. 青蛙过河 * <p> * 一只青蛙想要过河。 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。 * <p> * 给定石子的位置列表(用单元格序号升序表示)...

2019-04-21 23:59:46 479

原创 关于线程池ThreadPoolExecutor的深度思考

今天,又一次梳理了下关于线程池ThreadPoolExecutor的运行原理,重新阅读源码,又一次加深理解。在梳理ThreadPoolExecutor运行原理前,问了自己几个问题:(1)task什么时候执行,如何执行?(2)当thread数<core size时,task执行完后,thread又如何保持运行中,而不被销毁?(3)当task个数>core size &am...

2019-04-18 20:59:09 222

转载 彻底弄懂HTTP缓存机制及原理(转载)

转载:http://www.cnblogs.com/chenqf/p/6386163.html文章写不错,故转载记录下前言Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。但是对于很多前端同学来说,仅仅只是知道浏览器会对请求的静态文件进行缓存,但是为什么...

2019-04-18 11:17:50 196

转载 SkipList 跳表(转载)

转载:https://kenby.iteye.com/blog/1187303为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦...

2019-04-17 14:05:58 127

原创 python sqlalchemy默认2小时后出现MySQL Server gone away问题

python sqlalchemy在2小时后会报以下错:OperationalError('(pymysql.err.OperationalError) (2006, "MySQLserver has gone away (BrokenPipeError(32, \'Broken pipe\'))")',)原因是,sqlalchemy数据库连接的默认2小时超时断开,导致MySQL Se...

2019-04-17 10:18:23 747

转载 深入探究 JVM | Safepoint 及 GC 的触发条件(转载)

转载:https://www.sczyh30.com/posts/Java/jvm-gc-safepoint-condition/GC Safepoint如果要触发一次GC,那么JVM中所有Java线程都必须到达GC Safepoint。JVM只会在特定位置放置safepoint,比如:内存分配的地方(allocation,即new一个新对象的时候) 长时间执行区块结束的时刻(如...

2019-04-15 12:54:25 719

原创 关于ContextClassLoader的一点思考

关于java的ClassLoader类加载器的资料,百度上一堆一堆的,其中一看你就懂,超详细java中的ClassLoader详解 该文章写的挺好的。不过,我对ContextClassLoader有一些疑惑:父线程加载的Class,子线程是否可以使用该Class? 答:可以子线程加载的Class,父线程是否可以使用该Class? 答:不可以如果一个线程加载的Class,其...

2019-04-08 10:21:02 1318 3

原创 生产者和消费者三种实现:wait/notify、lock、disruptor

第一种 wait/notify+链表实现生产者/** * @author sunchangtan * @date 2019/2/25 12:59 */public class Producer implements Runnable { private final List<Goods> goods; private int maxCapiblity; ...

2019-04-06 23:37:16 664

原创 python、java之间base64转换(字符串、二进制流)

python的base64转换:import base64def strToBase64(s): ''' 将字符串转换为base64字符串 :param s: :return: ''' strEncode = base64.b64encode(s.encode('utf8')) return str(strEncode, enco...

2019-04-05 17:16:23 7526 2

原创 每日力扣:155. 最小栈 , 用双栈、双向链表分别实现

package com.sample.suncht.algo;import java.util.Stack;/** * * 155. 最小栈 * * 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 * * push(x) -- 将元素 x 推入栈中。 * pop() -- 删除栈顶的元素。 * top() -- 获取栈顶元素。 * g...

2019-03-31 12:38:45 310

原创 每日力扣:43. 字符串相乘

package com.sample.suncht.algo;import java.util.ArrayList;import java.util.List;/** * 43. 字符串相乘 * <p> * 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 * <p> * ...

2019-03-26 13:51:15 227

原创 通过Lombok学习如何写好hashCode和equals方法

平时开发过程中,有时需要重写javaBean的hashCode和equals方法,但是一时间却不知道如何编写,百度上一搜索各种写法,总感觉没一个是标准写法。还好,Lombok的@Data会自动给JavaBean填充hashCode和equals方法,可以通过反编译出来,学习下Lombok如何重写hashCode和equals方法的。import lombok.Data;import java...

2019-03-22 15:02:24 6732

转载 理解CacheLine与写出更好的JAVA

CPU和内存CPU是计算机的大脑,它负责运算,内存是数据,它为CPU提供数据。这里之所以忽略其他存储设备是为了简化模型。假设我们面对的是具有两个核心的CPU,那么我们的模型大概如下面的样子:CPU计算核心不会直接和内存打交道,它会直接从缓存拿数据,如果缓存没拿到,专业点说即缓存未命中的时候才会去内存去拿,同时会更新缓存。这个过程CPU不会仅仅读取需要的某个字节或字的内容,而会按策略读取...

2019-03-22 10:20:02 385

转载 源码阅读:全方位讲解LongAdder

高并发下计数功能最好的数据结构就是LongAdder与DoubleAdder,低并发下效率也非常优秀,这是我见过的java并发包中设计的最为巧妙的类,从软硬件方面将java并发累加操作优化到了极致,所以应该我们应该弄清楚它的每一行代码为什么要这样做,它俩的实现大同小异,下面以LongAdder类为例介绍下它的实现。Striped64类public class LongAdder extend...

2019-03-20 21:42:10 201

原创 每日力扣:567. 字符串的排列

package com.sample.suncht.algo;import java.util.ArrayList;import java.util.List;/** * 567. 字符串的排列 * * 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 * * 换句话说,第一个字符串的排列之一是第二个字符串的子串。 * * 示例1: *...

2019-03-20 13:15:00 494

转载 TCP可靠传输的原理

TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;2...

2019-03-19 15:51:34 465

原创 每日力扣:62. 不同路径,3种方式,动态规划效率最高

package com.sample.suncht.algo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * 62. 不同路径 * &lt;p&gt; * 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 * &lt;p&gt...

2019-03-14 11:16:27 467

原创 每日力扣:2. 两数相加

package com.sample.suncht.algo;import com.google.common.base.Joiner;import java.util.ArrayList;import java.util.List;/** * 2. 两数相加 * 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

2019-03-06 15:22:06 335

原创 每日力扣:1. 两数之和

package com.sample.suncht.algo;import java.util.HashMap;import java.util.Map;/** * 1. 两数之和 * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 * 示例: * 给定 nums = [2, 7, 11, 15], ...

2019-03-06 15:20:35 778

原创 每日力扣:3. 无重复字符的最长子串

package com.sample.suncht.algo;import java.util.*;/** * 3. 无重复字符的最长子串 * 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 * 示例 3: * &lt;p&gt; * 输入: "pwwkew" * 输出: 3 * 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 * 请...

2019-03-06 15:11:45 190

原创 每日力扣:6. Z 字形变换

package com.sample.suncht.algo;import java.util.ArrayList;import java.util.List;/** * 6. Z 字形变换 * &lt;p&gt; * 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 * &lt;p&gt; * 比如输入字符串为 "LEETCODEISHIRING" ...

2019-03-06 15:09:28 210

原创 一致性hash算法和Java实现

一致性hash算法一、前言在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。在高并发(比如20W/S QPS + 海量数据)环境下,如何让请求均匀分散到集群中,防止应用数据库雪崩?二、Hash取模基本原理计算方式:hash(key) % 缓存集群节点数量使用这个算法的问题在于容错性和扩展性不好。所谓容错性是指当系统中某一个...

2019-02-23 21:34:57 763

原创 基于Spring Session实现JIM分布式Session

基于Spring Session实现JIM分布式Session前引在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session、线程内缓存、唯一全局ID等),那么会出现状态之间无法共享,对此通常解决方案时:使用第三方系统进行状态的分布式统一管理,比如Redis、Memecache、Zookeeper等。我们经常会在Web程...

2019-02-23 21:32:10 228

原创 关于写文章的工具的一些想法

平时经常看书、看帖子、看视频教程等,里面很多写的非常好非常深刻的内容,有时会感悟自己结合工作的理解,但是经常都一看了事,都没沉下时间将其记录和整理,等哪天需要时却往往找不到。现在回过头来发现,这些知识和感悟,其实是自己功能的提升的过程和积累。以下,我逐步将以前和现在看过的、自己总结都写到github中,每天让自己有些知识沉淀。https://github.com/suncht/JavaSumma...

2019-02-23 21:10:35 274

转载 读“Java类加载机制ClassLoader之ContextClassLoader”

文章Java类加载机制ClassLoader之ContextClassLoader,转载于https://blog.csdn.net/qq_22912803/article/details/78065847看了这篇文章,让我彻底了解了关于ContextClassLoader的原理和机制,故记录下以便学习用工作过程中,时常会用ServiceLoader方式SPI机制或者自己实现META-IN...

2019-02-23 17:18:08 315

JAVA反编译工具

JAVA反编译工具jd-gui 和 jdeclipse插件,最新版本:

2014-04-01

页面URL获取工具

工具功能,很强大,不限于以下功能 1、查看网页源码 2、鼠标获取网页地址 3、复制网页信息 4、查看网页文本 5、查看网页表单

2014-04-01

JS压缩工具

JS压缩工具,可以注册到鼠标右键中,方便生成压缩后的JS

2014-04-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除