JVM-线程堆栈等数据分析
参考文献
JVM线程模型
线程创建和销毁
在语言层面,线程对应的类是java.lang.Thread,启动方法为Thread#start()。
在Java线程启动时会创建底层线程(native Thread,在任务执行完成后会自动回收。
JVM中所有线程都交给操作系统来负责调度,以将线程分配到可用的 CPU 上执行
线程状态
从 JVM的角度看,线程状态主要包括 4 种:
_thread_new:正在初始化的新线程
_thread_in_Java:正在执行 Java 代码的线程
_thread_in_vm:在 JVM 内部执行的线程
_thread_blocked:由于某种原因被阻塞的线程(例如获取锁、等待条件、休眠、执行阻塞的 I/O 操作等等)
JVM内部线程
JVM 内部线程主要分为以下几种:
VM 线程: 单例的VMThread对象,负责执行 VM 操作,下文将对此进行讨论;
定时任务线程: 单例的WatcherThread对象,模拟在 VM 中执行定时操作的计时器中断;
GC 线程: 垃圾收集器中,用于支持并行和并发垃圾回收的线程;
编译器线程: 将字节码 ...
JVM-参数设置说明
参考文献
Guide to the Most Important JVM Parameters
Java HotSpot VM Options
Tuning JVM Garbage Collection for Production Deployments
Convert GC Logging Flags to Xlog
The java Command
JVM GC配置指南
Java容器化参数配置最佳实践
JVM参数说明
123java [options] classname [args]java [options] -jar filename [args]
[options] 部分称为JVM 选项,对应 IDE 中的 VM options, 可用 jps -v 查看.
[args] 部分是指传给main函数的参数, 对应 IDE 中的 Program arguments, 可用 jps -m 查看.
Java 和 JDK 内置的工具,指定参数时都是一个 -,不管是长参数还是短参数.有时候,JVM 启动参数和 Java 程序启动参数,并没必 ...
分布式-概念
参考文献
大规模分布式系统架构与设计实战-彭渊
从Paxos到Zookeeper 分布式一致性原理与实践
极客时间- 分布式技术原理算法解析
CoreOS 实战:剖析 etcd
Raft动画演示
分布式事务之深入理解什么是2PC、3PC及TCC协议?
分布式概览
分布式起源
单兵模式: 单机模式
单机模式是指,所有应用程序和数据均部署在一台电脑或服务器上,由一台计算机完成所有的处理.
主要问题: 性能受限,存在单点失效问题.
游击队模式: 数据并行或数据分布式
为了解决单机模式的问题,并行计算得到了发展,进而出现了数据并行(也叫做数据分布式)模式.
并行计算采用消息共享模式使用多台计算机并行运行或执行多项任务,核心原理是每台计算机上执行相同的程序,将数据进行拆分放到不同的计算机上进行计算.
好处: 可以利用多台计算机并行处理多个请求,使得我们可以在相同的时间内完成更多的请求处理,解决了单机模式的计算效率瓶颈问题.
主要的问题: 对提升单个任务的执行性能及降低时延无效.
相同的应用部署到不同的服务器上,当大量用户请求过来,如何能比较均衡地转发到不同的应用服务器上(负载均衡) ...
MyBatis-操作技巧
参考文献
Insert Statements
using foreach to do batch insert with mybatis
批量插入
MySQL-常用SQL汇总
参考文献
MySQL按日期分组统计(按天统计,按月统计)
mysql查询今天、昨天、7天、近30天、本月、上一月 数据
SQL进阶教程–[日] MICK
Divided We Stand: The SQL of Relational Division
High Performance Relational Division in SQL Server
按日期分组统计
按月统计
1234567SELECT date_format( create_time, '%Y-%m' ) date, count(*) numFROM table_name GROUP BY date_format( create_time, '%Y-%m' );
按天统计
1234567SELECT date_format( create_time, '%Y-%m-%d' ) date, count(*) num FROM table_name GROUP BY date_format( create_time, '%Y-%m-%d ...
Spring源码-阅读笔记
参考文献
Spring源码深度解析-郝佳
极客时间-Spring编程常见错误50例-傅健
环境说明
spring-framework 5.3x
Spring容器实现
DefaultListableBeanFactory
XmlBeanFeactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,而对于XmlBeanFeactory与DefaultListableBeanFactory不同的地方是在于XmlBeanFactory中使用了自定义的XML读取器XMLBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口.
类图中各个类的作用
...
Java-Mail操作
参考文献
邮件基本概念及发送方式
RFC1869文档
RFC2821文档
邮件的基本概念
邮件服务器
邮件服务器是一种用来负责电子邮件收发管理的设备,同时也是电子邮件系统中的核心内容.
邮件服务器是有发送邮件SMTP服务器和接收邮件POP3服务器协同工作,并且为用户提供接收邮件的功能.
邮件服务器比一般的免费邮箱更加安全,一直被企业公司使用.
电子邮箱
电子邮箱也称为E-mail地址,比如xx@qq.com、xx@163.com。用户能通过E-mail地址标识自己发送的电子邮件,同时也可以通过这个地址接收别人发来的电子邮件。
电子邮箱需要到邮件服务器进行申请,也就是说,电子邮箱其实就是用户在邮件服务器上申请的账户。邮件服务器会把接收到的邮件保存到为该账户所分配的邮箱空间中,用户通过用户名密码登录到邮件服务器查收该地址已经收到的邮件。一般来讲,邮件服务器为用户分配的邮箱空间是有限的。
邮件客户端
邮件客户端就是我们平常在上面进行邮件发送的网站或者应用,比如常见的FoxMail、雷鸟、outlook、163、mesign等;
通常使用IMAP/APOP/POP3/SMTP协议 ...
设计模式-结构型-组合模式(Composite)
参考文献
https://www.oodesign.com/composite-pattern
https://refactoringguru.cn/design-patterns/composite
组合模式
允许将对象组织成树形结构,以表示“整体-部分”层次关系,并且能够以统一的方式处理单个对象和组合对象.
组件
组件(Component):抽象类或接口,定义了组合中所有对象共有的操作,可以是抽象类或接口.它可以包含对子组件进行管理的方法,比如添加、删除、获取子组件等.
叶子节点(Leaf):代表组合中的叶子对象,叶子节点没有子节点,实现了组件的操作方法.
容器节点(Composite):代表组合中的容器对象,可以包含子节点,实现了组件的操作方法.容器节点可以存储叶子节点和其他容器节点,形成树形结构.
客户端(Client):使用组合模式的外部代码,通过组件接口操作组合对象.客户端通常无法区分处理的是单个对象还是组合对象,因为它们都遵循同样的接口
实现方式
使用抽象类或接口定义组件(Component),其中包含对子组件的管理方法,如添加、删除、获取子组件等.
创建叶 ...
设计模式-行为型-责任链模式(Chain of Responsibility)
参考文献
https://www.oodesign.com/chain-of-responsibility-pattern
https://java-design-patterns.com/patterns/chain-of-responsibility/
https://refactoringguru.cn/design-patterns/chain-of-responsibility
责任链模式
允许你将请求沿着处理者链进行发送. 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者.
组件
Request: 责任链中的请求对象
1public class Request{}
Handler: 定义处理请求的接口
1234public interface Handler{ boolean shouldSkip(Request request); boolean handle(Request request);}
RequestHandler: 实际处理请求的类
如果它可以处理请求,则进行处理,否则将 ...
SpringBoot-Yaml配置
参考文献
YAML格式
以空格的缩进程度来控制层级关系。空格的个数并不重要,只要左边空格对齐
则视为同一个层级。注意不能用 tab 代替空格。且大小写敏感。支持字面值,
对象,数组三种数据结构,也支持复合结构。
字面值:字符串,布尔类型,数值,日期。字符串默认不加引号,单引号会转
义特殊字符。日期格式支持 yyyy/MM/dd HH:mm:ss
对象:由键值对组成,形如 key:(空格)value 的数据组成。冒号后面的空格是
必须要有的,每组键值对占用一行,且缩进的程度要一致,也可以使用行内写
法: {k1: v1, ....kn: vn}
数组:由形如 -(空格)value 的数据组成。短横线后面的空格是必须要有的,每
组数据占用一行,且缩进的程度要一致,也可以使用行内写法: [1,2,...n]
复合结构:上面三种数据结构任意组合
示例
12345678910userinfo: age: 25 name: myjszl active: true created-date: 2018/03/31 16:54:30 map: {k1: v1 ...