- 博客(70)
- 资源 (2)
- 收藏
- 关注
原创 Spring笔记
1.Spring依赖注入两种方法:设值注入、构造注入。两种方法对比:设值注入优点:①与传统的JavaBean的写法更相似,程序开发人员更容易理解、接受。通过setter方法设定依赖关系显得更加直观、自然。②对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而使用设置注入则能避免这些问题。构造注入优点:①构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。②对于依赖关系无须变化的B
2020-06-05 10:31:46 293
原创 Tair学习
一.简介 Tair是一个高性能、分布式、可扩展、高可靠的Key-Value nosql结构存储系统,专注于高速缓存场景。 Tair有三种类型mdb,ldb,rdb: (1) mdb是定位于cache缓存,类似于memcache的一个支持kv 内存缓存框架 (2) rdb是 定位于cache缓存,采用了redis的内存存储结构的一个支持kv、list等复杂数据结构...
2019-08-22 14:18:23 7687
原创 HSF主要内容
一.简介 HSF (High-speed Service Framework),高速服务框架,是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。其产品架构如下:① 地址注册中心 HSF 依赖注册中心进行服务发现,如果没有注册中心,HSF只能完成简单的点对点调用。因为作为服务提供端,没有办法将自己的服务信息对外发布,让外界知晓;作为服务消费端,可能已经知道需要调用的服务...
2019-08-22 14:17:10 1008
原创 SpringMVC整合Velocity--unable to find resource '.htm.vm' in any resource loader问题解决
一.问题描述 在SpringMVC整合Velocity应用中,当请求URL带有文件扩展名时,例如URI: /index.htm,在日志中可能会出现Velocity VM资源无法找到的ERROR提示,如下:org.apache.velocity : ResourceManager : unable to find resource 'index.htm.vm' in any resou...
2019-07-24 22:55:50 5140
原创 高并发解决方案总结
本文总结面对高并发场景可以采用的解决方案,文章只是介绍整体相关概念,其中每一项都可以利用多种不同中间件或者框架来实现,可以根据需要选择某几个进行更加深入的学习和理解。1. 扩容垂直扩容(纵向扩展):提高系统部件能力 水平扩容(横向扩展):增加更多系统成员来实现(1) 数据库扩容:读多写少--读操作扩展:使用memcache、redis、CDN等缓存 读少写多--写操作...
2019-07-06 16:16:06 404
原创 Java线程安全性中的对象发布和逸出
发布(Publish)和逸出(Escape)是Java并发编程中需要注意的问题。 “发布”,简单来说就是提供一个对象的引用给作用域之外的代码。比如return一个对象,或者作为参数传递到其他类的方法中。 “逸出”,是指如果一个类还没有构造结束就已经提供给了外部代码一个对象引用即发布了该对象,此时叫做对象逸出,对象的逸出会破坏线程的安全性。 下面代码...
2019-06-30 15:17:56 227
原创 Java线程安全性
在Java中,线程安全性是指:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替进行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 线程安全性体现在三个方面:原子性、可见性、有序性。一. 原子性 原子性提供了互斥访问,同一时刻只能有一个线程来对它进行操作。 保...
2019-05-23 17:17:45 586
原创 Mycat入门基础
Mycat是一个数据库中间件产品,其前生是阿里巴巴的Cobar。地址:http://www.mycat.io/一. Mycat的优势基于阿里巴巴的Cobar系统开发 开发社区活跃 完全开源可以自定义开发 支持多种关系型及NoSQL数据库 使用Java开发,可以部署在多种系统上二. Mycat的关键特性支持SQL92标准 支持MySQL集群 支持JDBC...
2019-05-18 17:19:39 398
原创 基于JDK命令行工具的Java性能监控
一.JVM的参数类型1. 标准参数-help -server -client -version -showversion -cp -classpath2. 非标准化参数 (X参数)-Xint:解释执行 java -Xint version -Xcomp:第一次使用就编译成本地代码 java -Xcomp version -Xmixed:混合模式,JVM自己来决定是否编译...
2019-05-14 12:15:34 333
原创 Java内部类
一. 内部类简介 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。《Thinking in Java》里面讲到:“使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响”。使用内部类最大的优点是它能够非常好的解决多重继承的问题。 内部类有如下特性:...
2018-12-25 14:53:00 147
原创 Java实现导出Excel
本文将介绍在Java Web中使用Apache POI实现管理系统中常见的导出Excel功能。 首先在pom.xml中导入poi的依赖包:<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <ve...
2018-12-08 16:10:39 5461 10
原创 Java发送HTTP POST/GET请求
使用java.net包发送HTTP POST和GET请求的Java代码如下:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java...
2018-11-28 10:34:40 13611 2
原创 Java 8 新特性 -- 函数式编程
一. 简介 函数式编程并不是Java新提出的概念,其与指令编程相比,强调函数的计算比指令的计算更重要;与过程化编程相比,其中函数的计算可以随时调用。在Java8出现之前,我们关注的往往是某一类对象应该具有什么样的属性,当然这也是面向对象的核心--对数据进行抽象。但是java8出现以后,这一点开始出现变化,似乎在某种场景下,更加关注某一类共有的行为(这似乎与之前的接口有些类似),这也就...
2018-11-21 21:22:53 226
原创 Java 8 新特性 -- Lambda表达式
一. Lambda表达式 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda 表达式是在Java 8中引入的,并且成为了Java 8最大...
2018-11-21 20:33:09 275
原创 Java虚拟机(JVM) | 第二篇:垃圾回收中判断可触及性
一. 简介 垃圾回收(Garbage Collection,简称GC),是Java体系最重要的组成成分之一。GC中的垃圾,特指存在于内存中的、不会再被使用的对象,而“回收”,也相当于把垃圾桶“倒掉”,这样内存空间里就会有空闲的区域被腾出来。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占用的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。如果大量不会被使用的...
2018-09-28 16:49:05 243
原创 Shiro 身份认证实现
一. 身份认证 身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名 / 密码来证明。 在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份: ①principals:身份,即主体的标识属性,可以是任何东西,...
2018-09-27 21:44:39 439
原创 Java虚拟机(JVM) | 第一篇:内存结构
一. JVM内存模型 从上图可以知道,JVM的内存模型包括方法区、虚拟机栈、本地方法栈、堆以及程序计数器。二. 详细介绍1. 方法区 方法区是一块所有线程共享的内存区域,用于存储虚拟机加载的类信息,比如类的字段、方法、常量池(用于存放编译器生成的各种符号引用)、静态变量、以及编译器编译后的代码等。 在JDK 1.6、JDK 1.7中...
2018-09-21 21:37:44 223
原创 Java中使用Jedis操作Redis
一. 安装与启动 Redis的安装与启动在另一篇《Spring中使用Redis》文章里已有讲述,这里就不多说。 在Java中使用Redis,我们要借助Jedis工具,首先在项目中加入Jedis的相关依赖,或者下载其jar包导入到classpath中:<!-- https://mvnrepository.com/artifact/redis.clients/j...
2018-08-10 16:59:28 990
原创 Java字符串
我们在使用Java字符串时通常使用String、StringBuilder和StringBuffer这三个,这三个字符串处理类之间的区别如下:一. 字符串连接效率 在大部分情况下,字符串的拼接速度为:StringBuilder>StringBuffer>String。 String是不可变的,因此每次对其操作改变其变量值,其实是生...
2018-08-02 21:34:48 144
原创 Java代理
代理Proxy: Proxy代理模式是一种结构型设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。代理模式的关键点是代理对象与目标对象,代理对象是对目标对象的扩展,并会调用目标对象。 按照代理的创建时期,代理类可以分为两种: ①静态:由程序员创...
2018-08-02 21:05:17 625
原创 Spring Cloud Learning | 第十二篇:Docker部署Spring Cloud项目
一. 准备工作 关于Docker的内容与入门命令实现已经在其他文章里详细介绍了,这里就不再多说。本篇文章主要详细讲解如何使用Docker部署Spring Cloud项目。 本文采用的工程来自前面文章的工程eureka-server和eureka-client,我们将采用maven的方式去构建项目,并采用docker-maven-plugin去构建docker镜像。
2018-02-05 14:35:47 2358 3
原创 Docker入门(二)
一. 简介 前面我们已经学习了Docker的相关概念和如何使用简单的Docker命令,这篇文章我们将继续学习Docker的三个重要内容:service、swam、stack。二. 具体内容2.1 service 在分布式应用程序中,应用程序的不同部分称为“服务”。服务是一组运行于集群不同结点中可复制的容器的集合。通过服务发现机制,使用该服务的客户端可以透
2018-02-02 20:15:07 352
原创 Spring Cloud Learning | 第十一篇:高可用的分布式配置中心
一. 简介 在上一篇文章中,我们已经知道如何搭建分布式配置中心。但是,当要将配置中心部署到生产环境中时,与服务注册中心一样,我们也希望它是一个高可用的应用。Spring Cloud Config实现服务端的高可用非常简单,主要有以下两种方式。 第一种是传统模式。不需要为这些服务端做任何额外的配置,只需要遵守一个配置规则,将所有的Config Server都指向同一个Gi
2018-02-01 22:37:20 394
原创 Spring Cloud Learning | 第十篇:分布式配置中心(Config)
一. 简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理和实时更新,我们需要分布式配置中心组件。Spring Cloud为我们提供了这样的组件Spring Cloud Config。Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服
2018-02-01 21:09:09 431
原创 Spring Cloud Learning | 第九篇:API网关服务(Zuul)
一. 简介 通过前面几篇文章的介绍,我们已经学习了怎么使用微服务架构中最为基础的几个核心模块。其实,利用这些模块,我们已经能够构建起下面的简单的微服务架构系统: 在上面的架构中,我们的服务集群包括内部服务ServiceA和ServiceB,它们都会向Eureka Server集群进行注册与订阅服务,而Open-Service是一个对外的RESTful API
2018-02-01 14:51:42 896
原创 Spring Cloud Learning | 第八篇:断路器集群监控(Turbine)
一. 简介 上一篇文章我们已经实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要引入Turbine。Turbine能够汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard来集中展示和监控。二. 构建监控局和服务2.1 整体结构与准备 本文的工程实现是基于上一篇文章
2018-01-22 15:00:15 6140
原创 Spring Cloud Learning | 第七篇:断路器监控仪表盘(Hystrix Dashboard)
一. Hystrix仪表盘简介 在Hystrix断路器的实现中,有很多Hystrix的指标信息,它们除了在Hystrix断路器实现中使用外,对于系统运维也有非常的帮助。这些指标信息会以“滚定时间窗”与“桶”结合的方式进行汇总,并在内存中驻留一段时间,以供内部或外部进行查询使用。 Spring Cloud除了整合Hystrix,也完美地整合了它的仪表盘组件Hystrix
2018-01-22 11:23:33 1615
原创 Spring Cloud Learning | 第六篇:在Feign中使用断路器
一. 准备工作 在上一篇文章我们已经了解了怎么在Ribbon中使用断路器,而在实际工作中我们更多的是使用Feign,所以我们也需要知道如何在Feign中使用断路器。 首先准备好第四篇文章里的项目工程,同样启动eureka-server和eureka-client工程,端口号分别为8761和8762。二. 快速入门 Feign是自带断路器的,所以不需要再
2018-01-22 09:58:45 998
原创 Spring Cloud Learning | 第五篇:服务容错保护(Hystrix)
一. Hystrix断路器简介 在微服务架构中,我们将系统拆分为很多服务单元,各单元的应用间通过服务注册于订阅的方式互相依赖。由于每个服务单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导
2018-01-21 21:05:34 465
原创 Spring Cloud Learning | 第四篇:声明式服务调用(Fegin)
一. Feigin简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用Ribbon时自行封装服务调用客户端的开发量。 Feign具有可插拔的注解特性,包括Feign 注解和JAX-RS注解,同时也扩展了对SpringMVC的注解支持。Fei
2018-01-20 12:58:02 6984
原创 Spring Cloud Learning | 第三篇:客户端负载均衡(Ribbon)
一. 客户端负载均衡 负载均衡在系统架构中是一个非常重要的内容,因为负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端的清单来自于服务注册中心,比如Eureka服务端。当客户端发送请求到负载均衡模块的时候,该模块按某种算法(比如线性轮询、按权重负载、按流量负载等)从维护的可用服务端清单中取
2018-01-18 11:48:24 622
原创 Spring Cloud Learning | 第二篇:高可用服务注册中心
一. 简介 在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对于微服务如此,对于服务注册中心也一样。在Eureka的服务治理设计中,所有节点既是服务提供方,也是服务消费方,服务注册中心也不例外。其实在上一篇中,我们就在单节点的配置中设置过两个参数(eureka.client.register-with-eureka=fal
2018-01-17 16:43:36 548
原创 Spring Cloud Learning | 第一篇:服务治理(Eureka)
一. Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。二. 服务治理简介 服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各
2018-01-17 13:43:01 1071
原创 Java集合框架
Java集合框架包括很多集合类: List: ArrayList, LinkedList, Vector, Stack Set: HashSet, LinkedHashSet, TreeSet Queue: PriorityQueue, ArrayDeque Map: HashMap, LinkedHashMap, TreeMap, H...
2017-11-27 17:11:07 192
原创 Docker入门
一. 简介 Docker是一套轻量级操作系统虚拟化解决方案,它由go语言编写。它基于Linux容器技术(LXC),依赖Namespace,Cgroup,UnionFS(联合文件系统)等技术。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。Docker本质上应该算是一种新型的
2017-11-20 14:37:05 301
原创 Shiro 授权实现
一. 授权授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。主体:即访问应用的用户,在 Shiro 中使用 Subject 代表该用户。用户只有授权后才允许访问相应的资源。资源:在应用中用户可以访问的任何东西,比如访问 J
2017-09-28 08:56:17 539
原创 Java知识点记录
写在前面:从今天起,笔者会将在学习中碰到的一些重要的Java知识点记录下来,以便以后复习回顾。一些内容较多且比较复杂的笔者会单独写成一篇博客,对于一些零零碎碎的知识点就直接记录在本篇文章中。本文会一直持续更新。由于时间先后顺序的关系,笔者会将不同方面的知识点直接继续记录在文章末尾,这样过一段时间文章内容可能会比较乱。如果有必要,笔者会每过一段时间整理一下。1. String...
2017-08-28 20:29:18 467
原创 Shiro 简单介绍
Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro 要简单的多。因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro...
2017-08-22 21:14:11 399
原创 Linux下安装配置带SASL认证的Memcached
一.简单介绍由于Memcached本身没有做验证访问模块,一旦发布到公网,任何人都能通过ip访问。虽然可以使用iptables通过设置ip白名单限制访问ip,但仍然无法做到针对所有访问的控制的限制。如果能够做到需要使用用户名和密码来访问,这无疑会更加安全,而Cyrus-SASL就能够这样帮助我们。SASL全称Simple Authentication and Security Layer,...
2017-08-20 10:18:08 8294 5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人