自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 设计模式

抽象工厂模式是在简单工厂的基础上将未来可能需要修改的代码抽象出来,通过继承的方式让子类去做决定。比如,以上面的咖啡工厂为例,某天我的口味突然变了,不想喝咖啡了想喝啤酒,这个时候如果直接修改简单工厂里面的代码,这种做法不但不够优雅,也不符合软件设计的“开闭原则”,因为每次新增品类都要修改原来的代码。这个时候就可以使用抽象工厂类了,抽象工厂里只声明方法,具体的实现交给子类(子工厂)去实现,这个时候再有新增品类的需求,只需要新创建代码即可。// 抽象工厂// output:拿铁// 抽象工厂。

2024-10-22 09:40:57 898

原创 消息中间件MQ

RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的消息中间件。

2024-10-22 09:33:23 878

原创 3.分布式问题、缓存异常

Redis 官方站提出了一种权威的基于 Redis 实现分布式锁的方式名叫Redlock,此种方式比原先的单节点的方法更安全。安全特性:互斥访问,即永远只有一个 client 能拿到锁避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区容错性:只要大部分 Redis 节点存活就可以正常提供服务。

2024-10-22 09:29:59 989

原创 2.线程模型、事务、集群方案

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。sentinel,中文名是哨兵。哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能集群监控:负责监控 redis master 和 slave 进程是否正常工作。

2024-10-22 09:29:16 858

原创 1.概述、数据结构、过期键、内存相关

计数器可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。缓存将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。会话缓存可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。全页缓存(FPC)除基本的会话token之外,Redis还提供很简便的FPC平台。

2024-10-22 09:27:54 1014

原创 5.SQL优化与数据库优化

null值会占用更多的字节,且会在程序中造成很多与预期不符的情况。

2024-10-22 09:26:09 1193

原创 4.常用SQL语句

条件:一条SQL语句的查询结果做为另一条查询语句的条件或查询结果嵌套:多条SQL语句嵌套使用,内部的SQL查询语句称为子查询。

2024-10-22 09:25:33 688

原创 3.锁、视图、存储过程与函数、触发器

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似,包含一系列带有名称的列和行数据。但是,视图并不在数据库中以储存的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。

2024-10-22 09:25:02 574

原创 2.索引、事务

顾名思义,就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。=和in可以乱序。

2024-10-22 09:23:54 1080

原创 1.数据库基础知识、数据结构、引擎

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。作用:用于**存取数据、查询、更新和管理关系数据库系统**。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

2024-10-22 09:23:03 525

原创 Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

2024-10-22 09:16:07 740

