我对JAVA的堆外内存与NIO零拷贝的理解 在JAVA中,JVM内存指的是堆内存。在机器内存中,不属于堆内存的部分即为堆外内存。堆外内存也被称为直接内存。当我们的java程序对操作系统所管理的磁盘文件等进行读写时候(IO操作),并不是直接与IO外设打交道读写jvm的内存,而是操作系统会首先把磁盘文件读取到他所管理的一块内存中,然后我们的程序再把这个内存中的数据拷贝到jvm所管理的内存中,很显然这就多了一道工序,为何要这么做呢?如...
细品Spring Bean的生命周期 spring bean的生命周期官方的流程图如下:接下来 我们用代码验证一下是否如图所愿:首先定义一个testBeanimport org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanFactory;import org.springframework.be...
开发进阶当前阶段-心得篇 学习微服务框架,不如学习演进式架构(Evolutionary Architecture)。学习新的编程语言,不如学习代码整洁之道、设计模式、领域驱动设计(DDD)。学习 LeSS 和规模化敏捷框架(SAFe),不如学习精益生产原则(Lean manufacturing principles)。学习 Hystrix,不如学习容错模式(Fault Tolerance Patterns)。...
开发中常用的shell脚本&数据处理 watch.sh(生产环境日志异常监控shell脚本)#!/bin/bash#--------------------------------------------# 监听程序异常日志, 如果出现异常则发送通知# author:RUNTU# weixin: classmisschen#--------------------------------------------# ...
EMQ X 生产环境鉴权配置详解(连接认证与访问控制) EMQ的应用场景、下载、运行,官方文档都说的很细,本篇主要总结一下生产环境下,暴露于外网下的EMQ的访问鉴权配置。警告:建议版本是3.2.2,请不要使用3.1版本(bug:任何人可以直接通过DashBoard的18083端口调用rest api创建用户)EMQ X 消息服务器的鉴权主要有连接认证和访问控制俩部分组成,提供了的一系列相关的认证插件(Plugins)。 连接认证: EMQ...
针对Mysql的CentOS系统参数主要调优 内核相关参数(/etc/sysctl.conf)# 以下参数可以直接放到sysctl.conf文件的末尾net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.ipv4.tcp_max_syn_backlog = 65535# 加快TCP连接的回收:net.ipv4.tcp_fin_timeout = 1...
可能这是关于BIO-NIO-AIO-Netty处理模型最好理解的文章了 无意中看到别人总结BIO-NIO-AIO-Netty的前世今生,也在往上翻阅了一些帖子,总感觉讲的太过于繁杂,往往一个简单的概念层层拓展,盖过了文章的主题,所以我想图文并茂的,层层递进,简单点、再简单点的讲出来。所以本文中不会出现代码。讲的不好的,或者错误的请指正!!BIO(Blocking Input/Output)处理步骤: 启动服务端,并循环监听客户端连接,每监听到一个请求,创建...
阿里云外网映射配置(rinetd) 原帖地址:https://help.aliyun.com/document_detail/43850.html?spm=a2c4g.11186623.2.16.38b36ca62clfMn前提条件如果您需要从本地 PC 端访问 Redis 实例进行数据操作,可以通过在 ECS 上配置端口映射或者端口转发实现。但必须符合以下前提条件: 若 Redis 实例属于专有网络(VPC),ECS...
常见的&必知必会的JAVA面试题清单-(长更) 面试题模块介绍内容包含了很多java方方面面,包含模块有:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示:适宜阅读人群...
jetty启动logback阻塞控制台空白或者抛出I/O error occurred while parsing xml file 解决办法很简单,把logback.xml的dtd注释掉。Java程序在解析xml文件时,如果xml文件中指定了dtd,在默认会从指定的url下载dtd文件,但是很多情况下如果网络连接不上,或者防火墙原因,dtd文件无法下载下来导致程序报连接超时异常,解析xml失败。我的就是因为这个dtd文档地址被墙了,折腾我好久。。。xmlns,schema,dtd,我就不科普了...
Spring Cloud微服务解决方案 ⑩:Spring Cloud Config 网上先搂一段简介:Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以为所有环境中的应用程序管理其外部属性。它非常适合spring应用,也可以使用在其他语言的应用上。随着应用程序通过从开发到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松...
Spring Cloud微服务解决方案⑨:Sidecar异构 比如我当前项目需要调用一个php或者node的接口,怎么把这个服务整合到当前java的微服务中呢。源码下载路径在:https://download.csdn.net/download/qq_22075041/10869452,代码参考microservice-sidecar模块pom文件 <dependency> <groupId>org.s...
Spring Cloud微服务解决方案⑧:Zuul(API网关) 简单的来说,我们把zuul这个项目启动起来,注册到eurake上,那么他就可以代理eurake上面的服务(默认),各种玩法听我细细道来。源码下载路径在:https://download.csdn.net/download/qq_22075041/10869452,代码参考microservice-gateway-zuul模块。首先加入zuul的依赖<dependency>...
Spring Cloud微服务解决方案⑧:Zuul(API网关) 简单的来说,我们把zuul这个项目启动起来,注册到eurake上,那么他就可以代理eurake上面的服务(默认),各种玩法听我细细道来。源码下载路径在:https://download.csdn.net/download/qq_22075041/10869452,代码参考microservice-gateway-zuul模块。首先加入zuul的依赖<dependency>...
Spring Cloud微服务解决方案⑦:Turbine(断路器集群监控) 上一篇文章末尾我们已经实现了Hystrix Dashboard对单个服务实例的监控,在实际应用中,我们更需要的是一个集群系统的监控信息,这时我们就需要引入Turbine。Turbine能够汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard来集中展示和监控。简单的说,就是Turbine是一个项目,把其他启用了Hystrix的项目信息配置进去启动起来,有一个访问地址还是复制上一篇文...
Spring Cloud微服务解决方案⑥:Hystrix的使用 在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix类库提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。demo下载地址:https://download.csdn.net/download/qq_...
Spring Cloud微服务解决方案⑤:eurake的常用配置项以及eurake、feign、ribbon常见问题总结 常见问题总结文档在这里:https://download.csdn.net/download/qq_22075041/10854420常用配置项官方文档链接:https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_appendix_compendium_of_configuratio...
Spring Cloud微服务解决方案④:Feign的使用 Feign是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbo...
Spring Cloud微服务解决方案③:Ribbon的使用 先来一段介绍:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在...
Spring Cloud微服务解决方案 ②:注册服务到Eureka上 首先你的把上一篇文章中的Eureka服务启动起来,源码地址:https://download.csdn.net/download/qq_22075041/10851487本文对应microservice-consumer-movie和microservice-provider-user子模块,他俩为调用关系,作为Eureka客户端的话,配置一样,只是为后文做铺垫。以下是microservice...
Spring Cloud微服务解决方案①:Eureka服务端的构建 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,以实现SpringCloud的服务发现功能。包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界...
调用Spring所管理的bean的方法时候,为何不会出现线程安全问题? 首先jvm会在内存中开辟一块存储空间做为线程栈空间,每个线程都有自己的栈(后进先出)。调用方法时,会在栈中压入一个栈帧,用来存储这个方法的参数和局部变量;方法返回时 ,栈帧就会弹出,方法的参数和局部变量就会清除;方法调用时,调用栈不断处于涨落之中,如果调用的层级过深,调用栈可能会溢出Spring创建的bean默认是singleton的,线程调用某个bean时,是持有一个bean对象...
Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种:通过 在xml中定义init-method 和 destory-method方法第三种: 通过bean实现InitializingBean和 DisposableBean接口对于初始...
nginx监控与性能调优 监控nginx有自带的监控模块,编译nginx的时候,加上参数 --with-http_stub_status_module#配置指令 ./configure --prefix=/usr/local --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module...
Tomcat性能调优以及远程管理(Tomcat manager与psi-probe监控) tomcat优化的我用到的几个点:1.内存优化2.线程优化 docs/config/http.html maxConnections acceptCount(配置的太大是没有意义的) maxThreads minSpareThreads 最小空闲的工作线程(不能设置的太小)4.配置优化 docs/config/host.html autoDepla...
Tomcat远程DEBUG 在tomcat上做2个配置:1. tomcat bin下的start.sh,jpda是一种协议 exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@" 在start 前面增加jpda 2.bin下的catlina.sh, 将下面的localhost修改为54321,代码段如下:if [ -z "$JPDA_ADDRESS" ]; t...
你的Spring事务为什么不会自动回滚? Spring的事务传播行为有七种,当前我说的是默认的那种。我们知道Spring的声明式事务是基于AOP的,那么就是AOP玩的又是代理对象,那你是不是就知道了,这个事务的大概实现原理了。。。首先我们要明确RuntimeException与Exception之间的关系与他们分别的含义:1.在Java中异常的基类为Throwable,他有两个子类Exception与Errors,同时Runt...
jdk自带的JVisualVM的可视化监控 如果你前面看了我几篇关于jvm性能优化的文章,命令行操作是不是不直观,那么我们来使用这个JVisualVM吧,在jdk的bin文件夹里,这个官方文档都有中文版,插件啥的自己看着安装。https://visualvm.github.io/pluginscenters.html他主要有如下的功能: 1.监控本地Tomcat 2. 监控远程Tomcat 3....
分布式自增ID算法snowflake (Java版) 概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没...
使用jstack(jstack是用于调试线程间的关系,解决阻塞,锁等问题)定位由死循环引起的cpu负载飙高或者死锁 在linux下:linux的top命令可以查看进程的pid,我们找到java程序的pid,然后执行 top -Hp pid 就可以查看到这个进程下线程的运行情况。 这样粗略可以看到哪些线程比较繁忙,这时候就用到jdk自带的小工具jstack(官方文档或者自行 百度)。我们执行jstack pid > abc.txt //意思是执行结果输出到这个文本。在这个文本中有很...
使用jmap命令(用于输出对象,适用于解决对象内存溢出等问题)导出内存映象文件与堆内存异常分析 MAT 内存溢出自动导出参数://发生溢出时dump出来 -XX:+HeapDumpOnOutOfMemoryError//dump的路径 ./为项目启动根路径 -XX:HeapDumpPath=./内存溢出手动导出参数:jmap命令使用jdk安装后会自带一些小工具,jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共...
使用jstat(监控整体的class情况、gc情况)监控JVM jstat是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。命令格式jstat [options] VMID [interval] [count]参数[options] : 操作参数,一般使用 -gcutil 查看gc情况VMID : 本地虚拟机进程ID,即当前运行的java进程号(PID)[interval] : ...
查看JVM运行时参数 常用的一些如下:-XX:+PrintFlagslnitial(可设置参数的初始值) 显示的参数如果是:=则表示是修改过的,=则表示是默认值-XX:PrintFlagsFinal-XX:UnlockExperimentalVMOptions解锁实验参数(先决条件)-XX:+UnlockDiagnosticVMOptions解锁诊断参数-XX:+PrintCommandLineFlag...
JVM的参数类型 标准参数-help-server, -client-version, -showversion-cp, -classpathX参数 非标准化参数(在各个JDK版本中可能会变,但是变动比较小) -Xint : 解释执行 -Xcomp : 编译执行 第一次使用就编译成本地代码 -Xmixed :混合模式,JVM自己来决定是否编译成本地代码 XX...
浅析设计高可用数据库连接池(多线程)的核心要点与技术原理以及处理线程的安全问题 前不久有俩个盆友和我探讨这些问题,我做了个简单的总结分享给打架,明天就是国庆了祝大家玩的开心,主要分享设计数据库连接池原理以及要处理关键点,本文只挑选某一种实现方式来简单阐述,暂不涉及事务相关。关于事务传播行为和跨库事务(包括2PC和TCC),过段时间再做分享!那我们先引出问题,就从没有数据库连接池的时候说起吧(图就不画了,网上截一个)!!!缺点:首先,每一次web请求都要建立一次数据...
Spring事务传播行为详解 前言Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文...
SpringMVC与Springfox(Swagger2)整合详解以及涉及的问题处理 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。 作用: 1. 接口的文档在线自动生成。 2. 功能测试。 在做Spring+Spri...
java多线程之Phaser java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活,例如有这样的一个题目:5个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束...
Java并发编程之Exchanger 概述 用于线程间数据的交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。 Exchanger 可被视为 SynchronousQueue 的双向形...
Java并发编程之CyclicBarrier 概述 CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。 CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。...
java并发编程之使用 CountDownLatch 控制多个线程执行顺序 有时候会有这样的需求,多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结束后,才能开始。举个例子,开启多个线程分块下载一个大文件,每个线程只下载固定的一截,最后由另外一个线程来拼接所有的分段,那么这时候我们可以考虑使用CountDownLatch来控制并发。 CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类...
java并发编程之Semaphore(信号量)的用法 Semaphore类其实就是synchronized关键字的升级版,这个类主要作用就是控制线程并发的数量,而在这方面synchronized就有点力不足了,接下来我们就开始先了解一下Semaphore的一些常用方法就注意细节。在new 这个类的时候需要给这个类传递一个参数permits,这个参数是整数类型,这个参数的意思是同一时间内,最多允许多少个线程同时执行acquire方法和release...
Java 8 Lambda(语法,方法引用,目标类型和默认方法) 关于本文介绍了Java SE 8中新引入的lambda语言特性以及这些特性背后的设计思想。这些特性包括:lambda表达式(又被成为“闭包”或“匿名方法”) 方法引用和构造方法引用 扩展的目标类型和类型推导 接口中的默认方法和静态方法1. 背景Java是一门面向对象编程语言。面向对象编程语言和函数式编程语言中的基本元素(Basic Values)都可以动态封装程序行为:面向对象...
由分布式事务处理模型(XA 规范)引申到Mycat分布式事务的处理方案 随着并发量、数据量越来越大及业务已经细化到不能再按照业务划分,我们不得不使用分布式数据库提高系统的性能。在分布式系统中,各个节点在物理上都是相对独立的,每个节点上的数据操作都可以满足 ACID。但是,各独立节点之间无法知道其他节点事务的执行情况,如果想让多台机器中的数据保存一致,就必须保证所有节点上的数据操作要么全部执行成功,要么全部不执行,比较常规的解决方法是引入“协调者”来统一调度所有节点的执...
maven高阶使用技巧 maven生命周期Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段,阶段是有顺序的,后面的阶段依赖于前面的阶段。比如:调用clean生命周期的clean阶段实际执行pre-clean和clean;调用default生命周期的install阶段则执行install以及之前所有阶段。1、clean生命周期:清理项目,包含三个阶段。p...
Jenkins+Maven+SVN自动化部署java项目 安装Jenkins提示:首先Jenkins安装方式有2中,一种是yum安装,另一种是使用war的方式进行安装(war就需要安装tomcat)官方文档:https://pkg.jenkins.io/redhat/如果我们想使用war包的方式可以直接下载war包Jenkins访问地址:localhost:8080/jenkins新版本的jenkins为了保证安全,在安装之后有...
Java多线程实现异步调用 首先我们来一个实际的应用场景:用户请求一些报表数据,但是这些数据需要实时计算,那么用户要等待的时间就会很久,这时候我们就可以用异步的方式来处理,更通俗的场景就是生活中烧开水的时候,你可以去包饺子。蛋糕店定蛋糕,你可以先下单,不用在那里一直等着,约定个时间过来取。以下的DEMO是按照生成报表异步实际需求!public class Host { public stat...
源码分析:java.util.concurrent.ExecutorService线程池中的线程管理 最近在做一些组件的封装,使用了java.util.concurrent线程池,就好奇想知道他是如何管理线程,以及重用的?于是追踪了一下源码,基本了解了他得处理机制,所以在此总要记录一下。最近也没写什么文章,感觉人也懒了,哎。。。。 正要洋洋洒洒来写一篇来着,关键词一搜网上已经有人写了,我懒病又犯了。。。发个链接记录一下:https://blog.csdn.net/MingHuang2017/a...
spring4.X+spring-data-solr2.6.x 整合代码详解 POM.xml文件如下: <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-solr</artifactId> <version>2.1.13.RELEASE&l...
Linux下安装Elasticsearch5.X 下载Elasticsearch 登录官网 https://www.elastic.co/cn/downloads 选择下载elasticsearch,根据需要选择对应的安装包,这里选择5.0版本,下载完后得到 elasticsearch-5.0.0.tar.gz解压安装 将 elasticsearch-5.0.0.tar.gz 拷贝到 /opt 目录下。 在Linux中,/opt这个目录主...
nginx下安装配置modsecurity waf防火墙(附完整编译、配置、排错、详细规则) ModSecurity是一个免费、开源的Apache模块,可以充当Web应用防火墙(WAF)。ModSecurity是一个入侵探测与阻止的引擎.它主要是用于Web应用程序所以也可以叫做Web应用程序防火墙.ModSecurity的目的是为增强Web应用程序的安全性和保护Web应用程序避免遭受来自已知与未知的攻击。目前已经支持nginx和IIS,配合nginx的灵活和高效,可以打造成生产级的WAF,...
Ganglia服务器性能监控的部署 本文将向你介绍 Ganglia,它是一个易于扩展的监控系统。使用它可以实时查看 Linux 服务器和集群(图形化展示)中的各项性能指标。Ganglia 能够让你以集群(按服务器组)和网格(按地理位置)的方式更好地组织服务器。这样,我们可以创建一个包含所有远程主机的网格,然后将那些机器按照其它标准分组成小的集合。此外, Ganglia 的 web 页面对移动设备进行过优化,也允许你导出 csv和 ....
基于Oauth2.0授权的服务端与客户端的实现 oauth本身不是技术,而是一项资源授权协议!Apache基金会提供了针对Java的oauth封装。我们做Java web项目想要实现oauth协议进行资源授权访问,直接使用该封装就可以。 其实这个很简单,我直接给出项目地址好了:Oauth2实现java...
禅道项目管理软件在linux的部署详细教程 去官网下载对应的版本,然后安装也很简单。1、将安装包直接解压到/opt目录下特别说明:不要解压到别的目录再拷贝到/opt/,因为这样会导致文件的所有者和读写权限改变,也不要解压后把整个目录777权限。可以使用命令: sudo tar -zxvf ZenTaoPMS.7.3.stable.zbox_32.tar.gz -C /opt2、Apache和Mysql常用命令执行/opt/zbox/zbo...
Nginx URL重写(rewrite)配置及信息详解 题外话:nginx从Nginx 1.7.7版本开始也支持具有TCP负载均衡的功能。来点教程地址(未验证过)(未验证过)Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持re...
Nginx配置location的root与alias nginx指定文件路径有两种方式root和alias,root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。最基本的区别alias 指定的目录是准确的,给location指定一个目录。root 指定目录的上级目录,并且该上级目录要含有locatoin指定名称的同名目录。以root方式设置资源路径:语法: root pat...
溯源:logback中logger对象的创建过程以及他的处理机制 首先在我们的业务中,所有用到slf4j的地方都有类似于以下有这段代码:public class ClassDemo { private static Logger logger = LoggerFactory.getLogger(ClassDemo.class); logger.debug("some log content");}我现在要研究的就是LoggerFactory....
完整的RSA开发流程以及加解密Demo import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.spec.PKCS8En...
java实现web项目的长连接已经心跳检测机制的实现方案 实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的。 如果,长时间未发送维持连接包,服务端程序将断开连接。客户端: Client通过持有Socket的对象,可以随时(使用sendObject方法)发送Massage Object(消息)给服务端。 如果keepAliveDelay毫秒(程序中是2秒)内未发送任何数据,则自...
ConcurrentHashMap的那些事儿 HashMap允许插入key和value是null的数据的,而ConcurrentHashMap是不允许key和value是null的。这个是为什么呢?ConcurrentHashMap的作者是这么说的: The main reason that nulls aren’t allowed in ConcurrentMaps (ConcurrentHashMaps, Concurre...
数据库查询优化:使用explain分析sql语句执行效率 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。Explain语法:explain select … from … [where …]例如:explain select * from news;输出:+----+--------...
MySQL 优化原理 MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构,来自:高性能MySQLMySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比...
分布式之 Redis 本文围绕以下几点进行阐述1、为什么使用redis2、使用redis有什么缺点3、单线程的redis为什么这么快4、redis的数据类型,以及每种数据类型的使用场景5、redis的过期策略以及内存淘汰机制6、redis和数据库双写一致性问题7、如何应对缓存穿透和缓存雪崩问题8、如何解决redis的并发竞争问题正文1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性...
不可不知的消息队列细则 本文大概围绕如下几点进行阐述:为什么使用消息队列?使用消息队列有什么缺点?消息队列如何选型?如何保证消息队列是高可用的?如何保证消息不被重复消费?如何保证消费的可靠性传输?如何保证消息的顺序性?我们围绕以上七点进行阐述。需要说明一下,本文不是《消息队列从入门到精通》这种课程,因此只是提供一个复习思路,而不是去教你们怎么调用消息队列的API。建议对消息队列不了解的人,去找点消息队列的博客看看,再看本...
延时任务处理订单超时方案(非定时) 在开发中,往往会遇到一些关于延时任务的需求。例如生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别 定时任务有明确的触发时间,延时任务没有 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期...
tomcat的原理分析 1.tomcat实际是运行在jvm中的一个进程。我们把它定义为【中间件】,顾名思义,他是一个在java项目与jvm之间的中间容器。我们的web项目没有入口方法(main方法),那么他是如何运行起来并为客户端返回数据的呢?2.web项目[就javaee而讲]的本质,是一大堆的资源文件和方法。其中没有main方法,意味着web项目中的方法不会自动运行起来。3.这样,我们想想也知道,我们把web项目部署...
项目开发中的分布式缓存击穿以及处理方案 什么是缓存击穿在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。场景如下图所示:我们正常人在登录首页的时候,都是根据userID来命中数据,然而黑客的目的是破坏你的系统,黑客可以随机生成一堆userID,然后将这些请求怼到你的...
Docker 安装 Tomcat 方法一、通过 Dockerfile构建创建Dockerfile首先,创建目录tomcat,用于存放后面的相关东西。runoob@runoob:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/confwebapps目录将映射为tomcat容器配置的应用程序目录logs目录将映射为tomcat容器的日志目录conf目录里的配置文件将映射为tomc...
CentOS Docker 安装 Docker支持以下的CentOS版本:CentOS 7 (64-bit)CentOS 6.5 (64-bit) 或更高的版本前提条件目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2...
我理解的通俗的数据库三范式 1NF:原子性,即字段不可以再分。2NF:唯一性,不可以把多种数据保存在同一张表中,即一张表只能保存“一种”数据。不符合第二范式的表:学号, 姓名, 年龄, 课程名称, 成绩, 学分; (部分依赖)可能会存在问题:数据冗余,每条记录都含有相同信息; 删除异常:删除所有学生成绩,就把课程信息全删除了; 插入异常:学生未选课,无法记录进数据库; 更新异常:调整课程学分,所有行都调整。 正确做法: 学生...
并发情况下的商品超卖问题解决方案之行级锁 先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。从技术方面剖析,很多人肯定会想到事务,但是事务是控制库存超卖的必要条件,但不是充分必要条件。...
数据库的锁机制 在并发访问情况下,可能会出现脏读、不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。并发控制在计算机科学,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制(Concurrency control)是确保及时纠正由并发操作导致的错误的一种机制。数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔...
MySQL中的行级锁,表级锁,页级锁 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。行级锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和...
MySQL中的共享锁与排他锁 行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突。行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念、使用方式及注意事项等。共享锁(Share Lock)共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。如果事务T对数据A加上共享锁后,则其他事务只能对A再...
详细剖析电脑hosts文件的作用和修改 提到电脑系统中的hosts文件,如果不是太熟悉的话,还真是闻所未闻,一是由于系统的hosts文件为系统属性,在系统默认设置下,我们根本无法看到它的存在,而是由于身处系统深层文件夹内,我们一般也无法察觉到它的存在。下面就来说一下系统hosts文件的一些实用应用和修改。一、hosts文件具体存放在哪电脑系统hosts文件位于系统安装目录如Windows下的System32\Drivers\Etc 文件...
简单的RSA和AES加密算法的java实现 AES如下:package com.timliu.security.symmetric_encryption;import java.security.Key;import java.security.Security;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.Sec...
使用VisualVM监控远程服务器JVM VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很有帮助。在windows中安装JDK后,VisualVM位于%JAVA_HOME%/bin/下,直接执行jvisualvm.exe即可,一个主要运行界面如图:VisualVM会自动检测本机运行中的JV...
java.util.concurrent.locks包下常用的类 首先要说明的就是Lock,通过查看Lock的源码可知,Lock是一个接口:public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, ...
HTTP/2 服务器推送(Server Push)教程 HTTP/2 协议的主要目的是提高网页性能。头信息(header)原来是直接传输文本,现在是压缩后传输。原来是同一个 TCP 连接里面,上一个回应(response)发送完了,服务器才能发送下一个,现在可以多个回应一起发送。服务器推送(server push)是 HTTP/2 协议里面,唯一一个需要开发者自己配置的功能。其他功能都是服务器和浏览器自动实现,不需要开发者关心。本文详细介绍服务器推送的...
linux 添加开机自启动脚本 Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法。1. 编写脚本autostart.sh(这里以开机启动redis服务为例),脚本内容如下:#!/bin/sh#chkconfig: 2345 80 90#description:开机自动启动的脚本程序#开启nginx服务 端口为80/bin/systemctl start n...
利用keepalived实现高可靠(HA) 1.1. 高可靠概念HA(High Available), 高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。1.2. 高可靠软件keepalivedkeepalive是一款可以实现高可靠的软件,通常部署在2台服务器上,分为一主一备。Keepalived可以对本机上的进程进行检测,一旦Master检测出某个进程出现问题,将自己切换成Backup...
linux crontab定时任务的使用 linux系统则是由cron(crond)这个系统服务来控制的。Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外,由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:crontab命令。一、crond简介crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的...
解读分库分表中间件Sharding-JDBC与实现分库分表功能 分库分表适用场景分库分表用于应对当前互联网常见的两个场景——大数据量和高并发。通常分为垂直拆分和水平拆分两种。垂直拆分是根据业务将一个库(表)拆分为多个库(表)。如:将经常和不常访问的字段拆分至不同的库或表中。由于与业务关系密切,目前的分库分表产品均使用水平拆分方式。水平拆分则是根据分片算法将一个库(表)拆分为多个库(表)。如:按照ID的最后一位以3取余,尾数是1的放入第1个库(表),尾数是2的放...
iptables简介与常用命令 1. iptables防火墙简介Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4及2.6内核中集成的模块。2. Iptables服务相关命令1.查看iptables状态service iptables status2.开启/关闭...