自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在 WINDOWS CMD 使用 SCP 与 Linux 文件交互

在 WINDOWS CMD 使用 SCP 与 Linux 文件交互

2022-06-09 21:52:04 820 2

原创 Redis 跳表

文章目录基本概念动态查找的数据结构数组结构链表平衡树跳表的雏形跳跃链表的实现原理简单索引多级索引索引层数和索引节点密度跳表的复杂度分析时间复杂度分析跳表的空间存储跳表在 Redis 中的应用跳表随机层数的实现原理Redis 关于跳表的源码参考基本概念允许快速查询一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(log n),优于普通队列的O(n)。动态查找的数据结构可以作为查找数据结构的包括:线性结构:数组、链表非线性结构:平衡树数组结构缺点: 移动和删除时需要整体移

2022-05-25 21:21:06 2507

原创 Redis 速度快的原因

文章目录基于内存实现高效的数据结构SDS1. 字符串长度处理2. 内存重新分配3. 不需要处理二进制安全 '\0'双端链表1. 前后节点2. 头尾节点3. 链表长度压缩列表字典跳表合理的数据编码embstr 和 raw 的区别Redis 中 embstr 和 raw 编码的界限1. 结论2. 原因创建 stringObject 的逻辑合适的线程模型1. I/O多路复用模型2. 避免上下文切换3. 单线程模型Redis 的瓶颈参考基于内存实现由于是存储在内存中的数据库, 不会被磁盘 IO 影响到数据读写的

2022-05-25 21:00:23 791 2

原创 Redis 分布式锁简单解析

文章目录概念优秀分布式锁的特征分布式锁的实现方式最简单版本(互斥性)支持过期时间(互斥性, 安全性)加上 owner (互斥性, 安全性, 对称性)使用 Lua (检查和删除的原子性)可靠性如何保证容灾考虑主从容灾多机部署可靠性深究Network Delay(网络延迟)Process Pause(进程暂停)Clock Drift(时钟漂移)概念分布式锁就是分布式场景下的锁,比如多台不同机器上的进程,去竞争同一项资源,就是分布式锁。优秀分布式锁的特征互斥性: 只能有一个竞争者持有锁安全性:

2022-05-25 20:46:28 57

原创 Redis数据结构、持久化技术和三大问题

文章目录1. Redis 执行过程2. 缓存雪崩2.1 大量数据过期2.1.1 均匀设置过期时间2.1.2 互斥锁2.1.3 双 key 策略2.1.4 后台更新缓存2.2 Redis 故障宕机2.2.1 服务熔断或请求限流(发生故障后的方案)2.2.2 构建 Redis 缓存高可靠集群(发生之前就可以做的方案)2. 缓存击穿3. 缓存穿透3.1 非法请求限制3.2 缓存空值或默认值3.3 使用布隆过滤器判断数据是否存在4. Redis 的持久化技术 AOF 与 RDB4.1 AOF 日志4.1.1 概念4

2022-05-25 20:21:41 562 1

原创 Docker 容器化部署

概念docker是一个开源应用容器引擎基于 GO 语言实现开发者可以将他们的应用和依赖打包到一个轻量级, 可移植的容器中, 发布到任何流行的 Linux 机器上沙箱机制, 互相隔离性能开销很低安装(基于 centos7)下载安装 docker# yum 包更新到最新yum update# 安装需要的软件包, yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖的 yum install -y yum-utils de

2021-11-28 11:45:41 1954

原创 Python基础

文章目录思维导图运算符for else结构字符串切片列表列表推导器元组函数返回值参数传递缺省参数(默认参数)不定长参数函数形参的完整格式print中的 sep 参数拆包和组包类型的可变和不可变匿名函数自定义排序器面向对象封装类属性魔法方法`__init__``__str__``__repr__``__del__`析构函数魔法属性`__mro__``__dict__``__all__``__name__`继承子类调用父类中的被重写的方法多继承私有权限类对象 / 类属性类方法静态方法异常捕获异常打印异常打印所有

2021-10-31 21:59:19 98

原创 Blog 增加 SSL 认证 & 添加雪花 JS 特效

