07 2019 档案
摘要:项目版本: Maven配置: 写在前面的话: springboot中集成shiro相对简单,只需要两个类:一个是shiroConfig类,一个是CustonRealm类。 ShiroConfig类: 顾名思义就是对shiro的一些配置,相对于之前的xml配置。包括:过滤的文件和权限,密码加密的算法,
阅读全文
摘要:Eureka Client 拉取Eureka Server中的全量注册表 注册自身实例InstanceInfo至Eureka Server 初始化定时任务 Eureka Server 启动从其它节点(peer)拉去注册表信息 Eureka Server每次操作本地注册表时,同时同步到其它节点(同步操
阅读全文
摘要:一、Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。 Service主要包含两个部分:Connector和Container。从上图
阅读全文
摘要:责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。 责任链模式英文原话是:Avoid coupling the sender of a request to its receiver by giving more than one object a c
阅读全文
摘要:在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式的
阅读全文
摘要:synchronized的三种应用方式 一. 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 二. 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。 三. 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象。 synchronize
阅读全文
摘要:1、linux进程有4GB地址空间,如图所示: 3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。 2、特权级的概念: 对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息,
阅读全文
摘要:一、引言在日常的开发中,我们可能经常能看到如下的代码: 在Android中,也会看到下面创建AlertDialog代码: 观察上面这两段代码,都有一个共同的特点,就是都可以进行链式操作,这就是我们要学习的Builder模式,下面就来详细学习一下。 二、Builer模式的使用场景在《Effective
阅读全文
摘要:Mysql版本众多,每个版本支持的数据类型繁多且不一样,本篇文章中主要基于MySQL Community Server 5.7.22介绍常用的数据类型,包括其特点以及区别。 一.数据类型 正确的定义表结构:数据类型、字段长度,对于数据库性能至关重要。Mysql中支持众多数据类型,很多类型又支持不同的
阅读全文
摘要:mybatis提供了缓存机制减轻数据库压力,提高数据库性能 mybatis的缓存分为两级:一级缓存、二级缓存 一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效 二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享
阅读全文
摘要:目前在网络上,如果你想把文件和其他人共享。最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件。 1、FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,借助
阅读全文
摘要:Docker是世界领先的软件容器平台,所以想要搞懂Docker的概念我们必须先从容器开始说起。如果你想和更多Docker技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态。 先从认识容器开始 什么是容器? 先来看看容器较为官方的解释:一
阅读全文
摘要:场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时。 场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单。 上述类似的需求是我们经常会遇见的问题。最常用的方法是定期轮训数据库,设置状态。在数据量小的时候并没有什么大的问题,但是数据量一大轮训数据库
阅读全文
摘要:FindBugs-IDEA Maven Helper VisualVM Launcher GenerateAllSetter Rainbow Brackets Translation P3c(Alibaba Java Coding Guidelines) aixcode
阅读全文
摘要:1. 前言 抽奖是一个典型的高并发场景应用,平时流量不多,但遇到大促活动,流量就会暴增,今年的周年庆期间的日均 UV 就超过百万。在过去的一年里,负责过这个项目的多次重构工作,期间各种踩坑无数,就以此文当做总结,来聊聊我们是如何架构这个高并发系统吧。 2. 整体设计详解 在我看来,能提高服务器应对并
阅读全文
摘要:1 写在前面 1.1 名词解释 consumer表示服务调用方 provider标示服务提供方,dubbo里面一般就这么讲。 下面的A调用B服务,一般是泛指调用B服务里面的一个接口。 1.2 拓扑图 大写字母表示不同的服务,后面的序号表示同一个服务部署在不同机器的实例。 2 从微观角度思考 2.1
阅读全文
摘要:分布式消息中间件 RabbitMQ是用Erlang语言编写的分布式消息中间件,常常用在大型网站中作为消息队列来使用,主要目的是各个子系统之间的解耦和异步处理。消息中间件的基本模型是典型的生产者-消费者模型,生产者发送消息到消息队列,消费者监听消息队列,收到消息后消费处理。 在使用RabbitMQ做消
阅读全文
摘要:发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。 观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,生产者向频道发送一个消息之后,就
阅读全文
摘要:QUIC(Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。 QUIC的主要特点包括:具有SPDY(SPDY是谷歌研制的提升HTTP速度的协议,是HTTP/2.0的
阅读全文
摘要:序言 目前HTTP/2.0(简称h2)已经在广泛使用(截止2018年8月根据Alexa流行度排名的头部1千万网站中,h2占比约29%,https://w3techs.com/technologies/details/ce-http2/all/all)。写此文章的目的是:h2作为较新的技术,并逐渐占有
阅读全文
摘要:一、JS阻塞 所有的浏览器在下载JS文件的时候,会阻塞页面上的其他活动,包括其他资源的下载以及页面内容的呈现等等,只有当JS下载、解析、执行完,才会进行后面的 操作。在现代的浏览器中CSS资源和图片image资源是并行下载的,在IE6中默认的并行的加载数目是2个,在IE6以后以及其他的浏览器中的默认
阅读全文
摘要:图中第一种请求方式,就是单次发送request请求,收到response后再进行下一次请求,显示是很低效的。 于是http1.1提出了管线化(pipelining)技术,就是如图中第二中请求方式,一次性发送多个request请求。 然而pipelining在接收response返回时,也必须依顺序接
阅读全文
摘要:实现方式的区别: col-md-offset-*,是利用margin-left实现的,col-md-push-*/col-md-pull-*是利用相对定位实现的。 效果的区别: col-md-offset-*只能向右偏移(margin-left),而push(float:right)/pull(fl
阅读全文
摘要:关于CSS position,来自MDN的描述: CSS position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left 属性则决定了该元素的最终位置。 然后来看看什么是文档流(normal flow),下面是 www.w3.org 的描述: Normal flo
阅读全文
摘要:vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,那么vue是如果进行数据劫持的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据上的对象是个什么东西。 代码: 结果: 我们可以看到属性a有两个相对应的get和set方法,为什么会多出这两个方法呢?因为vue是通过Obj
阅读全文
摘要:概述 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍了语法分析和预编译阶段,那么我们先做个简单概括,如下: 语法分析: 分别对加载完成的代码块进行语法检验,语法正确则进入预编译阶段;不正确则停止该代码块的执行,查找下一个代码块并进行加载,加载完成再次进入该代码块
阅读全文
摘要:一、分布式算法 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法. 典型的
阅读全文
摘要:SCAN 命令的保证(guarantees) 同一个元素可能会被返回多次。 处理重复元素的工作交由应用程序负责, 比如说, 可以考虑将迭代返回的元素仅仅用于可以安全地重复执行多次的操作上。 如果一个元素是在迭代过程中被添加到数据集的, 又或者是在迭代过程中从数据集中被删除的, 那么这个元素可能会被返
阅读全文
摘要:I、字典的实现 Redis的字典使用哈希表作为底层实现。 1.1 哈希表 Redis字典所使用的哈希表结构定义如下: typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码
阅读全文
摘要:背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁。但是由于受限于硬盘IO的性能或者远程网络等原因获取可能非常的费时。会导致我们的程序非常缓慢,这在某些业务上是不能忍的!而缓存正是解决这类问题
阅读全文
摘要:1.如何配置基本缓存设置 开启简单的缓存配置,只需要两个指令:proxy_cache_path和proxy_cache。proxy_cache_path配置缓存的存放地址和其他的一些常用配置,proxy_cache指令是为了启动缓存。 相关配置说明如下: /path/to/cache 本地路径,用来
阅读全文
摘要:阅读目录 问题描述 问题分析 问题解决 为什么 你的网站是否在尾部出现了让人恼火的广告? 这次我算是遇到了这些流氓的广告。那么就让我们一步步攻克这些恼火的广告吧。 问题描述 某一天下午开始,我们制作的网站就开始被各种广告注入,类似上图这种。 还有在网页右下角出现的广告 发现问题的有:1、手机端网页最
阅读全文
摘要:Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设
阅读全文
摘要:最内层是硬件,最外层是用户常用的应用,比如说firefox浏览器,evolution查看邮件,一个计算流体模型等等。硬件是物质基础,而应用提供服务。但在两者之间,还要经过一番周折。 还记得Linux启动。Linux首先启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括C
阅读全文
摘要:程序运行时,有六个地方都可以保存数据: 1、 寄存器:这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。 2、 堆栈:存放基本类型的数据和对象
阅读全文
摘要:1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是不是所有的数字字面量都会被存到常量池中?3 - 包装类对象池 =JVM 常量池4 - 字符串池 4.
阅读全文
摘要:一、什么是 Spring WebFlux 下图截自 Spring Boot 官方网站: 结合上图,在了解 Spring WebFlux 之前,我们先来对比说说什么是 Spring MVC,这更有益我们去理解 WebFlux,图右边对 Spring MVC 的定义,原文如下: Spring MVC i
阅读全文
摘要:有时候,我们在开发和部署的时候,有很多配置文件数据是不一样的,比如连接mysql,连接redis,一些properties文件等等 每次部署或者开发都要改配置文件太麻烦了,这个时候,就需要用到maven的profile配置了 1,在项目下pom.xml的project节点下创建了开发环境和线上环境的
阅读全文
摘要:Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Dr
阅读全文
摘要:Maven是一个优秀的项目管理工具,它能够帮你管理编译、报告、文档等。 Maven的生命周期: maven的生命周期是抽象的,它本身并不做任何的工作。实际的工作都交由"插件"来完成。 maven的每个构建步骤都可以绑定一个或多个插件行为,而且maven为大多数的构建步骤编写并绑定了默认插件。 三套生
阅读全文
摘要:LinkedTransferQueue是JDK1.7才添加的阻塞队列,基于链表实现的FIFO无界阻塞队列,是ConcurrentLinkedQueue(循环CAS+volatile 实现的wait-free并发算法)、SynchronousQueue(公平模式下转交元素)、LinkedBlockin
阅读全文
摘要:无锁编程 / lock-free / 非阻塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。 实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking
阅读全文
摘要:1. 引言 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环 CAS 的方式来
阅读全文
摘要:下面描述使用zookeeper实现分布式锁的算法流程,假设锁空间的根节点为/lock: 步骤1中创建的临时节点能够保证在故障的情况下锁也能被释放,考虑这么个场景:假如客户端a当前创建的子节点为序号最小的节点,获得锁之后客户端所在机器宕机了,客户端没有主动删除子节点;如果创建的是永久的节点,那么这个锁
阅读全文

浙公网安备 33010602011771号