![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 89
爱搞技术的吴同学
和时间做朋友,向他唠叨我们的经历和成才
展开
-
手写RPC-简单的使用和总结
rpc总结原创 2022-10-17 15:13:58 · 412 阅读 · 1 评论 -
手写RPC-整合Spring、SpringBoot
整合spring、springboot原创 2022-10-14 13:20:43 · 860 阅读 · 0 评论 -
手写RPC-具体实现细节详解(近4w字详情)
这里面是远程通讯的核心,包含了网络通信、编解码协议、远程调用、注册中心、负载均衡等核心代码都在这里面,下面就详细分析下;不过这些看下代码就懂了,很简单;所以这个文章影响不大,只是为了让新手能更好理解;原创 2022-10-13 10:37:05 · 789 阅读 · 0 评论 -
手写RPC-简单思路与通信协议
前面文章也简单介绍了一下RPC是什么,接下来就是实现简单的RPC框架;原创 2022-10-12 09:10:57 · 371 阅读 · 0 评论 -
手写RPC-技术应用和项目结构的简介
看看截图::这个模块里面都是一些公用的东西,接口、实体等基本信息;:这个模块里面是比较核心的内容,网络通信、编解码协议、远程调用、注册中心、负载均衡;也就是netty相关的操作都在这里面;:整合springboot的操作,在bean的生命周期做一些操作,并在容器销毁的时候做hook关联,取消注册;:与spring的整合,其实跟boot相差的就是这里使用的是xml注册,和xml解析器去解析,其实大致差不多(暂时停止更新);:这里面就是各测试相关的东西,里面几个子项目对应的就是不通的测试;原创 2022-10-11 10:05:34 · 642 阅读 · 0 评论 -
手写RPC-对RPC简单的理解
在学习粘包之前,先纠正一下读音,很多视频教程中将“粘”读作“nián”。经过调研,个人更倾向于读“zhān bāo”。如果在百度百科上搜索“粘包”,对应的读音便是“zhān bāo”,语义解释为:网络技术术语。指TCP协议中,发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。TCP是面向字节流的协议,就是没有界限的一串数据,本没有“包”的概念,“粘包”和“拆包”一说是为了有助于形象地理解这两种现象。原创 2022-10-10 17:32:26 · 604 阅读 · 0 评论 -
jenkins-环境搭建
jenkins搭建安装安装很简单,下载一个war包就行了,可以看官网的:jenkins官网这里下载,然后上传到linux上面:然后在其同级目录下创建脚本:start-jenkins.shvim start-jenkins.sh# 脚本文件(直接将其粘贴到文件中)nohup java -jar jenkins.war --httpPort=8082 >> jenkins.log 2>&1 &# 修改文件权限chmod 777 start-jenkins原创 2021-05-24 23:58:59 · 356 阅读 · 8 评论 -
springboot-自定义starter
springboot的Starter?starter是啥?starter有啥用?怎么自定义starter?针对于这些,我也不知道!哈哈哈!但是经过一番折腾后,有个大概了解,有不对之处,多多指教!starter是啥?其实啥也不是,就是一堆jar包的集合,你引用我,我引用你,然后就有一大堆jar出现了,也就是个maven工程,之后还是要放到公司私服给其他同事使用(我的想法是写starter给其他公司用,哈哈哈),大概也就是一个pom的maven工程,然后可以让别人引入!!starter有啥用?原创 2021-05-18 22:12:16 · 493 阅读 · 2 评论 -
nexus-实际使用
nexus的实际使用创建需要上传的maven工程看看这个项目,其实很简单,就是写了个工具类,然后上传到私服,这个平时在公司开发还是挺常见的;然后看看pom.xml文件:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"原创 2021-05-17 12:26:53 · 188 阅读 · 0 评论 -
nexus-基本使用
nexus的基本使用Search这个功能就是全局搜索一些jar然后下面几个选项就是看所有上传的jar包Browse这个是比较核心的地方了这是一些系统自带的仓库地址,还有一些是我已经配置好了的创建代理仓库如上图步骤,但是这之前可以先创建好jar包的存放位置:这里路径在你取好名字之后会自动给你一个建议的路径,一般采用建议的就行然后在去创建仓库:选取代理方式创建名字、镜像地址、存储路径maven的镜像地址:http://maven.aliyun.com/nexus/co原创 2021-05-17 12:25:42 · 903 阅读 · 1 评论 -
nexus-环境搭建
nexus的搭建nexus的简介其实就是简单的一句话就可概括其最常用的功能:maven私服搭建过程下载nexus的安装包,还可以使用docker去搭建,这里就不演示了,nexus安装包已经有人上传过了,所以我无法上传可以私信我,或者自己去官网下载即可我存放在:然后解压到:这里会出现两个文件夹,我们启动nexus只需关注第一个即可;cd nexus-3.19.1-01/跟nexus脚本相关的都在这:这里是启动脚本和一下配置,可以先看配置文件:nexus.rcrun_as_原创 2021-05-16 15:52:10 · 445 阅读 · 4 评论 -
jvm-垃圾回收的概念和理解
参考尚硅谷:宋红康(b站视频)一、垃圾回收的概述1.1 关于垃圾回收Java 和 C++语言的区别,垃圾收集技术、内存动态分配三个经典问题哪些内存需要回收?什么时候回收?如何回收?1.2 垃圾回收的基本原理在java中,我们不需要手动释放对象的内存,由JVM的垃圾回收线程自动对没有引用的对象进行回收创建对象时,GC开始监控这个对象的地址、大小以及使用情况。GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的原创 2021-04-04 12:55:26 · 475 阅读 · 0 评论 -
jvm-StringTable详解
参考尚硅谷:宋红康(b站视频)一、String的基本特性1.1 字符串特征字符串,用""引起来表示String s1 = “mogublog” ; // 字面量的定义方式,声明在字符串常量池String s2 = new String(“moxi”); // new 对象的方式声明为final的不可被继承的实现了Serializable接口,表示支持序列化实现了Comparable接口,表示可以比较大小1.2 jdk里面的String存储变化jdk8及以前,内部定义了原创 2021-04-02 22:32:59 · 430 阅读 · 0 评论 -
jvm-对象探秘
参考尚硅谷:宋红康(b站视频)一、对象的实例化1.1 创建对象的方式new最常见的方式(new User())变形:Xxx的静态方法 ( User.getInstance() )XxxBuilder/XxxFactory的静态方法Class的newInstance:JDK9标记过时,反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance:反射的方式,可以调用空参,带参的构造器,权限没有要求。使用clone:不调用任何构造器,当原创 2021-03-31 23:22:32 · 265 阅读 · 0 评论 -
jvm-执行引擎
参考尚硅谷:宋红康(b站视频)一、执行引擎概述执行引擎是Java虚拟机核心的组成部分之一虚拟机的执行引擎由软件自行实现,物理机的执行引擎是操作系统层面上能够执行不被硬件直接支持的指令格式执行引擎的工作过程1、执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。2、每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址3、当然方法在执行的过程中,执行引擎有可能会通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过原创 2021-03-31 10:59:00 · 235 阅读 · 0 评论 -
jvm-方法区
参考尚硅谷:宋红康(b站视频)一、方法区的理解1.1 方法区的定位《Java虚拟机规范》:尽管所有方法区在逻辑上属于堆一部分,但一些简单实现,可能不会进行垃圾收集或进行压缩。对于HotSpot,方法区又名:Non-Heap(非堆),目的:区分堆。方法区看作是一块独立于Java堆的内存空间1.2 方法区和堆的区别不同点方法区主要存放Class(类元信息),堆中主要存放实例化对象相同点方法区/Java堆,各个线程共享内存区域方法区/Java堆,在JVM启动时被创建,物原创 2021-03-29 16:54:18 · 350 阅读 · 0 评论 -
jvm-堆空间详解
参考尚硅谷:宋红康(b站视频)一、堆的核心概述1.1 堆的基本概念堆针对一个JVM进程来说是唯一的。也就是一个进程只有一个JVM实例,一个JVM实例中就有一个运行时数据区,一个运行时数据区只有一个堆和一个方法区。但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理原创 2021-03-29 16:44:39 · 524 阅读 · 0 评论 -
jvm-虚拟机栈
参考尚硅谷:宋红康(b站视频)一、虚拟机栈的基本概念1.1 虚拟机栈的出现背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的【如果设计成基于寄存器的,耦合度高,性能会有所提升,因为可以对具体的CPU架构进行优化,但是跨平台性大大降低】。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。作者: youthlql链接: https://youthlql.gitee.io/post/5b1b6560.h原创 2021-03-26 10:09:33 · 203 阅读 · 0 评论 -
jvm-运行时数据区
参考尚硅谷:宋红康(b站视频)一、运行时数据区概念Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。当我们通过前面的:类的加载 –> 验证 –> 准备 –> 解析 –> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区类比一下也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品。原创 2021-03-22 17:56:35 · 188 阅读 · 0 评论 -
jvm-类加载器子系统
参考尚硅谷:宋红康(b站视频)一、类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)二、类加载器ClassLoader角色cla原创 2021-03-22 11:32:59 · 208 阅读 · 0 评论 -
jvm-虚拟机的基本概念
参考尚硅谷:宋红康(b站视频)一、虚拟机概念1.1 虚拟机的基本概念所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的Virtual Box,VMware就属于系统虚拟机,提供了一个可运行完整操作系统的软件平台,还有一种是直接建立在硬件之上的,如exsi。pve等。程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我原创 2021-03-19 11:24:20 · 434 阅读 · 0 评论 -
Elasticsearch入门学习(二)
ES的基本概念索引字段类型文档我们可以用关系型数据库来做个类比:而ES则是面向文档的,文档是最小的单位,文档又有几个主要属性:自我包含,一篇文档同时包含字段和对应的值,也就是同时包含 key:value!可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的! {就是一个json对象!fastjson进行自动转换!}灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以原创 2020-05-29 13:44:31 · 282 阅读 · 0 评论 -
java多线程学习(线程池学习)(五)
线程池的作用线程的流程和原理线程池的创建线程学习的第二篇学习讲过线程池的创建,使用的是google的guava<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>1...原创 2020-05-04 13:16:33 · 222 阅读 · 0 评论 -
Java多线程学习(其他一些锁的补充)(四)
介绍几种新锁的使用方式以及线程池的创建和一些线程池的相关操作。CountDownLatchCountDownLatch: 计算机术语叫做闭锁,也可以理解为倒计时锁吧;看一个小demopublic class CountDownLatchDemo09 { public static void main(String[] args) throws InterruptedExceptio...原创 2020-05-04 11:59:16 · 262 阅读 · 0 评论 -
Java的JVM学习、类加载器(一)
JVM是什么?JVM(Java Virtual Machine,Java虚拟机):java程序首先需要通过javac来编译,生成.class文件,然后通过java.exe(windows上)去运行,实际上java.exe是会去装载jvm.dll不同平台下是不一样的(linux下的libjvm.dll)。jvm是jre的一部分,他是一个虚构出来的计算机,拥有自己完善的硬件架构,如处理器、堆栈...原创 2020-05-03 22:17:43 · 192 阅读 · 0 评论 -
Java多线程学习(锁的使用 )(三)
Java线程中锁的使用一、锁的作用首先提出一个问题,如果两个线程A、B,同时去操作一个资源,比如C是一个20块钱的优惠吗,A、B在不知道的情况同时去使用,那么会出现什么问题??A使用了19,B使用了18,这样数据的完整性就不存在了,导致资源数据不同步,这就需要引出锁的概念,让A、B两个可以保证同时去操作C时还可以保证数据的安全性与完整性。所以让A先去操作、将读写操作完释放锁,然后让B继续操...原创 2020-05-02 09:07:08 · 290 阅读 · 0 评论 -
java多线程学习、线程的创建方式(二)
线程创建的方式有四种方法:通过继承Thread;实现Runnable接口;实现Callable接口,这种方式需要一个中间类来协助现成的创建,通过线程池的方式来进行线程的创建。具体实现类:package com.jxkj.juc;import com.google.common.util.concurrent.ThreadFactoryBuilder;import jav...原创 2020-05-01 09:55:26 · 187 阅读 · 0 评论 -
java多线程学习(不安全的类)(一)
java多线程学习一、什么是多线程二、原创 2020-04-30 15:20:04 · 238 阅读 · 0 评论 -
java8 Stream Api 详解
Stream学习一、参考可以参考:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/二、Stream简介主要是对java中集合的一些相关操作提供了很好用的一些api,他类似于 Iterator,但是比其操作集合更加方便,而且其对并行操作也有很好的优势。流的操作主要分为两种:Intermediate:后面可以跟...原创 2020-04-26 23:22:55 · 307 阅读 · 0 评论