自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 问答 (3)
  • 收藏
  • 关注

原创 理解final关键字

final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。一.final关键字基本用法1.修饰变量凡是对成员变量或者局部变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和stat...

2018-08-07 22:24:12 93659 10

原创 【 RocketMQ 专栏】基于 Linux 环境安装部署 RocketMQ 教程(一步一步跟着安装就对了)

这里是 RocketMQ 系列的第一篇文章,工欲善其事,必先利其器,先不讲理论,也不具体介绍 RocketMQ,我们先把 RocketMQ先安装上,让你们实地感受下 RocketMQ 整个安装流程,安装完后我们再后续文章对 RocketMQ 手术刀式一层一层进行剖析。下载安装包直接从 RocketMQ 官网下载最新的安装包下载地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.2/rocketmq-all-4.9.2-bin-relea

2022-02-03 22:03:35 9182 9

原创 坚持苦学 TCP ,终于把 TCP 协议给学明白了,坚持看完你会收获很大

TCP 是面向连接的、可靠的流协议。流就相当于不间断的数据结构。TCP 之所以能够提供可靠传输就在于 通过 校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制去实现的。下面会通过介绍 TCP 的首部格式进行展开,一一阐述 TCP 三次握手、四次挥手、滑动窗口、拥塞控制、流量控制和 UDP 协议。TCP首部格式源端口号:表示发送端的端口号,字段长 16 位。目标端口号:表示接收端端口号,字段长度 16 位。序列号:字段长 32 位。序列号是指发送数据的位置。每发送一次数据

2022-02-01 21:42:07 3374 8

原创 IP协议 — IP协议头部

什么是 IP 协议IP 作为整个 TCP/IP 协议族中至关重要的协议,主要负责将数据包发送给最终的目标计算机,为上层协议提供无状态、无连接、不可靠的服务。无状态:无状态是指 IP 通信双方是不同步传输数据的状态信息。所有 IP 数据报的发送、传输和接收都是相互独立。无连接:无连接是指IP通信双方都不长久地维持对方的任何信息。上层协议每次发送数据的时候,都需要明确指出对方的IP地址。不可靠:不能保证 IP 数据报准确到达接收端,它只承诺尽最大努力交付。IP 模块一旦检测到数据报发送失败,就通知上层

2022-01-17 00:39:07 6832 4

原创 HTTP 常用响应状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。

2022-01-12 08:45:00 381 8

原创 OSI 七层模型详解

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是 ISO(国际标准化组织)组织在1985年研究的网络互连模型。

2022-01-09 23:09:35 8603 17

原创 HTTP 相关面试题汇总

我这里整理了几个比较经典的 HTTP 面试题,希望大家看后有所收获。但是面试题只能让我们知其然,学习不仅仅是为了面试,所以我们还要做到知其所以然,强烈建议大家先看下 以下几篇 HTTP 系列文章。数据在网络中如何传输的当我们在浏览器访问某个网址时,这背后会发生什么呢?一文了解 HTTPHTTP 报文详解为什么 HTTPS 比HTTP 更安全?HTTPS如何保证数据传输安全性相信你看完这几篇文章后再来看下面这些面试题,会更能理解整个 HTTP 知识点,这样即使你没有看我这归纳的几篇面试题,也可以

2022-01-05 23:40:02 1541

原创 为什么 HTTPS 比 HTTP 更安全?HTTPS 如何保证数据传输安全性

大家好,我是蛋蛋。HTTP 和 HTTPS 在许多网站都有用到,但是现在都是极力倡导使用 HTTPS ,究其原因就是 HTTP 它不是安全的,在数据传输过程中会遭到黑客窃取,本篇文章会先讲解 HTTP 缺点,然后再讲解 HTTPS 是如何解决这些问题来保证安全的。HTTP 缺点通信使用明文(不加密),内容可能会被窃听HTTP 本身不具备加密的功能,因此其在通信过程是使用明文方式发送的。这种方式就有可能造成通信过程中信息会被破解获取。例如一群????佩奇在路上坐着敞篷大货车,路过的人一下就能看到这车

