- 博客(91)
- 收藏
- 关注
原创 HTML 基础
文章目录HTML 结构认识 HTML 标签HTML 文件基本结构快速生成代码框架HTML 常见标签注释标签标题标签: h1-h6段落标签: p换行标签: br格式化标签图片标签: img超链接标签: a表格标签列表标签表单标签form 标签input 标签label 标签select 标签textarea 标签无语义标签: div & span综合案例: 填写简历信息Emmet 快捷键HTML 特殊字符HTML: 页面有哪些元素组成CSS:这些元素的样式、布局、排版等JS:这些元素之间如何交
2024-07-11 22:36:37
908
原创 文件操作和IO
IO包括Input(输入)和Output(输出)数据靠近cpu就是输入,远离cpu就是输出通过控制台读取数据到内存也是输入,把数据打印显示到控制台上也是输出。
2024-07-08 21:05:13
848
原创 CAS(compare and swap)
CAS的机制是"比较-发现相等-交换"假设存在两个线程 t1 和 t2. 有⼀个共享变量 num, 初始值为 A.接下来, 线程 t1 想使用 CAS 把 num 值改成 Z, 那么就需要先读取 num 的值, 记录到 oldNum 变量中.使用 CAS 判定当前 num 的值是否为 A, 如果为 A, 就修改成 Z.但是, 在 t1 执行这两个操作之间, t2 线程可能把 num 的值从 A 改成了 B, 又从 B 改成了 A (A->B->A)
2024-07-04 23:44:24
778
原创 常见锁策略
读写锁就是把读操作和写操作分别进行加锁.读锁和读锁之间不互斥.写锁和写锁之间互斥.写锁和读锁之间互斥.读写锁最主要用在 “频繁读, 不频繁写” 的场景中.如果获取锁失败, 就会立即再尝试获取锁, 无限循环, 直到获取到锁为止. ⼀旦锁被其他线程释放, 就能第⼀时间获取到锁.优点: ⼀旦锁被释放就能第⼀时间获取到锁, 更高效. 在锁持有时间比较短的场景下非常有用.缺点: 如果锁的持有时间较长, 就会浪费 CPU 资源.
2024-07-03 15:31:07
966
原创 进程以及多线程编程
一个程序运行起来,在操作系统中,就会出现一个对应的进程。也就是说,进程就是一个跑起来的应用程序我们可以在任务管理器中就把当前运行的所有进程都列出来除了自己运行的程序是进程外,还有一些系统自带的程序也是进程右边显示的那些CPU,内存,磁盘…就是当前进程占用了多少对应的系统资源。要想让一个程序运行,就必须给这个进程分配系统资源,包括不限于CPU,内存,硬盘,网络带宽,显卡…所以在操作系统内部,进程又是操作系统进行资源分配的基本单位。而进程多了就需要进行管理,做法则是先描述,再组织。
2024-07-02 16:59:10
280
原创 计算机是如何工作的
比如: 一个Java程序,写出来是一个.Java源代码文件,编译得到.class二进制文件(仍然是在硬盘上),运行程序的时候,JVM就会把这个.class加载到内存中,再进一步翻译成CPU能识别的二进制指令。再比如:一个 C程序,写出来是一个.c源代码文件,编译得到 .exe二进制文件(也是在硬盘上),运行的时候,操作系统会把这个.exe文件加载到内存中,再进一步由CPU执行。, 因为是ADD指令,此时就不是内存地址了,而是表示l两个寄存器的ID,一个是01(B寄存器),一个是00(A寄存器)
2024-06-01 19:33:32
889
原创 Java的JDBC编程
也都提供了这样的API让程序猿调用,这些数据库都是不同的厂商/不同的人开发的,这些不同数据库的API提供的功能大同小异,但是细节上存在很大的差异。对于Java来说,Java提供了"标准库",只要安装了Java,此时就可以使用标准库中的类和方法(标准库的API), 也可以使用其他大佬写好的类和方法(第三方库的API),但这不是自带的,需要额外安装。这两个都是MySQL提供的JDBC的驱动包,我的数据库是 mysql 5.7 就搭配旧版本使用了,如果是 mysql 8, 使用新版本就行。
2024-05-31 11:21:08
592
原创 MySQL表的增删改查
在进行表操作之前,一定要use选中数据库注释:在SQL中可以使用--空格+描述 来表示注释说明CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母。
2024-05-03 00:30:16
850
原创 MySQL数据库基础知识(数据库/表的基础操作 + 基本类型)
给程序猿使用的专业软件,不会像游戏设置界面那样的图形化界面进行编辑"配置项",而是直接用一个文件的方式进行呈现,这样的文件就是配置文件。如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test 数据库,如果有则不创建。如果系统没有 db_test2 的数据库,则创建一个名叫 db_test2 的数据库,如果有则不创建。创建数据库时还可以指定"校验规则"(可以认为是字符串比较时对应的规则),一般不用修改,使用默认即可。里面有这样的配置项描述的就是数据库存储的数据是在哪里。
2024-04-21 20:28:05
1086
原创 BFS算法--宽度优先搜索(广度优先搜索)
文章目录树N叉树的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值FloodFill算法图像渲染岛屿数量岛屿的最大面积被围绕的区域最短路径问题迷宫中离入口最近的出口最小基因变化单词接龙为高尔夫比赛砍树多源BFS矩阵飞地的数量地图中的最高点地图分析拓扑排序(核心与多源BFS一样)课程表课程表II火星词典树N叉树的层序遍历class Solution { public List<List<Integer>> levelOrder(Node root) {
2024-04-09 12:08:14
359
原创 字符串相关算法
整体思路就是模拟列竖式计算两个数相乘的过程。但是为了书写代码的方便性,我们选择优化的版本,就是在计算两数相乘的时候,先不考虑进位,等到所有结果计算完毕之后,再去考虑进位。
2024-04-02 12:07:54
410
原创 分治-算法
与逆序对的问题不同的是,逆序对我们可以⼀边合并⼀边计算,但是这道题要求的是左边元素大于右边元素的两倍,如果我们直接合并的话,是⽆法快速计算出翻转对的数量的。因此,我们可以利⽤归并排序的过程,先求出左数组中逆序对的数量,再求出右数组中逆序对的数量,最后求出⼀个选择左边,另⼀个选择右边的逆序对的数量,三者相加即可。这道题的解法与 求数组中的逆序对 的解法是类似的,但是这道题要求的不是求总的个数,而是要返回⼀个数组,记录每⼀个元素的右边有多少个元素比自己小。在归并排序合并的过程中,我们得到的是两个有序的数组。
2024-03-28 14:05:20
941
原创 数据库MySQL
存储数据用文件就可以了,为什么还要数据库?文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便内存与外存外存是一个统称,包括硬盘、U盘、光盘…CPU(中央处理器),进行各种逻辑判断和算术运算,是通用的,也可以计算图形图像GPU(显卡),专用计算芯片,专门用来计算图形图像,所以在某些方面速度比GPU快很多平时的内存都是给CPU使用的,为了不冲突,一般会在显卡上单独焊上一些内存单元,专门给显卡使用,这就是显存。
2024-03-24 21:45:27
669
4
原创 模拟-算法
定义的哈希表hash记录蛙叫次数,除了’k’其他字符会被下一个字符消掉,'k’只有在新增’c’的时候消掉,最后留下多少’k’就是几只蛙。第一行、第二行第⼀个数取值为行数,第二个数夹在等差数列中间, 就是第零行的等差数列第二个数减去行数。不难发现,第零行和最后一行的数据是以 2numRows - 2 为公差递增的等差数列。所谓「外观数列」,其实只是依次统计字符串中连续且相同的字符的个数。依照题意,依次模拟即。ii. 如果差值小于中毒时间,那么上次的中毒只能持续两者的差值。以此规律,我们可以写出迭代算法。
2024-03-23 10:28:18
761
2
原创 位运算算法
由于整个数组中,需要找的元素只出现了「⼀次」,其余的数都出现了「三次」,因此我们可以根据所有数的「某⼀个比特位」的总和 %3 的结果,快速定位到 ret 那位「比特位」的值是0 还是 1。利用「位图」的思想,每⼀个「比特位」代表⼀个字符,⼀个 int 类型的变量有 32 位足够表示所有的小写字⺟。如果我们把数组中的数,以及 [0, n] 中的数全部「异或」在⼀起,那么根据「异或」运算的两个相同的数异或的结果一定为0,最终的异或结果就是缺失的数。给一个数n,确定它的二进制表示中的第x位是0还是1。
2024-03-21 15:39:18
411
原创 前缀和算法
前缀和可以快速求出数组中某个连续区间的和为了处理边界情况,下标从1开始dp[i]表示原数组[ 1 , i ]区间内所有元素之和dp[i]=dp[i-1]+原数组[i]
2024-03-20 18:19:13
816
原创 二分查找算法
大家⼀定不要觉得背下模板就能解决所有二分问题。二分问题最重要的就是要分析题意,然后确定要搜索的区间,根据分析来写出二分查找算法的代码。要分析题意,确定搜索区间,不要死记模板,不要看左闭右开什么乱七⼋糟的题解要分析题意,确定搜索区间,不要死记模板,不要看左闭右开什么乱七⼋糟的题解要分析题意,确定搜索区间,不要死记模板,不要看左闭右开什么乱七⼋糟的题解重要的事情说三遍。
2024-03-18 12:23:45
767
原创 滑动窗口算法
因为字符串 p 的异位词的长度⼀定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造⼀个长度与字符串 p 相同的滑动窗口,并在滑动中维护窗口中字母的数量。可以用两个大小为 26 的数组来模拟哈希表(全是小写字母),⼀个来保存 s 中的子串每个字符出现的个数,另⼀个来保存 p 中每⼀个字符出现的个数。既然是连续区间,可以考虑使用「滑动窗口」来解决问题。题目要求的是数组「左端+右端」两段连续的、和为 x 的最短数组,我们可以转化成求数组内⼀段连续的、和为 sum(nums) - x 的最长数组。
2024-03-14 15:09:30
862
原创 双指针算法
而「快慢指针」有⼀个特性,就是在⼀个圆圈(循环)中,快指针总是会追上慢指针,也就是说速度相差一个元素时他们总会相遇在同⼀个位置。设两个指针 left , right 分别指向容器的左右端点,容器的左边界为 height[left] ,右边界为 height[right]。快慢指针的实现方式有很多种,最常用的⼀种就是:在⼀次循环中,每次让慢的指针向后移动⼀位,而快的指针往后移动两位,实现⼀快⼀慢。由于上述两种情况只会出现⼀种,因此,只要我们能确定死循环是「情况⼀」,还是「情况⼆」,就能得到结果。
2024-03-12 11:41:50
842
原创 哈希表与HashMap
虽然哈希表一直在和冲突做斗争,但在实际使用过程中,我们认为哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为哈希表的插入/删除/查找时间复杂度是O(1)。开散列法又叫链地址法(开链法),首先对数据集合用散列函数计算散列地址,具有相同地址的数据归于同一子集合,每一个子集合称为一个桶,桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。那如何寻找下一个空位置呢?进行同样的计算,求得的函数值为元素的存储位置,进行元素比较,若相等,则搜索成功。
2024-03-06 14:08:32
679
2
原创 七大排序算法
快速排序整体的综合性能和使用场景都是比较好的,所以才叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定。
2024-03-02 20:48:10
968
原创 优先级队列(堆)
查看向上调整的源码知PriorityQueue是通过comparator或comparable来决定元素存放顺序的如果实现了comparator就用comparator,不然就看comparablecomparablekey是child;e是parentkey.compareTo((E) e) < 0,就不执行break,而执行交换} }} }@Override对age进行比较来建堆comparatorx是child;
2024-02-24 10:41:59
1029
原创 二叉树及其练习题
文章目录树概念及结构树的概念树的相关概念树的表示形式树的应用二叉树概念及结构概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的基本操作二叉树的遍历前中后序遍历递归实现二叉树的基本操作二叉树相关oj题树概念及结构树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2
2024-02-21 00:22:45
798
原创 Java的集合框架和泛型
Java 集合框架,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes。其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储store、检索retrieve、管理manipulate,即平时我们俗称的增删查改CRUD。数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
2024-02-16 22:21:30
749
原创 时间和空间复杂度
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。
2024-02-14 13:34:40
780
原创 KMP算法
KMP 和 BF 不一样的地方在,主串的的下标 i 并不会回退,只需要让子串的下标 j 回退就够了(通过一个next数组找到回退的位置)
2023-12-22 22:28:19
904
原创 Clonable 接口和深拷贝
Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “拷贝”.但还是会报错要想合法调用 clone 方法, 必须先实现 Clonable 接口, 否则就会抛出 CloneNotSupportedException 异常,而它是空的,没有需要重写的方法如果一个类实现了这个空接口/标记接口,那么证明当前类是可以被克隆的。
2023-12-20 19:32:47
359
原创 Java的异常
Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构我们可以基于已有的异常类进行扩展(继承), 创建和我们业务相关的异常类.自定义异常类,继承自Exception 或者 RunTimeException实现一个带有String类型参数的构造方法,参数含义:出现异常的原因仿照NullPointerException创建自定义异常类(含两个构造方法)if(!
2023-12-19 20:45:26
921
原创 Java的String类常用方法 |StringBuilder和StringBuffer
由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法方法说明在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量获取index位置的字符获取字符串的长度获取底层保存字符串空间总的大小扩容。
2023-12-13 22:40:40
1007
原创 java的多态
在子类构造方法中,并没有写任何关于父类构造的代码,但是在构造子类对象时,先执行父类的构造方法,然后执行子类的构造方法,因为:子类对象中成员是有两部分组成的,父类继承下来的以及子类新增加的部分。父子父子肯定是先有父再有子,所以在构造子类对象时候 ,先要调用父类的构造方法,将从父类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整。总结:成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。
2023-12-10 14:05:18
838
原创 栈和队列
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
2023-12-09 16:56:43
880
原创 顺序表和链表
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针走到链表的末尾。给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在大于或等于 x 的节点之前。一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情况,因此:在慢指针走到一圈之前,
2023-12-05 20:45:36
978
原创 Java的内部类
只能在方法里面实例化对象.不能被public、static等访问限定符修饰局部内部类只能在所定义的方法体内部使用编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class。
2023-11-25 23:59:51
1270
原创 Python:字符串格式化
(2)带数字编号,可调换顺序,即“{0}”、“{1}”(0是第一个参数,1是第二个参数)格式控制标记包括:<填充><对齐><宽度><,><.精度><类型>(3)带关键字,即“{a}”、“{tom}”(1)不带编号,即“{}”
2023-11-03 22:21:21
222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人