花朝666
码龄4年
关注
提问 私信
  • 博客:62,661
    62,661
    总访问量
  • 103
    原创
  • 2,258,444
    排名
  • 6
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2020-10-06
博客简介:

qq_51339153的博客

查看详细资料
个人成就
  • 获得14次点赞
  • 内容获得8次评论
  • 获得69次收藏
  • 代码片获得184次分享
创作历程
  • 18篇
    2021年
  • 85篇
    2020年
成就勋章
TA的专栏
  • 笔记
    3篇
  • TCP
    1篇
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

redis 哨兵模式---当redis实例被定客观下线

选举大哥sentinel 一个redis服务被判断为客观下线时,多个监视该服务的sentinel协商,选举一个领头sentinel,对该redis服务进行故障转移操作。选举领头sentinel遵循以下规则: 1)所有的sentinel都有公平被选举成领头的资格。 2)所有的sentinel都只有一次将某个sentinel选举成领头的机会(在一轮选举中),一旦选举,不能更改。 3)先到先得,一旦当前sentinel设置了领头sentinel,以后要求设置sentinel为领头请求都会被拒绝。 4)每个发现服务
原创
发布博客 2021.12.07 ·
426 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

redis的过期策略

三种过期键删除策略 1)定时删除:创建一个定时器,到时间立即执行删除操作(对内存友好,因为能保证过期了立马删除,但是对cpu不友好) 2)惰性删除:键过期不管,每次获取键时检查是否过期,过期就删除(对cpu友好,但是只有在使用的时候才可能删除,对内存不友好) 3)定期删除:隔一段时间检查一次(具体算法决定检查多少删多少,需要合理设置) 淘汰策略 当Redis占用内存超出最大限制 (maxmemory) 时,可采用如下策略 (maxmemory-policy) ,让Redis淘汰一些数据,以腾出空间继续提供读
原创
发布博客 2021.12.07 ·
4418 阅读 ·
0 点赞 ·
0 评论 ·
10 收藏

无所不知——Redis的Info 指令

在使用 Redis 时,时常会遇到很多问题需要诊断,在诊断之前需要了解 Redis 的运行状态,通过强大的 Info 指令,你可以清晰地知道 Redis 内部一系列运行参数。Info 指令显示的信息非常繁多,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是: 1、Server 服务器运行的环境参数 2、Clients 客户端相关信息 – Redis 连接了多少客户端? > redis-cli info clients connected_clients:124 # 这个就是正在连接的客户端数
原创
发布博客 2021.12.06 ·
720 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

使用java实现post和get请求

