mashaokang1314的博客

123
私信 关注
Mrkang1314
码龄3年
  • 249,344
    被访问量
  • 321
    原创文章
  • 13,794
    作者排名
  • 137
    粉丝数量
  • 于 2017-12-25 加入CSDN
获得成就
  • 获得162次点赞
  • 内容获得72次评论
  • 获得622次收藏
荣誉勋章
TA的专栏
  • 网络信息安全
    1篇
  • Java语言
    141篇
  • Spring
    15篇
  • 数据库
    27篇
  • Java并发编程
    13篇
  • SpringCloud
    7篇
  • SpringBoot
    6篇
  • JVM
    13篇
  • 程序人生
    6篇
  • linux
    4篇
  • Linux Shell
    6篇
  • Docker
    3篇
  • Hadoop
    2篇
  • Python语言
    31篇
  • Linux运维
    25篇
  • python爬虫
    21篇
  • 数据分析
    6篇
  • Django
    16篇
  • Flask
    14篇
  • redis
    9篇
  • 分布式
    7篇
  • RabbitMQ
    1篇
  • Tomcat
    1篇
  • 面试总结
    6篇
  • 数据结构
    5篇
  • 笔试题算法总结
    8篇
  • 计算机理论基础
    4篇
  • Android
  • 前端
    4篇
  • 计算机网络
    6篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Mysql工作原理——增删改类型undo日志格式介绍

事务回滚的需求:把为了回滚而记录的东西称为撤销日志,即undo日志。事务id给事务分配id的时机事务分为只读事务或者读写事务:只读事务中不可以对普通的表进行增、删、改操作,但可以对临时表做增、删、改操作。读写事务中可以对表执行增删改操作;如果某个事务执行过程中对某个表执行了增删改操作,那么InnoDB存储引擎就会给它分配一个独一无二的事务id。对于只读事务来说,只有在它第一次对某个用户创建的链式表执行增删改操作的时候才会为这个事务分配一个事务id,否则不分配。对于读写.
原创
10阅读
0评论
0点赞
发布博客于 7 天前

Mysql工作原理——redo日志文件和恢复操作

redo日志刷盘时机log Buffer空间不足时log buffer 的大小是有限的,如果不停的往这个有限大小的log buffer里散入日志,很快就会被填满,如果当前写入log buffer的redo日志量已经占满了log buffer总容量的大约一半左右,就需要把这些日志刷新到磁盘上。事务提交时之所以使用redo日志主要是因为它占用的空间少,还是顺序写,在事务提交时可以不把修改过的Buffer Pool页面刷新到磁盘,但是为了保证持久性,必须要把这些页面对应的redo日志刷新到磁盘。后台线
原创
23阅读
0评论
0点赞
发布博客于 9 天前

Mysql工作原理——redo日志概念及类别

redo日志InnoDB存储引擎是以页为单位来管理存储的,并且在真正访问页面之前,需要把磁盘上的页缓存到内存中的BufferPool之后才可以访问,但是数据库事务又强调持久性,就是对于一个已经提交的事务,在事务提交后即使系统发生崩溃,这个事务对数据库中所做的更改也不能丢失。假设在事务提交后突然发生了某个故障,导致内存中的数据都失效了,但是由于我们只在内存Buffer Pool中修改了页面,所欲导致数据丢失。解决这个问题最简单的方法就是在事务完成之前把该事务的所有页面都刷新到磁盘。但是这种做法有两个问题
原创
18阅读
0评论
0点赞
发布博客于 9 天前

密码学的基本概念

基于密码学的安全通信基于对称加密算法的安全通信一般来说,对称加密算法的特此案就是在加密和解密中需要使用相同的密钥。基于对称加密算法的安全网络通信协议存在以下问题:密钥必须秘密地进行分配,而这通常只能采用物理的传输手段实现,对于自动化程度高和应用广泛的加密系统来说,这样做的代价是不可接受的;一旦加密密钥丢失,那么获得密钥的攻击者就有能力解密通信中的任何数据,并且可以假装成其中任何一方发送虚假信息而不被发觉;随着用户的增多,需要密钥个数会成平方级迅速增长。基于公开密钥算法的安全通信
原创
23阅读
0评论
0点赞
发布博客于 11 天前

Spring AOP的设计与实现——JDK动态代理、CGLIB动态代理

概念了解:Spring AOP面向切面编程、动态代理的理解深入理解SpringAOP中的动态代理JVM的动态代理特性在Spring AOP实现中,使用的核心技术是动态代理,这种动态代理实际上是JDK的一个特性。通过JDK的动态代理特性,可以为任意Java对象创建代理对象,通过Java Reflection API来完成。在代理模式的的设计中,会设计一个接口和目标对象一直的对象Proxy,它们都实现了同一个接口的方法。对目标对象方法的调用,往往就被代理对象给拦截了,通过这种拦截,为目标对象方法操
原创
41阅读
1评论
0点赞
发布博客于 2 月前

Spring IoC容器设计与实现——容器相关特性的实现(lazy-init属性和预实例化、FactoryBean、BeanPostProcessor、autowire、Bean依赖检查)

ApplicationContext和Bean的初始化及销毁对于BeanFactory,特别是ApplicationContext,容器自身也有一个初始化及销毁关闭的过程。ApplicationContext启动的过程是在AbstractApplicationContext中实现的,在这之前需要一些准备工作prepareBeanFactory()方法实现,这个方法中为容器配置了ClassLoader、PropertyEditor和BeanPostProcessor等,为容器启动做好了必要的准备工作。
原创
27阅读
1评论
1点赞
发布博客于 2 月前

Spring IoC容器设计与实现——IoC容器的依赖注入

Spring IoC容器设计与实现——IoC容器的初始化过程依赖注入的过程式用户第一次向IoC容器索要Bean时触发的,当然也有例外,就是可以通过控制lazy-init属性来让容器完成对Bean的预实例化,这个预实例化也是一个完成依赖注入的过程。getBean()方法就是触发依赖注入的接口定义。下来通过DefaultListableBeanFactory的基类 AbstractBeanFactory入手去看看getBean的实现。...
原创
20阅读
0评论
0点赞
发布博客于 2 月前

Spring IoC容器设计与实现——IoC容器的初始化过程

