自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 服务注册与发现Eureka(一)

什么是Eureka和Consul、Zookeeper类似,Eureka是一个用于服务注册和发现的组件,最开始主要应用于亚马逊公司旗下的云计算服务平台AWS。Eureka分为EurekaServer和EurekaClient,Eureka Server为Eureka服务注册中心,EurekaClient为Eureka客户端。Eureka的基本架构Register Service:服务注册中心,它是一个EurekaServer,提供服务注册和发现的功能。 Provider Service:服务提供者

2022-05-17 16:01:13 410 1

原创 微服务简介

单体架构的不足 在应用的初始阶段,单体架构无论是在开发速度、运维难度上,还是服务器的成本上都有着显著的优势。在一个产品的前景不明确的初始阶段,用单体架构是非常明智的选择。随着应用业务的发展和业务复杂度的提高,这种架构明显存在很多的不足,主要体现在以下3个方面。 业务越来越复杂,单体应用的代码量越来越大,代码的可读性、可维护性和可扩展性下降,新人接手代码所需的时间成倍增加,业务扩展带来的代价越来越大。 ...

2022-05-17 10:27:24 896

原创 mybatis源码剖析之配置文件解析

我们在使用 MyBatis 框架时,通常会进行一定的设置,使其能更好的满足我们的需求。对于一个框架来说,提供较为丰富的配置文件,也是其灵活性的体 现。本文将会介绍 MyBatis 配置文件中的大部分节点解析过程。我们在使用 MyBatis 时,第一步要做的事情一般是根据配置文件构建 SqlSessionFactory 对象。相关代码大致如下: SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuild

2022-05-11 16:45:16 466 3

原创 连接数据库?Jdbc,SpringJdbc,Mybatis在这里一网打尽

在深入分析Mybatis源码前,我想先介绍一下Mybatis的一些基础知识,比如,我们为什么要学习这门技术?他到底是什么东西?我们该怎么用它?它是什么MyBatis 的前身是 iBatis,iBatis 是 Apache 软件基金会下的一个开源项目。2010 年该项目从 Apache 基金会迁出,并改名为 MyBatis。同期,iBatis 停止维护。MyBatis 是一种半自动化的 Java 持久层框架(persistenceframework),其通过注解或 XML 的方式将对象和 SQL

2022-05-10 17:05:52 810 7

原创 mybatis-plus快速上手秘籍

MyBatis-Plus (opens new window)(简称 MP)是一个MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。废话不多说,直接开干!!!!!!!!!!创建数据库所有的增删改查都是围绕数据库在做的,所以建表是第一步。DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(10) NOT NULL AUTO_INCRE.

2022-05-09 18:55:17 478

原创 深入理解设计模式之中介者模式

假设我们要做一个销售系统,里面有采购管理,销售管理,存货管理,之间都相互依赖,我们该怎么做呢,先看图片:我们从这个示意图上可以看出,三个模块是相互依赖的。我们就以一个终端销售商(以服务最终客户为目标的企业,比如某某超市、某某商店等)为例,采购部门要采购IBM的电脑,它根据以下两个要素来决定采购数量。销售部门要反馈销售情况,畅销就多采购,滞销就不采购。即使是畅销产品,库存都有1000台了,每天才卖出去10台,也就不需要再采购了! 库房有货,才能销售。从以上分析来看,这三个模块都有

2022-05-08 12:05:49 255

原创 深入了解设计模式之原型模式(二)

