- 博客(22)
- 收藏
- 关注
原创 Docker基础知识学习与入门
1 Docker概述 1.1 Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker应用场景 Web 应用的自动化打包和发布 自动化测试和持续集成、发布 在服务型环境中部署和调整数据库或其他的后台应用 1.2 Dock
2020-09-29 13:42:25
765
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
1938
原创 多线程与并发(二)——性能优化
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
628
原创 多线程与并发(一)——多线程相关的基本理论与工具
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 ThreadLocal 5 Fork/Join 6 volatile 7 ConcurrentHashMap 8并发容器 ...
2020-08-04 17:34:10
463
原创 浅拷贝与深拷贝简单介绍
1 浅拷贝 1.1 介绍 1.2 实现 2 深拷贝 2.1 介绍 2.2 实现 2.2.1 基于Cloneable实现 2.2.2 基于序列化实现 3 小结
2020-08-04 17:33:33
214
原创 JDK1.8新特性介绍(四)——日期时间新方式
1 SimpleDateFormat的那些坑 1.1 效果演示 2 DateTimeFormatter 3 LocalDate、LocalTime、LocalDateTime介绍 3.1 LocalDate 3.1 LocalTime 3.1 LocalDateTime
2020-08-04 17:32:54
265
原创 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
306
原创 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
451
原创 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
929
原创 JMM内存模型-同步动作与安全发布
1 JMM内存模型 由于存在编译器优化、Processor流水线优化、缓存优化等,我们编写的代码不一定是实际运行的代码,我们编写的代码顺序不一定是实际执行的顺序。所以我们需要学习JMM内存模型来解决上面的问题。 1.1 什么是JMM 内存模型就是多线程下对共享变量的一组读写规则。 共享变量值是否在线程间同步 代码可能的执行顺序 需要关注的操作就有两种 Load、Store Load 就是从缓存读取到寄存器中,如果一级缓存中没有,就会层层读取二级、三级缓存,最后才是Memory Store 就是从寄存器运算
2020-07-27 09:06:12
271
原创 JVM虚拟机调优指导(四)——类加载机制与编译优化
1 类文件结构 1.1 MyDemo 1.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
444
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
260
原创 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 VisualVM 5.1 基本使用 5.1.1 启动 5.1.2 查看本地进程 5.1.3 查看CPU、内存、类、线程运行信息 5.1.4 查看线程详情 5.1.
2020-07-17 16:01:50
748
原创 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
431
原创 设计模式(三)——电商系统业务中常用设计模式
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
9375
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
415
原创 设计模式(一)——几种常用设计模式简单剖析
这里写自定义目录标题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
693
原创 MyBatis快速入门(一)
文章目录1、MyBatis的简介2、MyBatis的快速入门3、MyBatis的映射文件概述4、MyBatis的曾三改查操作5、MyBatis的核心配置文件概述6、MyBatis的相应API 1、MyBatis的简介 2、MyBatis的快速入门 3、MyBatis的映射文件概述 4、MyBatis的曾三改查操作 5、MyBatis的核心配置文件概述 6、MyBatis的相应API ...
2020-06-22 09:08:21
277
原创 分布式版本控制工具——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
552
原创 项目管理工具Maven
1.Maven简介 2.安装配置 3.Maven仓库种类 4.目录结构 常用命令 生命周期 依赖范围 概念模型图 Maven项目构建 解决jar包冲突的方式 Maven项目的聚合、拆分和依赖 Maven私服的搭建和基本使用 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示
2020-06-16 10:28:49
200
原创 理解Session与Cookie
一、无状态的HTTP协议 Web应用程序使用HTTP协议传输数据,而HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味这服务器无法从连接上跟踪会话。会话指用户打开浏览器登录网站到关闭浏览器的一系列动作。要跟踪用户的整个会话,需要引入一种机制。常用的会话跟踪技术是Cookie和Session,它们可以弥补HTTP协议无状态的不足。 ...
2019-12-11 16:48:26
135
原创 java导入导出excel文件
java导入导出excel文件 我们项目中经常用到导入导出excel文件功能,现在汇总整理下导入导出核心工具类。 导入导出依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version&g...
2019-11-12 09:40:28
392
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