- 博客(213)
- 资源 (3)
- 收藏
- 关注
转载 搞懂epoll高效运行的原理(收藏)
转载:https://www.jianshu.com/p/31cdfd6f5a48前言这篇文章读不懂的没关系,可以先收藏一下。笔者准备介绍完epoll和NIO等知识点,然后写一篇Java网络IO模型的介绍,这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后,再回头看这些博客,会更加有收获。如果你顺利啃下这篇博客,恭喜你,nginx、redis...
2020-01-27 18:45:52
570
转载 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
1215
原创 MVCC原理探究及MySQL源码实现分析
最近想再次深入学习MVCC原理,收藏了以下好文章,供以后查阅MVCC原理探究及MySQL源码实现分析InnoDB MVCC实现原理及源码解析MySQL InnoDB 的多版本并发控制(MVCC)阅读以上文章发现,MVCC机制是存在一个问题,也就是缺陷。问题:在RR情况下,事务A开启事务后修改了数据a,但未提交commit;此时事务B开启事务后,要做多次查询数据a;如果事务...
2019-11-21 20:03:59
519
转载 java AQS源码阅读共享锁的实现(转载)
转载:https://www.jianshu.com/p/76949bca657a, 补充了红色部分一、独占锁与共享锁区别 1)独占功能: 新线程执行时,先判断同步队列是否有节点,如果有,则进入同步队列的队尾 当锁被头节点获取后,只有头节点获取锁,其余节点的线程继续沉睡,等待锁被释放后,才会唤醒下一个节点的线程。 2)共享功能: 新线程...
2019-11-12 10:53:17
369
原创 SpringBoot集成vue的开发解决方案
最近由于工作要求:前端采用vue开发,后端采用springboot开发,前后端分离开发,最后前端页面又整合到后端来。经历多次采坑,总结以下方案:vue build后的文件部署到springboot目录vue打包后,会生成dist目录springboot静态资源目录如下:SpringBoot处理静态资源和页面,设置如下:@Overridepublic void addResour...
2019-06-06 17:44:29
25224
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
10885
转载 微服务架构设计基础之领域驱动设计(转载)
DDD早于微服务「出道」十年,这两个「忘年交」的软件设计哲学是如何相爱相杀的?背景微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微服务作为新的架构标准与SOA有什么差异点呢?其本质区别在于设计原理,微服务是去中心化设计,SOA是「集成」形成中心设...
2019-05-14 15:47:40
259
原创 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
3034
原创 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 =>...
2019-05-14 11:17:42
1862
原创 mybatis批量新增和批量更新的效率对比
今天,为了更多了解下,mybatis批量新增和批量更新在simple/batch模式 + MySQL的rewriteBatchedStatements下效率有什么区别,做了一次实验。实验结果,让人意想不到,如果没有亲自测试,可能一直会被网上帖子误导。实验参数mybatis的执行类型ExecutorTypesimply模式batch模式形成的SQL语句方式insert:批...
2019-05-12 23:24:39
7753
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
11619
1
原创 扩展tk.mybatis的批量更新的功能
tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。批量更新网上主要有2种方式:case when方式、foreach方式但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章。扩展tk.mybatis的批量更新,采用case when方式,源码干货如下:首先定义下mapper接口import org.apache....
2019-05-12 22:32:39
13025
11
原创 javascript XMLHttpRequest实现下载文件
查阅网上关于JavaScript实现下载文件功能,主要有几种方式:1. window.open(url) 这是最差劲最不负责任的做法,因为会下载会弹出白页面2. 构造form表单,form.submit() 这种方式有一个问题:不能加入等待对话框3. 使用XMLHttpRequest,获取response 实现下载, 但是有一个小问题:后台header中filename不能...
2019-05-11 11:32:22
11525
原创 扩展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
3114
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
1755
2
原创 每日力扣:403. 青蛙过河
package com.sample.suncht.algo;import java.util.*;/** * 403. 青蛙过河 * <p> * 一只青蛙想要过河。 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。 * <p> * 给定石子的位置列表(用单元格序号升序表示)...
2019-04-21 23:59:46
553
原创 关于线程池ThreadPoolExecutor的深度思考
今天,又一次梳理了下关于线程池ThreadPoolExecutor的运行原理,重新阅读源码,又一次加深理解。在梳理ThreadPoolExecutor运行原理前,问了自己几个问题:(1)task什么时候执行,如何执行?(2)当thread数<core size时,task执行完后,thread又如何保持运行中,而不被销毁?(3)当task个数>core size &am...
2019-04-18 20:59:09
281
转载 彻底弄懂HTTP缓存机制及原理(转载)
转载:http://www.cnblogs.com/chenqf/p/6386163.html文章写不错,故转载记录下前言Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。但是对于很多前端同学来说,仅仅只是知道浏览器会对请求的静态文件进行缓存,但是为什么...
2019-04-18 11:17:50
227
转载 SkipList 跳表(转载)
转载:https://kenby.iteye.com/blog/1187303为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦...
2019-04-17 14:05:58
160
原创 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
850
转载 深入探究 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
839
原创 关于ContextClassLoader的一点思考
关于java的ClassLoader类加载器的资料,百度上一堆一堆的,其中一看你就懂,超详细java中的ClassLoader详解 该文章写的挺好的。不过,我对ContextClassLoader有一些疑惑:父线程加载的Class,子线程是否可以使用该Class? 答:可以子线程加载的Class,父线程是否可以使用该Class? 答:不可以如果一个线程加载的Class,其...
2019-04-08 10:21:02
1373
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
703
原创 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
7856
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
378
原创 每日力扣: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
338
原创 通过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
6849
转载 理解CacheLine与写出更好的JAVA
CPU和内存CPU是计算机的大脑,它负责运算,内存是数据,它为CPU提供数据。这里之所以忽略其他存储设备是为了简化模型。假设我们面对的是具有两个核心的CPU,那么我们的模型大概如下面的样子:CPU计算核心不会直接和内存打交道,它会直接从缓存拿数据,如果缓存没拿到,专业点说即缓存未命中的时候才会去内存去拿,同时会更新缓存。这个过程CPU不会仅仅读取需要的某个字节或字的内容,而会按策略读取...
2019-03-22 10:20:02
429
转载 源码阅读:全方位讲解LongAdder
高并发下计数功能最好的数据结构就是LongAdder与DoubleAdder,低并发下效率也非常优秀,这是我见过的java并发包中设计的最为巧妙的类,从软硬件方面将java并发累加操作优化到了极致,所以应该我们应该弄清楚它的每一行代码为什么要这样做,它俩的实现大同小异,下面以LongAdder类为例介绍下它的实现。Striped64类public class LongAdder extend...
2019-03-20 21:42:10
233
原创 每日力扣: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
564
转载 TCP可靠传输的原理
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;2...
2019-03-19 15:51:34
502
原创 每日力扣:62. 不同路径,3种方式,动态规划效率最高
package com.sample.suncht.algo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * 62. 不同路径 * <p> * 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 * <p>...
2019-03-14 11:16:27
505
原创 每日力扣: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
496
原创 每日力扣: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
847
原创 每日力扣:3. 无重复字符的最长子串
package com.sample.suncht.algo;import java.util.*;/** * 3. 无重复字符的最长子串 * 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 * 示例 3: * <p> * 输入: "pwwkew" * 输出: 3 * 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 * 请...
2019-03-06 15:11:45
354
原创 每日力扣:6. Z 字形变换
package com.sample.suncht.algo;import java.util.ArrayList;import java.util.List;/** * 6. Z 字形变换 * <p> * 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 * <p> * 比如输入字符串为 "LEETCODEISHIRING" ...
2019-03-06 15:09:28
269
原创 一致性hash算法和Java实现
一致性hash算法一、前言在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。在高并发(比如20W/S QPS + 海量数据)环境下,如何让请求均匀分散到集群中,防止应用数据库雪崩?二、Hash取模基本原理计算方式:hash(key) % 缓存集群节点数量使用这个算法的问题在于容错性和扩展性不好。所谓容错性是指当系统中某一个...
2019-02-23 21:34:57
809
原创 基于Spring Session实现JIM分布式Session
基于Spring Session实现JIM分布式Session前引在实际项目中,应用程序经常会以集群方式部署线上,一般来说无状态的应用程序是理想的部署方式,一旦应用程序拥有状态(比如Session、线程内缓存、唯一全局ID等),那么会出现状态之间无法共享,对此通常解决方案时:使用第三方系统进行状态的分布式统一管理,比如Redis、Memecache、Zookeeper等。我们经常会在Web程...
2019-02-23 21:32:10
386
原创 关于写文章的工具的一些想法
平时经常看书、看帖子、看视频教程等,里面很多写的非常好非常深刻的内容,有时会感悟自己结合工作的理解,但是经常都一看了事,都没沉下时间将其记录和整理,等哪天需要时却往往找不到。现在回过头来发现,这些知识和感悟,其实是自己功能的提升的过程和积累。以下,我逐步将以前和现在看过的、自己总结都写到github中,每天让自己有些知识沉淀。https://github.com/suncht/JavaSumma...
2019-02-23 21:10:35
313
转载 读“Java类加载机制ClassLoader之ContextClassLoader”
文章Java类加载机制ClassLoader之ContextClassLoader,转载于https://blog.youkuaiyun.com/qq_22912803/article/details/78065847看了这篇文章,让我彻底了解了关于ContextClassLoader的原理和机制,故记录下以便学习用工作过程中,时常会用ServiceLoader方式SPI机制或者自己实现META-IN...
2019-02-23 17:18:08
376
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人