手把手教你手写一个RPC框架 前言最近在看dubbo的源码,所以就参考着这本书籍作为辅助(这个诣极总是让我看成了极诣,嗯,极诣狂战士):dubbo在3.0版本就有三十万行代码,光看个核心功能的代码就快折磨死人了,为了加强理解,我觉得动手实现一个rpc框架倒是个非常不错的方法。本文主要会围绕RPC的基本功能来展开。主要是对RPC有个认知,至于SPI、注册中心、负载均衡、netty传递信息等的实现,我会放在下一篇文章中进行讲解。开篇市面上有很多RPC框架,虽然种类比较多,但是他们所围绕的中心思想是一样的。我们看下书中是这么介绍的
MySQL中Explain用法详解 Explain简介我们在写后端程序的时候,通常会写sql来查询数据,如果是单表查询的时候,那直接select就完事了,但是如果是连表查询数据量也不小的话,就造成了查询速度会比较慢,那么我们该怎么知道我的sql的实际执行情况,它有没有走索引,执行效率是啥呢?数据库就给我们提供了这么一种功能,这个就是本文的重点了:expalin。通过explain,我们可以获取到sql语句的执行计划,比如像表的读取顺序,使用了哪些索引等等。但是各个数据库的explain执行计划所展示出的内容是不太相同的,这里我们就来看..
万字解析Springboot启动流程与原理 目录写在前面对象的创建run方法结语写在前面在使用Springboot框架的时候,我们只需要启动一个类就可以启动整个项目,这个类长这个样子:@SpringBootApplication@EnableScheduling@EnableTransactionManagementpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApp
countDownLatch、cyclicBarrier、semaphore使用详解 文章目录前言countDownLatchcyclicBarriersemaphore结尾前言在前面两篇中介绍了AQS的同步队列、条件队列的源码实现,这一篇则是来看一下JUC中主要的三个并发工具类:countDownLatch、cyclicBarrier、semaphore。本文不会像之前两篇文章那样从源码角度展开,而是结合工具的API,来看一下这些工具类的使用方法以及场景。countDownLatchcountDownLatch我们可以理解为是一个计数器,计数器的初始值是线程的可执行的次数(这个实际
AQS:条件队列的源码解读 前言在上一篇中介绍了AQS中的同步队列:AQS:从原理到源码解读,条件队列相对于同步队列来说的话,内容并没有那么的多。因为在同步队列中是分了共享模式与独占模式,而在条件队列中,是没有共享模式的,条件队列中的节点都是独占式的,这一点会在接下来的源码中介绍到。在开始条件队列的源码之前,我们以一段代码为例子:public static void main(String[] args) throws InterruptedException { ReentrantLock lock=new R
AQS:从原理到源码解读 目录文章目录前言原理构造独占式获取锁释放锁共享式获取锁释放锁写在最后前言我们在使用ReentrantLock、CountDownLatch等并发相关的工具的时候,会发现它们都继承了一个类:AbstractQueuedSynchronizer,简称AQS,有人说他是并发的基石,也有一种说法是并发框架,但是不管哪种说法,都显示出了AQS的重要性,所以我们也有必要去了解一下AQS,本文只是我对于AQS的了解,如有不当之处,欢迎指出我及时修改。在AQS中,核心方法是围绕独占式地获取、释放锁,共享式地获取、释
left join的基本用法以及on与where的区别 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言我们在写sql语句的时候,,比如内连接、外连接。以本文的left join为例,网上都是这么说的:LEFT JOIN 关键字会从左表 那里返回所有的行,即使在右表中没有匹配的行。一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimpor
Java8新特性之Optional了解与使用 文章目录前言使用of与ofNullablegetorElseorElseGet、orElseThrowmapflatMapfilter(过滤)isPresentifPresent前言Java8引入了一些新的特性,比如lambda表达式、Stream流,当然了,还有这篇要说的Optional,它主要就是解决NullPointerException,用法其实也没多少,他的接口也就十来个,来个图一下展示出来:接下来,我们就围绕这些API来了解Optional。使用of与ofNullable这俩是.
Java是值传递还是引用传递(值传递) 前言最近在看Java核心卷一,也就是这本书:在这本书里面也看到了这个问题,Java是值传递还是引用传递,这个问题其实也是很有意思的,之前也看到过这个问题,但是只是依稀记得是值传递,但是而且网上也有在讨论这个问题的。所以就先说结论吧:是值传递。文章目录前言值传递与引用传递二、使用步骤1.引入库2.读入数据总结值传递与引用传递既然讨论是值传递还是引用传递,那肯定是要知道啥是值传递、引用传递的。示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤
一条sql语句在MySQL中的执行过程 Write in first平常我们经常写sql语句,但是sql语句在数据库中的执行过程又是啥样呢?本文就从数据库的基本架构与sql语句的类型两方面来分析下sql语句的执行过程。因为本文主要涉及MySQL数据库中sql语句的执行过程,所以你要是关心像oracle、sql server等数据库的话,可能不太适用(因为我也没用过oracle。。。)。基本架构MySQL可以分为server层与存储引擎两个部分。server层:连接器、查询缓存、分析器、优化器、执行器等都是属于server层的。这些部件可
Java的类加载过程与双亲委派模型 类加载Java的类加载过程中涉及到双亲委派模型,而提到双亲委派模型又免不了讨论类的加载过程,所以这两者放到一块了解更加合适。Java的类加载过程可以分为三个步骤:加载、连接、初始化。其中连接过程又可以分为验证、准备、解析三个步骤。在这里我画了个图更加方便展示:所以我们接下来就围绕加载、连接、初始化这三个部分来看一下整个的类加载过程。加载阶段类加载的第一个阶段,在此阶段,JVM虚拟机会完成下面的三个步骤:1、通过一个类的全限定名来获取其定义的二进制字节流。2、将这个字节流所代表的静态存储结构转化
一文掌握Java8Stream流的常见用法 前言Lambda 表达式是 jdk8引入的一个新特性,可以取代大部分的匿名内部类,在集合的遍历和对集合的操作中,可以极大地优化代码结构。而jdk8又是现在的主流版本,关于lambda表达式,其实也得多多少少了解一点,尤其是在某些情况下,使用lambda表达式确实能够方便很多。在接下来的内容中,通过从简单到复杂,一步一步去了解lambda与Stream流。Lambda表达式遍历比如下面这个数组::String[] name = {"Tom", "Abel","Jack","Cary","Georg
一文掌握JVM常见垃圾回收算法与垃圾收集器 从垃圾回收算法、垃圾收集器,这字面意思上来看,都是是围绕垃圾这个名词展示的,那么啥是垃圾呢?垃圾定义我们日常生活中是怎么定义垃圾的呢?对于那些不需要用的东西称为垃圾,不然都放在屋里那怎么受的了。对于JVM也是这样的,垃圾就是在程序运行时没有任何指针指向的对象就是垃圾。因为不需要使用它了,留着它也是占内存,赶紧把它清除掉为别的对象腾放空间。那我怎么知道一个对象是不是垃圾呢?万一把还需要用的对象给清除掉了,那也不是太好啊。所以我们需要一定的方法来确认这个对象是否被引用,进而来确认是否要删除。两种标识算法
Java实现在线秒杀系统(主要问题以及源码) 前言最近在整理电脑文件的时候,发现了毕业之前看视频学习的在线秒杀系统,现在毕业半年了,正好公司使用了dubbo+zookeeper的分布式框架,合计着整理下之前看过的在线秒杀项目,然后希望能够尽可能地整理成分布式框架(不过希望以后有时间完成吧。。。)。本文呢,主要是看一下这个秒杀系统主要会涉及哪些问题。其中用到了SpringBoot、Redis、RabbitMQ、MySQL。文章末尾会给出源代码。正文其实吧,对于秒杀,在我们的生活中也是很常见的,一有个节日,商家就会搞个秒杀活动促销,我就想起之前的红
JavaWeb实现登录与注册的功能(三):使用三层架构 在前面的两篇文章中,完成了基础的登录与注册功能。接下来会介绍如何使用三层架构的方式来完成登录与注册功能的实现。那么,什么是三层架构?为什么要使用三层架构?三层架构:通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer, UIL)、业务逻辑层(Business Logic Layer, BLL)、数据访问层(Data access layer, DAL)...
Jsp+Servlet写的小作品:零食售卖网站(一) 前面的几篇中展示了网页的登录与注册的功能。登录与注册一登录与注册二登录与注册三登录与注册四接下来,介绍自动登录、动态显示零食信息、购物车、添加删除零食、清空购车的功能。...
JavaWeb实现登录与注册的功能(一) 登录与注册算是学习javaweb中首先遇到的问题。自学这一块的时候遇到了不少麻烦,虽然网上有许多的博客对这两块进行了介绍,但是由于应用软件的不同和其它的问题,确实是走了不少的弯路。现在对这两个功能进行下回顾,一方面对学习过的内容加深下理解,另一方面也希望能够帮助下初步涉及这一块的童鞋。无论登录与注册,都是将输入的信息与数据库中的信息进行对比,只不过登录是与数据库中的信息对比之后,如果相同,则登录...