zoukankan      html  css  js  c++  java
  • 面试整理——数据库篇

    数据库大致分为关系型数据库和非关系型两种。在面试过程中问到的比较多的就是mysql和redis了,在这里整理了一下,分享给大家。

    主要问的问题可以分为以下几类:搭建、使用、原理。

    1、搭建

    搭建的问题主要以某个细节来考察你是否真的操作和应用过,来看你的学习能力和动手实践能力。



    比如:在你搭建完mysql,他就已经支持事务吗?


    对于这个问题,你直接回答是或者不是,都是不对的。首先对于mysql常用引擎innodb和myisam来说,只有innodb是支持事务的。所以只有在mysql的默认存储引擎是innodb的时候才是支持事务的。


    mysql不同版本的默认存储引擎是不同的。在ITOO中,我们使用的数据库是5.1.57,他是默认myisam的。但在mysql-5.6中,就变成了innodb了。具体的版本支持功能可以看mysql的官网 http://www.mysql.com/



    当然redis方面也会问一些操作的问题,比如搭集群的时候需要配置哪些参数,出现哪些问题,是如何解决的等等。


    小结:多操作多了解很重要


    2、使用

    使用方面可以分为基本操作和高级应用。基本操作一般不会问,有点太浪费大家的时间了,主要集中在高级应用方面。

    mysql侧重于优化、主从复制、读写分离、分区分表等等,redis主要还是问集群,也会问与memcached的比较。


    比如:项目中mysql的读写分离是怎么做的?


    千万不能简单粗暴的说主写从读,这样就掉坑里了。比如主宕机了没办法写怎么办,从宕机没办法读了怎么办,主从都没宕机复制延迟了怎么办?对于写完数据马上要读的操作如何处理?


    比较好的例子是一台读写数据库和一台读数据库,只能做到缓解一定程度的读的压力,而更多的读的压力一般都靠redis这样的nosql产品来缓解。


    另外一种就是项目中使用的数据库中间件myCat,这样开发人员不需要考虑哪个库是读哪个库是写,将这些事情统统交给myCat去做。



    比如:项目中分区分表是怎么做的?


    多大的数据量要考虑分区分表?为什么要用?是横切还是纵切?


    比如:有没有用mysql集群,数据量多大考虑用集群,用几个?


    基本上只有主备。


    小结:不要把高深的技术都罗列上去,你要判断自己了解的程度


    3、原理



    这部分内容在平时项目中很少能接触到,但了解这部分原理,既能体现自己的学习深度和能力,也能帮助我们解决项目中遇到的问题。


    比如:redis和memcached的设计思想?


    redis的哈希槽设计,现在有三主,如果加一台进来,哈希槽怎么分配?


    redis如何实现一个key的值可以超过1M


    主要涉及到了redis内存分配、LRU算法、数据存储、分片集群等内容,这些东西如果只从网上看博客的话,有点不太靠谱了,还是看官方的文档。最好自己学一下源码,毕竟代码是最不会骗人的。


    而且这部分内容蕴含了很多设计的思想,很值得一看。

  • 相关阅读:
    《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构
    《大型网站技术架构》读书笔记之五:万无一失之网站的高可用架构
    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
    NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介
    如何解读黑格尔的代表作《逻辑学》?
    数理逻辑是推理(逻辑)的代数化--逻辑是思维的理性计算过程的抽象
    熵与知识
    算法的分层(认知、建模)模型---算法的逻辑与计算思维
    复杂 = 有序 + 无序
    结构即逻辑
  • 原文地址:https://www.cnblogs.com/saixing/p/6730196.html
Copyright © 2011-2022 走看看