前言在面向对象系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上,这些依赖关系可以通过把对象的依赖注入交给框架或IoC容器来完成。依赖控制反转的实现有很多种方式,在spring中,IoC容器是实现这个模式的载体,它可以在对象生成或初始化时直接将数据注入对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖。这种方案把对象的依赖关系有序地建立起来,简化了对象依赖关系的管理,很大程度上简化了面向对象系统的复杂性。IoC容器和依赖反转模式控制反转时关于
原创
24阅读
0评论
0点赞
发布博客于 2 月前

Spring——高级装配

环境与profile在不同的环境中某个bean会有所不同,我们必须要有一种方法来配置,使其在每种环境下都会选择最为合适的配置。配置profile bean在构建bean的过程中需要根据环境决定哪个bean创建、哪个bean不创建。不过spring并不是在构建的时候做出这样的决策,而是等到运行时再来确定。spring3.1引入bean profile功能,将所有不同的bean定义整理到一个或多个profile中,再将应用部署到每个环境中,要确保对应的profile处于激活状态。使用注解@Profi
原创
25阅读
0评论
0点赞
发布博客于 2 月前

Spring对Bean Validation支持的核心API

spring虽然没有直接实现Bean校验这块JSR规范,但是从spring3.0开始,就提供了对Bean Valication的支持。BeanValidationPostProcessor能够去校验Spring容器中的Bean,从而决定允不允许它初始化完成,若校验不通过,在违反约束的情况下就会抛出异常,阻止容器的正常启动。public class BeanValidationPostProcessor implements BeanPostProcessor, InitializingBean {
原创
21阅读
0评论
0点赞
发布博客于 2 月前

Java 数据校验 Bean Validation

为什么要有数据校验传统的if-else判断参数是否合法的方法存在以下几个问题:需要写大量的代码来进行参数基本验证;需要通过文字注释来知道每个入参的约束是什么;每个程序员的参数验证方式可能不一样,参数验证抛出的异常也不一样,导致后期几乎无法维护;如上会导致代码冗余和一些管理的问题,最好是将验证逻辑与相应域模型进行绑定。Bean Validation是标准,它的参考实现除了Hibernate Validator外还有Apcache BVal。Bean Validation标准接口的
原创
37阅读
1评论
0点赞
发布博客于 2 月前

基于Hadoop的决策树识别银行贷款风险.rar

在Hadoop大数据平台的基础上构建了一个基于MapReduce框架并行化的C4.5决策树算法,并采用此算法设计了一套银行贷款的风险预测系统。算法结合MapReduce框架、HDFS 文件存储系统,使用Java语言编写,根据贷款人的各个特征属性信息增益率来选择决策点。其中包含对连续值属性、离散值属性的处理,采用后剪枝悲观剪枝的方法对决策树进行剪枝,以避免决策树出现过拟合的特征。系统包含数据导入、数据分析、结果展示等模块,操作简单、快捷,能准确预测贷款人的信誉情况,平均准确率达到65%~80%,而且与传统的决策树模型相比在性能方面有更好的提升。
rar
发布资源于 2 月前

Mysql —— InnoDB中的Buffer Pool

为了调节磁盘和CPU的效率,InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,旧会把完整的页数据全部加载到内存中,在进行完读写后并不着急把该页对应的内存释放掉,而是将其缓存起来,这样将来有请求再次访问该页面时,就可以省去磁盘IO的开销。Buffer Pool 概述为了缓存磁盘的页,在Mysql服务器启动的时候就向操作系统申请一片连续的内存,起名为Buffer Pool(缓冲池),其大小可根据硬件配置决定。...
原创
17阅读
0评论
0点赞
发布博客于 2 月前

Mysql工作原理——基于规则的优化

Mysql依据一些规则将很糟糕的语句转换成某种可以比较高效执行的形式,这个过程被称为查询重写。条件化简移除不必要的括号((a = 5 AND b = c) OR ((a > c) AND (c < 5)))#化简后(a = 5 and b = c) OR (a > c AND c < 5)常量传递(constant_propagation)a=5 and b>a; #花间后a=5 and b>5;等值传递(equality_propagat
原创
31阅读
0评论
0点赞
发布博客于 2 月前

Mysql表连接原理

嵌套循环连接(Netsted-Loop Join)对于两表连接,驱动表只会被访问一遍,但是被驱动表却要访问好多遍,具体访问几遍取决于对驱动表执行单表查询后的结果集中的记录条数。对于内连接,选取哪个表为驱动表都没关系,而外连接的驱动表是固定的,也就是说左外连接的驱动表就是左边的那个表,而右外连接的驱动表就是右边那个表。两表连接的大致过程:选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的单表访问方法来执行对驱动表的单表查询。对上一步中查询驱动得到的结果集中每一条记录都被分别到被驱动表中查找匹配.
原创
31阅读
0评论
0点赞
发布博客于 3 月前

单表访问方法

访问方法(access method)的概念我们平时所写的查询语句本质上只是一种声明式的语法,只是告诉Mysql我们要获取的数据符合哪些规则。之所以把Mysql执行查询的方式称为访问方法或访问类型,同一个查询语句可能使用多种不同的访问方法来执行,芮然最后查询结果都是一样的。CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100),
原创
18阅读
0评论
0点赞
发布博客于 3 月前

Mysql工作原理——InnoDB的表空间

