刷题Java常用方法总结
刷题Java常用方法总结
文章目录
- 刷题Java常用方法总结
- 快速查看:
- 静态数组 Static Array
- 初始化
- instance属性
- length
- 技巧
- Arrays.sort从小到大排序
- Arrays.fill填满一个数组
- Arrays.copyOf / arr.clone()复制一个数组(二维数组也可以)
- 动态数组 List & Dynamic Array
- 初始化
- 常规 - ArrayList更常用
- 接受一个Stack、Set等容器为参数 - 以Set举例
- instance方法(List接口方法)
- get
- size
- add
- remove
- subList
- 技巧
- 栈 Stack
- 初始化 (唯一初始化方式)
- instance方法
- push
- pop
- peek
- isEmpty
- size
- 队列 Queue
- 初始化
- 使用LinkedList实现Queue接口初始化
- 把集合如Stack、Set、List等Collection作为参数
- instance方法 (Queue接口)
- offer
- poll
- peek
- isEmpty
- size
- 优先队列 PriorityQueue (Heap)
- 初始化
- 小根堆
- 大根堆
- instance方法 (Queue接口方法)
- offer
- poll
- peek
- isEmpty
- size
- 技巧
- 从小到大(或从大到小弹出元素)
- 集合 Set - HashSet
- 初始化
- 默认构造函数
- 把集合如Stack、Queue、List等Collection作为参数
- instance方法 (Set接口方法)
- add
- remove
- contains
- isEmpty
- size
- first (TreeSet)
- last (TreeSet)
- 散列表 HashMap
- 初始化
- <Key, Value> key和value是任何Collection或任何Object
- instance方法 (Map接口方法)
- put
- get
- getOrDefault
- containsKey
- containsValue
- keySet
- values
- isEmpty
- size
- 字符串
- String
- 初始化
- 字符串复制初始化
- 基于另外一个字符串
- 基于char[]
- 类方法
- instance方法
- charAt
- length
- substring
- indexOf 是(暴力查找字符串,不是KMP)
- lastIndexOf
- replace 只能换char
- toCharArray
- trim 去除前后空格
- split 以什么分开
- toLowerCase, toUpperCase 转换大小写
- 技巧
- StringBuilder
- 初始化
- instance方法
- charaAt
- length
- setCharAt
- insert
- deleteCharAt
- delete
- reverse
- toString
快速查看:
类 | 方法 |
---|---|
String | charAt toCharArray split substring indexOf lastIndexOf replace length |
List | add remove get size subList |
Stack | push pop peek isEmpty size |
Queue | offer poll peek isEmpty size |
PriorityQueue | offer poll peek isEmpty size |
Set | add remove contains isEmpty size first(TreeSet) last(TreeSet) |
Map | put get getOrDefault containsKey containsValue keySet values isEmpty size |
静态数组 Static Array
性质:初始化后长度不能变了
初始化
// Type[] names = new Type[capacity];
int[] a = new int[10];
String[] s = new String[3];// Type[] names = new Type[]{Tpye ...a};
int[] a = new int[]{1, 2, 3, 4}; // int[] a = {1, 2, 3, 4};
char[] b = new char[]{'a', 'b'}; // char[] b = {'a', 'b'};
String[] s = new String[]{"hello", "world"};// 创建
Set<String> set = new Set[105]; // 每一个指向一个null
for (int i = 0; i < 105; i++) jud[i] = new HashSet<>(); // 每个Set现在才被创建出来
- 二维
int[][] c = new int[10][10];
instance属性
length
.length
记得是属性而不是方法 arr.length
没有()
技巧
Arrays.sort从小到大排序
Arrays.sort(int[] arr)
Arrays.sort(int[] arr, int fromIndex, int toIndex)
数组类型只要实现了Comparable接口就行(基本数据类型int也可以)
Arrays.sort(int[] arr, int fromIndex, int toIndex, 比较器); //一定是需要泛型Arrays.sort(arr, 0, 3, (o1, o2) -> o2 - o1); //从大到小排序,只排序[0, 3)
复制代码
Arrays.fill填满一个数组
int[] a = new int[5];
Arrays.fill(a, 1);
复制代码
Arrays.copyOf / arr.clone()复制一个数组(二维数组也可以)
int[] a = new int[5];
int[] newA = Array.copyOf(a, 5);
// or
int[][] a = {{1}, {1,2}, {1,2,3}, {1,2,3,4}, {1,2,3,4,5}};
int[][] newa = a.clone(); // 5*5矩阵
复制代码
动态数组 List & Dynamic Array
性质: 可以动态扩容的数组
初始化
常规 - ArrayList更常用
List<Integer> array = new ArrayList<>(); // 数组
List<Integer> list = new LinkedList<>(); // 链表
复制代码
接受一个Stack、Set等容器为参数 - 以Set举例
// Set<Integer> a = new HashSet....
List<Integer> b = new ArrayList<>(a);
复制代码
instance方法(List接口方法)
方法:get, size, add, remove, subList
get
.get(int index) // 返回元素位置在index的元素e --- array O(1), list O(n)
复制代码
size
.size() // 返回数组长度 --- O(1)
复制代码
add
.add(E e) // 在尾部添加一个元素e --- O(1)
.add(int index, E e) // 在index位置插一个元素e --- O(n)
复制代码
remove
.remove(int index) // 删除位于index的元素,并返回删除元素e --- 删除最后元素为O(1), 其余为O(n)
//删除最后元素 list.remove(list.size() - 1);
复制代码
subList
.subList(int from, int to) // 相当于返回原数组的一个片段,但不要对其进行改动,改动会影响原数组 --- O(1)
// List<Integer> list, 对原来的list和返回的list做的“非结构性修改”(non-structural changes),
//都会影响到彼此对方. 如果你在调用了sublist返回了子list之后,如果修改了原list的大小,那么之前产生的子list将会失效,变得不可使用
复制代码
技巧
Collections.sort(list);
从小到大排序 Collections.sort(list, Collections.reverseOrder());
从大到小排序, 第二个参数为一个比较器
栈 Stack
性质: 先进后出
初始化 (唯一初始化方式)
Stack<Integer> stack = new Stack<>();
复制代码
instance方法
方法:push, pop, peek, isEmpty, size
push
.push(E e); // 入栈元素e, 返回值为元素e --- O(1)
复制代码
pop
.pop(); // 出栈一个元素,返回出栈元素e --- O(1)
复制代码
peek
.peek(); // 查看栈顶元素, 返回值为栈顶元素e --- O(1)
复制代码
isEmpty
.isEmpty() // 若栈空返回true, 否则返回false --- O(1)
复制代码
size
.size() // 返回栈中元素个数 --- O(1)
复制代码
队列 Queue
性质:先进先出 通过实现实现队列接口的LinkedList<>();
初始化
使用LinkedList实现Queue接口初始化
Queue<Integer> q = new LinkedList<>();
复制代码
把集合如Stack、Set、List等Collection作为参数
// Set<Integer> set = new HashSet<>();
Queue<Integer> q = new LinkedList<>(set);
复制代码
instance方法 (Queue接口)
方法:offer, poll, peek, isEmpty, size
offer
.offer(E e); // 队尾加入元素e。 若成功入队返回值true,否则返回false --- O(1)
复制代码
poll
.poll(); // 出队首,返回出队元素e --- O(1)
复制代码
peek
.peek(); // 查看队首元素, 返回值队首元素e --- O(1)
复制代码
isEmpty
.isEmpty() // 若队空返回true, 否则返回false --- O(1)
复制代码
size
.size() // 返回队中元素个数 --- O(1)
复制代码
优先队列 PriorityQueue (Heap)
性质:底层是一颗数, 以小根堆为例。对于任意结点来说,该节点的值比其左右孩子的值都要小。 (就是最上面的结点最小)。 大根堆类似,最上面结点最大
初始化
小根堆
Queue<Integer> minH = new PriorityQueue<>(); // 小根堆,默认大小为11 相当于 new PriorityQueue<>(11)
Queue<Integer> minH = new PriorityQueue<>(100); // 定义一个默认容量有100的小根堆。在当中增加元素会扩容,只是开始指定大小。不是size,是capacity
复制代码
大根堆
Queue<Integer> maxH = new PriorityQueue<>((i1, i2) -> i2 - i1); // 大根堆,默认大小为11 相当于 new PriorityQueue<>(11, (i1, i2) -> i2 - i1)
Queue<Integer> maxH = new PriorityQueue<>(100, (i1, i2) -> i2 - i1); // 定义一个默认容量有100的大根堆。在当中增加元素会扩容,只是开始指定大小
复制代码
instance方法 (Queue接口方法)
方法:offer, poll, peek, isEmpty, size
offer
.offer(E e); // 在堆中加入元素e,并调整堆。若成功入堆返回值true,否则返回false --- O(logN)
复制代码
poll
.poll(); // 弹出堆顶元素,并重新调整堆,返回出队元素e --- O(logN)
复制代码
peek
.peek(); // 查看堆顶元素, 返回值堆顶元素e --- O(1)
复制代码
isEmpty
.isEmpty() // 若队空返回true, 否则返回false --- O(1)
复制代码
size
.size() // 返回队中元素个数 --- O(1)
复制代码
技巧
从小到大(或从大到小弹出元素)
while (!pq.isEmpty()) {}
复制代码
集合 Set - HashSet
性质:Set中没有重复元素,重复添加的元素抛弃
初始化
默认构造函数
Set<Integer> set = new HashSet<>();
复制代码
把集合如Stack、Queue、List等Collection作为参数
// List<Integer> list = new ArrayList<>....;
// Set<Integer> set = new HashSet<>(list);
复制代码
instance方法 (Set接口方法)
方法:add, remove, contains, isEmpty, size
add
.add(E e); // 在集合中添加元素E e, 若成功添加则返回true,若集合中有元素e则返回false --- O(1)
复制代码
remove
.remove(E e); // 在集合中删除元素e,若删除成功返回true;若集合中没有元素e,返回false --- O(1)
复制代码
contains
.contains(E e); // 若存在元素e,则返回true,否则返回false --- O(1)
复制代码
isEmpty
.isEmpty() // 若集合为空返回true, 否则返回false --- O(1)
复制代码
size
.size() // 返回集合中中元素个数 --- O(1)
复制代码
first (TreeSet)
.first() // 返回集合里的最小值(若给了比较器从大到小则是返回最大值)
复制代码
last (TreeSet)
.last() // 返回集合里的最大值(若给了比较器从大到小则是返回最小值)
复制代码
散列表 HashMap
性质:使用健值对的方式存储数据 <Key,Value>
初始化
<Key, Value> key和value是任何Collection或任何Object
Map<Characters, Integer> map = new HashMap<>();
复制代码
instance方法 (Map接口方法)
方法:put, get, getOrDefault, containsKey, containsValue, keySet, values, isEmpty, size
put
.put(K key, V value); // 在Map中加入键值对<key, value>。返回value值。如果Map中有key,则replace旧的value --- O(1)
复制代码
get
.get(K key); // 返回Map中key对应的value。若Map中没有该key,则返回null --- O(1)
复制代码
getOrDefault
.getOrDefault(K key, V defaultValue); // 返回Map中key对应的value。若Map中没有该key,则返回defaultValue --- O(1)// For example:
// Map<Character, Integer> map = new HashMap<>();
// if (...) // 如果发现k,则k在Map中的值加1。没一开始没有k,则从0开始加1。(相当于给了key在Map中的一个初试值)map.put('k', map.getOrDefault('k', 0) + 1);
复制代码
containsKey
.containsKey(Key key); // 在Map中若存在key,则返回true,否则返回false --- O(1)
复制代码
containsValue
.containsValue(V value); // 在Map中若存在value,则返回true,否则返回false --- O(1)
复制代码
keySet
.keySet(); // 返回一个Set,这个Set中包含Map中所有的Key --- O(1)// For example:
// We want to get all keys in Map
// Map<Character, Integer> map = new HashMap<>();
for (Character key : map.keySet()) {// Operate with each key
}
复制代码
values
.values(); // 返回一个Collection<v>,里面全是对应的每一个value --- O(1)// For example:
// We want to get all values in Map
// Map<Character, Integer> map = new HashMap<>();
for (Integer value : map.values()) {// Operate with each values
}
复制代码
isEmpty
.isEmpty() // 若Map为空返回true, 否则返回false --- O(1)
复制代码
size
.size() // 返回Map中中键值对<K, V>的个数 --- O(1)
复制代码
字符串
String
性质:不可变量(相当于只读final修饰) 每个位置元素是个char
初始化
字符串复制初始化
String s = "abc";
复制代码
基于另外一个字符串
// s = "abc"
String s2 = new String(s);
复制代码
基于char[]
// s = "abc";
// char[] c = s.toCharArray();
String s3 = new String(c);// 可以偏移
// public String(char value[], int offset, int count)
String s4 = new String(c, 1, 2); // [offset, offset + count)// 把char[] 变成字符串
char[] ch = {'a', 'b', 'c'};
String.valueOf(ch);
复制代码
类方法
String.valueOf( 一个参数Object/基本数据类型 )
返回传入参数obj的toString(),若为空返回字符串"null"。 若为基本类型调用其 包装类的toString方法(Integer.toString(i)
)
instance方法
方法: charAt, length, substring, equals, indexOf, lastIndexOf, replace, toCharArray, trim, split, toLowerCase, toUpperCase
charAt
.charAt(int index); // 返回index位置的char --- O(1)
复制代码
length
.length(); // 返回字符串长度 --- O(1)
复制代码
substring
.substring(int beginIndex, int endIndex); // 返回字符片段[beginIndex, endIndex) --- O(n).substring(int beginIndex); // 返回字符片段[beginIndex, end_of_String) 就是从beginIndex开始后面的 ---- O(n)
复制代码
indexOf 是(暴力查找字符串,不是KMP)
.indexOf(String str) // 返回str第一个出现的位置(int),没找到则返回-1。 --- O(m * n) m为原串长度, n为str长度
// (假如要找一个字符char c,str可以表示成String.valueOf(c),然后作为参数传进去.s.indexOf(String str, int fromIndex); // 同上,但从fromIndex开始找 --- O(m * n)
复制代码
lastIndexOf
.lastIndexOf(String str); // 返回str最后出现的位置(int),没找到则返回-1。 --- O(m * n) m为原串长度, n为str长度
// (假如要找一个字符char c,str可以表示成String.valueOf(c),然后作为参数传进去..lastIndexOf(String str, int fromIndex); // 同上,
//但从fromIndex开始从后往前找 [0 <- fromIndex] --- O(m * n)
复制代码
replace 只能换char
.replace(char oldChar, char newChar); // 返回一个新字符串String,其oldChar全部变成newChar --- O(n)
复制代码
toCharArray
.toCharArray(); // 返回char[] 数组。 把String编程字符数组 --- O(n)
复制代码
trim 去除前后空格
.trim(); // 返回去除前后空格的新字符串 --- O(n)
复制代码
split 以什么分开
.split(String regex); // 返回 String[],以regex(正则表达式)分隔好的字符换数组。 ---- O(n)// For example
// 从非"/"算起 若"/a/c" -> 会变成"" "a" "c"
String[] date = str.split("/"); // date[0]:1995 date[1]:12 date[2]:18 --- O(n)
复制代码
toLowerCase, toUpperCase 转换大小写
s = s.toLowerCase(); // 返回一个新的字符串全部转成小写 --- O(n)
s = s.toUpperCase(); // 返回一个新的字符串全部转成大写 --- O(n)
复制代码
技巧
通过+
连接其他字符串, 但是是两个组成一个新的字符串,有开销。最好用StringBuilder
StringBuilder
初始化
StringBuilder sb = new StringBuilder();
复制代码
instance方法
方法: append, charAt, length, setCharAt, insert, deleteCharAt, delete, reverse, toString
charaAt
.charAt(int index); // 返回index位置的char --- O(1)
复制代码
length
.length(); // 返回缓冲字符串长度 --- O(1)
复制代码
setCharAt
.setCharAt(int index, char ch); // 设置index位置的char为ch --- O(1)
复制代码
insert
.insert(int offset, String str); // 在offer位置的插入字符串str--- O(m + n)
复制代码
deleteCharAt
.deleteCharAt(int index); // 删除index位置的char --- O(n).deleteCharAt(sb.length() - 1); // 删除最后一个char --- O(1)
复制代码
delete
.delete(int start, int end); // 删除[start, end)位置的char --- O(n)
复制代码
reverse
.reverse(); // 反转缓存字符串 --- O(n)
复制代码
toString
.toString(); // 返回一个与构建起或缓冲器内容相同的字符串 --- O(n)
相关文章:

