Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

补充了一点材料,同时将README.md中文档的绝对路径更新为相对路径,以便各fork仓中更新自己内容后能立即看到更新后的内容 #1254

Open
wants to merge 79 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
d6a35cf
Update Java 并发.md
HuaHero Oct 28, 2023
b0bce4d
Merge pull request #1 from HuaHero/patch-4
HuaHero Oct 28, 2023
bb9385c
Update 缓存.md
HuaHero Nov 2, 2023
f38540d
Merge pull request #2 from HuaHero/patch-5
HuaHero Nov 2, 2023
890092c
Update 缓存.md
HuaHero Nov 2, 2023
ab42429
Merge pull request #3 from HuaHero/HuaHero-patch-1
HuaHero Nov 2, 2023
c33b3c6
Update README.md
HuaHero Nov 2, 2023
98fd3f0
Merge pull request #4 from HuaHero/HuaHero-patch-2
HuaHero Nov 2, 2023
50e88cf
Update README.md
HuaHero Nov 2, 2023
595e39b
Merge pull request #5 from HuaHero/HuaHero-patch-3
HuaHero Nov 2, 2023
601d255
Update README.md
HuaHero Nov 2, 2023
be30607
Merge pull request #6 from HuaHero/HuaHero-patch-4
HuaHero Nov 2, 2023
13dd1b5
Update Java IO.md
HuaHero Nov 3, 2023
00b16a3
Merge pull request #7 from HuaHero/HuaHero-patch-5
HuaHero Nov 3, 2023
1ae7d49
Update Java 并发.md
HuaHero Nov 6, 2023
1cde34c
Merge pull request #8 from HuaHero/HuaHero-patch-6
HuaHero Nov 6, 2023
d935f87
增加线程状态转换图
HuaHero Nov 6, 2023
48cd334
Update Java 并发.md
HuaHero Nov 6, 2023
d9ce27c
Merge pull request #9 from HuaHero/HuaHero-patch-7
HuaHero Nov 6, 2023
d2b7a66
Update Java 并发.md
HuaHero Nov 6, 2023
ba65fa3
Merge pull request #10 from HuaHero/HuaHero-patch-8
HuaHero Nov 6, 2023
4848335
Update Java 并发.md
HuaHero Nov 6, 2023
309c114
Merge pull request #11 from HuaHero/HuaHero-patch-9
HuaHero Nov 6, 2023
8bbfed2
Update Java 并发.md
HuaHero Nov 7, 2023
1b84cda
Merge pull request #12 from HuaHero/HuaHero-patch-10
HuaHero Nov 7, 2023
658cd19
Update Java 并发.md
HuaHero Nov 7, 2023
73f1f2a
Merge pull request #13 from HuaHero/HuaHero-patch-11
HuaHero Nov 7, 2023
f03b559
Update Java 并发.md
HuaHero Nov 7, 2023
14742f0
Merge pull request #14 from HuaHero/HuaHero-patch-12
HuaHero Nov 7, 2023
a9add00
Update Java 并发.md
HuaHero Nov 7, 2023
a22fda8
Merge pull request #15 from HuaHero/HuaHero-patch-13
HuaHero Nov 7, 2023
b486889
Update Java 并发.md
HuaHero Nov 7, 2023
77510d7
Merge pull request #16 from HuaHero/HuaHero-patch-14
HuaHero Nov 7, 2023
6698c8f
Update Redis.md
HuaHero Nov 7, 2023
2527774
Merge pull request #17 from HuaHero/HuaHero-patch-15
HuaHero Nov 7, 2023
24a94b6
Update Redis.md
HuaHero Nov 7, 2023
e0c08ad
Merge pull request #18 from HuaHero/HuaHero-patch-16
HuaHero Nov 7, 2023
16b5abe
Update Java 并发.md
HuaHero Nov 9, 2023
37db7c6
Merge pull request #19 from HuaHero/HuaHero-patch-17
HuaHero Nov 9, 2023
251401e
Update Java 并发.md
HuaHero Nov 9, 2023
8d50248
Merge pull request #20 from HuaHero/HuaHero-patch-18
HuaHero Nov 9, 2023
26e8134
Update Java 并发.md
HuaHero Nov 9, 2023
aa9c047
Merge pull request #21 from HuaHero/HuaHero-patch-19
HuaHero Nov 9, 2023
b2e5d11
Update Java 并发.md
HuaHero Nov 9, 2023
c14d40f
Merge pull request #22 from HuaHero/HuaHero-patch-20
HuaHero Nov 9, 2023
32ee515
Update Java 并发.md
HuaHero Nov 9, 2023
5a00ba8
Merge pull request #23 from HuaHero/HuaHero-patch-21
HuaHero Nov 9, 2023
27f8ca0
Update Java 并发.md
HuaHero Nov 9, 2023
c2f5d89
Merge pull request #24 from HuaHero/HuaHero-patch-22
HuaHero Nov 9, 2023
ad575d7
Add files via upload
HuaHero Nov 16, 2023
fb211c0
Create 做题情况统计--软件编程知识与应用.md
HuaHero Nov 23, 2023
87e47ad
Merge pull request #25 from HuaHero/HuaHero-patch-23
HuaHero Nov 23, 2023
357e6f0
Create Jenkins.md
HuaHero Nov 28, 2023
e2f8897
Merge pull request #26 from HuaHero/HuaHero-patch-24
HuaHero Nov 28, 2023
5d94e09
Create docker和kubernetes.md
HuaHero Nov 29, 2023
4084c1f
Merge pull request #27 from HuaHero/HuaHero-patch-25
HuaHero Nov 29, 2023
13e5c88
Update docker和kubernetes.md
HuaHero Nov 30, 2023
ce8a5c4
Merge pull request #28 from HuaHero/HuaHero-patch-26
HuaHero Nov 30, 2023
0404cf7
增加kubernetes笔记
HuaHero Dec 5, 2023
470cc5f
增加经典算法之九阳神功
HuaHero Dec 5, 2023
54b6b7e
Delete 经典算法之九阳神功.xlsx
HuaHero Dec 5, 2023
2c70846
Merge pull request #29 from HuaHero/HuaHero-patch-27
HuaHero Dec 5, 2023
19ecc1c
记录经典算法
HuaHero Dec 5, 2023
9e226a1
Update 算法--九阳神功.md
HuaHero Dec 6, 2023
d965525
Merge pull request #30 from HuaHero/HuaHero-patch-28
HuaHero Dec 6, 2023
0f0d30e
Update Redis.md
HuaHero Dec 6, 2023
72c34cf
Merge pull request #31 from HuaHero/HuaHero-patch-29
HuaHero Dec 6, 2023
ee55b61
Update Redis.md
HuaHero Dec 6, 2023
c516587
Merge pull request #32 from HuaHero/HuaHero-patch-30
HuaHero Dec 6, 2023
370acae
Update Redis.md
HuaHero Dec 6, 2023
f735a2b
Merge pull request #33 from HuaHero/HuaHero-patch-31
HuaHero Dec 6, 2023
7eb4992
Update Linux.md
HuaHero Dec 12, 2023
3b97253
Merge pull request #34 from HuaHero/HuaHero-patch-32
HuaHero Dec 12, 2023
d280870
Update 缓存.md
HuaHero Dec 12, 2023
b5561e1
Merge pull request #35 from HuaHero/HuaHero-patch-33
HuaHero Dec 12, 2023
3b089a7
Update Linux.md
HuaHero Dec 15, 2023
10c3bc3
Merge pull request #36 from HuaHero/HuaHero-patch-34
HuaHero Dec 15, 2023
0015154
Update Java 并发.md
HuaHero Dec 15, 2023
0cd6e10
Merge pull request #37 from HuaHero/HuaHero-patch-35
HuaHero Dec 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
64 changes: 32 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,63 +22,63 @@

