自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法归纳【数组篇】

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果A[i] * A[i] >= A[j] * A[j] 那么result[k–] = A[i] * A[i];如果A[i] * A[i] < A[j] * A[j] 那么result[k–] = A[j] * A[j];输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

2024-03-07 00:57:08 1263

原创 Redis缓存【重点】

缓存异常会面临的三个问题:缓存雪崩、击穿和穿透。其中,缓存雪崩和缓存击穿主要原因是数据不在缓存中,而导致大量请求访问了数据库,数据库压力骤增,容易引发一系列连锁反应,导致系统奔溃。不过,一旦数据被重新加载回缓存,应用又可以从缓存快速读取数据,不再继续访问数据库,数据库的压力也会瞬间降下来。因此,缓存雪崩和缓存击穿应对的方案比较类似。而缓存穿透主要原因是数据既不在缓存也不在数据库中。因此,缓存穿透与缓存雪崩、击穿应对的方案不太一样。

2024-03-04 11:56:11 1174

原创 Redis高可用性【重点】

参考链接。

2024-03-04 10:54:42 902

原创 redis五大基础类型【重点】

以下是Redis中string的主要特点和用法:存储字符串数据: string类型可以存储任意长度的字符串数据,例如文本、JSON等。存储整数和浮点数: string类型还可以存储整数和浮点数数据。当存储整数时,Redis会对整数进行特殊处理,可以对整数进行自增、自减等操作。当存储浮点数时,Redis会以字符串形式存储,并支持对浮点数进行加减乘除等数学运算。

2024-03-02 01:03:53 1104

原创 MySQL锁机制【重点】

next-key lock (记录锁+间隙锁)

2024-03-01 00:32:03 581

原创 什么是回表、索引覆盖、索引下推【重点】

参考链接【1】【2】【3】【4】【5】要知道什么是回表、索引覆盖、索引下推,首先大概理解B+树。

2024-02-29 16:56:56 825

原创 MVCC【重点】

参考链接1、数据库为什么要有事务?【为了保证数据最终的一致性。2、事务包括哪几个特性?【原子性、隔离性、一致性、持久性。3、事务的并发引起了哪些问题?事务并发会引起【脏读、重复读、幻读】问题。4、怎么解决事务并发出现的问题?进行事务隔离,针对不同的并发问题,设置不同的的事务隔离级别【读未提交,读提交,重复读,序列化】。5、数据库通过什么方式保证了事务的隔离性?通过【加锁】来实现事务的隔离性。6、频繁的加锁会带来什么问题?

2024-02-28 13:07:29 1451

原创 mysql的隔离级别,和实现

参考链接。

2024-02-26 00:05:46 1202

原创 golang的map是如何扩容的【重点】

需要注意的是,map 的扩容操作可能会导致一些性能开销,因为它涉及到重新计算哈希值和重新分配内存等操作。如果能够预先估计 map 的最大容量,可以在创建 map 时提供一个合适的初始容量,以减少扩容操作的次数,提高性能。Go 语言中的 map 在扩容时,会重新分配更大的内存空间,并将原有的键值对重新哈希到新的内存位置。Go 语言会释放原有的内存空间,并更新 map 的相关属性,例如容量和哈希桶的指针等。Go 语言会分配一个更大的内存空间,新的内存空间的大小通常。(具体的扩容策略可能会有一些调整)。

2024-02-25 11:29:33 481

原创 golang的map是不是并发安全的?怎么保证安全?

参考链接map 的并发不安全主要是因为无锁机制: map 的底层数据结构是一个哈希表,当多个 Goroutine 并发地对 map 进行读写操作时,可能会导致数据竞争(DataRace)。因为 map 没有内置的锁机制来保护并发访问,所以在并发读写时可能会造成数据不一致或损坏。非原子操作: 尽管 map 的操作看起来是单个的语句,比如 m[key] = value 和 delete(m,key),但实际上它们都不是原子操作。