get请求 public static String get(String url) throws IOException { String content = null; LOGGER.info("get","发送get请求"); try { URLConnection urlConnection = new URL(url).openConnection(); HttpURLConnection conne
原创
发布博客 2021.08.04 ·
361 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

2021-08-04 java实现md5算法

很多场景下,账号密码明文比较危险,使用md5算法可以有效的保证密码安全问题 public static String getMd5(String data) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] result = md.digest(data.getBytes()); StringBuffer sb = new St...
原创
发布博客 2021.08.04 ·
134 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java中接口和抽象类的区别

接口和抽象类的区别? 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。 抽象类是可以有私有方法或私有变量的,通过把类或者类中的方法声明为abstract来表示一个类是抽象类,被声明为抽象的方法不能包含方法体。子类实现方法必须含有相同的或者更低的访问级别(public->protected->private)。抽象类的子类为父类中所有抽象方法的具体实
原创
发布博客 2021.03.16 ·
115 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java并发编程多线程安全性介绍以及解决

线程不安全 下面这段代码中,我们使用for循环启动了10个线程,每一个线程都对类中的静态变量进行10000次自增操作,按照正常的逻辑来说,等到10个线程都执行完他们的任务之后,COUNT 这个变量应该是被自增了10万次,所以COUNT应该为100000。 public class UnsafeThread { public static int COUNT;//处于方法区 public static void main(String[] args) throws InterruptedE
原创
发布博客 2021.02.27 ·
368 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP协议的三次握手与四次挥手

一. 建立连接—三次握手 首先客户端和服务端都是关闭状态,也就是CLOSED状态。服务器端进入一个监听的LISTEN状态,阻塞等待客户端的连接 第一次握手:客户端向服务端发送一个SYN的标志位以请求连接。此时客户端进入SYN_SEND状态,也就是开始阻塞等待服务器的应答。 第二次握手:服务器收到了客户端的SYN连接请求,也就处于SYN_RCVD状态。由于现在客户端向服务端单方面请求连接了,但是服务端还没有发送连接请求给客户端,要想双方都建立连接的话,就需要服务端也向客户端发送一个SYN请求。同时,我们还需要
原创
发布博客 2021.02.27 ·
114 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP的拥塞控制

一. 流量控制 1.1 产生原因 我们知道在接收端接收数据的时候,会先将数据保存在接收缓冲区中,等待应用程序调用recv()方法读取。如果接收缓冲区内的数据一直没有被应用进程读取,接收缓冲区空间被填满,发送端再继续发送数据的话,就会引起丢包等一系列的连锁问题。 为了避免这种问题的发生,TCP中可以根据接收端的处理数据的速度和能力,来决定发送端的发送速度,这个机制就叫做流量控制。 1.2 流量控制方法 在接收端接收到数据之后,返回的ACK中,会将自己可以接收数据的缓冲区大小放到TCP头部的“窗口大小”的字段中
原创
发布博客 2021.02.27 ·
240 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP协议与UDP协议的区别

UDP协议 1.1 流程 服务器:new DatagramSocket(端口号) 启动服务器。 服务器:receive()方法等待接收网络数据包(阻塞方法:服务端先调用该方法,会进入持续等待的状态)。 客户端:通过目的ip+目的port(端口号),找到远程服务器(UDP无连接,但可以找到远程主机上的UDP进程)。 客户端:通过send()方法发送请求数据。 服务端:也通过send()方法响应客户端发来的数据,发送数据包。 客户端:receive()方法接收服务端发来的数据。 1.2 UDP协议特点 无连接.
原创
发布博客 2021.02.27 ·
134 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP可靠性之滑动窗口

我们知道TCP协议中有一个确认应答机制,每发送一个数据段,就需要有一个ACK来响应,如果这样一收一发的话,会让数据传输的效率变得很低。滑动窗口就是用来解决这个问题的,也就是我们一次发送多条数据。例如现在不需要等待确认应答可以发送数据的最大值为4000个字节,我们将4000个字节分为四个数据段来进行发送。在发送前四个数据段的时候,我们不需要等待任何的ACK应答,可以直接发送。当收到第一个数据段的ACK之后,滑动窗口就会向后移动一个单元,再继续发送第五段数据,然后依次类推。 发送缓冲区 操作系统为了维护滑动..
原创
发布博客 2021.02.27 ·
166 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Tcp/ip封装解析过程

封装 首先在应用层,浏览器会将请求数据封装为HTTP协议数据包,在原本数据包中加入HTTP头。 1.传输层:tcp协议将前一个封装的数据包再次封装为tcp数据包。 2.网络层:封装ip协议。 3.数据链路层:封装了数据帧。 解包分用 1.数据链路层:操作系统在网卡接收到数据之后,再解析接收到的数据包,其中就会处理数据帧。 2.网络层:系统处理ip头部。 3.传输层:系统处理tcp报头,报头中包括ip和port,知道了端口号,找到对应的应用程序,,系统将数据包交给应用程序来处理数据。 4.应用层:应用程
原创
发布博客 2021.02.27 ·
4178 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

HTTP响应常见的状态码

HTTP常见状态码有哪些? a. 2开头状态码;2xx (成功)表示成功处理了请求的状态代码;如:200 (成功) 服务器已成功处理了请求。 b. 3开头状态码;3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。如:304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容 c. 4开头状态码;4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理;如:400 (错误请求) 服务器不理解请求的语法;403 (禁止) 服务器拒
原创
发布博客 2021.01.07 ·
291 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Servlet的生命周期

二、Servlet生命周期简述 (1)加载和实例化 当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。 (2) 初始化 实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。 (3)服务 初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServ.
原创
发布博客 2021.01.07 ·
94 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

GET和POST的区别

get和post的区别? a、get是用来从服务器上获取数据,而post是用来向服务器传递数据; b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?“连接,变量之间用”&"连 接;而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。 c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。 d、get传输的数据量小,这主要应为
原创
发布博客 2021.01.07 ·
79 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Http协议请求格式与响应格式

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: l 请求方法URI协议/版本 GET/sample.jspHTTP/1.1 l 请求头(Request Header) Accept:image/gif.image/jpeg,/ Accept-Language:zh-cn Connection:Keep-Alive Host:localhost User-Agent:Mozila/4.0(compatible;MSIE5.01;Win
原创
发布博客 2021.01.07 ·
676 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

OSI七层模型,TCP/IP五层模型(四层也行),以及封装解封装过程

结OSI和TCP/IP: 1.OIS属于理想化的,属于纸上谈兵的没有实际应用的产品;而TCP/IP广泛运用于实际生活中。OSI模型是协议开发前设计的,具有通用性,TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络。 2.OSI共有七层,为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,TCP/IP则有四层,为:应用层、传输层、网络层、网路接口层(包含物理层和数据链路层) 3.OIS协议有很好的隐蔽性,拥有三个主要概念:服务,接口,协议;TCP/IP则没有明确区分服务,接口和协议
原创
发布博客 2021.01.06 ·
707 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

线程池的创建方式---java实现

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class KindsThreadPool { //1、newCachedThreadPool() //创建一个可缓存的线程池,
原创
发布博客 2021.01.04 ·
94 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

java中异常以及它的处理方式

.相关概念: (1)异常是程序运行时产生的一种问题(不是编译期) (2)异常的种类有很多,不同种类的异常能够表示不同情况的问题 2.基本语法: 示例: public class Abnormal { public static void main(String[] args) { int[] arr = {1, 2, 3, 4}; try { System.out.println("before"); System.ou
原创
发布博客 2020.11.30 ·
137 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

泛型的基本,以及包装类

泛型诞生的作用: 1.增加编译期间的类型检查:泛型是作用再编译期的一种机制,即运行期间没有泛型的概念 2.取消类型转换的使用 泛型分类: (1)泛型类: public class MyArrayList<E> { private E<> array; private int size; (2)泛型方法 MyArrayList<Book> books = new MyArrayList<Book>(); books.add(new Book()); 在上
原创
发布博客 2020.11.30 ·
127 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多