linux基础记录Linux由浅至深的一切知识
熟悉Linux下目录结构和常见目录的作用
熟练使用linux下的相对路径和绝对路径
熟练使用Linux下常用文件和目录操作相关的命令
熟练使用修改用户权限,用户和用户组相关的命令
熟练使用文件的查找和检索相关的命令
熟练掌握Ubuntu下的软件安装和卸载
熟练使用压缩工具完成文件或目录的压缩解压缩
linux详细知识点查询
命令解释器
shell就是命令解释器
作用:对用户输入到终端的命令进行解析,调用对应的执行程序
用户在终端输入命令,由shell命令解释器对命令进行解析(按照$PATH环境变量搜索命令),解析成内核能够识别的指令,然后有内核执行命令,最后由终端显示命令执行的结果给用户
shell在寻找命令的时候是按照$PATH环境变量去查找的,如果找到了就执行对应的命令,若找不到就报错,执行echo $PATH可以查看PATH环境变量的值
常见的命令解析器:
shell – Bourne Shell (/bin/sh) 不支持tab键补全
bash – Bourne Again ...
数据结构学习
数据结构数据结构是计算机存储、组织数据的方式。是相互之间存在一种或多种特定关系的数据元素集合
[[算法]]是特定问题求解步骤的描述,在计算机中表现为指令的有限序列,算法是独立存在的一种解决问题的方法和思想。
对于算法而言,语言并不重要,重要的是思想。
[[算法]]和数据结构区别
算法是为了解决实际问题而设计的。
数据结构是算法需要处理的问题载体。
数据结构与算法相辅相成。
[[算法]]具有五个基本的特性:输入、输出、有穷性、确定性和可行性
输入输出:算法具有零个或多个输入、至少有一个或多个输出。
有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
确定性:算法的每一步骤都有确定的含义,不会出现二义性。
可行性:算法的每一步都必须是可行的,也就是说,每一步都能通过执行有限次数完成。
数据结构分类逻辑结构集合结构集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系。各个数据元素是平等的。他们共同属于同一个集合,数据结构中的集合关系类似于数学中的集合。如图:
线性结构线性结构中的数据元素之间是一对 ...
算法是指解决问题的方法(或过程),是若干指令的有穷序列
算法的本质就是「穷举」
算法的本质都是穷举二(多)叉树,有机会的话通过剪枝或者备忘录的方式减少冗余计算,提高效率
利用计算机的速度,解决现实中的抽象问题
穷举要做到两点
无遗漏
无冗余
遗漏会导致算法错误,冗余会拖慢算法运行速度
算法的难点在于两类问题
如何穷举(递归算法往往解决的是这类问题)
如何聪明的穷举
比如后文 Union Find 并查集算法详解,告诉你一种高效计算连通分量的技巧,理论上说,想判断两个节点是否连通,用DFS/BFS 暴力搜索(穷举)肯定可以做到,但人家 Union Find 算法硬是用数组模拟树结构,给你把连通性相关的操作复杂度给干到O(1)了。再比如贪心算法技巧,所谓贪心算法就是在题目中发现一些规律(专业点叫贪心选择性质),使得你不用完整穷举所有解就可以得出答案。动态规划好歹是无冗余地穷举所有解,然后找一个最值,贪心算法倒好,都不用穷举所有解就可以找到答案,所以后文贪心算法解决跳跃游戏 中贪心算法的效率比动态规划还高。再比如大名鼎鼎的KMP算法,KMP 算法的本质是聪明地缓存并 ...
CMake是用于构建,测试,和软件打包的开源跨平台工具
参阅书籍:<<cmake菜谱>>
参考链接
Linux,Windows,和macOS系统中库的名称Windowswindows下的库文件(下面非必须,只是大部分开源库的习惯)
库文件包含静态库和动态库,而windows版本的静态库和动态库又各自有Release
静态库
库名.lib是 release 模式下生成的库文件,用于发布版本;经过了优化的,并不包含调试信息
库名_d.lib或库名d.lib是 debug 模式下生成的库文件,用于调试版本。debug 模式下生成的库文件包含了额外的调试信息,以方便调试程序时进行源码级别的跟踪
动态库
同时生成两个文件,二者是关联的
库名.lib(文件很小,不包含真正的源代码,只在编译阶段需要用到) 函数地址索引
库名.dll 函数二进制代码
在Windows平台上编译动态链接库时,通常会生成一个.lib文件和一个.dll文件。其中,.lib文件用于编译阶段的链接,动态链接库的实际代码和数据存放在.dll文件中。因此,.lib文件只在开 ...