自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴声子夜歌的博客

个人学习笔记

  • 博客(123)
  • 资源 (1)
  • 收藏
  • 关注

原创 Nginx--动静分离配置

动静分离Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从实现角度来讲大致分为两种:一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过Ngin...

2020-01-25 22:06:20 1046

原创 Nginx--负载均衡及相关策略

负载均衡增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。实现效果:浏览器地址栏输入地址:http:localhost/vod/a.html,负载均衡效果,平均转发到8080和8082准备工作:两台tomcat:tomcat9 8082端口tomcat8 8080端口...

2020-01-25 21:12:19 306

原创 Nginx--反向代理配置

反向代理配置实现效果:在浏览器输入www.test.com,跳转到tomcat主页面。配置ip域名映射:

2020-01-25 20:29:18 351

原创 Nginx--Mac下安装配置Nginx

安装Homebrewruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装Nginxbrew install nginx验证结果brew services start nginx浏览器访问本机8080端口(默认):查看版本nginx -v...

2020-01-25 11:54:17 304

原创 Nginx--Docker环境下安装Nginx与配置挂载

安装Docker拉取Nginx镜像:docker pull nginxdocker images创建挂载目录:mkdir -p /Users/acton_zhang/mydocker/mynginx/{conf,conf.d,html,logs}进入容器并查看配置文件目录结构:docker run -i -t nginx /bin/bashcopy容器里的配置文件到宿...

2020-01-24 20:03:24 478

原创 Nginx--配置文件

Nginx配置文件Nginx配置文件的位置:#CentOS/usr/local/nginx/conf/nginx.conf#Docker/etc/nginx配置文件的组成默认的 nginx 配置文件 nginx.conf 内容如下:#user nobody;worker_processes 1;#error_log logs/error.log;#error_...

2020-01-24 19:20:09 244

原创 Nginx--常用命令

Nginx常用命令使用Nginx操作命令的前提条件:必须进入Nginx的目录:/usr/local/nginx/sbin/查看Nginx版本号./nginx -v启动Nginx./nginx关闭Nginx./nginx -s stop重新加载./nginx -s reload...

2020-01-24 17:34:27 214

原创 Nginx--概述及相关概念

Nginx概述Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx转为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。正向代理正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问...

2020-01-24 13:13:33 4378

原创 GC--算法详解

GC算法概述JVM进行GC和Full GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是新生代。因此,GC按照回收的区域又分成了两种类型,一种是普通GC(mimor GC),一种是全局GC(major GC or Full GC)。minor Gc和Full GC的区别:普通GC(Minor GC):只针对新生代区域的GC,指发生再新生代的垃圾收集动作,因为大多数Jav...

2020-01-24 00:42:18 395

原创 GC--日志分析

GC日志设置VM参数打印GC日志:-XX:+PrintGCDetails打印GC日志:GC的日志是以替换的方式(>)写入的,而不是追加(>>),如果下次写入到同一个文件中的话,以前的GC内容会被清空。参数列表:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时...

2020-01-23 19:41:29 267

原创 JVM--堆内存调优

堆参数Java7:Java8:JDK1.8之后将最初的永久代取消了,由元空间取代。元空间与永久代最大的区别在于:永久代使用的JVM的堆内存,但是Java8以后的元空间并不在虚拟机中而是使用本机物理内存。因为,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPermSi...

2020-01-23 19:16:40 287

原创 JVM--方法区(Method Area)

方法区供各线程共享的运行时内存区域。它存储了每一个类的结构信息,例如运行时常量池(Runtime Constant Pool)、字段和方法数据、构造函数和普通方法的字节码内容。上面说的是规范,在不同虚拟机里实现是不一样的,最典型的就是永久代(PermGen)和元空间(Metaspace)。实例变量存在堆内存中,和方法区无关。...

2020-01-23 17:56:54 623

原创 JVM--Heap堆详解

堆(Heap)一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真是信息,以方便器执行,堆内存分为3部分:Yong Generation Space 新生区: Young/NewTenure Generation Space 养老区:Old/TenurePermanent Space 永久区:Perm...

