自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Dubbo(二):Dubbo和ZooKeeper的协同工作原理

Dubbo和ZooKeeper是如何协同工作的?文章目录Dubbo和ZooKeeper是如何协同工作的?Dubbo1.服务提供者-配置2.服务消费者-配置负载均衡1. 随机 + 权重(random)2.轮询 + 权重(roundrobin)3.最少连接(leastactive)4.一致性Hash(ConsistentHash)ZooKeeper注册中心Dubbo通过RPC的方式实现服务调用通过简单实现理解原理:Client和Server共用一个接口,将接口打成一个jar包,在客户端和服务端

2022-04-25 17:46:21 2661 3

原创 【JVM】Java内存区域详解(通俗易懂系列)

Java虚拟机拥有管理内存的权利。一、运行时数据区在Java程序执行的过程中,Java虚拟机会将它管理的内存分为若干个不同数据区域(JDK1.8与之前版本不同)线程私有:虚拟机栈本地方法栈程序计数器线程共享:堆方法区直接内存(非运行时数据区的一部分)1 程序计数器可看做当前线程所执行的字节码的**行号指示器**特点:线程私有生命周期:与线程共存亡一块较小的内存空间,存储字节码行号;是唯一一块不会出现OutOfMemoryError的内存区域;

2022-03-08 17:56:50 3939 1

原创 报文、报文段、数据报、数据包、帧的概念区别

报文(message)—— 应用层是网络中交换与传输的数据单元(站点一次性要发送的数据块)。报文包含了将要发送的完整的数据信息,其长短不一致。报文在传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部(报文头)由传输层实现报文交付。分组:为了提供通信性能和可靠性,每个用户发送的数据会被分成多个更小的部分。在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。报文段(segment)—— 传输层组成报文的每个分组,将传输层分

2022-03-01 18:10:46 10067 2

原创 smbms超市管理系统(项目流程笔记,遇见问题的总结)

一、项目搭建准备工作【注意】jdbc配置url:useSSL=false搭建一个Maven Web项目配置Tomcatweb项目的默认上下文:/smbms测试项目是否能跑起来导入项目中会遇到的包jsp, Servlet, mysql驱动, jstl, standard编写实体类pojo(表和类映射)User、 Bill、 Role、 Provider编写基础公共类数据库配置文件driver=com.mysql.jdbc.Driverurl

2021-12-25 11:09:49 1524

原创 从因到果看懂事务隔离级别的实现原理

由于并发引发的安全性问题,为尽可能提高db访问性能,设计出不同的事务隔离级别,在不同场景中选择合适的隔离级别环境,在此环境下进行尽可能高性能的操作。而事务的隔离级别又是如何实现的呢?请阅读本片文章。......

2022-06-12 22:13:25 1056 1

原创 瞬间理解MVCC多版本并发控制

多版本并发控制

2022-06-02 10:44:49 702 1

原创 HashMap底层原理

HashMap的底层原理【HashMap简介】HashMap是用于存储键值对的容器根据键的hashcode存储数据;允许一条记录的key为null,允许多条记录的value为null;非线程安全【HashMap存储结构】在JDK1.7时HashMap采取的是数组+链表的形式存储数据,JDK1.8对HashMap进行了存储结构上的优化,引入了红黑树数据结构,极大增强了HashMap的存取性能!(解决链表上拉链过长的问题)**横向(主干):**数组;**纵向:**链表J

2022-05-06 11:24:39 238

原创 千字看懂MySQL:索引

索引文章目录索引1 索引基础2 索引的数据结构(1)B树的结构(2)B+树的结构3 InnoDB索引(1)主键索引(聚簇索引)(2)辅助索引(3)组合索引最左前缀匹配原则(4)覆盖索引(联合索引最容易触发)1 索引基础索引是什么?帮助MySQL快速获取数据的数据结构索引往往是存储在磁盘上的文件中(可独立存储、可与数据一起存储)基本默认都是使用B+树结构组织(多叉搜索平衡树)索引的优点是什么?提高数据库的检索效率,降低数据库的IO成本可通过索引列对数据进行排序,降低了数据排序的成