刷题Java常用方法总结
刷题Java常用方法总结 文章目录刷题Java常用方法总结快速查看:静态数组 Static Array初始化instance属性length技巧Arrays.sort从小到大排序Arrays.fill填满一个数组Arrays.copyOf / arr.clone()复制一个数组(二维数组也可以)动态数组 List & Dynamic Array初始化常规 - Ar…...

大数据技术之Hive
第1章Hive基本概念1.1 Hive1.1.1 Hive的产生背景在那一年的大数据开源社区,我们有了HDFS来存储海量数据、MapReduce来对海量数据进行分布式并行计算、Yarn来实现资源管理和作业调度。但是面对海量数据和负责的业务逻辑,开发人员要编写MR来对数据进行统计…...

第33篇:Java集合类框架总结
目录 1、集合概念 2、集合与数组的区别 3、集合框架的特性 1)高性能 2)可操作...

数据结构 | 栈的中缀表达式求值
目录 什么是栈? 栈的基本操作 入栈操作 出栈操作 取栈顶元素 中缀表达式求值 实现思路 具体代码 什么是栈? 栈是一种线性数据结构,具有“先进后出”(Last In First Out, LIFO)的特点。它可以看作是一种受限的…...

vue2前端实现html导出pdf功能
1. 功能实现方案 1.html转换成canvas后生成图片导出pdf(本文选用) html转canvas插件:html2canvas是一款将HTML代码转换成Canvas的插件;canvas生成pdf:jsPDF是一个使用Javascript语言生成PDF的开源库 2.HTML代码转出…...

