此博客链接:
数据库
索引
- 聚集索引(主键索引):在数据库里面,所有行数都会按照主键索引进行排序。
- 非聚集索引:就是给普通字段加上索引。
- 联合索引:就是好几个字段组成的索引,称为联合索引。
走不走索引
1.左匹配走索引
2.!=不走索引
3.%前不走索引,后走索引
4.对索引列进行计算不走索引
5.对索引列使用函数不走索引
缺点
a) 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
b) 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
事务
数据结构
索引
对索引使用B+树
找一个节点的时候可以有多个元素,大大提升查找效率,这就是为什么数据库索引用的就是B+树,因为索引很大,不可能都放在内存中,所以通常是以索引文件的形式放在磁盘上,所以当查找数据的时候就会有磁盘I/O的消耗,而B+树正可以解决这种问题,减少与磁盘的交互,因为进行一次I/O操作可以得到很多数据,增大查找数据的命中率。
索引缺点
堆和栈的区别
计算机网络
TCP和UDP
实验链接:https://www.cnblogs.com/ping2yingshi/p/14388417.html
TCP三次握手
TCP四次挥手
输入网址到返回首页经历的过程
get和post请求区别
GET和POST本质上就是TCP链接,
1.get是从服务器上获取数据,post是向服务器传送数据。
2.get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
3.在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式。
GET把参数包含在URL中,POST通过request body传递参数。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
操作系统
线程和进程区别
线程
进程
死锁
1.是什么
死锁是指两个或者两个以上的进程在执行过程中,由于竞争资源而产生的阻塞想象。
2.产生条件
1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用
2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。
2.怎样避免
产生死锁的四个条件,破坏产生死锁其中的一个条件即可有效避免死锁。打破互斥条件:
打破四个必要条件之一就能有效预防死锁的发生:打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造。打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源。打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,这样就不会占有且申请。打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源
多线程
软件生命周期
Java
Arraylist和Linklist区别
1. ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;
2. 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
3. 对于添加和删除操作add和remove,使用LinkedList,一般情况下LinkedList要比ArrayList快,因为ArrayList要移动数据。
set和list区别
(1)重复对象
list方法可以允许重复的对象,而set方法不允许重复对象
(2)null元素
list可以插入多个null元素,而set只允许插入一个null元素
(3)容器是否有序
list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序
参考链接:https://www.cnblogs.com/q2546/p/11394723.html
测试
白盒测试
白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。
黑盒测试
黑盒测试:是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。
测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收和正确的输出。
区别
者最大的区别应该就是测试对象不一样,白盒测试主要针对的是程序代码逻辑,黑盒测试主要针对的是程序所展现给用户的功能,简单的说就是前者测试后台程序后者测试前台展示功能。
小车c
1.32位系统的int型占几个字节
4个字节
2.内存知识
BSS段:用来存放程序中未初始化的全局变量的一块内存区域,用来分配未初始化(或初始化为0)的全局变量和静态变量。BSS段属于静态内存分配
数据段:指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配
代码段:用来存放程序执行代码的一块内存区域
堆:
栈:
以上的定义功能和作用
3.编译原理的几个步骤
1.预处理
2.编译
3.链接
4.运行
以上各步骤的定义和作用
- a.听说过野指针吗?怎么造成的?
指针没有初始化
- MCU常用的串行通信协议有哪些
UART是
- 关于MCU的内存分配,局部变量会放在哪款区域?堆中,栈中,还是数据区?
局部变量是在函数内部定义的变量,只在函数内部起作用,函数执行结束,变量会自动删除
即在一个函数内部定义的变量,只在本函数范围内有效
局部变量放在栈区,局部静态变量放在静态区
- Sizeof 的值在什么时候计算, 是在编译阶段还是在运行阶段?
一元运算符 sizeof是在编译时计算长度的
- char几个字节 1个字节
- 32位中指向int 的指针占多少字节 4个字节 64位的占8个字节
- 结构体和联合体的区别 结构体中的元素是单独占空间,而联合体中的元素是共享空间
- 全局变量和局部变量区别 全局变量在整个程序中都有效,而局部变量只是作用域单个函数