- 博客(155)
- 资源 (5)
- 收藏
- 关注
原创 创建型设计模式-单例设计模式和应用
创建型设计模式-单例设计模式和应用单例设计模式单例设计模式:单例的意思只包含一个对象被称为但是的特殊类通过单例设计模式可以保证系统种,应用该模式的类只有一个对象实例使用场景:业务系统全局只需要一个对象实例,比如发号器。redis链接对象等Spring IOC容器中的bean默认就是单例Spring boot 中的controller、service、dao层中通过@Autowire的依赖注入对象默认都是单例模式分类:懒汉:所谓的懒加载,延迟创建对象。饿汉:与懒汉相
2021-11-17 15:49:59
756
原创 Java设计模式的精髓
设计模式的精髓到底是什么设计模式的六大原则设计模式是站在设计原则的基础之上的,所以在学习设计模式之前,有必要对这些设计原则先做⼀下了解软件设计开发原则为了让的代码更好重用性,可读性,可靠性,可维护性诞生出了很多软件设计的原则,这6⼤设计原则是我们要掌握的将六大原则的英⽂首字母拼在⼀起就是SOLID(稳定的),所以也称之为SOLID原则单一职责原则一个类只负责一个功能领域中的相应责任,就一个类而言,应该只有一个引起他变换的原因。是实现高内聚、低耦合的指导方针高内聚:尽可能类
2021-11-15 20:16:54
375
原创 java阻塞队列BlockingQueue讲解---生产者消费者模型
java阻塞队列BlockingQueue阻塞队列BlockingQueue前言认识BlockingQueueBlockingQueue的核心方法:常见BlockingQueueArrayBlockingQueueLinkedBlockingQueueDelayQueuePriorityBlockingQueueSynchronousQueue小结阻塞队列BlockingQueue前言在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过
2021-09-25 18:06:27
778
原创 Java虚拟机内存分配
Java虚拟机内存分配Java虚拟机内存分配探索堆内存到底是怎么分配大对象的分配和基本分配一样吗?逃逸分析和栈上分配Java虚拟机内存分配探索堆内存到底是怎么分配简介:堆内存分配方式,分配规则讲解Java堆内存区域的划分以及作用讲解对象分配的规则有哪些对象主要分配在新生代的 Eden 区上如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配少数情况下也可能会直接分配在老年代中GC参数指定垃圾回收-Xms20 M、-Xmx20 M、-Xmn1 0 M 这 3 个
2021-07-25 11:09:12
265
原创 JVM垃圾收集器
JVM垃圾收集器JVM垃圾收集器第1集 Serial收集器内容精讲ParNew收集器内容精讲Parallel Scavenge收集器你不得不懂的CMS收集器你不得不懂的G1收集器JVM垃圾收集器第1集 Serial收集器内容精讲简介:serial垃圾收集器讲解hashMap list,hashcode是什么?收集算法是内存收到的方法论,垃圾回收器是内存回收的具体实现。Serial是一个单线程的垃圾收集器serial垃圾收集器的特点“Stop The Wor
2021-07-24 14:31:20
201
原创 jvm垃圾回收算法
jvm垃圾回收算法jvm垃圾回收算法你不得不懂的GC垃圾回收?对象存活算法引用计数法对象存活算法可达性分析算法内功之剖析标记清除算法内功之剖析复制算法剖析标记整理算法与分代收集算法jvm垃圾回收算法你不得不懂的GC垃圾回收?简介:GC垃圾回收讲解战略意义 能做出一个需求的同时也要懂得其对应的战略意义为什么要垃圾回收?Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才
2021-07-24 14:27:03
202
原创 Java虚拟机-你真的了解对象吗
Java虚拟机-你真的了解对象吗Java虚拟机-你真的了解对象吗?你的对象是怎么来的?第2集 new这么多对象,你知道它们的结构吗?第3集 你是怎么访问你的对象的Java虚拟机-你真的了解对象吗?你的对象是怎么来的?简介:Java程序员不可不知的对象创建底层步骤细节对象创建的流程步骤包括哪些:虚拟机遇到一条new指令时,首先检查这个对应的类能否在常量池中定位到一个类的符号引用判断这个类是否已被加载、解析和初始化为这个新生对象在Java堆中分配内存空间,其中Ja
2021-07-23 11:21:58
165
原创 Java运行时数据区
java运行时数据区java运行时数据区大厂高频面试题Java内存区域分布与概述Java内存区域程序计算器Java内存区域JAVA虚拟机栈Java内存区域本地方法栈Java内存区域Java堆Java内存区域方法区带你用上神秘的运行时常量池java运行时数据区大厂高频面试题Java内存区域分布与概述简介:JVM内存模型的概述Java语言为甚么优势巨大,一处编译随处运行Java的另外一个优势自从内存管理机制之下,不再需要为没一个new操作去写配对的内存分配和回收等代码,不容易出现内存泄漏和
2021-07-23 11:02:42
184
原创 分布式缓存Redis6.X新特性讲解拓展
分布式缓存Redis6.X新特性讲解拓展 分布式缓存Redis6.X新特性讲解拓展新版Redis6核心特性-多线程介绍新版Redis6核心特征介绍-多线程新版Redis6核心特性-Access ControlList权限控制引入ACL(Access Control List)新版Redis6核心特性-Client-SideCaching 客户端缓存新版Redis6特性讲解默认模式广播模式分布式缓存Redis6.X新特性讲解拓展新版Redis6核心特性-多线程介绍新版Redis6核心特征介绍-多线程
2021-07-19 14:23:23
376
1
原创 Redis6配置主从复制+读写分离
[toc]Redis6配置主从复制+读写分离Redis5主从复制+读写分类介绍背景目标redis主从架构介绍Linux服务器-Redis6.X 主从复制 一主二从架构环境准备配置创建主配置文件redis.conf创建两个从配置文件redis.confLinux服务器-Redis6.X 主从复制 一主二从架构启动Redis主从架构-复制读写分离原理解析主从复制特点加速复制主从断开重连Redis6配置主从复制+读写分离Redis5主从复制+读写分类介绍背景目标redis主从架构介绍Linux服务器-Redis6
2021-07-17 14:36:08
1368
1
原创 分布式缓存面试题+SpringCache解决方案
分布式缓存面试题+SpringCache解决方案 分布式缓存面试题+SpringCache解决方案分布式缓存必考题之缓存击穿+解决方案缓存击穿预防SpringCache解决方案分布式缓存必考题之缓存雪崩+解决方案缓存雪崩(多个热点key过期)分布式缓存必考题之缓存穿透+解决方案缓存穿透(查询不存在的数据)分布式缓存面试题+SpringCache解决方案分布式缓存必考题之缓存击穿+解决方案缓存击穿缓存击穿(某个热点Key缓存失效)缓存中没有数据但数据库中有数据,加入是热点数据,那么key在缓存
2021-07-15 14:13:30
684
1
原创 SpringCache常用注解介绍+框架案例实战
SpringCache常用注解介绍+框架案例实战 SpringCache常用注解介绍+框架案例实战SpringCache框架常用之CacheableCacheable注解案例spEL表达式SpringCache框架自定义CacheManager配置和过期时间修改redis缓存序列化器和配置manager过期时间SpringCache框架自定义缓存KeyGenerator定义使用SpringCache框架常用之CachePut实战CachePut案例SpringCache框架常用之CacheEvict实战Ca
2021-07-15 13:15:45
1281
2
原创 电商平台-购物车Redis实现案例-Hash数据结构最佳实践
电商平台-购物车Redis实现案例-Hash数据结构最佳实践 电商平台-购物车Redis实现案例-Hash数据结构最佳实践背景购物车常见实现方式购物车数据结构介绍对应Redis里面的存储高并发下的电商购物车实战-相关VO类和数据准备电商购物车实现案例加入购物车接口开发电商平台-购物车Redis实现案例-Hash数据结构最佳实践背景电商购物⻋实现,⽀持买多件商品,每个商品可以买不同数量支持高性能处理购物车常见实现方式实现方式一:存储到数据库性能存在瓶颈实现方式二:前端本地储存-l
2021-07-13 14:32:31
928
原创 分布式锁之Redis6+Lua脚本实现原生分布式锁
分布式锁之Redis6+Lua脚本实现原生分布式锁分布式锁之Redis6+Lua脚本实现原生分布式锁分布式核心技术—关于高并发下分布式锁分布式锁核心知识介绍背景避免共享资源并发操作导致数据问题分布式锁应该考虑的东西基于Redis实现分布式锁详述基于Redis实现分布式锁的几种坑实现分布式锁基于Redis实现分布式锁存在的问题分布式锁lua脚本+redis原生代码编写上文说了redis做分布式锁存在的问题代码实现分布式锁之Redis6+Lua脚本实现原生分布式锁分布式核心技术—关于高并发下分布式锁分布式
2021-07-12 16:28:07
618
2
原创 分布式缓存Redis6常见数据结构+指令
分布式缓存Redis6常见数据结构+指令分布式缓存Redis6常见数据结构+指令1.Redis6常见数据结构概览2.Redis6数据结构之String类型介绍和应用场景数据结构介绍3.Redis6数据结构之List类型介绍和应用场景数据结构介绍:4.Redis6数据结构之Hash类型介绍和应用场景数据结构介绍:5.Redis6数据结构之Set类型介绍和应用场景数据结构介绍:6.Redis6数据结构之Sorted Set类型介绍和应用场景数据结构介绍:分布式缓存Redis6常见数据结构+指令1.Redis
2021-07-09 14:07:11
362
3
原创 jvm与并发
jvm与并发jvm与并发1.jvm内存模型2.先行发生原则 happens-before3.指令重排序jvm与并发1.jvm内存模型硬件内存模型处理器—>高速缓存—>缓存一致性协议—>主存java内存模型线程<---->工作内存<---->save和load<---->内存java内存间的交互操作(1)lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态(2)unlock(解锁):作用于主
2021-07-08 15:16:50
308
原创 Java线程池及Executor框架
Java线程池及Executor框架Java线程池及Executor框架1.为什么要使用线程池?2.创建线程池及其使用3.Future与Callable、FutureTask4.线程池的核心组成部分及其运行机制5.线程池拒绝策略6.Executor框架7.线程池的使用建议Java线程池及Executor框架1.为什么要使用线程池?诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过
2021-07-08 13:31:30
219
原创 Java多线程—常用并发工具类
java多线程—常用并发工具类java多线程—常用并发工具类CountDownLatchCyclicBarrierReadWriteLockSemaphoreExchangerjava多线程—常用并发工具类CountDownLatchCountDownLatch倒计时锁存器CountDownLatch countDownLatch = new CountDownLatch(3);await(),进入等待的状态countDown(),计数器减一应用场景:启动三个线程计
2021-07-06 21:15:18
1978
1
原创 Java原子类
Java原子类Java原子类什么是原子类为什么要有原子类java8新增原子类原子更新基本类型原子更新数组类型原子更新属性原子更新引用Java原子类什么是原子类一度认为原子是不可分割的最小单位,故原子类可以认为其操作都是不可分割为什么要有原子类对多线程访问同一个变量,我们需要加锁,而锁是比较消耗性能的,JDk1.5之后,新增的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式,这些类同样位于JUC包下的atomic包下,发展到JDk1.8,该包下共有17个类,囊括了原子更新基
2021-07-04 14:27:38
275
2
原创 Java线程通信—管道流、join、ThreadLocal、Condition的使用
Java线程通信—管道流、join、ThreadLocal、Condition的使用Java线程通信—管道流、join、ThreadLocal、Condition的使用wait、notify、notifyAll何时使用wait和sleep的区别注意点notify跟notifyAll的区别等待通知经典模型之生产者消费者代码实现使用管道流进行通信代码实现Thread.join通信代码实现ThreadLocal的使用代码实现Java线程通信—管道流、join、ThreadLocal、Condition的使用w
2021-07-04 11:50:10
114
原创 详解Java反射机制
详解Java反射机制详解Java反射机制通过案例体会反射的好处案例为了提高代码的扩展性---》面向对象特性:多态利用反射实现上述功能:通过概念再体会反射反射补充:1、动态语言2、静态语言Class类的理解创建类获取字节码的方法可以作为Class类的实例的种类Class类的具体的实例验证补充完善之前的类获取构造器和创建对象获取属性并赋值获取方法并调用获取类的所在包,接口和注释详解Java反射机制通过案例体会反射的好处案例美团外卖 —>付款 —》要么用微信支付 要么用支付宝支付//接口的制
2021-07-03 14:56:57
247
1
原创 Java线程通信问题
Java线程通信问题Java线程通信问题场景代码结果展示代码出现问题解决数据错乱问题利用同步代码块解决问题利用同步方法解决问题解决交替输出问题原理代码原理线程完整的生命周期图使用Lock锁的情景Java线程通信问题场景应用场景:生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,
2021-07-03 14:36:21
133
1
原创 Java处理线程安全问题
Java处理线程安全问题Java处理线程安全问题方法1:同步代码块同步代码块演示1同步代码块演示2同步监视器总结方法2:同步方法代码演示总结方法3:Lock锁Lock锁引入代码演示Lock和synchronized的区别优先使用顺序线程同步的优缺点对比:可能造成死锁代码演示Java处理线程安全问题方法1:同步代码块同步代码块演示1public class BuyTicketThread implements Runnable { int ticketNum = 10; @Overri
2021-07-02 15:52:45
266
原创 基于UDP的Java网络套接字编程
基于UDP的Java网络套接字编程基于UDP的Java网络编程TCPUDP功能分解1—单向通信实现功能分解2—双向通信实现分解功能3—加入完整的异常处理实现分解功能4—正常通信实现基于UDP的Java网络编程TCPTCP:客户端:Socket 程序感受到的 使用流 :输出流服务器端: ServerSocket —>Socket 程序感受到的 使用流 :输入流(客户端和服务器端地位不平等。)
2021-07-02 10:30:42
287
原创 基于TCP的Java网络套接字编程
基于TCP的Java网络编程基于TCP的Java网络编程功能分解1—单向通信实现功能分解2—双向通信实现功能分解3—对象传输实现功能分解4—加入完整的异常处理实现功能分解5:多线程接收用户请求更改服务器代码基于TCP的Java网络编程功能分解1—单向通信功能:客户端发送一句话到服务器实现客户端package com.ruan.test02;import java.io.DataOutputStream;import java.io.IOException;import java.
2021-07-01 12:20:24
832
原创 基于TCP的网络编程-单向通信
基于TCP的网络编程-单向通信基于TCP的网络编程-单向通信网络通信原理-套接字套接字实际作用Java网络编程功能分解-单向通信实现测试基于TCP的网络编程-单向通信网络通信原理-套接字套接字套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界
2021-07-01 07:25:08
930
2
原创 java网络编程-引入
java网络编程网络编程的引入网络编程通信两个重要的要素通信协议TCP协议(可靠的)三次握手四次挥手UDP协议(不可靠)网络编程的引入网络编程把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。设备之间在网络中进行数据的传输,发送/接收数据。通信两个重要的要素IPPORT域名:www.baidu.com ------>DNS服务器解析 ----&g
2021-06-30 20:00:50
262
4
原创 java多线程并发编程—“锁“
文章目录java多线程并发编程—"锁"锁的分类深入理解Lock接口Lock的使用Lock与synchronized的区别实现了lock接口的锁各个方法的简介实现属于自己的锁AbstractQueuedSynchronizer浅析java多线程并发编程—“锁”锁的分类自旋锁线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁的上下文切换不值得。jvm实现,使线程在没有获得锁的时候,不被挂起,转而执行空循环,循环几次后,如果还没有获得锁,则被挂起。阻塞锁阻塞锁改变了线程的运行状态
2021-06-30 19:59:04
174
1
原创 java线程安全问题
java线程安全问题java线程安全问题线程安全性什么是线程安全什么是线程不安全从字节码角度剖析线程不安全操作原子性操作什么是原子性操作深入理解synchronized内置锁互斥锁volatile关键字及其使用场景使用场景单例与线程安全如何避免线程安全性问题线程安全性问题成因如何避免java线程安全问题线程安全性什么是线程安全当多个线程访问某个类,不管运行时环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类为线程安全
2021-06-28 17:49:38
118
原创 linux下的shell脚本编程
linux下的shell脚本编程linux下的shell脚本编程shell编程语言的介绍介绍shell脚本的重要性与应用场景shell简介常见的脚本语言:shell的优点shell应用场景:shell编写第一个脚本编写第一个shell脚本编写执行企业实战之shell脚本与crontab定时器的运用介绍实际工作中crontab定时器的重要性crond服务crond服务的启停命令crontab定时器的使用crontab的例子利用shell脚本企业实战nginx日志切割演练企业中的nginx服务器日志定时切割需求
2021-06-26 20:41:23
385
1
原创 mysql不得不学的sql语句优化思路
mysql不得不学的sql语句优化思路mysql不得不学的sql语句优化思路mysql的慢查询日志开启与问题定位开启慢查询日志与语句查询问题定位mysql的sql语句执行过程解析mysql语句优化的几个小建议mysql不得不学的sql语句优化思路mysql的慢查询日志开启与问题定位开启慢查询日志与语句查询问题定位第一步:查看是否已经开启了慢查询日志mysql> show variables like 'slow%';+---------------------+------------
2021-06-20 12:24:57
143
原创 mysql必备核心知识之索引与存储引擎的介绍
mysql必备核心知识之索引与存储引擎的介绍 mysql必备核心知识之索引与存储引擎的介绍mysql的存储引擎介绍什么是数据库存储引擎如何查看引擎建表时指定引擎修改表的引擎MyISAM与InnoDB的区别总结:什么时候选择什么引擎比较好mysql必备知识之常用索引精讲什么是索引索引的优点索引的缺点索引的常见类型mysql必备核心知识之普通索引与唯一索引什么是普通索引?什么是唯一索引?如何创建普通索引或唯一索引创建表时创建索引直接为表添加索引直接创建索引查看索引如何删除索引mysql必备核心知识之主键索引什么
2021-06-19 19:31:28
143
原创 mysql的核心知识之事务实战,视图,触发器,以及存储过程
tocmysql的核心知识之事务实战,视图,触发器,以及存储过程mysql 必备核心知识之事务的详细解析什么是事务 ?数据库事务通常指对数据库进行读或写的一个操作过程。有两个目的,第一个是为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法;第二个是当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。事务的特性(ACID)原子性(Atomicity):事务必须是原子工作单元,一个事务中的所有
2021-06-18 18:48:26
163
原创 mysql核心知识之DCL数据控制语言(对用户权限的设置)
mysql核心知识之DCL数据控制语言(对用户权限的设置) mysql核心知识之DCL数据控制语言(对用户权限的设置)精讲数据控制语言如何限制用户的各种权限什么是DCL数据控制语言?mysql限制root用户指定ip登录详解如何从安全角度出发限制root用户指定ip登录查看root用户可以在哪台机器登录修改MySQL库中的user表刷新权限mysql必备知识之用户密码忘记密码如何登录以及如何修改密码修改密码的三种方法忘记密码mysql实战系列之创建新用户并限制ip网段登录讲解如何创建新用户与删除用户并限
2021-06-15 19:20:42
298
1
原创 mysql核心知识之DQL数据查询语言与项目高级查询实例
mysql核心知识之DQL数据查询语言与项目高级查询实例mysql核心知识之DQL数据查询语言与项目高级查询实例详述对数据表中的数据进行各种查询,以及项目查询实例创建表mysql查询子句之一where条件查询简单查询精确查找模糊条件查询范围查询离散查询清楚重复值统计查询(聚合查询)mysql查询子句之二group by分组查询(分组)mysql查询子句之三having条件查询(筛选)mysql查询子句之四order by排序查询(排序)mysql查询子句之五limit限制查询(限制)mysql查询之exis
2021-06-14 15:27:04
342
原创 MySQL核心知识之DML数据操纵语言
MySQL核心知识之DML数据操纵语言MySQL核心知识之DML数据操纵语言MySQL深入剖析表数据新增创建表普通的插入表数据蠕虫复制(将一张表的数据复制到另一张表中)建表复制一次性插入多个数据MySQL深入刨析表数据的修改以及删除修改(更新)删除注意事项mysql核心知识之中文乱码问题修改库的字符集编码修改表的字符集编码MySQL核心知识之DML数据操纵语言MySQL深入剖析表数据新增创建表某公司员工表create table employee( empno int primary key c
2021-06-13 12:16:06
386
1
原创 MySQL核心知识之DDL数据定义语言
文章目录MySQL核心知识之DDL数据定义语言Linux操作系统安装MySQL5.7数据库Linux操作系统安装MySQL5.7数据库MySQL数据库必备知识之创建、查看及使用/切换直接创建数据库db1查看当前在那个数据库进入数据库的操作判断数据库是否存在,如果不存在并创建数据库db2;创建数据库并指定字符集为gbk;查看某个数据库的字符集查看当前MySQL使用的字符集MySQL创建表之常用数据类型数据类型是什么MySQL常见数据类型整数型浮点型定点型字符串类型时间型MySQL数据表必备知识之创建表语法约束
2021-06-13 09:26:36
918
4
原创 java数据结构与算法—“堆排序”
文章目录java数据结构与算法—“堆排序”堆排序堆排序基本介绍堆排序基本思想堆排序步骤图解说明代码实现java数据结构与算法—“堆排序”堆排序堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序, 它的最坏, 最好, 平均时间复杂度均为 O(nlogn), 它也是不稳定排序。堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的
2021-06-07 13:48:19
230
2
原创 java数据结构之“树结构的基础部分”
文章目录java数据结构之“树结构的基础部分”二叉树为什么需要树这种数据结构数组存储方式的分析链式存储方式的分析树存储方式的分析树示意图树的常用术语二叉树的概念二叉树遍历的说明二叉树遍历应用实例(前序,中序,后序)应用实例的说明和思路代码实现二叉树-查找指定节点代码实现二叉树-删除节点要求java数据结构之“树结构的基础部分”二叉树为什么需要树这种数据结构数组存储方式的分析优点: 通过下标方式访问元素, 速度快。 对于有序数组, 还可使用二分查找提高检索速度。缺点: 如果要检索具体某个值
2021-06-03 20:37:23
540
7
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人