自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 名词解释

SaaS:SaaS平台是运营saas软件的平台。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。SaaS 是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。HA(双机集群系统)HA是High Availabl...

2019-11-19 15:31:41 429

原创 Dubbo解析

dubbo管理界面项目地址https://github.com/apache/dubbo-admin

2019-11-19 13:33:39 213

原创 基础知识

打乱List集合元素顺序 List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); Collections.shuffle(list);

2019-11-16 20:38:32 261

原创 如何解决高并发

1.缓存技术的使用2.读写分离3.静态化技术4.分布式架构/技术的使用

2019-11-16 12:49:47 175

原创 zookeeper(三):选举算法

Leader选举Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。 1.服务器初始化启动。 2.Leader 挂掉服务器启动时期的Leader选举若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。在集群初始化阶段,当 有一台服务器Serverl启动时,其单独无法进...

2019-11-12 22:59:24 295

原创 zookeeper(二)

源码构建 1. 安装ant 2. github:https://github.com/boomblog/zookeeper 3. 切到 brach-3.4.13-vip 分支 4. 在项目根目录下运行ant eclipse 5. 用IDEA导入eclipse工程 6. 运行QuorumPeerMain, program arguments=conf/zoo.cfg,并且复制conf/l...

2019-11-12 22:22:17 418

原创 zookeeper(一)

zookeeper

2019-11-12 15:27:47 298

原创 tomcat请求处理原理解析

Container容器是所用servlet容器的父接口,也就是说作为一个servlet容器,首先必须要实现Container接口,每个tomcat服务器只能有唯一的根Container,Connector组件通过setContainer方法将Container容器和Connector关联起来。共有四种类型Container容器,分别对应不同概念的层次,每一层之间是父子的关系。1、Engine:整...

2019-11-10 21:43:50 387

原创 tomcat请求原理解析

Connector容器主要负责解析socket请求,在tomcat中的源码位于org.apache.catalina.connector和org.apache.coyote包路径下;通过上两节的分析,我们知道了Connector是Service的子容器,而Service又是Server的子容器。在server.xml文件中配置,然后在Catalina类中通过Digester完成实例化。在serve...

2019-11-10 21:43:38 421

原创 tomcat启动流程解析

一、设置catalinaHome和catalinaBasecatalinaHome是tomcat的安装目录,catalinaBase是tomcat的工作目录;这两个目录的主要功能是当在同一台机器上部署多个tomcat实例时,可以不用安装多个tomcat副本,而是通过共享tomcat代码的方式实现。例如在同一台机器上部署两个tomcat实例时,只需要创建两个base目录,base1和base2,然...

2019-11-10 21:43:21 143

原创 布隆过滤器

2019-11-08 10:48:59 123

原创 redis问数据结构(四)

pipeline(管道):只需要建立1次连接pipeline属于非原子性操作,只是建立一次连接,把命令一次性传递到redis,但是redis还是要一个一个执行, 当有其他命令执行时,线程可能会被切换去执行其他命令....

2019-11-07 23:09:37 101

原创 值传递与引用传递

