有没有mysql导出数据库库得先装mysql的大佬可以带带我?

阿里巴巴是很多程序员都企盼进入的公司,这里待遇好是出了名的,但是象这样的公司,没有两把刷子,确实真的不好进,今天,我就给大家讲述一下我在阿里巴巴面试中都经历了什么,一定要好好关注哟,里面有很多的程序员面试题与大家分享。

程序员鸟阿里巴巴的面试之旅

大佬:我看你用过这个Spring啊,你来聊聊为什么我们要使用Spring呢?

我:(因为大家都说好啊)首先呢,Spring是一个庞大的框架,它封装了很多成熟的功能能够让我们无需重复造轮子。其次呢,它使用IOC进行依赖管理,我们就不用自己初始化实例啦。

大佬:(我就知道你会说IOC啦)那你解释一下IOC吧。

我:IOC就是依赖控制转化,利用JAVA的反射机制,将实例的初始化交给Spring。Spring可以通过配置文件管理实例。

大佬:那我们可以直接使用工厂模式呀。工厂模式也可以管理实例的初始化呀,为什么一定要使用Spring呢?

我:啊........因为.......方便?(仿佛看到大佬凝固的表情,为了不那么尴尬,我决定转移话题)。而且spring的IOC是单例模式呢。

大佬:默认的是实现是单例模式吗?

这里查了一下为什么不用工厂模式而使用IOC。其实本质上还是因为IOC是通过反射机制来实现的。当我们的需求出现变动时,工厂模式会需要进行相应的变化。但是IOC的反射机制允许我们不重新编译代码,因为它的对象都是动态生成的。

大佬:你使用过哪些数据库呀?

大佬:那你能讲一下你对两个框架使用后的感受吗?

我:当时使用Mybaits的时候,也有去社区了解了一下两个框架的口碑,发现大家的战队都坚定而对立。对Hibernate的不满通常是因为它在复杂关联中往往会带来严重的性能问题,也就是N+1的问题。但是它是面向对象支持的最好的框架了。而Mybatis则相对而言比较易于使用,只需要会SQL语句就行了。但是也意味着会破坏一些面向对象的规则。

大佬:(似乎有点认可)那你了解数据库的事务吗?能讲一下数据库的事务级别吗?

我:(忘得一干二净)不好意思,我记不太清楚了。

大佬:那你还记得数据库的加锁吗?比如乐观锁、悲观锁?

大佬:(锲而不舍)那我现在假设有一张用户表,你也知道,正常的表只能存放大概一千万或是两千万左右的数据。但是阿里巴巴有上亿的用户?你会怎么存储呢?

我:可以纵向分割与横向分割。

大佬:那你觉得这里应该纵向还是横向呢?

我:纵向(载入史册的嘴瓢)

大佬:(很有耐心)可是这样我的数据库还是放不下啊。

我:(仿佛突然睡醒)应该是横向分割,把表拆分成多个表然后分布式存储。

大佬:那你觉得我们怎样分割比较合适呢?

我:(还能再问?)可以根据地域,但是根据用户分布的情况来说,还是会有某些地域访问稠密而有些地域比较稀疏的问题。难道按照用户等级?

大佬:不,用户等级会变动,不合适。你这个阶段暂时没有考虑这个问题。

我:(谢谢您的台阶啊!)

大佬:你们服务器用的是什么操作系统啊?

我:(呀,送命题)我们用的是阿里云上的centos系统

大佬:那你对Linux熟练吗?

我:不是很熟悉,仅仅是入门,能够敲一点指令。

大佬:好,那你知道库函数和内核调用吗?

我:内核调用是指进入内核态然后执行指令然后再回到用户态吗?我知道的大概就这么多了,只了解一些概念上的内容。(凉凉送给自己)

大佬:那你知道如何查看进程吗?

我:啊...记不得了,我一般都查一下指令

