自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 grafana关闭缓存

如果把Prometheus配置文件中的一些端口删除再重启服务,虽然Prometheus中更新了数据,但是grafana中的缓存会存在很长时间。要修改的数据几乎在最下面了,同时也可以看到ttl竟然长达5分钟(折磨)

2023-01-10 14:55:28 1856 1

原创 jvm垃圾回收机制

​ 无需手动编码,但其内部配合引用队列使用,在垃圾回收时,终结器引用入队(被引用对象暂时没有被回收),再由 Finalizer 线程通过终结器引用找到被引用对象并调用它的 fifinalize方法,第二次 GC 时才能回收被引用对象。当内存不足时系统会逐步进行垃圾回收,第一次GC回收无用的新生代对象,第二次GC回收无用的老年代对象,第三次回收与第一次回收类似,第四次回收软引用的新年代和老年代对象,此时内存足够进行下一次操作,垃圾回收结束。可以看出垃圾回收时将先前声明为软引用的四个对象全部回收了。

2022-10-08 18:00:18 674

原创 java虚拟机中的双亲委派机制

电路交换虽然理论上可以用来传递网络信息但是需要占用资源的时间太长十分浪费资源。

2022-10-08 15:10:14 930

原创 电路交换,分组交换,报文交换

电路交换虽然理论上可以用来传递网络信息但是需要占用资源的时间太长十分浪费资源。

2022-10-08 15:06:20 640

原创 集线器与交换机

集线器扩大了广播域也扩大了碰撞域(冲突域)交换机扩大了广播域但是隔离了碰撞域(冲突域),所以现在基本使用的都是交换机。

2022-09-28 16:17:23 2031

原创 MAC地址、IP地址以及ARP协议

综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。每台主机都有的一张表,用于存放其他主机ip地址和mac地址的对应关系,当主机B想要查找192.168.0.1对应的mac地址时可以根据该表查找,如果要查找该表中没有存储的数据时,就需要广播ARP请求报文。由于是广播发送的所以在该主机所在的网络中所有的主机都会收到该报文,并将该报文的目的ip地址和自身的ip地址比较,如果相同就发送一个单播帧把自己的mac地址发送过去并记录主机B的mac地址和ip地址。

2022-09-28 16:16:31 1583

原创 点对点协议PPP

点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。反之,就丢弃这个帧。只要发现5个连续的比特1,就把其后的1个比特0删除。地址(Address)字段:取值为OxFF,预留(目前没有什么作用)控制(Control)字段:取值为Ox03,预留(目前没有什么作用)言简意赅,LCP是用于对接网络层的,NCPS是用于对接物理层的。协议(Protocol)字段:指明帧的数据部分送交哪个协议处理。标志(Flag)字段:PPP帧的定界符,取值为Ox7E。

2022-09-28 16:15:41 1264

原创 可靠传输具体实现

回退N帧协议的接收窗口尺寸WR只能等于1,因此接收方只能按序接收正确到达的数据分组。一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对涌信咨源的极大浪费。为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸W:不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。

2022-09-28 16:14:14 2074

原创 数据链路层概述

就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。

2022-09-28 16:12:57 955

原创 动态路由选择

若在转发表中找不到目的地址就丢弃该分组,若找到了目的地址的端口就将其移交过去并在输出端口网络层中修改分组中某些数据(如存活时间等)从网络层传递过来的信息分为两种:一种是寻求转发的数据分组,一种是通知路由器更新路由表的路由报文。处理机除了接收报文外还会周期性的给其他路由器发送自己所知道的路由信息。输入缓冲区用来暂时存储新进入路由器但还来不及处理的分组。输出缓冲区用来暂时存储已经处理完毕但还来不及发送的分组。动态路由选择,能较好地适应网络状态的变化。分为路由选择部分和分组转发部分。路由器之间交换路由信息。

2022-09-28 16:09:36 276

原创 IP数据报的发送和转发过程

每台主机在网络中都有一个默认配置的路由器用来转发通信,这个默认的路由器叫做默认网关,上图中主机C的默认网关是路由器R的IP地址192.168.0.126。若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发;假设上图中主机C和F通信,我们先把主机C的ip和子网掩码相与得出C所在的网络地址。再将主机F的ip地址和主机C的子网掩码相与,判断得出的网络地址是否相同。主机发送的广播帧只能在主机所在的网络接收,不会被路由器转发到其他网络上。若在同一个网络,则属于直接交付;

2022-09-28 16:08:41 1050

原创 IPV4地址概述

在TCP/IP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚。IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。IP地址由因特网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。