原创 Spring Boot

Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于(1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。(2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。

2024-10-22 09:15:36 604

原创 Spring MVC

Spring的MVC框架是围绕来设计的,它用来处理所有的HTTP请求和响应。控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。继承了**** 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

2024-10-21 10:14:02 869

原创 Spring

控制反转,简单点说,就是创建对象的控制权,被反转到了Spring框架上。通常,我们实例化一个对象时,都是使用类的构造方法来new一个对象,这个过程是由我们自己来控制的,而控制反转就把new对象的工厂给了Spring容器。控制反转即IoC (Inversion of Control)它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。

2024-10-21 10:13:04 784

原创 Mybatis

SQL 预编译指的是数据库驱动在发送 SQL 语句和参数给 DBMS 之前对 SQL 语句进行编译,这样 DBMS 执行 SQL 时,就不需要重新编译。接口绑定,就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置。接口绑定有两种实现方式通过注解绑定,就是在接口的方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定;通过xml里面写SQL来绑定。

2024-10-21 10:10:22 1100

原创 7.线程池

/五个参数的构造函数//六个参数的构造函数-1//六个参数的构造函数-2//七个参数的构造函数ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池,最大线程池大小,AliveTime,拒绝策略等。

2024-10-21 10:06:55 940

原创 6.并发容器

何为同步容器:可以简单地理解为通过 synchronized 来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。比如 Vector,Hashtable,以及 Collections.synchronizedSet,synchronizedList 等方法返回的容器。可以通过查看 Vector,Hashtable 等这些同步容器的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封装起来,并在需要同步的方法上加上关键字 synchronized。

2024-10-21 10:06:21 1000

原创 5.Lock体系

Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的条件对象。它的优势有:(1)可以使锁更公平(2)可以使线程在等待锁的时候响应中断(3)可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间(4)可以在不同的范围,以不同的顺序获取和释放锁。

2024-10-21 10:04:28 342

原创 4.并发关键字

很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。既然 synchronized 里面的代码执行得非常快,不妨让等待锁的线程不要被阻塞,而是在 synchronized 的边界做忙循环,这就是自旋。如果做了多次循环发现还没有获得锁,再阻塞,这样可能是一种更好的策略。

2024-10-21 10:03:55 711

原创 3.并发理论

垃圾回收的。垃圾回收是。

2024-10-21 10:03:00 312

原创 2.线程的状态和基本操作

线程调度器是一个操作系统服务它负责为 Runnable 状态的线程分配 CPU 时间。一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。时间分片是指将可用的 CPU 时间分配给可用的 Runnable 线程的过程。分配 CPU 时间可以基于线程优先级或者线程等待的时间。线程调度并不受到 Java 虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。

2024-10-21 10:02:14 882

原创 1.基础并发知识

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。

2024-10-21 10:01:28 806

原创 线程-概况

线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。理解多个线程对同一个是数据进行写操作的时候,执行的结果和预期结果是一致的,就表示线程安全。(如购票系统)简单的说,当多个线程在共享同一个变量,做读写的时候,会由于其他线程的干扰,导致数据误差,就会出现线程安全问题。就是当多个线程共享同一个资源时,不会受到其他线程的干扰。使用多线程时,保证数据的唯一性和准确性。

2024-10-21 09:59:02 486

原创 Java虚拟机(JVM)

CMS 是英文 Concurrent Mark-Sweep 的简称是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动 JVM 的参数加上“”来指定使用 CMS 垃圾回收器。CMS 使用的是标记-清除的算法实现的,所以在 gc 的时候回产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现 Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。

2024-10-21 09:53:38 931

原创 Java异常处理

程序首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。try-catch-finally程序块的执行流程以及执行结果比较复杂。catch语句块执行完后程序会继续执行finally语句块。catch语句块可以有多个,分别捕获不同类型的异常。

2024-10-21 09:50:52 440

原创 Java异常

习惯上,定义一个异常类应包含两个构造函数,一个无参构造函数和一个带有详细描述信息的构造函数(Throwable 的 toString 方法会打印这些详细信息,调试时很有用)super(msg);// ...综上所述,当你抛出或捕获异常的时候,有很多不同的情况需要考虑,而且大部分事情都是为了改善代码的可读性或者 API 的可用性。异常不仅仅是一个错误控制机制,也是一个通信媒介。因此,为了和同事更好的合作,一个团队必须要制定出一个最佳实践和规则,只有这样,团队成员才能理解这些通用概念,同时在工作中使用它。

2024-10-21 09:50:10 1079

原创 Java集合

当向HsahMap中添加元素的时候,先根据HashCode重新计算Key的Hash值,得到数组下标,如果数组该位置已经存在其他元素,那么这个位置的元素将会以链表的形式存放,新加入的放在链头,最先加入的放在链尾,如果数组该位置元素不存在,那么就直接将该元素放到此数组中的该位置。不同的Key算到数组下标相同的几率很小,新建一个<K,V>放入到HashMap的时候,首先会计算Key的数组下标,如果数组该位置已经存在其他元素,则比较两个Key,若相同则覆盖写入,若不同则形成链表。查看<K,V>时,它们会被排序。

2024-10-21 09:47:07 1019

原创 辅助工具类

我们就要。

2024-10-17 11:29:17 389

原创 Map接口

Hash,一般翻译为“散列”,也有直接音译为“哈希”的,这就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值(哈希值);这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。所有散列函数都有如下一个基本特性**:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。

2024-10-17 11:28:28 924

原创 Collection接口

我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的,迭代器允许调用者在迭代过程中移除元素。

2024-10-17 11:27:40 820

原创 集合容器概述

集合框架:用于存储数据的容器集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。对外的接口接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。实现:集合接口的具体实现,是重用性很高的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。

2024-10-17 11:24:38 812

原创 Java泛型

泛型” 意味着编写的代码可以被不同类型的对象所重用。泛型是在JDK1.5之后出现的。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。每次使用时都需要强制转换成想要的类型在编译时编译器并不知道类型转换是否正常,运行时才知道,不安全。

2024-10-17 11:19:15 932

原创 Java常用API

定义:位于堆内存专门用于存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串,在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中,并返回其引用可变性String类中使用字符数组保存字符串,,所以string对象是不可变的。与都继承自类,在中也是使用字符数组保存字符串,,这两种对象都是可变的。线程安全性String中的对象是不可变的,也就可以理解为常量,线程安全。是与。

2024-10-17 11:17:33 815

原创 Java面向对象

1、面向对象:模型化的,只需要抽象出一个类,但其实面向对象的底层也是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活缺点:性能比面向过程低,因为类调用需要实例化,开销比较大,比较消耗资源2、面向过程:具体化的、流程化的,一步步分析,一步步实现优点:性能比面向对象好,适用于单片机、嵌入式开发、Linux/Unix缺点:没有面向对象易维护、易复用、易扩展。

2024-10-16 16:24:49 615

原创 Java IO流与Java 反射

定义:JAVA反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。静态编译和动态编译静态编译:在编译时确定类型,绑定对象动态编译:运行时确定类型,绑定对象反射就是运用了动态编译创建对象。

2024-10-16 16:22:58 366

原创 Java基本语法

定义:用于解释说明程序的文字分类:1、单行注释 //2、多行注释 /* */3、文档注释 /** */作用在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。注意事项:多行和文档注释都不能嵌套使用。

2024-10-16 16:21:06 626

原创 Java概述

Java是一门面向对象编程,不仅吸收了C++语言的各种优点,还摒弃了c++难以理解的多继承、指针等概念作为静态面向对象编程语言的代表,计号得实现了面向对象理论Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。

2024-10-16 16:19:52 620

原创 Java三层架构

一、三层架构模式理解:三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了 “高内聚低耦合” 的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。1、表现层(JS

2020-10-11 14:25:30 10007

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除