2024-02-25 11:02:10 812 2

原创 切片和数组的区别【概括】

切片(Slice)和数组(Array)是 Go 语言中两种不同的数据结构,它们有着以下几点区别:长度和容量传递和拷贝底层数组。

2024-02-25 10:22:18 173

原创 golang中make和new的区别

参考链接在Go语言中,,区别:分配内存的区别返回类型的区别初始化的区别。

2024-02-25 09:55:37 671 1

原创 什么时候需要 / 不需要创建索引?

参考链接所以,索引不是万能钥匙,它也是根据场景来使用的。

2024-02-16 07:57:37 765

原创 redis中key到了过期时间怎么删除

这个问题主要考察的是面试者对Redis的key的过期策略和内存淘汰策略是否了解。主要分为主动删除和被动删除。

2024-02-15 00:35:35 656

原创 出现慢查询怎么优化?【重点】

通过以上优化步骤,可以有效地减少慢查询的出现,并提高数据库的性能和稳定性。需要注意的是,优化查询是一个持续的过程,需要不断地监控和调整以适应不同的业务需求和查询负载。启用慢查询日志,收集慢查询的详细信息,例如执行时间、扫描的行数等。通过分析慢查询日志,可以找出频繁出现的慢查询,并确定优化的重点。根据查询的特点和频率,考虑对数据库的结构进行优化。定期进行数据库维护操作,例如表优化、索引重建、统计信息收集等,以确保数据库的性能保持在一个良好的状态。根据执行计划和慢查询的特点,尝试优化查询语句。

2024-02-15 00:21:21 288

原创 什么情况不满足最左匹配原则,为什么呢?

例如,索引列为 (a, b, c),但查询条件为 a = 1 AND b > 5,这种情况下索引无法直接匹配到范围查询的部分。总之,最左匹配原则在使用复合索引进行查询时是一个重要的优化原则,但在某些特定的情况下可能无法满足,导致索引无法被利用。例如,索引列为 (a, b, c),但查询条件只包含了列 b 或列 c,而没有列 a,那么最左匹配原则就不满足。例如,索引列为字符串类型,而查询条件中的列为数字类型,这种情况下索引无法直接匹配查询条件。,索引将不会被使用,从而导致索引失效。

2024-02-15 00:12:45 253

原创 mysql宕机了怎么恢复数据

修复 MySQL 服务器:如果 MySQL 服务器宕机是由于临时问题导致的,例如系统崩溃或资源耗尽,可以尝试重启 MySQL 服务器来修复问题。恢复备份数据:如果 MySQL 数据丢失或损坏,并且有可用的备份数据,可以使用备份数据来恢复。使用二进制日志(binlog)恢复数据:如果启用了二进制日志(binlog),可以使用 binlog 来恢复数据。使用redo log(重做日志)来恢复数据,重做日志是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;

2024-02-15 00:06:04 809

原创 MySQL中常见的几种日志类型【重点】

查询日志可以用于分析数据库的性能问题、优化慢查询以及审计数据库操作等。通常情况下,管理员可以根据自己的需求设置慢查询日志的阈值,以便于找出需要优化的查询语句,并对其进行性能调优。在MySQL中,有几种不同类型的日志,用于记录数据库的活动和操作,以便于故障排查、性能调优和数据恢复等目的。这些日志类型在MySQL中起着不同的作用,可以帮助管理员监控数据库的健康状态、优化性能和实现数据的安全备份和恢复。撤销日志记录了数据库引擎对事务进行的修改操作的逆操作,以便于在事务回滚或数据库崩溃时撤销事务对数据库的影响。

2024-02-14 23:43:36 1260 1

原创 如何保证幂等性【重点】

