11 2018 档案
摘要:一、简介 二叉树是树这种数据结构的一员,后面我们还会介绍红黑树,2-3-4树等数据结构。那么为什么要使用树?它有什么优点? 前面我们介绍数组的数据结构,我们知道对于有序数组,查找很快,并介绍可以通过二分法查找,但是想要在有序数组中插入一个数据项,就必须先找到插入数据项的位置,然后将所有插入位置后面的
阅读全文
摘要:一、定义我们自己的切库注解类 自定义注解有几点需要注意: 1)@Target 是作用的目标,接口、方法、类、字段、包等等,具体看:ElementType 2)@Retention 是注解存在的范围,RUNTIME代表的是注解会在class字节码文件中存在,在运行时可以通过反射获取到,具体看:Rete
阅读全文
摘要:什么是多数据源支持? 简单的说,就是一个项目里,同时可以访问多个不同的数据库。 实现原理 单个数据源在配置时会绑定一套mybatis配置,多个数据源时,不同的数据源绑定不同的mybatis配置就可以了,简单的思路就是让不同的数据源扫描不同的包,让不同的包下的mapper对应连接不同的数据源去处理逻辑
阅读全文
摘要:一、业务场景分析 只有大表才需要分表,而且这个大表还会有经常需要读的需要,即使经过sql服务器优化和sql调优,查询也会非常慢。例如共享汽车的定位数据表等。 二、实现步骤 1.准备pom依赖 这里关键是要额外引入 插件shardbatis 相关的依赖,主要有两个: 2.准备表 把原来的t_locat
阅读全文
摘要:数据库瓶颈 单个数据库数据量太大(1-2T) 单个数据库服务器压力太大,读写瓶颈 单个表数据量过大 切库实现 SpringBoot+SpringAOP+Java自定义注解+mybatis实现切库读写分离 分库实现 SpringBoot+mybatis实现多数据源支持 分表实现 spring+myba
阅读全文
摘要:服务降级 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚至大部分任务客户能得到正确的响应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。 服务熔断 在股票市场,熔断这个词大家都不陌生,是指当股指波幅达到某个
阅读全文
摘要:一、 安装文件 Linux系统安装memcached,首先要先安装libevent库。 下载memcached与libevent的安装文件 http://memcached.org/files/memcached-1.5.12.tar.gz(memcached下载地址) https://github
阅读全文
摘要:限流就是通过对并发访问/请求进行限速或一个时间窗口内的请求进行限速,从而达到保护系统的目的。一般系统可以通过压测来预估能处理的峰值,一旦达到设定的峰值阀值,则可以拒绝服务(定向错误页或告知资源没有了)、排队或等待(例如:秒杀、评论、下单)、降级(返回默认数据)。 限流不能乱用,否则正常流量会出现一些
阅读全文
摘要:比如一个股票系统有用户信息、开户、股票行情、交易、订单等,拆分后如下图所示: 原则 业务优先 每个系统都会有多个模块,每个模块又有多个业务功能;按照业务边界进行切割,再对模块进行拆分。 循序渐进 边拆分边测试,保证系统的正常运行。 兼顾技术:重构、分层 不能为了分布式而分布式,拆分过程不仅是业务梳理
阅读全文
摘要:一、消息队列在实际场景中的使用 流程A在处理时没有在当前线程同步的处理完而是直接发送了一条消息A1到队列里,然后消息队列过了一段时间(可能是几毫秒 几秒 几分钟)这个消息开始被处理,消息处理的过程就相当于流程A被处理;当然这只是一个简单的模型下面我们套用实际的场景来看一下,比如下单成功后发送短信提醒
阅读全文
摘要:前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗?以及数据结构与本篇博客的主题前缀、中缀、后缀表达式有什么关系呢? 1、人如何解析算术表达式 如何解
阅读全文
摘要:简介 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列
阅读全文
摘要:一、简介 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底(Bottom),最后的数据在栈顶(Top)。我们把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。 由于堆
阅读全文
摘要:一、前言 二、数据库系统安全相关因素 1、外围网络 让我们的mysql处在一个有保护的局域网之中,而不是置于开发的公网中。 2、主机 第二层防线“主机层防线”,“主机层防线“主要拦截网络(包括局域网)或者直连的未授权用户试图入侵主机的行为。 3、数据库 第三道防线“数据库防线”,也就是mysql数据
阅读全文
摘要:环境:CentOS 6.7 + Mysql 5.7.19 + Xtraback 2.4.8 示例组1:全备还原 示例组2:增量还原 示例组3:完全&定点&误操作恢复
阅读全文
摘要:总的来说,MySQL可以看成是二层架构。 第一层我们通常叫做SQL Layer,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql解析,执行计划优化,query cache的处理等等; 第二层就是存储引擎层,通常叫做Storage Engine Layer,也就
阅读全文
摘要:主要架构就是这张图展示的 具体细节看下面文章: MySql 物理文件组成 MySQL 自带工具使用介绍 Mysql Server系统架构介绍
阅读全文
摘要:MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的。虽然有些人对这些工具的功能都已经比较了解了,但是真正能将这些工具程序物尽其用的人可能并不是太多,或者知道的不全,也可能并不完全了解其
阅读全文
摘要:XML5个转义符:<,>,&,”,©;的转义字符分别如下: < >& " '
阅读全文
摘要:传统web请求流程 一般来说,现在的互联网应用网站或者APP,它的整体流程可以用我们这个图里展示的来表示,用户请求开始,从这个界面是最里面的浏览器和APP,到网络转发,再到应用服务,最后到存储,这纯属可能是数据库文件系统,然后再返回到界面呈现内容。 随着互联网的普及,内容信息越来越复杂,用户数和访问
阅读全文
摘要:当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展。选用哪种策略主要依赖于要解决的问题以及系统资源的限制。在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点。如果你已经有一个软件系统需要不断成长,那么你将有意或者无意中选择这两种策略中的一种。 垂直扩展 在垂直扩展模型中,想
阅读全文
摘要:我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大。这个问题从业务上来讲,可以理解为应用系统每秒钟最大能接受的用户访问量。或者每秒钟最大能处理的请求数; QPS: 每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。可以理解在
阅读全文
摘要:简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份认证、授权、加密和会话管理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 架构 Authentication:身份认证/登录,验证用户是不是拥有相应的身份
阅读全文
摘要:本文讨论以角色概念进行的权限管理策略及主要以基于角色的机制进行权限管理是远远不够的。同时我将讨论一种我认为更好的权限管理方式。 1、什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念。角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么、不能做什么。用户帐号往往与角色相
阅读全文
摘要:1.Accept属于请求头, Content-Type属于实体头。 Http报头分为通用报头,请求报头,响应报头和实体报头。 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报头结构:通用报头|响应报头|实体报头 2.Accept代表发送端(客户端)希望接受的数据类型。 比如
阅读全文
摘要:在之前的教程中一笔带过式的讲了下RememberMe记住密码的功能,那篇的Remember功能是最简易的配置,其功能和安全性都不强。这里就配置下security中RememberMe的各种方式。 一、概述 RememberMe 是指用户在网站上能够在 Session 之间记住登录用户的身份的凭证,通
阅读全文
摘要:这里接着上篇的自定义过滤器,这里主要的是配置自定义认证处理的过滤器,并加入到FilterChain的过程。 在我们自己不在xml做特殊的配置情况下,security默认的做认证处理的过滤器为UsernamePasswordAuthenticationFilter,通过查看源码知道,做认证处理的方法为
阅读全文
摘要:为什么需要自己写? 什么样的权限管理系统比较好? 数据库表结构设计 这边使用的是mysql数据库。
阅读全文
摘要:在之前的几篇security教程中,资源和所对应的权限都是在xml中进行配置的,也就在http标签中配置intercept-url,试想要是配置的对象不多,那还好,但是平常实际开发中都往往是非常多的资源和权限对应,而且写在配置文件里面写改起来还得该源码配置文件,这显然是不好的。因此接下来,将用数据库
阅读全文
摘要:本篇文章主要围绕下面几个问题来深入源码: 一、用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求来的时候,首先要通过过滤器链的校验,校验通过之后才会访问用户各种信息。 这里要说明的是在过滤器的最前端有一个SecurityContextPersistenceFi
阅读全文
摘要:在前面的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果。 一、自定义页面 login.jsp: <%@ page language="java" conte
阅读全文
摘要:在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求。那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理。
阅读全文
摘要:上一篇博客中,Spring Security教程(一):初识Spring Security,我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信息通常是被保存在数据库中的,为此Spring Security也
阅读全文
摘要:一、概要 Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。以下是百科里对于Spring Security的介绍。 Spring Security是一个能够为基于
阅读全文
摘要:为什么需要权限管理 1、安全性:误操作、人为破坏、数据泄露等; 2、数据隔离:不同的权限能看到及操作不同的数据; 3、明确职责:运营、客服等不同角色,leader和dev等不同级别 权限管理核心 1、用户—权限:人员少,功能固定,或者特别简单的系统; 2、RBAC(Role-Based Access
阅读全文
摘要:简介 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。 一、应用场景 为了理解OAuth的适用场合,让我举一个假设的例子。 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取
阅读全文
摘要:1.什么是java的spi SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。
阅读全文
摘要:执行器(Actuator)的定义 执行器是一个制造业术语,指的是用于移动或控制东西的一个机械装置,一个很小的改变就能让执行器产生大量的运动。 An actuator is a manufacturing term that refers to a mechanical device for movi
阅读全文
摘要:一、Nginx日志描述 通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息; 通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。 打开nginx.conf配置文件:vim /usr/local/ngin
阅读全文
摘要:注意,这篇文章只介绍mybatis单独使用时如何操作,是没有用到spring的,如果需要了解mybatis和spring如何搭建,请移步这里Mybatis(六):spring与mybatis三种整合方法。 方式一:不使用mapper接口 步骤 1.pom文件里添加jar包 2.准备Mybatis的配
阅读全文
摘要:有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了。 这时候,通过一些设置,mybatis可以将insert的数据的主键返回,直接拿到新增数据的主键,以便后续使用。 这里主要说的是selectKey标签 设计表的时候有两
阅读全文
摘要:Mybatis核心成员 Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中 SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能 Executor M
阅读全文
摘要:什么是虚拟主机? 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台
阅读全文
摘要:Spring MVC处理异常最基本的就是HandlerExceptionResolver这个接口,先看张图 分析上图可以轻松总结出,spring mvc里有三种异常处理方法: 1.使用官方提供的简单异常处理器SimpleMappingExceptionResolver 使用示例 springMVC-
阅读全文
摘要:平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一、类的属性的表示方式 在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Emplo
阅读全文
摘要:WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。 WEB-INF简介 WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有
阅读全文
摘要:1.主要区别 Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到jsp页面中;ModelAndView包含model和view两部分,使用时需要自己实例化,利用ModelMap用来传值,也可以设置view的名称 2.例子 1)使用Model传值 在j
阅读全文
摘要:真正的加载顺序为:context-param -> listener -> filter -> servlet 加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。
阅读全文
摘要:前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 前端控制器(Front Controller) -
阅读全文
摘要:简介 DispatcherServlet是前端控制器设计模式的实现,提供SpringWebMVC的集中访问点,而且负责职责的分派,而且与spring IOC容器无缝集成,从而可以获得Spring的优势。 (前端控制器设计模式参阅这篇:设计模式之前端控制器模式) 职责和作用 其主要职责是调度工作,本身
阅读全文
摘要:我们在web.xml中配置servlet的时候会有个属性<load-on-startup></load-on-startup>,这里主要记一下它的作用,源码在后续记得好好看一下。 The load-on-startup element indicates that this servlet shou
阅读全文
摘要:Spring的文档上对Introduction这个概念和相关的注解@DeclareParents作了如下介绍:Introductions (known as inter-type declarations in AspectJ) enable an aspect to declare that ad
阅读全文
摘要:使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事务。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分
阅读全文
摘要:若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类。 一、概述1. 什么是代理我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销
阅读全文
摘要:Usage: mysqlimport [OPTIONS] database textfile ... mysqlimport 程序是一个将以特定格式存放的文本数据(如通过“select * into OUTFILE from ...”所生成的数据文件)导入到指定的MySQL Server 中的工具程
阅读全文
摘要:JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 Sun引入新的JPA ORM规范出于两个原因: 其一,简化现有Java EE和Java SE应用开发工作; 其二,Sun
阅读全文
摘要:使用spring也有一段时间了,配置文件也见了不少了,但是发现配置文件的beans里面有很多链接,一开始也很迷惑,所以抽了一点时间整里了一下。 首先我们看到的一个spring的配置文件大概如下面这个样子: 首先我们解释一下这几个缩写到底是什么意思: xmlns:全名是xml namespace,也即
阅读全文
摘要:原文:https://blog.csdn.net/liaohaojian/article/details/70139151 编程式事务 编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖于2大类,分别是上篇文章提到的PlatformTransactionManage
阅读全文
摘要:事先准备:配置数据源对象用<bean>实例化各个业务对象。 1.配置事务管理器。 2.配置事务属性 3.配置事务切入点,注入事务属性 实例: 准备工作:导入c3p0、Spring框架、Mysql、AOP的jar包,并配置好。 db.properties 三个接口 接口的实现类 XML配置文件 mia
阅读全文
摘要:简介 当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean,为了定义inner bean,在Spring 的 基于XML的 配置元数据中,可以在 <property/>或 <constructor-arg/> 元素内使用<bean/> 元素,内部bean通常是匿名的,它们的Sc
阅读全文
摘要:1. Auto-Wiring ‘no’ 2. Auto-Wiring ‘byName’ 3. Auto-Wiring ‘byType 4. Auto-Wiring ‘constructor’ 5. Auto-Wiring ‘autodetect’ Spring Auto-Wiring Beans——
阅读全文
摘要:一、Setter注入 这里我是希望在Student.java中调用Course.java中的内容。 这是Student类,创建了一个Course类,并生成了set方法 以上步骤完成之后就是怎么把这两者关联起来了 这就要在配置文件中applicationContext.xml文件中配置相应的bean了
阅读全文
摘要:集合注入重要是对数组、List、Set、map的注入,具体注入方法请参照一下代码(重点是applicationContext.xml中对这几个集合注入的方式): 1.在工程中新建一个Department类,该类包含在com.LHB.collection包当中 2.继续在包中创建Employee类 3
阅读全文
摘要:Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上Bean
阅读全文
摘要:Spring中三种配置Bean的方式分别是: 一.基于XML的配置 这个很简单,所以如何使用就略掉。 二.基于注解的配置 Spring2.0开始引入基于注解的配置方式,即Bean的定义信息可以通过在Bean的实现类上标注注解实现。不清楚Java注解的参阅Java注解基本原理 @Component是S
阅读全文
摘要:该@Required注解适用于bean属性setter方法,并表示受影响的bean属性必须在XML配置文件在配置时进行填充。否则,容器会抛出一个BeanInitializationException异常。 例子: pom.xml: Student.java: beans.xml: App.java:
阅读全文
摘要:分别看这俩文章就知道了 Spring的FactoryBean使用 Spring加载xml配置文件的方式 ApplicationContext
阅读全文
摘要:根据我看spring官方文档的理解(不出意外是最正确的答案): ①选择spring的AOP还是AspectJ? spring确实有自己的AOP。功能已经基本够用了,除非你的要在接口上动态代理或者方法拦截精确到getter和setter。这些都是写奇葩的需求,一般不使用。 ②在使用AOP的时候,你是用
阅读全文
摘要:Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。 如果大家有看过Mybatis的SessionFactoryBean
阅读全文
摘要:https://blog.csdn.net/liangyihuai/article/details/58335510
阅读全文
摘要:我们把从GPS设备接收的经纬度坐标标记到电子地图上时,会发现地图上的位置和实际位置相差甚远,除GPS设备本身加偏外,电子地图上的坐标也不是真实的,要想正确显示到地图上,还必须将收到的加偏坐标(俗称火星坐标)换算到地图对应的坐标,也就是我们常说的纠偏。 1.使用控件 如果和谷歌地图一样,有一个控件,直
阅读全文
摘要:Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送HTTP请求且接收JSON、XML的返回数据。 Geocoding API包括地址解析和逆地址解析功能。 地理编码:即地址解析,由详细到
阅读全文
摘要:性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 info命令输出的数据可分为10个类别,分别是: server clients memory persistence s
阅读全文