自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (1)
  • 收藏
  • 关注

原创 原始套接字构建 TCP三次握手 及相关问题

原始套接字构建 TCP三次握手 及相关问题分析TCP、IP头部头部字段构建TCP伪首部结构体填充IP头部填充TCP头部计算校验和握手过程细节实现效果相关问题源码分析TCP、IP头部头部字段IP头部结构TCP头部结构熟悉计算机网络的同学对这些都已经很熟悉了,就不复述了。Tip: 为了结构清晰 分开的代码可能有一定逻辑性问题,请参照源码构建TCP伪首部结构体用于计算校验和struct udp_front //tcp(udp)伪首部结构体{ uint32_t srcip;

2021-01-11 16:40:53 1089 4

原创 MySQL的连接原理

以前一直有个疑惑,对于内连接使用WHER和JOIN有什么区别答案是没区别参考《MySQL是怎么运行的》连接原理循环嵌套连接(Nested-Loop Join)使用索引加快连接速度基于块的嵌套连接(Block Nested-Loop Join)循环嵌套连接(Nested-Loop Join)对于两表连接,驱动表只会访问一遍,但被驱动表却要被多次访问,具体积变取决于对驱动表执行单表查询后的结果集中的记录条数。对于内连接来说,选取哪个表为驱动表都没关系,而外连接的驱动表是固定的,也就是说左(外)连接.

2020-11-21 10:10:59 647

原创 B+树索引的使用

B+树索引的使用索引的代价B+树索引适用的条件全值匹配最左匹配原则匹配列前缀匹配范围值ORDER BYGROUP BY回表的代价覆盖索引如何挑选索引索引的代价索引虽好,但是不能够乱建。空间上的代价每个建立一个索引都需要建立一颗B+树,每棵B+树的每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,而一颗索引树由许多页组成…时间上的代价索引虽然让我们查询变得更为快速,我们都知道B+树每层节点都是按照索引列的值从小到大的顺序排序而组成双向链表。无论是叶子节点的记录,还是内节点的记录都是

2020-11-19 22:08:24 708

原创 InnDB是怎么存储数据的