2022-09-28 16:06:51 1565

原创 虚电路服务和无连接的数据包服务

由于TCP/IP体系结构的因特网的网际层提供的是简单灵活、无连接的、尽最大努力交付的数据报服务,因此本章主要围绕网际层如何传送IP数据报这个主题进行讨论。

2022-09-28 16:04:16 1381

原创 域名系统DNS

下—次应查询的顶级域名服务器的IP地址,本地域名服务器向顶级域名服务器进行迭代香询,顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址。本地域名服务器向权限域名服务器进行迭代香询,权限域名服务器告诉本地域名服务器所查询的域名的IP地址,本地域名服务器最后把结果告诉主机。本地域名服务器收到递归查询的委托后,也采用递归香询的方式向某个根域名服务器查询。由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。

2022-09-28 16:01:18 958

原创 TCP的运输连接管理(三次握手和四次挥手)

释放连接后tcp双方都立即进入了关闭状态,一段时间后客户端之前滞留的那条失效的报文段到达了服务器端,TCP服务器进程会误认为这是TCP客户进程又发起了一个新的TCP连接请求,于是给TCP客户进程发送TCP连接请求确认报文段,并进入连接已建立状态,而由于TCP客户进程并没有发起新的TCP连接请求且处于关闭状态因此不会理睬该报文段,而tcp服务器端一直等待TCP客户进程发来数据,这将白白浪费TCP服务器进程所在主机的很多资源。TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。

2022-09-27 16:24:06 1528

原创 TCP可靠传输的实现

假设发送方发送的数据中只有32和33到达了接收方,此时接收方接收32,33,但是因为他们是未按序到达的数据,所以接收方只能对按序收到的数据中的最高序号给出确认,也就是发送ack=31表示希望收到31号数据。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。接收方返回:ack=31,当发送方收到该重复指令时就知道31丢失了并重新发送。下图中发送方的发送窗口为20。

2022-09-27 16:22:46 866

原创 TCP的拥塞控制

在执行慢开始算法时,发送方每收到一个对新报文段的确认时,就把拥塞窗口加一,然后开始下一轮传输,当拥塞窗口达到慢开始门限值时触发拥塞避免算法,在上图中由于拥塞窗口是一,所以一开始发送窗口也是一,经过一次发送返回后,发送方窗口变为2,然后两个窗口再次发送数据,接收方返回后两个窗口都要加一,所以第三轮时发送窗口就变成了4,再下一次变成8,可以看做每成功发送接收一次就让窗口乘二,直到到达慢开始门限值16触发拥塞避免算法。发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

2022-09-27 16:22:00 290

原创 tcp的流量控制

为了防止这种情况发生,当主机A收到零窗口通知时就会启动一个持续计时器,每隔一段时间就发送一个只有1字节数据的探测报文段,主机B对这条报文进行确认并发送ack和自己的接收窗口大小,如果还是0那么主机A还会重复上述操作直到主机B发送的窗口大小不为0。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。接收方将自己接收窗口的大小通知给发送方,发送方调整自己的发送窗口为同样大小,这样就算发送方未收到接收方的回应也可以将自己发送窗口内的数据全部发送,下图中发送方的发送窗口为400。

2022-09-27 16:20:53 1169

原创 UDP和TCP对比与区别

所以如果接收方检测到数据产生了误码或者传输过程中丢失了数据,ip协议和udp协议是不会进行任何操作的,可以说udp是尽可能的传输数据,至于数据正确率则不是udp考虑的范围,基于此特性udp适用于IP电话、视频会议等实时应用。tcp将发送方报文看做是一个个字节组成的字节流,tcp对每个字节编号并存储在自己的发送缓存中,根据策略从字节流中读取部分字节组成tcp报文段;tcp与udp不同,tcp提供可靠传输服务,所以不会出现传输差错(误码,丢失,乱序,重复),适用于要求可靠传输的应用,例如文件传输】

2022-09-27 16:19:46 1991

原创 计算机网络运输层复用和分用

之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。

2022-09-27 16:18:19 1440

原创 类加载过程

初始化子类静态B之前先初始化父类静态A。

2022-09-09 17:41:41 337

原创 jvm中的类加载器

在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。隔离加载类修改类加载的方式扩展加载源防止源码泄漏开发人员可以通过继承抽象类java.lang.classLoader类的方式,实现自己的类加载器,以满足一些特殊的需求。

2022-09-09 17:14:55 567

原创 java中字符串常量池

