自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 对qps、tps、rt、并发数、吞吐量、限流、熔断和降级的了解

在10.24晚上8点时双十一大促预售,看到流量监控的大屏上总会出现QPS、RT的信息,并且在某些服务调用超时或时间较长时,总会听到师兄说对他进行一个降级,所以这里进行一个归纳。在系统访问量激增,大量请求涌进来时,如果调用的某些第三方接口老是超时或是失败又或者是很慢,

2022-10-25 11:13:51 1483 1

原创 生产标签总结

商品中有icTag和商品属性,我们可以根据这个定义标签规则,还有我们发布的商品都属于度假类目中的商品,如果不是度假类目中的商品进行发布或编辑就要进行一个过滤。添加商品和编辑商品的业务逻辑,我把他俩分开来写,其实没必要,编辑商品当时写了一个通用业务逻辑,只需要一个接口就行,没必要分开,造成了代码的重复。最后的总结是要多了解业务,以方便对业务进行抽象对方案更加理解,方便代码的编写,减少业务上的问题,还有对商品的信息进行了解。编写代码的时候用到了单一职责,尽量将一写相同职责的方法全部编写到同一个类中。

2022-10-25 09:53:33 508

原创 redis学习归纳

Redis是什么?Redis(Remote Dictionary Server ),即远程字典服务!Nosql数据库是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis会周期性的把更新的数据写入磁盘或者把修改操作(全量和增量)写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!Redis能干嘛?

2022-10-23 18:04:25 1373 2

原创 快速改善代码质量的20条代码规范

命名的关键是能准确达意。对于不同作用域的命名,我们可以适当地选择不同的长度。我们可以借助类的信息来简化属性、函数的命名,利用函数的信息来简化函数参数的命名。命名要可读、可搜索。不要使用生僻的、不好读的英文单词来命名。命名要符合项目的统一规范,也不要用些反直觉的命名。接口有两种命名方式:一种是在接口中带前缀“I”;另一种是在接口的实现类中带后缀“Impl”。对于抽象类的命名,也有两种方式,一种是带上前缀“Abstract”,一种是不带前缀。这两种命名方式都可以,关键是要在项目中统一。

2022-09-26 17:54:06 878 3

原创 TDDL介绍及原理

在宕机后会切换IP地址,这里有一个巡检的任务,当主机挂掉之后,会进行主从之间的切换,切换时会把主库变为从库,从库变为主库,切换成功之后就会改配置,在group中会有它与主库的绑定信息和从库的绑定信息即group和atom之间的关系,之后会把IP地址会告诉group层会和新的IP地址进行绑定为主库,主库修改为从库配置,动态配置加载与管理会订阅这里的修改,之后会推送到动态配置加载与管理。如上图,group里面将一个表分成了许多的表,具体的落库是在atom,而这些分库分表和链接是根据规则进行的。

2022-09-16 11:30:06 5147 2

原创 序列化与反序列化

Java序列化是把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。在网络传输过程中,需要以字节流的形式来传输数据;而字节的可以还原成完全相等的对象,这个相反的过程又称为反序列化;

2022-09-12 11:41:54 1259

原创 x509数字证书详解

小明和小花进行通信,小花要在网络中验证发来消息的人到底是不是小明,是不是被其他人篡改,就需要数字证书来验证。CA机构先核实小明身份,再给小明颁发一个数字证书,证书中包含了小明的身份信息和公钥等信息,而小红就是通过这个数字证书来验证是不是小明。​p7b以树状展示证书链(certificatechain),同时也支持单个证书,不含私钥。​pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。​cer/crt是用于存放证书,它是2进制形式存放的,不含私钥。​p10是证书请求。...

2022-07-19 22:15:34 1818 1

原创 HTTPS加密过程

HTTPS和HTTP都是应用层协议,由于http协议是超文本传输协议,传输的内容是明文传输的,这样很容易被第三方截获和修改,造成安全性问题,所以就出现了HTTPS协议,它是在原来的基础上进行了加密传输的协议,防止内容被截获和修改。加密方式:HTTPS采用了非对称加密和对称加密组合的方式进行加密的非对称加密:非对称加密就是双方都持有一个公钥和私钥(它们两个是配对的),在进行传输信息的时候交换公钥,它们分别用对方的公钥钥进行加密,自己收到信息后用自己的私钥进行解密。比如有小明和小红两名同学,他俩在写情书,为了防

