- 博客(43)
- 收藏
- 关注
原创 XSS攻击
XSS 它允许攻击者将恶意脚本代码注入到正常的网页中,当用户访问该网页时,恶意脚本代码会在用户的浏览器中执行,从而获取用户的敏感信息、篡改网页内容、进行恶意操作等。:用户可以保持浏览器的更新,启用安全设置,如内容安全策略(CSP)等,以减少 XSS 攻击的风险。:攻击者可以获取用户的会话 cookie、表单数据等敏感信息,从而进行身份盗用或其他恶意行为。:攻击者可以在网页中嵌入虚假的表单或链接,诱导用户输入敏感信息或点击链接,从而获取用户的信息。
2024-03-23 11:50:09 238
原创 什么是多路复用
什么是多路复用 多路复用是一种技术,允许多个输入或输出流共享一个单一的通信信道或计算资源。通过多路复用,多个数据流可以同时在同一个通道上传输,提高了通信效率和资源利用率。在计算机网络中,多路复用常用于实现同时传输多个数据流,避免资源浪费和提高传输效率。:将时间分割成若干个时隙,不同数据流在不同时隙传输,实现多路复用。在传统的电话通信中广泛应用:将信道分成不同的频率带宽,每个数据流占据不同的频率带宽进行传输。在移动通信,卫星通信,广播电视上广泛应用:通过不同的编码技术将不同数据流区分开来,实现多路复用。
2024-03-14 21:55:15 562
原创 Queue 和 Stack 的区别
Queue(队列)和Stack(栈)都不提供迭代器,但Queue(队列)的元素可以通过特定的方法访问,而Stack(栈)由于其后进先出的特性,只允许访问栈顶的元素,因此无法进行遍历。Queue(队列)允许从队头和队尾分别访问元素,但一般只能在队头删除元素,在队尾插入元素。Queue(队列)的元素只能从队尾插入,从队头删除,保持了元素的顺序。Stack(栈)的元素只能从栈顶插入和删除,新插入的元素成为新的栈顶。(FIFO)的方式存储数据,即最先进入队列的元素最先被取出。Stack(栈)采用。
2024-03-13 21:45:01 540
原创 Vector 和 List的区别
而List下的 Linkedlist 则是基于双向链表实现的,其内存空间是不连续的。当集合元素数量增加时,Vector和List的扩容机制有所不同。Vector的内存空间是连续的,类似于数组,这使得它能够进行高效的随机存取操作,时间复杂度为O(1)。List则不是线程安全的,因此在多线程环境下使用时,需要进行额外的同步处理,否则可能导致数据不一致。List的扩容机制则更为灵活,它根据需要自动调整大小,通常扩容至原来的1.5倍。Vector是线程安全的,意味着在多线程并发访问时,它能够保证数据的安全性。
2024-03-13 21:36:34 410
原创 HashMap 底层,同时遍历+删除会出现什么问题?怎么解决
HashMap 底层,同时遍历+删除会出现什么问题?怎么解决?遍历HashMap时,如果删除元素,会触发这个异常,这是因为迭代器在遍历过程中维护了一个预期修改次数,而HashMap的修改会更新这个预期修改次数,当这个预期修改次数和期望值不一样时,会抛出。异常,这是因为HashMap的迭代器是快速失败的(fail-fast),当检测到结构性的改变(比如增加或删除元素)时会立即抛出异常。使用并发集合:使用线程安全的ConcurrentHashMap,
2024-03-09 22:54:24 556
原创 每日一问之Java中的类加载机制
Java中的类加载机制 Java中的类加载过程分为 加载、链接、初始化 三个步骤初始化:执行类的初始化代码,包括静态代码块和构造函数。验证:检查类的字节码是否符合Java的语法规范。准备:为类的静态变量分配内存并设置初始值。加载:将类的字节码文件加载到内存中。链接可以细化分成 验证、准备、解析。解析:将类的符号引用转换为直接引用。Java中的类加载过程分为。
2024-03-09 22:37:02 393
原创 多线程基础
使用Interrupt方法打断线程,本质上也是使用标志位打断,不过这个标志位使用的是current.isInterrupted()方法。wait() wait(long) sleep(long) 的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态。线程调用wait()方法进入等待状态,其他线程调用notify()方法唤醒后切换为可执行状态。run() 方法是一个普通的方法,没有开启一个线程,是串行的,可以执行多次。使用标志位打断,在主线程中的更改子线程执行的条件标志,依次来使子线程结束。
2024-03-02 19:32:52 1688
原创 Redis相关学习
Redis 的访问速度比 MySql 快上万倍。因为Redis 在内存中使用,MySql 在硬盘上使用Redis 和 MySql 相比最大的劣势是存储空间是有限的redis 主要作为缓存、内存数据库、消息队列在启动redis客户端的时候,加上--raw,可以让redis客户端将二进制翻译redis-cli。
2024-02-29 22:12:16 1705
原创 Hashmap相关内容
Hashmap的底层使用的是数组+链表或数组+红黑树实现因为多个元素Hash之后的值可能是相同的,也叫做哈希冲突,为了避免哈希冲突,所以想到了可以将Hash值相同的元素存到链表中插入元素时的时间复杂度是O(1)由于存入的元素Hash值集中,可能导致链表变的很长,导致查找效率变慢,所以引入了下面的数组+红黑树的数据结构这种数据结构可以保证查询某个数据时,将时间复杂度保证在O(logN),避免查找时间复杂度太大还可以防止DDos攻击带来的效率问题。
2024-02-27 22:02:02 379
原创 ArrayList 和 Linkedlist
ArrayList 和 Linkedlist的区别,Linkedlist底层使用的是双向链表的数据结构在内存上不连续。
2024-02-26 21:15:34 1353
原创 HTTPS协议的对称加密与非对称加密
HTTPS 中引入了**对称加密**和**非对称加密**算法一般的加密算法都是用秘钥进行加密的,对称加密和非对称加密最本质的区别就是对称加密用的是同一个秘钥,非对称加密用的是一对不同的密钥,分为公钥和私钥
2023-12-07 16:23:56 151
原创 LeetCode之寻找数组的中心下标 -- 前缀和数组后缀和数组
给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中
2023-09-02 21:21:18 89
原创 牛客之【模板】二维前缀和 -- dp数组实现前缀和
给你一个 n 行 m 列的矩阵 A ,下标从1开始。接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和,
2023-09-01 22:10:35 118
原创 牛客之【模板】前缀和 --- dp数组前缀和
给定一个长度为n的数组a1,a2,....an.接下来有q次查询,每次查询有两个参数l,r.对于每个询问,请输出ai 十 al+1 十 ....十 ar
2023-09-01 20:48:59 69
原创 LeetCode之搜索插入位置 -- 二分查找
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 `O(log n)` 的算法。
2023-08-31 19:20:51 40
原创 LeetCode之搜索插入位置 -- 二分查找
给你一个非负整数 `x` ,计算并返回 `x` 的 **算术平方根** 。由于返回类型是整数,结果只保留 **整数部分** ,小数部分将被 **舍去 。****注意:**不允许使用任何内置指数函数和算符,例如 `pow(x, 0.5)` 或者 `x ** 0.5` 。
2023-08-30 21:23:24 38
原创 LeetCode之在排序数组中查找元素的第一个和最后一个位置 -- 二分查找
给你一个按照非递减顺序排列的整数数组 `nums`,和一个目标值 `target`。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 `target`,返回 `[-1, -1]`。你必须设计并实现时间复杂度为 `O(log n)` 的算法解决此问题。
2023-08-30 20:21:05 59
原创 LeetCode之最小覆盖子串 -- 滑动窗口
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。
2023-08-30 14:49:24 55
原创 LeetCode之串联所有单词的子串 --- 滑动窗口
给定一个字符串 `s` 和一个字符串数组 `words`**。** `words` 中所有字符串 **长度相同**。 `s` 中的 **串联子串** 是指一个包含 `words` 中所有字符串以任意顺序排列连接起来的子串。- 例如,如果 `words = ["ab","cd","ef"]`, 那么 `"abcdef"`, `"abefcd"`,`"cdabef"`, `"cdefab"`,`"efabcd"`, 和 `"efcdab"` 都是串联子串。 `"acdbef"` 不是串联子串,因为他不是
2023-08-29 09:55:19 86
原创 LeetCode之找到字符串中所有字母异位词 -- 滑动窗口
给定两个字符串 `s` 和 `p`,找到 `s` 中所有 `p` 的 **异位词** 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。**异位词** 指由相同字母重排列形成的字符串(包括相同的字符串)。
2023-08-28 18:07:45 84
原创 LeetCode之水果成篮 -- 滑动窗口
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 `fruits` 表示,其中 `fruits[i]` 是第 `i` 棵树上的水果 **种类** 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:- 你只有 **两个** 篮子,并且每个篮子只能装
2023-08-27 20:09:48 79
原创 LeetCode之将 x 减到 0 的最小操作数 -- 滑动窗口
给你一个整数数组 `nums` 和一个整数 `x` 。每一次操作时,你应当移除数组 `nums` 最左边或最右边的元素,然后从 `x` 中减去该元素的值。请注意,需要 **修改** 数组以供接下来的操作使用。如果可以将 `x` **恰好** 减到 `0` ,返回 **最小操作数** ;否则,返回 `-1` 。
2023-08-26 22:22:04 55
原创 LeetCode之最大连续1的个数 --- 滑动窗口
给定一个二进制数组 `nums` 和一个整数 `k`,如果可以翻转最多 `k` 个 `0` ,则返回 *数组中连续 `1` 的最大个数* 。
2023-08-26 21:16:05 79
原创 LeetCode之长度最小的子数组 ---- 滑动窗口
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
2023-08-25 21:37:10 151 1
原创 LeetCode之四数之和 -- 双指针
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
2023-08-23 21:59:18 45
原创 LeetCode之三数之和 -- 双指针
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
2023-08-23 12:47:40 48
原创 LeetCode之和为s的两个数 -- 双指针
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]
2023-08-23 09:17:08 42
原创 LeetCode之有效三⻆形的个数 --- 双指针
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。当 left + right > fix 时,固定right,此时left 和 right之间的数肯定都可以组成三角形此时三角形的个数可以直接算出来,是 right-left,然后 right--定义左右指针,
2023-08-22 21:33:38 109 1
原创 LeetCode之盛水最多的容器---双指针
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。
2023-08-22 19:59:08 60 1
原创 leetCode之快乐数--双指针解法
n最大为2,147,483,648,极限一点,n等于9,999,999,999时,计算一次的结果为810,相当于有810个鸽巢,取极端一点,一个数算了811次,那么第811次的时候,肯定会和前面的某个数重合,这样就产生了环。如果一直给往后循环,肯定会有一个环,可以使用快慢指针,快指针一次走两步,慢指针一次走一步,当快慢指针相遇,相遇位置如果是1,则是快乐数,否则不是快乐数。一共有n个巢穴,n+1个鸽子,那么至少有一个巢穴里面的鸽子数量大于1。if (slow==1){//相遇位置为1,则是快乐数。
2023-08-22 11:17:06 101 1
原创 LeetCode之复写0 ---- 双指针
给你一个长度固定的整数数组arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。请对输入的数组就地进行上述修改,不要从函数返回任何东西。
2023-08-21 22:26:04 123 1
原创 浮点数在内存中的存储
比如0.5,换成二进制形式就是0.1,因为写成浮点数形式为1.0*2^(-1),则E中存储-1+127=126的二进制形式,即E中存储01111110,而M中去掉1.0中的小数点左边的1,即M中存储00000000000000000000000。所以对于float类型中E的范围是-127~128,如果是1.01*2^2,则E中存2+127=129的二进制形式。而5.0转换成二进制数可以写成101.0,写成浮点数形式为1.010*2^2,其中S为0,M为1.01,E为2。E不全为0或不全为1时。
2023-02-23 19:35:21 126
原创 关于Android Studio安装过程中的坑
一般网上的教程都是在安装过程中会顺便下载SDK,但是有时候就是死活勾选不了,这时候你要看看下载的路径中是否有中文,如果有中文就改到其他没有中文的路径里面,然后稍等一会儿就可以勾选了。另一个原因有可能是你开着杀毒软件和防火墙,所以下载SDK的时候先暂时关闭杀毒软件和防火墙,如果这个时候还是勾选不了,那么就先下一步,知道安装完毕出现开始的界面再说。接下来会出现这个界面,在SDK Platforms中,如果电脑硬盘空间充足可以都下载下来,如果空间紧张,就下载7.0以上的就行。希望可以对同学有一些帮助。
2023-02-19 21:20:51 526
原创 C语言实现扫雷(递归版)
用户选择1开始游戏后,可以定义两个二维数组进行存储,show_board 棋盘进行用户界面的打印,mine_board 棋盘用来存雷,根据用户输入判断是否踩雷,不对用户展示。刚开始只打印show_board 棋盘,打印时注意棋盘的大小,最后一行和最后一列的特殊逻辑。扫雷成功时:最后剩余没有扫雷的区域正好等于布置的雷数,则扫雷成功。扫雷成功时:最后剩余没有扫雷的区域正好等于布置的雷数,则扫雷成功。扫雷时需要思考扫雷成功,扫雷失败的情况。扫雷时需要思考扫雷成功,扫雷失败的情况。2、初始化棋盘,布置雷。
2023-01-26 12:39:44 451
原创 使用C语言简易实现傻瓜三子棋
1、设计一个三子棋小游戏首先要熟悉三字棋的规则,即横竖斜三个连成一条线即可。使用二维数组存储比较方便,设计ROW行,COL列的棋盘,初始棋盘内容存放空格。电脑随机下棋,如果成功下棋,进行下一步;下棋时要考虑是否出界,是否是正确下标,下标是否已经被占用。3、根据每一项内容分别进行设计代码,可将问题简单化。game.h 包含所需头文件,常量的定义,函数的声明。为了便于观察,打印时注意最后一行,最后一列的特殊性。2、要将其设计成代码,可以利用分治思想来进行划分。如果有赢家,返回赢家所下的内容;
2023-01-23 20:10:26 97
原创 关于操作系统的总结
小豪今天也学习了操作系统哦现在我们来说一下操作系统吧一、BIOS:包括基本输入输出系统、系统设置信息、开机后自检程序、系统自启动程序。这些程序被固化到了计算机主板的ROM芯片上。计算机启动过程:启动自检程序 初始化启动阶段 启动加载阶段 内核装载阶段 登陆阶段二、操作系统的分类1.批处理操作系统:用户不干预自己的作业,从而大大提高系统资源的利用率和作业吞吐量。2.分时操作系统:将CPU的时间划分成一些小的时间片,按时间片轮流把处理机分给各联机作业使用,主要用于家用计
2021-11-17 20:37:23 572
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人