ITPub博客

首页 > 数据库 > 数据库开发技术 > 面试总结之银盛(薪资14k面试通过!!!)(下)

面试总结之银盛(薪资14k面试通过!!!)(下)

原创 数据库开发技术 作者:IT枫斗者 时间:2020-09-14 20:49:40 0 删除 编辑

8. mysql的引擎有什么?他们的区别

  a. InnoDB:

1. ⽀持事务处理

2. 支持外键

3. ⽀持行锁

4. 不⽀持FULLTEXT类型的索引(在Mysql5.6已引⼊)

5. 不保存表的具体⾏数,扫描表来计算有多少行

6. 对于AUTO_INCREMENT类型的字段,必须包含只有该字段的索引

7. DELETE 表时,是一行一行的删除

8. InnoDB 把数据和索引存放在表空间里面

9. 跨平台可直接拷贝使用

10. 表格很难被压缩

b. MyISAM:

1. 不⽀持事务,回滚将造成不完全回滚,不具有原⼦子性

2. 不⽀持外键

3. ⽀持全文搜索

4. 保存表的具体行数,不带where时,直接返回保存的行数

5. DELETE 表时,先drop表,然后重建表

6. MyISAM 表被存放在三个文件 。frm 文件存放表格定义。数据文             件是MYD (MYData) 。索引文件是MYI (MYIndex)引伸

7. 跨平台很难直接拷贝

8. AUTO_INCREMENT类型字段可以和其他字段一起建立联合索引

9. 表格可以被压缩

c. 选择:因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。如果系统读少,写多的时候,尤其是并发写⼊高的时候。InnoDB就是首选了。两种类型都有自己优缺点,选择哪个完全要看自己的实际类弄。

9. innodb如何实现mysql的事务

事务进行过程中,每次sql语句执行,都会记录undo log和redo log,然后更新数据形成脏页,然后redolog按照时间或者空间等条件进行行落盘,undo log和脏页按照checkpoint进行落盘,落盘后相应的redo log就可以删除了。此时,事务还未COMMIT,如果发生崩溃,则首先检查checkpoint记录,使用相应的redo log进行数据和undo log的恢复,然后查看undo log的状态发现事务尚未提交,然后就使用undo log进行事务回滚。事务执行COMMIT操作时,会将本事务相关的所有redo log都进行落盘,只有所有redo log落盘成功,才算COMMIT成功。然后内存中的数据脏页继续按照checkpoint进行落盘。如果此时发生了崩溃,则只使用redolog恢复数据。

10. 说说b+树的原理

     B-tree:

B-tree 利用了磁盘块的特性进行构建的树。每个磁盘块一个节点,每个节点包含了很关键字。把树的节点关键字增多后树的层级比原来的二叉树少了,减少数据查找的次数和复杂度。

B-tree巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页(每页为4K),这样每个节点只需要⼀一次I/O就可以完全载⼊。B-tree 的数据可以存在任何节点中。

B+tree:

B+tree 是 B-tree 的变种,B+tree 数据只存储在叶子节点中。这样在B树的基础上每个节点存储的关键字数更多,树的层级更少所以查询数据更快,所有指关键字指针都存在叶子节点,所以每次查找的次数都相同所以查询速度更稳定。

12. 让你设计一个索引,你会怎么设计

mysql默认存储引擎innodb只显式支持B树索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B树索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。

13. git和svn的区别

1、Git是分布式的,⽽而SVN不是;

2、GIT把内容按元数据方式存储,而SVN是按⽂文件

3、分支不同:git分支切换很方便便;SVN分支就是版本库的另外一个目录;

4、GIT没有一个全局的版本号,而SVN有,SVN的版本号实际是任何一个相应时间的源代码快照。

5、GIT的内容完整性要优于SVN(GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。)

14. git命令的一些底层原理理以及流程

 https://www.jianshu.com/p/2b47a3078a46

a. git init:使用git init初始化一个新的目录时,会生成⼀个.git的⽬目录,       该目录即为本地仓库。一个新初始化的本地仓库是这样的:


description用于GitWeb程序

config配置特定于该仓库的设置(还记得git config的三个配置级别么)

hooks放置客户端或服务端的hook脚本

HEAD传说中的HEAD指针,指明当前处于哪个分⽀

objectsGit对象存储目录

refsGit引用存储目录

branches放置分⽀引用的目录

其中description、config和hooks这些不在讨论中,后文会直接忽略。

b. git add:Gitcommit之前先要通过git add添加⽂文件

可以看到,多了一个index文件。并且在objects目录下多了⼀个9f的目   录,其中多了⼀个4d96d5b00d98959ea9960f069585ce42b1349a⽂       件。其实9f4d96d5b00d98959ea9960f069585ce42b1349a就是一个Git对象,称为blob对象。

c. git commit:


原文作者:IT枫斗者;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
大家好,我是枫哥,🌟阿里云技术专家、📝资深面试官、🌹Java跳蚤网课堂创始人。技术交流vx:itfdz666,拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。看面试实战视频可以关注b站号:IT枫斗者–Java面试。需要看技术文章,可以关注CSDN:IT枫斗者。

注册时间:2020-05-13

  • 博文量
    183
  • 访问量
    81343