- 博客(35)
- 收藏
- 关注
原创 深入理解JVM(三)类加载机制
Class类型通常以文件的形式存在(当然,任何二进制流都可以是Class类型),只有被Java虚拟机装载的Class类型才能在程序中使用。系统装载Class类型可以分为加载、连接和初始化3个步骤。其中,连接又可分为验证、准备和解析3步。类加载条件当创建一个类的实例时,比如使用new关键字,或者通过反射、克隆、反序列化。 当调用类的静态方法时,即当使用了字节码invok...
2018-12-27 13:48:47 332
原创 深入理解JVM(二)垃圾回收概念与算法
垃圾回收(Garbage Collection 简称CG),GC中的垃圾,特指存在于内存中的、不会再被使用的对象,而“回收”,也相当于把垃圾桶“倒掉”。这样房间里或者内存空间里就会有空闲的区域被腾出来。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。如果大量不会被使用的对象一直占着空间不放,需要内存空间时,就无...
2018-12-23 10:33:32 429
原创 深入理解JVM(一)虚拟机基础
1. 虚拟机原理所谓虚拟机,就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。虚拟机可以分为系统虚拟机和程序虚拟机。Java虚拟机专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。一个Java程序(Java字节码的集合),通过Java虚拟机运行于各大主流系充平台,该程序以虚拟机为中介,实现了跨平台的特性。2. 虚拟机的基本结构...
2018-12-22 15:57:45 1720
原创 Java WatchService监听文件夹下文件的变化
package com.uv;/* * @author uv * @date 2018/12/19 17:37 */import java.nio.file.FileSystems;import java.nio.file.Paths;import java.nio.file.StandardWatchEventKinds;import java.nio.file.WatchE...
2018-12-19 18:15:10 1487
原创 MySQL数据库
主键主键是能确定一条记录的唯一标识。当一张表把某个列设为主键的时候,则该列就有主键索引。外键1. 外键用于与另一张表的关联。能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那该字段就可以是A表的外键。添加外键的表是从表,指向的表叫主表(B表是主表,A表为从表)。2. 外键取值规则:空值或参照的主键值。插入非空值时,如果主键表中没有这...
2018-10-30 11:06:23 280
原创 Java定时任务
Timer和TimerTaskTimer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。 TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。一个Timer调度的例子/* * @author uv * @date 2018/10/23 15:17 * */...
2018-10-23 20:19:38 297
原创 简单实现RPC框架(二)客户端的实现
继上一篇文章实现Server端后,本篇实现Client端。上篇文章链接https://blog.csdn.net/qq_22200097/article/details/83048668 1. 添加依赖 <dependency> <groupId>org.reflections</groupId> <artifact...
2018-10-15 09:36:19 590
原创 简单实现RPC框架(一)服务端的实现
RPC框架 RPC是Remote Procedure Call的缩写,像Client-Servier一样的远程过程调用,也就是调用远程服务就跟调用本地服务一样方便,一般用于将程序部署在不同的机器上,供客户端进行调用。就像一个request-response调用系统一样简单。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机...
2018-10-14 20:27:15 2011
原创 Netty的使用:Server和Client通信
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。 提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Futur...
2018-10-13 22:33:43 43260 14
原创 Java动态代理
动态代理分JDK动态代理和cglib动态代理,常见的使用是在Spring的AOP中。JDK动态代理: 通过接口中的方法名,在动态生成的代理类中调用业务实现类的同名方法;代理实现了接口的类 ,没有实现接口的类不能使用JDK动态代理。 Cglib动态代理: 通过继承业务类,生成的动态代理类是业务类的子类,通过重写业务方法进行代理;不能代理final修饰的类。使用cglib代理必须引入cglib...
2018-10-12 14:56:07 137
原创 Spring Cloud(四)服务网关Zuul
Spring Cloud ZuulSpring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。使用微服务来构建整个API服务时,系统会有不同职责的应用在运行着,没有统一的访问路径就会造成访问混乱难以维护,这就迫切需要zuul来提供统一的访问接口。zuul的存在的意...
2018-10-09 13:28:11 749
原创 Spring Cloud(三)Hystrix的服务熔断、服务降级
雪崩效应在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。...
2018-10-09 09:27:14 537
原创 Spring Cloud(二)服务注册与调用
案例中有三个角色:服务注册中心、服务提供者、服务消费者,其中服务注册中心就是我们上一篇的eureka单机版启动既可,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心中,消费者从服务中心中获取服务并执行。注册中心上一篇文章中已经有注册中心的工程搭建。服务提供者添加依赖 <dependency> <groupId>org.spr...
2018-10-08 19:57:20 211
原创 Spring Cloud(一)注册中心Eureka
EurekaSpring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系...
2018-10-08 13:34:31 172
原创 Mybatis拦截器修改sql语句
拦截器介绍MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close...
2018-10-05 13:24:58 30955 10
原创 手写SpringMVC源码
项目结构图项目依赖<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version>
2018-10-04 16:16:22 1990 1
原创 SpringBoot(七)springboot配置过滤器、拦截器
过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。 通过过滤器的名字,进行顺序的约定,比如LogFilter...
2018-09-28 19:36:18 1733
原创 Java底层之ArrayList底层实现原理
ArrayList简介 ArrayList就是动态数组,,相当于Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小。要注意的是ArrayList并不是线程安全的,因此一般建议在单线程中使用ArrayList。ArrayList的元素可以为null;源码解析 ArrayList底层使用数组存储元素,默认数组大...
2018-09-26 19:01:09 809
原创 SpringBoot(六)springboot整合themleaf
Themleaf thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。 Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 ht...
2018-09-25 18:46:02 9232 1
原创 Java底层之HashMap底层实现原理
HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 HashMap ...
2018-09-23 17:05:26 1626
原创 SpringBoot(五)springboot整合Redis
redis是一个key-value存储系统。支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。数据都是缓存在内存中。edis会周期性的把更新的数据写入磁盘或者把修改操作...
2018-09-17 18:46:51 467
转载 Redis注解的使用方式
这篇文章主要介绍了详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有实用价值,需要的朋友可以参考下注释介绍@Cacheable @Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 @Cacheable 作用和配置方法 参数 解释 example value 缓存的名称...
2018-09-17 18:46:11 15414
原创 SpringBoot(四)springboot整合ActiveMQ
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。消息形式支持点对点和订阅-发布。ActiveMQ是什么ActiveMQ是消息队列技术,为解决高并发问题而生 ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统) ActiveMQ支持如下两种消息传...
2018-09-15 19:30:52 47105 17
原创 ActiveMQ的消息持久化机制
ActiveMQ的消息持久化机制ActiveMQ的持久化机制包含JDBC: 持久化到数据库 AMQ :日志文件(已基本不用) KahaDB : AMQ基础上改进,默认选择 LevelDB :谷歌K/V数据库在activemq.xml中查看默认的broker持久化机制。 默认消息持久化到ActiveMQ路径下的data目录下。 1. 将持久化方式改为JDBC的方...
2018-09-15 19:30:03 6927 1
原创 SpringBoot(三)springboot整合SpringDataJPA
在我们的项目开发中,数据库的访问及存储都是最为核心的部分,SpringBoot为我们提供了多种数据库来做数据的存储及读取。目前企业开发中应用最为广泛的数据库有,关系型数据库MySQL,oracle,sqlserver,非关系型数据库redis,mongodb等。 本章将通过使用SpringBoot访问MySQL结合SpringDataJPA完成CRUD(Create...
2018-09-14 18:58:54 570
原创 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
SpringBoot整合Mybatis时,出现如下错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.uv.boot.dao.UserMapper.getUserById如果你的项目是maven项目,请你在编译后,到接口所在目录看一看,很有可能是没有生产对应的xm...
2018-09-14 15:56:32 226 1
原创 SpringBoot(二)springboot整合mybatis
在我们的项目开发中,数据库的访问及存储都是最为核心的部分,SpringBoot为我们提供了多种数据库来做数据的存储及读取。目前企业开发中应用最为广泛的数据库有,关系型数据库MySQL,oracle,sqlserver,非关系型数据库redis,mongodb等。 本章将通过使用SpringBoot访问MySQL结合Mybatis完成CRUD(Create,Read,Upd...
2018-09-14 15:49:56 375
原创 SpringBoot(一)搭建一个springboot项目
什么是springboot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 ...
2018-09-13 19:28:39 1301
原创 MySQL时间类型和long类型的转换,日期格式化
MySQL中可以将时间类型保存为long类型数据:UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1536148611);日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Select UNIX_TIMESTAMP(’2018-09-05 17:01:34‘);如下是MySql日期测试表结构,有两种时间存...
2018-09-12 10:56:41 23656
原创 Spring RestTemplate发送Http请求
借助 RestTemplate,Spring应用能够方便地使用REST资源 Spring的 RestTemplate访问使用了模版方法的设计模式.模版方法将过程中与特定实现相关的部分委托给接口,而这个接口的不同实现定义了接口的不同行为.RestTemplate定义了36个与REST资源交互的方法,其中的大多数都对应于HTTP的方法。 1. getForEntity() 发送一个H...
2018-09-11 10:46:36 1049
原创 LinkedMutiValueMap的使用(一个key对应多个value)
LinkedMutiValueMap来自Spring的 org.springframework.util包下,可以一个key对应多个value。LinkedMutiValueMap的value统一用LinkedList保存,哪怕这只是插入一个字符串。1. 添加数据 MultiValueMap map = new LinkedMultiValueMap(); //添加一个Key对应一...
2018-09-11 10:03:32 2349
转载 时间操作工具类DateUtil
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;/** * yyyy-MM-dd HH:mm:ss * */public class DateUtil { /** * 把日期...
2018-09-07 10:51:34 817
原创 ajax向controller发送请求,中文乱码问题
在接收参数的controller的RequestMapping注解中添加如下produces即可解决中文乱码问题。 //在controller的requestmapping中加入 produces={"text/html;charset=UTF-8;","application/json;"} @RequestMapping(value="/register",produce...
2018-09-07 09:58:45 1201
原创 Redis双机热备
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同...
2018-02-04 14:55:30 6306 5
原创 spring+springMVC+mybatis 框架整合
配置文件结构图如下: applicatioContext-dao.xml : <!-- 第一步:配置数据源 --> <context:property-placeholder location="classpath:resource/jdbc.properties" /> <bean id="dataSource" class="com.mc...
2017-07-15 16:26:50 267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人