- 博客(56)
- 收藏
- 关注
原创 云架构(六)隔离模式
Bulkhead模式是一种容错的应用程序设计类型。在隔离架构中,应用程序的元素被隔离到池中,这样即使其中一个出现故障,其他元素也可以继续工作。它是以船体的分段(舱壁)命名的。如果船体受损,只有受损部分充满水,从而防止船舶沉没。
2024-04-29 10:28:22
1009
原创 云架构(五)BBF模式
BFF模式(Backends for Frontends pattern)-创建单独的后台服务用以提供给特定的前端或者接口。当你希望避免为多个接口定制单独的后台时,此模式非常有用。这个模式最开始由Sam Newman提出。
2024-04-20 17:10:49
1155
原创 云架构(三) 防腐层模式
大部分应用的一些功能依赖于其他系统。例如,当一个历史遗留应用迁移到新系统中,可能依然需要一些历史遗留资源。新特性必须能够去调用历史遗留系统。对于逐渐迁移来说尤其如此,随着时间的推移 ,大型应用程序的不同特性都会移到新系统中。
2024-04-06 10:45:29
1595
原创 云架构(一)
数据管理是云应用的关键,它对于质量属性(非功能性需求:可靠性,安全要求,性能,灵活性,可维护性等等)有着重大的影响。好的设计包含组件的设计和部署中的一致性和连贯性,确保方便管理和部署,并且允许组件和子系统能够在其他应用程序和场景中可复用。在设计和实现阶段的决策会对云上的应用程序和服务产生显著的影响质量和总体成本。分布式的云应用程序需要一个消息基础设施来连接组件和服务,理想情况下,松耦合性可实现最大可扩展性,异步消息的广泛运用提供了巨大便利的同时,也带来了很多挑战,比如消息排序,有害消息管理,幂等性等等。
2024-01-24 18:59:01
672
原创 服务器文件压缩下载-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
717
原创 (三)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
644
原创 (二)Netty服务启动过程源码分析 — 注册Channel
前言上一篇分析了服务端启动类的源码,接下来我们在上一篇的代码的基础上,一步一步的看一下启动过程中是如何运作的开始// 启动类中这一句是开始启动,我们跟进到bind方法中ChannelFuture f = b.bind(PORT).sync();...
2021-11-15 09:30:27
921
原创 (二)Netty服务启动过程源码分析 — 初始化Channel
前言上一篇分析了服务端启动类的源码,接下来我们在上一篇的代码的基础上,一步一步的看一下启动过程中是如何运作的。由于启动过程代码调用链较长,所以分为两部分来分析。本文分析的是启动过程中的初始化部分。正文io.netty.example.echo.EchoServer// 启动类中这一句是开始启动,我们跟进到bind方法中ChannelFuture f = b.bind(PORT).sync();io.netty.bootstrap.AbstractBootstrap
2021-11-12 09:21:41
182
原创 (一)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
2024
原创 Netty源码分析系列
学习Netty源码也有一段时间了,接下来的一段时间我会发布一系列关于Netty源码分析。可能内容会有点分散,主要是对Netty中一些感兴趣的功能,或者某个功能里面一些有意思的代码写法进行分析。分析的方式主要是结合源码加上注释。...
2021-11-11 15:20:59
246
原创 JavaWeb单服务器下解决页面重复提交问题
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。场景例如说注册用户功能(向数据库中写入垃圾信息),投票功能(多次刷票),购物结算功能(多次扣钱),防止论坛灌水功能一、表单重复提交的常见应用场景有如下的form.jsp页面<%@ page l...
2018-07-23 09:31:02
360
原创 360极速浏览器 加载form表单问题
360极速浏览器 加载form表单时会自动提交,所以要在form表单上加上 onsubmit="return false;"<form onsubmit="return false;"></form>
2018-07-23 09:26:10
876
转载 href 中 # 与 java_Script:void(0) 的区别(去掉下划线保存不了,是优快云的BUG吗)
<a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP<a href="JavaScript:void(0)" onClick="window.open()"> 点击链接后,页面不动,只打开链接<a href="#" onclick="javascript:return false;"> 作
2018-07-23 09:22:13
1224
原创 Jstl标签
Jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!--输出,条件,迭代标签
2018-07-23 09:14:27
246
原创 forward和redirect的区别
1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.2.从数据共享来说 forward:转发页面和转发到的...
2018-07-23 09:12:53
186
原创 ehcache与springMVC集成
一、Spring cache 与 ehcache 有什么关系 1. Spring自身并没有实现缓存解决方案,但是对缓存管理功能提供了声明式的支持,能够与多种流行的缓存实现进行集成2. Spring内置很多缓存管理器 SimpleCacheManager NoOpCacheManager ConcurrentMapCacheManager ...
2018-07-21 15:41:05
516
原创 mybatis 一级缓存和二级缓存
一级缓存也叫sqlsession缓存,默认是一直开启的,无法关闭1、不同sqlsession的缓存是不能共用的2、相同sqlsession中,两次查询之间如果有增删改动作,缓存也会失效,会重新查询数据库 二级缓存也叫全局缓存,namespace缓存,默认是关闭的,而且pojo类需要实现序列化接口工作机制:当一个sqlsession查询出数据,在关闭sqlsession...
2018-07-21 15:34:48
201
原创 mybatis 查询运行原理(源码解析)
从sqlsessionfactory.openSession处得到session之后,这个session是defaultSqlSessionprivate static SqlSessionFactory sqlSessionFactory = null; /** * 初始化Session工厂 * * @throws IO...
2018-07-21 15:32:56
297
转载 Spring 事务的传播特性
所谓事务传播特性就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring支持7中事务传播行为1.PROPAGATION_REQUIRED(默认实现):当前没有事务则新建事务,有则加入当前事务2.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务则以非事务方式执行3PROPAGATION_MANDATORY:使用当前事务,如果没有则抛出异常4PROPA...
2018-07-21 15:19:03
218
原创 mybatis和Hibernate 对比
第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Hibernate还是首先要先理解好Hibernate。比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hi...
2018-07-21 15:18:38
225
转载 springmvc 运行流程
流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet调用HandlerAdapter处理器适配器 5...
2018-07-21 15:16:52
177
转载 springmvc 常见面试题
1、讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2的是StrutsPrepareAndExecuteFilter2、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决是单例模式,所以在多线程访问的时候有线程安全问题,...
2018-07-21 15:16:19
1856
转载 mybatis 常见面试题
1、#{}和${}的区别是什么?注:这道题是面试官面试我同事的。答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,...
2018-07-21 15:15:46
195
转载 Spring的注解配置
概述注解配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注解配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。 注解和 Java 代码位于一个...
2018-07-21 15:15:18
169
原创 Spring AOP 实现原理
Spring AOP 属于第二代 AOP,采用动态代理机制和字节码生成技术实现。 与最初的 AspectJ 采用编译器将横切逻辑织入目标对象不同,动态代理机制和字节码生成都是在运行期间为目标对象生成一个代理对象,而将横切逻辑织入到这个代理对象中,系统最终使用的是织入了横切逻辑的代理对象,而不是真正的目标对象。一、动态代理 我们可以为指定的接口在系统运行期间动态的生成代理对象,...
2018-07-21 15:12:16
2905
原创 序列化和反序列化
1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做...
2018-06-29 09:57:00
277
转载 Static 关键字
static关键字1.修饰成员变量在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的。请看下面的例子:(未避免程序太过臃肿,暂时不管访问控制)public class Person {String name;int age;publi...
2018-06-29 09:40:58
154
原创 Java 静态语句块、语句块、构造函数执行顺序
静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)一、单类例子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
309
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
1279
原创 String、StringBuilder、StringBuffer
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对...
2018-06-29 09:39:35
139
原创 REPLACE和REPLACEALL
1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); 2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号; 相同点是都是全部替换,即把源字符串中的某一字符或字符串...
2018-06-29 09:39:18
193
原创 重载与重写的区别
重写方法的规则:1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法...
2018-06-29 09:38:56
188
转载 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
2231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人