自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

转载 从BIO到NIO在到Netty线程模型(零拷贝)

从BIO到NIO在到Netty线程模型(零拷贝)摘要:NIO和netty是面试中被频繁问到的,NIO在网络编程中通过少数几个线程处理大量连接数的核心,是tomcat,netty等框架的底层网络传输基础,本文基于面试题,深入理解非阻塞IO,netty是一个高性能的服务器网络通信框架,是rpc,dubbo的底层实现,本文基于netty核心组件详解netty1、NIO是什么?NIO特点 接口是异步...

2019-05-31 11:09:44 1135

原创 缓存穿透、雪崩、击穿

前言缓存就是为了弥补存储系统在这些复杂业务场景下的不足,其基本原理是将可能重复使用的数据放到内存中,一次生成、多次使用,避免每次使用都去访问存储系统。缓存能够带来性能的大幅提升,以 Memcache 为例,单台 Memcache 服务器简单的 key-value 查询能够达到 TPS 50000 以上,其基本的架构是:缓存穿透1.什么是缓存穿透一般的缓存系统,都是按照k...

2019-05-31 10:47:52 279

原创 Tomcat的并发配置&Nginx实现负载均衡&动静分离&redis实现session共享

目录Tomcat的并发配置Nginx实现负载均衡动静分离redis实现session共享Tomcat的并发配置Tomcat 默认配置的最大请求数是 150,可以将其改大。具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。 操作系统对于进程中的线程数有一定的限制: Windo...

2019-05-31 10:26:07 554

原创 windows 下Nginx的启动(start),停止

Nginx的启动(start),停止(stop)命令查看Nginx的版本号:nginx -V启动Nginx:start nginx快速停止或关闭Nginx:nginx -s stop正常停止或关闭Nginx:nginx -s quit配置文件修改重装载命令:nginx -s reload查看windows任务管理器下Nginx的进程命令:tasklist /fi "imag...

2019-05-27 23:39:05 900

原创 tomcat架构分析

Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)连接器(Connector)处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。容器(Container)加载和管理 Servlet,以及具体处理 Request 请求。连接器:监听网络端口。接受网络连接请求。读取请求网络字节流。根据具体...

2019-05-27 23:35:11 294

原创 Servlet 容器

Servlet 容器用来加载和管理业务类。HTTP 服务器不直接跟业务类打交道,而是把请求交给 Servlet 容器去处理,Servlet 容器会将请求转发到具体的 Servlet,如果这个 Servlet 还没创建,就加载并实例化这个 Servlet,然后调用这个 Servlet 的接口方法。因此 Servlet 接口其实是Servlet 容器跟具体业务类之间的接口。因此 Servlet 接...

2019-05-26 11:47:07 962

原创 cookie和session

1. Cookie 技术Cookie 是 HTTP 报文的一个请求头,Web 应用可以将用户的标识信息或者其他一些信息(用户名等)存储在 Cookie 中。用户经过验证之后,每次 HTTP 请求报文中都包含 Cookie,这样服务器读取这个 Cookie 请求头就知道用户是谁了。Cookie 本质上就是一份存储在用户本地的文件,里面包含了每次请求中都需要传递的信息。2. Session 技...

2019-05-26 11:38:39 287

转载 HTTP工作原理

1. 用户通过浏览器进行了一个操作,比如输入网址并回车,或者是点击链接,接着浏览器获取了这个事件。2. 浏览器向服务端发出 TCP 连接请求。3. 服务程序接受浏览器的连接请求,并经过 TCP 三次握手建立连接。4. 浏览器将请求数据打包成一个 HTTP 协议格式的数据包。5. 浏览器将该数据包推入网络,数据包经过网络传输,最终达到端服务程序。6. 服务端程序拿到这个数据包后,...

2019-05-26 10:25:55 327

原创 JVM(三)类加载、字节码技术