独立表空间结构区(extent)表空间中的页太多了,为了更好管理这些页面,设计者提出了区的概念,对于16KB的页来说,连续64个页就是一个区,也就是说一个区默认占用1MB空间大小。不论是系统表空间还是独立表空间,都可以看成是由若干个区组成的,每256个区被划分为一组:其中extent 0 ~ extent 255这256个区算是第一个组,extent 256 ~ extent 511这256个区算是第二个组,extent 512 ~ extent 767这256个区算是第三个组(上图中并未画全第三
原创
35阅读
2评论
0点赞
发布博客于 3 月前

Mysql工作原理——InnoDB数据页结构

数据页结构数据页代表这块16KB大小的存储空间可以被划分为过个部分,不同部分有不同功能:记录在页中的存储我们自己存储的记录会按照我们制定的航格式存储到User Records部分。但是在一开始生成页的时候,并没有这个部分,每当插入一条记录,都会从Free Space部分去申请一个记录大小的空间划分到User Records部分,当Free Space部分的空间全部被替代之后,也就意味着这个页使用完了,如果还有新的记录插入的话,就需要去申请新的页。记录头信息的秘密先创建一个表:mysql&
原创
79阅读
0评论
0点赞
发布博客于 3 月前

Mysql工作原理——InnoDB行格式、数据页结构

存储引擎负责对表中的数据进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。InnoDB存储引擎数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘读出来;InnoDB读取数据的方式将数据划分为若干页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般是16KB,当需要从磁盘中读
原创
18阅读
0评论
0点赞
发布博客于 3 月前

Mysql工作原理——服务器与客户端

MySQL整个运行需要服务端与客户端的共同参与,运行着的服务器程序和客户端程序本质上都是是计算机上的一个进程,所以客户端进程向服务器进程发送请求并得到回复的过程本质上是一个进程间通信的过程。MySQL支持下面三种通信方式:使用TCP/IP协议通信;命名管道和共享内存Unix域套接字文件服务器处理客户端请求客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。连接管理客户端采用以上的通信方式来与服务器建立连接,每当有一个
原创
59阅读
0评论
0点赞
发布博客于 3 月前

重构——简化函数调用

Separate Query from Modifier(将查询函数和修改函数分离)某个函数既返回对象状态值,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改。动机如果某个函数只是向你传递一个值,没有任何看得到的副作用。那么你就可以任意调用这个函数,也可以把调用动作搬到函数的其他地方,简而言之,需要操心的事情少了。对于有副作用和无副作用两种函数之间的差异,下面是一条好规则:任何有返回值的函数,都不应该有看得到的副作用;对于看得到的副作用,最常见的优化办法是:将查询所得结果缓存于
原创
21阅读
0评论
0点赞
发布博客于 4 月前

重构——重新组织数据

Self Encapsulate Field(自封装字段)简介访问变量的好处:子类可以通过覆写一个函数而改变获取数据的途径;还支持更灵活的数据管理方式,如延迟初始化。直接访问变量的好处:代码比较容易阅读;如果你想访问超类中的一个字段,却又想在子类中将对这个变量的访问改为一个计算后的值,这时候就应该进行“字段自我封装”。值对象和引用对象之间的相互转换值对象和引用对象如果引用对象开始变得难以使用,也许就应该将它改为值对象,引用对象必须被某种方式控制,你总是必须向其控制者请求适当的引用对象。它们
原创
25阅读
0评论
0点赞
发布博客于 4 月前

Java中带返回值的线程池Future

如何获取任务执行结果Java通过ThreadPoolExecutor提供的三个submit()方法和一个FutureTask工具类来支持获得任务执行结果的需求。// 提交Runnable任务Future<?> submit(Runnable task);// 提交Callable任务<T> Future<T> submit(Callable<T> task);// 提交Runnable任务及结果引用 <T> Futur
原创
158阅读
0评论
0点赞
发布博客于 4 月前

重构——在对象之间搬移特性

Move Method(搬移函数)你的程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用后者,或被后者调用;则在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。动机如果一个类有太多行为,或如果一个类与另一个类有太多合作而形成高度耦合,就使用搬移函数,通过这种手段,可以使系统中的类更简单。做法检查源类中被源函数所使用的的一切特性,考虑它们是否也该被搬移;检查源类的子类和超类,看看是否有该函数的其他声明;在目标类中声明这个函数;将
原创
18阅读
0评论
0点赞
发布博客于 4 月前

重构——重新组织函数

Extract Method提炼函数动机首先如果每个函数的粒度都很小,那么函数被复用的机会就更大;其次,这会使高层函数读起来就像一系列注释;再次,如果函数都是细粒度,那么函数的覆写也会更容易。做法创造一个新函数,根据这个函数的意图来对它进行命名(以它“做什么”来命名而是“怎么做”)。将提炼出来的代码从源函数复制到新建的目标函数中。仔细检查提炼出的代码,看看其中是否引用了**“作用域限于源函数”的变量**(包括局部变量和源函数参数);检查是否有“仅用于被提炼代码段”的临时变量,如果有,在目标函
原创
76阅读
1评论
0点赞
发布博客于 4 月前

Semaphore如何快速实现一个限流器

信号量是由大名鼎鼎的计算机科学家迪杰斯特拉(Dijkstra)于 1965 年提出,在这之后的 15 年,信号量一直都是并发编程领域的终结者,直到 1980 年管程被提出来,我们才有了第二选择。目前几乎所有支持并发编程的语言都支持信号量机制,所以学好信号量还是很有必要的。信号量模型信号量模型可以简单概括为:一个计数器、一个等待队列、三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通过信号量模型提供的三个方法来访问它们,这三个方法分别是:init()、down()和up()。in.
原创
45阅读
0评论
0点赞
发布博客于 4 月前

Lock和Condition隐藏在并发包里的管程

Java SDK并发包通过Lock和Condition两个接口来实现管程(管程——并发编程的万能钥匙),其中Lock用于解决互斥问题,Condition用于解决同步问题。再造管程的理由既然Java里已经存在管程的实现synchronized并且做了许多优化,为什么还需要在并发包里开发Lock和Condition。原因是synchronized申请资源的时候,如果申请不到,线程直接进入阻塞状态,而线程进入阻塞状态,啥也干不了,也释放不了线程已经占有的资源。我们希望的是,对于“不可抢占”这个条件,占用部分
原创
31阅读
0评论
0点赞
发布博客于 4 月前

管程——并发的万能钥匙

参考原文:管程——并发万能钥匙什么是管程所谓管程,指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。Java采用的是管程技术,Synchronized关键字及wait()、notify()、notifyAll()这三个方法都是管程的组成部分。管程是一种概念,任何语言都可以使用,在Java中每个加锁的对象都绑定着一个管程。MESA模型在管程的发展史上,先后出现过三种不同的管程模型,分别是:Hasen模型、Hoare模型和MESA模型,目前广泛使用的是MESA模型,并且Java管程的实现
原创
31阅读
0评论
0点赞
发布博客于 4 月前

从不同角度分析过滤器和拦截器的区别

拦截器和过滤器什么是过滤器?过滤器是以链的形式在容器中处理的,这意味着它们可以在请求达到servlet之前对其进行访问,也可以在响应返回客户端之前对其进行拦截,这种访问使得过滤器可以检查并修改请求和响应的内容。什么是拦截器?拦截器是AOP的一种实现策略,用于在某个方法或字段被访问前对它进行拦截,然后在其之前或之后加上某些操作,同样,Interceptor也是链式调用,每个interceptor的调用会依据它声明顺序依次执行。过滤器中的接口方法init():在Servlet容器创建过滤器实例的
原创
47阅读
0评论
0点赞
发布博客于 5 月前

使用Redis实现session共享

Session共享什么是session由于HTTP协议是无状态的协议,因而服务器需要记录用户的状态时,就需要用某种机制来识别具体的用户。session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session,客户端浏览器再次访问时只需要从该session中查找该客户端的状态就可以了。Spring SessionSpring Session提供了一套创建和管理Se
原创
68阅读
0评论
0点赞
发布博客于 6 月前

SpringBoot和redis的使用

spring-boot-starter-data-redisSpringBoot提供了对redis继承的组件包:spring-boot-starter-data-redis,依赖于spring-data-redis和lettuce,SpringBoot1.0默认使用的是Jedis客户端,2.0换成了Lettuce。Lettuce:是一个可伸缩线程安全的Redis客户端,多个线程共享同一个RedisConnection,它利用优秀Netty NIO框架来有效管理多个连接;Spring Data:是Sp
原创
65阅读
0评论
0点赞
发布博客于 6 月前

Spring Data JPA的使用

概念什么是JPAJPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供一种对象关联映射工具来管理Java应用中的关系数据,它的出现主要是为了简化现有持久化开发工作和整合ORM技术。Spring Data JPASpring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,可以让开发者用极简的代理即可实现对数据的访问和操作,提供包括增、删、改、查等在内的常用功能。Spring Data JPA其实就是s
原创
57阅读
0评论
0点赞
发布博客于 6 月前

深入理解spring容器扩展点BeanFactoryPostProcessor

spring官网是这样描述BeanFactoryPortProcessor的:BeanFactoryPortProcessor可以对Bean配置元数据进行操作,也就是说,spring容器允许BeanFactoryPortProcessor读取指定Bean的配置元数据,并可以在Bean被实例花钱修改它,这个的配置元数据就是BeanDefination。我们可以配置多个BeanFactoryPortProcessor,并且只要我们配置的BeanFactoryPortProcessor实现了Ordered.
原创
67阅读
0评论
0点赞
发布博客于 6 月前

Java多线程案例

两个线程交替运行public class WaitAndNotify { public static Object lock = new Object(); static class ThreadA implements Runnable{ @Override public void run() { synchronized (lock){ for (int i = 0; i < 5; i++)
原创
36阅读
0评论
0点赞
发布博客于 6 月前

Java并发编程——AQS(Abstract Queued Synchronizer)

AQS简介AQS是AbstractQueuedSynchronizer的简称,即抽象队列同步器;是一个用来构建锁和同步器的框架。AQS的数据结构AQS内部使用了一个volatile的变量state来作为资源的标识,同时定义了几个获取和改版state的protected方法,子类可以覆盖这些方法来实现自己的逻辑:getState();setState();compareAndSetState();这三种操作均是原子操作,其中compareAndSetState的实现依赖于Unsafe的comp
原创
66阅读
0评论
0点赞
发布博客于 6 月前

Spring BeanDefinition

什么是BeanDefinitionBeanDefination包含了我们对bean做的配置,比如XML<bean/>标签的形式进行配置;Spring将我们对bean的定义信息进行了抽象,抽象后的实体就是BeanDefinition,并且Spring会以此作为标准来对Bean进行创建;BeanDefinition包含以下元数据:一个全限定类名,通常来说,就是对应的bean的全限定类名;bean的行为配置元素,这些元素展示了这个bean在容器中是如何工作的,包括scopelifec
原创
108阅读
0评论
0点赞
发布博客于 6 月前

Java中的阻塞队列

BlockingQueue 是Java.util.concurrent包下重要的数据结构,区别于普通的队列,BlockingQueue提供了线程安全的队列访问方式,并发包下很多高级同步类的实现都是基于BlockingQueue实现的,一般用于生产者-消费者模式,生产者就是往队列里添加元素的线程,消费者是从队列里拿元素的线程,BlockingQueue就是存放元素的容器。BlockingQueue的操作方法阻塞队列提供了四组不同的方法用于插入、移除、检查元素:处理方法抛出异常返回特殊值.
原创
46阅读
0评论
0点赞
发布博客于 6 月前

深入理解JVM——字节码

字节码意义字节码存在的意义就是解决Java跨平台问题,一次编写,到处执行。在不同的操作系统、不同硬件平台上,均可以不同修改代码即可顺畅地执行。作为Java与操作系统的中间码,成功解耦了语言对平台的依赖性。什么是字节码Java所有的指令有200个左右,一个字节(8位)可以存储256中不同的指令信息,一个这样的字节称为字节码。在执行过程中,JVM将字节码解释执行,屏蔽对底层操作系统的依赖,JVM也可以将字节码编译执行,如果是热点代码。会通过JIT动态地编译为机器码,提高执行效率。字节码主要指令1、加
原创
82阅读
0评论
0点赞
发布博客于 6 月前

IDEA快捷键使用

编辑快捷键快捷键功能Ctrl + Q快速查看使用文档Ctrl + O当前类可以重写的方法Ctrl + l当前类可以实现的方法Ctrl + Alt + T选中代码,使用(if…else,try…catch等语句)环绕Ctrl + /单行注释或者取消单行注释Ctrl + Shift + /块注释或取消块注释Ctrl + W连续增加,选中一行代码Ctrl + Shift + W减少连续选中的代码,将当前选择减小到以前的状态Ctr
原创
63阅读
0评论
0点赞
发布博客于 7 月前

Mysql事务和锁——常见问题总结

数据库事务隔离读未提交:一个事务可以读到另一个事务修改但是未提交的数据,会产生脏读、幻读;读已提交:一个事务可以读取到另一个事务修改并且提交了的数据;会产生幻读;可重复读:不会产生幻读,在一个事务中读取不到被别的事务修改了的数据,避免了幻读;串行化读:事务一个一个执行,同一个数据只能由一个事务来访问。每次读取都需要获得表级共享锁,读写相互都会阻塞。在InnoDB索引下,查询操作通过MVCC多版本并发控制来实现,事务修改数据后就会产生一个数据版本,版本之间使用指针形成版本链,存在一个ReadView
原创
112阅读
0评论
0点赞
发布博客于 7 月前

《代码简介之道》读书笔记

有意义的命名名副其实不管是变量、函数或者类,它们的命名应该与它们要做的事有关;避免误导必须避免留下掩藏代码本意的错误线索;别用accountList来指定一组账号,除非真的是List;避免使用名称太过相似的字符串;避免使用单个“O”或“l”单个字符表示变量名;使用可搜索的名称名称长短应与其作用域大小相对应,比如在方法中的局部变量名可以使用单个字符表示,若是整个类或者类外引用需要使用大写短语表示,便于搜索。避免思维映射避免将想要表达的英文变量名映射成的那个字符,不便阅读;类名类名
原创
60阅读
0评论
0点赞
发布博客于 7 月前

clean code——对象和数据结构的区别

对于对象需要隐藏其实现,但是并非只是对变量加上get、set操作这么简单,隐藏实现关乎抽象,类并不简单地用取值器和赋值器将其变量推向外间,而是暴露抽象接口,以便用户无需了解数据的实现就能操作数据本体。数据、对象的反对称性对象把数据隐藏于抽象之后,暴露操作数据的函数;数据结构暴露其数据,而没有提供有意义的函数;过程式代码便于在不改动既有数据结构的前提下添加新函数。面向对象代码便于在不改动既有函数的前提下添加新类,开闭原则,对修改关闭对扩展开放得墨忒耳律模块不应了解它所操作对象的内部情形,类C的
原创
58阅读
0评论
0点赞
发布博客于 7 月前

设计模式——应用场景

单例模式应用场景1、系统只需要一个对象;2、客户调用类的单个实例只允许使用一个公共访问点,除了该访问点,不能通过其他途径访问该实例。适配器模式应用场景1、系统需要使用一些现有的类,而这些类的接口不符合系统的要求,甚至没有这些类的源代码;2、想创建一个可以重复的类,用于与一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作。...
原创
953阅读
0评论
0点赞
发布博客于 7 月前

redis cluster高可用集群搭建、集群扩容、集群缩容

redis集群演变过程单机版核心技术:持久化持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。主从复制复制是高可用redis的基础,哨兵和集群都是在复制基础上实现高可用,复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复,缺陷是故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制;哨兵在复制的基础上,哨兵实现了自动化的故障恢复,缺陷是写操作无法负载均衡;存储能力受到单机的限制。集群通过集群,redis解决了写操作
原创
104阅读
0评论
0点赞
发布博客于 9 月前

Nginx负载均衡与生产环境应用

Nginx反向代理实现反向代理基本配置正向代理正向代理是指客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,再由代理服务器访问目标服务器并返回客户端。这个过程中客户端需要知道代理服务器的地址,并配置连接。反向代理反向代理是指客户端访问目标服务器,在目标服务器内部有一个统一接入网关将请求转发至后端真正处理的服务器并返回结果。这个过程当中客户端不需要知道代理服务器地址,代理对客户端是透明的。区别正向代理反向代理代理服务器位置客户端与服务都能连接的位置
原创
118阅读
0评论
0点赞
发布博客于 9 月前

Nginx核心模块与配置

Nginx简介Nginx是一个高性能WEB服务器,除了它之外还有Apache、Tomcat、Jetty、IIS等都是WEB服务器。相应的也都有具备Web服务的基本功能。Nginx的优势Tomcat、Jetty面向java语言,先天就是重量级的Web服务器。IIS只能在Windows操作系统上运行,但是Window作为服务器从稳定性等方面都不如类似UNIX等系统,所以需要高性能Web服务器的场合下IIS并不占优势;Apache的发展时期很长,作为世界第一大Web服务器,它有许多优点,如稳定、开源、
原创
78阅读
0评论
0点赞
发布博客于 9 月前

Docker基础篇——容器的简单操作

确保docker已经就绪[root@localhost docker]# docker infoClient: Debug Mode: falseServer: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 19.03.8 Storage Driver: devicema...
原创
91阅读
0评论
0点赞
发布博客于 11 月前

Linux RedHat7上安装Docker以及配置Docker守护进程

环境准备查看内核版本在2.6内核下Docker运行会比较卡,Docker官方建议3.10,所以先升级版本。导入keyrpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装ELRepo到Centosrpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo....
原创
505阅读
0评论
0点赞
发布博客于 11 月前

HDFS——Hadoop内置分布式文件系统

前言Hadoop有一个被称为HDFS的分布式系统,全称为Hadoop Distributed FileSystem。HDFS的概念块磁盘有块的大小,代表着能够读写的最小数据量,文件系统通过处理大小为磁盘块大小证书背的数据块来运作磁盘。文件系统块大小一般为几千字节,而磁盘块大小为512字节。HDFS也有块的概念,默认为64MB,作为单独的单元存储,其中小于一个块大小的文件不会占据整个块空...
原创
84阅读
0评论
0点赞
发布博客于 1 年前

Docker基础篇——初识

前提概念了解云计算云计算是分布式计算的一种,是通过网络云将巨大的数据计算处理分解成无数小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算把许多计算资源集合起来,通过软件实现自动化管理,之需要很少的人参与,就能让资源被很快利用。将计算能力作为一种商品,一种资源,可以在互联网上流通,让每一个使用互联网的人都可以使用网络上的庞大计算资源和数据中心。云计...
原创
105阅读
0评论
0点赞
发布博客于 1 年前

Java实现基于C4.5算法的决策树,实现银行贷款风险预测

使用Java实现基于C4.5算法的决策树,实现银行贷款风险预测,包括对离散属性和连续属性的处理。适用于离散属性、连续属性共存的数据。
rar
发布资源于 1 年前

网络安全——基础篇(一)

OSI安全框架OSI安全框架,给出一种系统化的定义方法,提供安全的一种组织方法:安全攻击被动攻击: 主要特性是对传输进行窃听和检测;被动攻击不涉及对数据的更改,所以很难察觉,处理被动攻击的重点是预防,不是检测。主动攻击包括对数据流进行修改或者伪造数据流,主要分为四类:伪装、重播、消息修改、拒绝服务。伪装是指某个实体家庄别的实体,途中路径2;重播是指将获得的信息再次发送以产生非授权...
原创
280阅读
0评论
0点赞
发布博客于 1 年前

了解MapReduce运行机制

MapReduce初识Hadoop与MapReduce的关系Hadoop提供了一个稳定的共享存储和分析系统,存储由HDFS实现,分析由MapReduce实现。对MapReduce的理解MapReduce的工作过程分为两个阶段:map阶段和reduce阶段,每个阶段都有键值对作为输入和输出。MapReduce作业是客户端执行的单位,包括输入数据、MapReduce·程序和配置信息,Hado...
原创
100阅读
0评论
0点赞
发布博客于 1 年前

Linux Shell——循环与结构化命令

for循环for variable in (list)do commanddone #!/bin/bashfor variable in {1..5}do echo "Hello,Welcome $variable times"done#!/bin/bash#步长为2for variable in {1..5..2}do echo "Hello,Welcome $...
原创
63阅读
0评论
0点赞
发布博客于 1 年前

Linux Shell——退出、测试、判断及操作符

退出状态在Linux系统中,每当命令执行完成后,系统都会返回一个退出状态,该退出状态用一整数表示,状态值为0,表示命令运行成功,不为0时表示运行失败。最后一次执行命令的退出状态被曝存在内置变量"$?"中,可以通过echo语句测试命令是否运行成功。退出状态以及含义状态值含义0表示运行成功1~125运行失败,脚本命令、系统命令错误或者参数传递错误126找到该...
原创
340阅读
0评论
0点赞
发布博客于 1 年前

Linux Shell——变量

分类本地变量相当于Java中的局部变量,只存在于当前shell。环境变量所有应用程序都有效。位置参数用于向shell脚本传递参数,只读的。变量赋值和替换变量是某个值的名称,引用变量值就成为变量替换,$符号是变量替换符号,如variable是变量名,则$variable就表示变量的值。变量赋值的两种格式variable=value${ variable=value }va...
原创
54阅读
0评论
0点赞
发布博客于 1 年前

Linux Shell——awk编程

awk模式匹配任何awk都是由模式和动作组成,模式决定动作何时触发和触发时间,动作执行对输入行的处理。例子:第一种调用方式:命令[root@localhost demo]# awk '/^$/{print "This is a blank line."}' dialer-service.conf This is a blank line.This is a blank line.Th...
原创
60阅读
1评论
0点赞
发布博客于 1 年前

Apollo学习笔记——入门

核心概念application(应用)实际使用配置的应用,Apollo客户端在运行时需要知道当前应用是谁,从而可以去获取对应的配置,每个应用都需要有一个唯一的身份标识——appId。environment(环境)配置对应的环境,比如开发环境、测试环境、生产环境等,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而获取相应的配置。同一份代码部署在不同的环境就应该能够获取到不同环境的...
原创
262阅读
0评论
0点赞
发布博客于 2 年前

单元测试——各种方法行为怎么mock

mock被测试方法中多次调用的方法行为情景描述:在被测试方法中多处调用Utils工具类的checkCollection方法,并且每次返回的结果不同;解决方法:在when后面跟上多个thenReturn表示第几次调用返回结果;PowerMockito.when(Utils.checkCollection(companyList)) .thenReturn(t...
原创
1781阅读
0评论
0点赞
发布博客于 2 年前

使用maven命令将项目打成war包部署到tomcat上运行

安装插件<plugins> <!-- Force Java 7 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <...
原创
516阅读
0评论
0点赞
发布博客于 2 年前

数据结构常见面试题

将一个有序数组转换成搜索二叉树要求左右子树最大深度不超过1/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * ...
原创
45阅读
0评论
0点赞
发布博客于 2 年前

Redis实现分布式锁

在JVM同一个进程内的线程单进程的并发场景,我们可以使用语言和类库提供的锁如Sychronized和ReentranLock,对于部分不是的场景,我们需要使用分布式锁。分布式锁的实现方式Memcached分布式锁:利用Memcached的add命令,此命令是原子性操作,只有在key不存在的情况下,才能add成功。Redis分布式锁:类似于Memcached,redis的setnx命令也是...
原创
58阅读
0评论
0点赞
发布博客于 2 年前

面试常问——链表

链表的增、删、排序class Node{ int data; Node next=null; public Node(int data) { this.data = data; }}public class C1 { //头结点 Node head=null; public static void main(Stri...
原创
81阅读
0评论
0点赞
发布博客于 2 年前

HTTP1.0、HTTP1.1和HTTP2.0的区别

HTTP1.0和HTTP1.1的一些区别缓存处理在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入更多的缓存控制策略如If-Unmodified-Since、If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略;If-Modified-Since:这个字段指定一个时间,如果服务器...
原创
70阅读
0评论
0点赞
发布博客于 2 年前

计算机网络中的运输层TCP、UDP

应用层任务是通过应用进程间的交互来完成特定网络应用,应用层协议动议的是应用进程间通信和交互规则。如DNS、HTTP协议等;运输层负责向两台主机中进程之间的通信提供通用的数据传输服务,TCP协议;网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送;另一个任务是选择合适的路由,使源主机运输层所传下来的分组能够通过网络中的路由器找到目的主机。运输层协议概述运输层向它上面的应用...
原创
236阅读
0评论
0点赞
发布博客于 2 年前

动态规划背包问题

案例:背包容量为12kg,货物种类3种,3种货物重量分别为4,5,7,三种货物价值价值分别是500元,600元,800元,求能容纳最大价值;横向代表当前背包容量,纵向代表放入第n个货物,方格表示当前背包容量下放入第n个货物的最大价值。放入的情况放入的情况在容量为11的情况下,放入第一个货物,能放下,最大价值为500,放入第二个货物,能放下,如果放下价值为600,加上剩余空间最大价值11-5...
原创
58阅读
0评论
0点赞
发布博客于 2 年前

JVM G1(Garbage First)垃圾收集器

G1收集器概述:即可以收集新生代,也可以收集老年代;G1最大的特点是引入分区的思路,弱化了分代的概念。之前的几个垃圾收集器组合都有几个共同的特点:年轻代、老年代是独立且连续的内存块;年轻代收集使用单eden、双survivor进行复制算法;老年代收集必须扫描整个老年代区域;都是以尽可能少而快地执行GC为设计原则。G1的不同G1的设计原则是首先收集尽可能多的垃圾,因此G1并...
原创
153阅读
0评论
0点赞
发布博客于 2 年前

字符串处理问题

回文子串的个数给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。("回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。)具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。import java.util.Scanner;public class Main { public static void ...
原创
81阅读
0评论
0点赞
发布博客于 2 年前

数组问题

通过相邻交换,让相同的数相邻import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arra...
原创
107阅读
0评论
0点赞
发布博客于 2 年前

回溯问题

八皇后问题 //放置第k个皇后 static void f(int[] array,int k){ //边界条件:直到八个皇后放置完成,显示解 if(k==8){ show(array); return; } for (int i=0;i<8;i++){ ...
原创
58阅读
0评论
0点赞
发布博客于 2 年前

数值运算问题

两个大整数乘积import java.util.*;import java.io.*;import java.math.*;public class Test{ public static void main(String[] args){ Scanner in=new Scanner(System.in); String x,y,ans; ...
原创
215阅读
0评论
0点赞
发布博客于 2 年前

矩阵问题

有序矩阵中第K小的元素给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。import java.util.LinkedList;import java.util.Scanner;public class Main { public static void main(String[] args) ...
原创
235阅读
0评论
0点赞
发布博客于 2 年前

贪心算法问题

区间取值我们有很多区域,每个区域都是从a到b的闭区间,现在我们要从每个区间中挑选至少2个数,那么最少挑选多少个?输入44 72 40 23 6输出4import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class Main { public stati...
原创
121阅读
0评论
0点赞
发布博客于 2 年前

动态规划笔试题

方格走法有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。import java.util.Scanner;public class Main { public static void main(String[] args) { Sca...
原创
639阅读
0评论
0点赞
发布博客于 2 年前

redis网络编程——Selector模型

JNI什么是JNI?JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。提供了将Java与C/C++、汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Java 代码能够与其它编程语言互相操作,包括创建本地方法、更新Java对象、调用Java方法,引用 Java类,捕捉和抛出异常等,也允许 Java...
原创
813阅读
0评论
0点赞
发布博客于 2 年前

Spring BeanFactory和FactoryBean的区别、模拟BeanFactory实例化对象的过程

了解应用:https://blog.csdn.net/mashaokang1314/article/details/87365074BeanFactory从应用中我们可以了解到,使用Spring的好处就是,程序员不用再关心对象的创建过程与对象之间依赖关系,这些都交给Spring去管理了。spring通过BeanFactory来管理这些对象,我们只需做到以下几点:告诉spring哪些类是需要...
原创
162阅读
0评论
0点赞
发布博客于 2 年前

深入理解SpringAOP中的动态代理

代理什么是代理?买火车票,app就是一个代理;每个明星都有自己的经纪人,经纪人就是代理。个人理解:为了增强目标类的功能,但是不在目标类内部完成该功能的逻辑代码,根据开发原则单一原则和开闭原则,目标类有自己的主线任务要完成,而通过继承或聚合生成一个代理类,让代理类来完成非主线任务如:生成日志、使用事务等与主线任务无关的任务,实现无侵入式代码扩展。代理的意义通过生成代理,来避免访问真实的目标类...
原创
178阅读
0评论
0点赞
发布博客于 2 年前

Spring AOP面向切面编程、动态代理的理解

动态代理技术原始编写java代码方式.java -&amp;amp;amp;amp;gt; javac -&amp;amp;amp;amp;gt;.class -&amp;amp;amp;amp;gt; 类加载代理的意义:通过生成代理,来避免访问真实的目标类,因为如果直接访问目标类,则目标类要实现的功能过于繁琐。代理类和目标类需要有相同的方法,想要使用目标类必须通过代理类来调用,代理类中是你想要对目标类做的逻辑处理。在静态代理中你必须对每个方法都进行处理,较为繁
原创
465阅读
0评论
3点赞
发布博客于 2 年前

单例模式的7种实现方式

多个线程要操作同一个对象,保证对象的唯一性,实例化过程只实例化一次;解决的思路有一个实例化的过程(只执行一次),产生实例化对象;类外部不能new 这个对象;提供返回实例对象的方法;饿汉式在加载类时就实例化一个对象public class Singleton1 { //加载该类的时候就创建 private static Singleton1 singleton1=...
原创
113阅读
0评论
1点赞
发布博客于 2 年前

volatile底层实现(CPU的缓存一致性协议MESI)

CPU的缓存一致性协议MESI在多核CPU中,内存中的数据会在多个核心中存在数据副本,某一个核心发生修改操作,就产生了数据不一致的问题,而一致性协议正是用于保证多个CPU cache之间缓存共享数据的一致性。cache的写操作write through 写通每次CPU修改cache中的内容会立即更新到内存,也就意味着每次CPU写共享数据,会导致总线事务,因此这种方式常常会引起总线事务的竞争...
原创
4214阅读
11评论
8点赞
发布博客于 2 年前

深入理解synchronized锁原理

概https://blog.csdn.net/mashaokang1314/article/details/88750509
原创
257阅读
2评论
2点赞
发布博客于 2 年前

微服务中的授权中心(JWT如何加密传输、Cookie如何跨域写入请求)

JWT(JSON Web Token)结合Zuul的鉴权流程在微服务架构中,我们可以把服务的鉴权操作放到网关中,将未通过鉴权的的请求直接拦截;用户请求登录;Zuul将请求转发到授权中心,请求授权;授权中心校验完成,颁发JWT凭证;客户端请求其他功能携带JWT;Zuul将JWT交给授权中心校验,通过后放行;用户请求到达微服务;微服务将JWT交给鉴权中心,鉴权同时解析用户信息;...
原创
877阅读
0评论
2点赞
发布博客于 2 年前

JWT(JSON Web Token)

要解决的问题:跨域认证问题互联网服务的用户认证流程:用户向服务器发送用户名和密码;服务器验证通过后,在当前会话session里面保存相关数据,比如用户角色,登陆时间等;服务器向用户返回一个session_id,写入用户的Cookie;用户随后的每一次请求都会携带Cookie,将session_id传回服务器。服务器收到session_id后,根据他找到之前保存的该用户的信息,得知用户...
原创
97阅读
0评论
0点赞
发布博客于 2 年前

Spring Data Elasticsearch

Elasticsearch提供的Java客户端不太方便:很多地方需要拼接json字符串;需要自己把对象序列化为json存储;查询到结果也需要自己反序列化为对象;所以不适用原生的Java客户端,而使用Spring提供的Spring Data Elasticsearch简介Spring Data Elasticsearch是Spring Data项目下的一个子模块。官网:http:...
原创
168阅读
0评论
0点赞
发布博客于 2 年前

Elasticsearch的API的使用

APIRest风格API文档地址操作索引基本概念Elasticsearch是基于Lucence的全文检索,本质也是存储数据,很多概念与Mysql类似对比关系:索引(indices) ——>Databases数据库类型(type)——>Table数据表文档(Document)——>Row行字段(Field)——>Columns列Elasticsearc...
原创
80阅读
0评论
0点赞
发布博客于 2 年前

全文检索Elasticsearch的安装以及Kibana的安装

**官网:**https://www.elastic.co/cn/products/elasticsearch特点:分布式,无需人工搭建集群;Restful风格,一切API都遵循Rest原则,容易上手;近实时搜索,数据更新在Elasticsearch中几乎是完全同步的;定义一个分布式的实时文档存储,每个字段可以被索引与搜索;一个分布式实时分许搜索引擎;能担任上百个服务节点的扩...
原创
107阅读
0评论
0点赞
发布博客于 2 年前

使用axios拦截器如何处理错误响应

案例使用axios的get方式请求查询一张表,正确返回是List,代码如下: this.$http.get("/item/spu/page",{ params:{ search:this.search, //搜索条件字段 saleable:this.saleable, //上下架 page:this.p...
原创
3399阅读
0评论
0点赞
发布博客于 2 年前

使用tk-mybatis(通用Mapper)踩过的那些坑

编写实体类时注意的事项@Table(name = "tb_spec_param")@Datapublic class SpecParam { @Id @KeySql(useGeneratedKeys = true) private Long id; private Long cid; private Long groupId; private...
原创
11775阅读
0评论
1点赞
发布博客于 2 年前

分布式文件系统FastDFS的安装和使用

实现图片上传文件上传可能在每个微服务中都有需要,因此我们创建一个独立的微服务,专门处理各种文件上传。添加依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&...
原创
116阅读
0评论
0点赞
发布博客于 2 年前

跨域问题及CORS解决跨域

情景在manage.leyou.com域名下的网站,向服务器api.leyou.com发起ajax请求。什么是跨域问题?跨域是指跨域名的访问,一下情况都属于跨域:如果域名和端口都相同,但是请求路径不同,不属于跨域:www.jd.com/item与ww.jd.com/goods域名是指从http://双斜杠到后面的第一个/之间的部分。在开始的案例中,从manage.leyou,com...
原创
68阅读
0评论
0点赞
发布博客于 2 年前

Zuul网关

服务网关视为服务架构中一个不可或缺的部分,通过服务网关统一向外系统提供Rest API的过程,除了具备服务路由、负载均衡功能外,它还具备权限控制等功能。Spring Cloud Netflix中的Zuul就担任了遮掩的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。简介Zuul是Net...
原创
442阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud——Feign的使用

前言在之前的案例中我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String url="http://user-server/user/"+id; User user = restTemplate.getForObject(url, User.class);如果只做到这里,对于大项目来说就有大量重复的代码,格式基本相同,无非参数不一样。因为这里使用...
原创
243阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud——熔断器Hystrix

Hystix简介主页:https://github.com/Netflix/Hystrix/Hystix时Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止级联失败。熔断器Hystix时容错管理工具,作用是通过隔离、控制服务,从而对延迟和故障提供更强大的容错能力,避免整个系统被拖垮。复杂分布式架构通常都具有很多依赖,当一个应用高度耦合其他服务时非常危险且容易...
原创
172阅读
0评论
1点赞
发布博客于 2 年前

SpringCloud微服务场景模拟——认识Eureka和负载均衡机制

服务提供者我们新建一个项目,对外提供查询用户的服务:Spring脚手架创建工程先创建父工程配置依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifact...
原创
635阅读
0评论
0点赞
发布博客于 2 年前

认识微服务——SpringCloud入门

微服务的特点单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责;微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但是五脏俱全。面向服务:面向服务是说每个服务都要对外暴露服务接口API,并不关心服务的技术实现,做到与平台无关、与语言无关,也不限定什么技术实现,只要提供Rest接口即可。自治:自治是说服务间互相独立,互不干扰;团队...
原创
182阅读
0评论
1点赞
发布博客于 2 年前

SpringBoot实践——与其他框架或应用的整合

整合SpringMvc虽然默认配置已经可以使用SpringMVC了,不过有时候需要自定义配置。修改端口server: port: 8081访问静态资源现在我们的项目是一个jar工程,那么就没有webapp,那么静态资源该放在哪?在前面查看自动配置原理的时候看到有一个ResourceProperties的类,里面定义了静态资源的默认查找路径。https://blog.csdn.n...
原创
372阅读
0评论
0点赞
发布博客于 2 年前

SpringBoot 自动配置原理

使用SpringBoot之后,一个整合了SpringMVC的WEB工程开发变得无比简单,那些繁杂的配置都消失不见了,这是如何做到的?一切都是从main函数来的,所以来看看启动类:注解:@SpringBootApplicationrun方法:SpringApplication.run();了解@SpringBootApplication查看源码:这里的三个重点注解:@Spri...
原创
50阅读
0评论
0点赞
发布博客于 2 年前

tomcat总体架构

总体结构Server:接受请求并解析,完成相关任务,返回处理结果;通常情况下使用Socket监听服务器指定端口来实现该功能。Start:启动服务器,打开Socket链接,监听服务端口,接受客户端请求、处理、返回响应;stop:关闭服务器,释放资源;缺点:请求监听和请求处理放一起扩展性很差,比如协议的切换,tomcat独立部署使用HTTP协议,与Apache集成时使用AJP协议;网络协议...
原创
124阅读
0评论
0点赞
发布博客于 2 年前

索引底层原理分析、索引实战

存储引擎负责对表中的数据进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。InnoDB存储引擎数据会存储到磁盘上,在真正处理数据时需要先将数据加载到内存,表中读取某些记录时,InnoDB存储引擎不需要一条一条的把记录从磁盘读出来;InnoDB读取数据的方式...
原创
365阅读
0评论
0点赞
发布博客于 2 年前

Mybatis执行查询过程源码分析

看源码正确方式:宏观>微观>画图宏观:了解本质;微观:以查询一条记录为线索;public class SelectMapper { static SqlSessionFactory factory; static { try { InputStream in = Resources.getResourceAsStream...
原创
262阅读
0评论
0点赞
发布博客于 2 年前