首先我们需要理解并不是所有字符串对象创建后都会放入串池,比如用字符串对象动态拼接生成的字符串对象只会在堆中创建对象而不会将其放入串池中,如下列代码中字符串对象s就是由两个字符串对象拼接而成只会在堆中创建对象而不会将该对象进行串池操作。执行第二句s.intern时,因为字符串常量池事先没有存放对象"ab",所以将s的指向放到了字符串常量池中,当执行s == “ab"时会去字符串常量池中寻找对象"ab”,因为已经存储了s的地址,所以s == “ab”判断下列对象s3是否等于s4,s3又是否等于s5。

2022-09-08 14:41:34 601

原创 关于java中方法区和常量池

我们找到#2对应的常量池地址,发现其类型为Fieldref,说明其引用了其他的变量,后面的地址说明引用了#21,#22的地址(在常量池中应该是直接拼接出结果)由于元空间是存放在本地内存中大小几乎可以看做是物理内存的大小,所以想要看到元空间溢出需要通过idea在编译设置设置元空间大小。常量池是 *.class 文件中的,当该类被加载,它的常量池信息就会放入运行时常量池,并把里面的。在jdk1.8以前,方法区的位置在堆内存中的一部分叫做永久代,1.8后将堆中方法区移除改用。

2022-09-08 14:39:50 495

原创 从零开始学习Dubbo7——Dubbo的高级特性

现实用户使用中很可能会因为网络原因导致超时,如果每次超时都是中断服务那么会让用户的使用好感大幅下降,因此我们可以设置重试机制,如果多次重试还是连接失败,那么就真正判定为连接失败,重试次数默认是2次。用户访问消费者时,消费者会创建一个线程调用提供者并说明自己想调用的方法,服务提供者处理结束后将数据返回给消费者,消费者将数据封装再归还给用户,流程结束后消费者销毁线程。按权重轮询,并不是随机,如果权重按下图设置的话,那么相当于比例为1:2:1,如果消费者调用4次那么便会先轮询输出1,2,3,最后一次再输出2。

2022-09-05 20:31:57 612

原创 从零开始学习Dubbo6——控制端dubbo-admin

在讲admin之前我们先回顾这张图,图中registry,consumer,provider我们在先前的项目中都已经见识过,而关于monitor官方还没有提供一个很好的管理工具,所以我们通过dubbo-admin来实现monitor的功能。\dubbo-admin-develop\dubbo-admin-server\src\main\resources目录,找到。运行java -jar .\dubbo-admin-0.4.0.jar。dubbo-admin管理平台,是图形化的服务管理页面。

2022-09-05 20:28:35 561

原创 从零开始学习Dubbo5——让模块独立运行下

在web项目中因为没有service层所以我们的解决办法是定义一个service层接口并且该接口名和其中的方法名要和service项目中的一模一样,如果有多个service和web时可能接口会定义错误。

2022-09-05 20:24:52 904

原创 从零开始学习Dubbo4——让模块独立运行

上一步中web和service被分成了两个模块,但是并不是分布式,因为真正的分布式两个模块是可以独立的启动的,但是service模块并不能独立启动,因为它只是一个java项目。将serviceimpl中的service注解更换为dubbo的,更改后可以将这个类提供的方法(服务)对外发布。复制web项目的webapp文件夹粘贴到service项目下,修改web.xml,目的是删除关于本地springmvc的扫描。我们的目的是能够独立的启动web模块和service模块,并通过dubbo进行连接。

2022-09-05 20:20:04 1025

原创 从零开始学习Dubbo3——Dubbo实现

此处会有两处爆红,第一处是因为dubbo-web中的pom文件中缺少声明service的依赖,第二处是因为dubbo-web中缺少springmvc.xml文件和log4j。4.在服务消费者中的UserController远程调用UserServicelmpl提供的服务。启动成功后可以查看到Tomcat启动的端口为8000。首先启动dubbo-service的install。然后启动dubbo-web的Tomcat插件。dubbo-web中的pom文件添加依赖。2.创建服务消费者Consumer模块。

2022-09-05 19:56:35 984

原创 从零开始学习Dubbo2——什么是Dubbo和zookeeper的安装

调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。将该服务的信息(服务类型,ip地址)放在注册中心中。

2022-09-05 19:52:11 895

原创 从零开始学习Dubbo1——互联网项目目标与架构发展史

微服务架构是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。很多“人”一起,干一样的事,比如一个餐馆做菜需要切菜的,做菜的,洗碗的,上菜的;如果餐馆有许多订单,那么我们可以招聘两个厨师团队,将订单分成两份,两个厨师团队之间就相当于集群,每个团队内部则是通过分布式的方式做菜,这种添加团队的方式实现了可伸缩性。**高可扩展:**系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块。

