01 2022 档案
摘要:https://www.cnblogs.com/zhengyun_ustc/p/slowquery1.html
阅读全文
摘要:docker和传统虚拟机的区别? 传统虚拟机是由内核kernel、库lib以及各个应用程序App三层结构构成,虚拟出了完整硬件和整个操作系统,然后再这个OS中运行虚拟机,因此开销较大。 而docker则对传统虚拟机进行了压缩和简化, 容器技术(container)使得不同应用和此应用所必需的库文件被
阅读全文
摘要:虽然是道简单题,我也没有想到最优方法。 题目 给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其
阅读全文
摘要:Mark-Sweep(标记清除) 顾名思义,对垃圾进行标记然后删除。但是由于删除垃圾的原位置无法再添加新数据,会产生碎片化的问题。 Mark-Compact(标记压缩) 顾名思义,是MS算法的优化,在标记并删除垃圾的同时对有用数据重新规划占用的内存空间,使其聚集在内存最前面,规整地利用好空间,进行了
阅读全文
摘要:HandlerMapping:寻找对应request的handler。 HandlerAdapter:运用了设计模式中的适配器模式,统一调用不同的Handler。 HanderExceptionResolver ViewResolver:将String和Locale解析为View。 RequestT
阅读全文
摘要:分为以下几个步骤: 查看执行计划中的type列:若性能为ALL或者RANGE以下,则需要优化查询; 查看执行计划中的key列:一般为默认优化器所选择的索引,因此照着key列添加索引一般是没问题的。
阅读全文
摘要:共享锁 又称读锁,简称S锁。当一个事务添加共享锁时,其他事务都可以去读,但无法上写锁进行数据的修改。 排他锁 又称写锁,简称X锁。当一个事务添加排他锁时,其他事务都不可以去读或者写。
阅读全文
摘要:聚簇索引:数据和索引存储在一起。 非聚簇索引:数据和索引分别进行存储。
阅读全文
摘要:READ UNCOMMITED 读取未提交内容 READ COMMITED 读取已提交内容 REPEATABLE READ 可重复读 SERIALIZABLE 可串行化
阅读全文
摘要:懒得手打了直接去看Java设计模式:23种设计模式全面解析(超级详细) (biancheng.net) 但是有几个点要注意: 面向对象设计原则虽然被分成了7条,但本质上可以分为5组: 开闭原则:需求改变时,无需推倒重来,直接进行扩展;对扩展开放,对修改关闭 里氏替换+合成复用:尽量使用组合聚合代替继
阅读全文
摘要:B+树特征 1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。 2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。 3.所有的中间节点元素都同时存在于子节点,在子
阅读全文
摘要:一个B树首先是一个多叉平衡树。 一个m阶的B树具有如下几个特征: 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m 相比普通的二叉平衡树,特点是更加“矮胖”,提高了搜索效
阅读全文
摘要:啥是索引? 把数据比作字典的话,索引就是字典的目录。 索引的底层实现一般使用B+tree和hash(默认只是Btree)。 啥事B+树? B树是有一种中序排序树。 B+树是B树的优化。 每个右节点存储了大于等于父节点的数据。 每个左节点存储了小于等于父节点的数据。 特点是所有叶子节点分别存储了所有数
阅读全文
摘要:题目 哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己
阅读全文
摘要:原子性 即一个或多个操作要么不执行,要么就全部执行完毕,不会被其他因素打断。类似于数据库的事务。 因此可以通过锁、synchronized来确保。volatile是无法保证复合操作的原子性。 可见性 当多个线程共享一个变量时,若其中一个线程改变变量的值,其他线程立即就能够看到,即为可见性。 Java
阅读全文
摘要:问:有何区别? 标答:第一种方法会产生大量中间值(脏数据),原子性完全被破坏,可能导致引用不正确。 第二种方法虽然也会产生中间值,但是只有0一个初始值(脏数据),因此虽然不具有原子性,但是第二种方法仍然比第一种好得多。
阅读全文
摘要:找百科全书 awesome XXX 找例子 XXX sample 找项目空架子 XXX starter/boilerplate 找教程 XXX tutorial
阅读全文
摘要:题目 给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) ... (uk,vk) 。 示例 1: 输入: nums
阅读全文
摘要:目前认识到的机制: C++中构造函数和析构函数只会在编译阶段运行一次,无论你定义了多少不同的构造函数,在一般情况下只会让编译器选择其中一个进行执行,且不会调用构造函数内部其他的构造函数。
阅读全文
摘要:大学里学C++时老师都说不建议使用三元表达式,虽然很简洁,但是会产生一些问题。 其中的一个问题就是三元表达式中":"两边的对象必须是相同类型的。 这其实本质上是从类型安全角度上考虑做出如此设计的,但是C++本身又不是类型安全的,因此惯性思维容易出错。
阅读全文
摘要:标答: int a = 0,b = 1; a = a + b; b = a - b; a = a - b;
阅读全文
摘要:重载指在同一个类中,可以有一组具有相同函数名,不同参数列表的函数。 重写指在继承中,子类对基类中的虚函数进行重新实现,函数名、参数表皆不可改变 重定义指在继承中,子类对基类中的普通函数进行重新实现,函数名、参数表皆不可改变 因此,重写和重定义最大不同就是目标函数是否是虚函数。
阅读全文
摘要:题目 给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 示例 1: 输入:nums
阅读全文
摘要:一般来说,就是向上类型转化过程中,派生类被截成只有基类相同的部分。 比如类cat是继承类animal,animal里只有一个成员变量weight;cat里有继承的成员变量weight,另外还有成员变量catkind以及一个函数shout();现在有一个函数f(animal xxx);这个函数接收一个
阅读全文
摘要:简答: 缺省的构造函数 拷贝的构造函数 析构函数 赋值运算符 取址运算符 取址运算符const
阅读全文
摘要:标答: 两个数,a,b; return (a+b + |a - b|)/2 结束
阅读全文
摘要:一般来说,C++中return 所返回的对象有三类: 值 引用 指针 当返回指针或引用时要注意绝对不能是指向栈空间的指针或者引用,否则可能出现野指针; 返回对象时也要注意效率问题。
阅读全文
摘要:C++种拷贝分为深拷贝和浅拷贝。 深拷贝本质上拷贝了指针和资源;浅拷贝本质上只拷贝了指针。 因此,需要注意的是,若拷贝构造函数或析构函数时必须使用深拷贝而不是浅拷贝,否则可能会导致对同一份资源进行多次构造或者析构,引发未知错误程序崩溃。
阅读全文
摘要:C++中模板作为一种机制,是泛型编程的实质,进而也是容器实现的思想原理。 C++中当前标准中存在的容器有7种: vector, list, deque set, map, multiset, multimap
阅读全文
摘要:标答: 函数重载时,要通过函数签名对函数进行区分。 所谓函数签名,是由以下两个部分组成的: 函数名 函数参数的个数和类型 在重载的函数中,由于函数名相同,因此要区分函数就要从参数方面入手,从函数传递参数的个数和类型上去判断究竟是哪个函数被调用了。 注意,C/C++是可以忽略函数返回值的,因此,不能从
阅读全文
摘要:何时使用static修饰的局部变量? 当要求变量受到上一次运算后的影响时,使用static修饰局部变量即可。 举个栗子: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return
阅读全文
摘要:当类A中无任何成员变量或成员函数时,sizeof(A)=1。 为啥? 因为若为零,则声明一个class A[10]对象数组,但是每一个对象占用空间为0,则无法进行区分。
阅读全文
摘要:目前只遇到过三个: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return i; } int main(void) { if(__cplusplus){ cout << "c+
阅读全文
摘要:virtual是隐性继承的,因此当父类写了virtual函数,子类进行重写时virtual可写可不写推荐写全。 其他类似virtual的具有隐性继承能力的还有:
阅读全文
摘要:debug:调试 release:发布 这是谷歌翻译,但在build阶段这两者具体区别是什么捏? debug,会附加很多程序不相关或相关度不高的信息,编译产生的可执行文件大小也偏大一些; release是debug的“瘦身版”,简化了附加信息,大大减少了编译时间,同时产生的可执行文件也相对小一些。
阅读全文
摘要:C++const修饰四大作用 阻止一个变量被改变,即”只读“; 函数声明中对形参添加const修饰,表明作为外部输入量无法被函数内部改变; 类的成员函数若被指定为const,则表明它是一个常函数,此成员函数自身无法修改对象类中的成员数据; 类的成员函数的返回值若被指定为const,则可以使得这个返回
阅读全文
摘要:简单情况下,打开会失败 复杂情况下,由于文件描述符结构中指针指向的内存被重复释放,而文件指针自身不会改变,因此在释放的间隔过程中有可能会将后来进入这片空间的新数据也释放掉,造成未知错误。
阅读全文
摘要:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表
阅读全文
摘要:方法一: 1、定义一个指针p; 2、sizeof(p),若结果为4,则为32位系统;若为8,则为64位系统。 方法二(不使用sizeof()): unsigned int c = ~ 0 ; cout << c;//结果为65535就是16位;4294967295就是64位 return 0;
阅读全文
摘要:类型安全是指同一段内存在不同的地方,会被强制要求使用相同的类型来解释(内存中的数据是用类型来解释的)。 简单地说类型安全一定程度等价于内存安全。 Java语言是类型安全的,除非强制类型转换。 C语言不是类型安全的,因为同一段内存可以用不同的数据类型来解释,比如1用int来解释就是1,用boolean
阅读全文
摘要:内存耗尽的两种主流处理方式 一、直接return 适用于只有一处需要释放内存,即整个函数只有一处需要动态分配内存。 二、直接exit(1) 适用于函数多出可能发生内存溢出的情况。 注意设置异常错误处理 一般做法是为new/malloc编写自定义的异常处理函数。
阅读全文
摘要:为何有了malloc()和free()还要有new和delete? 区别其实在标题就已经十分明显了——malloc()和free()是C/C++的标准库中的库函数,用于手动开辟/销毁内存空间;new和delete是C++中新增的关键字,作用与malloc()和free()一致。 虽然作用一致,但是库
阅读全文
摘要:全局变量、局部变量之间的区别?四个维度回答 维度一:时间(生命周期) 从生命周期上讲,全局变量程序运行时创建、程序结束时销毁;普通的局部变量函数调用时创建、函数调用完成后销毁。 静态局部变量与静态全局变量都是静态的,生命周期与全局变量一致。 维度二:空间(作用域) 从作用域上讲,全局变量整个程序的源
阅读全文
摘要:C++内联函数 c++内联函数提出的目的是节约栈空间。众所周知函数存放在栈中,而系统内存中栈空间是有限而宝贵的。由于有的时候一些简单的函数可能会大量占用栈空间,因此inline得以出现。 inline函数,即内联函数,本质上是编译器(注意,是编译器认定是否可以认定为内联函数)将inline关键字所限
阅读全文
摘要:C++内存分配 静态存储区域 在编译阶段时,全局变量等静态变量就已经在静态存储区域完成初始化了。 栈 一般函数本身以及函数内部所有变量都会在栈上创建。函数执行结束后进行出栈。虽然效率很高但可惜的是内存中栈存储的空间有限。 堆 一般亦称动态内存分配,即在堆上分配内存空间供变量使用。程序员自我管理内存的
阅读全文
摘要:虚函数表是实现C++中实现多态的基础,当然也是实现虚函数的基础。 每一个类都独立拥有一个虚函数表,类中所有虚函数都以数组形式存放在该类的虚函数表中。 虚函数表在类的编译阶段就建立了,然而虚函数表指针——作为类的隐藏成员——却在运行期间当函数被调用时才完成初始化的。
阅读全文
摘要:C++中多态的两种作用 主要从函数和类两个方面分析: 从函数角度切入,多态使得代码可以实现模块化,隐藏了实现细节,实现了代码重用; 从类的角度切入,多态使得类在继承和派生时,保证家族中任意实例的属性被正确调用。 C++中多态的本质是为了方便代码重用。
阅读全文
摘要:C++中两个加号具有不同含义 第一个加号代表C++与C相比,添加了OOP等特性,添加了类、虚函数等结构。第一个加号代表特性上的扩充。 第二个加号代表C++添加了许多语法糖、标准库等等扩充和改进,使得C++比C更加易用。因此与C相比,C++更适合复杂系统设计和实际业务场景。
阅读全文
摘要:C++中,虚函数分为纯虚函数和虚函数。 纯虚函数的作用只有一个,就是定义抽象类。 虚函数则提供两种提示: 在继承中,子类将重写父类中的虚函数,也就是说,虚函数在继承设计下将担任多态的实现; 子类中的重写函数将动态绑定父类中的虚函数 本质上,c++中虚函数的产生是为了实现OOP继承。
阅读全文
摘要:C++中动态与静态的个人理解 c++程序生成主要可以分为四个阶段: 预处理 编译 汇编 链接 动态与静态在第二步和第四步会出现分化,其余阶段皆不会涉及到动态静态的问题。 在编译阶段,可能会涉及到虚函数的动态绑定问题。若程序中存在虚函数,则虚函数的类型只能在程序运行时由对象的实际类型确定,即在编译阶段
阅读全文
摘要:C++中值传递、指针传递、引用传递的关系和区别 引用与指针的区别 引用必须初始化且不能为空,引用不能被改变 指针可以为空,且可以被改变
阅读全文
摘要:何为编译器变量? 在C/Cpp中,由于历史原因,带有__(双下划线)前缀的变量是被看作预留给编译器使用的变量,即编译器变量。 标准答案 观察内置宏,即 #ifdef __cplusplus cout << "C++"; #else cout << "C"; #endif
阅读全文
摘要:C++中结构体和类只有两个区别: 默认的继承方式不同:struct默认继承方式为public,class默认继承方式为private。 成员的默认访问权限不同:struct中成员的默认访问权限为public,class中成员的默认访问权限为private。 struct是C++编程中常用的模块化编程
阅读全文
摘要:静态全局变量的作用域 静态全局变量的作用是作为全局变量供该源文件中所有函数去使用,因此其作用域仅限该源文件。
阅读全文
摘要:题目 累加数 是一个字符串,组成它的数字可以形成累加序列。 一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。 给你一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则
阅读全文
摘要:操作系统四大特性 并发性:并行性指两个或多个事件在同一时刻发生(多线程);并发性指两个或多个事件在同一时间间隔内发生(多个事务单线程)。 共享性:是指系统中的资源可供内存中多个并发执行的进程(线程)共同使用。也称资源共享或资源复用。 虚拟性:通过某种技术把一个物理实体变为若干个逻辑上的对应物。 异步
阅读全文
摘要:构造 基类的成员对象的构造函数 基类的构造函数 子类的成员对象的构造函数 子类的构造函数 析构 子类的成员对象的析构函数 子类的析构函数 基类的成员对象的析构函数 基类的析构函数 由上可推测,在C++中调用基类指针创建子类对象时,由于析构函数会优先调用基类指针所指的基类析构函数,但是内存中创建的是子
阅读全文
摘要:C++中静态库与动态库 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新
阅读全文
摘要:Spring架构层次:四层(三层)模型 Spring架构可以分为三(四)层:(WEB层)业务层、Dao层、持久层。 WEB层:由前端业务人员主要负责。 service(业务层):处理前端请求并完成对数据的增删改查等操作,是完成事务的一层。 Dao(实体层):将持久层中数据库所存储的数据在程序中实体化
阅读全文
摘要:Spring三大核心思想 Spring三大核心思想分别是:控制反转(IOC),依赖注入(DI),面向切面编程(AOP)。 IOC(控制反转):将组件间的关系从程序内部转移至外部容器(xml文件)中进行管理。 DI(依赖注入):组件间的依赖关系由系统运行期间决定。外部容器将带有依赖关系的目标对象实例动
阅读全文
摘要:人工智能三学派与当前主流方向 在学习tensorflow的使用,运用机器学习解决毕设的问题之前,还是得先来认识从哪里来到哪里去的原则性问题。 前人如何走的,如今我们站在他们肩上又该何去何从,这些必须要拿捏住。 人工智能? 人工智能是啥?就是让机器具备人的思维和意识。 就了解一下概念即可。很直白,很通
阅读全文