2022-05-05 15:25:21 303 2

原创 通过演进深入理解RPC底层原理

RPC是一种远程方法调用的概念从单机到分布式 —> 分布式通信分布式通信最基本的方式是通过:二进制数据传输(TCP/IP(Socket))一、原始方式(Socket网络编程)User类package common;import java.io.Serializable;public class User implements Serializable { private static final long serialVersionUID = 1L; priva

2022-04-08 22:20:42 343 1

原创 fastjson快速上手

fastjson包含了3个类:JSON:转换用JSONObject:代表json对象JSONArray:代表json对象数组JSONObject类json对象类型底层由Map实现put(key, value)添加属性get(key)获取json对象的数据等其他类似Map的方法JSONArray类底层就是List理解为json对象的数组,其中存放一个一个的json对象addremoveJSON类主要实现json对象、json对象数组、java对象、

2022-04-02 16:38:36 1005 1

原创 【JVM】类加载过程精炼总结

类加载过程Class文件需要加载到虚拟机中才能运行,虚拟机加载Class类型文件主要的步骤如下:加载、验证、准备、初始化这4个过程过程是按照这种顺序按部就班地开始的,而解析阶段不一定;按顺序开始,而不是进行,因为这些阶段通常是相互交叉地混合进行的;问题:什么时候必须立即对类进行“初始化”加载、验证、准备自然需要在此之前开始;遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,代码场景:能够生成这四条指令的典型Java代码场景:使用

2022-03-11 16:44:32 1070

原创 快速理解Lambda表达式

函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。对于函数式接口,我们可以通过lamda表达式来创建该 接口的对象lambda表达式指的是:在单一的抽象方法接口环境下的一种简化定义形式。内部类简化演变:public class Demo11_Lamda2 { public static void main(String[] args) { //1.局部内部类 class Like12 implements ILik

2022-03-02 21:26:28 242

原创 Java自定义排序的几种简洁方法

两种最简单的方法:自定义Comparator接口的子类(实现compare方法),添加进sort方法的第二个参数中;让待比较对象实现Comparable接口,并实现compareTo方法;1、通过实现Comparator接口来对集合中的自定义对象排序如果排序对象是一个student类class Student { //姓名,成绩,年龄三个变量 private String name; private int score; private int age;}

2022-03-02 13:18:27 1324

原创 Dubbo新手入门必看(一)

理解分布式系统分布式系统是若干个独立计算机的集合,计算机之间通过网络进行通信,为了完成共同的任务而协调工作从而组成的系统。简单来说就是利用更多的机器来处理更多的数据。一、Dubbo背景和简介1、架构的演进:(1)单一应用架构当网站流量很小时,只需要一个应用,将所有功能代码打成一个包部署在一个服务器上,以减少部署节点和成本。缺点:性能扩展比较难;协同开发问题;不利于升级和维护;(2)垂直应用架构当访问量逐渐增大,将应用拆成互不相干的几个应用,以提升效率。通过切分业务来实现各模块

2022-02-28 21:46:19 1768

原创 将本地文件上传至Gitee(步骤清晰)

文章目录1、Gitee上创建仓库2、创建要上传的文件夹3、配置目标仓库地址(要上传的仓库地址)4、与仓库的文件进行同步5、将要上传的文件放入此文件夹后再添加到缓冲区6、将文件提交到本地7、推送到GItee仓库中1、Gitee上创建仓库2、创建要上传的文件夹以此dubbo-admin为例3、配置目标仓库地址(要上传的仓库地址)先复制目标仓库地址:右键dubbo-admin文件点击Git Bash Here输入如下命令,将本地仓库与远程仓库相关联: git remote add orig

2022-02-28 10:29:07 4197 1

原创 面试必问的六大排序算法,精心总结

起初是时间复杂度为O(n2)级的三种排序算法:一、冒泡排序一边比较一边向后两两交换,将最大值/最小值,冒泡到最后一位。public void bubbleSort(int []arr){ for(int i = 0; i < arr.length - 1; i++){ for(int j = 0; j < arr.length - 1 - i; j++){ if(arr[j] > arr[j + 1]){ /

2022-02-27 12:21:37 1609

原创 【JVM】垃圾回收机制,真通俗易懂

堆内存的划分分为三个部分(以下名词表示同一个区):新生区、新生代、年轻代养老区、老年区、老年代永久区、永久代划分区域的目的唯一目的就是优化GC性能。如果没有分代,我们所有的对象都放在一块,GC的时候我们需要对堆的所有区域进行扫描。而很多的对象都是“朝生夕死”的,如果把创建的新的对象都放在某一地方,当GC的时候就先把“朝生夕死”对象的区域进行回收,这样就会腾出很多大的空间来。一、新生区的垃圾回收机制新生区分为:Eden区、Survivor0区、Survivor1区(也称为from

2022-02-24 21:10:36 601

原创 axios基本使用

一、简介1、 异步网络请求Ajax原来的浏览器页面向服务器请求数据时,因为返回的是整个页面的数据,页面整个都会刷新一下。如果我们只需要修改页面的部分数据,但是服务器发送的却是整个页面的数据,这样十分消耗网络资源。Ajax能够让页面无刷新的请求数据,实现Ajax的方式有很多种,如jQuery封装的Ajax,原生的XMLHttpRequest、axios2、Axios本质上还是对原生XMLHttpRequest的封装,可用于浏览器和nodejs的HTTP客户端,只不过它是基于Promise的,符合

2022-01-30 11:30:33 850

原创 员工管理系统文档【基础功能开发全细节】

文章目录1、首页实现1.1、访问index1.2、给index.html引入thymeleaf2、页面国际化2.1、统一properties编码2.2、编写i18n国际化资源文件2.3、配置国际化资源文件名称2.4、首页获取显示国际化2.5、配置国际化组件实现中英文切换2.5.1、添加中英文切换标签链接2.5.2、自定义地区解析器组件4、登录功能实现【注意: url泄露信息】【注意:拦截无权限访问】5、登录拦截器1、存session信息2、自定义HandlerInterceptor接口的preHandle方

2022-01-22 11:18:57 651

原创 Java反射机制总结【狂神课程笔记】

1、反射机制1.1、简介1、Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息操作任意对象内部的内部属性以及方法。2、加载完类后,在堆内存的方法区中就会产生一个Class类型的对象(切记!一个类只有一个Class对象)此Class类对象包含了完成的类的结构信息这个结构就像一面镜子,透过镜子可以看到类的结构------->反射。Person类new出来的对象张三,对象张三反射得到Perso

2022-01-01 09:44:25 169

原创 TCP协议:基础

文章目录TCP报文段结构序号和确认号确认应答机制超时重传机制超时时间的确定滑动窗口如果出现丢包,应该如何进行重传?流量控制拥塞控制连接管理机制三次握手四次挥手理解TIME_WAIT状态提高网络利用率的规范延迟确认应答捎带应答面向字节流粘包问题TCP异常情况TCP报文段结构p154《计算机网络》MSS限制了报文段数据字段的最大长度。当TCP发送一个大文件时,TCP通常会将该文件划分成长度为MSS的若干块,此数据长度加上TCP首部长度才等于整个TCP报文段的长度。MSS只出现在SYN=1的报文段中

2021-11-18 20:31:38 773

原创 通过Socket编程理解TCP三次握手

Socket编程——应用层开发由于传输层以下都是属于操作系统内部的服务(内部的网络管理模块)Socket就是其提供的窗口,如果你想利用系统网络管理中的传输层、网络层、链路层服务你都需要通过Socket这个窗口。一、Socket类------客户端套接字socket可以使一个应用从网络中读取和写入数据,不同计算机的两个应用可以通过连接发送和接收字节流,当发送消息时你需要知道对方的ip和端口。在Java中socket就是指一个类:java.net.Socket类。1. Socket类的构造函数So

2021-11-15 09:18:54 1523

原创 MySQL:入门操作

SQL入门语句文章目录SQL入门语句一、创建数据库,删除数据库二、表的操作三、增删查改1.新增(数据插入)(1)插入行(2)插入多个行2、 更新数据UPDATE3、删除数据DELETE(1)从表中删除特定的行4、查找数据(1)查找单个列(2)查找多个列(3)查找所有列(4)查找不同行(5)限制结果排序查找(1)排序数据过滤数据where一、创建数据库,删除数据库【apples是我创建的数据库】创建数据库:**create database ** [if not exists] apples **

2021-04-26 19:05:55 105

原创 java(数据结构) 设计实现 栈 和 队列

栈的设计设计思路:栈是 线性表的 特例→线性表是用数组来实现的→用数组来实现栈设计方法:1、使下标为0的一端来作为栈底;2、定义top下标:指示栈顶元素在数组中的位置【top=-1表示栈空,top=stackSize-1,表示栈满(stackSize是栈的容量)】主要实现的三个方法:1、压栈:push(int x)2、弹栈:pop()3、查看栈顶元素 peek()实现代码:package use_stack;public class Mystack { private in

2021-03-24 16:30:44 169

原创 Java 对象与引用 绝对理解!(初学者必看)

首先,什么是对象:是类的实例化。是一组相关数据的组织单位(状态)围绕这组数据的各种操作(方法)【数据(属性)有两种类型:基本类型和引用类型】而什么又是引用?:用来操作对象。基本要点:【以下图片内容○代表“引用”,□代表“对象”】1·引用指向对象a.同一时刻,要么指向对象,要么不指向对象(null)b.对象不能指向引用,也没有对象指向对象一说。可以将引用理解为《火影忍者》中的傀儡术,勘九郎利用查克拉线来控制蝎的傀儡,使其发动攻击。引用—>勘九郎使用查克拉线,对象就是—>蝎

2021-01-22 11:51:37 502 1

原创 java实现 冒泡排序 详解

先从简单的例子开始理解:一个简单短小的元素从大到小的数组int [ ]a={4,3,2,1}将它从小到大排序。原理图:1、由上图可知,数组一共有a.length个元素

2021-01-19 09:24:19 310

原创 初学者深入理解hasNext()以及其作为循环条件时如何退出循环

定义:hasNext()检测输入中是否还有下一个输入;next()读取输入的下一个单词(以空格作为分隔符);nextLine()读取输入的下一行内容;****理解方式:“迭代器原理”即你所创建的集合,这时指针指向集合第一个元素的上方,可以理解为指向 空。(使用hasNext()时,起始他就会判断下一个元素是否存在;使用next()时,指针下移动,并返回指向的元素。)****当在使用hasNext()作为循环条件时,会遇见循环不结束的情况:import java.util.Scanner;

2020-12-26 17:27:54 5531 2

原创 C语言实现字符串旋转

C语言实现字符串旋转例题一:实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB思路分析:·左旋1个字符,最左边的A旋到最右边曾经D的位置,其他字符分别向前位移一个单位,得到BCDA。· 左旋2个字符,在以上的基础上,再重复操作即可。得到CDAB。以此类推……#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>void le

2020-12-14 22:26:44 518

原创 数据在内存中的储存

数据在内存中的储存(一)一、整型在内存中的储存我们之前讲过一个变量的创建是要在内存中开辟内存空间的。空间的大小是根据不同的类型而决定的。我们知道int a=0;为a分配四个字节的空间,那如何储存?对于整型来说:数据存放内存中实际存放的是补码。原码:直接将二进制按照正负数的形式翻译成二进制就可以;反码:将原码的符号位不变,其他位依次按位取反就可以得到;补码:反码+1就得到。正数的原、反、补码都相同。eg:内存中的储存:Int a=-10; 内存中:(小端模式) 0X f6 ff

2020-12-12 21:57:01 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除