方法中发生异常,会创建一个异常对象交给JVM处理,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并交给JVM的过程称为抛出异常。这会有一系列的方法调用,这系列方法调用的有序列表叫做调用栈JVM会顺着调用栈去查找看是否有可以处理异常的代码,当JVM发现可以处理异常的代码时,会把发生的异常传递给它。如果JVM没有找到可以处理该异常的代码块,JVM就会将该异常转交给默认的异常处理器,默认处...
java实现注解的底层原理和概念java注解是JDK1.5引入的一种注释机制,java语言的类、方法、变量、参数和包都可以被注解标注。和Javadoc不同,java注解可以通过反射获取标注内容在编译器生成.class文件时,注解可以被嵌入字节码中,而jvm也可以保留注解的内容,在运行时获取注解标注的内容信息java提供的注解可以分成两类:作用在代码上的功能注解(部分):注解名称功能描述Override检查该方法是否是重写方法。如果发现其父类,或...
1JAVA的Type类型体系先了解下java的Type类型体系(类的类>类型),Type是所有类型(原生类型Class、参数化类型Parameterizedtype、数组类型GenericArrayType、类型变量TypeVariable、基本类型Class)的共同接口;前两篇反射和注解讲到的Class<T>就是Type的一实现类Type下面又有四个子接口类ParameterizedType、TypeVariable、GenericArrayType、WildcardType○List<E>表示泛型,E是TypeVariable类型,List<String>则是Parameterize...
前言大白话解释,零拷贝就是没有把数据从一个存储区域拷贝到另一个存储区域。但是没有数据的复制,怎么可能实现数据的传输呢?其实我们在javaNIO、netty、kafka遇到的零拷贝,并不是不复制数据,而是减少不必要的数据拷贝次数,从而提升代码性能零拷贝的好处内核空间和用户空间缓冲区和虚拟内存传统的IOmmap+write实现的零拷贝sendfile实现的零拷贝带有DMA收集拷贝功能的sendfile实现的零拷贝java提供的零拷贝方式零拷贝的好处...
前言网络IO,可以理解为网络上的数据流。通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写。单个socket时,使用一个线程即可高效处理;然而如果是10K个socket连接,或者更多,我们如何做到高性能处理?基本概念介绍网络IO的读写过程linux下的五种网络IO模型多路复用IO深入理解一波Reactor模型Proacotr模型基本概念介绍进程(线程)切换○所有系统都有调度进程的能力,它可以挂起一个当前正在运行的进程,并恢复之...
前言以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompletableFuture线程任务的创建线程任务的串行执行线程任务的并行执行处理任务结果和异常多任务的简单组合取消执行线程任务任务结果的获取和完成与否判断1创建异步线程任...
一、docker简介环境配置软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个Python应用,计算机必须有Python引擎,还必须有各种依赖,可能还要配置环境变量。如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以跑了"...
前言在使用多线程并发编程的时,经常会遇到对共享变量修改操作。此时我们可以选择ConcurrentHashMap,ConcurrentLinkedQueue来进行安全地存储数据。但如果单单是涉及状态的修改,线程执行顺序问题,使用Atomic开头的原子组件或者ReentrantLock、CyclicBarrier之类的同步组件,会是更好的选择,下面将一一介绍它们的原理和用法原子组件的实现原理CASAtomicBoolean、AtomicIntegerArray等原子组件的用法、同步组件的实现原理Reent...
前言jdk8之前我们一直在用Date、Calender和SimpleDateFormat,但它的API不够强大,还存在线程安全问题,一直被人诟病。jdk8提供了新的时间API,在java.time包里的类是不可变且线程安全的,它和Joda是同一个作者实现的,因此借鉴了Joda很多特点,如果你用习惯Joda,可以很方便地切换到java.time类的使用java.time类的简单介绍Date和time做下区分,Date(日期)的单位是年月日。time(时间)的单位是时分秒类描述Instant时间戳...
前言上次朋友关于TCPIP面试的后续,主要是https的相关面试要点,请看下文面试官:HTTPS它的认证加密过程是怎样,它怎么保证内容不会被篡改朋友:1,https是基于tcp协议的,客户端先会和服务端发起链接建立朋友:2,接着服务端会把它的证书返回给客户端,证书里面包括公钥S.pub、颁发机构和有效期等信息朋友:3,拿到的证书可以通过浏览器内置的根证书(内含C.pub)验证其合法性朋友:4,客户端生成随机的对称加密秘钥Z,通过服...
前言平时并发编程,除了维护修改共享变量的场景,有时我们也需要为每一个线程设置一个私有的变量,进行线程隔离,java提供的ThreadLocal可以帮助我们实现,而讲到ThreadLocal则不得不讲讲java的四种引用,不同的引用类型在GC时表现是不一样的,引用类型Reference有助于我们了解如何快速回收某些对象的内存或对实例的GC控制四种引用类型在JVM的生命周期引用队列(ReferenceQueue)ThreadLocal的实现原理和使用FinalReference和fina...
前言字符串的常用操作,记一下。如果有字符串的操作小技巧,好用的工具类,欢迎补全。大家随意点赞,随意看看String实现原理String常用方法字符串的缓存池和String.intern正则匹配和字符串StringBuffer和StringBuilderspring工具类StringUtilsString实现原理publicfinalclassStringimplementsSerializable,Comparable<String>,CharSequence{privatefinalcharvalue[];privateinthash;Defaultto0String有一个value的字符数组,...
前言随着业务的拓展,功能越来越多。把所有的功能都放在同一个服务下,代码混合交错,造成维护困难,也容易造成某一小bug导致整个服务不可用。因此我们会按业务功能会拆分成多个不同的服务(微服务的形成),多个服务组成的系统,有个响亮的名字:分布式系统;而系统中的服务状态我们该怎么去管理,有什么相关的理论呢?分布式和集群数据库事务分布式事务分布式数据一致性CAP理论BASE理论分布式和集群分布式是指通过网络连接...
前言上一篇架构篇:分布式理论CAP、BASE[1],我们了解到分布式存在的问题以及大致的解决理论,但是具体的实现协议或者方案有哪些?分布式一致性分布式共识算法○paoxs、Raft、zab分布式事务一致性分布式事务一致性的实现方案(XA模式和AT模式)○两阶段提交○三阶段提交○柔性事务TCC○AT模式○事件通知1分布式一致性什么是分布式一致性?分布式一致性其实更多是偏向解决多个服务间的数据副本状态的一致,而不同于关系型数据库...
前言sed全名为streameditor,是用于文本处理的流编辑器,支持正则表达式。sed处理文本时是一次处理一行内容sed语法sed命令处理的内容是模式空间中的内容,而非直接处理文件内容。如果加上参数i则可直接修改文件内容示例:sedi's原字符串新字符串'hometest.txtsed[nefr参数][function][filePath]选项与参数描述n使用silent模式。在一般sed的用法中,输入的数据都会被输出到屏幕上。但如果加上n参数后,则不会显示,如果...
前言AWK是一门解释型的编程语言。用于文本处理,它的名字来源于它的三位作者的姓氏:AlfredAho,PeterWeinberger和BrianKernighanawk程序结构运行awk文件脚本awk基础语法awk程序常用的内建变量程序结构awk命令模式:awk'BEGIN{awkcommands}pattern{awkcommands}END{awkcommands}'fileName若存在匹配模式pattern,则需要用包含awkcommands程序代码块必须被大括号包扣BEGIN语句块BEGIN{awkcommands},「可选」,...
Part1前言maven是最流行的项目构建系统,如果是java相关的开发,可以说是不可或缺的。虽然还有另外一个模块管理工具grade正在崛起,不过多数公司常用的还是mavenMaven和Maven的仓库Maven命令和构建生命周期maven项目pom.xml格式文件详解Maven怎么做到传递依赖与排除依赖Maven的聚合和继承mvn使用实例Maven和Maven的仓库Maven仓库用来存放Maven所管理Jar包。分为两种:本地仓库和中央仓库本地仓库:Maven本地的Jar包仓库中央仓库...
前言java有synchronize和Lock,mysql修改类的sql也带有锁。锁定数据状态,让数据状态在并发场景,按我们预想逻辑进行状态转移,然而在分布式,集群的情况下,怎么去锁定数据状态呢数据库的分布式锁方案基于redis实现分布式锁基于zookeeper实现分布式锁数据库的分布式锁方案数据库分布锁的难点单点故障?数据库可以多搞个数据库备份没有失效时间?每次加锁时,插入一个期待的有效时间;A:定时任务,隔一段时间清理时间失效锁。B...
什么是跳跃链表开发时经常使用的平衡数据结构有B数、红黑数,AVL数。但是如果让你实现其中一种,很难,实现起来费时间。而跳跃链表一种基于链表数组实现的快速查找数据结构,目前开源软件Redis和LevelDB都有用到它。它的效率和红黑树以及AVL树不相上下跳跃链表结构结构publicclassSkipList<T>{跳跃表的头尾privateSkipListNode<T>head;跳跃表含的元素长度privateintlength;跳表的层数的历史最大层数publicintmaxLevel;publicS...
在学校,或许凭借一个人的力量就能负责整个项目的开发到上线。但是在在公司,因为项目的复杂性和紧急性,一个项目的往往是由多个人实现,此时就有一个问题,代码提交和代码合并。git和svn,这篇文章来讲讲git的原理和使用version版本控制git的账号配置创建git仓库git的原理文件操作命令分支操作命令version版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于对文件、目录或工程等内容的修改历史,方便查看更改历史...