## :pencil2: 算法

- [剑指 Offer 题解](https://github.com/CyC2018/CS-Notes/blob/master/notes/剑指%20Offer%20题解%20-%20目录.md)
- [Leetcode 题解](https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20题解%20-%20目录.md)
- [算法](https://github.com/CyC2018/CS-Notes/blob/master/notes/算法%20-%20目录.md)
- [剑指 Offer 题解](./notes/剑指%20Offer%20题解%20-%20目录.md)
- [Leetcode 题解](./notes/Leetcode%20题解%20-%20目录.md)
- [算法](./notes/算法%20-%20目录.md)
- [字节跳动内推](assets/内推.md)

## :computer: 操作系统

- [计算机操作系统](https://github.com/CyC2018/CS-Notes/blob/master/notes/计算机操作系统%20-%20目录.md)
- [Linux](https://github.com/CyC2018/CS-Notes/blob/master/notes/Linux.md)
- [计算机操作系统](./notes/计算机操作系统%20-%20目录.md)
- [Linux](./notes/Linux.md)

## :cloud: 网络

- [计算机网络](https://github.com/CyC2018/CS-Notes/blob/master/notes/计算机网络%20-%20目录.md)
- [HTTP](https://github.com/CyC2018/CS-Notes/blob/master/notes/HTTP.md)
- [Socket](https://github.com/CyC2018/CS-Notes/blob/master/notes/Socket.md)
- [计算机网络](./notes/计算机网络%20-%20目录.md)
- [HTTP](./notes/HTTP.md)
- [Socket](./notes/Socket.md)

## :floppy_disk: 数据库

- [数据库系统原理](https://github.com/CyC2018/CS-Notes/blob/master/notes/数据库系统原理.md)
- [SQL 语法](https://github.com/CyC2018/CS-Notes/blob/master/notes/SQL%20语法.md)
- [SQL 练习](https://github.com/CyC2018/CS-Notes/blob/master/notes/SQL%20练习.md)
- [MySQL](https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md)
- [Redis](https://github.com/CyC2018/CS-Notes/blob/master/notes/Redis.md)
- [数据库系统原理](./notes/数据库系统原理.md)
- [SQL 语法](./notes/SQL%20语法.md)
- [SQL 练习](./notes/SQL%20练习.md)
- [MySQL](./notes/MySQL.md)
- [Redis](./notes/Redis.md)

## :coffee: Java

- [Java 基础](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20基础.md)
- [Java 容器](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20容器.md)
- [Java 并发](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20并发.md)
- [Java 虚拟机](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20虚拟机.md)
- [Java I/O](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20IO.md)
- [Java 基础](./notes/Java%20基础.md)
- [Java 容器](./notes/Java%20容器.md)
- [Java 并发](./notes/Java%20并发.md)
- [Java 虚拟机](./notes/Java%20虚拟机.md)
- [Java I/O](./notes/Java%20IO.md)

## :bulb: 系统设计

- [系统设计基础](https://github.com/CyC2018/CS-Notes/blob/master/notes/系统设计基础.md)
- [分布式](https://github.com/CyC2018/CS-Notes/blob/master/notes/分布式.md)
- [集群](https://github.com/CyC2018/CS-Notes/blob/master/notes/集群.md)
- [攻击技术](https://github.com/CyC2018/CS-Notes/blob/master/notes/攻击技术.md)
- [缓存](https://github.com/CyC2018/CS-Notes/blob/master/notes/缓存.md)
- [消息队列](https://github.com/CyC2018/CS-Notes/blob/master/notes/消息队列.md)
- [系统设计基础](./notes/系统设计基础.md)
- [分布式](./notes/分布式.md)
- [集群](./notes/集群.md)
- [攻击技术](./notes/攻击技术.md)
- [缓存](./notes/缓存.md)
- [消息队列](./notes/消息队列.md)

## :art: 面向对象

- [面向对象思想](https://github.com/CyC2018/CS-Notes/blob/master/notes/面向对象思想.md)
- [设计模式](https://github.com/CyC2018/CS-Notes/blob/master/notes/设计模式%20-%20目录.md)
- [面向对象思想](./notes/面向对象思想.md)
- [设计模式](./notes/设计模式%20-%20目录.md)

## :wrench: 工具

- [Git](https://github.com/CyC2018/CS-Notes/blob/master/notes/Git.md)
- [Docker](https://github.com/CyC2018/CS-Notes/blob/master/notes/Docker.md)
- [构建工具](https://github.com/CyC2018/CS-Notes/blob/master/notes/构建工具.md)
- [正则表达式](https://github.com/CyC2018/CS-Notes/blob/master/notes/正则表达式.md)
- [Git](./notes/Git.md)
- [Docker](./notes/Docker.md)
- [构建工具](./notes/构建工具.md)
- [正则表达式](./notes/正则表达式.md)

## :watermelon: 编码实践

- [代码可读性](https://github.com/CyC2018/CS-Notes/blob/master/notes/代码可读性.md)
- [代码风格规范](https://github.com/CyC2018/CS-Notes/blob/master/notes/代码风格规范.md)
- [代码可读性](./notes/代码可读性.md)
- [代码风格规范](./notes/代码风格规范.md)

## :memo: 后记

Expand Down
Binary file added assets/1641890623956-ani--线程状态转换.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions notes/Java IO.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
* [选择器](#选择器)
* [套接字 NIO 实例](#套接字-nio-实例)
* [内存映射文件](#内存映射文件)
* [待补充AIO]
* [对比](#对比)
* [八、参考资料](#八参考资料)
<!-- GFM-TOC -->
Expand Down
80 changes: 77 additions & 3 deletions notes/Java 并发.md

Large diffs are not rendered by default.

80 changes: 80 additions & 0 deletions notes/Java与C++后端开发.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# 关键字

| 关键字 | Java | C++ |
| --------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **volatile** | 它表示**可见性**。即被该关键字修改的变量的读操作一定在该变量的写更新后。 | (1)**易变性**--在汇编层面来看,即读取该变量的值时直接从内存中读取,而不是从寄存器。<br />(2)"**不可优化**"特性。<br />(3)"**顺序性**"--保证volatile变量间的顺序性,编译器不会进行乱序优化。 |
| **static** | (1)修饰类中成员变量。<br />(2)修饰类中方法。表示该方法属于整个类而不属于类的特定实例<br />(3)修饰代码块。 | 控制变更的**存储方式和可见性**<br />(1)修饰局部变量——原本局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果**用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束**。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。<br />(2)修饰全局变量——原本对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。用static对全局变量进行修饰**改变了其作用域的范围,由原来的整个工程可见变为本源文件可见**。<br />(3)修饰函数。——与修饰全局变量大同小异,就是改变了函数的作用域。<br />(4)C++中的static(中的某个函数用static进行修饰,则表示该函数属于一个类而不是属于此类的任何特定对象;如果对类中的某个变量进行static修饰,表示该变量为类以及其所有的对象所有。它们在存储空间中都只存在一个副本。可以通过类和对象去调用。 ) |
| **const**(常量限定符) | (1)修饰**类**。——表明该类不能被继承<br />(2)修饰对象。——表明该对象引用不可修改,当然对象的值依然可被修改<br />(3) | const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。<br/> <br/>(1)const修饰基本数据类型<br/><br/> 1.const修饰一般常量及数组<br/> <br/> 基本数据类型,修饰符const可以用在类型说明符前,也可以用在类型说明符后,其结果是一样的。在使用这些常量的时候,只要不改变这些常量的值便好。 <br/> <br/> 2.const修饰指针变量*及引用变量& <br/> <br/>如果const位于星号*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;<br/><br/>如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。<br/><br/>(2)const应用到函数中, <br/><br/> 1.作为参数的const修饰符<br/> <br/> 调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,保护了原对象的属性。<br/> [注意]:参数const通常用于参数为指针或引用的情况; <br/> <br/> 2.作为函数返回值的const修饰符<br/> <br/> 声明了返回值后,const按照"修饰原则"进行修饰,起到相应的保护作用。<br/><br/>(3)const在类中的用法<br/><br/>不能在类声明中初始化const数据成员。正确的使用const实现方法为:const数据成员的初始化只能在类构造函数的初始化表中进行<br/>类中的成员函数:A fun4()const; 其意义上是不能修改所在类的的任何变量。<br/><br/>(4)const修饰类对象,定义常量对象 <br/>常量对象只能调用常量函数,别的成员函数都不能调用。<br/><br/>http://www.cnblogs.com/wintergrass/archive/2011/04/15/2015020.html |
| **extern** | —— | 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。<br/><br/>注意extern声明的位置对其作用域也有关系,如果是在main函数中进行声明的,则只能在main函数中调用,在其它函数中不能调用。其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时间。<br/><br/>在C++中extern还有另外一种作用,用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同,用此来解决名字匹配的问题。 |

#### C/C++特有---宏定义和展开、内联函数区别

**内联函数是代码被插入到调用者代码处的函数**。如同 #define 宏,内联函数通过避免被调用的开销来**提高执行效率**,尤其是它能够通过调用(“过程化集成”)被编译器优化。 **宏定义不检查函数参数,返回值什么的,只是展开,相对来说,内联函数会检查参数类型,所以更安全。** 内联函数和宏很类似,而区别在于,**宏是由预处理器对宏**进行替代,而**内联函数是通过编译器控制**来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。

宏是预编译器的输入,然后宏展开之后的结果会送去编译器做语法分析。宏与函数等处于不同的级别,操作不同的实体。宏操作的是 token, 可以进行 token的替换和连接等操作,在语法分析之前起作用。而函数是语言中的概念,会在语法树中创建对应的实体,内联只是函数的一个属性。
对于问题:有了函数要它们何用?答案是:一:函数并不能完全替代宏,有些宏可以在当前作用域生成一些变量,函数做不到。二:内联函数只是函数的一种,内联是给编译器的提示,告诉它最好把这个函数在被调用处展开,省掉一个函数调用的开销(压栈,跳转,返回)

内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样

内联函数必须是和函数体申明在一起,才有效。

[宏定义和内联函数区别](http://www.cnblogs.com/chengxuyuancc/archive/2013/04/04/2999844.html)

# STL原理及实现

> Java中集合类(接口collection的子类)、map接口

STL提供六大组件,彼此可以组合套用:

> 1、容器(Containers):各种数据结构,如:序列式容器vector、list、deque、关联式容器set、map、multiset、multimap。用来存放数据。从实现的角度来看,STL容器是一种class template。

> 2、算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算法是一种 function template。注意一个问题**:任何的一个STL算法,都需要获得由一对迭代器所标示的区间,用来表示操作范围**。这一对迭代器所标示的区间都是前闭后开区间,例如[first, last)

> 3、迭代器(iterators):容器与算法之间的胶合剂,**是所谓的“泛型指针”**。共有五种类型,以及其他衍生变化。从实现的角度来看,迭代器是一种将 operator*、operator->、operator++、operator- - 等指针相关操作进行重载的class template。所有STL容器都有自己专属的迭代器,只有容器本身才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。

> 4、仿函数(functors):行为类似函数,可作为算法的某种策略(policy)。从实现的角度来看,仿函数是一种重载了operator()的class或class template。一般的函数指针也可视为狭义的仿函数。

> 5、配接器(adapters):一种用来修饰容器、仿函数、迭代器接口的东西。例如:STL提供的queue 和 stack,虽然看似容器,但其实只能算是一种容器配接器,因为它们的底部完全借助deque,所有操作都由底层的deque供应。改变 functors接口者,称为function adapter;改变 container 接口者,称为container adapter;改变iterator接口者,称为iterator adapter。

> 6、配置器(allocators):负责空间配置与管理。从实现的角度来看,**配置器是一个实现了动态空间配置、空间管理、空间释放的class template**。

这六大组件的交互关系:container(容器) 通过 allocator(配置器) 取得数据储存空间,algorithm(算法)通过 iterator(迭代器)存取 container(容器) 内容,functor(仿函数) 可以协助 algorithm(算法) 完成不同的策略变化,adapter(配接器) 可以修饰或套接 functor(仿函数)

序列式容器:
vector-数组,元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组中。
list-单链表。
deque-分配中央控制器map(并非map容器),map记录着一系列的固定长度的数组的地址.记住这个map仅仅保存的是数组的地址,真正的数据在数组中存放着.deque先从map中央的位置(因为双向队列,前后都可以插入元素)找到一个数组地址,向该数组中放入数据,数组不够时继续在map中找空闲的数组来存数据。当map也不够时重新分配内存当作新的map,把原来map中的内容copy的新map中。所以使用deque的复杂度要大于vector,尽量使用vector。

stack-基于deque。
queue-基于deque。
heap-完全二叉树,使用最大堆排序,以数组(vector)的形式存放。
priority_queue-基于heap。
slist-双向链表。

关联式容器:
set,map,multiset,multimap-基于红黑树(RB-tree),一种加上了额外平衡条件的二叉搜索树。

hash table-散列表。将待存数据的key经过映射函数变成一个数组(一般是vector)的索引,例如:数据的key%数组的大小=数组的索引(一般文本通过算法也可以转换为数字),然后将数据当作此索引的数组元素。有些数据的key经过算法的转换可能是同一个数组的索引值**(碰撞问题,可以用线性探测,二次探测来解决**),STL是用开链的方法来解决的,每一个数组的元素维护一个list,他把相同索引值的数据存入一个list,这样当list比较短时执行删除,插入,搜索等算法比较快。

hash_map,hash_set,hash_multiset,hash_multimap-基于hashtable。

[STL六大组件] (http://blog.csdn.net/chenguolinblog/article/details/30336805)
什么是“标准非STL容器”?

list和vector有什么区别?

> vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector。
> list拥有一段不连续的内存空间,因此不支持随机存取,如果需要大量的插入和删除,而不关心随即存取,则应使用list。

# 虚函数

C++的多态分为静态多态(编译时多态)和动态多态(运行时多态)两大类。静态多态通过重载、模板来实现;动态多态就是通过本文的主角虚函数来体现的。

虚函数实现原理:包括虚函数表、虚函数指针等

虚函数的作用说白了就是:当调用一个虚函数时,被执行的代码必须和调用函数的对象的动态类型相一致。编译器需要做的就是如何高效的实现提供这种特性。不同编译器实现细节也不相同。大多数编译器通过vtbl(virtual table)和vptr(virtual table pointer)来实现的。 当一个类声明了虚函数或者继承了虚函数,这个类就会有自己的vtbl。vtbl实际上就是一个函数指针数组,有的编译器用的是链表,不过方法都是差不多。vtbl数组中的每一个元素对应一个函数指针指向该类的一个虚函数,同时该类的每一个对象都会包含一个vptr,vptr指向该vtbl的地址。



C/C++的具体总结可看[cpp-backend-reference/back-end.md at master · chankeh/cpp-backend-reference (github.com)](https://github.com/chankeh/cpp-backend-reference/blob/master/back-end.md)

43 changes: 43 additions & 0 deletions notes/Jenkins.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
按Git的学习之旅的安排

# Jenkins简介

Java开发的开源软件--一定需要**jdk环境**

持续集成工具,用于监控持续重复的工作--假设没有Jenkins的话会怎样--**手动**build、**手动**部署?

官网: https://jenkins.io

# Jenkins的下载与安装

必须要java8。

jenkins.msi---Windows平台中,直接双击安装 ,比较方便。

jenkins.war---web项目,java -jar jenkins.war或直接放到tomcat等web容器的web-app下面,启动tomcat.

安装配置默认插件、配置等。

![image-20231128105304073](..\assets\image-20231128105304073--Jenkins.png)

# Jenkins的工作流程

1. 如何帮助我们自动完成这些工作的呢---->Jenkins的工作流程

![image-20231128110758572](..\assets\image-20231128110758572--Jenkins工作流.png)

![image-20231128112504570](..\assets\image-20231128112504570--Jenkins-work.png)

1.

2. 拉取代码机制

> 让Jenkins任务对应一个仓,到该拉取代码。

3. 项目构建与发布



4. 自动集成发布--不需要手动让Jenkins去拉取、构建和部署。