- 博客(219)
- 收藏
- 关注
原创 【Mac Charles 抓包 iPhone Https】
电脑配置:MacBook M2由于M2的架构不同,这里我们需要选择Beta版本的。安装时会弹出授权提示,点后面的授权按钮就行了。这里我们同意一下即可。
2025-02-17 16:00:33
1233
原创 自定义代码如何打包以容器的形式运行
但是SpringBoot的打包会因为网络(不通畅),而导致失败,速度很慢。有些东西如果需要创建卷映射的话,直接基于这个不太方便。因为这个方案不需要显式dockerFile,其有一个隐藏的dockerFile,导致其自定义程度不高。默认的打包方式有时候可能会不符合预期。所以还是需要显式指定DockerFile,那不如用下面这个插件,自定义程度更高一点。
2025-02-08 10:22:34
566
原创 【数据库——MySQL——高性能优化规范建议】
除非有特别的原因使用 NULL 值,应该总是让字段保持 NOT NULL。索引 NULL 列需要额外的空间来保存,所以要占用更多的空间;进行比较和计算时要对 NULL 值做特别的处理。
2024-11-22 16:44:52
1430
1
原创 【数据库—MySQL—锁和MVCC】
事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账 1000 元,这个转账会涉及到两个关键操作,这两个操作必须都成功或者都失败。事务会把这两个操作就可以看成逻辑上的一个整体,这个整体包含的操作要么都成功,要么都要失败。这样就不会出现小明余额减少而小红的余额却并没有增加的情况。
2024-11-21 13:22:23
1361
1
原创 【数据库—MySQL—索引】
索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。BTree 索引MySQL 里默认和最常用的索引类型。只有叶子节点存储 value,非叶子节点只有指针和 key。存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 B+Tree,但二者实现方式不一样(前面已经介绍了)。哈希索引。
2024-11-20 19:06:49
1177
原创 【数据库——SQL语法基础】
数据定义语言(Data Definition Language,DDL)是 SQL 语言集中负责数据结构定义与数据库对象定义的语言。DDL 的主要功能是定义数据库对象。DDL 的核心指令是。
2024-11-20 19:06:33
953
原创 【系统设计——认证授权——SSO】
SSO 英文全称 Single Sign On,单点登录。SSO 是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。例如你登录网易账号中心(https://reg.163.com/ )之后访问以下站点都是登录状态。网易直播 https://v.163.com网易博客 https://blog.163.com网易花田 https://love.163.com网易考拉 https://www.kaola.com。
2024-11-19 10:37:20
1164
原创 【数据库——数据库基础】
NoSQL(Not Only SQL 的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。并且,NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性,旨在提供可扩展的高可用高性能数据存储解决方案。NoSQL 数据库也可以存储关系型数据—只是它们与关系型数据库的存储方式不同。NoSQL 数据库代表。
2024-11-19 10:37:01
1024
原创 【系统设计——认证授权——JWT】
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,JWT 更符合设计 RESTful API 时的「Stateless(无状态)」原则。并且,
2024-11-13 10:31:43
697
原创 【Java面试——集合——常见的数据类型】
ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。ArrayList 继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。List : 表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问。
2024-11-13 10:31:27
703
原创 【系统设计——基础知识——Java命名规则】
驼峰命名法应该我们最常见的一个,这种命名方式使用大小写混合的格式来区别各个单词,并且单词之间不使用空格隔开或者连接字符连接的命名方式。
2024-11-12 13:47:08
288
原创 【计算机基础——数据结构——AVL平衡二叉树】
在结点Root的 左结点(L) 的 右子树(R) 上做了插入元素的操作,我们称这种情况为左右型 ,我们应该进行左旋转+右旋转。在结点Root的 右结点(R) 的 左子树(L) 上做了插入元素的操作,我们称这种情况为右左型 ,我们应该进行右旋转+左旋转。在结点Root的 左结点(L) 的 左子树(L) 上做了插入元素的操作,我们称这种情况为 左左型 ,我们应该进行右旋转。在结点Root的 右结点(R) 的 右子树(R) 上做了插入元素的操作,我们称这种情况为右右型 ,我们应该进行左旋转。
2024-11-12 13:46:09
648
原创 【计算机基础——数据结构——红黑树】
为什么HashMap不直接使用AVL树,而是选择了红黑树呢?由于AVL树必须保证左右子树平衡,Max(最大树高-最小树高) <= 1,所以在插入的时候很容易出现不平衡的情况,一旦这样,就需要进行旋转以求达到平衡。正是由于这种严格的平衡条件,导致AVL需要花大量时间在调整上,故AVL树一般使用场景在于查询场景, 而不是 增加删除 频繁的场景。红黑树(rbt)做了什么优化呢?
2024-11-11 19:45:18
1048
原创 【代码随想录——回溯算法——二刷】
回溯法解决的问题都可以抽象为树形结构,因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度就构成了树的深度。
2024-11-11 19:45:01
973
原创 【系统设计——认证授权——基本概念知识】
假如我们部署了两份相同的服务 A,B,用户第一次登陆的时候 ,Nginx 通过负载均衡机制将用户请求转发到 A 服务器,此时用户的 Session 信息保存在 A 服务器。小壮登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了 10000 元。相对来说 Session 安全性更高。在 RBAC 权限模型中,权限与角色相关联,用户通过成为包含特定角色的成员而得到这些角色的权限,这就极大地简化了权限的管理。
2024-11-08 13:49:50
882
原创 【代码随想录——二叉树——二刷】
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
2024-11-07 10:09:33
784
原创 【计算机基础——数据结构——布隆过滤器】
当一个元素加入布隆过滤器中的时候,会进行如下操作使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)。根据得到的哈希值,在位数组中把对应下标的值置为 1。当我们需要判断一个元素是否存在于布隆过滤器的时候,会进行如下操作3. 对给定元素再次进行相同的哈希计算;4. 得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。
2024-11-07 10:08:59
419
原创 【Java面试——计算机基础——网络——一篇就够了!!!】
WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。WebSocket 协议在 2008 年诞生,2011 年成为国际标准,几乎所有主流较新版本的浏览器都支持该协议。不过,WebSocket 不只能在基于浏览器的应用程序中使用,很多编程语言、框架和服务器都提供了 WebSocket 支持。WebSocket 协议本质上是应用层的协议,用于弥补 HTTP 协议在持久通信能力上的不足。
2024-11-05 16:42:57
1316
原创 【计算机基础——操作系统——Linux】
在 Linux 操作系统中,一切被操作系统管理的资源,如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或目录等,都被视为文件。这是 Linux 系统中一个重要的概念,即"一切都是文件"。这种概念源自 UNIX 哲学,即将所有资源都抽象为文件的方式来进行管理和访问。Linux 的文件系统也借鉴了 UNIX 文件系统的设计理念。这种设计使得 Linux 系统可以通过统一的文件接口来管理和操作不同类型的资源,从而实现了一种统一的文件操作方式。
2024-11-04 08:46:36
945
原创 【代码随想录——栈和队列——二刷】
需要使用两个栈才能模拟一个队列,分为一个输出栈和一个输入栈。当输出栈为空时,需要将输入栈中的元素倒过来。当两个栈都为空时才为空。
2024-10-25 10:03:21
965
原创 【Java面试——并发编程——相关类和关键字——Day6】
AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。AQS 就是一个抽象类,主要用来构建锁和同步器。
2024-10-25 09:52:19
855
原创 【代码随想录——字符串——二刷】
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
2024-10-23 09:22:53
994
原创 【Java面试——并发编程——相关类和关键字——Day5】
顾名思义,线程池就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。池化技术想必大家已经屡见不鲜了,线程池、数据库连接池、HTTP 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池提供了一种限制和管理资源(包括执行一个任务)的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2024-10-23 09:22:41
1187
原创 【代码随想录——哈希表——二刷】
因为在map映射时映射到了一个地方了,没有办法记录每一个数字对应的数量以及对应的index。给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果要求返回的是数值的话,就可以考虑使用双指针法了。有人可能会想使用set,但有时候这并不是最快的,因为set需要计算hash值。对于能够确定的map大小,可以预分配内存大小,这样可以避免重复分配内存。可见不一定要使用map来完成功能,有时候使用数组也能起到一样的效果。
2024-10-22 08:30:22
419
原创 【Java面试——并发编程——相关类和关键字——Day4】
ReentrantLock 实现了 Lock 接口,是一个可重入且独占式的锁,和 synchronized 关键字类似。不过,ReentrantLock 更灵活、更强大,增加了轮询、超时、中断、公平锁和非公平锁等高级功能。ReentrantLock 里面有一个内部类 Sync,Sync 继承 (AQSAbstractQueuedSynchronizer),添加锁和释放锁的大部分操作实际上都是在 Sync 中实现的。Sync 有公平锁 FairSync 和非公平锁 NonfairSync 两个子类。
2024-10-22 08:30:08
932
原创 【Java面试——并发编程——相关类和关键字——Day3】
悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。像 Java 中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。并且,悲观锁还可能会存在死锁问题,影响代
2024-10-21 09:14:13
1012
原创 【代码随想录——链表——二刷】
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null。区分一下带翻转的列表head_to_reverse和已经翻转的列表reverse_ans即可。引入虚拟节点统一处理。
2024-10-21 09:13:54
355
原创 【Java面试——并发编程——Day2——多线程】
Java 使用的线程调度是抢占式的。也就是说,JVM 本身不负责线程的调度,而是将线程的调度委托给操作系统。操作系统通常会基于线程优先级和时间片来调度线程的执行,高优先级的线程通常获得 CPU 时间片的机会更多。并发编程的目的就是为了能提高程序的执行效率进而提高程序的运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如:。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。
2024-10-17 09:17:18
522
原创 【代码随想录——数组——二刷】
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。return res//判断是否存在该元素= target {return resreturn res}else{return low}else{
2024-10-17 09:17:04
1008
原创 【Java面试——并发编程——Day1——线程】
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。虚拟机栈。
2024-10-16 09:35:51
911
原创 【Java面试——基础知识——重要知识点(语法糖)——Day2】
BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。语法糖(Syntactic Sugar) 也称糖衣语法,是英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。前面提到过,语法糖的存在主要是方便开发人员使用。
2024-10-16 09:35:35
1480
原创 【Java面试——基础知识——Day7】
如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化;将对象存储到文件之前需要进行序列化,将对象从文件中读取出来需要进行反序列化;
2024-10-15 09:24:22
824
原创 【Java面试——基础知识——Day6】
赋予了代码在运行时分析类以及执行类中方法的能力。通过反射代码可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。Annotation (注解) 是 Java5 开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。注解本质是一个继承了Annotation 的特殊接口:这是Override的注解声明JDK 提供了很多内置的注解(比如 @Override、@Deprecated),同时,我们还可以自定义注解。
2024-10-14 09:03:33
877
原创 【Photoshop——肤色变白——曲线】
在使用RGB曲线调整肤色时,你可以通过调整红、绿、蓝三个通道的曲线来实现黄皮肤到白皮肤的转变。黄皮肤通常含有较多的红色和黄色。通过减少这些颜色的量,可以使肤色看起来更白。
2024-10-14 09:03:09
1121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人