接口的设计应该遵循幂等性原则,即相同的输入应该产生相同的输出,并且不会产生副作用。例如,不要在订单创建接口中直接执行订单的创建,而是应该返回一个表示订单创建请求已接收的标识符,客户端可以使用该标识符查询订单的状态。在处理订单时,可以先获取订单的版本号或时间戳,然后在更新订单状态时检查该版本号或时间戳,以确保不会处理已经被其他请求修改过的订单。综上所述,通过使用唯一标识符、状态检查、幂等接口设计、乐观锁定和版本控制等方法,可以有效地保证订单管理系统的幂等性,从而避免重复操作和数据不一致的问题。

2024-02-14 23:24:00 336

原创 输出所有升序子序列(算法)(回溯)

使用了dfs算法,题解类似之提及的内容。

2024-02-14 23:10:33 348

原创 Go语言的GC

Go语言的垃圾回收器将内存对象分为几代,根据对象的年龄和存活时间来进行垃圾回收。通常,年轻的对象会更容易被回收,而老年对象则会经历更少的垃圾回收周期。这意味着垃圾回收器可以在程序继续执行的同时,对内存进行垃圾回收。尽管Go语言的垃圾回收器是自动运行的,但开发人员也可以通过调用runtime.GC()来手动触发垃圾回收。综上所述,Go语言的垃圾回收机制采用了并发标记清除算法和三色标记法,并结合了分代垃圾回收和逃逸分析等技术,以实现高效的内存管理和垃圾回收。Go语言的垃圾回收器使用了一种称为三色标记法的算法。

2024-02-14 15:44:07 762 1

原创 goroutine(协程)和线程的区别

总的来说,Goroutine 拥有更轻量级的调度和更高效的并发模型,以及更简单的通信和同步机制,使得它们更适合于编写高效的并发程序。

2024-02-14 15:29:30 228

原创 GMP怎么调度goroutine(重点)

GMP 是 Go 语言运行时(runtime)的。

2024-02-12 13:52:54 225

原创 有缓冲channel和无缓冲channel

缓冲 channel 和无缓冲 channel 是 Go 语言中。

2024-02-12 13:46:25 240

原创 golang select两个channel性能稳定,三个channel时性能会发生抖动,为什么?

因此,在编写使用select语句的代码时,需要考虑通道的负载情况以及系统的并发性能。通常情况下,使用有限的通道数量,并确保它们的负载大致相等,可以减少性能抖动的可能性。使用带有缓冲的通道可以减少对通道的频繁操作,而扇入/扇出模式可以将多个通道操作合并为一个操作,减少select 的使用次数。在只有两个通道的情况下,Goroutine 可以在两个通道之间轻松切换,这可以保持较为稳定的性能。,例如 CPU 时间和内存带宽。,当select语句中的通道数量增加时,可能会导致性能方面的变化,尤其是在高并发场景下。

2024-02-11 16:54:23 1115

原创 语言类型(静态语言、动态语言)

静态语言是在编译时进行类型检查的编程语言。在静态语言中,变量的类型在编译时就确定了,并且在编译过程中会进行类型检查,以确保程序的类型安全性。这意味着在静态语言中,变量的类型必须在编译时就明确指定,并且在编译时就会发现类型错误。

2024-02-05 12:19:33 185

原创 LeetCode-题目整理【12】:N皇后问题--回溯算法

下面这道题与上面的区别就是返回的结果,因此只需要将上面返回的结果,变成统计个数,即可解答下面这道题。其余解答过程一摸一样。对于byte、rune和string的区别,在初始化二维数组时要注意类型。

2024-01-27 16:23:42 574

原创 LeetCode-题目整理【11】:回溯算法

每次迭代,range 关键字会将字符串中的每个字符解码为一个 rune 类型的值,这样可以正确地处理 Unicode 字符。下面这些题目的解答,都使用到回溯算法解答,通过找到目标条件,满足之后就可以返回;Go 语言中的字符串实际上是一个不可变的字节切片,用于存储文本数据。,其中每个字符可能占用一个或多个字节,具体取决于所使用的字符编码。,减少调用递归的次数,减少时间。

