自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 云架构(五)BBF模式

BFF模式(Backends for Frontends pattern)-创建单独的后台服务用以提供给特定的前端或者接口。当你希望避免为多个接口定制单独的后台时,此模式非常有用。这个模式最开始由Sam Newman提出。

2024-04-20 17:10:49 766

原创 云架构(四)异步请求-应答模式

把后台处理和前端解耦,后台处理需要异步处理,但是也需要给前端一个清晰的回应。

2024-04-12 08:30:42 720 1

原创 云架构(三) 防腐层模式

大部分应用的一些功能依赖于其他系统。例如,当一个历史遗留应用迁移到新系统中,可能依然需要一些历史遗留资源。新特性必须能够去调用历史遗留系统。对于逐渐迁移来说尤其如此,随着时间的推移 ,大型应用程序的不同特性都会移到新系统中。

2024-04-06 10:45:29 1354

原创 云架构(二) 大使模式

欢迎大家留言沟通。

2024-03-27 11:57:42 886

原创 云架构(一)

数据管理是云应用的关键,它对于质量属性(非功能性需求:可靠性,安全要求,性能,灵活性,可维护性等等)有着重大的影响。好的设计包含组件的设计和部署中的一致性和连贯性,确保方便管理和部署,并且允许组件和子系统能够在其他应用程序和场景中可复用。在设计和实现阶段的决策会对云上的应用程序和服务产生显著的影响质量和总体成本。分布式的云应用程序需要一个消息基础设施来连接组件和服务,理想情况下,松耦合性可实现最大可扩展性,异步消息的广泛运用提供了巨大便利的同时,也带来了很多挑战,比如消息排序,有害消息管理,幂等性等等。

2024-01-24 18:59:01 630

原创 微软云架构设计模式--前言

最近看到微软官网上有一篇关于架构设计模式的文章,看了几眼,发现很有启发。遂产生了翻译并学习的想法。

2024-01-24 18:54:41 606

原创 StopWatch类功能增强

多线程、多方法下使用的stopwatch类

2023-05-11 19:23:39 199

原创 Netty中的ChannelOption分析

ChannelOption类分析

2022-04-25 17:52:01 758 2

原创 (五)Netty服务接收请求过程

正文

2021-11-24 17:35:34 716

原创 服务器文件压缩下载-Zip4j

前言本文主要介绍如何使用Zip4j对服务器文件进行压缩加密,通过前台调用接口,下载压缩文件正文前台调用//由于ajax方式返回的是json字符,所以文件流下载不能使用ajax调用,自己组装一个form表单提交var url = "Controller地址";var logname = "需要下载的文件名";$('<form/>').appendTo('body').attr({'id':'downloadlogs','method':'POST','action'

2021-11-23 09:09:46 657

原创 (四)Netty服务启动过程源码分析 — 绑定端口

前言正文

2021-11-19 09:13:46 595

原创 (三)Netty服务启动过程源码分析 — Selector的构建和优化

前言继上一篇讲完了Channel的注册和初始化后,我们看看Netty的Selector是如何创建的,以及Netty是如何对他进行优化的正文io.netty.channel.nio.NioEventLoop // 在NioEventLoop初始化的时候,在构造方法里会调用openSelector()方法 private SelectorTuple openSelector() { final Selector unwrappedSelector;

2021-11-17 10:52:55 527

原创 (二)Netty服务启动过程源码分析 — 注册Channel

前言上一篇分析了服务端启动类的源码,接下来我们在上一篇的代码的基础上,一步一步的看一下启动过程中是如何运作的开始// 启动类中这一句是开始启动,我们跟进到bind方法中ChannelFuture f = b.bind(PORT).sync();...

2021-11-15 09:30:27 878

原创 (二)Netty服务启动过程源码分析 — 初始化Channel

前言上一篇分析了服务端启动类的源码,接下来我们在上一篇的代码的基础上,一步一步的看一下启动过程中是如何运作的。由于启动过程代码调用链较长,所以分为两部分来分析。本文分析的是启动过程中的初始化部分。正文io.netty.example.echo.EchoServer// 启动类中这一句是开始启动,我们跟进到bind方法中ChannelFuture f = b.bind(PORT).sync();io.netty.bootstrap.AbstractBootstrap

2021-11-12 09:21:41 132

原创 (一)Netty服务端启动类源码分析

