学习笔记
文章平均质量分 87
FrozenPenguin
冰冻三尺,非一日之寒;水滴石穿,非一日之功。
展开
-
「设计模式」继承与组合的区别与联系?为什么要多用组合少用继承?
在面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。为什么不推荐使用继承?组合相比继承有哪些优势?如何判断该用组合还是继承?原创 2022-11-10 07:00:00 · 2436 阅读 · 0 评论 -
「设计模式」原型模式
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。对象的创建非常复杂,可以使用原型模式快捷的创建对象。性能和安全要求比较高。原型模式没有复杂的继承体系,只需要使需要具有拷贝功能的类实现Cloneable接口并重写clone()方法即可。原创 2022-11-07 07:00:00 · 1811 阅读 · 0 评论 -
「深入理解」缓存更新策略及缓存不一致问题解决方案
缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。原创 2022-11-06 06:45:00 · 2389 阅读 · 0 评论 -
「mysql进阶」索引的使用规则、设计原则
数据库中的索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。MySQL在300万条记录左右性能便会开始逐渐下降,所以当遇到大数据量时建立索引是非常有必要的。原创 2022-11-03 09:00:00 · 2706 阅读 · 0 评论 -
「设计模式」建造者模式
建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在建造者模式的结构中引入了一个指挥者类,该类的作用主要有两个:一方面它隔离了客户与生产过程;另一方面它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。原创 2022-11-02 13:00:00 · 1817 阅读 · 0 评论 -
「设计模式」工厂模式总结
在本专题的前几篇文章中介绍了、以及。本文将会在前面几篇文章的基础上,总结下三种工厂模式的区别及联系。一方面是回顾下之前的内容,另外一方面是再次加深对工厂模式的理解。原创 2022-11-02 08:30:00 · 1764 阅读 · 0 评论 -
「设计模式」工厂方法模式
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性。原创 2022-10-31 14:00:00 · 1763 阅读 · 0 评论 -
「设计模式」抽象工厂模式
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式的主要优点是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品族很方便;主要缺点在于增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。原创 2022-11-01 08:30:00 · 2524 阅读 · 1 评论 -
「设计模式」简单工厂模式
工厂类是整个简单工厂模式的关键。包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的。明确了各自的职责和权利,有利于整个软件体系结构的优化。但是由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。原创 2022-10-31 09:00:00 · 1774 阅读 · 0 评论 -
「设计模式」单例模式
单例模式()是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式。在GOF 书保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式一般体现在类声明中,单例的类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。本文中介绍了几种实现单例的方法,主要包括饿汉、懒汉、使用静态内部类、双重校验锁、枚举等。还介绍了如何防止序列化破坏类的单例性。从单例的实现中,我们可以发现,一个简单的单例模式就能涉及到这么多知识。原创 2022-10-27 18:00:00 · 1766 阅读 · 0 评论 -
「设计模式」概述、六大原则、分类
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在的各种问题,所提出的解决方案。设计模式并不是固定的一套代码,而是针对某一特定问题的具体解决思路与方案。可以认为是一种最佳实践,因为他是无数软件开发人员经过长时间的实践总结出来的。提到设计模式不得不提《设计模式:可复用面向对象软件的基础》(Design Patterns – Elements of Reusable Object-Oriented Software) 一书。原创 2022-10-27 01:12:58 · 1738 阅读 · 0 评论 -
springboot集成caffeine实现本地缓存
Caffeine 是基于 JAVA 8 的高性能缓存库。并且在 spring5 (springboot 2.x) 后,spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。原创 2022-10-24 23:53:06 · 2265 阅读 · 0 评论 -
「mysql进阶」索引的概述、优缺点、结构
索引是帮助 MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。原创 2022-10-02 03:00:38 · 1754 阅读 · 2 评论 -
「mysql基础」事务的概述、操作、四大特性ACID、隔离级别
事务是一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。原创 2022-09-23 11:47:45 · 1609 阅读 · 0 评论 -
「Synchronized与锁升级」锁优化的背景及性能的变化
在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,挂起线程和恢复线程都需要转入内核态去完成,阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态切换需要耗费处理器时间,如果同步代码块中内容过于简单,这种切换的时间可能比用户代码执行的时间还长”,时间成本相对较高,这也是为什么早期的synchronized效率低的原因 .原创 2022-09-22 10:00:00 · 1586 阅读 · 0 评论 -
「mysql优化」简单实现主从复制
mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台mysql数据库(slave,即从库)从另一台mysql数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致,mysql主从复制是mysql数据库自带的功能,无需借助第三方工具。原创 2022-09-20 12:30:00 · 1283 阅读 · 0 评论 -
「Java虚拟机基础」Java对象内存布局和对象头
在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。原创 2022-09-04 12:00:00 · 1601 阅读 · 0 评论 -
【JUC并发编程】如何正确使用volatile?
Java 语言中的 volatile 变量可以被看作是一种 ”程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。......原创 2022-08-28 19:24:21 · 1187 阅读 · 0 评论 -
【JUC并发编程】初识Volatile(概念与特性)
volatile是Java中的关键字,用来修饰会被不同线程访问和修改的变量。volatile可以说是java虚拟机提供的最轻量级的同步机制。保证不同线程对这个变量进行操作时的可见性,即变量一旦改变所有线程立即可见。...原创 2022-08-28 14:06:54 · 1215 阅读 · 0 评论 -
「 Java内存模型 」浅入深出之JMM(Java Memory Model)
Java内存模型本身是一种概念,并不真实存在,它仅仅描述的是,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见,关键技术点都是围绕多线程的展开的。...原创 2022-08-24 22:47:31 · 1230 阅读 · 2 评论 -
「Juc并发编程」什么是可重入锁?
可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。......原创 2022-08-16 12:00:00 · 2882 阅读 · 0 评论 -
【Java多线程】一篇文章彻底解锁八锁现象(狂神说Java)
最近在看狂神老师的JUC课程时遇到了八锁问题,看的时候懵懵懂懂,于是在第二天又看了一遍,并记录了本次笔记,希望对大家有所帮助。时间匆忙的话一定要看文章最后的总结部分!原创 2022-07-12 10:50:12 · 1484 阅读 · 0 评论 -
【Java基础】继承父类(抽象类)与实现接口的区别与联系
抽象类是对整个类进行抽象,包括属性,行为;而接口是对类局部(行为)进行抽象。本文章就这两个方面展开,对二者进行解剖、分析,希望对你有所帮助。原创 2022-07-12 09:00:00 · 1939 阅读 · 0 评论 -
「 JVM 」 垃圾回收算法详解(标记、清除、压缩(整理)、复制)
JVM是具有垃圾回收机制的,与c/c++不同,Java程序员不需要在写程序的时候考虑垃圾回收的问题,只需要专注代码逻辑即可,一定程度上减轻了程序员的负担。该文章介绍了各种垃圾回收算法的概述、优缺点等。...............原创 2022-07-10 12:00:00 · 2103 阅读 · 0 评论 -
【应用案例】Redis缓存应用场景实战
Redis底层采用全局哈希表,时间复杂度为常数,性能极高。本文章主要用于分析Redis的各种应用场景。原创 2022-07-09 11:01:36 · 4207 阅读 · 0 评论 -
Redis学习笔记
写在前面笔记参考、整理于未名湖畔种千玺、每天进步一點點版权所有狂神说一、Redis入门概述什么是ReidsRedis(Remote Dictionary Server ),即远程字典服务。是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了maste原创 2022-05-26 17:01:48 · 941 阅读 · 0 评论 -
cron 表达式语法
cron表达式是用来设置定时任务执行时间的表达式。很多情况下我们可以用 : 在线Cron表达式生成器 来帮助我们理解cron表达式和书写cron表达式。但是我们还是有需要学习对应的Cron语法的,这样可以更有利于我们书写Cron表达式。如上我们用到的 0/5 * * * * ? *,cron表达式由七部分组成,中间由空格分隔,这七部分从左往右依次是:秒(059),分钟(059),小时(0~23),日期(1-月最后一天),月份(1-12),星期几(1-7,1表示星期日),年份(一般该项不设置,直接.原创 2022-05-16 08:00:00 · 2383 阅读 · 0 评论 -
SpringBoot简单实现上传图片到七牛云
SpringBoot简单实现上传图片到七牛云前言笔记参考三更草堂为什么? 因为如果把图片视频等文件上传到自己的应用的Web服务器,在读取图片的时候会占用比较多的资源。影响应用服务器的性能。 所以我们一般使用OSS(Object Storage Service对象存储服务)存储图片或视频。快速开始七牛云官方文档:https://developer.qiniu.com/kodo/1239/java#install-by-maven一、添加依赖<dependency>原创 2022-05-15 19:02:53 · 2198 阅读 · 0 评论 -
Git工具极速入门(概念、工作流程、常用指令、集成Git)
目标了解Git基本概念能够概述Git工作流程能够构建Git项目能够使用Git常用命令能够使用IDEA操作Git文章目录目标@[toc]一、版本控制什么是版本控制常见的版本控制工具版本控制分类Git与SVN的主要区别二、Git环境配置Git程序类型常用的Linux命令Git配置三、Git基本理论(重要)四、Git项目搭建本地仓库搭建远程仓库搭建五、Git文件操作status查看修改状态add添加工作区到暂存区commit提交暂存区到本地仓库log查看提交日志版本回退添加文件至忽略列表六、Gi原创 2022-04-13 11:16:53 · 942 阅读 · 1 评论 -
Java基础语法
一、注释(理解)1.1 什么是注释?在程序中对代码进行解析的文字,方便自己查看和他人理解、查看,不会影响程序正常运行1.2 注释有哪些?单行注释//注释内容,只能写一行多行注释/*注释内容1注释内容2*/文档注释(一般用在类和方法上的注释)/** 注释内容 注释内容 */快捷键进行注释功能效果Ctrl + /单行注释。Ctrl + Shift + /选中代码进行多行注释。二、字面量(应用)2.1 作用告诉程序.原创 2022-04-08 23:54:05 · 572 阅读 · 0 评论 -
SpringBoot利用@Scheduled实现定时任务
鸣谢参考文档:Java中文社群、老谭TYH文章目录鸣谢前言实现Cron表达式示例前言很多时候,我们需要在每天的某个固定时间或者每隔一段时间让应用去执行某一个任务。 为了实现这个需求,通常我们会通过多线程来实现这个功能,但是这样我们需要自己做一些比较麻烦的工作。 接下来,让我们看看如何使用Spring scheduling task简化定时任务功能的实现。实现1、开启定时任务(添加注解)开启定时任务只需要在 Spring Boot 的启动类上声明 @EnableScheduling原创 2022-04-07 23:58:48 · 1044 阅读 · 0 评论 -
MyBatis-Plus快速入门
【总结】MyBatis-Plus学习笔记原创 2022-04-06 19:50:02 · 4158 阅读 · 1 评论