目录字节码技术字节码技术应用场景字节技术优势常见的字节码操作类库BCELASMCGLBjavassist类加载器类加载的机制的层次结构步骤一、类加载机制步骤二、连接过程步骤三、初始化类加载器的层次结构启动(Bootstrap)类加载器扩展(Extension)类加载器系统(System)类加载器、理解双亲委派模式双亲委派模...

2019-05-24 17:30:45 859

原创 JVM(二)垃圾回收GC以及Tomcat性能测试

垃圾回收概念和算法及对象的分代转换垃圾回收概念及其算法谈到垃圾回收( Garbage Collection,简称GC),需要先澄清什么是垃圾,类比日常生活中的垃圾,我们会把他们丢入垃圾桶,然后倒掉。GC中的垃圾,特指存于内存中、不会再被使用的对象,而回收就是相当于把垃圾“倒掉”。垃圾回收有很多种算法:如引用计数法、标记压缩法、复制算法、分代、分区的思想。垃圾收集算法引用计数法:...

2019-05-24 17:20:32 749

原创 JVM(一)基本概念,堆、栈、方法区,虚拟机参数配置

目录Java虚拟机概述和基本概念java虚拟机的原理Java虚拟机的基本结构基本概念说明堆、栈、方法区堆、栈、方法区概念和联系辨清JAVA堆Java栈Java方法区虚拟机参数虚拟机参数堆分配参数新生代的配置堆溢出处理栈配置方法区直接内存配置Client和Server虚拟机工作模式Java虚拟机概述和基本概念java虚拟...

2019-05-24 17:11:27 681

原创 架构设计的 3 个原则(合适原则、简单原则、演化原则)

合适原则合适原则宣言:“合适优于业界领先”。真正优秀的架构都是在企业当前人力、条件、业务等各种约束下设计出来的,能够合理地将资源整合在一起并发挥出最大功效,并且能够快速落地。简单原则简单原则宣言:“简单优于复杂”。软件领域的复杂性体现在两个方面:1. 结构的复杂性组成复杂系统的组件数量更多;同时这些组件之间的关系也更加复杂。2. 逻辑的复杂性逻辑复杂的组件...

2019-05-23 16:13:15 2338 3

原创 关于架构的思考之三:系统复杂度的来源(可扩展性、低成本、安全和规模)

目录可扩展性定义:how:预测变化的复杂性源头:在准确预测变化的前提下,如何应对?两个主要的复杂性相关的问题1系统需要拆分出变化层和稳定层2. 需要设计变化层和稳定层之间的接口低成本安全1. 功能安全2. 架构安全规模1. 功能越来越多,导致系统复杂度指数级上升2. 数据越来越多,系统复杂度发生质变可扩展性定义:可扩展性指系...

2019-05-23 15:44:16 1525

原创 树的前中后序遍历(递归&非递归)

/**前序遍历 递归*/ public void preOrder(BinaryNode<AnyType> Node) { if (Node != null) { preOrder(Node.left); preOrder(Node.right); } } /**中序遍历 递归*/...

2019-05-23 11:31:14 275

原创 JAVA多线程基础 之十一 线程池

什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系...

2019-05-23 11:31:02 373

原创 四种单例模式