只是做了简单的总结和简述,很多地方并没有那么详尽,参考书本《MySQL是怎么运行的:从根上理解MySQL》InnDB是怎么存储数据的InnDB页的记录结构COMPACT行格式其他行格式InnDB的数据页结构File HeaderPage HeaderFree Space(User Records Infimum+ supremum)Page DirectoryFile TrailerB+树 索引InnDB页的记录结构InnDB是一个将表中数据存储于硬盘中的存储引擎。与之区别的:Memory(存储于.

2020-11-18 20:53:24 519

原创 不同路径

题目地址:https://leetcode-cn.com/problems/unique-paths/考虑使用动态规划只能向下和向右移动dp[i][j] 表示到坐标(i,j)的路径条数。由于机器人从i = 0,j = 0出发,每次只能向下或向右移动在坐标为(0,j)的位置机器人要到达的话只有一条路径(一直向下);在所有坐标为(i,0)的位置,机器人要到达也只有一条路径(一直向右).而要到达任一位置(i,j)的路径条数,总是等于位置(i-1,j)的路径条数 + (i,j-1)的路径条数得:.

2020-10-19 14:23:26 79

原创 无重复字符的最长子串

题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/一旦出现出现次数,先考虑散列表;涉及子串,考虑滑动窗口。每向右移动一次就判断字符是否出现过,未出现则添加进set,否则结束while,计算最大值。在左指针向右移动时就剔除一个set中存储的值,可以优化至循环剔除到重复值的位置。class Solution { public int length.

2020-10-05 11:38:40 76

原创 最小路劲和

题目地址: https://leetcode-cn.com/problems/minimum-path-sum/submissions/经典DP的题目当左边和上边都不是矩阵边界时: 即当i != 0, j != 0grid[i][j] = Math.min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]);当只有左边是矩阵边界时: 只能从上面来,即当i = 0, j != 0​ dp[i][j] = dp[i][j -.

2020-09-28 14:02:04 78

原创 二叉树的最近公共祖先

题目地址: https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/submissions/终止条件:当到达叶子节点并未找到值则直接返回null当root等于p或q,直接返回root后序遍历返回值:当left和right同时为null的时候,说明无符合条件的值,返回ull当left和right同时不为null的时候,说明p,q分布在root的左子树和右子树中,返回root当left为.

2020-09-27 20:38:23 209

原创 剪绳子Ⅰ

题目:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/对于的正整数 n,当 n≥2 时,可以拆分成至少两个正整数的和。令 k 是拆分出的第一个正整数,则剩下的部分是 n−k,n−k 可以不继续拆分,或者继续拆分成至少两个正整数的和。由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。dp数组的含义: dp[i] 表示将正整数 i 拆分成至少两个正整数的和之后,这些正整数的最大乘积。边界条件: 0 不是正整.

2020-09-27 15:41:26 74

原创 盛最多水的容器

题目地址: https://leetcode-cn.com/problems/container-with-most-water/使用的方法:双指针法开始 l 指向数组的首位 ,r 指向数组末位。遍历过程中去移动 l和r指向的位置,直到 l == r 。容纳的水量是由两个指针指向的数字中较小值 * 指针之间的距离决定的。所以在移动指针的时候需要 移动 指向的值小的一端(虽然我们不知道移动之后下一个值是否会更小),遍历完所有值,遍历过程中尽可能的往让面积变大的方向走。最后的结果就是最大值.

2020-09-26 14:02:22 55

原创 把数组排成最小的数

题目: https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/此题求拼接起来的 “最小数字” ,本质上是一个排序问题。排序判断规则:设 nums 任意两数字的字符串格式 x 和 y若拼接字符串 x + y > y + x ,则 x > y;反之,若 x + y < y + x,则 x < y ;根据以上规则,套用任何排序方法对 nums 执行排序即可。class Sol.

2020-08-29 22:36:00 70

原创 数组中数字出现的次数 II

题目: https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/一个数组出现了3次,二进制位也会出现3次把所有的出现的三次的数字的二进制表示的每一位都分别加起来,那么每一位都能够被3整除我们把数组中所有的数字的二进制表示的每一位都加起来。如果某一位不能被3整除,那么只出现一次的那个数字的该位置一定为1。class Solution { public int singleNumber(.

2020-08-29 19:35:45 121

原创 礼物的最大价值

题目位置: https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/从棋盘的左上角开始拿格子里的礼物,并每次 向右 或者 向下 移动一格、直到到达棋盘的右下角。根据题目说明,易得某单元格只可能从上边单元格或左边单元格到达。DP的思想:局部最优 ->整体最优public int maxValue(int[][] grid) { int m = grid.length; int n = grid.

2020-08-29 12:06:25 81

原创 队列中的最大值

题目: https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/需要一个双端队列 作为辅助队列在每次入队时,如果 deque 队尾元素小于即将入队的元素 value,则将小于 value 的元素全部出队后,再将 value 入队;否则直接入队。LeetCode官方的例子:如果我们向队列中插入数字序列 1 1 1 1 2,那么在第一个数字 2 被插入后,数字 2 前面的所有数字 1 将不会对结果产生影响。因为按照队列的取出顺序,数字 .

2020-08-22 16:00:25 425

原创 顺时针打印矩阵

题目地址: https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/边界类型问题:考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。设置上下左右四个边界变量: //行 为下边界 int row = matrix.length - 1; //列 为右边界 int column = matrix[0].length - 1; int[] a.

2020-08-22 12:35:56 79

原创 矩阵中的路径

题目:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/这种路径的问题一般都是需要使用 DFS(深度优先遍历)分别遍历上下左右 四个方向dfs(i + 1, j, t + 1) || dfs(i - 1, j, t + 1) ||dfs(i, j - 1, t + 1) || dfs(i, j + 1, t + 1);递归终止条件:if(i < 0 || j < 0 || i &gt.

2020-08-08 16:18:30 88

原创 栈的压入、弹出序列

题目地址: https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/使用辅助栈的方式模拟进栈与出栈:发现与popped数组相同的数时,就将该数出栈,由于是栈的操作: 先进后出则: 在判断当相同数字 的时,前面进入该栈的数组必定是在popped数组(前提是符合栈的要求,否则栈最后不为null)后面的,所以循环判断后续的数字是否符合要求,符合要求则继续出栈。pushed = [1,2,3,4,5], popped = [4.

2020-08-08 13:24:50 217

原创 机器人的运动范围

题目地址: https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/使用深度优先搜索,去查找符合条件的点的个数上下左右(其实这题没必要搜索上左)dfs(i + 1, j) dfs(i - 1, j) dfs(i, j - 1)dfs(i, j + 1)终止条件:当搜索到的二维数组下标的位置越界 则终止当发现节点已经被搜索过则终止节点不符合题目条件则终止 if(i < 0 || j < .

2020-08-01 11:59:07 106

原创 最小的K个数

题目地址: https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/题目需要在无序的数组中查找出 最小的K个数,并且这K个数不要求有序输出所以我们只需要得到 小于等于第K+1大 K-1 的数复杂度分析: 因为我们是要找下标为k的元素,第一次切分的时候需要遍历整个数组 (0 ~ n) 找到了下标是 middle 的元素,假如 k 比 middle 小的话,那么我们下次切分只要遍历数组 (0 ~ k-1)的元素就行啦,反之如果 k 比 mid.

2020-07-25 17:40:19 91

原创 树的子结构

题目: https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/先序遍历树A的每个节点判断树A中是否包含有树BisSubStructure(A, B) 函数:特例处理: 当 树 A 为空 或 树 B 为空 时,直接返回 false ;返回值: 若树 B 是树 A 的子结构,则必满足以下三种情况之一,因此用或 || 连接;以 节点 A为根节点的子树 包含树 B ,对应 dfsJude(A, B);树 B 是 树 A 左子树 的子结构.

2020-07-18 23:11:48 261

原创 最长不含重复字符的子字符串

题目:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/使用Hash表+双指针的做法遇到相同的值,就从hash表中取出该值前一次出现的位置,做一次比较,保证值是最大的。public static int lengthOfLongestSubstring(String s) { //使用hash表来判断 Map<Character,Inte.

2020-07-18 19:24:40 91

原创 从上到下打印二叉树Ⅲ

题目地址:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/按题目的要求,需要我们偶数行按照从左到右的顺序打印,奇数行按照从右到左的顺序打印。对于这样的需要按照一定的顺序打印结果的时候,可以使用LinkedList作为一个双端的队列层次打印二叉树我们本来就习惯于从左到右打印。所以:从左到右打印: 把我们的数据从双端队列的首部依次插入,确保输出后顺序不变从右到左打印: 把我们的数据从双端.

2020-07-18 16:35:41 110

原创 二叉树的层序遍历

题目: https://leetcode-cn.com/problems/binary-tree-level-order-traversal/递归法(DFS): 递归的方法传入一个标记行数的参数numbers来判断行数。class Solution { List<List<Integer>> list = new ArrayList<>(); public List<List<Integer>> levelOrder(Tre.

2020-07-11 17:23:48 137

原创 二叉搜索树与双向链表

题目:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。由于是以可二叉搜索树,我们可以直接使用 中序遍历二叉树的中序遍历 void dfs(Node node){ if(node == null) return; dfs(node.l.

2020-07-11 14:50:06 81

原创 缓存穿透、雪崩、击穿

目录前言缓存穿透什么是缓存穿透会带来的问题怎么解决怎么选择方案缓存击穿什么是缓存击穿带来的问题如何解决缓存雪崩什么是缓存雪崩如何解决事前:事中:事后:前言我们平常的项目中多多少少都会使用到缓存,因为一些数据我们没有必要每次查询都查询数据库,对于高并发的项目,每次都查询数据库,对数据库是灾难性的!!!当我们查询一条数据的时候,先去查询缓存,如果有缓存就直接返回,如果没有才会去查数据库,然后返回。缓存穿透什么是缓存穿透正常情况下,我们去查询数据都是存在。那么请求去查询一条压根儿数据库中根

2020-06-13 10:42:43 189

原创 Redis实现分布式锁简述

目录前言:使用Redis构建锁分布式锁什么是分布式锁分布式锁需要具备哪些条件加锁API阻塞锁解锁总结前言:本文主要去分析用Redis实现分布式锁,如何完成一个合理的分布式锁。Redis使用WATCH命令来代替对数据进行加锁,因为WATCH只会在数据被其他客户端抢先修改的情况下通知执行了这个命令的客户端,而不会阻止其它客户端对数据的修改,即"乐观锁"。分布式锁是由不同机器上的不同Redis客户端进行获取和释放的。使用Redis构建锁Setnx key valuesetnx -> Se

2020-06-13 10:30:10 212

原创 Redis哨兵

目录作用与架构作用架构部署部署主从节点部署哨兵节点演示故障转移总结客户端访问哨兵系统代码示例客户端原理总结主节点的自动故障转移作用与架构作用Redis Sentinel,即Redis哨兵,在Redis2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。下面是Redis官方文档对于哨兵功能的描述:监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会

2020-06-13 10:19:42 1403

原创 Redis集群 主从复制

主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。主从复制的作用数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;负载均衡:在主从复制的基础上

2020-05-17 23:10:02 221

原创 Redis数据安全与性能保障

Redis持久化RDB(快照持久化)RDB文件的载入一般情况是自动的,redis服务器启动的时候如果检测到RDB文件的存在,那么redis会自动载入这个文件。RDB保存的文件名:dump.rdb(二进制文件)快照持久化是不可靠的,如果出问题,那么Redis将丢失最近一次创建快照之后写入的所有数据,会自动读取dump.rdb文件中的数据redis.conf 配置# 触发自动保存快照# save <seconds> <changes>save 900

2020-05-17 22:57:08 359

原创 Redis特性与优势

常用的分布式缓存的对比常用的分布式缓存包括Redis、Memcached和阿里巴巴的Tair(见下表),因为Redis提供的数据结构比较丰富且简单易用,所以Redis的使用广泛。数据类型Redis一共支持5中数据类型,每种数据类型对应不同的数据结构,有简单的String类型、压缩串、跳跃表等。跳跃表是比较新型的数据结构,常用于高性能的查找,可以达到 log2N 的查询速度,而跳跃表相对于红黑树,在更新时变更的节点较少,更易于实现并发操作。Memcache只支持对键值对的存储,并不支持其他数据结构。

2020-05-17 22:36:15 762

原创 Redis快速入门

一直是写在有道云笔记上的,想转化成博客 发现只能手动复制…redis配置的一些坑:redis默认不允许外界访问,需要配置https://blog.csdn.net/jmkweb/article/details/90553146https://blog.csdn.net/pingweicheng/article/details/81086466管理redishttps://www.cnblogs.com/awakenedy/articles/9156086.htmlhttps://blog.c

2020-05-17 22:08:54 262

原创 SpringBoot自动装配的理解

run方法// ...public ConfigurableApplicationContext run(String... args) { //监控任务执行时间 StopWatch stopWatch = new StopWatch(); stopWatch.start(); //创建应用上下文 ConfigurableApplicationContext context = null; //用来记录关于启动的错误报告

2020-05-10 18:43:52 333

原创 深入了解HashMap原理

参考:https://blog.csdn.net/swpu_ocean/article/details/88917958https://www.bilibili.com/read/cv5227300只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用 ConcurrentHashMap。但是为什么HashMap是线程不安全的呢?为什么不用Hashtable呢?咱...

2020-03-23 12:03:08 170 1

原创 设计模式一(单例模式、工厂模式)

简介23种设计模式 主要类别如下:创建型:创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。工厂模式、单例模式、生成器模式、原型模式结构型:用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式adapter、桥接模式bridge、组合器模式component、装饰器模式decorator、门面模式、...

2020-03-21 19:38:35 128

原创 计算机网络知识总结

概述网络的网络网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。互联网服务提供商互联网服务提供商(Internet Service Provider),简称ISP,指的是面向公众提供下列信息服务的经营者:一是接入服务,即帮助用户接入Internet;二是导航服务,即帮助用户在Internet上找到所需要的信息;三是信息服务,即建立数据服务系统,收集、加工、存储...

2020-01-22 20:57:57 587

原创 计算机网络常见面试题

HTTP1与HTTP2的主要区别Web 性能的终极目标是减少到用户端的延迟,让用户能够尽快的打开前端网页并进行相关交互。尽可能发送少的数据给服务器,从服务端下载尽可能少的数据,尽可能减少往返 (Round Trips) ,客户端与服务器无论是哪一边,额外的数据流都会带来额外的延迟开销,与此同时也更容易出现拥塞和丢包问题,这无疑严重影响了性能。 多余的 Round Trip 同样会增加延迟,尤其...

2020-01-21 20:30:51 479

转载 MapReduce之间的嵌套应用

参考:https://blog.csdn.net/u010521842/article/details/75042771 感谢博主多个MapReduce之间的嵌套在Coding过程中发现,大多数时候需要使用到MapReduce的嵌套运行在网上搜了好久才找到详细合适的方案,记录下来。根据log日志计算log中不同的IP地址数量是多少字段使用Tab分割实现方法任务分为两个MR过程,...

2020-01-16 23:03:02 210

原创 多线程-线程安全的类

一、HashMap和Hashtable的区别HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式区别1:HashMap可以存放 nullHashtable不能存放null区别2:HashMap不是线程安全的类Hashtable 是线程安全的类二、StringBuffer和StringBuilder的区别StringBuffer 是线程安全的String...

2020-01-16 11:15:25 176

原创 java中的全局变量、局部变量与static

java中的变量类型有:类变量:独立于方法之外的变量,用 static 修饰。实例变量:独立于方法之外的变量,不过没有 static 修饰。局部变量:类的方法中的变量。比如:public class Variable{ static int allClicks=0; // 类变量 String str="hello world"; // 实例变量 pu...

2020-01-16 11:15:13 167

原创 Java中equals和==的区别

一、对象类型不同1、equals():是超类Object中的方法;2、==:是操作符.二、比较的对象不同1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等;2、==:用于比较引用和比较基本数据类型时具有不同的功能.三、运行速度不同1、equals():没有 = = 运行速度快。2、= =:运行速度比equals()快,因为==只是比较引用。equals()和...

2020-01-15 10:45:27 155

javaweb环境搭建

linux系统中tomcat mysql jdk环境的搭建,希望能给大家带来帮助

2018-12-12

空空如也

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

TA关注的人

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