2020-01-23 17:49:33 1208

原创 JVM--Stack栈

栈(Stack)栈也叫栈内存,主管java程序的运行,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题, 只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的。8中基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存中分配。栈存储的内容栈帧中主要保存3类数据:本地变量(Local Variables):输入参数和输出...

2020-01-23 15:21:10 376

原创 JVM--本地接口、PC寄存器

本地接口(Native Interface)本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,于是就在内存中专门开辟了一块处理标记为native的代码,它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过J...

2020-01-23 14:19:48 308

原创 JVM--概述、类加载器

JVM位置JVM是运行再操作系统之上的,它与硬件没有直接的交互。JVM体系结构类加载器ClassLoader负责加载class文件,class文件在文件开头有特定的文件标识(cafe babe),将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine...

2020-01-23 12:49:32 224

原创 Java并发--FutureTask详解

FutureTaskFuture接口和实现Future接口的FutureTask类,代表异步计算的结果。FutureTask简介FutureTask除了实现Future接口外,还实现了Runnable接口。因此,FutureTask可以交给Executor执行,也可以由调用线程直接执行(FutureTask.run())。根据FutureTask.run()方法被执行的时机,FutureTa...

2020-01-22 16:50:30 2300

原创 Java并发--ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutorScheduledThreadPoolExecutor继承自ThreadPoolExecutor。它主要用来在给定的延迟之后运行任务,或者定期执行任务。ScheduledThreadPoolExecutor的功能与Timer类似,但ScheduledThreadPoolExecutor功能更强大、更灵活。Timer对应的是单个后台线程,而S...

2020-01-22 16:35:41 622

原创 Java并发--ThreadPoolExecutor详解

ThreadPoolExecutor详解Executor框架最核心的类是ThreadPoolExecutor,它是线程池的实现类,主要由下列4个组件构成。corePool:核心线程池的大小。maximumPool:最大线程池的大小。BlockingQueue:用来暂时保存任务的工作队列。RejectedExecutionHandler:当ThreadPoolExecutor已经关闭或T...

2020-01-22 16:19:30 755

原创 Java并发--Executor框架

Executor框架在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Call...

2020-01-22 16:04:38 280

原创 Java并发--线程池的使用

线程池的创建我们可以通过ThreadPoolExecutor来创建一个线程池。创建一个线程池时需要输入几个参数,如下:corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThrea...

2020-01-22 15:35:29 251

原创 Java并发--线程池实现原理

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

2020-01-22 15:10:01 315

原创 ActiveMQ--持久化机制

ActiveMQ持久化机制为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。ActiveMQ的持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的。就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等再试图将消息发送给接收者,成功则将消息从存储中删除,失...

2020-01-22 00:34:28 2805

原创 ActiveMQ--NIO协议配置

NIO协议配置修改配置文件activemq.xml:<transportConectors> <transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/></transportConectors>如果您不特别指定ActiveMQ的网络监听端口,那么这些端口将使用BIO网络I...

2020-01-21 22:53:42 791

原创 ActiveMQ--传输协议

传输协议ActiveMQ支持的client-broker通讯协议有:TCPNIOUDPSSLHttp(s)VM其中配置Transport Connector的文件在activeMQ安装目录的conf/activemq.xml中的<transportConnectors>标签之内。在上图给出的配置信息中:URI描述信息的头部都是采用协议名称:例如描述amq...

2020-01-21 22:35:32 268

原创 ActiveMQ--SpringBoot整合ActiveMQ主题

Topic生产者新建Maven工程pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs...

2020-01-21 21:17:29 449

原创 ActiveMQ--SpringBoot整合ActiveMQ队列

整合生产者创建Maven工程pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:s...

2020-01-21 20:52:24 202

原创 Java并发--线程间交换数据的Exchanger

线程间交换数据的ExchangerExchanger(交换者)是一个用于线程间协作的工具类。 Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程...