2022-01-04 20:30:00 11714 17

原创 HTTP 报文详解

HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。 HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本。请求报文HTTP 请求报文由请求行、请求头、空行和请求包体(body)组成。如下图所示:真实示例:GET / HTTP/1.1     Host: www.baidu.comConnect

2021-12-26 23:07:26 9335 2

原创 一文了解 HTTP

诞生时刻1989年,任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。基于这个构想确立了三项技术:URI: 统一资源标识符,作为互联网资源的唯一身份HTML:超文本标记语言,描述超文本文档。HTTP:超文本传输协议,用来作为文档传输的协议。蒂姆把这个系统称为 “万维网” (World Wide Web),也就是我们现在所熟知的 Web 。HTTP 于 1990年问世。在90年代初期,网络上绝大

2021-12-26 23:05:58 2524

原创 数据在网络中如何传输的

数据传输的整个过程总结为四个词就是创建、连接、发送、断开。每个交互过程都会进行详细说明,耐心往下看哦。交互过程如下图所示:套接字如何创建的协议栈内部结构如上图所示,整个请求交互过程分为了几个部分,首先最上层就是应用程序,接着往下是 Socket 库,这里面的解析器我在x x x 文章中有介绍过,有不太了解的可以先看看。再下面就是操作系统的内部了,这里面就包括了协议栈,协议栈上半部分为 TCP 和 UDP ,它们都是负责数据的收发,

2021-12-07 23:43:36 4537 4

原创 【跟着小蛋刷算法】双指针题型总结,学完本篇文章,双指针的题型都能拿下

一念花开,一念花落。一念放下,万般自在。多点时间努力,少点功夫矫情,要知道,前半生就算再美,后半生也要靠智慧和钱生活。哪怕你是对的,也不用非要证明别人是错的。对聪明人来说,解释是多余的,而对于蠢人来说,解释是不够的。所以,终归没有必要去解释什么。只做最好的自己。前言双指针解法在链表中尤为常见,通过双指针我们可以很快速的解决一些链表相关问题,例如查找链表节点,环形链表等相关题型。本文罗列了算法中基本全部的关于链表的双指针题型,学习完本文,再有这种题型必定手到禽来。删除链表的倒数第 k 个结点 Le.

2021-12-01 21:54:13 428

原创 当我们在浏览器访问某个网址时,这背后会发生什么呢?

当我们向浏览器输入网址后会发生什么呢,大家有没有想过,这背后有着什么神奇的事情发生,今天,蛋蛋我就一层一层为大家揭秘浏览器背后的故事。本文会从如何生成 HTTP 消息展开,接着介绍 DNS 服务器是怎么帮我们查询 IP 地址的,最后介绍协议栈最终是怎么把消息发送出去的,文章很长,你要忍住。一、生成 HTTP 请求消息1.1 解析 URL网址,其实应该叫 URL 。一般网址都是以 “http://" 开头,但也不乏

2021-11-29 22:43:36 1314

原创 Redis主从搭建及主从复制原理详解

干货预警来了,本篇文章首先会给大家讲解主从复制如何搭建,然后详细介绍主从复制原理,耐心看完,你会收获满满。搭建主从复制首先修改主节点配置文件daemonize yes //开启守护线程logfile "6379.log"dbfilename "dump-6379.rdb"protected-mode no //关闭代表外部网络可以直接访问,开启需配置bind ip或者访问密码port 6379b

2021-11-16 23:15:04 844 2

原创 【跟着小蛋刷算法】 什么是堆?如何实现堆排序

概念堆可以理解为是一种特殊的树,只要满足以下两个条件就可以称之为堆:是一个完全二叉树堆中每个节点值都大于等于或者小于等于其子树中每个节点的值完全二叉树的概念可能有的人有点忘了,这里做下简单描述:二叉树除了最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列。每个节点都大于等于子树中每个节点的值的堆,我们叫作“大顶堆”。每个节点值都小于等于子树中每个节点值的堆,我们叫作“小顶堆”。定义很简单,我来考