2022-07-13 11:31:24 1639

原创 HashMap源码分析jdk1.8

hashmap1.8的数据结构有所变化,hashmap1.8以前的数据结构是数组+链表。现在的数据结构是数组+链表+红黑树。在1.8以前,如果在某个数组中,出现了hash碰撞,并且key不相同的情况下,就会生成一个链表。随着元素的增多,链表可能会越来越长,我们在去查找的时候,遍历单链表会需要很长的时间,时间复杂度为O(n)。但在1.8以后,加了红黑树,在单链表长度大于8,并且数组元素大于64时,会将链表转化为红黑树,这样将会提高很大的效率,增删改查的时间复杂度为O(logn)。1.8版本hashmap的pu

2022-06-30 13:31:55 406

原创 HashMap源码分析jdk1.7

jdk1.7的hashmap是根据数组+链表的方式进行存储的。数组下标是根据计算的hash值和数组长度算出来的(防止越界)。链表存储的方式是头插法。下面是我整理出的put时的流程图: hashmap的重要属性:构造方法:初始化HashMap方法:选取初始加载容量为:大于等于传入容量的2的幂次方。比如传入容量为6,那么实际初始化容量为8。hash的计算方式:使用下面的方法计算放在数组的下标位置,为了防止根据hash值计算出来的下标越界:put方法如果底层数组为空,则会先初始化底

2022-06-30 10:42:09 607

原创 java 为什么重写equals方法要重写hashcode方法

Object类是所有类的基类,Object类中有equals方法和hashcode方法。在Object类中:equals方法是通过==进行比较的,比较的是引用指向的对象,如果对象相同,那么就认为两个相等。hashcode方法是获取对象的特征码值,就是获取对象的地址。在hashmap、hashset等哈希集合中:哈希集合类中,它们的equals方法都是根据先比较hashcode值是否相等,再比较内容,因为数据量大的情况下通过hash来寻找位置是很快的,但是hash也会发生冲突,也就是两个不同的对象可能会放在同

2022-06-05 21:42:35 446

原创 面向对象和面向过程的区别以及封装继承多态的优缺点

面向对象和面向过程的区别:1、思路不同2、特点不同3、优势不同。面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。面向过程思想偏向于我们做一件事的流程,首先做什么,其次做什么,最后做什么。面向对象思想偏向于了解一个人,这个人的性格、特长是怎么样的,有没有遗传到什么能力,有没有家族病史。面向对象和面向过程的优缺点面向过程是一种以过程为中心的

2022-06-04 21:45:06 1617

原创 java 的String类字符串不可变的原因

为什么不可变?请看源代码: 我们知道final修饰的类是无法被继承的,final修饰的变量时无法被重新赋值的,并且在string类中全部的方法都不会修改原来的char数组,例:substring方法最后不会改变原来的字符串,而是会创建一个新的字符串返回出去。看如下代码:它输出结果如下:我们看结果明显变化了,但这个并不是改变了内容,而是将栈指向堆内存的指针指向了新创建堆内存 。即内容不可以改变,但是可以改变内存指向为什么String设计成不可改变Java 的设计者认为共享带来的高效率远远胜过于提取、

2022-06-04 21:22:49 600

原创 springboot项目常用注解

springmvc传参常用注解1.@Controller用在controller层,常用在类上,在spring容器中创建该类的实例。将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步。@Controllerpublic class TestController {}2.@RequestMapping里面写入请求的路径,假如前端有个请求url为:‘test/index’,那在controller层需要写成如下形式才能接受到请求:@Control

2022-05-20 16:46:54 854

原创 SpringBoot实现Word导出

实现Word导出是根据 .ftl后缀的freemarker模板先生成相应的Word文档的xml文件,然后再根据xml文件转为doc后缀的Word文档。我的 .ftl模板就是根据要生成的Word转为xml文件,然后再把xml直接放进模板里面。根据Word里面要生成什么数据,用freeMarker语言在里面写上类似${data}的标签进行注入,生成之后就会显示Word里面想要显示的自定义内容。先看我生成的Word文档红框内数据都是根据freemarker语言进行显示出来的,以及生成多少行的数