用 ChatGPT 辅助学好机器学习
文章目录一、前言二、主要内容🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 探索更高效的学习方法可能是有志者共同的追求,用好 ChatGPT,先行于未来。 作为一个人工智能大语言模型,ChatGPT 可以在帮助初…...

【动态规划】最长上升子序列(单调队列、贪心优化)
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...

海思SD3403/SS928V100开发(7)mcp2515-SPI转CAN驱动开发
1. 前言 需求: 需要一路can进行收发 分析: 根据目前使用较多的方案是使用主控端SPI接口 接入MCP2515芯片进行CAN协议转换 硬件: MCP2515->SPI2->SS928 2. Uboot开发 2.1 pinmux复用配置 2.1.1 修改uboot参数表 路径: osdrv/tools/pc/uboot_tools/ SS928V100…...

【安卓源码】SurfaceFlinger 启动及其与应用通信
1. surfaceFlinger 初始化和消息队列处理机制 surfaceflinger 的makefile 文件 /frameworks/native/services/surfaceflinger/Android.bp 235 cc_binary { 236 name: "surfaceflinger", 237 defaults: ["libsurfaceflinger_binary"], 238 i…...

springboot车辆充电桩
sprinboot车辆充电桩演示录像2022开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:ecli…...

linux进程和进程通信编程(1)
What makes the desert beautiful is that somewhere it hides a well. 沙漠之所以美丽,是因为在它的某个角落隐藏着一口井. linux进程和进程通信编程(1)1.什么是进程2.进程id(pid)3.进程间通信的方法管道信号IPCSocket4.创建进程forkfork有三个返回值父…...

操作系统(1.3)--习题
一、课堂习题 1、一个作业第一 次执行时用了5min ,而第二次执行时用了6min,这说明了操作系统的( )特点。 A、并发性 B、共享性 C、虚拟性 D、不确定性 D 2、在计算机系统中,操作系统是( )。 A、处于裸机之上的第一层软件 B、处于硬件之下的低层软件 C、处于应用软件之上的系统软…...

刷题笔记之十三(有假币、最难的问题、因子个数)
目录 1. 求正数数组的最小不可组成和 2. 有假币 3. 继承时先调用父类的构造方法;类中的成员变量的初始化操作都在构造方法时进行 4. 学会并理解装箱拆箱,注意new出来的也可以拆!! 5. getDeclaredMethods()是标识类或接口的声明成员(这个表示public private 包访问权限 pro…...

5个代码技巧,加速你的Python
5个代码技巧,加速你的Python 人生苦短,快学Python! Python作为一种功能强大的编程语言,因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛:科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发…...

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……
阎王易见,小鬼难缠。我一直相信这个世界上好人居多,但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。在这里,我只想告诫大家,offer一定要拿到自己的手里才是真的,口头offer都是不牢靠的,…...

[数据分析与可视化] Python绘制数据地图1-GeoPandas入门指北
本文主要介绍GeoPandas的基本使用方法,以绘制简单的地图。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoP…...

ChatGPT加强版GPT-4面世,打工人的方式将被颠覆
🔗 运行环境:chatGPT,GPT-4 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好&#…...

Python逆向及相关知识
今天第二次看见python字节码的逆向题,然后发现了一个介绍Python逆向的文章,所以把文章里的内容简单整理记录一下。 文章参考:https://www.cnblogs.com/blili/p/11799398.html Python运行原理: 一.什么是Python Python 是一种解…...

Python基础语法、注意点加实例全解
本篇文章我们讲解Python最基础语法,包含:数据类型、注释、变量、类型转换、命名规范、运算符、字符串拼接、字符串格式化、if条件判断、while循环、for循环、函数、读取文件、写入文件、异常捕获、包导入等。通过讲解语法注意事项实例代码详解࿰…...

ETH RPC搭建
配置选择先是看了aws、谷歌云、阿里云这个配置都要1-2wrmb一个月,太贵了问了很多朋友,打算用hetzner,50欧一个月足以我选的配置:64gb,2tb ssd开好后在邮箱收到信息链接后按以下步骤安装系统:https://0o0.me…...

南京邮电大学数据库第一次课后作业
1.单选题 (5分) (B)是存储在计算机内有结构的数据的集合。 (A)数据库系统 (B)数据库 (C)数据库管理系统 (D)数据结构 2.单选题 (5分) 数据库的特点之一是数据的共享,严格的讲,这里的…...

近期投简历、找日常实习的一些碎碎念(大二---测试岗)
嘿嘿嘿,我又回来了,相信不少兄弟已经发现我似乎已经断更了好久,哈哈,我是尝试去找实习,投简历面试去了。 先说一下背景。 目录 背景 求职进行中 简历 投递和沟通 收获和感受 背景 博主,大二软件工程…...

ThreadLocal的使用
1. ThreadLocal介绍 ThreadLocal顾名思义,就是线程的本地变量,只有当前线程可见,对其他线程来说是封闭且隔离的。每一个线程为自己本身创建ThreadLocal变量,只有当前线程可以访问,其他的线程不可以,从根源…...

Java ~ Reference【总结】
一 概述 简介 在JDK1.2之前,Java中引用的定义是十分传统的:如果引用类型的变量中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。在这种定义之下,一个对象只有被引用和没有被引用两种状态。 实际上…...

最快方法求最长上升子序列(LIS)+最长公共子序列(LCS)模板(C/C++)
目录 1 LIS算法(最长上升子序列) 1.1 简介 1.2 代码 1.3 相关解释 2 LCS算法(最长公共子序列) 2.1 简介 2.2 代码(动态规划,时间复杂度O(nlogn)) 2.3 特殊…...

012+limou+C语言深入知识——(4)“结构体”与“枚举体”与“联合体”
一、结构体 1、结构体基础 (1)结构体完全声明 struct tag {member-list; }variable-list;//描述一个人 struct people {char name[10];//人名int age;//年龄int idnumber;//身份证 };(2)结构体不完全声明(匿名结构体…...

Canvas百战成神-圆(1)
Canvas百战成神-圆 初始化容器 <canvas id"canvas"></canvas>canvas{border: 1px solid black; }让页面占满屏幕 *{margin: 0;padding: 0; } html,body{width: 100%;height: 100%;overflow: hidden; } ::-webkit-scrollbar{display: none; }初始化画笔…...

详解分库分表设计
详解分库分表设计 背景 在传统的单机数据库架构中,所有数据都存储在同一个数据库中,随着业务规模的不断扩大,数据量和并发量也会越来越大,这会给数据库的性能和可用性带来挑战。此外,当单机数据库的容量达到瓶颈时…...

动态规划-基础(斐波那契数、爬楼梯、使用最小花费爬楼梯、不同路径、不同路径II、整数拆分、不同的二叉搜索树)
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。动态规划问题,五步走:状态定义&am…...

深入理解WebSocket协议
“ 一直以来对WebSocket仅停留在使用阶段,也没有深入理解其背后的原理。当看到 x x x was not upgraded to websocket,我是彻底蒙了,等我镇定下来,打开百度输入这行报错信息,随即看到的就是大家说的跨域,或…...