目录前言一、Netty版本二、入口:EchoServer类解析前言本文需要了解一些Netty的基础知识,建议直接下载源码进行阅读,如果有错误疑问,欢迎指正讨论一、Netty版本源码分析系列基于Netty-4.1版本二、入口:EchoServer类解析public final class EchoServer { static final boolean SSL = System.getProperty("ssl") != null; sta

2021-11-11 15:21:59 1904

原创 Netty源码分析系列

学习Netty源码也有一段时间了,接下来的一段时间我会发布一系列关于Netty源码分析。可能内容会有点分散,主要是对Netty中一些感兴趣的功能,或者某个功能里面一些有意思的代码写法进行分析。分析的方式主要是结合源码加上注释。...

2021-11-11 15:20:59 207

原创 JavaWeb单服务器下解决页面重复提交问题

在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。场景例如说注册用户功能(向数据库中写入垃圾信息),投票功能(多次刷票),购物结算功能(多次扣钱),防止论坛灌水功能一、表单重复提交的常见应用场景有如下的form.jsp页面&lt;%@ page l...

2018-07-23 09:31:02 317

原创 360极速浏览器 加载form表单问题

360极速浏览器 加载form表单时会自动提交,所以要在form表单上加上 onsubmit="return false;"&lt;form  onsubmit="return false;"&gt;&lt;/form&gt;

2018-07-23 09:26:10 805

转载 href 中 # 与 java_Script:void(0) 的区别(去掉下划线保存不了,是CSDN的BUG吗)

&lt;a href="#"&gt; 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP&lt;a href="JavaScript:void(0)" onClick="window.open()"&gt; 点击链接后,页面不动,只打开链接&lt;a href="#" onclick="javascript:return false;"&gt; 作

2018-07-23 09:22:13 1149

原创 Jstl标签

Jsp&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt; &lt;!--输出,条件,迭代标签

2018-07-23 09:14:27 201

原创 forward和redirect的区别

1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.2.从数据共享来说 forward:转发页面和转发到的...

2018-07-23 09:12:53 146

原创 ehcache与springMVC集成

一、Spring cache 与 ehcache 有什么关系          1. Spring自身并没有实现缓存解决方案,但是对缓存管理功能提供了声明式的支持,能够与多种流行的缓存实现进行集成2. Spring内置很多缓存管理器 SimpleCacheManager NoOpCacheManager ConcurrentMapCacheManager ...

2018-07-21 15:41:05 464

原创 mybatis 一级缓存和二级缓存

一级缓存也叫sqlsession缓存,默认是一直开启的,无法关闭1、不同sqlsession的缓存是不能共用的2、相同sqlsession中,两次查询之间如果有增删改动作,缓存也会失效,会重新查询数据库  二级缓存也叫全局缓存,namespace缓存,默认是关闭的,而且pojo类需要实现序列化接口工作机制:当一个sqlsession查询出数据,在关闭sqlsession...

2018-07-21 15:34:48 168

原创 mybatis 查询运行原理(源码解析)

从sqlsessionfactory.openSession处得到session之后,这个session是defaultSqlSessionprivate static SqlSessionFactory sqlSessionFactory = null;       /**        * 初始化Session工厂        *        * @throws IO...

2018-07-21 15:32:56 251

转载 Spring 事务的传播特性

所谓事务传播特性就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring支持7中事务传播行为1.PROPAGATION_REQUIRED(默认实现):当前没有事务则新建事务,有则加入当前事务2.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务则以非事务方式执行3PROPAGATION_MANDATORY:使用当前事务,如果没有则抛出异常4PROPA...

2018-07-21 15:19:03 183

原创 mybatis和Hibernate 对比

第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Hibernate还是首先要先理解好Hibernate。比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hi...

2018-07-21 15:18:38 175

转载 springmvc 运行流程

流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet调用HandlerAdapter处理器适配器 5...

2018-07-21 15:16:52 136

转载 springmvc 常见面试题

1、讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2的是StrutsPrepareAndExecuteFilter2、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决是单例模式,所以在多线程访问的时候有线程安全问题,...

2018-07-21 15:16:19 1737

转载 mybatis 常见面试题

1、#{}和${}的区别是什么?注:这道题是面试官面试我同事的。答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,...

2018-07-21 15:15:46 164

转载 Spring的注解配置

概述注解配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注解配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。 注解和 Java 代码位于一个...

2018-07-21 15:15:18 130

原创 Spring AOP 实现原理

Spring AOP 属于第二代 AOP,采用动态代理机制和字节码生成技术实现。  与最初的 AspectJ 采用编译器将横切逻辑织入目标对象不同,动态代理机制和字节码生成都是在运行期间为目标对象生成一个代理对象,而将横切逻辑织入到这个代理对象中,系统最终使用的是织入了横切逻辑的代理对象,而不是真正的目标对象。一、动态代理  我们可以为指定的接口在系统运行期间动态的生成代理对象,...

2018-07-21 15:12:16 2792

原创 序列化和反序列化

1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做...

2018-06-29 09:57:00 240

转载 Static 关键字

static关键字1.修饰成员变量在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的。请看下面的例子:(未避免程序太过臃肿,暂时不管访问控制)public class Person {String name;int age;publi...

2018-06-29 09:40:58 121

原创 Java 静态语句块、语句块、构造函数执行顺序

静态代码块在非静态代码块之前执行(静态代码块—&gt;非静态代码块—&gt;构造方法)一、单类例子public class Static {       public static int k = 0;       public static Static s1 = new Static("t1");       public static Static s2 = new Static("t2")...

2018-06-29 09:40:11 259 1

原创 ++a与a++的区别

java中a++与++a区别a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!!class demo1{public static void main(String[] args){int a=20;int b=19;/*先运算在赋值;1. b先和a作比较,b比a小为假,所以a还是20;2. b在自增加1,所以b为20;3. 因为...

2018-06-29 09:39:54 1208

原创 String、StringBuilder、StringBuffer

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder &gt; StringBuffer &gt; String  String最慢的原因:  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对...

2018-06-29 09:39:35 100

原创 REPLACE和REPLACEALL

1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); 2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;     相同点是都是全部替换,即把源字符串中的某一字符或字符串...

2018-06-29 09:39:18 149

原创 重载与重写的区别

重写方法的规则:1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public&gt;protected&gt;default&gt;private)4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法...

2018-06-29 09:38:56 149

转载 Java中三个引用类SoftReference 、 WeakReference 和 PhantomReference的区别

本文将谈一下对SoftReference(软引用)、WeakReference(弱引用)和PhantomRefrence(虚引用)的理解,这三个类是对heap中java对象的应用,通过这个三个类可以和gc做简单的交互。强引用:除了上面提到的三个引用之外,还有一个引用,也就是最长用到的那就是强引用.例如:Java代码 1.Object o=new Object();   2.Object o1=o;...

2018-06-29 09:38:23 2102

转载 int 与 Integer

前言          如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类;int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,...

2018-06-29 09:37:47 219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除