饥饿模式/*** Created by zhanghaipeng on 2018/11/9.* 单例模式 懒汉*/public class Singleton1 { private Singleton1(){} private static Singleton1 instance = null ; //线程不安全//...

2019-05-23 11:30:49 390

原创 JAVA多线程基础 之十一 并发队列Queue

并发队列Queue在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能非阻塞队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。下面这张图是 Java 并发类库提供的各种各样的线程安全队列实现,注意,图中并未将非线程安全部分包含进来。Queue 阻塞队列与非阻塞队列阻塞队列与普通队列的区别在...

2019-05-23 11:30:36 3784

原创 关于架构的思考之二:系统复杂度的来源(高性能、高可用)

目录系统复杂度的来源(高性能、高可用)高性能单机复杂度集群的复杂度高可用计算高可用(业务的逻辑处理)存储高可用系统复杂度的来源(高性能、高可用)高性能软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度。单机复杂度操作系统:批处理(指令清单并进行处理)--》进程...

2019-05-23 11:29:42 1475

原创 关于架构的思考之一:架构的定义及目的

目录架构的定义架构设计目的是什么?如何做架构分析架构的定义软件架构指软件系统的顶层结构。架构涉及系统、子系统、模块和组件各部分。参考RUP的4+1视图:https://blog.csdn.net/haponchang/article/details/90473820用例视图(Use Cases View),最初称为场景视图,关注最终用户需求,为整个技术架构的上线文环...

2019-05-23 11:27:54 5722 2

转载 软件体系结构——4+1视图

转自:https://blog.csdn.net/ananhao/article/details/78938960软件体系结构——4+1视图(整理资料)架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了于此方面无关的实体。架构视图如同在建筑学中的不同种类的蓝图。1. 背景软件架构文档过分强调软件开发的某一个方面。架构不能解决所...

2019-05-23 09:03:41 10279 1

原创 JAVA多线程基础 之十 CopyOnWrite容器

定义:CopyOnWrite机制称为写时复制,理解起来很简单,就是执行修改操作时进行底层数组复制,使得修改操作在新的数组上进行,不妨碍原数组的并发读操作,复制修改完成后更新原数组引用变量。原理每个修改之前都加上ReentrantLock使并发写操作互斥执行,避免多次数据复制修改。所以能够实现读写分离,但是写写同步执行。读写并发环境中,在将原数组对象引用变量更新为复制修改完成后的数组对象...

2019-05-22 10:45:15 387

原创 JAVA多线程基础 之九 CountdownLatch&CyclicBarrier&Semaphore的使用

CountdownLatchCountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。...

2019-05-22 10:43:54 314

原创 ConcurrentHashMap源码解读

ConcurrentHashMap源码解读JDK1.7及之前锁分段技术HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHas...

2019-05-22 10:40:28 275

原创 JAVA多线程基础 之七 同步类容器与并发类容器

同步类容器:为什么会有同步类容器?在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。像ArrayList、LinkedL...

2019-05-22 10:36:41 294

原创 JAVA多线程基础 之六 多线程间通信

wait与notify使用wait和notify方法实现线程间的通信(属于Object的方法)必须配合synchronized关键字使用。wait方法释放锁,notify方法不释放锁。public class WaitNotifyTest {// 在多线程间共享的对象上使用wait private String[] shareObj = { "true" };...

2019-05-22 10:31:07 273

原创 JAVA多线程基础 之五 线程安全的相关概念 java 中的锁 -- 偏向锁、轻量级锁、重量级锁、自旋锁

理解锁的基础知识如果想要透彻的理解java锁的来龙去脉,需要先了解以下基础知识。基础知识之一:锁的类型锁从宏观上分类,分为悲观锁与乐观锁。乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,...

2019-05-22 10:04:53 270

原创 JAVA多线程基础 之四 线程安全的相关概念 AQS

AQS (AbstractQueuedSynchronizer)类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。框架它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进...

2019-05-22 10:02:51 253

原创 JAVA多线程基础 之三 线程安全的相关概念(JAVA内存模型&ThreadLocal&Atomic类&死锁&重排序)

线程安全的相关概念JAVA内存模型共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的...

2019-05-22 08:53:20 431

原创 JAVA多线程基础 之二 什么是线程安全及解决办法

什么是线程安全?保证线程安全需要保证几个基本特性:原子性:相关操作不会被其他线程所打扰,一般通过同步机制实现。 可见性:一个线程修改了某个共享变量,其状态能够立即被其他线程知晓。通常被解释为将线程本地状态反映到主内存上,volatile就是负责保证可见性的。 有序性:保证线程内的串行语义,避免指令重排等。线程安全解决办法?内置的锁(synchronized)Java提供...

2019-05-22 08:48:18 264

原创 JAVA多线程基础 之一

线程和进程的区别进程是所有线程的集合,每一个线程是进程中的一条执行路径。为什么使用多线程提高程序效率。多线程使用场景迅雷多线程下载、数据库连接池、分批发送短信等多线程创建方式(三种)第一种实现Runnable接口,重写run方法class Thread001 implements Runnable{ @Override public void run...

2019-05-22 08:41:05 226

转载 红黑树插入操作的平衡调整

参考来源:极客时间红黑树规定,插入的节点必须是红色的。而且,二叉查找树中新插入的节点都是放在叶子节点上。如果插入节点的父节点是黑色的,那我们什么都不用做,它仍然满足红黑树的定义。如果插入的节点是根节点,那我们直接改变它的颜色,把它变成黑色就可以了。除此之外,其他情况都会违背红黑树的定义,于是我们就需要进行调整,调整的过程包含两种基础的操作:左右旋转和改变颜色。新节点插入之...

2019-05-21 21:53:47 1582 1

原创 数组拷贝

Arrays.copyOf功能是实现数组的复制,返回复制后的数组。参数是被复制的数组和复制的长度System.arraycopy System.arraycopy方法:如果是数组比较大,那么使用System.arraycopy会比较有优势,因为其使用的是内存复制,省去了大量的数组寻址访问等时间复制指定源数组src到目标数组dest。复制从src的srcPos索引开始,复制的个数是lengt...

2019-05-21 21:50:09 334

转载 HashMap底层原理

HashMap的介绍HashMap的实现原理从底层结构、put和get方法、hash数组索引、扩容机制等几个方面来分析HashMap的实现原理:底层结构HashMap的底层结构是由数组+链表构成的。数组(紫色):hash数组(桶),数组元素是每个链表的头节点链表(绿色):解决hash冲突,不同的key映射到了数组的同一索引处,则形成链表。put和get方法...

2019-05-21 21:06:59 340

原创 List集合底层原理

List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List接口继承于Collection接口,它可以定义一个允许重复的有序集合。因为List中的元素是有序的,所以我们可以通过使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。List接口为Collection直...

2019-05-21 20:59:28 6057

原创 Mybatis框架

接口层-和数据库交互的方式MyBatis和数据库的交互有两种方式:使用传统的MyBatis提供的API;使用Mapper接口;使用Mapper接口MyBatis 将配置文件中的每一个<mapper> 节点抽象为一个 Mapper 接口:这个接口中声明的方法和<mapper> 节点中的<select|update|delete|insert&gt...

2019-05-21 16:18:38 317

原创 数据库连接池

基本原理在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。线程池作用①资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的...

2019-05-21 16:13:45 346

原创 集合框架介绍

集合框架介绍说明:对于以上的框架图有如下几点说明1.所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。3. 抽象类:5个抽象类(长虚...

2019-05-21 16:11:35 227

原创 SpringBoot多模块开发

在我们从零开始做一个新系统的时候,会首先进行系统功能模块架构设计,那么是直接做一个大而全的垂直的MVC系统,使用一个war包进行发布管理,还是需要按一些规则进行模块拆分比较好呢?笔者认为需要依据项目具有什么样的人力物力条件以及项目需要支撑多少用户量和交易量为基础。一个好的系统设计应该能够满足解决当前的需求和问题,把控实现和进度风险,预测和规划未来,避免过度设计,在上线一个基础核心版...

2019-05-20 16:30:09 1118

原创 Spring详解(四)之MVC

SpringMVC原理SpringMVC的运行流程⑴ 用户发送请求至前端控制器DispatcherServlet⑵ DispatcherServlet收到请求调用HandlerMapping处理器映射器。⑶ 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。⑷ ...

2019-05-16 10:24:21 242

原创 Spring详解(三)之IOC

SpringIOC原理XML技术什么是XML它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。XML 文档在逻辑上主要由一下 5 个部分组成:XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息文档类型声明:指出 XML 文档所用的 DT...

2019-05-16 10:23:30 228

xom-1.2.10.jar

javaws.jar 常用jar包(不含源代码)

2015-08-10

javaws.jar

javaws.jar 常用jar包(不含源代码)

2015-08-10

空空如也

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

TA关注的人

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