地平线-高精地图开发-面经
地平线面经
0x00 面向对象的特点 类
封装、继承、多态、抽象
0x01 多线程 保证数据一致性
互斥锁:通过使用互斥锁来控制多个线程对共享数据的并发访问,从而实现对共享数据的保护。
读写锁:读写锁可以同时允许多个读线程访问共享数据,但仅允许单个写线程对共享数据进行修改,进一步提高了效率。
原子操作:通过使用原子操作,可以保证在多线程环境下数据操作的原子性,从而避免数据不一致的情况。
管程:管程是一种特殊的锁,用于保护共享资源的访问,并具有更高的灵活性和可扩展性。
0x02 数据库
关系型数据库四大特点
- 原子性(Atomicity)
事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
回滚可以用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。
- 一致性(Consistency)
数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。
- 隔离性(Isolation)
一个事务所做的修改在最终提交以前,对其它事务是不可见的。
- 持久性(Durability)
一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。
系统发生崩溃可以用重做日志(Redo Log)进行恢复,从而实现持久性。与回滚日志记录数据的逻辑修改不同,重做日志记录的是数据页的物理修改。
关系型数据库
左外连接 右外连接左外连接和右外连接的区别:
左外连接也称左连接。以左表为基表,在FROM子句中使用关键字“LEFT OUTER JOIN”或关键字“LEFT JOIN”来连接俩张表。
右外连接也称右连接。以右表为基表,在FROM子句中使用关键字“RIGHT OUTER JOIN”或关键字“RIGHT JOIN”来连接俩张表。
1.内连接就是取交集的部分。2.左连接就是左表全部的数据加上交集的数据。3.右连接就是右表全部的数据加上交集的数据。4.交叉连接就是全都要!
范式
- 第一范式 第一范式(1NF)无重复的列所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
- 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。
- 第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R为第三范式模式。满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
非关系型数据库 Redis
非关系型数据库的特点:
- 一般不支持ACID特性;
- 非关系型数据库严格上不是一种数据库,而是一种数据结构化存储方法的集合。
它的优点是:
- 相对于关系型数据库,读写性能很高;
- 数据没有耦合性,容易扩展;
- 存储数据的格式可以是多种的:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等
分类:
- 面向高性能并发读写的key-value数据库主要特点是具有极高的并发读写性能,例如Redis、Tokyo Cabint等。
- 面向海量数据访问的面向文档数据库特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.
- 面向可拓展的分布式数据库解决的主要问题是传统数据库的扩展性上的缺陷。
0x03 算法
排序,递归,动态规划,BSF...
快速排序 原理
LRUCache
0x04 数据结构
二叉树,链表,堆,栈
平衡树,B树,B+树,红黑树