Go语言强化训练篇
2022-11-15 打卡
知识点总结
-
go语言中pprof包检测内存泄漏
1.1 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
1.2 在影响软件系统稳定性的因素里,我们最担心的一个问题是内存泄漏,随着系统的运行,系统消耗的内存越来越多,直到最后整个操作系统越来越慢,甚至还会导致系统崩溃。在Go语言里,我们检测内存泄漏主要依靠的是go里面的pprof包,除此之外,我们还可以使用浏览器来查看系统的实时内存信息(包括CPU、goroutine等的信息)。
-
go语言中类型转化
-
Go语言类型转换语法:Type(expression)
-
类型断言,类型断言语法为:expression.(Type)
-
对于类型断言,首先 expression 必须是接口类型,但D选项中 i 是 int 类型,无法进行类型断言;其次 i 是 int 类型,无法通过类型断言转换成 MyInt,只有类型相符时,类型断言才会成功。
-
type MyInt int var i int = 1 var j MyInt = MyInt(i) // -- Go 语言中MyInt和int类型不同
-
数组强化训练篇
2022-11-15 打卡
知识点总结
-
矩阵中数据元素类型
- 强类型语言定义数组时要指定类型,只能存储同类项元素(本题应该指c/c++,Java等强类型语言)。弱类型语言如Python,JavaScript之类的可以存不同类型元素。
-
行末结尾符号
-
在定义字符串的时候,会有一个’\0’作为字符串的结束标志,所以完整的字符串应为"a0\0a0\0\0",使用sizeof()函数计算数组a的占用的空间大小应为7,strlen()函数计算字符串长度是碰到第一个字符串结束符’\0’为止,且不包含’\0’,所以strlen(a)为2。
-
char a[] = "a0\0a0\0"; printf("%d, %d", sizeof(a), strlen(a));
-
-
稀疏数组的三种压缩方式
2022-11-16 打卡
知识点总结
-
线性结构和非线性结构
- 线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
- `常用的线性结构有:线性表,栈,队列,双队列,数组,串。
- 非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或generate者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
- 常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。(其中多维数组是由多个一维数组组成的,所以不再是线性结构)
- 线性结构应满足:
- 有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件。
- 所以有一个以上根结点的数据结构一定是非线性结构
- 线性结构是一个有序数据元素的集合。 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
-
数组常用的两种基本操作
- 查找和修改
- 对于链表来说,数组在查找与修改时的时间复杂度远小于链表。
- 但是数组在删除时时间复杂度远高于链表,所以插入和删除用链表更方便。
- 查找和修改
-
线性表的存储方式
- 顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。
- 对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。
-
二维数组的声明方式
- 数组存储数据是行优先存储,如果只定义行不定义列数组存储就没有界限。给出总元素个数,行数等于总元素对列数取整。编辑器会根据列数去计算行数,但不会根据行数去计算列数
- 二维数组声明时一定要指定列数
-
顺序存储结构和链式存储结构
-
顺序表的特点是逻辑上相邻的数据元素,其物理存储位置也相邻,并且顺序表的存储空间需要预先分配;
-
链式存储中逻辑上相邻的数据元素其物理存储位置不一定相邻,是因为链表通过指针实现元素间的逻辑关系;
-
顺序存储结构适合频繁的查询时使用,链式存储结构适合频繁的插入,删除和更新元素时使用
-
链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间。
-
2022-11-17 打卡
知识点总结
- 线性表存储方式
- 线性表包括顺序表和链式存储表。链式存储指用一组任意的存储单元存储线性表中的数据元素,它的内存可以是连续的可以是不连续的,而顺序表的内存必须是连续的。
- 多维数组进行存储速率比较
- 如果数组很大的话应该是行优先快,因为数组在内存中是按行优先存储的,在虚存环境下,如果整个数组没有在内存中的话可以比列优先减少内存换进换出的次数。就算整个数组都在内存中,列优先访问
a[i][j]
还得计算一次乘法,行优先只需加一就可以了,这个可以忽略
- 如果数组很大的话应该是行优先快,因为数组在内存中是按行优先存储的,在虚存环境下,如果整个数组没有在内存中的话可以比列优先减少内存换进换出的次数。就算整个数组都在内存中,列优先访问
- 三元组的转置算法
- 三元组转置:行列互换,然后再按行排序。
2022-11-18 打卡
知识点总结
- 线性结构
- 线性是线性,顺序是顺序,线性是逻辑结构,顺序是存储结构,两者不是一个概念,线性是指一个元素后继只有唯一的一个元素或节点,非线性是一个元素后面可以有多个后继或前继节点。
- 顺序是指存储结构连续,例如数组是顺序的,链表不是顺序的,但他们都是线性的。当然顺序也可以是非线性的,例如顺序结构存储非线性结构的二叉树!!!
2022-11-20 打卡
知识点总结
-
字符串和字符数组
- 你首先要明白的是什么是长度:数组元素的个数称之为数组的长度。第一个是 字符串,第二个是字符数组 ,字符串以’\0’为结束符号,而字符数组不用
-
稀疏矩阵,三元组
- 三元组不仅需要用行、列、非零元素值来存储。最后还额外需要三个整数来存储矩阵的行数和列数以及总的元素个数
-
智力题
- 在一个有8个int数据的数组中,随机给出数组的数据,找出最大和第二大元素一定需要进行9次比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YC3qqgDR-1668916278619)(牛客网强化训练.assets/634301217_1574840214736_38CA17E56633F671DFB5107AAE3102AF.png)]
将8个数据俩俩分组比较,需要7次得到最大元素,假设为E,那么第二大元素的取值范围为图中的黄色部分,需要2次比较得出,所以一共是9次。
Java语言强化训练篇
2022-11-18 打卡
知识点总结
-
java中的Thread和Runable
- java线程类优先级跟操作系统有关系
- 实现多线程的三种方式,一种是继承Thread类使用此方式就不能继承其他的类了。还有两种是实现Runnable接口或者实现Callable接口
-
try catch 和 finnally
-
根据官方的JVM规范:
如果try语句里有return,返回的是try语句块中变量值。
详细执行过程如下:- 如果有返回值,就把返回值保存到局部变量中;
- 执行jsr指令跳到finally语句里执行;
- 执行完finally语句后,返回之前保存在局部变量表里的值。
如果try,finally语句里均有return,忽略try的return,而使用finally的return.
-
C++ 语言强化训练
2022-11-18 打卡
知识点总结
1.list 底层数据结构为双向链表,支持快速增删
2.vector 底层数据结构为数组,支持快速随机访问
3.map 底层数据结构为红黑树,除了hashmap无序,其他实现结构有序,不重复
4.set 底层数据结构为红黑树,除了hashset无序,其他实现结构有序,不重复
sql 语言强化训练
2022-11-19 打卡
知识点总结
-
关系模式中各模式之间的关系为
-
对于各种范式之间的关系如下:
5NF⊂ 4NF⊂ BCNF ⊂3NF ⊂ 2NF⊂ 1NF
-
在关系模式中,对应关系的主键必须是 能惟一确定元组的一组属性
-
-
数据库的三级模式结构
- 数据库系统由外模式、模式和内模式构成。
- 外模式(用户模式)是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图;
- 模式也称逻辑模式(概念模式),是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
- 内模式也称存储模式(子模式),是数据物理结构和存储方式的描述。
-
数据库主键
- 候选码(关键字):某一属性组的值能唯一标识一个元组而其子集不能(去掉任意一个属性都不能标识该元组),则称该属性组为候选码 (补充元组:表中的一行即为一个元组)
- 主属性:候选码包含的属性(一个或多个属性)
- 主码(主键、主关键字):若一个关系有多个候选码,选择其中一个为主码
- 主键primary key必须要保证非空not null且不重复
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n9yUvKOC-1668916278619)(牛客网强化训练.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwMTEzNDY3,size_16,color_FFFFFF,t_70.png)]
-
关系模式中的关键字
- 唯一标识性是关键字的一个重要性质,关键字可以只有一个属性,也可由多个属性组成“复合关键字”;
- 无冗余性是关键字的另一个重要性质。
2022-11-20 打卡
知识点总结
-
数据库三大范式
-
第一范式:(文章数据来自该博客,点击即可跳转)
- 一个二维表,关系要符合一个最基本的条件(就是元组之间不能重复)。使用
primary key
或者Unique
可以解决这个问题。下面是错误示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkfFNnGB-1668916278620)(牛客网强化训练.assets/image-20221120102552792.png)]每一个分量必须是不可分的数据项。比如标签数:1、2、3,这种就属于分割项。解决办法就是把单个数据分为多个元组(但有一个问题,这个时候就不能设置主键)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oS3L8Koj-1668916278620)(牛客网强化训练.assets/image-20221120102627642.png)]
- 一个二维表,关系要符合一个最基本的条件(就是元组之间不能重复)。使用
-
这时候另一个问题就出现了,也就是不能插入重复元组。如果插入就又不满足第一个关系的要求了。
-
-
第二范式:(文章数据来自该博客,点击即可跳转)
-
要求满足第一范式
-
不含有部分依赖关系(降低耦合度)
- 如果该表中某个字段需要去引用其他表或者本表的某些信息。而这些信息不能为实际数据,只能为该数据所依赖的主键。
- 假如引入了实际数据,则这些数据的依赖主键和该元组的主键不一致。就会造成部份依赖。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rz1kalpl-1668916278620)(牛客网强化训练.assets/image-20221120104220620.png)]
2NF要求数据表中对列的引用不能有部分依赖,可以理解为在对不同表的数据引用时,要引用其编号而不是实际的数据。这样带来的设计好处是,数据冗余小(只有编号)且易于修改(修改了被引用表的数据对原表没有影响)。
-
-
第三范式:(文章数据来自该博客,点击即可跳转)
- 满足第一,第二范式
- 要求所有非主键列都必须直接依赖于主键,不能有传递依赖的关系。
- 传递依赖指的是。文章编号、文章内容、文章标签、文章标签长短。这时文章编号->文章标签->文章标签长短。形成了传递依赖关系。文章标签长短就显得冗余。
3NF是指一个表中的列应该与主键或者这个表所表示的对象直接关联,而不是间接关联。这样,才能够将依赖降低至最小,从而便于数据的日常管理和维护。
-
总结篇,三大范式与BCNF(文章数据来自该博客,点击即可跳转)
- BCNF范式
- BCNF是比第三范式更严格的一个范式,它要求关系模型中所有的属性(包括非键属性和键属性)都不传递地依赖于任何候选键。也就是说:每一个字段都是一个独立的,不依赖的候选键或者普通字段。
- BCNF范式
-
四种常见视图设计方式
-
通常有如下几种方法:
1、自顶向下。先全局框架,然后逐步细化
2、自底向上。先局部概念结构,再集成为全局结构
3、由里向外。先核心结构,再向外扩张
4、混合策略。1与2相结合,先自顶向下设计一个概念结构的框架,再自底向上为框架设计局部概念结构
-