引用传递引用传递:”引用”也就是指向真实内容的地址值,在方法调用时,实参的地址通过方法调用被传递给相应的形参,在方法体内,形参和实参指向真实内容的地址值,对形参的操作会改变真实对象内容。对于引用数据类型的对象/数组,变量名存在栈中,变量值存储的是对象的地址,并不是对象的实际内容。public static void main(String[] args) { Mk...

2019-11-07 15:23:20 184

原创 redis问题解决方案(三)

11111

2019-11-07 14:40:41 129

原创 redis(二) 数据持久化-两种方式 :RDB和AOF

RDB(默认)1.原理AOP1.原理

2019-11-06 12:59:54 195

原创 普通的hash算法与一致性hash算法的解析

为了使得集群能够水平扩展,首要解决的问题就是如何将整个数据集按照一定的规则分配到多个节点上,常用的数据分片的方法有:范围分片,哈希分片,一致性哈希算法和虚拟哈希槽等。普通的哈希算法: 一般都是计算出哈希值后,通过取余操作将 key 值映射到不同的服务器上,但是当服务器数量发生变化时,取余操作的除数发生变化,所有 key 所映射的服务器几乎都会改变,这对分布式缓存系统来说是不可以接收的...

2019-11-06 12:45:34 946

原创 应用进程和内核的关系

内核即操作系统内核,用于控制计算机硬件。同时将用户态的程序和底层硬件隔离开,以保障整个计算机系统的稳定运转(如果用户态的程序可以控制底层硬件,那么一些病毒就会针对硬件进行破坏,比如 CIH 病毒)。应用进程即用户态进程,运行于操作系统之上,通过系统调用与操作系统进行交互。上图中,内核指的是TCP/IP 等协议及相关驱动程序。客户端发送的请求,并不是直接送达给应用程序,而是要先经过内核。内...

2019-11-06 09:50:01 1387

原创 IO模型(一):epoll

List<SocketChannel> list = new ArrayList(); ByteBuffer byteBuffer = ByteBuffer.allocate(1024); try { ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.b...

2019-11-05 22:39:13 105

原创 redis解析(一):高可用方案

redis数据淘汰机制(6种) 1. volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数 最少的key),只淘汰设定了有效期的key.(从已设置过期时间的数据集 (server.db[i].expires)中挑选最近最少使用的数据淘汰) 2. allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰.(从数据集 (server....

2019-11-04 12:47:29 180

原创 spring源码解析(一)

Autowiring modes(自动注入模型)–只针对XML方式,对注解方式则无所谓Mode(模式)Explanation(功能说明)NO(默认)无自动装配。Bean引用必须由ref元素定义。对于较大的部署,建议不要更改默认设置,因为明确指定协作者可以提供更好的控制和清晰度。在某种程度上,它记录了系统的结构。byName按属性名称自动布线。Spring寻找与需要自...

2019-11-03 22:28:07 194

原创 spring循环引用

https://blog.youkuaiyun.com/java_lyvee/article/details/101793774 spring循环引用

2019-11-03 21:06:15 624

原创 关于时间的各种操作

1.Date:日期字符串格式大小比较String str1="2015-02-08";String str2="2015-01-08";int res=str1.compareTo(str2);1是大于 0是等于 -1是小于获取某年第一天日期Calendar calendar = Calendar.getInstance();calendar.clear();cal...

2019-11-03 16:46:04 134

原创 proxy 代理 与reflect 反射

java reflect1.概念反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代...

2019-11-03 10:05:51 118

原创 正确捕捉异常Exception和正确的日志打印

Java异常控制机制又被称为“违例控制机制”。捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行。但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解决。错误在运行期间发生时,我们可能不知道具体应该怎样解决,但我们清楚此时不能不管不顾地继续执行下去。此时应该做的事情是:• 暂停程序的运行• 指出何时、何地发生了什么样的错误• 可能的话应处理此错误并恢复程序的执...

2019-11-03 09:16:44 12977 3

原创 springmvc中GET请求和POST请求

GET和POST是HTTP请求的两种方式主要区别在于GET方法是请求读取由URL所标志的信息,POST是给服务器添加信息。注意:在请求中,只有post请求方式,才会有请求体;get方式的请求,请求数据中是没有请求体的。post请求方式 可以携带参数类 POST通过request body传递参数。get请求方式 不可以携带参数类 ,参数只能拼接到url路径里GET...

2019-11-03 08:39:27 2125

原创 springboot如何统一捕捉异常

SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ,其中 @ControllerAdvice 是组件注解,添加了这个注解的类能够拦截 Controller 的请求,而 ExceptionHandler 注解可以设置全局处理控制里的异常类型来拦截要处理的异常。<dependencies> ...

2019-11-01 22:39:35 725

原创 Java并发 之 原子类

并发性能优化之使用LongAdder替换AtomicLong因为计数器操作涉及到内存的可见性和线程之间的竞争,而Atomic*的实现完美的屏蔽了这些技术细节,我们只需要执行相应的方法,就能实现对应的业务需求。Atomic虽然好用,不过这些的操作在并发量很大的情况下,性能问题也会被相应的放大。我们可以先看下其中getAndIncrement的实现代码@OutputTimeUnit(TimeU...

2019-11-01 22:19:57 113

原创 Java8特性

1.lambda表达式:加入lambda之后,很多写法都变得简单起来,如创建一个线程对象new Thread(new Runnable() { @Override public void run() { System.out.print("Hello"); }});lambda写法:new Thread(() -> System.out.p...

2019-11-01 21:44:54 326

原创 springboot + redis +拦截器 实现接口幂等性校验

一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次二、常见解决方案唯一索引 – 防止新增脏数据token机制 – 防止页面重复提交悲观锁 – 获取数...

2019-11-01 20:51:15 398

原创 高并发: 悲观锁 , 乐观锁 与 超卖现象

超卖现象当多个线程请求数据库查询库存余量时,显示有余量,但是当进行扣减库存时,库存已经用完了,但那个线程并不知道,依旧去扣减库存,造成库存为负数的情况,于是乎就出现了超发现象。1、悲观锁发生超卖现象的根本原因是共享数据被多个线程所修改,无法保证其执行顺序,如果一个数据库事务读取到一个产品后,就将数据直接锁定,不允许其他线程进行读写操作,直至当前数据库事务完成才释放这条数据的锁,就不会发生超发...

2019-11-01 15:04:56 881

原创 springboot+shiro

1.shiro是什么?Shiro是Apache下的一个开源项目。shiro属于轻量级框架,相对于SpringSecurity简单的多,也没有SpringSecurity那么复杂。以下是我自己学习之后的记录。2.主要功能shiro主要有三大功能模块:Subject:主体,一般指用户。SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件。(类似于Spr...

2019-11-01 14:50:42 706

原创 自动装箱与拆箱

自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。原始类型byte, short, char, int, long, float, double 和 boolean 对应的封装类为Byte, Sh...

2019-11-01 14:42:35 164

原创 springBoot+@Async实现异步调用

定义线程池import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableAsync;import org.springfr...

2019-11-01 14:34:47 108

原创 mybatis+自定义拦截器+分页

Interceptor接口package org.apache.ibatis.plugin;import java.util.Properties;/** * @author Clinton Begin */public interface Interceptor { Object intercept(Invocation invocation) throws Throwable...

2019-11-01 14:23:27 570

原创 springBoot+微信小程序登录

微信小程序登录流程微信小程序登录流程涉及到三个角色:小程序、开发者服务器、微信服务器三者交互步骤如下:第一步:小程序通过wx.login()获取code。第二步:小程序通过wx.request()发送code到开发者服务器。第三步:开发者服务器接收小程序发送的code,并携带appid、appsecret(这两个需要到微信小程序后台查看)、code发送到微信服务器。第四步:微信服务器接...

2019-11-01 14:14:51 3667 1

原创 springboot数据库连接池连配置实战

spring: datasource: url: jdbc:p6spy:mysql://polardb-public-test.rwlb.rds.aliyuncs.com:3306/julu_uat?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true username: * pas...

2019-11-01 13:30:21 1885 2

原创 阿里云OOS+springBoot

项目源码地址https://github.com/ggb2312/JavaNotes/tree/master/springboot-integration- examples官方文档:https://help.aliyun.com/product/31815.html?spm=a2c4g.11186623.6.540.517822372ASOvk涉及知识点OSS简介,以及阿里云OSS...

2019-11-01 13:05:20 332

原创 tomcat整体架构简介

作为一款开源的轻量级的jsp服务器软件,tomcat是使用最广泛的web服务器之一。tomcat源码用Java编写,研读tomcat源码,向大师学习编程思想,还是会有不少收获。一、tomcat总体架构宏观角度来看,tomcat可以分为两大块,Connector和Container。Connector主要负责接收请求、解析请求后生成request和response。Container作为服务器的...

2019-11-01 12:09:55 374

原创 零拷贝(zero-copy)

传统的文件IO在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS(操作系统)的内核代码负责将相应的文件数据读取到内核的IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。零拷贝而NIO的零拷贝与传统的文件I...

2019-11-01 01:34:35 522

空空如也

空空如也

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

TA关注的人

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