深拷贝和浅拷贝在理解什么是深浅拷贝之前,我们先写个代码看个例子:public class Thing implements Cloneable{ private List<String> list = new ArrayList<>(); @Override protected Thing clone() { Thing thing = null; try { thing = (Thing)su

2022-05-07 12:19:32 69

原创 深入了解设计模式之原型模式(一)

假设我们需要做一个邮件发送系统,发送给银行客户的人,具体类图如下:具体代码实例如下:Mail:public class Mail { private String receiver; private String subject; private String appellation; private String context; private String tail; public Mail(AdvTemplate advTemp.

2022-05-06 22:23:16 95

原创 深入理解设计模式之代理模式

代理模式(Proxy Pattern)是一个使用率非常高的模式,其定义如下:Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供 一种代理以控制对这个对象的访问。)我们来看代码具体实现:抽象主题类:public interface Subject { //定义一个方法 void request();}真实主题类:public class R

2022-04-29 16:21:28 158 5

原创 深入理解设计模式之建造者模式

老大突然拉住我,喜滋滋地告诉我:“公司很满意我们做的模型,又签订了一个合同,把奔驰、宝马的车辆模型都交给我们公司制作了,不过这次额外增加了一个新需求:汽车的启动、停止、喇叭声音、引擎声音都由客户自己控制,想什么顺序就什么顺序”那我们开始设计,来看一下类图:类图比较简单,在CarModel中我们定义了一个setSequence方法,车辆模型的这几个动作 要如何排布,是在这个ArrayList中定义的。然后run()方法根据sequence定义的顺序完成指定 的顺序动作。我们来看模型抽象类代码:

2022-04-28 16:19:34 4517 10

原创 深入理解设计模式之模板模式

我们平时办理入职的流程是:填写入职登记表->打印简历->复印学历->复印身份证->签订劳动合同->建立花名册->办理工牌->安排工位。我平时在家里炒菜的流程是:洗锅->点火->热锅->上油->下原料->翻炒->放调料->出锅。以上这些都是模板模式的体现。模板模式又叫模版方法模式(Template Method Pattern),是指定义一个算法的骨架,并允许子类为一个或多个步骤提供实现。模板模式使得子类可以在不改变算法结

2022-04-27 19:33:24 8168 16

原创 数据结构与算法之串(七)

串(String)是由零个或多个字符组成的有限队列,又名字符串。串的比较 两个数字,很容易进行比较,2比1大,没毛病,可是两个字符如何比较,比如“silly”,“stupid”,这样同样表达“愚蠢的”的单词字符串,他们在计算机中的大小其实取决于他们挨个字母的前后顺序,他们的第一个字母都是‘s’,不存在大小差异,而第二个字母,‘i’比‘t’靠前,所以‘i’<‘t’,于是我们说“silly”<“stupid”。事实上,串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字

2022-04-27 10:09:44 128 17

原创 数据结构与算法之树(六)

上节我们讲到了二叉树的前中后,层序遍历,下面我们来看实现:定义一颗二叉树 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { thi

2022-04-27 08:00:00 138

原创 数据结构与算法之树(五)

之前我们一直在谈的是一对一的数据结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构----->“树”,来解决我们实际编程中的问题。树的定义树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…… Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)树形逻辑结构方面的应用.

2022-04-26 11:40:45 120

原创 数据结构与算法之线性表(四)

前面我们讲到线性表的顺序存储结构。最后的一段说明了他的缺点,最大的缺点就是插入和删除时需要移动大量的元素,有没有什么解决办法呢?线性表的链式存储结构线性表的链式存储是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,这意味着,这些数据元素可以存在内存未被占用的任意位置。以前的顺序结构中,每个元素只需要存储数据元素信息就可以了,现在链式结构中,除了存储元素信息外,还需要存储后继元素的存储地址。因此,为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻

2022-04-24 22:17:16 304

原创 数据结构与算法之线性表(三)

线性表零个或多个数据元素的有限序列。如果用数学语言来进行定义。可如下:若将线性表记为(a1,…,ai-1,ai,ai+1,…,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是a的直接后继元素。当i=1,2,…, n-1时,ai有且仅有一个直接后继,当i=2,3,…n时,ai有且仅有一个直接前驱。线性表的基本操作线性表的顺序存储结构线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。我们来看代码实现..

2022-04-23 17:38:19 248

原创 数据结构与算法(二)

什么是算法?算法的特性好算法的特性1)正确性。算法应该能够正确的解决求解问题。2)可读性。算法应具有良好的可读性,以帮助人们理解。3)健壮性。输入非法数据时,算法能适当的作出反应或进行处理,而不会产生莫名其妙的输出结果。4)时间效率高和存储量低。时间复杂度在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它...

2022-04-23 16:08:40 431 2

原创 数据结构与算法(一)

数据:数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合,数据是计算机程序加工的原料。数据元素,数据项:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。数据结构是相互之间存在的一种或多种特定关系的数据元素的集合。数据对象是具有相同性质的数据元素的集合,是数据的一个子集。逻辑结构物理结构散列存储:根据元素的关键字直接计算出该元素的存储..

2022-04-22 23:02:34 85

原创 计算机网络基础知识之物理层

数据通讯模型通信的目的是传送消息。数据:传送信息的实体,通常是有意义的符号序列。信号:数据的电气/电磁的表现,是数据在传输过程中的存在形式。数字信号:代表消息的参数取值是离散的。模拟信号:代表消息的参数取值是连续的。信源:产生和发送数据的源头。信宿:接收数据的终点。信道:信号的传输媒介。一般用来表示向某一个方向传送信息的介质,因此一条通信线路往往包含一条发送信道和一条接收信道。三种通信方式数据传输方式码元速率速率也叫数据率,是指数据的传输速率,表示单...

2022-04-22 20:13:01 332

原创 计算机网络基础知识之应用层

客户/服务器(C/S)模型P2P模型DNS系统DNS其实就是主机HOST域名对IP地址的映射,方便用户的使用https://www.baidu.com ➡️通过DNS系统➡️http://220.181.38.149域名解析过程递归查询:主机先是向本地域名服务器发送请求,如果查不到的话,本地域名服务器向根域名服务器发送请求,如果查不到的话,根域名域名服务器向顶级域名服务器发送请求,如果查不到的话,顶级域名服务器向权限域名服务器发送请求,可以看到每...

2022-04-21 17:35:29 2759

原创 计算机网络基础知识总结(一)

计算机网络:是一个将分散的,具体独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。计算机网络的功能:数据通信,资源共享,分布式处理,负载均衡.....功能组成:计算机网络的分类:广域网WAN,城域网MAN,局域网LAN,个人区域网PAN性能指标:速率:数据率或称数据传输率或比特率。比特 1/0 位 单位是b/s,kb/s,Mb/s带宽:网络的通信线路传输数据的能力,通常是指单位时间内从网络中的某一点到另一点所能通过的最高数据.

2022-04-21 00:43:14 2573

原创 深入理解设计模式之工厂模式

在以前的生活中我们都知道,需要什么东西都得自给自足,非常不方便,随着社会和经济的发展,不同行业出现了一个一个的工厂,不仅解决了很多人的就业问题,而且让我们不再关注于制造所需方法本身,只需要告诉工厂,让工厂直接给你生产出来产品即可。简单工厂模式由一个工厂对象决定创造哪一种产品类的实例,我们用一段代码来讲述女娲造人的故事:首先定义一个接口,即我们需要的产品:public interface Human { //每个人种都有自己的肤色 void getColor(); //每

2022-04-19 17:39:27 138

原创 深入了解设计模式之单例模式(三)

接上回之讲,谈到枚举单例模式没有定义readReslove()方法,但是在反序列化的时候返回的仍是同一个对象,下面我们来揭开它的什么面纱:下载一个非常好用的反编译工具Jad(下载地址:https://varaneckas.com/jad/),解压后配置环境变量,就可以使用命令行调用了。After thirty minutes.........我电脑一直使用不了Jad反编译工具,又换了其他jd-gui也没给到我想要的效果,直接用javap -c进行反编译吧,代码如下:Compiled fro

2022-04-19 01:22:05 227

原创 深入了解设计模式之单例模式(二)

接上回之讲,我们通过反射来破坏单例模式,那么还有什么方法呢?序列化破坏单例模式一个单例对象创建好后,有时候需要将对象序列化写入磁盘,下次使用时再从磁盘读取进行反序列化,转化成内存里的对象。反序列化后的对象需要重新分配内存空间,重新创建。我们来看一段代码:public class Solution implements Serializable { private static final Solution INSTANCE = new Solution(); private

2022-04-18 00:46:10 187

原创 深入了解设计模式之单例模式(一)

单例模式的应用场景单例模式(Singleton Pattern)是确保一个类在任何情况下都绝对只有一个实例,并提供一个方法可以获取当前实例对象。单例模式是创建型模式。例如:生活中,公司的董事长,技术首席执行官都属于单例模式。源码中,Spring框架提供的Application Context,J2EE 标准中的ServletContext等也都是单例形式。饿汉式单例模式饿汉式单例模式在类加载的时候就立即初始化,并且创建单例对象。它绝对线程安全,因为类加载机制本身就是线程安全的,不存在访问安全问题

2022-04-17 00:02:46 255

原创 深入理解设计模式之设计原则(二)

接口隔离原则是指用多个专门的接口,而不要使用单一的总接口,客户端不应该依赖它不需要的接口,我们根据定义可以概括为以下几点:1,建立单一接口,不要建立臃肿庞大的接口。2,一个类对另一个类的依赖应该建立在最小的接口之上。3,尽量细化接口,接口中的方法尽量少(不是越少越好,适度)。接口隔离原则符合我们常说的高内聚,低耦合的设计思想,可以使类具有很好的可读性,可扩展性和可维护性。下面我们来看一段代码,来描述一个美女:public interface PrettyGirl { //要有漂亮

2022-04-15 17:49:43 346 1

原创 Java基础之Java位运算

平时有时看java api的源代码,因为这是和大师级工程师最亲密的接触,所以有时候就看到很多位运算并经常不知所措,于是就系统性的学习了java的位运算。在位运算前,需要了解二进制码的相关知识,希望本文对大家的学习有所帮助。机器数一个数在计算机中以二进制的形式存在,这种二进制的表现形式叫做这个数的机器数。机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1。比如,十进制的+4,转换成二进制就是00000100,如果是-4,则为10000100,这里的00000100和100

2022-04-14 23:52:01 609

原创 Spring编程常见错误(二)

在使用@Autowire注解时,无论是老鸟还是小鸟,一定都会遇到过这个问题:required a single bean, but 2 were found意思是需要一个bean,但实际上我们可能提供了多个。为了重现这个错误,我们可以写个案例来实现一下:@Controllerpublic class StudentController { @Autowired StudentService studentService; @GetMapping("/hand

2022-04-14 16:09:26 382

原创 深入理解设计模式之设计原则(一)

什么是设计模式?它是一套理论,由软件界的先辈们总结出的一套可以反复使用的经验,它可以提高代码的复用性,增强系统的可维护性,解决一系列的复杂问题。需求是最难把握的,包括我们在实际开发的过程中,明白到需求的变更是不可控的,幸运的是,设计模式给了我们指导,大佬们首先提出了六大设计原则,设计原则的基础上诞生了23种设计模式。设计模式是一种思想,并不像Spring一样是一个工具,它是软件行业的经验总结,无论使用什么编程语言,设计模式都可以自由的侵入。单一指责原则...

2022-04-14 00:39:09 308

原创 Spring编程常见错误(一)

Spring的核心是围绕Bean进行的,无论是Spring Boot 还是 Spring Cloud ,凡是带Spring的技术,都离不开bean的定义,所以就显得尤为重要。当然这么重要的工作,Spring给我们提供了多种简单的定义bean的方法,全得益于“约定大于配置”,但我们可能不是对所有的约定都了如指掌,仍然会在bean的定义上犯一些经典的错误。接下来我们就了解一下那些经典错误并了解一下原理,你也可以对照自己是否犯过,想想自己当初是如何解决的。隐式扫描不到bean的定义通常我们为了快速

2022-04-13 15:54:01 1281 2

空空如也

空空如也

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

TA关注的人

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