2024-01-26 17:15:55 1149

原创 LeetCode-题目整理【10】:单词搜索

在回溯算法中,我们逐步构建解,并在每一步尝试不同的选择,如果当前的选择导致无法找到解,那么我们回溯到上一步并尝试其他的选择。虽然上述的代码过程是正确的,仅使用到DFS,和第一题的解法类似,但是超出了时间限制,因此需要减少遍历的时间,引入Trie树(前缀树)深度优先搜索(DFS)和回溯是两种常用的算法思想,它们在解决问题时有一些相似之处,但也有一些不同之处。回溯算法是一种解决问题的通用算法,它通过尝试不同的选择来找到解。因此下面这两道单词搜索的题目,因为是图的形式,因此使用DFS。回溯的特点是试错和撤销。

2024-01-26 00:13:18 970

原创 LeetCode-题目整理【9】:Trie树

下面这道题解答过程和 “实现 Trie (前缀树)” 的insert和search基本一样,主要区别在于查找单词时,多了条件:word 中可能包含一些 ‘.’ ,每个 . 都可以表示任何一个字母。

2024-01-25 21:51:02 1046

原创 TCP 异常断开连接【重点】

参考链接。

2024-01-24 19:03:14 1582

原创 LeetCode-题目整理【8】:罗马数字转整数、整数转罗马数字

【代码】LeetCode-题目整理【8】:罗马数字转整数、整数转罗马数字。

2024-01-23 21:12:05 863

原创 HTTP/1.1、HTTP/2、HTTP/3 基本概述

参考链接。

2024-01-23 15:49:19 1105

原创 LeetCode-题目整理【7】

【代码】LeetCode-题目整理【7】:加油站。

2024-01-23 11:01:13 437

原创 LeetCode-题目整理【6】:除自身以外数组的乘积

【代码】LeetCode-题目整理【6】:除自身以外数组的乘积。

2024-01-22 23:41:35 401

原创 HTTPS基本概念

这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;采用「混合加密」的方式的原因: 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。,然后服务端会向客户端颁发对应的公钥。如果客户端收到的信息,能被公钥解密,就说明该消息是由服务器发送的。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就。但是这还远远不够,还缺少身份验证的环节,万一公钥是被伪造的呢?在通信过程中全部使用。

2024-01-22 21:55:32 470

原创 HTTP 基本概念

双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给百度服务器,服务器再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。HTML就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的「小贴纸」,后续客户端请求服务器的时候,带上「小贴纸」,服务器就能认得了。服务器向客户端返回的消息,用于响应客户端的请求。

2024-01-22 21:07:28 1008

原创 当键入网址后,到网页显示,其间发生了什么

浏览器地址栏输入 URL,浏览器解析 URL,从而生成发送给 web 服务器的请求信息(例如 www.example.com)。**如果该域名没有被缓存,浏览器会向本地 DNS 服务器发送一个域名解析请求,以获取该域名对应的 IP 地址。浏览器查看浏览器缓存系统缓存路由缓存, 如有存在缓存, 就直接显示。如果没有, 接着第3步。

2024-01-22 19:24:39 888

原创 LeetCode-题目整理【5】:O(1) 时间插入、删除和获取随机元素

删除操作的重点在于将变长数组的最后一个元素移动到待删除元素的下标处,然后删除变长数组的最后一个元素。该操作的时间复杂度是 O(1),且可以保证在删除操作之后变长数组中的所有元素的下标都连续,方便插入操作和获取随机元素操作。为了满足插入、删除和获取随机元素操作的时间复杂度都是 O(1),需要将变长数组和哈希表结合,变长数组中存储元素,哈希表中存储每个元素在变长数组中的下标。

2024-01-22 11:05:46 821

原创 LeetCode-题目整理【4】:跳跃游戏

【代码】LeetCode-题目整理【4】:跳跃游戏。

2024-01-21 23:32:23 450

空空如也

空空如也

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

TA关注的人

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