ARong's Java Notes
文章平均质量分 88
本专栏收录了本人学习Java及后端开发时的部分笔记和心得,记录了基础的算法数据结构到剑指Offer、LeetCode刷题技巧、JavaSE、源码解析到Java虚拟机、并发编程、开发框架、Go语言等面试和进阶技术。方便大家查阅、参考和学习。大家如果觉得对自己对学习和面试有帮助的话,不妨持续关注哦~
BoringError
字节跳动后端工程师 | 持续学习,保持敬畏
展开
-
Spring Framework(7)-SSH整合过程总结
点击查看更多Spring文章目录各框架的作用1、需要导入的jar包2、单独配置spring配置文件,再src下创建applicationContext.xml配置文件并导入约束各框架的作用1、需要导入的jar包1)hibernate所需:9个基础核心jar包:jpa包:2)struts2所需:13个基础核心jar包:...原创 2018-05-25 21:42:40 · 4753 阅读 · 0 评论 -
操作系统精髓-内存管理、调度及其他基础总结
操作系统内存管理及其他相关基础知识总结,需要详细了解可以参考《操作系统-精髓及设计原理》原创 2020-09-16 22:03:29 · 1616 阅读 · 0 评论 -
操作系统精髓-进程相关知识总结
最近在复习操作系统,顺便总结一下进程相关知识,参考书籍:《操作系统-精髓与设计原理》,希望对大家有所帮助。原创 2020-09-15 23:39:16 · 631 阅读 · 0 评论 -
记录在阿里云的这段日子
这个暑期都在忙碌的实习中度过,自己的博客也很久没有更新过了,哈哈哈。(其实一直都有写,不过是写在了公司内网里边,由于数据安全问题不能够转出来),趁这个机会也写写这三个月的实习总结,也算是对这段实习经历的一个回顾与沉淀。原创 2020-09-01 15:19:28 · 1254 阅读 · 0 评论 -
记四至六月:春华秋实,做好当下,切勿急躁,避免焦虑
最近很忙,这一个多月都没写过博客了,趁现在有时间写一写吧,算是对这三个月来的总结。原创 2020-07-02 14:48:10 · 1567 阅读 · 6 评论 -
Dubbo源码(6)-动态代理技术源码解析
文章目录一.Dubbo中的动态代理1.1、Dubbo Invoker领域模型1.2、Invoke在RPC过程中的作用二.RPC调用流程三.动态代理相关源码解析3.1、ProxyFactory3.1.1、AbstractProxyFactory3.1.2、JavassistProxyFactory3.2、InvokerInvocationHandler3.3、AbstractProxyInvoker3.4、bytecode包本文主要参考自Dubbo官方文档、Dubbo项目源码以及网络文章和相关书籍,并附上原创 2020-05-14 17:14:12 · 1482 阅读 · 2 评论 -
Dubbo源码(5)-领域模型及调用流程
文章目录一.Dubbo中的动态代理1.1、Dubbo Invoker领域模型1.2、Invoke在RPC过程中的作用二.RPC调用流程本文主要参考自Dubbo官方文档、Dubbo项目源码以及网络文章和相关书籍,并附上自身的一些理解,如有遗漏或错误,还望海涵并指出。谢谢!------本文基于Dubbo-2.6.1版本一.Dubbo中的动态代理1.1、Dubbo Invoker领域模型在说Dubbo动态代理之前,先来看看Dubbo的Invoker领域模型。任何框架或组件,总会有核心领域模型,比原创 2020-05-08 18:23:50 · 551 阅读 · 2 评论 -
Dubbo源码(4)-Zookeeper注册中心源码解析
文章目录一、Zookeeper在Dubbo中的作用1.1、什么是Zookeeper1.2、Dubbo的Zookeeper注册中心二、Zookeeper注册中心源码解析2.1、FailbackRegistry2.2、ZookeeperRegistryFactory2.3、ZookeeperRegistry2.3.1、属性及构造方法2.3.2、重点方法2.3.2.1、doRegister2.3.2.2...原创 2020-05-06 17:38:48 · 1192 阅读 · 2 评论 -
Dubbo源码(3)-基础抽象注册中心源码解析
文章目录一.Dubbo注册中心二.代码构成三、RegistryFactory3.1、AbstractRegistryFactory四、RegistryService4.1、AbstractRegistry4.1.1、属性及构造方法4.1.2、核心方法4.2、FailbackRegistry4.2.1、属性及构造方法4.2.2、核心方法本文主要参考自Dubbo官方文档、Dubbo项目源码以及网络...原创 2020-05-05 21:02:59 · 1160 阅读 · 2 评论 -
Dubbo源码(2)-动态编译技术源码解析
文章目录一.Javassist动态编译1.1、Javassist介绍1.2、入门使用二.Dubbo动态编译源码解析3.1、createAdaptiveExtensionClassCode方法3.2、Compiler接口3.2.1、AdaptiveCompiler3.2.2、AbstractCompiler3.2.3、JavassistCompiler本文主要参考自Dubbo官方文档、Dubbo...原创 2020-05-04 16:06:52 · 744 阅读 · 2 评论 -
Dubbo源码(1)-SPI机制源码解析
文章目录一、什么是SPI二、基本使用2.1、核心注解和URL类2.2、单元测试三、SPI机制源码解析3.1、ExtensionLoader3.1.1、属性3.1.2、拓展类资源加载1)getExtensionClasses2)loadExtensionClasses3)loadFile3.1.3、获取指定Extension2)createExtension3)injectExtension3.1....原创 2020-05-03 16:35:39 · 579 阅读 · 2 评论 -
分布式基础(8)-常见分布式ID生成方案
文章目录一.什么是分布式ID二.常见分布式ID生成方案1.UUID2.数据库ID自增3.Redis4.Snowflake-雪花算法5.其他:Leaf和UidGenerator三.总结本文主要参考自相关书籍和网络文章,并附上自身的一些理解,如有遗漏或错误,还望海涵并指出。谢谢!一.什么是分布式ID分布式ID即指的是在分布式系统中,全局的唯一标识;分布式ID其实与单机下的ID区别不大,其作用...原创 2020-04-05 22:59:51 · 1449 阅读 · 0 评论 -
【吐血整理】LeetCode与剑指Offer百道经典题解总结
本文整理了LeetCode与剑指Offer中百余道经典的题目,整理出了数组、字符串、链表、二叉树、栈、回溯、动态规划、位运算中的经典问题以及问题对应的链接地址和个人提供的题解,方便查阅以及练习。以下是百题的索引,点击即可找到题目的出处并练习,也可直接查阅答案。建议刚开始刷题的朋友直接按一下的Tag分类一个专题一个专题地进行学习与作答,完全理解这一百题,一线大厂非你莫属。原创 2020-02-22 14:57:37 · 3323 阅读 · 5 评论 -
Netty(7)-构建pipeline、channelHandler、Decoder和Encoder
文章目录一.pipeline和channelHandler1.channelHandler的分类1.ChannelInboundHandler2.ChannelOutBoundHandler2.channelHandler的事件传播3.pipeline的结构与channelHandler的执行顺序二.构建客户端和服务端的pipeline与Decoder和Encoder1.ChannelInboun...原创 2020-02-11 22:06:47 · 1431 阅读 · 0 评论 -
Netty(6)-客户端登陆并与服务端收发信息
文章目录一.实现流程图二.代码实现一.实现流程图二.代码实现整体结构图utils/Attributes/** * @Auther: ARong * @Date: 2020/2/7 9:47 下午 * @Description: channel的参数 */public interface Attributes { AttributeKey<Boole...原创 2020-02-07 23:30:47 · 566 阅读 · 0 评论 -
Netty(5)-自定义通信协议包的编码解码
文章目录一.何为通信协议二.代码实现一.何为通信协议这里指的通信协议并不是狭义的TCP、UDP这类【标准通信协议】,而是指的Netty用于客户端与服务端之间数据交互的【自定义通信协议】。无论是使用 Netty 还是原始的 Socket 编程,基于 TCP 通信的数据包格式均为二进制,协议指的就是客户端与服务端事先商量好的,每一个二进制数据包中每一段字节分别代表什么含义的规则。如下图所示为一个简...原创 2020-02-05 18:02:19 · 2267 阅读 · 5 评论 -
Netty(4)-二进制载体ByteBuf
文章目录一.ByteBuf的介绍二.ByteBuf的结构三.ByteBuf的API一.ByteBuf的介绍在 Netty 中,客户端和服务端之间的通信数据载体为 ByteBuf,即字节块对象。如以下程序所示:/* * @Author ARong * @Description 接收到服务端消息时触发 * @Param [ctx, msg] * @re...原创 2020-02-04 14:08:47 · 1475 阅读 · 0 评论 -
Netty(3)-实现客户端与服务端的双向通信
文章目录一.基本思路二.通信流程三.代码实现一.基本思路读写逻辑处理均是启动阶段通过给逻辑处理链Pipeline添加逻辑处理器实现连接数据的读写逻辑。客户端连接成功回调逻辑处理器的channelActive()方法客户端和服务端接收到对方的数据回调用各自逻辑处理器的channelRead()方法。客户端和服务端向对方写数据调用writeAndFlush()方法客户端和服...原创 2020-02-03 18:33:12 · 1527 阅读 · 0 评论 -
Netty(2)-服务端与客户端的启动流程
文章目录一.服务端启动流程分析1.四大必须属性2.启动引导器:serverBootstrap3.线程模型:bossGroup和workerGroup4.IO模型:NioServerSocketChannel和OioServerSocketChannel5.连接后读写逻辑6.引导器其他方法参数二.客户端启动流程分析其他方法与服务端类似一.服务端启动流程分析1.四大必须属性从一个最简单的服务端D...原创 2020-02-03 18:00:37 · 866 阅读 · 0 评论 -
Netty(1)-BIO、NIO与Netty入门
文章目录一.BIO下的client-server通信模式二.NIO下的通信模式三.Netty入门1. 什么是Netty2.Netty的实际应用3.Netty入门Demo一.BIO下的client-server通信模式BIO即Blocking IO,同步阻塞式IO,在BIO的通信模式下,「一个线程只能在一个accept、read或write方法中阻塞,对应着一条IO连接线路」以下程序即BI...原创 2020-02-02 19:05:00 · 452 阅读 · 0 评论 -
JVM学习(8)-Java中的四种引用总结
JDK1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为Strong强引用、Soft软引用、Weak弱引用、Phantom虚引用四种(引用强度逐渐减弱),它们被用来标识对象在GC过程中的生命周期,使得虚拟机更合理地根据内存的大小和对象作用选择是否回收掉这些引用。原创 2020-01-27 22:03:11 · 435 阅读 · 0 评论 -
MySQL基础笔记(17)-悲观锁与乐观锁
文章目录一.什么是乐观锁、悲观锁二.MySQL中的乐观锁与悲观锁1.悲观锁1.互斥锁-for update2.共享锁-lock in share mode3.update、insert、delete自动加行锁2.乐观锁-版本号控制一.什么是乐观锁、悲观锁乐观锁指的是在对数据进行读取时,默认认为此时没有线程去修改数据(在Java中Atomic原子类就是这么设计的,例如CAS),只是在提交时才去...原创 2020-01-06 18:47:28 · 782 阅读 · 0 评论 -
JVM学习(7)-G1垃圾收集器介绍
文章目录一.简单介绍二.垃圾回收区域变化三.如何保证在预测时间内完成垃圾收集四.垃圾收集的过程1.初始标记2.并发标记3.重新标记4.筛选回收Thanks一.简单介绍官方文档描述:The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machine...原创 2019-12-28 16:58:04 · 747 阅读 · 0 评论 -
JVM学习(5)-类加载过程与双亲委派机制
文章目录1.为什么Java可以实现一次编写,到处运行2.Class的类文件结是怎么样的3.类加载介绍4.类加载的过程5.类加载过程中每一步都做了什么1 加载2 验证3 准备4 解析5 初始化6.类加载器的作用是什么7.有哪些类加载器8.什么是双亲委派机制9.为什么要使用双亲委派机制10.如何判断两个类是否相等1.为什么Java可以实现一次编写,到处运行Java中,JVM可以理解的代码就叫做字...原创 2019-12-02 23:21:51 · 374 阅读 · 0 评论 -
JVM学习(4)-垃圾收集器
文章目录1.Serial垃圾收集器2.ParNew垃圾收集器3.Parallel Scavenge垃圾收集器4.Serial Old垃圾收集器5.Parallel Old垃圾收集器6.==CMS垃圾收集器==7.==G1垃圾收集器==1.Serial垃圾收集器Serial垃圾收集器是最早出现的新生代收集器。作用域:新生代使用算法:复制算法线程数:单线程特点:在垃圾收集的过程中,由于是...原创 2019-12-02 23:16:58 · 303 阅读 · 0 评论 -
JVM学习(3)-垃圾回收相关
文章目录1.如何判断对象是否死亡2.如何判断一个常量是废弃常量3.如何判断一个类是废弃类4.不可达对象一定会被回收吗5.四种引用类型的作用是什么1.强引用(StrongReference)2.软引用(SoftReference)3.弱引用(WeakReference)4.虚引用(PhantomReference)6.垃圾回收算法有哪些7.每种垃圾回收算法的垃圾收集方式及优缺点1.标记-清除算法2....原创 2019-12-02 23:06:42 · 249 阅读 · 0 评论 -
JVM学习(2)-JVM内存模型与内存分配相关
一、Java虚拟机内存模型相关1.JVM内存区域JVM内存区域可分为线程私有和线程共享两个大部分,其中线程私有的包括:程序计数器、JVM栈、本地方法栈;而线程共享的包括:Java堆、方法区。TIP:JDK 1.8中,去除了方法区,以直接内存中的元空间取代。2.每一块内存区域的作用1.程序计数器程序计数器是一块很小的内存区域,其中存储的是当前线程所执行到的子节码行号;子节码指示器通过改...原创 2019-12-02 23:01:13 · 305 阅读 · 0 评论 -
Java并发编程(12)-AQS及其组件介绍
文章目录一.AQS相关1.什么是AQS?2.AQS的核心原理是什么?3.使用AQS实现一个互斥锁4.AQS定义了哪两种对资源的共享方式?1.==Exclusive(独占)==:只有一个线程能够获取到该资源,如ReentrantLock。对于独占锁,又可分为公平锁和非公平锁:2.==Share(共享)==:可以有多个线程获取到该资源,如Semaphore、CountDownLatch、CyclicB...原创 2019-11-24 00:27:18 · 407 阅读 · 0 评论 -
Java基础(7)-ConcurrentHashMap与CAS
ConcurrentHashMap是J.U.C包下一个十分重要的并发容器之一,它和Hashtable一样是并发安全的,但是它的性能却比Hashtable好很多,且由于在高并发环境下,使用HashMap的put方法时会造成堵塞,这将会消耗许多的CPU时间片,造成不必要的等待,所以在并发情况下应当使用ConcurrentHashMap替代HashMap.原创 2019-08-27 11:43:47 · 1373 阅读 · 0 评论 -
Java基础(6)-ArrayList和LinkedList一览
今天无聊,学学ArrayList和LinkedList文章目录1.1 ArrayList底层实现1.2 ArrayList基本参数1.3 grow(int capacity) 扩容方法(1.5倍扩容)1.4 ArrayList具有RandomAccess的性质1.5 LinkedList基本概述1.2 其他实现1.1 ArrayList底层实现1.容量不固定,有最大阈值,但一般达不到2...原创 2019-08-25 17:45:29 · 284 阅读 · 0 评论 -
Java基础(4)-Java8函数式编程
文章目录一、Lambda表达式1.1、用Lambda表达式代替匿名内部类1.2、Lambda表达式的参数类型判断二、Stream API2.1、Stream API 和 Lambda Expression实现遍历的Demo2.2、Stream常用方法2.2.1、 of(T... values)2.2.2、filter(Predicate&amp;amp;amp;amp;amp;amp;amp;lt;? super T&amp;amp;amp;amp;amp;amp;amp;g原创 2019-01-05 15:43:59 · 1766 阅读 · 3 评论 -
Java并发编程(11)-使用ReentrantLock与Condition实现生产者-消费者队列
Condition在Java并发编程中是一个十分常用的接口,被称为条件变量,常与显式锁和可重入锁一起使用,它可以在某些条件下使线程进行休眠或者唤醒,本文将以实现生产者-消费者模式的队列作为demo让大家对条件变量 有初步的了解。原创 2018-11-08 20:40:39 · 741 阅读 · 0 评论 -
Java并发编程(9)-CountDownLatch
文章目录一、什么是闭锁二、CountDownLatch类介绍2.1、什么是CountDownLatch2.2、构造方法2.3、主要方法三、使用闭锁完成并发测试本文将介绍什么是闭锁,在java中的闭锁实现:CountDownLatch类及其常用方法等,最后给出了一个使用闭锁模拟线程并发的demo,用以简单地测试任务是否为线程安全。一、什么是闭锁闭锁(Latch)是在并发编程中常被提及的概...原创 2018-11-05 17:45:32 · 292 阅读 · 0 评论 -
Java并发编程(8)-Semaphore
文章目录一、Semaphore信号量1.1、什么是信号量1.2、信号量在并发编程中的作用二、Semaphore类简单解读2.1、构造方法解读2.2、常用方法解读三、简单程序解读一、Semaphore信号量1.1、什么是信号量以一个停车场是运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的...原创 2018-11-02 15:02:05 · 613 阅读 · 1 评论 -
Java并发编程(7)-ThreadPoolExecutor的饱和策略
文章目录一、ThreadPoolExecutor的饱和策略1.1、什么是饱和策略1.2、Abort策略1.3、.CallerRuns策略1.4、Discard策略1.5、DiscardOldest策略二、ThreadPoolExecutor的扩展方法本文将介绍ThreadPoolExecutor的饱和策略以及ThreadPoolExecutor的扩展方法;当线程充满了ThreadPool的有...原创 2018-10-31 23:45:00 · 1611 阅读 · 0 评论 -
Java并发编程(6)-线程池总结
在上文中已经写过Executor线程调度框架的使用及几种线程池,它们是整个Java并发编程的核心内容;本文将继续讲解和Executor一样重要的自定义线程池,它能让我们自己去定义一个多线程的执行者拥有的线程核心数、最大线程数、空闲线存活时间等。&amp;gt;本篇总结自《Java并发编程实践》第八章 应用线程池 ,以及相关博客,想要更加深入了解的同学建议阅读该书。原创 2018-10-30 22:12:37 · 203 阅读 · 0 评论 -
Java并发编程(4)-同步容器和并发容器
Java平台的类库包含了一个并发构造块的丰富集合,本篇将介绍在并发编程中十分常用的两种容器类,一是同步容器,二是并发容器,它们在某些特定的场合中可以用来替代我们常用的集合类,比如在高并发和多线程请求的情况下。&gt; 本篇总结自《Java并发编程实践》第五章 构造块 章节的内容,详情可以阅读该书。原创 2018-10-24 21:53:21 · 372 阅读 · 0 评论 -
Java并发编程(3)-如何构造线程安全应用
到目前为止,前两篇文章已经介绍了线程安全与同步的基础知识。但是我们并不希望为了获得线程安全而去分析每次内存访问;而希望线程安全的组件能够以安全的方式组合成更大的组件或者程序。这一篇将介绍一些构造线程安全类的通用模式,这些模式让类更容易成为线程安全类。&gt; 本篇总结自《Java并发编程实践》第四章 组合对象 章节的内容 ,详情可以查阅该书。原创 2018-10-22 22:53:18 · 303 阅读 · 0 评论 -
Java基础(3)-注解总结
注解Annotation的出现是为了简化Xml配置带来的复杂性,注解是一种元数据(描述数据的数据),它是一种在运行时被读取或写入的一种特殊标记,用以描述数据的特性或者读取到数据的值。原创 2018-10-06 22:01:51 · 916 阅读 · 0 评论 -
Java基础(2)-数组介绍
数组是应用最为广泛的存储结构,它被植入到绝大部分的编程语言当中,由于数组十分的简单易懂,所以可作为介绍数据结构的起步点。在Java语言中,数组可用于存储对象以及基本数据类型。原创 2018-10-04 16:04:08 · 312 阅读 · 0 评论