大佬:你了解Java虚拟机吗?能解释一下底层的模块吗?

我:(如果你通知我明天面试,我就了解了)不好意思,这一块知识我不熟悉,但是我很愿意去了解(赶紧表忠心啊!)

大佬:你知道什么是线程安全吗?

我:(乌鲁乌鲁说了一堆)就是比如如果同时有两个线程访问同一个变量,那么它们对变量造成的修改所带来的结果可能是不确定的。

大佬:那你知道Java有什么方法来实现线程安全吗?

大佬:你有写过分布式的业务吗?

我:我写过一个基于HDFS分布式存储的KVStore,上层使用Hadoop的API实现。

大佬:那个是分布式存储,我想了解一下分布式业务?

我:(赶紧纠正)那Dubbo算吗?(于是介绍了一下自己了解的dubbo)

大佬:那你觉得分布式的话会遇到什么问题呢?

我:那就是经典的CAP问题了。没有数据库能够同时满足这三个问题

大佬:那你能具体解释一下CAP代表什么吗?

大佬:你了解过设计模式吗?

大佬:那你了解过哪些设计模式呢?

大佬:那你解释一下指令模式吧。

我:这个有点像函数式编程的思想。指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向command接口编程,解除了调用类和指令之间的强耦合。

最后,经过这次面试,虽然过程很艰难和尴尬,但是总结了一些相关的java技术经验,在这里和大家分享一下,要想成功进行一次阿里巴巴的面试,你需要了解甚至掌握以下内容:

JAVA语言,尤其是线程

数据库(事务,加锁,ORM)

最后,提醒大家做好充分准备,祝愿大家在这场面试中都能够成功!