2022-09-05 19:33:39 1127

原创 Linux上快速安装zookeeper

虽然在conf目录下有一个配置文件zoo_sample.cfg但是zookeeper规定默认生效的配置文件名字必须是zoo.cfg,所以原本的配置文件可以看做是zookeeper给我们提供的模板,要想使其生效还需要我们复制粘贴为zoo.cfg后才可。将事先下载的apache-zookeeper-3.5.6-bin.tar.gz上传到/opt/zookeeper目录下。在zkdata中通过pwd打印zkdata的路径,复制后编写zoo.cfg。将dataDir后的路径修改为zkdata的路径。

2022-09-02 09:36:07 778

原创 java中栈的算法

定义两个栈num和min,num栈用来实现入栈出栈,min栈的栈顶一直是num栈中所有数的最小值,当有数据入栈时先向num栈存储该数,接着判断min栈是否为空,如果为空的话就直接存入,如果不为空的话将入栈的数与min栈栈顶元素比较,如果入栈的数更小那么min栈入栈,出栈时判断min栈栈顶与num栈栈顶是否相等,相等的话min出栈,然后让num出栈,不相等的话min不出栈,返回最小值时直接返回min栈的栈顶即可。出栈时判断min栈栈顶与num栈栈顶是否相等,相等的话min出栈,然后让num出栈。...

2022-08-30 16:29:51 266

原创 java栈和自定义栈

实质:本质上还是个数组,只不过使用了内部方法让其有了栈的特点。peek():查看栈顶对象,但是不从栈内移除。pop():查看栈顶对象,并且从栈内移除。empty():检测栈是否为空。特点:先入后出,后入先出。push():数据压栈。...

2022-08-30 16:05:15 659

原创 springmvc项目实现自动化部署

在一个ssm项目中,实际执行的文件在target的和项目同名的文件夹中,部署到服务器上时使用target内的war包即可。

2022-08-16 23:19:21 766

原创 java操作redis

修改完成后将旧的redis线程杀死然后重新启动修改后的配置文件。书写类中代码,目的是测试能否连通我们服务器上的redis。在测试之前首先要注释掉服务器的bind,否则只能本机访问。关闭保护模式,将protected-mode修改为no。顾名思义就是通过java来操作redis。添加一个demo1方法。firewall指令。...

2022-08-16 23:12:05 786

原创 linux常用端口和端口外露的后果

端口不再直接打开而是由对应的程序来打开,不同程序支持的协议不同,如果黑客使用的请求信息中的协议与被攻击者端口对应的协议不同的话,该端口不会识别该请求信息也就不会被攻击数据库。有的程序会共用一个端口,这种情况下为了辨别不同的程序请求的数据它们所使用数据的格式也会不同,就算是同一个端口也会因为程序的共用导致黑客请求时因为数据格式不对也不会返回数据。扫描工具会带有常用程序的所有默认端口以及对应的协议,扫描时对默认端口都进行数据请求,如果用户端有回复就说明该用户开了该端口。...

2022-08-16 23:02:30 1152

原创 springmvc设置全局cookie

而平常创建的默认的servlet文件web-inf里面的网页和外部网页是在同一个文件夹WebContent下的,所以可以直接设置cookie跳转。猜想:从login.html设置的cookie是跳不到teacher.manage中的,因为它们之间相隔了多个文件夹。在login.html设置cookie时在teacher_manage.html中是找不到这个cookie的。设置cookie时这么设计就可以做到全局cookie。...

2022-08-16 22:59:33 569

原创 多线程与线程池耗时比较

使用多线程向数据库插入20万条数据。使用线程池插入10万条数据。

2022-08-16 22:56:51 464

原创 单线程与多线程使用场景

当mysql进程调用磁盘中存储的表文件时,由于磁盘读取速度限制,会消耗大量的时间在上面(通常单个表文件是几十ms),在等待读取的这段时间,CPU在打空转造成了资源浪费,所以如果是单线程调度时每次都要等待,这时使用多线程就可以在CPU等待磁盘调度时去执行其他线程。每个线程在执行时只执行极短的时间,然后去执行其他线程,每次切换之前要记录本次执行的数据,会额外耗费资源和时间,所以会有消耗时间,而每个线程之间切换的速度越快,消耗的时间就越多。网络爬虫,数据库进行批量操作时。......

2022-08-16 22:53:07 2863

空空如也

空空如也

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

TA关注的人

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