2022-05-19 10:56:59 4196 4

原创 mysql索引中的InnoDB索引

InnoDB索引模型在 Mysql 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即使用不同的存储引擎,其对应索引的工作方式并不一样。InnoDB存储引擎在Mysql数据库中使用最为普遍,下面来看下InnoDB的索引模型。在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,且数据都是存储在B+树中的。 为什么使用的是B+树,而不是其他的数据索引模型呢?(1). 减少磁盘IO次数B+树的数据结构模型将所有数据都放到叶子节点,且叶子节点形成一个

2022-05-12 13:52:31 563

原创 Mybatis的使用

创建两个关联表,一个老师teacher表,一个student学生表,student有一个t_id关联teacher表的主键id,数据库如下图:teacher表:student表:分层结构如下DemoSqlMap.xml连接数据库的配置文件:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config ..

2022-05-12 11:41:08 671

原创 将Excel表信息通过反射导入到数据库

看如下Controller层接收到Excel表路径的操作如下: /** * 数据导入 * @return */ @PostMapping("/import") public ResultJson importExcel(@RequestParam("file") MultipartFile file) throws IOException { //下面路径写死了,可以通过上传到服务器获取到指定路径 String file

2022-04-29 10:35:15 525

原创 在ubuntu云服务器的docker安装和springboot项目的项目部署

docker核心解决项目部署在不同操作系统各种环境的部署,简化部署流程,让项目搭建在云服务器上更简单,占用的空间小,但会占用系统进程。先看下idea的docker目录:每个目录下都会有一个Dockerfile里面会记录一些镜像信息 ,比如版本信息。server里面的Dockerfile里面还包含了一些我们一些部署程序的一些信息,还有启动的命令。前端是使用nginx来进行请求和转发,访问我们的前端页面。在web目录里的docker-compose.yml文件里定义了一些映射规则和与do

2022-04-24 15:49:58 1974

原创 对第一个商业项目的项目复盘报告

做了一个农大科技市场的一个商业项目,印象深刻的是关于协同办公里的物品申领,它的流程图如下:就是普通员工申领物品由部门经理来审核,部门经理申领物品直接由总经理来审核,审核不通过需要填写驳回理由。当时写后台考虑不周到,导致多封装了个方法,因为部门经理审核直接由总经理来审核,所以前端没必要再传总经理的信息,但是把查询总经理和部门经理封装为了一个方法,其实是没必要的。写代码要考虑周全在写的时候一定要注意是一对多关系还是多对多关系,传回来的信息是单个实体还是一个集合。因为写的时候用的是r.

2022-04-24 11:37:40 666

原创 搭建SpringBoot框架常引入的依赖

父依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <!-- 可选修改:之前的一些案例按照此版本搭建 --> <version>2.1.3.RELEASE</version

2022-03-31 16:43:41 2633 1

原创 java获取客户端ip地址 亲测有效

public class IpAddressUtil { /** * 获取Ip地址 * @param request * @return */ public static String getIpAddress(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if(ipAddress == nu.

2022-03-30 15:37:50 1923 1

转载 TCP/IP协议的比喻

用实际生活中的事物来比喻TCP/IP不同层的工作原理。应用层(FTP协议):首先我们说说应用层,应用层就像在特定城市特定大厦特定房间内的某一个用户,应用层之间的通讯就像两个不同用户之间发送的信,这个信是点对点的,从一个用户(某一主机内特定应用程序)到另外一个特定用户(另一主机内特定应用程序)。一个主机(大厦)内可能有很多应用程序(客户),我们如何区分它们呢,实际生活中我们用房间号,在电脑内部区分不同应用程序我们用端口号。传输层(TCP):用户写好了信,需要给信套上信封,并且写好发件.

2022-03-21 22:19:19 370

原创 RBAC权限模型设计

基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。基本概念RBAC认为权限授权实际上是Who、What

2022-03-20 16:14:48 1190

原创 rbac权限模型之从数据库读取菜单,递归生成菜单树

先设计数据库,数据库设计如下:SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for jrbac_menu-- ----------------------------DROP TABLE IF EXISTS `jrbac_menu`;CREATE TABLE `jrbac_menu` ( `id` varchar(32) CHARACTE

2022-03-20 15:12:58 975

原创 token令牌以及登录小例子

token令牌:通过账号密码换取一个有时效的token令牌,基于token去进行认证和授权相关的操作。在进行登录验证时,我们需要session或cookie会话进行验证,前端包括浏览器还有微信小程序、app、公众号,而采用前后端分离并且不使用浏览器的情况下就会导致前端无法用cookie存储信息,这时我们就需要使用token令牌进行登录验证。使用token令牌前后端交互验证登录过程如下图:从上图可以看到和session验证时很相似的。基于内存存储token令牌示例如下:先在spring

2022-03-19 17:40:34 2550

原创 关于MySQL中给字段创建四种不同类型索引的基本语法

添加主键 1 2 ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); // 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 添加唯一索引 1 2 ALTER TABLE tbl_name ADD UNIQUE index_name (col_list); // 这条语句创建索引的值必须是唯一的。 添加普通索引 1

2022-03-14 10:19:35 593

原创 牛客mysql窗口函数

三种用于进行排序的专用窗口函数:1、RANK() 在计算排序时,若存在相同位次,会跳过之后的位次。 例如,有3条排在第1位时,排序为:1,1,1,4······2、DENSE_RANK() 这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。 例如,有3条排在第1位时,排序为:1,1,1,2······3、ROW_NUMBER() 这个函数赋予唯一的连续位次。例如,有3条排在第1位时,排序为:1,2...

2022-03-11 16:01:16 618

原创 Spring MVC 页面跳转和数据交互例子

在idea里创建一个maven项目,先在pom.xml文件里引入坐标依赖,代码如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.

2022-02-21 19:19:21 663

原创 Spring MVC模式

Spring MVC 是基于Spring的一个模块,专门做web开发,是Servlet的升级,servlet的耦合性比较强,Spring 和Spring MVC的分层结构大大降低了耦合度。Spring MVC 中的MVC是M代表model(模型层)、V代表View(视图层)、C代表Controller(控制层)的缩写Model(模型层):指工程中的javabean。作用是处理数据。Javabean分为两类:1.实体类bean:专门存储业务数据的2.业务处理bean:指servlet和Dao对象,专门

2022-02-21 17:38:48 1762

原创 Spring中Aop(面向切面)原理及使用

AOP概念的引入:在我们写项目的时候,如果我们对一个逻辑进行更改,例如登录操作,登录操作需要对身份进行验证,但是刚开始时并没有写验证逻辑,那我们就需要对原代码进行更改,而AOP则是不在原代码处进行更改,而是在另一个地方写出来,并让这个逻辑运行在该运行的地方,这个就是AOP(面向切面编程)AOP是一种编程范式,隶属于软件工程的范畴,指导开发者如何组织程序结构。Spring将AOP思想引入到框架中,通过预编译方式或者运行期动态代理实现程序功能的统一性维护的一种技术。利用Aop可以对业务逻辑的个方面部

2022-02-20 17:46:32 830

原创 Spring框架的Bean管理

Bean管理是做什么的?1.创建对象 2.注入属性我们为了解决类与类之间的耦合,我们并不会在一个类中直接创建对象,而是交给IOC,而IOC创建对象就是有Bean来管理的,类里面的变量赋值也可以通过Bean管理来进行注入属性Bean管理操作的两种方式1.基于xml配置文件的方式实现2.基于注解方式实现一、基于xml配置文件的方式实现Bean管理和注入属性 我们在创建对象,并且执行无参构造器的方法创建对象时,我们就直接在xml文件里引入bean标签//id:类的唯一标识符,其

2022-02-20 13:51:10 382

原创 Spring中的IOC容器原理

什么是IOC:IOC(Inverse of Control)控制反转,将对象的创建权利反转给Spring框架。它是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。IOC容器的底层原理:IOC依赖于3门技术:1.dom4j解析xml文档。2.工厂模式 3.采用反射设计模式来创建对象那什么是工厂模式:假如说我们创建了3个类分别是A、B、C类,我们在B类中创建一个A类的对象,假如说A类出了问题,那么B类也肯定就出了问题,这就是耦合产生的不利结果,如果所有的类都这样写那

2022-02-19 20:17:39 692

原创 Spring框架

概述:Spring是一个开放源代码的设计层面框架(也就是我们可以改变里面的源代码来实现自己的逻辑),它解决的是业务逻辑层和其他各层的强耦合的问题,因此它将面向接口的编程思想贯穿整个系统的应用。什么是耦合:耦合就像是齿轮,齿轮进行转动时会带动其他齿轮进行转动,如果我们改变了一个齿轮的大小,那我们就要改掉另一个齿轮的大小。比如servlet框架,它是一个强耦合框架,我们写一个servlet和使用jdbc来和数据库进行数据的增删改查时,因为耦合问题当我们要改变servlet数据、逻辑时或者jdbc

2022-02-19 17:52:18 292

原创 request对象和response对象

request对象:是当客户端向服务器发送请求时,服务器本次请求创建request对象同时创建response对象,并在调用servlet的service方法时,将该对象传递给service方法。request对象中封装了客户端发送过来的所有的请求数据。response对象:服务器接收到客户端请求后会把要发送到客户端的数据调用servlet的service方法写到response对象里面,最后将response对象响应给客户端流程如下图所示:httpservlet抽象类里有许多方法可以接受前

2022-02-15 21:32:56 1151

原创 状态管理之cookie和session

我们web网站常用的http协议是一种无状态协议,他无法保存用户的信息,假如说有几个不同的用户登录后进行购物,http协议是无法判断出是谁进行了购物,是谁购买了哪些东西。为了解决这种问题我们常用的方法是使用cookie和session。什么是状态管理:将浏览器和web服务器之间多次交互当成一个整体来处理,并且将多次交互所涉及的数据保存起来。状态管理分类:客户端状态管理:将状态保存在客户端。代表性技术就是cookie技术。服务端状态管理:将状态保存在服务端,代表性技术就是session技术。

2022-02-14 19:56:26 749 1

原创 servlet核心接口和类

在servlet体系中,除了实现servlet接口,还可以通过继承GenericServlet和HttpServlet两种抽象类实现编写。接口就是对行为的规范。一、servlet接口servlet接口是整个servlet的核心。它是所有servlet类必须直接或间接实现的接口,其内部需要实现的5个方法分别关乎着我们servlet生命周期和业务实现。5个方法如下所示:1.init(...)当Servlet第一次被请求时,servlet容器就会开始调用这个方法来初始化一个servlet对象

2022-02-10 15:25:02 1873

原创 网站架构和servlet架构

一、网站架构现在的网站架构分为B/S架构和C/S架构两种。B/S是Browser(浏览器)和Server(服务器)的缩写就是我们常用的网站,这种结构有很多好处,维护和升级简单,客户端是浏览器,基本不需要维护,只需要维护和升级服务器端就可以。C/S 是Client(客户端)和Server(服务器)的缩写就是我们常用的电脑软件,这种结构是一种软件系统体系结构,也是生活中很常见的。这种结构是将需要处理的业务合理的分配到客户端和服务器端,这样可以大大降低通信成本,但是升级和维护相对困难。两种架构如下

2022-02-10 10:54:10 1509

原创 Http协议

这里的协议也就类似于我们平时说的合同或规定。规定了要做哪些事情。http协议是应用层的协议,在进行http协议之前会先处理TCP协议(TCP协议属于传输层,传输层在应用层之下会先进行处理,一般浏览器会使用可靠传输协议TCP),会先让客户端和服务端建立TCP连接,再让客户端向服务器发出http请求,之后服务器再向客户端发出http响应,最后关闭TCP连接。如下图:http协议就是超文本传输协议,是关于在网络上如何传输超级文本(即HTML文档,文档里面包括视频、图片文字类的信息),也就是可以传输

2022-02-09 20:18:18 1394

原创 java代理

代理的定义:给目标对象提供一个代理对象,并且由代理对象控制着目标对象的引用目的:1)功能增强,通过代理对象对原业务进行增强。2)控制访问,通过代理对象间接访问目标对象,防止直接访问目标对象给系统带来不必要复杂性怎么实现代理?有两种方式:1)静态代理:2)动态代理:动态代理有两种方式,一种是基于jdk动态代理,另一种是spring框架里的cglib动态代理。静态代理:利用接口实现静态代理先通过接口定义好我们需要代理的方法,再写一个代理类来实现我们要代理的目标对象有哪些,等要

2022-01-22 12:19:36 512

空空如也

空空如也

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

TA关注的人

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