
JavaWEB
猿人小郑
猿人一族,生活在一个虚拟的世界,那里面只有0和1.
展开
-
小窥微服务架构Spring Boot的监控与管理
学过马克思主义哲学的码友们都知道:事物具有两面性。那么微服务架构带给我们开发便利的同时,也会带来许多复杂的工作,比如对于运维人员来说,随着应用的不断增多,系统集群中出现故障的频率也会越来越高,虽然在高可用机制的保护下,个别故障不会影响系统的对外服务,但是这些频繁出现的故障需要被及时发现和处理才能保证系统处于健康可用的状态。为了能对这些成倍增长的应用做到高效运维,需要实现一套自动化的监控...原创 2020-02-13 22:25:46 · 421 阅读 · 0 评论 -
SpringBoot集成Spring Security安全认证框架
从事WEB开发以来,一般用的安全认证框架,最多就是有两种:Apache Shrio和Spring Security,而Spring Security作为Spring全家桶中的一员,相对于Spring集成起来更具有优势和更好的支持!Spring Security是一个强大且可定制的身份验证和访问控制框架,完全基于Spring的应用程序标准,它能够为基于Spring的企业应用系统提供...原创 2020-02-06 08:58:01 · 3282 阅读 · 0 评论 -
SpringBoot中的统一异常处理
在互联网时代,不管是面向广大用户的应用、WEB,还是公司内部管理系统,如果有了异常,而没有正确的去处理,那么出现的500服务器错误,那是非常不友好的,不友好的出现异常错误,都会可能导致用户的流失,程序中的bug导致的服务器错误是不可避免的,那么我们就要统一捕获这些异常来给用户展现友好的界面来提高用户体验,今天就来介绍一下SpringBoot的异常处理方式!启动一个简单的SpringBoot...原创 2020-02-03 10:42:34 · 1015 阅读 · 0 评论 -
SpringMVC的九大组件
SpringMVC是Spring框架中的一个表现层框架,也称为控制层,SpringMVC中有很重要的九大组件,可以根据我们的配置来找出这九大组件都是什么。从上面的配置可以看出,SpringMVC与WEB项目集成的入口就是这个DispatcherServlet类,这个类会加载我们配置的spring-mvc.xml文件,源码如下:从类中配置的常量我们就可以找出来这九大组件,不过这有...原创 2018-11-23 10:27:41 · 10823 阅读 · 0 评论 -
关于Spring Bean的生命周期
一、简介 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,在spring中,singleton属性默认是true,只有设定为false,则每次指定别名取...原创 2018-10-08 10:47:04 · 83094 阅读 · 10 评论 -
分布式系统架构dubbo的工作原理
一、dubbo的总体架构如下:二、dubbo各层次设计说明:1、服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。2、配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。3、服务代理层(Proxy):服务...原创 2018-09-20 11:43:07 · 785 阅读 · 0 评论 -
Java编译优化技术之逃逸分析
逃逸分析(Escape Analysis)是Java虚拟机中比较先进的编译优化技术,它与类型继承关系分析一样,并不是直接优化代码的手段,而是为其他优化手段提供依据的分析技术。逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法里面被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他方法中,这种行为称为方法逃逸。甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的...原创 2018-09-13 16:10:13 · 496 阅读 · 0 评论 -
缓存技术Memcached与Redis的终极大PK
一、在网络IO模型方面Memcached:1、Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程2、监听线程监听网络连接,接受请求后,将连接描述字pipe传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库3、多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的s...原创 2018-09-12 13:54:58 · 366 阅读 · 0 评论 -
那些年,我们一起迷茫过的垃圾回收(GC算法)
Java是一门内存动态分配和垃圾收集技术组成的面向对象的高级程序语言,所谓垃圾收集技术,就是我们托管了我们所创建对象的销毁操作,或者是释放内存的操作,这些操作都是交给JVM的垃圾收集技术来完成,看似简单粗暴,却是隐患多多。当需要排查各种内存溢出、内存泄露问题时,垃圾收集技术就成了我们不得不去深入了解,不得不实施必要的监控和调节,就是我们托管给了GC,但是我们要对GC进行监控和调节(也是符合...原创 2018-07-26 11:32:43 · 683 阅读 · 0 评论 -
那些年,我们一起嫌弃过的Java内存模型(JMM)
上学时期,Java学起来非常枯燥,什么JVM规范,Java语言规范,JMM(Java Memory Model)等之类的东西,不过掌握好这些,考试能考个好成绩。工作后,感觉离JVM、JMM等渐行渐远,而随着工作年限的增加,感觉离JVM、JMM等越来越近,今天,就来谈一谈那些年,我们一起嫌弃过的Java内存模型(JMM)。 首先是JVM(Java虚拟机),在执行Java程序的过程中,会把它所管...原创 2018-07-25 14:31:54 · 233 阅读 · 0 评论 -
从Spring源码知晓其所支持的Bean Scope
众所周知,在Spring2之前,Bean只是支持两种Scope:singleton和prototype,也就是单例和多例,但是之后又加入了其他的Bean Scope,现在已经到了Sping5,如下图:那它现在到底支持几种Scope,我们就从我现在用的Spring4版本的源码中来获取。 要找到入口,首先要了解xml中bean标签的scope属性,或者@Scope注解,我们就从注解入...原创 2018-11-26 14:39:40 · 302 阅读 · 0 评论 -
Dubbo的负载均衡策略及使用
Dubbo本是阿里巴巴开发的一款高性能的分布式服务框架,虽然沉寂了一段时间,但是仍旧难敛其锋芒,随着微服务架构的盛行,Dubbo重新开始了维护,并且风生水起,现已捐赠给Apache,作为一款高性能Java RPC框架,服务于开源世界的码农们。本文就来讲解一下关于Dubbo负载均衡的那些事。 讲解技术,最好的方式去从源码发掘要点,负载均衡的英文是LoadBalance,无出其外,Dub...原创 2018-11-28 10:16:54 · 4569 阅读 · 2 评论 -
RMI:利用JDK中的Remote实现远程方法调用
Java RMI:即Java远程方法调用,是针对Java语言的一种特殊RPC调用,一种用于实现远程过程调用的应用程序编程接口。下面用一个简单实例来说明Java RMI是怎样开发的。步骤一:编写远程服务接口,该接口必须继承 java.rmi.Remote 接口,方法必须抛出 java.rmi.RemoteException 异常;import java.rmi.Remote;impor...原创 2019-01-22 09:56:01 · 3189 阅读 · 0 评论 -
ThreadLocal的介绍及由其引发的内存泄露问题
一、ThreadLocal的定义ThreadLocal,通常被我们翻译为线程本地变量,这是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。二、ThreadLocal的源码解析及常用方法先来看一下ThreadLocal的源码:可以看出,ThreadLoc...原创 2019-02-13 14:48:04 · 538 阅读 · 0 评论 -
HashMap的初始容量机制及扩容机制
通常在我们的应用中,HashMap是用到最多的数据结构之一,在JDK1.8之前,它的底层结构是数组+链表,而在JDK1.8之后,为了查询效率的优化(主要是当哈希碰撞较多的时候),它的底层结构变成了数组+链表+红黑树。今天就来探讨一下HashMap的扩容机制,这也是面试时被问到最多的问题。首先看一下源码中HashMap的四种构造方法。 从源码中可以看出:HashMap提供四种构...原创 2019-03-30 21:35:46 · 11833 阅读 · 7 评论 -
HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式
接着上一篇博客,上一篇博客说明了HashMap的初始容量都是2的n次幂的形式存在的,而扩容也是2倍的原来的容量进行扩容,也就是扩容后的容量也是2的n次幂的形式存在的,下面就来说明一下为什么是2的n次幂的形式! 先来看一下源码,也就是向HashMap中添加元素,或者扩容时是怎么存放元素的。 第一个截图是向HashMap中添加元素putVal()方法的部分源码,可以看出,向集合...原创 2019-03-31 21:43:49 · 42020 阅读 · 23 评论 -
从Integer与int的各种比较来看Integer的缓存机制及包装类的拆箱装箱
首先来看下面一道程序,猜一猜它的运行结果?设定了一系列Integer与int的值,然后做各种比较,其中设定127与128是有缘故的,往下看!运行结果是什么?懒得猜咱们就直接运行,结果如下:对于这种结果,咱们一一解释:1、首先int是基本数据类型,Integer是包装类型,a与b做比较时,b会自动拆箱成基本数据类型与a做比较,所以他们的比较为true;2、a与c做比较的结...原创 2019-04-12 18:31:00 · 351 阅读 · 0 评论 -
使用LinkedHashMap实现一个简易的LRU缓存
对于缓存系统,我们在开发中经常用到的,除了本地缓存,还有像memcached、redis这样优秀的分布式缓存服务器,在这些缓存服务器中,有一个经常听说的术语,叫做淘汰策略,也就是当系统中缓存越来越多时,需要执行一定的策略,来实现缓存的合理利用,下图是redis配置文件中关于淘汰策略的相关配置:在redis提供的这些可选择的淘汰策略中,有一个叫做LRU的组合策略,下面也有了说明:LRU ...原创 2019-05-12 10:46:32 · 5378 阅读 · 0 评论 -
Spring框架是怎么解决Bean之间的循环依赖的
在我们的开发中,会不可避免的遇到Bean之间循环依赖的,所谓循环依赖,就是两个或者两个以上的Bean互相持有对方,这样在程序运行调用中,会出现这种循环依赖的现象,假设是两个Bean,当程序调用Bean A时,Bean A中依赖Bean B,在Bean A中调用Bean B时,Bean B中又依赖了Bean A,这样就形成了循环依赖,如下图:先从一个小例子来说明,使用Spring框架如果...原创 2019-05-12 23:07:48 · 9022 阅读 · 3 评论 -
Java中与HashMap相关的知识点
一、Java底层数据存储结构介绍 在Java语言中,数据存储方式最底层的两种结构,一种是数组,另外一种是链表。其中数组的特点是空间连续,根据下标寻址较快,但是在删除或者添加元素的时候需要较大幅度的移动,总结就是查询速度快,增删速度慢;而链表的特点是空间不连续,通过首尾指针连接前一个元素和后一个元素,因此,这样的结构寻址困难,但增删元素较快,只需修改指针的指向,总结就是查询慢,增删快。...原创 2018-07-24 14:15:03 · 851 阅读 · 0 评论 -
Java注解相关说明
一、关于注解:二、关于元数据:三、关于标准注解:四、关于元注解:五、关于注解元素数据类型:六、关于提取注解:转载 2017-06-07 14:56:36 · 336 阅读 · 0 评论 -
框架之struts2(一)
一.struts2位于三层架构中的表现层(struts2 MVC框架),是基于MVC设计模式的WEB层框架 1.MVC框架 *M:Model模型,封装数据,javabean *V:view视图,展示界面,jsp页面 *C:controller控制器,控制程序流程,servlet 2.Servlet与Filte原创 2017-02-19 13:04:36 · 498 阅读 · 0 评论 -
框架之spring(二)
一.AOP概述 1.什么是AOP:(Aspect Oriented Programming),面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,是函数式编程的一种衍生泛型,利用AOP可以对业务逻辑的各个部分进行隔离,从而是的业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发效率. 2.AOP思想分析:原创 2017-02-19 12:45:45 · 356 阅读 · 0 评论 -
框架之spring(一)
一.什么是spring? 1.spring是分层的java SE/EE应用full-stack轻量级开源框架,以IoC(Inverse of controller)反转控制和AOP(Aspect oriented Programming)面向切面编程为内核的, 2.spring的体系结构 3.spring的好处:原创 2017-02-19 12:31:07 · 411 阅读 · 0 评论 -
搭建maven私服(nexus)
1.Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。2.下载Nexus,下载地址是:http://www.sonatype.org/nexus/archived/3.安装Nexus,解压下载的Nexus版本,进入bin目录,执行nexus.bat install进行安装,安装成功后可以在服务中查看nexus服原创 2017-01-15 17:08:21 · 392 阅读 · 0 评论 -
项目管理工具-Maven
1.Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。构建过程如下:2.项目对象模型 (Project Object Model):通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。3.maven中仓库的类型如下:maven工作需要配置仓库,本地的项目A、项目B等通过maven从远程仓库(可以原创 2017-01-15 16:23:59 · 873 阅读 · 0 评论 -
三种web会话管理的方式
HTTP是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的。当然它知道是哪个客户端地址发过来的,但是对于我们的应用来说,我们是靠用户来管理,而不是靠客户端。所以对我们的应用而言,它是需要有状态管理的,以便服务端能够准确的知道http请求是哪个用户发起的,从而判断他是否有权限继续这个请求。这个过程就是常说的会话管理。它也可以简单理解为一个用户从登录到退出应转载 2017-01-10 15:06:33 · 1997 阅读 · 0 评论 -
主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解
以svn为例,git的master相当于trunk,dev分支相当于branches--------------------------------------------------------------------------------------------------------------------------------------------trunk:是用来做转载 2017-01-10 14:14:22 · 780 阅读 · 0 评论 -
Tomcat热部署
Tomcat热部署:热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!1.打开Tomcat首页,找到manager webapp2.点击manager webapp,登陆不了,点击取消后出现如下界面:3.按照提示修改配置文件tomcat-users.xml,添加如下的角色和用户4原创 2016-12-24 19:49:56 · 915 阅读 · 0 评论 -
框架之struts2(二)
一.Struts2的模型驱动 1.编写要求: *动作类必须实现ModelDriven接口,并提供抽象方法实现 *必须我们自己实例化模型对象动作类:public class CustomerAction extends ActionSupportimplements ModelDrivenCstCustomer>{ private I原创 2017-02-19 13:12:52 · 665 阅读 · 0 评论 -
框架之Hibernate(一)
一.Hibernate 1.Hibernate是一个轻量级的JavaEE应用的持久层框架,它用于实现DAO,是一个关系型数据库ORM框架 2.ORM(Object Relational Mapping):对象关系映射,ORM就是通过java对象映射到数据库表(二维关系表),通过操作java对象,就可以完成对数据库表的操作. 3.Hibernate就原创 2017-02-19 17:49:38 · 347 阅读 · 0 评论 -
swagger2集成springMvc生成在线API
在现在的开发中,前后端分离开发越来越明显,也越来越重要,但是后台开发人员在开发完接口之后给前端人员或者APP端调用,而前端人员或者APP端对接口的作用以及接口中的参数往往不懂,这样双方不得不多次沟通交流,很浪费时间。于是就需要一个中间的工具来无缝连接后台与前端。这个中间工具就是今天的主角Swagger。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful原创 2017-05-04 16:50:36 · 5535 阅读 · 8 评论 -
Nginx做反向代理配置Tomcat的session共享(window版)
一.准备nginx解压包和两个tomcat解压包二.修改tomcat的端口号,第一个采用默认,第二个改为9090三.给两个tomcat的webapps添加web项目和index.jsp首页,并在index.jsp中添加如下代码,四.启动两个tomcat,访问如下:五.配置nginx,确保可以访问到两个tomcat,就是在nginx的配置文件n原创 2017-04-03 12:03:36 · 820 阅读 · 0 评论 -
消息中间件之RabbitMQ
一、什么是RabbitMQ?MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public原创 2017-03-14 16:07:37 · 2996 阅读 · 0 评论 -
消息队列之ActiveMQ
一.什么是ActiveMQ?ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。ActiveMQ可用在分布式服务的架构中,对服务之间进行解耦,是的业务拆分更加明确.二.什原创 2017-03-12 09:14:30 · 449 阅读 · 0 评论 -
搜索引擎框架之Solr服务的搭建
一.什么是Solr?Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。采用Java开发基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、原创 2017-03-18 17:36:57 · 2581 阅读 · 0 评论 -
框架之SpringMVC
一.配置文件 1.springMvc.xml *context:component-scan base-package="com.zjl.springmvc.controller"/>:组件包扫描 *springmvc使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,原创 2017-02-26 14:09:59 · 357 阅读 · 0 评论 -
框架之Mybatis
一.MyBatis是一个优秀的持久层框架,他对jdbc操作数据库的过程进行封装,使开发者只需要关心SQL语句本身,而不需要花 精力去处理例如注册驱动,创建连接,创建statement,手动设置参数,结果集检索等jdbc繁杂的过程代码 MyBatis通过xml或者注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql进行映射原创 2017-02-26 14:04:12 · 682 阅读 · 0 评论 -
框架之Hibernate(二)
一.一对多的关系映射 1.配置文件中的配置:set name="linkmans" table="cst_linkman"> key column="lkm_cust_id">key> one-to-many class="CstLinkMan"/>set> 2.元素 *set元素: 作用:用于映射集合属性原创 2017-02-19 18:00:16 · 418 阅读 · 0 评论 -
AJAX跨域请求
在分布式系统中,需要用到跨域来请求数据,什么是跨域呢?跨域就是不同域名或者同一域名不同端口下对象之间的调用,跨域问题的产生是由于JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.简单地理解就是因为JavaScript同源策略的限制,baidu.com 域名下的js无法操作taobao.com域名下的对象.解决JS的跨域可以使用jsonp技术,由于js可以跨域加载js翻译 2016-11-27 12:27:25 · 336 阅读 · 0 评论