![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 78
newbei5862
一切皆函数,一切皆方程,世上每一个思想和灵魂都是拟合出来的。
展开
-
【分层说明】什么是对象?
最近在《Python源码剖析,里边提到了一些关于对象的解释,有了一些灵感,初步从系统架构视角下,分层整理了一下对象的技术理解。一般大家介绍对象特性时,主要关注的是应用层和语言层的对象特性,譬如封装、继承或者多态等。即:对象即包含了属性,也包含了方法,那么映射到最底层就是分配的内存中既有属性,也有代码。往往是说这个语言支持哪些面向对象特性,说的是语言支持这些特性的定义和运行。如何在语言中进行定义,可以用这样的方式方法,来组织管理代码或者业务逻辑等。如何定义在不同的语言中有所不同,主要看语言的实原创 2022-05-16 23:21:07 · 101 阅读 · 0 评论 -
服务限流,怎么计算配额?
问题请求被限流之前的文章提到过我们服务使用 Hystrix 进行服务限流,使用的是信号量方式,并根据接口的响应时间和服务的峰值 QPS 设置了限流的配额。限流配额的计算方式为:我们接口单机单个接口的峰值 QPS 为 1000,平均影响时长 15ms,我们认为 Hystrix 的信号量是并发量,那么一个信号量在一秒内能允许 1000ms/15ms~66 个请求通过,那么服务 1000QPS 配置 15 个信号量就足够了。当然这是在忽略上下文切换和 GC 时间的情况下,考虑上这些因素,每个并发量每秒能转载 2021-11-16 10:28:23 · 170 阅读 · 0 评论 -
JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁
如果需要查看具体的synchronized和lock的实现原理,请参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理在并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在java中synchronized关键字被常用于维护数据一致性。synchronized机制是给共享资源上锁,只有拿到锁的线程才可以访问共享资源,这样就可以强制使得对共享资源的访问都是顺序的,因为对于共享资源属性访问是必要也是必须的,下文会有具体示例演示。一转载 2021-11-15 22:30:42 · 599 阅读 · 0 评论 -
ART、JIT、AOT、Dalvik之间有什么关系?
ART、JIT、AOT、Dalvik之间有什么关系?JIT与DalvikJIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关。怎么理解这句话呢?这要从Android的一些特性说起。JIT是在2.2版本提出的,目的是为了提高Android的运行速度,一直存活到4.4版本,因为在4.4之后的ROM中,就不存在Dalvik虚拟机了。我们使用Java开发android,在编译打包APK文件时,会经过以下流程Java编译器将应用中所有Java文件编转载 2021-11-04 23:40:17 · 332 阅读 · 0 评论 -
JIT优化
什么是JITJIT 是 just in time 的缩写, 也就是即时编译编译器。在运行时 JIT 会把翻译过的机器码保存起来,以备下次使用,因此从理论上来说,采用该 JIT 技术可以接近以前纯编译技术。下面我们看看,JIT 的工作过程。备注:寄存器的使用是编译器的一个非常普遍的优化。寄存器的速度比主存快很多。怎么优化JIT编译初级调优:客户模式或服务器模式中级编译器调优 (-cient,-server 或是-xx:+TieredCompilation)优化代码缓存 (–XX:Reserve转载 2021-10-13 22:37:02 · 132 阅读 · 0 评论 -
Raft协议原理详解 转
更新:想要学习Raft算法,最好的方式就是看作者博士论文了,详细清晰!我将作者的博士论文翻译和总结这篇文档中了,想要更详细了解的可以点开下面链接!【腾讯文档】Raft论文Raft论文总结docs.qq.com/doc/DY0VxSkVGWHFYSlZJ大名鼎鼎的Paxos算法可能不少人都听说过,几乎垄断了一致性算法领域,在Raft协议诞生之前,Paxos几乎成了一致性协议的代名词。但是对于大多数人来说,Paxos算法太难以理解了,而且难以实现。因此斯坦福大学的两位教授Diego Ongaro和Jo转载 2021-10-09 18:07:21 · 212 阅读 · 0 评论 -
Paxos 算法详解(一)转
前言提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代 名词,因为当前最常用的一批共识算法都是基于它改进的。比如,Fast Paxos 算法、 Cheap Paxos 算法、Raft 算法、ZAB 协议等等。兰伯特提出的 Paxos 算法包含 2 个部分: 一个是 Basic Paxos 算法,描述的是多节点之间如何就某个值(提案 Value)达成共 识; 另一个是 Multi-Paxos 思想,描述的是执行多个 Basic Paxos 实例,就一系列值达成共转载 2021-10-09 17:46:51 · 181 阅读 · 0 评论 -
Poxos算法详解(二)转
经过上篇文章的学习,你应该知道,Basic Paxos 只能就单个值(Value)达成共识,一旦遇到为一系列的值实现共识的时候,它就不管用了兰伯特并没有把 Multi-Paxos 讲清楚,只是介绍了大概的思想,缺少算法过程 的细节和编程所必须的细节(比如缺少选举领导者的细节)。这也就导致每个人实现的 Multi-Paxos 都不一样。不过从本质上看,大家都是在兰伯特提到的 Multi-Paxos 思想上补充细节,设计自己的 Multi-Paxos 算法,然后实现它(比如 Chubby 的 Multi-Pa转载 2021-10-09 17:42:29 · 156 阅读 · 0 评论 -
分布式消息队列(文章真的不错)
一、消息队列的演进分布式消息队列中间件是是大型分布式系统中常见的中间件。消息队列主要解决应用耦合、异步消息、流量削锋等问题,具有高性能、高可用、可伸缩和最终一致性等特点。消息队列已经逐渐成为企业应用系统内部通信的核心手段,使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、Pulsar 等,此外,利用数据库(如 Redis、MySQL 等)也可实现消息队列的部分基本功能。1.基于 OS 的 MQ单机消息队列可以通过操作系统原生的进程间通信机制来实现,如转载 2021-09-29 11:52:00 · 230 阅读 · 0 评论 -
Java:javac编译java文件引入class文件和jar依赖
Java:javac编译java文件引入class文件和jar依赖两个测试所需文件同目录下javac编译执行引入不同目录依赖编译执行引入jar包引入jar包执行优化两个测试所需文件public class Hello{ public void sayHello(){ System.out.println("Hello"); }}public class Demo{ public static void main(String[] args) {转载 2021-09-20 11:55:36 · 1161 阅读 · 0 评论 -
【小家java】Java中IdentityHashMap使用详解---允许key重复(阐述和HashMap的区别)【转】
每篇一句当你觉得路途艰难的时候,那是因为你在走上坡路应该有很多人不知道IdentityHashMap的存在,其中不乏工作很多年的Java开发者,会有很多人以为这是第三方jar包,实际上它是Jdk源码自带的集合类。本文主要讲解IdentityHashMap的使用和他的一些特性。很多场景上使用它,会让你事半功倍。对Map的认识其实我们对Map都有一个通用认知:只要key相同,就不能重复往里面put,但是你真的了解**“相同”**这两个字吗?看下面这个例子吧: public stat转载 2020-10-17 20:23:43 · 231 阅读 · 0 评论 -
Java Main如何被执行?
java应用程序的启动在在/hotspot/src/share/tools/launcher/java.c的main()函数中,而在虚拟机初始化过程中,将创建并启动Java的Main线程。最后将调用JNIEnv的CallStaticVoidMethod()来执行main方法。CallStaticVoidMethod()对应的jni函数为jni_CallStaticVoidMethod,定义在/hotspot/src/share/vm/prims/jni.cpp中,而jni_CallStaticVoidM转载 2020-06-09 01:09:13 · 233 阅读 · 0 评论 -
tomcat下jaas配置实例
声明:以下方式只能帮忙理解知识,如果希望通过步骤跑起来,有一些坑。1、采用的JDK 1.8一、首先参考tomcate下文档的jaasRealm的配置,注意文档中的两个地方:Quick StartTo set up Tomcat to use JAASRealm with your own JAAS login module, you will need to follow these steps:1. Write your own LoginModule, User and ...原创 2020-06-02 00:48:12 · 767 阅读 · 0 评论 -
Java实现Http协议测试验证
基于前一篇的Java实现HTTP协议文章,进行相关测试验证与结论1、服务端分析,服务端只是接收Http请求并打印相关字符串2、测试验证2.1 通过浏览器访问 在浏览器中输入http://localhost:8080/发起请求,这时控制台就会打印如下信息: 属于Get 请求,没有带任何参数控制台输出:GET /favicon.ico HTTP/1.1Host: localhost:8080Connection: keep-aliveUse...原创 2020-05-31 22:14:11 · 1263 阅读 · 0 评论 -
Java实现HTTP协议
Java实现HTTP协议代码:package com.we;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;impor.转载 2020-05-31 20:58:58 · 644 阅读 · 0 评论 -
java注解-最通俗易懂的讲解
Annotation 中文译过来就是注解、标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解。我个人认为,比较糟糕的技术文档主要特征之一就是:用专业名词来介绍专业名词。比如:Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。这是大多数网站上对于 Java 注解,解释确实正确,但是说实在话,我第一次学习的时候,头脑一片空白。转载 2020-05-18 00:47:54 · 91 阅读 · 0 评论 -
Java sun.misc.URL
JDK源码中的构造方法,并看一下方法的注释。核心抽象: Creates a URL object from the specified protocol, host, port number, and file.支持协议: Protocol handlers for the following protocols are guaranteed to exist on the search path :- http, https, file...原创 2020-05-17 22:14:04 · 188 阅读 · 0 评论 -
Java编程架构详解——Tomcat 中的 NIO 源码分析
文将介绍 Tomcat 中的 NIO 使用,使大家对 Java NIO 的生产使用有更加直观的认识。虽然本文的源码篇幅也不短,但是 Tomcat 的源码毕竟不像 Doug Lea 的并发源码那么“变态”,对于大部分读者来说,阅读难度比之前介绍的其他并发源码要简单一些,所以读者不要觉得有什么压力。本文基于 Tomcat 当前(2018-03-20)最新版本 9.0.6。先简单画一张图示意...转载 2020-05-04 23:34:57 · 314 阅读 · 0 评论 -
SAX基本概念
DOM解析的优点是读取小型文件速度快,可以对xml文件数据进行修改,但是DOM解析最大的缺点就是占用内存高,每次需要将DOM树加载到内存中. 为了解决DOM解析的缺点,可以使用SAX解析技术来对xml文档进行解析. SAX解析(Simple API for XML),并不是w3c官方的标准.SAX解析与DOM解析不同的是,SAX解析采用的是将逐行顺序解析,按照文件的顺序,读一行解析一行的方式解...转载 2020-04-22 23:18:58 · 518 阅读 · 0 评论 -
Java 自定义 ClassLoader 实现隔离运行不同版本jar包的方式
1. 应用场景有时候我们需要在一个 Project 中运行多个不同版本的 jar 包,以应对不同集群的版本或其它的问题。如果这个时候选择在同一个项目中实现这样的功能,那么通常只能选择更低版本的 jar 包,因为它们通常是向下兼容的,但是这样也往往会失去新版本的一些特性或功能,所以我们需要以扩展的方式引入这些 jar 包,并通过隔离执行,来实现版本的强制对应。2. 实现在 Java...转载 2020-04-22 22:56:57 · 526 阅读 · 0 评论 -
Java编程架构详解——Tomcat 中的 NIO 源码分析
文将介绍 Tomcat 中的 NIO 使用,使大家对 Java NIO 的生产使用有更加直观的认识。虽然本文的源码篇幅也不短,但是 Tomcat 的源码毕竟不像 Doug Lea 的并发源码那么“变态”,对于大部分读者来说,阅读难度比之前介绍的其他并发源码要简单一些,所以读者不要觉得有什么压力。本文基于 Tomcat 当前(2018-03-20)最新版本 9.0.6。先简单画一张图示意...转载 2020-04-21 00:29:12 · 171 阅读 · 0 评论 -
Java:带你全面了解神秘的Java NIO
前言JDK 1.4后,Java提供了一个全新的IO API,即 Java New IO 本文 全面 & 详细解析Java New IO,希望你们会喜欢目录示意图储备知识:Java IO示意图1. 定义即 Java New IO 是1个全新的、 JDK 1.4后提供的 IO API2. 作用提供了与标准IO不同的IO工作方式 可替代 标准Java...转载 2020-04-21 00:38:36 · 95 阅读 · 0 评论 -
Tomcat源码分析--转
下面谈谈我对Tomcat架构的理解总体架构:1、面向组件架构2、基于JMX3、事件侦听1)面向组件架构tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成,如Server、Service、Connector等,并基于JMX管理这些组件,另外实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通...转载 2020-04-21 01:30:58 · 119 阅读 · 0 评论 -
Idea 调试Tomcat源码
开篇 不知道从哪个途径被安利买了一本《Tomcat架构解析》的书,突然对Tomcat来了兴趣,准备花一段时间好好研究这个对自己来说是黑盒的容器,所以在未来一段时间里朋友圈应该会有大量这方面的分享。 按照固有套路,阅读源码前得搭建基于idea集成开发环境的debug环境,这篇文章主要就是做这个事情的,当然必然是参考了前人的文章,在文末的参考文章中已经注明,以示尊重。源码下载 我是基于T...转载 2020-04-19 23:16:54 · 163 阅读 · 0 评论 -
详解Tomcat系列(一)-从源码分析Tomcat的启动
在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来.由于篇幅的原因, 很难把Tomcat所有的知识点都放到同一篇文章中, 我将把Tomcat系列文章分为Tomcat的启动, Tomcat中各模块的介绍和Tomcat中的设计模式三部分, 欢迎阅读与关注.一:通过idea搭建Tomcat源码...转载 2020-04-19 10:52:07 · 101 阅读 · 0 评论 -
Liquibase使用(转发)
本文链接:https://blog.csdn.net/zhao0416/article/details/94733610文章目录介绍快速使用Springboot中引入依赖配置日志文件ChangeLog编写变更记录ChangeSetMaven中引入依赖配置liquibase.properties编写变更记录ChangeSet版本回滚回滚指定次数回滚到指定tag输...转载 2019-09-26 22:54:47 · 259 阅读 · 0 评论 -
基于java的TimingWheel(时间轮算法)分布式任务调度系统
关于TimingWheel(时间轮)算法的任务定时器网上有很多文章,但是却找不到基于java成系统的文章,所以今天把我在公司做的且稳定运行半年多的TimingWheel系统分享给大家。1 TimingWheel基本原理:众所周知寻常的定时器大概有两种,一种是开阻塞线程,另一种是开一个任务队列然后定期扫描。显而易见这两种方式的弊端很明显,前者对线程消耗过大,后者对时间消耗过大(...转载 2019-07-01 00:08:36 · 932 阅读 · 0 评论 -
Java--独占锁/共享锁
独享锁和共享锁在你去读C.U.T包下的ReeReentrantLock和ReentrantReadWriteLock你就会发现,它俩一个是独享一个是共享锁。独享锁:该锁每一次只能被一个线程所持有。共享锁:该锁可被多个线程共有,典型的就是ReentrantReadWriteLock里的读锁,它的读锁是可以被共享的,但是它的写锁确每次只能被独占。对于独享和共享,基于的点在于AQS,AQS的...转载 2019-06-30 11:03:12 · 101 阅读 · 0 评论 -
Java 并发 ReentrantLock简介
1. ReentrantLock简介jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。2. ReentrantLock和synchronized的相...转载 2019-06-30 10:37:45 · 72 阅读 · 0 评论 -
java 队列的使用(转载)
转载声明:http://blog.csdn.net/lzy_lizhiyang/article/details/48311925 先我们要知道使用队列的目的是什么?一般情况下,如果是一些及时消息的处理,并且处理时间很短的情况下是不需要使用队列的,直接阻塞式的方法调用就可以了。但是,如果在消息处理的时候特别费时间,这个时候如果有新的消息来了,就只能处于阻塞状态,造成用户等待。这个时候在项目中引...转载 2019-06-16 22:28:06 · 91 阅读 · 0 评论 -
Java 里如何实现线程间通信
正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarrier, FutureTask, Callable 等。本文涉及代码:https://gi...转载 2019-06-16 22:26:45 · 63 阅读 · 0 评论