- 博客(22)
- 收藏
- 关注
原创 Docker基础知识学习与入门
1 Docker概述1.1 Docker简介Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker应用场景Web 应用的自动化打包和发布自动化测试和持续集成、发布在服务型环境中部署和调整数据库或其他的后台应用1.2 Dock
2020-09-29 13:42:25 604 1
原创 多线程与并发(三)——电商系统中的应用
1 常见问题1.1 线程协作1)Object中wait:让出锁,阻塞等待notify/notifyAll:唤醒wait的进程,注意,具体唤醒哪一个要看优先级,同优先级的看运气public class NotifyTest { public static void main(String[] args) { byte[] lock = new byte[0]; Thread t1 = new Thread(() -> { sy
2020-08-10 10:58:56 1773
原创 多线程与并发(二)——性能优化
1 锁优化1.1 synchronized优化synchronized使用起来非常简单,但是需要注意的是synchronized加锁的是什么维度。对象级别: public synchronized void test() { // TODO } public void test() { synchronized (this) { // TODO } }类级别: public synchr
2020-08-10 10:57:04 519
原创 多线程与并发(一)——多线程相关的基本理论与工具
1 线程池1.1 概念1.2 工作机制1.3 源码剖析1.4 注意点1.5 Executors工具1.1 概念2 锁2.1 概述2.2 实现方式2.3 锁的分类及详解乐观锁/悲观锁独享锁/共享锁分段锁可重入锁公平锁/非公平锁锁升级互斥锁/读写锁2.4 AQS概念原理实现方式源码分析场景案例3 原子操作(atomic)4 ThreadLocal5 Fork/Join6 volatile7 ConcurrentHashMap8并发容器...
2020-08-04 17:34:10 363
原创 浅拷贝与深拷贝简单介绍
1 浅拷贝1.1 介绍1.2 实现2 深拷贝2.1 介绍2.2 实现2.2.1 基于Cloneable实现2.2.2 基于序列化实现3 小结
2020-08-04 17:33:33 154
原创 JDK1.8新特性介绍(四)——日期时间新方式
1 SimpleDateFormat的那些坑1.1 效果演示2 DateTimeFormatter3 LocalDate、LocalTime、LocalDateTime介绍3.1 LocalDate3.1 LocalTime3.1 LocalDateTime
2020-08-04 17:32:54 176
原创 JDK1.8新特性介绍(三)——Optional
1 简介2 应用2.1 创建Optional对象2.2 基于Optional对象获取值2.2.1 isPresent()与ifPresent()应用与源码解析2.2.2 get()应用与源码解析2.2.3 orElseThrow()应用与源码解析2.2.4 map()应用与源码解析2.2.5 flatMap()应用与源码解析2.2.6 filter()应用与源码解析2.2.7 orElse()应用与源码解析2.2.8 orElseGet()应用与源码解析...
2020-08-04 17:32:18 226
原创 JDK1.8新特性介绍(二)——StampedLock锁
1 ReentrantReadWriteLock回顾2 StampedLock特点3 源码解析3.1 实现原理解析3.1.1 实例化3.1.2 获取锁过程分析3.1.3 释放锁过程分析3.2 乐观读锁解析4 使用示例
2020-08-04 17:31:43 366
原创 JDK1.8新特性介绍(一)——CompletableFuture应用与源码解析
1、异步任务创建在CompletableFuture中提供了四个静态方法用于创建异步任务runAsync(Runnable runnable)runAsync(Runnable runnable,Executor executor)supplyAsync(Supplie<U> supplier)supplyAsync(Supplier<U> supplier,Executor executor)1.1 runAsync()应用与源码解析根据源码可知,runAsync(
2020-07-30 17:11:23 786
原创 JMM内存模型-同步动作与安全发布
1 JMM内存模型由于存在编译器优化、Processor流水线优化、缓存优化等,我们编写的代码不一定是实际运行的代码,我们编写的代码顺序不一定是实际执行的顺序。所以我们需要学习JMM内存模型来解决上面的问题。1.1 什么是JMM内存模型就是多线程下对共享变量的一组读写规则。共享变量值是否在线程间同步代码可能的执行顺序需要关注的操作就有两种 Load、StoreLoad 就是从缓存读取到寄存器中,如果一级缓存中没有,就会层层读取二级、三级缓存,最后才是MemoryStore 就是从寄存器运算
2020-07-27 09:06:12 175
原创 JVM虚拟机调优指导(四)——类加载机制与编译优化
1 类文件结构1.1 MyDemo1.2 字节码1.2.1 字节码表1.2.2 魔数1.2.3 版本号1.3 常量池1.3.1 常量池容量计算1.3.2 常量类型和结构1.3.3 第一个常量1.3.4 第二个常量1.3.5 javap编译字节码1.4 描述符1.4.1 字段描述符1.4.2 方法描述符1.5 实例:字符串拼接2 类加载机制2.1 类加载时机2.2 类加载过程2.2.1 加载2.2.2 验证2.2.3 准备2.2.4 解析2.2.5 初始化2.3
2020-07-21 09:01:41 351 1
原创 JVM虚拟机调优指导(三)—— 垃圾回收与垃圾收集器
1 什么是垃圾回收1.1 C/C++语言的垃圾回收1.2 Java语言的垃圾回收2 什么样的对象需要回收2.1 引用计数法(了解)2.1.1 原理2.1.2 优缺点2.2 可达性分析算法(重点)2.3 对象的引用(了解)3 垃圾收集器算法3.1 标记清除法3.2 标记压缩清除法3.3 标记复制算法3.3.1 JVM中年轻代内存空间3.3.2 优缺点3.4 分代算法4 垃圾收集器4.1 串行垃圾收集器4.1.1 编写测试代码4.1.2 设置垃圾回收为串行收集器4.2 并
2020-07-17 16:02:46 188
原创 JVM虚拟机调优指导(二)——内存溢出及死锁问题的定位与分析
3 实战:内存溢出的定位与分析3.1 内存溢出与内存泄露3.2 模拟内存溢出3.3 运行测试3.4 导入到MAT工具中进行分析3.4.1 MAT工具介绍3.4.2 下载安装3.4.3 基本使用3.4.4 导入分析4 实战:死锁问题4.1 构造死锁补充知识点:产生死锁的条件4.2 运行并查询进程编号4.3 查看线程状态5 VisualVM5.1 基本使用5.1.1 启动5.1.2 查看本地进程5.1.3 查看CPU、内存、类、线程运行信息5.1.4 查看线程详情5.1.
2020-07-17 16:01:50 620
原创 JVM虚拟机调优指导(一)——JVM虚拟机内存管理模型与运行参数
1 JVM虚拟机内存管理1.1 JVM整体架构1.2 运行时数据区1.2.1 程序计数器1.2.1.1 编写代码1.2.1.2 查询class的汇编代码1.2.2 Java虚拟机栈1.2.2.1 局部变量表1.2.2.2 操作数栈1.2.2.3 动态连接1.2.2.4 方法出口1.2.2.5 实例1.2.3 本地方法栈1.2.4 Java堆区1.2.4.1 jdk1.7堆内存模型1.2.4.2 jdk1.8堆内存模型1.2.4.3 为什么要放弃1.7中的永久区1.2.5 方
2020-07-16 13:41:04 347
原创 设计模式(三)——电商系统业务中常用设计模式
1 代理模式1.1 文件服务应用1.2 分布式文件代理服务器实现1.2.1 实现分析1.2.2 代码实现2 享元模式2.1 用户信息共享实现2.1.1 会话跟踪分析2.1.2 代码实现3 装饰者模式3.1 结算价格嵌套运算3.1.1 订单价格结算分析3.1.2 价格结算实现4 策略模式4.1 根据VIP等级结算价格4.1.1 不用VIP优惠价格分析4.1.2 代码实现5 工厂模式5.1 支付收银5.1.1 支付渠道选中分析5.1.2 代码实现6 状态模式6.1 根
2020-07-09 23:29:03 8957 3
原创 设计模式(二)——利用设计模式自定义简单框架
1 架构中的设计模式1.1 自定义框架-适配器视图渲染1.1.1 流程分析1.1.2 适配器模式实现视图解析1.2 自定义框架-观察者模式1.2.1 流程分析1.2.2 监听文件加载并解析文件1.3 自定义框架-工厂模式1.3.1 流程分析1.3.2 工厂模式实现获取对象实例1.4 自定义模式-代理模式增强1.4.1 流程分析1.4.2 业务层代理模式增强...
2020-07-09 23:28:35 335
原创 设计模式(一)——几种常用设计模式简单剖析
这里写自定义目录标题1 认识设计模式1.1 设计模式简介1.2 设计原则1.3 设计模式分类2 设计模式常用案例2.1 单例模式2.2 多种单例模式讲解3 Spring设计模式剖析3.1 观察者模式3.2 代理模式3.2 工厂设计模式3.3 适配器模式4 架构中的设计模式4.1 自定义框架-适配器视图渲染4.2 自定义框架-观察者模式4.3 自定义框架-工厂模式4.4 自定义模式-代理模式增强欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何
2020-07-07 11:47:36 561
原创 MyBatis快速入门(一)
文章目录1、MyBatis的简介2、MyBatis的快速入门3、MyBatis的映射文件概述4、MyBatis的曾三改查操作5、MyBatis的核心配置文件概述6、MyBatis的相应API1、MyBatis的简介2、MyBatis的快速入门3、MyBatis的映射文件概述4、MyBatis的曾三改查操作5、MyBatis的核心配置文件概述6、MyBatis的相应API...
2020-06-22 09:08:21 209
原创 分布式版本控制工具——Git
1.Git概述1.1 Git历史最初Linux内核项目没有版本控制系统管理和维护代码,导致维护工作都花在了提交补丁和保存归档的繁琐事务上( 1991 2002 年间)。到2002年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了Linux 内核社区免费使用 BitKeeper的权利,于是Linux 开源社区决定开发出自己的版本系统。这就是Git的由来1.2 G
2020-06-18 10:32:46 404
原创 项目管理工具Maven
1.Maven简介2.安装配置3.Maven仓库种类4.目录结构常用命令生命周期依赖范围概念模型图Maven项目构建解决jar包冲突的方式Maven项目的聚合、拆分和依赖Maven私服的搭建和基本使用新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示
2020-06-16 10:28:49 150
原创 理解Session与Cookie
一、无状态的HTTP协议Web应用程序使用HTTP协议传输数据,而HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味这服务器无法从连接上跟踪会话。会话指用户打开浏览器登录网站到关闭浏览器的一系列动作。要跟踪用户的整个会话,需要引入一种机制。常用的会话跟踪技术是Cookie和Session,它们可以弥补HTTP协议无状态的不足。...
2019-12-11 16:48:26 94
原创 java导入导出excel文件
java导入导出excel文件我们项目中经常用到导入导出excel文件功能,现在汇总整理下导入导出核心工具类。导入导出依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version&g...
2019-11-12 09:40:28 344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人