文章目录添加 SSL 认证,从 http 到 https原由申请证书宝塔 Nginx 配置 HTTPS修改 wordpress 配置其他问题添加雪花 JS 特效参考添加 SSL 认证,从 http 到 https原由http是超文本传输协议,信息是明文传输, https 则是具有安全性的 ssl 加密传输协议。出于安全性 + 防止广告的考虑下,决定还是顺应时代的潮流,更换成 https 。申请证书由于我是在阿里云购买的服务器,所以选择了阿里云进行证书申请阿里云控制台->产品与服务-&g

2021-10-27 20:09:38 68

原创 二叉树总结

二叉树的种类满二叉树一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树完全二叉树除了最底层的结点没有填满之外,其余每层的结点数量都达到最大值,并且最下面一层的结点都集中在该层最左边的若干位置,若最底层为第 h 层,则该层包含 1~2h 个结点堆就是一颗完全二叉树,优先队列就是就是一颗完全二叉树,同时保证了父子关系二叉搜索树左子树上的所有结点值小于根节点值,右子树上的所有结点值大于根节点值

2021-10-10 09:58:28 67

原创 旅游管理+物联网项目总结

文章目录简介技术栈开发流程数据库建表重难点Sql语句数据库遇到的问题com.mysql.jdbc.PacketTooBigExceptionMybatis主键插入自增监听器使用ServletContextAttributeListener属性监听器拦截器拦截器配置,登录拦截Vue前端在Vue中引入EChartsVue单个元素绑定多个事件 例如点击绑定多个事件方法Vue 中加载图片 public 和 src/assets 文件夹下的区别axios转换对象Boolean字段改变@DateTimeFormat 和

2021-07-03 00:17:22 166 4

原创 JS使用实例