2020-01-21 18:09:37 313

原创 Java并发--控制并发线程数的Semaphore

控制并发线程数的SemaphoreSemaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。Semaphore比作是控制流量的红绿灯。比如××马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,后面的车会看到红灯,不能驶入××马路,但是如果前一百辆中有5辆车已经离开了××马...

2020-01-21 17:58:06 471

原创 Java并发--同步屏障CyclicBarrier

同步屏障CyclicBarrierCyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier简介CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其...

2020-01-21 17:42:35 284

原创 Java并发--Fork/Join框架

什么是Fork/Join框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+…+10000...

2020-01-21 16:58:00 310

原创 Java并发--阻塞队列的实现原理

阻塞队列的实现原理使用通知模式实现。 所谓通知模式,就是当生产者往满的队列里添加元素时会阻塞住生产者,当消费者消费了一个队列中的元素后,会通知生产者当前队列可用。通过查看JDK源码发现ArrayBlockingQueue使用了Condition来实现,代码如下。当往队列里插入一个元素时,如果队列不可用,那么阻塞生产者主要通过LockSupport.park(this)来实现。继续进入源码...

2020-01-21 16:20:13 987

原创 Java并发--Java中的阻塞队列

什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队...

2020-01-21 15:52:33 333

原创 Java并发--ConcurrentLinkedListQueue

ConcurrentLinkedListQueueConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法(即CAS算法)来实现,该算法在Michael&Scott算法上进行了一些修改。Concurr...

2020-01-21 15:38:21 1932 2

原创 Java并发--ConcurrentHashMap

为什么使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。线程不安全的HashMap:在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,执行以下代码会...

2020-01-21 15:27:34 673

原创 ActiveMQ--Spring配置监听消息

Spring配置监听器监听消息在Spring里面实现消费者不启动,直接通过配置监听完成。实现MessageListener接口:package pers.zhang.spring;import org.springframework.stereotype.Component;import javax.jms.JMSException;import javax.jms.Message...

2020-01-21 01:00:57 359

原创 ActiveMQ--Spring整合(队列和主题)

队列创建Maven工程、pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche...

2020-01-21 00:46:20 176

原创 ActiveMQ--Broker

Broker相当于一个ActiveMQ服务器实例。Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java中,以便随时用随时启动,在用的时候再去启动这样就节省了资源,也保证了可靠性。嵌入式Broker:用ActiveMQ Broker作为独立的消息服务器来构建JAVA应用。ActiveMQ也支持再vm中通信基于嵌入式的broker,能够无缝的集成其他java应用。p...

2020-01-20 23:34:40 245

原创 JMS--点对点、发布订阅

点对点点对点模型是基于队列的,生产者发消息到队列,消费者从队列接收消息,队列的存在使得消息的异步传输成为可能。和我们平时给朋友发送短信类似。如果在Session关闭时有部分消息已被收到但是还没有被签收(acknowledge),那当消费者下次连接到相同的队列时,这些消息还会被再次接收。队列可以长久地保存消息直到消费者收到消息。消费者不需要因为担心消息会丢失而时刻和队列保持激活的连接状...

2020-01-20 23:15:01 250

原创 ActiveMQ--事务、签收

ActiveMQ的事务生产者事务:事务在connection.createSession(false, Session.AUTO_ACKNOWLEDGE);中设置。false:只要执行send(),就进入到消息队列关闭事务,那么第二个签收参数的设置需要有效。true:先执行send()再执行session.commit(),消息才被真正提交到队列中。消息需要批量发送,...

2020-01-20 22:48:45 282

vuedevtools安装.zip

用于Chrome本地安装vue-devtools,无脑安装!!!! 安装过程: 1.Chrome=》设置=》更多工具=》扩展程序 2.打开开发者模式 3.加载已解压的扩展程序=》选择解压后的文件夹 4.重启浏览器 5.如果失败,在加载后的vuedevtools设置页面开启“允许访问文件网址”

2019-10-27

空空如也

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

TA关注的人

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