1.1 什么是数据库?

          简单的说,数据库(英文Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。

          早期比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库

1.3 关系型数据库介绍

(1)关系型数据库由来

          网络数据库和层次数据库很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户对这两种数据库进行存取时,依然需要明确数据的存储结构,支出存储路径。而关系数据库就可以较好地解决这些问题 

(2)关系型数据库介绍

(3)关系型数据库举例

1.4 什么是关系型数据库

  1. 通过SQL结构化查询语句存储数据 
  2. 保持数据一致性方面很强,ACID理论

1.5 非关系型数据库介绍

1.6 非关系型数据库诞生背景

    指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底地否定非关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。 

       随着互联网Web2.0网站的星期,传统的关系型数据库在应付web2,0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。 

         例如:传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破,于是出现了大批针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品。NOSQL(非关系型)类的数据就是在这样的情景下诞生并得到了非常迅速的发展 

1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充 
2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能 

1.7 非关系型数据库种类

(1)键值(Key-Value)存储数据库

 列存储数据库将数据库存储在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。

这部分数据库通常用来分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。 

        面向文档数据库会将以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关系对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储 

1.8 常用关系型数据库产品介绍

Oracle前身叫SDL、由Larry Ellison和两个变成任意在1977创办,他们开发了主机的拳头产品,在市场上大量销售。Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二 
Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商 
主要应用范围:传统大企业、大公司、政府、金融、证券等。 

MySQL被广泛的应用在Internet上的大中小型网站中。由于体积小速度快总体拥有成本低,开放源代码

    MAriaDB数据库管理系统是MySQL数据库的一个分支,主要由开元社区维护,采用GPL授权许可。开发这个MariaDB的原因之一是:甲骨文公司收购了MySQL后,有MySQL闭源的潜在风险,因此MySQL开元社区采用分支的方式来避开这个风险。 

Server可以与Winodws操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都得到较大的提升,对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构。SQL Server都是一个很好的选择。SQL

Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业只用 
Access不是数据库语言,只是一个数据库程序,目前最新版本为Office 2007,其特点主要如下: 
(1)完善地管理各种数据库对象,具有强大的数据组织,用户管理、安全检查等功能 
(2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户管理系统具有传统的XSASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器(Ckient/Server)结构和响应的数据库安全机制,Access具备了许多先进的大型数据管理管理系统所具备的特征。 
(3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表 
(4)作为Office套件的一部分,可以与Office集成,实现无缝连接 
(5)能够利用Web检索和发布数据,实现与Internet的连接,Access主要适用于中小企业应用系统,或作为客户机/服务器系统中的客户端数据库。

1.9 其他不常用关系型数据库

DB2,PostgreSQL,Informix,Sybase等。这些关系型数据库逐步的淡化了普通运维的实现,特别是互联网公司几乎见不到

常用非关系型数据库产品介绍 

  Memcaced是一个开源的高性能的具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来架构主机的大负载网站或提升主机的高访问网站的响应速度。注意:Memcache 是这个项目的名称,而Memcached是服务端的主程序文件名。 
缓存一般用来保存一些进程被存取的对象或数据,通过缓存来存取对象或数据要比在磁盘上存取块很多,前者是内存,后者是磁盘、Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被读取,memcached里面的数据就像一张巨大的hash表,数据以key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出快速更快的可扩展的Web应用。 
由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的特久化存储机制和异步主复制机制,使Memcached具备了事务恢复能力、持久化数据能力和分布式复制能力,memcached非常适合需要超高性能读写速度、持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品替代如Redis

        和Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,redis的数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在基础上实现了master-slave(主从)同步。 

    MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。他支持的数据库结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongodb最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 

高性能、易部署、易使用、存储数据非常方便 
主要功能特性: 

  1. 面向集合存储,易存储对象类型的数据 
  2. “面向集合”(Collenction-Orented)意思是数据库被分组存储在数据集中,被称为一个集合(Collenction)每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档,集合的概念类似关系型数据库(RDBMS)里的表(table)不同的是它不需要定义任何模式(schema) 
  3. 模式自由(schema-free)意为着存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。 
  4. 支持完全索引,包含内部对象 
  5. 支持复制和故障恢复 
  6. 使用高效的二进制数据存储,包括大型对象 
  7. 自动处理碎片、以支持云计算层次的扩展性
  1. Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作。也会被路由到某个节点上面去读取。 

1.9.5 其他不常用非关系型数据库

AB公司被SUN公司收购,2008年,SUN公司又被传统数据数据库领域大佬甲骨文(oracle)公司收购,因此,MySQL数据库软件目前属于Oracle公司,成为传统数据库领域老大的又一个数据库产品,甲骨文公司收购MySQL后,使得自身在商业数据库与开源软件领域市场占有份额都跃居第一的位置,这样的格局,引起了很多人的担忧,这种担忧直接导致后来的Mysql分支数据库MariaDB的诞生于发展。 

      MySQL是一种关系型数据库管理系统,关系型数据库的特点是将数据保存在不同的表中,在将这些表放入不同的数据库中,而不是将所有数据统一放在一个大仓库里,这样的设计增加了MySQL的读取速度,灵活性和可管理型也得到了很大提高,访问以及管理MySQL数据库的最常用标准化语言为SQL结构化查询语句

原因可能有以下几点: 
(1) MySQL性能卓越、服务稳定,很少出现异常宕机 
(2) MySQL开放源代码且无版权制约,自主性及使用成本低 
(3) MySQL历史悠久,社区及用户活跃,遇到问题可以解决 
(4) MySQL软件体积小,安装使用简单,并且易于文虎,安装及维护成本低 
(5) MySQL品牌口碑效应,使得企业无需考虑就直接用,LAMP、LEMP流行架构 
(6) MySQL支持多用操作系统,提供多种API接口,支持多用开发语言,特别对流行的PHP语言有很好的支持

2.4 MySQL数据库分类与版本升级

MySQL数据库的官方网站为,其发布的MySQL版本采用双授权政策,和大多数开源产品的路线一样,分为社区版和商业版,而这两个版本又各自分四个版本依次发布,这四个版本为:Alpha版、Beta版、RC版和GA版本

MySQL数据库商业版与社区办区别 

MySQL商业版与社区办之间的区别在于: 
1、商业版本组织管理与测试环节控制更严格,稳定性方面,会比社区版本更稳定 
2、MySQL是成熟产品,商业版与社区办之间性能方面相差不大 
3、商业版不遵守GPL协议,社区版遵守GPL协议可以免费试用 
4、使用商业版后可以购买相关的服务,享受7*24小时技术支持以及及时打补丁等服务,但是用户必须为此支持服务费用 
5、社区版本的维护服务只能靠社区提供,无法像商业版本获得故障及补丁解决服务了,但是社区版是完全免费的方式,社区版的服务质量与时效性等方面就无法与MySQL AB公司提供的服务相比了

2.5 MySQL数据库四种发布版本介绍

Alpha版一般只在开发的公司内部运行,不对外公开 
Beta版一般是完成功能的开发与所有的测试工作之后的产品,不会存在较大的功能或性能BUG,并且邀请或提供给用户体验与测试,以便更全面地测试软件的问题。 
RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta版本测试结果,收集到的BUG或缺陷之处等收集到的信息,进行修复和完善之后的一版产品 
GA版是软件产品正式发布的版本,也称生产版本的产品

    为了提高MySQL产品的竞争优势,以及提高性能,降低开发维护成本等原因。同时方便企业用户更精准的选择适合的版本用于主机的企业生产环境中, 

MySQL在发展到5.1版本系列之后,重新规划为三条产品线

MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布:没有增加会影响稳定性的新功能。 MySQL 5.1:Previous stable(production-quality)release MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布:没有增加会影响该系列的重要功能。 

为了更好地推广MySQL Cluster版本,以及提高MySQL Cluster的性能和稳定性,以及功能改进和增加,以及改动MySQL基础功能,使其对Cluster存储引擎提供更有效的支持与优化。版本号为6.0.xx开发。目前发展到7.1.xx 
官方地址提供数据库下载版本: 
现在国内的镜像站也支持下载: 

 MySQL数据库软件的名字是由3个数字和一个后缀组成的版本号。

(1) 第1个数字(5)是主版本号,描述了文件格式。所有版本5发行都有相同文件格式 
(2) 第2个数字(0)是发行级别。主版本号和发行级别组合到一起便构成了发型序列号。 
(3) 第3个数字(56)是在此系列的版本号,随每个新分发递增,通常你需要已经选择的发行(release)的最新版本 
(4) 后缀显示发行的稳定级别,通过一系列后缀显示如何改进稳定性,可能的后缀有:*alpha版

企业生产场景选择MySQL数据库建议: 
1) 稳定版:选择开源的社区版的稳定版GA版本 
4)要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本 
5)最好向后较长时间没有更新发布的版本 
6)要考虑开发人员开发程序使用的版本是否兼容你选的版本 
7)作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件 
8)优先企业非核心业务采用新版本的数据库GA版本软件 
9)向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
10)若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库软件

24px;”>yum/rpm安装适合对数据库要求不太高的场合,例如并发布大,公司内部,企业内部的一些应用场景。大的门户把源码根据企业需求制作成rpm,搭建rpm仓库。

最近做一个需求,更新3w条数据,一个一个update去更新的,结果花了80分钟,这样性能上很差,也容易阻塞,所以就找了一些MySQL批量更新的方式,在此记录一下

这种更新会将其它字段更新为默认值,因为它是先将重复记录删掉再更新,谨慎使用

这种方式应该也是删掉记录,再更新,但是保存的原来的其它字段数据,所以其它字段不会改变

创建临时表,将更新数据插入临时表,再执行更新,需要有建表权限

方法四:使用MySQL自带批量更新语句

我要回帖

更多关于 mysql导出数据库 的文章

 

随机推荐