文章目录js获取url参数编写函数使用实例js获取select下拉框的value以及文本内容参考js获取url参数编写函数function getQueryVariable(variable){ var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i<vars.length;i++) {

2021-06-25 22:51:58 63

原创 初见Vue

文章目录包资源管理器npm概述切换镜像源使用nrm方式切换镜像库使用cnpm方式安装Vue概述Vue安装初步使用双向绑定和事件处理Vue实例生命周期及钩子函数创建Vue实例模板和元素数据方法生命周期钩子函数指令插值v-textv-htmlv-modelv-onv-forv-ifv-showv-bind计算属性的使用watch基本和深度监控axios包资源管理器npm概述Node Package Manager,类似于 后端 的 maven,是一个node.js 的管理和分发工具,可以根据配置 pac

2021-06-25 22:51:08 93

原创 初见SpringBoot

文章目录SpringBoot简介SpringBoot快速入门SpringBoot简介便于搭建 基于Spring的工程 的脚手架,减少xml配置;帮助开发人员快速搭建大型的Spring项目,简化工程配置,依赖管理SpringBoot快速入门开发步骤:添加依赖(启动器依赖,SPrin)...

2021-06-25 22:50:02 52

原创 框架学习-SpringMVC

SpringMVC 简介步骤:导入spring-webmvc的依赖坐标配置Spring的前端控制器DispatcherServlet(相当于一个执行公共行为的Servlet)创建Controller类和视图页面使用注解RequestMapping配置类中业务方法的映射地址配置spring-mvc.xml配置文件,并在web.xml中加载要读取的spring-mvc配置文件测试SpringMVC执行流程图(粗略):SpringMVC执行流程(代码层面):Spring

2021-06-25 22:48:01 66

原创 框架学习-Mybatis

文章目录Mybatis简介什么是MybatisMybatis简介原始jdbc操作问题数据库连接的频繁创建和销毁带来的资源浪费sql语句在代码中耦合性太大,代码不易维护需要手动的将数据库查询的数据和实体数据进行对应字段的映射解决方案使用数据库连接池将sql抽取到xml配置文件当中使用反射、内省等底层技术,自动将实体与表进行属性和字段的自动映射什么是MybatisMybatis是一个基于Java的持久层框架可以隐藏 jdbc 繁杂的 api,只需要关注 sql 语句的编写,而不

2021-06-25 22:47:34 40

原创 简单使用Git上传代码到Github

文章目录第一次使用Git上传代码到Github步骤后续增加代码遇到的问题参考第一次使用Git上传代码到Github步骤先安装git进入当前项目目录右键点击 Git Bash heregit init指令,初始化当前项目目录ls -a 查看当前文件夹下的文件git add aaa/ 添加要提交的文件git add -A 添加目录下所有文件git commit -m "first code"提交第一份代码第一次提交代码需要配置邮箱和用户名使用命令git config --globa

2021-06-25 16:44:51 95 2

原创 框架学习-Spring踩坑记录

文章目录jdbc.properties配置文件的常见误区spring的@Resource注解在JDK8以上版本兼容问题IDEA下Maven配置出现Error : java 不支持发行版本5 或 Error:java: 不再支持源选项 5,请使用 6 或更高版本的解决办法参考jdbc.properties配置文件的常见误区配置jdbc.properties时,一定不要写成上图这种最好写成jdbc.username这种形式,因为windows环境下当你写成上面这种username的形式时,很容易就会导致

2021-06-02 22:55:46 108 1

原创 框架学习-Spring

Spring简介分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(反转控制)和AOP(面向切面编程)为内核能整合开源世界众多第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架优势:方便解耦:通过IOC容器,将对象间的依赖关系交给Spring控制,避免编码的过度耦合AOP编程的支持声明式事务支持:声明式灵活管理事务,减少不必要的事务管理的代码编写方便测试方便集成优秀框架降低对Java EE API的使用难度源码是学习典范Spring基本

2021-06-02 22:36:00 126 2

原创 软考真题笔记

操作系统DMA(Direct Memory Access) ,数据在主存和IO设备之间(即主存和外设)之间直接成块传送RISC(精简指令系统计算机)寻址方式比较单一,多寄存器寻址。单处理机系统,进程由运行转变为就绪,应该是时间片到绝对路径:从根目录\开始,如\My\user1\,相对路径:从当前目录的下一级开始user1\PV操作利用信号量机制,可以实现资源的互斥使用,PV操作使用不当容易引起思索,PV操作对应进程只能发送一个消息嵌入式操作系统从减少成本和缩短研发周期考虑,要求嵌入式操作系统能

2021-05-31 11:49:06 569

原创 《Java核心卷I》笔记:异常、断言和日志

本博客只用于个人查漏补缺文章目录处理错误异常分类声明检查型异常如何抛出异常创建异常类捕获异常捕获单个异常捕获多个异常再次抛出异常与异常链finally子句try-with-Resources语句(Java 7)分析堆栈轨迹元素异常使用技巧断言启用和禁用断言日志基本日志高级日志处理错误异常分类所有异常都是由Throwable继承而来,其下有两个分支 Error 和 ExceptionError 类层次结构描述了 Java运行时系统内部错误和资源耗尽错误,这种错误一般不能抛出,很少出现Excpt

2021-05-26 19:54:51 54 9

原创 《Java核心卷I》笔记:接口、lambda表达式与内部类

本博客只用于个人查漏补缺文章目录接口接口的概念接口的属性静态与私有方法默认方法对象克隆lambda表达式语法函数式接口方法引用构造器引用变量作用域内部类使用内部类访问对象状态内部类的特殊语法规则内部类与编译器局部内部类由外部方法访问变量匿名内部类双括号初始化静态内部类代理类创建代理对象代理类的特性接口接口的概念接口中所有方法自动为 public 方法,定义接口时,不必提供关键字 public接口可以定义常量接口没有实例字段JAVA8之前,接口中不能实现方法,之后可以实现接口时,必须把方法默

2021-05-24 19:53:50 48 3

原创 idea快捷键以及其他配置

个人常用键修改Add Selection for Next Occurrence将下一个查找匹配项添加到选择默认:Alt + J习惯:Ctrl + DDuplicate Line or Selection重复的行或选择,复制当前行到下一行默认:Ctrl + D习惯:Alt + DRedo取消撤回,重做默认:Ctrl + Shift + Z习惯:Ctrl + YDelete Line删除当前行默认:Ctrl + Y习惯:Alt + YRename (File)重命名(文件

2021-05-24 12:28:10 117 1

原创 栈与队列总结

基础知识Java中的栈一般用 Deque 实现,因为stack有设计上的缺陷,官方建议使用 DequeDeque的全称为:double ended queue(双端队列):Deque 有三种用途普通队列双端队列堆栈一般实现Deque使用 ArrayDeque 或者 LinkedList ,根据增删多还是查询多来决定使用那个实现,如果是增删多,使用 LinkedList 更加高效,如果是查询多,使用ArrayDeque 更高效双端队列两端访问元素的方法,提供插入,删除和检查元素方法

2021-05-21 16:15:57 180

转载 Java中遍历map的几种方式

初始化Map<Integer, Integer> map = new HashMap<>();遍历 key 或 valuefor (Integer key : map.keySet()) { System.out.println(key);}for (Integer value : map.values()) { System.out.println(value);}keySet遍历所有 key 和 valuefor (Integer key : map.k

2021-05-20 19:41:31 78

原创 《Java核心卷I》笔记:继承

本博客只用于个人查漏补缺文章目录类、超类、子类子类构造器继承层次理解方法调用阻止继承:final类和方法抽象类访问控制修饰符小结Object:所有类的超类Object类型的变量equals方法java.util.ArrayshashCode方法泛型数组列表对象包装器与自动装箱参数数量可变的方法反射Class类类、超类、子类子类构造器使用super关键字调用构造器的语句必须是子类构造器的第一条语句子类的构造器没有显示的调用超类的构造器,将自动的调用超类的无参构造如果超类没有无参构造,并且在子列的

2021-05-17 23:34:23 34

原创 KMP算法

基础知识文本串:aabaabaaf(长度m)模式串:aabaaf(长度n)时间复杂度:O(m * n)解决问题文本串中是否有模式串原理过程依赖于前缀表的特性前缀:一个串中包含第一个字符,不包括最后一个字符的所有子串例如:aabaaf的前缀包括,a, aa, aab, aaba, aabaa后缀:一个串中包含最后一个字符,不包含第一个字符的所有子串例如:aabaaf的后缀包括,f, af, aaf, baaf, abaaf求出最长相等前后缀:对于aabaaf他的所有子串最

2021-05-17 15:51:03 33

原创 哈希表总结

理论基础存储实现:(哈希表的底层是数组)实现哈希表的两种方法:1、数组+链表2、数组+红黑二叉树主要用途:快速判断一个元素是否出现在集合中查找时间复杂度:一般是O(1),极端情况下哈希碰撞造成的O(n)hash表一般都会将要查找的值存在哈希表内,查询的时候直接通过引索查询即可将值映射到哈希表上的这个过程就 使用到了 哈希函数哈希函数一般通过 hashCode 将 值 转化为引索存入 ,即将 值(传入的key) 映射到hash table 上如果 值 的总数比 hash tabl

2021-05-10 20:24:54 45

原创 链表总结

理论基础种类分为单链表,双链表,循环链表(可以解决约瑟夫环问题)链表的存储方式:内存中随机分布,使用指针域链接各个结点链表的定义Javaclass ListNode { int val; ListNode next; ListNode (int x) { this.val = x; next = null; }}C++struct ListNode { int val; ListNode *next; ListNode (int x) : val(x), next

2021-05-07 15:25:03 38

原创 《Java核心卷I》笔记:对象与类

面向对象程序设计概述面向过程:先确定如何操作数据,再决定数据的结构。适用于小规模问题面向对象OOP:先决定数据的结构,在考虑操作数据的算法。适用于大规模问题类类是构造对象的模板或蓝图封装是处理对象的一个重要概念,就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式实例字段:对象中的数据数据方法:操作数据的过程对象的状态:特定对象有一组特定的实例字段值,这些值的集合就是这个对象的当前状态。OOP原则:封装:绝对不能让类中的方法直接访问其他类的实例字段扩展:可以通过扩展其

2021-05-06 13:16:20 40

转载 异或的性质与应用

定义异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。性质1、交换律2、结合律(即(ab)c == a(bc))3、对于任何数x,都有xx=0,x0=x4、自反性 A XOR B XOR B = A xor 0 = A自反性应用举例异或运算最常见于多项式除法,不过它最重

2021-05-06 13:15:09 188

原创 二分法:根据mid的值将待搜索区间分为两个部分

主要思路定义target在左闭右闭区间内,即在 nums[left…right] 里查找 target循环条件写成while(left < right),在只分两个区间讨论的情况下,循环退出之后一定有left == right根据nums[mid]所在区间把待搜索区间分为两个部分:存在目标元素的区间 和 一定不存在目标元素的区间将会有两种分法:例如,mid在在左边区间,那么区间就分为[left … mid] 与 [mid + 1… right]两部分,右左边界分别为right =

2021-04-24 22:26:20 148

转载 后端list集合中的数据传递到前台HTML中显示(表格形式)

一、HTML页面通过ajax发送http请求前端有个普通的HTML页面,如下。页面引入了jquery,页面有个表格通过ajax发送请求window.onload(function requestData(){ $.ajax({ url: "要访问的地址", type: "post", dataType: "json", success: function(data){ /*这个方法里是ajax发送请求成功

2021-04-22 21:19:30 2081 1

原创 dp:回文子串,回文子序列

回文子串https://leetcode-cn.com/problems/palindromic-substrings/给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。思路法1:暴力,遍历区间起始位置和终止位置,判断是否为回文串,时间复杂度O(n^3)法2:dpdp[i][j]表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。推导分情

2021-04-20 20:54:56 180

原创 dp:子序列,最长递增子序列,最长连续递增子序列,最长重复子数组,最长公共子序列

最长重复子序列https://leetcode-cn.com/problems/longest-increasing-subsequence/给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长

2021-04-20 16:10:26 104

原创 dp:编辑距离

判断子序列https://leetcode-cn.com/problems/is-subsequence/给定字符串 s 和 t ,判断 s 是否为 t 的子序列。思路此题相当于只有删除操作的编辑距离dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。if (s[i - 1] == t[j - 1])t中找到了一个字符在s中也出现了if (s[i - 1] != t[j - 1])相当于t要删除元素,继续匹配dp[i]

2021-04-19 22:56:45 73

原创 双指针:快慢指针,滑动窗口

快慢指针26. 删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路使用两个指针进行遍历数组i 指针指向要返回位置的下一个,另一指针 j 遍历整个原数组只有当 i 和 j 指向的数不同时,长度加一,即 i++,并将 j 指向的数存入要返回的数组长度中代码public int removeDuplicates(i

2021-04-19 11:24:16 77

原创 dp:股票系列I II III IV 含冷冻期 含手续费

买卖股票的最佳时机https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5

2021-04-12 20:23:50 137

原创 dp:打家劫舍123,环形数组,树形dp

打家劫舍198.打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:

2021-04-07 21:31:10 120

原创 关于时间复杂度

时间复杂度基本概念什么是大O:大O是用来表示上界的,用它当做算法最坏的情况的运行时间上限,即对任意数据输入的运行时间的上限O(n^2)的算法为什么有时候比O(n)的算法更优?在决定使用算法时,不是时间复杂度越低越好,因为简化后的时间复杂度忽略了常数项,需要考虑数据规模,如果数据规模很小,有时候O(n^2)甚至比O(n)要好(在有常数项的时候)如:O(5n^2) 和O(100n) 在n<20之前,O(5n ^2)比O(100n)要快...

2021-04-07 11:45:23 724

原创 背包总结:01背包,完全背包,多重背包

不同背包定义01背包:每个物品数量唯一完全背包:每个物品数量无限多重背包:不同物品数量不同解题思路确定是否为背包问题,即有物品重量,价值,背包容量确定背包容量,每个 物品的重量,价值确定 物品数量/背包类型 为 1(01背包)、无限(完全背包)确定题目问题,找到对应递推公式,初始化、确定遍历顺序特判递推公式能否装满背包(最多能装多少):dp[j] = max(dp[j],dp[j-nuims[i]]+nums[i])如:石头碰撞(最后剩下石头数),分割等和子集(分割两个子串使其

2021-04-06 21:52:12 193

空空如也

空空如也

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

TA关注的人

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