- 博客(50)
- 资源 (51)
- 收藏
- 关注
原创 聊聊JVM中那些垃圾收集器
垃圾收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何事先并没有任何规定,故而不同厂商、不同版本的虚拟机所提供的垃圾收集器可能会有很大差别。本文分享的收集器是基于JDK1.7之后的HotSpot虚拟机,这个虚拟机所包含的所有收集器如图所示:连线表示两个收集器可以搭配使用,虚拟机所在的区域表示它是属于新生代还是老年代收集器(上面是新生代,下面是老...
2019-01-30 18:03:23 965
转载 深入学习JVM垃圾回收器之CMS
先看一些问题:CMS出现的初衷、背景和目的?CMS的适用场景?CMS的trade-off是什么?优势、劣势和代价CMS会回收哪个区域的对象?CMS的GC Roots包括那些对象?CMS的过程?CMS和Full gc是不是一回事?CMS何时触发?CMS的日志如何分析?CMS的调优如何做?CMS扫描那些对象?CMS和CMS col...
2019-01-29 17:41:42 3378
转载 深入学习线程局部变量ThreadLocal
ThreadLocal是线程局部变量,和普通变量的不同在于:每个线程持有这个变量的一个副本,可以独立修改(set方法)和访问(get方法)这个变量,并且线程之间不会发生冲突。类中定义的ThreadLocal实例一般会被private static修饰,这样可以让ThreadLocal实例的状态和Thread绑定在一起。业务上,一般用ThreadLocal包装一些业务ID(user ID或事务ID...
2019-01-29 15:45:42 2220
原创 数据结构之Queue入门与详解
Queue用于模拟"队列"这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素【1】 PriorityQueuePriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并.................................
2019-01-28 15:45:50 1873
原创 认真学习分布式应用中的分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。简而言之,分布式锁就是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。分布式锁要满足哪些要求呢?1、互斥性–在分布式系统环境下,一.........
2019-01-27 22:37:18 2922
原创 SpringBoot配置外部Tomcat并打war包
参考博文:SpringBoot整合外部Tomcat时启动流程源码分析SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。【1】创建项目并打War包① 同样使用Spring Initializer方式创建项目② 打包方式选择"w...
2019-01-24 18:29:36 2671
原创 认真研究Java集合之HashSet 的实现原理
HashSet 是 Set 接口的典型实现,由哈希表(实际上是一个HashMap 实例)支持,大多数时候使用 Set 集合时都使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。HashSet 具有以下特点:不能保证元素的排列顺序HashSet 不是线程安全的集合元素可以是 null当向 HashSet 集合中存入一个元素时,HashS............
2019-01-23 19:42:52 2249
原创 分布式锁的最佳实践之Zookeeper
实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookeeper的方案。这里主要介绍基于zk怎么实现分布式锁。由于zookeeper获取链接是一个耗时过程,这里可以在项目启动时,初始化链接,并且只初始化一次。
2019-01-23 11:21:19 2201 1
转载 数据结构和算法中的时间复杂度到底是什么?
简单地说,时间复杂度对应代码运行时间,空间复杂度对应代码占用空间。由于运行环境和输入规模的影响,代码的绝对执行时间是无法估计的,但是我们却可以预估出代码的基本操作执行次数。【1】基本操作执行次数关于代码的基本操作执行次数,我们用四个生活中的场景,来做一下比喻:场景1:给小灰一条长10寸的面包,小灰每3天吃掉1寸,那么吃掉整个面包需要几天?答案自然是 3 X 10 = 30天。如果面包的长......
2019-01-22 18:38:45 1520
原创 分布式架构中缓存应用的一些问题总结
当查询一个不存在的数据时,如果每次都去查询数据库,而数据库中确实没有该数据,这就会导致每次请求都直接打到数据库上,这种现象被称为缓存穿透。
2019-01-22 14:12:57 510 1
原创 SpringMVC源码分析之策略对象初始化
前面我们分析了springmvc的各种组件,那么组件在什么时候初始化的呢?我们这里就研究一下。# 【1】DispatcherServlet如下所示是`DispatcherServlet`的继承树示意图,其继承自`FrameworkServlet`,而`FrameworkServlet`又继承了`HttpServletBean`并实现了`ApplicationContextAware`接口。`HttpServletBean` 则继承了HttpServlet 并实现 EnvironmentCapable
2019-01-21 18:42:04 841
原创 认真学习MySQL中的索引条件下推(ICP)
Index Condition Pushdown(ICP)是MySQL5.6中新特性,是一种在存储引擎层使用索引过滤数据的优化方式。如果没有ICP,存储引擎会遍历索引以定位基表中的行,并将它们返回给MySQL服务器,由MySQL服务器评估where后面的条件是否保留行。启用ICP后,如果部分 `where` 条件可以仅使用索引中的列进行筛选,则MySQL服务器会把这部分 `where` 条件放到存储引擎筛选。然后,存储引擎通过使用索引条目来筛选数据,并且只有在满足这一条件时才从表中读取行。* 好处
2019-01-21 18:20:58 940
原创 常见基础实用算法详解
排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。内排序有可以分为以下几类:插入排序:直接插入排序、二分法插入排序、希尔排序。选择排序:简单选择排序、堆排序。交换排序:冒泡排序、快速排序。归并排序基数排序【1】快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要...
2019-01-21 16:09:21 1296
原创 TCP协议的三次握手与四次挥手
TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立...
2019-01-21 10:12:55 1163
原创 聊聊分布式高并发应用中的高可用性
面试题:高并发场景/接口被刷怎么办?【1】架构和细节首先参考上篇博文:聊聊高并发应用中秒杀场景的方案实现,其中限流,缓存等思想是一致的。这里需要注意的是,如果在现有集群环境下,负载压力仍然很大怎么办?观察上图最后一步—容器化技术。使用Docker+K8s(Kubernetes)构建Docker集群环境。当QPS超过阈值后,自动扩容。比如扩容两个虚拟机,将登录子系统从四节点扩容到6节点,然后...
2019-01-20 18:21:38 951
转载 Java基础之13种核心规范
十三个规范其实就是十三个API文档,我们可能每天都在使用,但是不知道它是什么。【1】JDBC(Java Database Connectivity)用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。跟微软的ODBC很像,应该说是ODBC和ADO的结合,创建连接和发送SQL只用JDBC一个就行了,而ODBC只是创建一个连接,还需要...
2019-01-20 16:17:50 808
原创 【每日一面】常见的排序算法与Java实现
【1】冒泡排序import java.util.Comparator;/** * 排序器接口(策略模式: 将算法封装到具有共同接口的独立的类中使得它们可以相互替换) */public interface Sorter { /** * 排序 * @param list 待排序的数组 */ public <T extends Compar...
2019-01-18 19:55:34 421 1
原创 聊聊高并发应用中电商秒杀场景的方案实现
秒杀场景需要考虑这些关键词:高并发、响应时效性、流程削峰、恶意流量攻击、秒杀原子操作与数据安全、服务高可用(应对雪崩)等。【1】秒杀业务场景分析① 秒杀/抢购业务场景比如商品秒杀、商品抢购、群红包、抢优惠券、抽奖等等。② 秒杀/抢购业务特点秒杀商品价格低廉、抢购商品很好|抢手、---------------------
2019-01-18 19:49:08 3868
转载 聊聊分布式应用的分布式事务之消息最终一致性事务
聊聊分布式应用的分布式事务2PC/3PC聊聊分布式应用的分布式事务TCC聊聊分布式应用的分布式事务之最大努力通知型事务本文我们将学习到另一种常见的柔性事务解决方案:消息一致性事务方案。对于TCC型事务,跨系统的调用均是基于服务间的直接调用,即很大程度上是同步调用。基于TCC方案能够保证主子事务同时成功,同时失败。但实际开发中,由于多方面的考虑,我们会将服务拆分为异步方式,一般是基于MQ进......
2019-01-18 17:32:54 857
转载 聊聊分布式应用的分布式事务之最大努力通知型事务
TCC适用于公司内部对一致性、实时性要求较高的业务场景,而本文我们讲解的“最大努力通知型事务”是为解决跨网络、跨服务之间的柔性事务的另一种解决方案。首先看一下最大努力通知型的流程图,如下图:...
2019-01-18 16:42:08 657
转载 认真学习分布式应用的分布式事务TCC
TCC是try-confirm-cancel的单词首字母缩写,是一个类2PC的柔性事务解决方案,由支付宝提出后得到广泛的实践。补偿事务(TCC)有三个阶段:Try 阶段,对业务系统做检测和资源预留Confirm 阶段对业务系统做确认提交,默认:Try执行成功,Confirm一定成功Cancel 阶段在业务执行失败,需要回滚的情况下执行的业务取消,预留资源释放。首先我们看它的一个原理图.........
2019-01-18 16:34:17 932
转载 认真学习分布式应用的分布式事务之2PC/3PC
[认真学习分布式应用的分布式事务2PC/3PC](https://blog.csdn.net/J080624/article/details/86538135)[聊聊分布式应用的分布式事务TCC](https://blog.csdn.net/J080624/article/details/86542491)[聊聊分布式应用的分布式事务之最大努力通知型事务](https://blog.csdn.net/J080624/article/details/86542689)[聊聊分布式应用的分布式事务之消息最
2019-01-18 12:58:58 1433
原创 SpringBoot中MyBatisPlus的配置说明
如下是SpringBoot+mybatis+mybatisplus中常见的配置,这里面我们进行详细说明。
2019-01-17 18:39:27 385
原创 【每日一面】关于设计模式
【1】简述一下你了解的设计模式所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。在GoF的《Design Patterns: Elements of Re...
2019-01-17 18:34:10 485 2
原创 MySQL8.0新特性与旧特性移除总结
MySQL从5.7版本直接跳跃发布了8.0版本 ,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是对MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。# 【1】MySQL8.0增加的新特性## ① 更简便的NoSQL支持NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展,传统的关系型数据库已经越来越不能满足需求。从5.6版本开始,MySQL
2019-01-17 17:11:45 1577 1
转载 深入学习Tomcat 架构及启动过程
本文对 Tomcat 的介绍以 Tomcat-9.0.0.M22 为标准,它实现了 Servlet4.0 及 JSP2.3 并提供了很多新特性,需要 1.8 及以上的 JDK 支持。【1】Overview① Bootstrap 作为 Tomcat 对外界的启动类,在 $CATALINA_BASE/bin 目录下,它通过反射创建 Catalina 的实例并对其进行初始化及启动。② Catal...
2019-01-17 16:15:42 656
原创 【每日一面】关于JVM
① Java文件分为几种形态?两种,静态和动态。注解保留策略RetentionPolicy与Java文件不同形式:Source:只在源码阶段出现,如果编译成class之后就被丢弃(静态文件)。Class:编译阶段保留,运行阶段就会被丢弃(静态文件)Runtime:运行阶段和class文件都能获取到注解(动态文件)② Java 是如何在保证可移植性的前提下提供高执行效率的?J...
2019-01-17 15:06:30 499 2
原创 uniapp应用实践案例总结
# 【1】打包为微信小程序时实现文件下载如果是H5或者web平台,那么一个a标签通过href就可以实现下载。但是这个对于微信小程序来说是不生效的,在打包过程中会对标签进行转换。下面我们之间上代码。**HTML**```html<view class="text" > <a v-bind:key="index" v-if="zuoyeList.length>0" v-bind:data="baseUrl+item" :href="baseUrl+item" v-for="(item,index
2019-01-17 11:06:11 1805
转载 Tomcat系统架构宏观介绍
【1】Tomcat顶层架构先上一张Tomcat的顶层结构图(图A),如下:Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于处理连...
2019-01-17 09:15:13 394
原创 深入学习Tomcat服务器优化实践
【1】Tomcat内存优化,启动时告诉JVM需要多大内存(调优内存是最直接的方式)Windows 下的 catalina.bat,Linux 下的 catalina.sh。在该文件中配置jvm的内存空间,如:JAVA_OPTS='-Xms256m -Xmx512m'-Xms JVM初始化堆的大小-Xmx JVM堆的最大值,实际参数大小根据服务器配置或者项目具体设置。【2】Tomcat...
2019-01-17 08:50:09 1147
转载 数据结构基础入门
简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构,才能在处理实际问题时选取最合适的数据结构。首先列出一些最常见的数据结构,我们将逐一说明:数组栈队列链表树图字典树(这是一种高效的树形结构,但值得单独说明)散列表(哈希表)【1】数组数组是最简单、也是使用最广泛的...
2019-01-16 18:12:25 1952
原创 SpringCloud Hystrix服务降级实例总结
本文采用版本为Hoxton.SR1系列,SpringCloud Hystrix服务降级实例总结
2019-01-16 17:28:18 452 2
转载 HTTPS协议详解
https是建立在SSL(Secure Sockets Layer 安全套接层)上的网络安全协议,最初由NetScape公司提出,之后由IETF标准化为TLS(Transport Layer Security 安全传输层协议),其端口为443。① HTTP的困境当我们学习HTTP的时候,肯定使用过抓包工具(wireshark, fiddler)帮助我们认识HTTP协议。回忆一下就知道,抓包工...
2019-01-16 17:07:34 1508
原创 分布式应用中负载均衡技术和Session一致性详解
不仅包含负载均衡还包括应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙过滤等功能。参考Tomcat官网:http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html。
2019-01-16 15:12:28 543
原创 Java的三大特性之封装、继承和多态详解
面向对象编程有三大特性:封装、继承、多态。【1】封装封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有几大好处:良好的封装能够减少耦合。类内部的结构可以自由修改。可以对成员进...
2019-01-15 19:23:08 3829
原创 分布式应用中的缓存方案总结
【1】本地缓存本地缓存即缓存和应用在同一个进程里,是基于JVM的缓存,应用生则生,应用死则亡。常见产品有Guava、Caffeine和Ehcache。三者对比如下:对比项GuavaCaffeineEhcache是否开源Y(Google)Y(apache)Y(Terracotta)级别轻量轻量重量级知名度Java开发者必备Spring5Hi...
2019-01-15 11:34:38 1583 1
转载 一文读懂Synchronized的实现原理
在多线程并发编程中 Synchronized 一直是元老级角色,很多人都会称呼它为重量级锁,但是随着 Java SE1.6 对 Synchronized 进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了 Java SE1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必...
2019-01-14 22:07:02 1249 1
原创 MySQL单表膨胀优化之MyCat分库分表
MySQL的单表达到多少量级时性能会下降?宽表在千万量级,窄表要好一点在1200W左右。但是MySQL单表达到1500W时性能开始急剧下降!这里先抛出一道面试题:Q1:一亿的用户表,怎么做优化?Q2:两个实体,用户和订单,数据量都过亿要求:1.从用户角度快速查询订单2.从订单角度快速查用户怎么设计表?【1】常见数据库中间件分布式数据库中间件有TDDL、Sharding-JDBC...
2019-01-14 13:37:42 4399 3
原创 SpringBoot2.0整合Redis高可用之Sentinel哨兵
Sentinel是什么?Redis高可用是什么?参考博文:Redis - 主从复制那些事与高可用sentinel 和深入学习Redis高可用之Sentinel相关概念。本篇博文分享的是一主二从三哨兵模式。至于为什么用三个哨兵,同第一段。本文是模拟环境,都是一个服务器上面。【1】POM文件和配置① pom文件&amp;amp;amp;amp;lt;parent&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;groupId
2019-01-12 18:54:30 25161 3
DubboOPS项目和管理后台jar包
2018-11-07
Struts2Spring4Hibernate4整合
2018-11-07
输入一段英文,去掉符号后将英文单词排序输出
2021-12-23
PHP课程设计图书管理系统、学生成绩管理系统、学生宿舍管理系统
2020-11-27
SpringBoot+thymeleaf+UEditor+不修改上传路径.zip
2020-02-04
jdk6-8String类
2019-11-20
dhcp+c3p0.zip
2019-10-27
Netty权威指南 第2版 带书签目录 高清完整版.pdf
2018-11-20
SpringBoot整合Dubbo和Zookeeper升级版
2018-11-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人