2021-11-16 23:13:21 518

原创 跟着小蛋刷算法系列:合并两个有序链表 LeetCode 21题

题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解题思路按照题目的描述,给定的两个链表各自本身是有序的,我们要将它合并成一个有序链表,也就是要把这两个链表合到一起重新排序得到最终的结果,这道题我提供了两种解法,非递归解法和递归解法。非递归解法首先自己实现一个单链表ListNode:public class ListNode<E> {  

2021-11-16 23:11:05 599

原创 面试官问我知不知道 MySQL 的锁,接下来的 10 分钟让他刮目相看

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」。锁的概念锁机制是用于管理对共享资源的并发访问。InnoDB存储引擎会在行级别上对数据上锁。数据库使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。lock 与 latchlatch 一般称为闩锁(轻量级的锁),因为其要求锁定的时间必须要非常短。在innoDB存储引擎中,latch可以分为mutex(互斥量)和rwlock(读写锁),目的是用来保证并发线程操作临界资源的正确性。lock的对象是事务,用来锁定

2021-11-05 23:29:50 134

原创 全网最通熟易懂的讲解: git rebase和git merge的原理和区别

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。前言我们在上篇文章你想知道的所有Git分支命令都在这中提到了git merge命令,可以将其中一个分支的代码合并到另一个分支中,其实还有另一种方法,通过 git rebase命令也可以实现,但是两者的实现方式还是有很大差异的,网上有很多文章都对其差异有讲解,但大多数说的都很模糊不够清晰,看的也是一知半解,如果一篇文章对读者而言做不到通熟易懂那就是对读者的不负责,本篇文章将使用最通熟易懂的语言让你彻底搞懂两者的差异。先说结论:

2021-11-05 23:29:05 665

原创 你想知道的所有Git分支命令都在这

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。git branch 分支名复制代码通过git branch 命令就可以快速创建一个本地分支,这个分支会基于当前提交对象创建一个指针。而这个命令只会创建一个分支,并不会自动切换到新分支中,本例中我们是处于master分支中。HEAD相当于一个标识,用来指向当前所在的分支分支切换要想切换分支,就需要使用gIt checkout命令//切换分支% git checkout testing​//查看分支% gi

2021-11-03 23:28:46 297

原创 互联网公司指南 上海篇: 字节跳动

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。大家好,我是不安分的小蛋。这是互联网公司指南专栏开篇之作,为什么我要写这个专栏?现在的我们再找工作的时候总会想提前了解自己向往的公司,但是苦于没有渠道,或者信息不全,无法真实了解最全面的企业情况,例如福利待遇,年终奖,面试,加班情况等。但这些恰恰是我们选择一个公司最重要的标准,为了让广大的程序员群体在选择公司时有更好的参考,我准备了这份互联网公司指南。信息的收集及整理可费了小蛋我不少时间,希望大家关注我,多多转发扩散,小蛋我感激不尽。互联

2021-11-01 08:30:00 16549

原创 一文彻底掌握MySQL事务(四大特性,四种隔离级别,七种传播行为)

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。事务四大特性原子性(Atomicity)原子性指整个事务是不可分割的工作单位。在事务中所有数据库操作都执行成功,才算整个事务成功。事务中任何一个sql语句执行失败,已经执行成功的sql语句也必须被撤销,数据库状态回到执行事务前的状态。一致性(Consistency)事务在执行之前和执行之后都必须处于一致性状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。例如转账操作,A有200元,B有100元,A转账100元给B,在转账

2021-11-01 08:30:00 1155

原创 让小程序完美支持Markdown,最详细教程来了

最近在做需要展示文章详情的功能,详情打算用Markdown展示,发现微信小程序在支持Markdown方面不是很友好,小蛋我无意中发现一个好用的组件,Twoxml,完美支持Markdown,下面就带大家手把手实现Markdown功能Towxml 介绍|Towxml 官网 github.com/sbfkcel/tow…Towxml是一个可将HTML、Markdown转为微信小程序WX

2021-10-09 16:01:24 2880 2

原创 Docker安装mysql,nginx

一、安装mysql搜索mysql可用版本docker search mysql可以看到这里有很多可用版本,这里我们取stars最高等版本进行安装安装mysql镜像docker pull mysql查看本地镜像docker images可以看到我们已经把mysql安装成功运行mysqldocker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql-p 3306:3306 映射容器服务的3306端口到宿主机的3

2021-09-28 09:00:00 237

原创 [Netty入门] 最简单的Netty应用程序实例

客户端和服务器之前的交互相对比较简单。在客户端与服务器建立连接之后,它会向服务器发送一个或多个消息。反过来,服务器也会将每个消息回送给客户端。接下来将从具体的实例代码来简单看下客户端和服务器具体是怎么交互的。

2021-08-19 22:59:44 1531 4

原创 [Netty入门]什么是Netty

Netty是基于Java NIO的异步事件驱动的网络应用框架。它封装了网络编程的复杂性,使用者无需关心如何进行复杂的网络调用,只需通过netty即可完成,从而让开发更简单便捷。Netty是目前最流行的NIO框架,许多框架的底层rpc都是用的Netty,例如Dubbo、Elasticearch。

2021-08-17 22:54:33 207

原创 【硬核Netty系列】IO多路复用底层原理详解,Java面试大厂必问

I/O多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。连起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接。

2021-08-16 06:34:47 1233

原创 [硬核Netty系列]什么是操作系统中断?

早期计算机各个程序只能串行执行、系统资源利用低。为了解决上述问题,人们就发明了操作系统,引入了中断机制,实现了多道程序的并发执行,提高了系统资源的利用率,中断是多程序并发执行的前提条件。

2021-08-15 10:55:45 967 1

原创 Java NIO 想彻底了解?最走心的NIO讲解带给你

NIO(New IO),它是一种同步非阻塞I/O模型,也是I/O多路复用的基础,在高并发,大量连接等场景有着比较明显的优势。NIO是一种基于通道和缓冲区的I/O方式,主要有三大核心组件:Channel(通道),Buffer(缓冲区), Selector(选择器)。当线程对数据进行操作时,先从Channel将数据读取到Buffer,或者从缓冲区将数据写入到Channel。Selector用于监听多个通道的事件,来通知连接打开,数据到达等操作,一个线程可以监听多个数据通道。

2021-08-10 22:25:09 549 3

原创 串的朴素模式匹配算法

串的朴素模式匹配算法说串的常用算法之前先了解下串,串的定义很简单,串就是由零个或多个字符组成的有限序列,又叫做字符串。串的存储结构串的存储结构可简单分为两种,用顺序存储或者链式存储。顺序存储可以理解为用数组来进行储存,链式存储就是用链表进行存储,这两者的特点在之前的文章有讲过,这里不再赘述。串的朴素模式匹配算法在日常工作大家都有一个很常见的操作,复制一句话或者一个词,然后在全文搜索下它们出现在文章的哪个地方,这种子串的定位操作通常称做串的模式匹配,模式匹配算是串中最重要的操作之一。这里举一个大

2021-05-29 21:25:58 1317

原创 玩转线程池

多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory。即便没有这样的情况,大量的线程回收也会给GC带来很大的压力。为了避免重复的创建线程,线程池的出现可以让线程进行复用。通俗点讲,当有工作来,就会向线程池拿一个线程,当工作完成后,并不是直接关闭线程,而是将这...

2019-11-11 09:24:39 153

原创 ThreadLocal源码分析

ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线程都可以通过其 get 或 set方法来访问自己的独立初始化的变量副本。ThreadLocal 实例是private static 类型,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。-------ThreadLocal类注释首先看一下ThreadLocal的部...

2019-11-05 13:58:50 163

原创 线程封闭之ThreadLocal和栈封闭

线程封闭当访问共享数据时,通常是要使用同步。如果要避免使用同步,就是不提供共享数据。如果仅在单线程中访问数据,就不需要同步,这种技术就叫做线程封闭,它是实现线程安全最简单的方式之一。当某个对象封闭在一个线程当中时将自动实现线程安全性,即使被封闭的对象本身它并不是安全的,实现线程主要有三种方式。...

2019-11-03 13:42:24 471

原创 CPU缓存与内存屏障解析

CPU缓存CPU缓存是位于CPU与内存之间的临时存储器,它的容量比内存小的多,但是交换速度比内存快得多。高速缓存主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度比内存快得多,这样会使CPU花费很长时间等待数据或者将数据写入内存,当CPU调用大量数据时,可以先从缓存中调用,从而加快读取速度。CPU多级缓存在CPU缓存出现不久,随着系统越来越复杂,高速缓存和主内存之间的...

2019-10-31 14:31:24 548

原创 数据库事务四大特性、隔离级别和七大传播行为

事务四大特性原子性(Atomicity)一个事务在执行过程中要么全部成功,要么全部失败一致性(Consistency)事务在执行之前和执行之后都必须处于一致性状态。例如转账操作,A有200元,B有100元,A转账100元给B,在转账前A,B总共有300元,转账后两者总和应该还是300元,这就是事务一致性。隔离性(Isolation)当多个事务同时执行一个操作时,为了保证各个事务之前不...

2019-01-17 09:48:08 1235

原创 TCP三次握手与四次挥手

TCP三次握手概念TCP即是传输层控制协议,TCP是主机对主机层的传输控制层协议,提供可靠的连接服务,采用三次握手确认建立一个连接。TCP连接6种标识SYN(synchronous):建立连接ACK(acknowledgement):确认PSH(push):传送FIN(finish):结束RST(reset):重置URG(urgent):紧急Sequence number:顺序号...

2019-01-09 21:25:46 149

原创 OSI七层模型

OSI概念osi 即开放式系统互联,总共有七层,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层各层功能物理层定义物理设备的标准,最小的传输单位是比特流,其主要的协议是IEEE 802.1A, IEEE 802.2到IEEE 802.数据链路层主要对物理层传输的比特流进行包装,检测包装数据传输的可靠性,将物理层接受的数据进行MAC(媒体访问控制)地址的封装和解封装,最小传...

2019-01-09 21:18:52 151

原创 自定义哈希表实现

哈希表概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key...

2019-01-03 17:06:38 1032

原创 平衡二叉树实现

实现平衡二叉树平衡二叉树概念平衡二叉树实现原理具体代码实现平衡二叉树概念在保持二叉树的基本原则外,任意结点左右子树高度差绝对值不超过1。平衡二叉树实现原理平衡二叉树相较于二叉搜索树会增加一个高度标识,用来标识每个结点的高度height,既而更方便的算出是否符合结点左右子树高度差balance绝对值小于等于1。每当插入一个结点,先检查是否因插入而破坏了树的平衡性,若是,则找出最小不平衡子树,...

2018-12-27 18:57:49 325

原创 Java equals方法详解

Object中的equals()object中的的equals方法用于比较两个对象是否相等,该方法源码如下:public boolean equals(Object obj) { return (this == obj); }对象均有内存地址和和其具体内容,而object中的equals方法是比较的两个对象内存地址是否相同,即obj1.equals(obj2)为tr...

2018-12-13 19:36:12 3700

原创 用链表和二叉搜索树实现简单的Set集合

使用链表实现Setjava中的Set集合方法很多,在这里我只实现其中的添加,删除,包含,判空以及获取大小这几种方法。手写链表具体实现用链表实现Set集合我们可以用java提供的相关链表来实现,但是为了追本溯源,我们在这里手写数据结构的链表,让大家深入理解链表完整代码实现:package Set;/** * Created by lirui on 2018/12/9. */publ...

2018-12-09 23:37:15 272

安卓记事本实例

简单安卓记事本实例,适合刚入门不久的新手学习,增加开发实践

2017-02-19

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

TA关注的人

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