暂时未有相关云产品技术能力~
暂无个人介绍
1.什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表示实数,但是到为止使用最广泛的是浮点表示法。浮点表示法,即用浮点数来表示实数,所谓浮点数,意思是小数点的位置不是固定的,是可以浮动的。浮点数采用IEEE 754这个标准作为统一的标准。该标准中严格定义个浮点数的表示格式、转化过程。 下面简单介绍一下IEEE 754标准。 IEEE 754的核心就是用科学计数法来表示实数,然后将表示结果转为二进制的方式,方便计算机存储。
1.微服务中的容错 1.1.服务雪崩 要说容错的话,肯定是有多种维度的。横向维度上来说,分布式架构,天然就带有分区容错性,多节点部署相同的服务就是为了容错,保证其中某些节点挂掉后,其它节点任然能提供该类服务。微服务种更需要考虑的是纵向维度上的容错机制,防止服务雪崩。 所谓的服务雪崩,指的是服务间存在着纵向的链路式的调用关系: 服务A调用服务B,服务B调用服务C。
1.概述 HTTP(HyperText Transfer Protocol),超文本传输协议。超文本(Hypertext)是一种结构化的文本,其中包含了超链接(Hyperlink)的能力,通过超链接可以在不同文档之间创建关联和跳转。 传统的文本是线性的,按照一定的顺序排列的,而超文本则打破了线性结构,允许文本中的某些词、短语或图像与其他文档或资源之间建立关联。这些关联通过超链接来实现,用户可以点击超链接来跳转到其他相关的文档、网页、图片、视频或其他媒体资源。
1.概述 模板模式是一种常用的设计模式,它定义了一个操作中的算法的骨架,将某些步骤延迟到子类中实现。模板模式使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。 模板模式中有两个角色:
1.概述 Ribbon是Netflix开源的一个客户端负载均衡库,也是Spring Cloud Netflix项目的核心组件之一。它主要用于在微服务架构中对服务进行负载均衡,以提高系统的可用性和性能。ribbon不是通信组件,而是服务调用者和通信组件之间的中间层,主要就是用来做负载均衡,选择出适合处理本次请求的服务节点。
1.让人头疼的多版本号体系 由于历史原因,spring cloud分为了Alibaba和Netflix两个体系。 想要了解原因以及整个spring cloud体系的来龙去脉的同学可以去看我的另一篇文章: SpringCloud概论__BugMan的博客-CSDN博客 知道以上前情后,我们来看看spring cloud的版本号有多乱: 打开官网首先有个总项目的版本列表:
1.概述 在某些业务场景中,需要定时执行一些任务,有可能是定时统计然后生成报表,有可能是定时发起一个任务。最近在工作中就正好遇见一个定时发起问卷任务的一个业务场景,此处集合业务场景聊聊如何用spring boot来实现功能。
1.业务场景 一种选择题试卷(TestPaper)由N个试卷项(TestPaperItem)组成,一种试卷由N个学生作答,会产生N份答卷(answer),一份答卷由N个答卷项(answerItem)组成,一个答卷项由TestPaperItem的一个问题项、一个选项组成。 实体关系如下:
1.概论 1.1.历史 迄今为止,软件开发经历了如下几个阶段: 单机 分布式 微服务
1.概述 在实际的数据密集型应用中,数据库层面往往呈现两个特点: 单点数据库难以扛得住。 读操作远远多于写操作。
1.概述 所谓的并发控制,就是规避多个会话并发访问数据库带来的诸如脏数据之类的数据一致性问题,MySQL中提供了一系列的机制让我们可以去进行并发控制。 本质上来说MySQL就是用的两种锁来进行并发控制,一种是表锁,锁住整张表;一种是行锁,锁住某个数据行。
1.概述 一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲解如何快速上手使用jmeter来进行压测。 JMeter,一款接口测试工具,是Java程序,需要JDK环境,建议使用JDK8或者JDK11。
1.覆盖索引 1.1.概述 覆盖索引,是为了避免“回表查询”,从而降低查询耗时的一种使用索引的方法,所以要聊覆盖索引首先我们要知道什么是"回表查询,“回表查询”是因为MySQL的索引结构决定的,是因为非聚集索引要找聚集索引拿数据而出现的现象,所以我们又要先了解MySQL中的聚集索引和非聚集索引。 文章的脉络就是先聊聚集索引、非聚集索引是怎么带来了“回表查询”的问题,然后怎么用用覆盖索引解决这个问题。
B+树结构 索引失效的根本原因其实就是违反了B+树的结构特性,查找的时候没办法在B+树上继续走下去,所以首先我们来回顾一下B+树的数据结构。 如果对B树、B+树不熟悉的可以看一下博主之前的文章,详细介绍了这两种数据结构:数据结构(8)树形结构——B树、B+树(含完整建树过程)_b+树构造过程__BugMan的博客-CSDN博客 B+树是一棵N叉树,遵循每个节点遵循左<根<右,然后叶节点上是一条分支上的所有数据,且为了方便范围查询,叶子节点用指针连接。
1.简介 PostMan,一款接口调试工具。 特点: 可以保留接口请求的历史记录 可以使用测试集Collections有效管理组织接口 可以在团队之间同步接口数据(收费)
1.概述 解决慢SQL的问题无非3步: 定位慢SQL 分析慢SQL 优化慢SQL 本文将按顺序介绍前两步该怎么做,第三步将会在后续的文章中详细讨论。
1.什么是索引 当我们想在一本书里面找到具体的章节的时候,最快的办法是去查看这本书的目录,索引就类似于数据库中存储的数据的目录,是一种用于快速查找到数据的数据结构,这个数据结构里面存储的是指向数据存储位置的指针。 使用索引之后,除了数据本身之外,还要存一份索引,用了更多的存储空间,是标准的用空间换时间的做法。
1.使用自增主键的弊端 首先在实际工程中我们很少用1,2,3......这样的自增主键,原因如下: 主键冲突 性能问题 安全问题 主键冲突: 比如我要跨数据库进行数据同步、或者在分布式系统中跨“分区”进行数据同步,不难想象,1,2,3......这种递增的单数字是极容易产生冲突的。
1.概念 1.1.什么是MySQL 开源、轻量级的一款关系型数据库,在业内有着广泛应用。 1.2.关系型数据库、非关系型数据库 按照组织数据的方式进行分类,数据库可以分为关系型、非关系型两种。两者各自的特点如下
1.概述 OAUTH,Open Authorization,开放授权协议,为用户资源的授权提供了一个安全的、开放而又简易的标准。目的是让第三方对用户的数据只有有限访问权,而无法触及到用户的核心信息。 例如,在第三方网站上使用微信或者QQ作为账号进行登录,就是使用的oauth协议,只返回给第三方诸如用户名、头像等信息,而不会返回给第三方秘密等核心数据。 OAuth最初由Twitter的开发人员提出,后来成为了一个互联网标准,并得到了广泛应用。OAuth2.0是OAuth协议的第二个版本,是一种更加安全、可扩展、功能更加完备的授权协议。目前我们说OAuth一般指的就是OAuth 2.0。
1.代数推导 假设我们有一个正方形初始边长为X,这时面积S1=x² 然后正方形的边长增加△x,此时面积S2=(x+△x)² 变化的面积大小是△s=(x+△x)²- x²=2x△x+(△x)² 观察可以发现当△x越小(△x)²会比2x△x率先趋近于0,也就是换句话说,当△x很小时我们可以近似的认为 △s=2x△x 仔细观察上面的式子,这个2X其实就是x的平方的导数,这时候我们是不是就理解了为什么说导数可以描述变化趋势的快慢。
1.概述 Spring Security是一个基于Spring框架的安全性框架,它提供了一系列的API和扩展点,可以帮助开发人员在应用程序中轻松地实现安全认证和授权控制。 我们可以理解为Spring Security维护了一组我们可以自定义的访问规则,每次访问都会去进行规则比对,满足规则的才放行。 这些规则可以有很多维度,本文会以最基础的基于角色的控制入手逐步扩展详细介绍Spring Security。 基于角色的控制,我们可以理解为Spring Security为我们维护了一张“白名单”,而登录就是去白名单
1.概述 Spring Security是一个基于Spring框架的安全性框架,它提供了一系列的API和扩展点,可以帮助开发人员在应用程序中轻松地实现安全认证和授权控制。 我们可以理解为Spring Security维护了一组我们可以自定义的访问规则,每次访问都会去进行规则比对,满足规则的才放行。 这些规则可以有很多维度,本文会以最基础的基于角色的控制入手逐步扩展详细介绍Spring Security。 基于角色的控制,我们可以理解为Spring Security为我们维护了一张“白名单”,而登录就是去白名单里进行比对。
1.概述 在后端来说,安全主要就是控制用户访问,让对应权限的用户能访问到对应的资源,主要是两点: 认证 授权 认证,确定是谁。 授权,核实权限。 每个安全框架其实都是为了实现这两点。 目前常用的实现方式有如下几种: token JWT oauth spring security 前三种是理念,最后一种是开箱即食的框架。 2.token 2.1.理论 token ,也叫“令牌”,是验证用户身份的凭证。token的组成具有随意性,能标识用户身份即可。
1.异步任务 1.1.概述 举一个例子,我现在有一个网上商城,客户在界面点击下单后,后台需要完成两步: 1.创建客户订单 2.发短信通知客户订单号 这里面第2步是个高耗时的操作,如果全部挤在一条主线程里做,效果就会是客户点了一下界面的下单按钮,然后转半天圈,直到客户收到短信后,界面才停止转圈。 这里面我们发现其实我们并不需要等第2步完全跑完再返回,只要调用触发低2步就可以返回了。 第2步很适合做成异步任务,只要触发了就行,快速给出响应,不让请求卡在接口上,不必等它完整做完。
1.依赖 maven依赖如下,需要说明的是,spring-boot-starter-data-redis里默认是使用lettuce作为redis客户端的驱动,但是lettuce其实用的比较少,我们常用的还是jedis作为客户端的驱动,所以这里排除掉lettuce,引入jedis
1.概述 数据库开发一直是JAVA开发的核心之一,作为现在JAVA EE的基石框架,Spring Boot自身携带了一个JDBCTemplate框架,其对JDBC进行了基础的封装,使得Spring Boot原生就支持据库开发。同时Spring Boot也不排斥其它优秀的持久层框架,允许他们以极低的代价平滑的接入。 本文主要介绍最常用到的三个持久层框架,JdbcTemplate、JPA、mybatis如何接入Spring Boot并在其上进行开发。
1.概述 我们常听说大数据、云计算、人工智能、5G、区块链这些名词,这些“未来技术”最终目的是想使得未来社会的走向“智能化”,生产、交通、学习、城市管理、能源传输等等都将智能化,所谓智能化就是让以上场景变得更加高效。而智能化的实现则需要各方技术协作,整个支持智能化社会的技术架构将会是:
1.概述 Java Stream是Java 8引入的一种新特性,用于简化集合类的数据处理和操作。Stream API提供了一种流式处理的方式,可以对数据进行过滤、映射、聚合等操作,使得数据处理更加简洁、高效和易于理解。 stream中对数据的操作分为两类: 中间操作,对流的中间操作,即从流中取流。 中止操作,对流的最终操作,即从流中取值。 两种操作的代码示例:
1.声明式事务 1.1.概述 spring中事务分为两种: 1.编程式事务,通过写代码来实现,每一步。 2.声明式事务,直接通过配置来实现。 常用的是声明式事务,接下来介绍的也是声明式事务。 1.2.使用 1.2.1.建表 一个用户表,有id和账户余额两个字段。
1.概述 当Java 8发布时,其中最令人兴奋的特性之一就是 Lambda 表达式。Lambda 表达式是一种轻量级、简洁和高效的函数式编程方法。它可以用来代替 Java 旧有的匿名内部类,提高代码的可读性和可维护性。 2.lambda表达式的基础 Lambda 表达式是一个匿名函数,由输入参数和处理逻辑两部分组成:
1.概述 泛型,自JDK1.5引入的语法糖,底层本质上就是类型强转,目的是为了“参数化类型”。所谓的参数化类型是希望参数的类型能动态指定。泛型泛型既可以修饰属性,又可以修饰方法。
1.概述 枚举变量指的是变量的取值只在一个有限的集合内,如性别、星期几、颜色等。从JDK5开始,JAVA支持了枚举类型。 使用enum关键字声明枚举类型 枚举类可以理解为一个集合,enum内部有多少个值,就有多少个实例对象。 枚举类不能直接new,而是由JVM加载枚举类的时候自动创建枚举类内部的示例。 枚举内部的每个实例都是全局唯一的。 枚举类构造方法只能为private
1.概述 概念: 类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组件,负责加载Java类到内存中并使其可以被JVM执行。类加载器是Java程序的核心机制之一。 分类: 类加载器一共有三种: 启动类加载器,加载系统类rt.jar。 扩展类加载器,加载JDK内部,rt.jar之外,由于JDK版本迭代而新出现的扩展类。 应用类加载器加载J用户所配置的classpath下的类。
1.概述 反射,JAVA提供的一种在运行时获取类的信息并动态操作类的能力。JAVA反射允许我们在运行时获取类的属性、方法、构造函数等信息,并能够动态地操作它们。 2.获取Class对象
1.基本注解 基本注解是JDK自带的一些单独使用的具有功能性的注解,包含以下四个:使用示例: @SuppressWanings({ "rawtypes", "unused" }) 2.元注解 元注解是专门留给开发者自定义注解使用的,也就是可以用在注解中的注解。
1.版本 打开Spring官网,点进Spring Boot项目我们会发现在不同版本后面会跟着不同的标签:
有很多时候我们在IDEA里面新建项目都要重新配置Maven、JDK等环境非常麻烦,但实际上在本地进行开发的时候这些东西基本上都是固定的一套,不会存在多套,所以将这些设置成默认的会省去每次新建项目时进行重复的环境配置工作。 首先关闭所有项目,来到IDEA的欢迎页:
1.hash code hash code是使用hash函数运算得到的一个值,是对象的身份证号码,用于对象的辨重。在同一运行周期,对同一个对象多次调用hashcode(),只要是用于equals()的内容未变,那么每次得到的hash码也应该不变。,但不同运行周期间hash码可能会不同。
1.属性 Linux中的文件有以下属性 文件名 权限 文件拥有者 文件拥有者所在的用户组 最后修改的时间 查看文件属性的命令: ls -l 文件名
1.概论 IO,input stream、output stream,JAVA中负责IO的是一个专门的包,java.io,这个包里面提供了多个类支撑整个IO功能。
1.数据结构 底层使用Object类型的数组实现,线程不安全,添加元素时如果内存已满则会开辟新空间,将原数组copy过去。
1.概述 由一些历史原因,JAVA领域存在有很多日志框架,如Log4j、Logback、log4j2。 log4j是Java日志框架的元老,在log4j被Apache Foundation收入门下之后,由于理念不合,log4j的作者Ceki离开并开发了slf4j和logback。这几个框架都很热门,这就造成了不同系统、不同开源框架使用的日志框架都不同。
1.HTTP 1.1.概述 HTTP,超文本传输协议,WEB体系选用了该协议作为应用层协议。 1.2.报文结构 1.2.1.请求报文 HTTP的请求报文(request)由四部分组成:请求行(request line)、请求头部(header)、空行和请求数据(request data)
1.概述 会话保持技术的出现是因为HTTP 是一个无状态的协议,这一次请求和上一次请求是没有任何关系的,互相无法感知,上一次请求干了什么?这一次请求完全不知道,会话保持技术就是为了以一种第三方的设计实现http请求之间的联系,让请求之间能够相互感知。 目前的两大会话保持技术:
对称加密: 双方协商好密钥,彼此传输的信息通过统一的密钥来加密解密。缺点是密钥协商时不可能面对面,绝大多数时候都要通过网络通信进行密钥协商,密钥在传输途中很可能被监听破解。 非对称加密: 非对称加密就是为了解决密钥有可能在传输中被破解这一问题而出现的加密方式。 以下为非对称加密原理的图解:
1.单点事务 1.1.概述 单点事务,即本地事务,即传统的单机数据库事务,是一系列约定规则,约定了事务具备ACID原则: 原子性(A) 一致性(C) 隔离性(I) 持久性(D)
1.环境和依赖 1.1.spring boot版本 springboot 2.2.X版本采用的maven构建,2.3.X采用gradle构建,因此采用2.2.X,mavan构建的便于源码阅读。本文以2.2.9为例进行Spring Boot自动装配原理的解析。 1.2.依赖管理 引入Spring Boot的方式有两种 引入spring-boot-dependencies的pom文件 将spring-boot-starter-parent作为父级pom
1.环境和依赖 1.1.spring boot版本 springboot 2.2.X版本采用的maven构建,2.3.X采用gradle构建,因此采用2.2.X,mavan构建的便于源码阅读。本文以2.2.9为例进行Spring Boot自动装配原理的解析。 1.2.依赖管理 引入Spring Boot的方式有两种 引入spring-boot-dependencies的pom文件 将spring-boot-starter-parent作为父级pom
1.下载安装 下载地址: Download | SonarQube | Sonar (下载页面向下拉)选择稳定版本下载。