c语言,怎么编一个程序来显示某一个数值,并且可以改变?

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的

反射是JAVA的特征之一,它允许运行中的JAVA程序对自身的检查
反射非常强大,它甚至能直接操作程序的私有属性。我们前面学习都有一个概念,被,被private封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。
反射就像一面镜子,它可以在运行时获取一个类的所有信息,可以获取到任何定义的信息(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。

如果向创建对象,我们可以直接new User();为何要通过反射去创建对象呢?

那我要先问你个问题了,你为什么要去餐馆吃饭呢?
例如:我们要吃个牛排大餐,如果我们自己创建,就什么都得管理。
好处是,每一步做什么我都很清晰,坏处是什么都得自己实现,那不是累死了。牛接生你管,吃什么你管,屠宰你管,运输你管,冷藏你管,烹饪你管,上桌你管。就拿做菜来说,你能有特级厨师做的好?
那怎么办呢?有句话说的好,专业的事情交给专业的人做,饲养交给农场主,屠宰交给刽子手,烹饪交给特级厨师。那我们干嘛呢?
我们翘起二郎腿直接拿过来吃就好了。
再者,饭店把东西做好,不能扔到地上,我们去捡着吃吧,那不是都成原始人了。那怎么办呢?很简单,把做好的东西放在一个容器中吧,如把牛排放在盘子里。

我们在后面的学习中,会学习框架,有一个框架Spring就是一个非常专业且功能强大的产品,它可以帮我们创建对象,管理对象。以后我无需手动new对象,直接从Spring提供的容器中的Beans获取即可。Beans底层其实就是一个Map<String,Object>,最终通过getBean(“user”)来获取。而这其中最核心的实现就是利用反射技术。

总结一句,类不是你创建的,是你同事或者直接是第三方公司,此时你要或得这个类的底层功能调用,就需要反射技术实现。有点抽象,别着急,我们做个案例,你就立马清晰。

接口被用来描述一种抽象。因为JAVA不像C++一样支持多继承,所以JAVA可以通过实现接口来弥补这个局限
接口也可以用来实现解耦。
接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,接口的静态成员变量要用static final public 来修饰
\接口中的方法都是抽象的,是没有方法体的,可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。

164.数据库的三范式是什么?

● 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。
● 第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
● 第三范式:任何非主属性不依赖于其它非主属性。

165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。

166.如何获取当前数据库版本?

● Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。
● Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。
● Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
● Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

● char(n) :固定长度类型,比如订阅 char(10),当你输入"abc"三个字符的时候,它们占的空间还是 10 个字节,其他 7 个是空字节。

chat 优点:效率高;缺点:占用空间;适用场景:存储密码的 md5 值,固定长度的,使用 char 非常合适。

● varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。

所以,从空间上考虑 varcahr 比较合适;从效率上考虑 char 比较合适,二者使用需要权衡。

● float 最多可以存储 8 位的十进制数,并在内存中占 4 字节。
● double 最可可以存储 16 位的十进制数,并在内存中占 8 字节。

170.mysql 的内连接、左连接、右连接有什么区别?

内连接是把匹配的关联数据显示出来;左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;右连接正好相反。

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。

具体来说 mysql 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更好的。

172.怎么验证 mysql 的索引是否满足需求?

使用 explain 查看 sql 是如何执行查询语句的,从而分析你的索引是否满足需求。

173.说一下数据库的事务隔离?

mysql 的事务隔离是在 mysql.ini 配置文件里添加的,在文件的最后添加:

● READ-UNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读)。
● READ-COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读)。
● REPEATABLE-READ:可重复读,默认级别,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读)。
● SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。

脏读 :表示一个事务能够读取另一个事务中还未提交的数据。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。

不可重复读 :是指在一个事务内,多次读同一数据。

幻读 :指同一个事务内多次查询返回的结果集不一样。比如同一个事务 A 第一次查询时候有 n 条记录,但是第二次同等条件下查询却有 n+1 条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。

● InnoDB 引擎:mysql 5.1 之后默认引擎,提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。mysql 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count() from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。
● MyIASM 引擎:不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count(
) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。

MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

● 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。
● 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

176.说一下乐观锁和悲观锁?

● 乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。
● 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。

数据库的乐观锁需要自己实现,在表里面添加一个 version 字段,每次修改成功值加 1,这样每次修改的时候先对比一下,自己拥有的 version 和数据库现在的 version 是否一致,如果不一致就不修改,这样就实现了乐观锁。

177.mysql 问题排查都有哪些手段?

● 开启慢查询日志,查看慢查询的 sql。

● 为搜索字段创建索引。
● 避免使用 select *,列出需要查询的字段。

\3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

\4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

\5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

关系数据模型的三个组成部分 完整性规则、 数据结构、 数据操作。

● 数据结构:描述数据库的组成对象以及对象之间的联系。
● 数据操作:指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。
● 数据的完整性约束规则:一组完整性规则。

说一说你对数据库优化的理解
数据库的优化是多方面的,原则就是减少系统的瓶颈,减少资源的占用,增加系统的反应速度。
例如,通过优化文件系统,提高磁盘I\O的读写速度;通过优化操作系统调度策略,提高MySQL在高负荷情况下的负载能力;优化表结构、索引、查询语句等使查询响应更快。

针对查询,我们可以通过使用索引、使用连接代替子查询的方式来提高查询速度。

针对慢查询,我们可以通过分析慢查询日志,来发现引起慢查询的原因,从而有针对性的进行优化。

针对插入,我们可以通过禁用索引、禁用检查等方式来提高插入速度,在插入之后再启用索引和检查。

针对数据库结构,我们可以通过将字段很多的表拆分成多张表、增加中间表、增加冗余字段等方式进行优化。

该如何优化Mysql的查询

如果查询时没有使用索引,查询语句将扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。如果使用索引进行查询,查询语句可以根据索引快速定位到待查询记录,从而减少查询的记录数,达到提高查询速度的目的。

索引可以提高查询的速度,但并不是使用带有索引的字段查询时索引都会起作用。有几种特殊情况,在这些情况下有可能使用带有索引的字段查询时索引并没有起作用。

使用LIKE关键字的查询语句

在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引不会起作用。只有“%”不在第一个位置,索引才会起作用。

使用多列索引的查询语句

MySQL可以为多个字段创建索引。一个索引可以包括16个字段。对于多列索引,只有查询条件中使用了这些字段中的第1个字段时索引才会被使用。

使用OR关键字的查询语句

查询语句的查询条件中只有OR关键字,且OR前后的两个条件中的列都是索引时,查询中才使用索引。否则,查询将不使用索引。

使用子查询可以进行SELECT语句的嵌套查询,即一个SELECT查询的结果作为另一个SELECT语句的条件。子查询可以一次性完成很多逻辑上需要多个步骤才能完成的SQL操作。

子查询虽然可以使查询语句很灵活,但执行效率不高。执行子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

在MySQL中,可以使用连接(JOIN)查询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快,如果查询中使用索引,性能会更好。

锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。
下面以Mysql数据库的InnoDB引擎为例:来说明锁的一些特点。

InnoDB存储引擎实现了如下两种标准的行级锁:
共享锁:允许事务读取一行数据
排他锁:允许事务删除或更新一行数据
如果一个事务T1已经获得了行r的共享锁,那么另外的事务T2可以立即获得行r的共享锁,因为读取并没有改变行r的数据,称这种情况为锁兼容。但若有其他的事务T3想获得行r的排他锁,则其必须等待事务T1、T2释放行r上的共享锁,这种情况称为锁不兼容。下图显示了共享锁和排他锁的兼容性,可以发现X锁与任何的锁都不兼容,而S锁仅和S锁兼容。需要特别注意的是,S和X锁都是行锁,兼容是指对同一记录(row)锁的兼容性情况。

InnoDB存储引擎支持多粒度锁定,这种锁定允许事务在行级上的锁和表级上的锁同时存在。为了支持在不同粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式,称之为意向锁。意向锁是将锁定的对象分为多个层次,意向锁意味着事务希望在更细粒度上进行加锁。

InnoDB存储引擎支持意向锁设计比较简练,其意向锁即为表级别的锁。设计目的主要是为了在一个事务中揭示下一行将被请求的锁类型。其支持两种意向锁:

意向共享锁(IS Lock),事务想要获得一张表中某几行的共享锁。

意向排他锁(IX Lock),事务想要获得一张表中某几行的排他锁。

由于InnoDB存储引擎支持的是行级别的锁,因此意向锁其实不会阻塞除全表扫以外的任何请求。故表级意向锁与行级锁的兼容性如下图所示。

InnoDB存储引擎有3种行锁的算法,其分别是:

Gap Lock:间隙锁,锁定一个范围,但不包含记录本身。

Record Lock总是会去锁住索引记录,如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,那么这时InnoDB存储引擎会使用隐式的主键来进行锁定。Next-Key Lock是结合了Gap Lock和Record Lock的一种锁定算法,在Next-Key Lock算法下,InnoDB对于行的查询都是采用这种锁定算法。采用Next-Key Lock的锁定技术称为Next-Key Locking,其设计的目的是为了解决Phantom Problem(幻读)。而利用这种锁定技术,锁定的不是单个值,而是一个范围,是谓词锁(predict lock)的一种改进。

死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。若无外力作用,事务都将无法推进下去。

解决死锁问题最简单的一种方法是超时,即当两个事务互相等待时,当一个等待时间超过设置的某一阈值时,其中一个事务进行回滚,另一个等待的事务就能继续进行。

除了超时机制,当前数据库还都普遍采用wait-for graph(等待图)的方式来进行死锁检测。较之超时的解决方案,这是一种更为主动的死锁检测方式。InnoDB存储引擎也采用的这种方式。wait-for graph要求数据库保存以下两种信息:

通过上述链表可以构造出一张图,而在这个图中若存在回路,就代表存在死锁,因此资源间相互发生等待。这是一种较为主动的死锁检测机制,在每个事务请求锁并发生等待时都会判断是否存在回路,若存在则有死锁,通常来说InnoDB存储引擎选择回滚undo量最小的事务。

锁升级(Lock Escalation)是指将当前锁的粒度降低。举例来说,数据库可以把一个表的1000个行锁升级为一个页锁,或者将页锁升级为表锁。

InnoDB存储引擎不存在锁升级的问题。因为其不是根据每个记录来产生行锁的,相反,其根据每个事务访问的每个页对锁进行管理的,采用的是位图的方式。因此不管一个事务锁住页中一个记录还是多个记录,其开销通常都是一致的。

怎么样插入数据才能高效?
影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。针对这些情况,可以分别进行优化。

对于MyISAM引擎的表,常见的优化方法如下:

对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引。如果插入大量数据,建立索引会降低插入记录的速度。为了解决这种情况,可以在插入记录之前禁用索引,数据插入完毕后再开启索引。对于空表批量导入数据,则不需要进行此操作,因为MyISAM引擎的表是在导入数据之后才建立索引的。

插入数据时,MySQL会对插入的记录进行唯一性校验。这种唯一性校验也会降低插入记录的速度。为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕后再开启。

插入多条记录时,可以使用一条INSERT语句插入一条记录,也可以使用一条INSERT语句插入多条记录。使用一条INSERT语句插入多条记录的情形如下,而这种方式的插入速度更快。

当需要批量导入数据时,如果能用LOAD DATA INFILE语句,就尽量使用。因为LOAD DATA INFILE语句导入数据的速度比INSERT语句快。

对于InnoDB引擎的表,常见的优化方法如下:

插入数据之前执行set unique_checks=0来禁止对唯一索引的检查,数据导入完成之后再运行set unique_checks=1。这个和MyISAM引擎的使用方法一样。

插入数据之前执行禁止对外键的检查,数据插入完成之后再恢复对外键的检查。

插入数据之前禁止事务的自动提交,数据导入完成之后,执行恢复自动提交操作。

数据库在什么情况下会发生死锁?
死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。若无外力作用,事务都将无法推进下去。下图演示了死锁的一种经典的情况,即A等待B、B等待A,这种死锁问题被称为AB-BA死锁。

说说数据库死锁的解决办法
解决死锁问题最简单的一种方法是超时,即当两个事务互相等待时,当一个等待时间超过设置的某一阈值时,其中一个事务进行回滚,另一个等待的事务就能继续进行。

除了超时机制,当前数据库还都普遍采用wait-for graph(等待图)的方式来进行死锁检测。较之超时的解决方案,这是一种更为主动的死锁检测方式。InnoDB存储引擎也采用的这种方式。wait-for graph要求数据库保存以下两种信息:

通过上述链表可以构造出一张图,而在这个图中若存在回路,就代表存在死锁,因此资源间相互发生等待。这是一种较为主动的死锁检测机制,在每个事务请求锁并发生等待时都会判断是否存在回路,若存在则有死锁,通常来说InnoDB存储引擎选择回滚undo量最小的事务。

mysql的分页语法:
在mysql中,select语句默认返回所有匹配的行,它们可能是指定表中的每个行,为了返回第一行或者前几行,可使用LIMIT子句,以实现分页查询.LIMIT子句的语法如下:、

COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数,它有两种用法:

COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。

COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。

COUNT()函数可以与GROUP BY一起使用来计算每个分组的总和。

AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

AVG()函数可以与GROUP BY一起使用,来计算每个分组的平均值。

SUM()是一个求总和的函数,返回指定列值的总和。

SUM()可以与GROUP BY一起使用,来计算每个分组的总和。

MAX()返回指定列中的最大值。

MAX()也可以和GROUP BY关键字一起使用,求每个分组中的最大值。

MAX()函数不仅适用于查找数值类型,也可应用于字符类型。

MIN()返回查询列中的最小值。

MIN()也可以和GROUP BY关键字一起使用,求出每个分组中的最小值。

MIN()函数与MAX()函数类似,不仅适用于查找数值类型,也可应用于字符类型。

表跟表之间是怎么关联的?
表与表之间常用的关联方式有两种:内连接、外连接,下面以MySQL为例来说明这两种连接方式。

内连接通过INNER JOIN来实现,它将返回两张表中满足连接条件的数据,不满足条件的数据不会查询出来。

外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的数据。外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。

左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件的记录。

右外连接:可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条件的记录。

除此之外,还有一种常见的连接方式:等值连接。这种连接是通过WHERE子句中的条件,将两张表连接在一起,它的实际效果等同于内连接。出于语义清晰的考虑,一般更建议使用内连接,而不是等值连接。

以上是从语法上来说明表与表之间关联的实现方式,而从表的关系上来说,比较常见的关联关系有:一对多关联、多对多关联、自关联。

一对多关联:这种关联形式最为常见,一般是两张表具有主从关系,并且以主表的主键关联从表的外键来实现这种关联关系。另外,以从表的角度来看,它们是具有多对一关系的,所以不再赘述多对一关联了。

多对多关联:这种关联关系比较复杂,如果两张表具有多对多的关系,那么它们之间需要有一张中间表来作为衔接,以实现这种关联关系。这个中间表要设计两列,分别存储那两张表的主键。因此,这两张表中的任何一方,都与中间表形成了一对多关系,从而在这个中间表上建立起了多对多关系。

自关联:自关联就是一张表自己与自己相关联,为了避免表名的冲突,需要在关联时通过别名将它们当做两张表来看待。一般在表中数据具有层级(树状)时,可以采用自关联一次性查询出多层级的数据。

说一说你对外连接的了解
外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的数据。常见的外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。

左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件的记录。

右外连接:可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条件的记录。

实际上,外连接还有一种形式:完全外连接(FULL OUTER JOIN),但MySQL不支持这种形式。

说一说数据库的左连接和右连接
外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的数据。常见的外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。

左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件的记录。

右外连接:可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条件的记录。

WHERE是一个约束声明,使用WHERE约束来自数据库的数据,WHERE是在结果返回之前起作用的,WHERE中不能使用聚合函数。

HAVING是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在HAVING中可以使用聚合函数。另一方面,HAVING子句中不能使用除了分组字段和聚合函数之外的其他字段。

从性能的角度来说,HAVING子句中如果使用了分组字段作为过滤条件,应该替换成WHERE子句。因为WHERE可以在执行分组操作和计算聚合函数之前过滤掉不需要的数据,性能会更好。

说一说你对Mysql索引的理解
独的,存储在磁盘上的数据库结构,包含着对数据库表里所有记录的引用指针。使用索引可以加快找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询和操作速度的最佳途径

索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有的索引类型。MySQL中索引的存储类型有两种,即Btree和HASH,具体和表的存储引擎相关

索引的有点主要有以下几条:
1.通过创建唯一索引,可以保证数据库表中每一行数据的唯一性
2.可以大大加快数据的查询速度。
3.有助于实现数据的参考完整性,可以加速表和表之间的链接
4.使用分组和排序子句进行数据查询时,可以显著减少查询中分组和排序的时间

增加索引也有许多不利的方面,主要表现在如下几个方面:
1.创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
2.索引需要占据磁盘空间,除了数据表占数据空间之外,每一个索引还需要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更大
3.当对表中的数据进行增删改的时候,索引也要动态地维护,这样降低了数据的维护速度

1.普通索引和唯一索引
普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。
唯一索引要求索引列的值必须唯一,但允许有空值,如果是组合索引,则组合的值必须唯一。
主键索引是一种特殊的唯一索引,不允许有空值。

2.单列索引和组合索引
单列索引即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合

MySQL怎么判断要不要加索引
建议按照如下的原则来创建索引:

当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引需能确保定义的列的数据完整性,以提高查询速度。

在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。

那些情况不适合创建索引
2.where条件中用不到的字段
4.数据重复且分布比较均匀的字段,比如性别,真价值
5.参与列计算的列不适合建索引

在MySQL中,索引是在存储引擎层实现的,不同存储引擎对索引的实现方式是不同的,下面我们探讨一下MyISAM和InnoDB两个存储引擎的索引实现方式。

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址,MyISAM索引的原理图如下。这里假设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。
如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示。同样也是一颗B+Tree,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。

虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。

第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

下图是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。下图为定义在Col3上的一个辅助索引。这里以英文字符的ASCII码作为比较准则。聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

了解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,用非单调的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。

聚簇索引和非聚簇索引有什么区别
在InnoDB存储引擎中,可以将B+树索引分为聚簇索引和辅助索引(非聚簇索引)。无论是何种索引,每个页的大小都为16KB,且不能更改。

聚簇索引是根据主键创建的一棵B+树,聚簇索引的叶子节点存放了表中的所有记录。辅助索引是根据索引键创建的一棵B+树,与聚簇索引不同的是,其叶子节点仅存放索引键值,以及该索引键值指向的主键。也就是说,如果通过辅助索引来查找数据,那么当找到辅助索引的叶子节点后,很有可能还需要根据主键值查找聚簇索引来得到数据,这种查找方式又被称为书签查找。因为辅助索引不包含行记录的所有数据,这就意味着每页可以存放更多的键值,因此其高度一般都要小于聚簇索引。

Mysql的隔离级别有哪些?
Mysql定义了四种隔离级别,包括一些具体规则,用于限定事物内外哪些改变是可见的,哪些改变时不可见的。
低级别的隔离一般支持更高的并发处理,并且拥有更低的系统开销

在这个隔离级别,所有事物都可以“看到”未提交事物的执行结果。在这种级别上,可能会产生很多问题,除非用户真的知道自己在干什么,并有很好的理由选择这样做。本隔离级别很少用于实际应用,因为它的性能也不比其他性能好多少,而别的级别还有其他更多的优点,读取未提交数据,也被称为“脏读”

大多数数据库的默认隔离级别(但是不是MySQL的默认隔离级别),满足了隔离的早先简单定义:一个事务开始时,只能“看见”已经提交事务所做的改变,一个事务从开始到提交钱,所做的任何数据改变都是不可见的,除非已经提交,这种隔离级别也支持所谓的“不可重复读”,这意味着用户运行同一个语句两次,看到的结果是不同的。

MySQL 数据库默认的隔离界别。该级别解决了read uncommitted隔离级别导致的问题。它保证同一事务的多个实例在并发读取事务时,会“看到同样的”数据行。

强制给事务排序,使之不可能冲突

脏读是指一个事务读取了未提交事务执行过程中的数据。
当一个事务的操作正在多次修改数据,而在事务还未提交的时候,另外一个并发事务

2.尽量避免用select *,返回无用的字段会降低查询的效率
3.尽量避免使用 in和notin,会导致数据库放弃索引进行全表扫描
4.尽量避免使用or,会导致数据库放弃索引进行全表扫描
5.尽量避免进行null值的判断,会导致数据库放弃索引进行全表扫描
6.使用explain查看sql的执行情况,看看那些表查询时间比较长
7.在java中,减少与数据库的交互次数,比如可以使用在存储过程中。

}

计算机应用基础复习资料及答案0607

第一章:计算机基础知识

1.微型计算机最核心的部件是CPU。

2.计算机网络是计算机技术和通信技术高度发展和密切结合的产物。

3.目前微型计算机中常用的鼠标器有机械式和光电式两类。

4.通常,在微机中所指的”Pentium”是指微处理器(又称为CPU)的

5.硬盘工作时,应该避免强烈震动。

6.计算机系统由硬件系统和软件系统组成。

7.在微型计算机中,运算器的主要功能是进行算术运算和逻辑运算。

8.软件系统主要由系统软件和应用软件组成。

9.目前,常见的打印机有针式打印机、喷墨打印机和激光打印机三种。

10.激光打印机的特点是速度快、分辨率高。

11.喷墨打印机较针式打印机的最大优点是采用非击打式,噪音小。

12.针式打印机术语,24针是指打印头内有24根针。

13.计算机中数据表示的主要形式是二进制。

14.在计算机中,一个浮点数由两部分组成,它们是阶码和尾数。

15.7个二进制为可表示128种状态。

16.通常八个二进制位数(即8个比特)表示一个字节。

17.在微型计算机中,西文字符通常用ASCII编码表示。

18.声音信息在计算机内部将转化为二进制数字信息,实现这种转换的

设备叫声频接口卡,即声卡。

19.声卡是沟通主机和音频设备的通道。

21.计算机病毒具有破坏性、传染性、寄生性和隐蔽性。

22.计算机病毒是指以危害系统为目的的特殊的计算机程序。

1.操作系统的主要功能?同步练习册P13。

2.光盘的主要特点?同步练习册P13。

3.计算机中采用二进制来表示信息的主要原因?同步练习册P20。

第2章:计算机操作系统

1.从用户角度看,操作系统是用户和计算机之间的接口。

2.操作系统是一种管理各类计算机系统资源,为用户提供友好界面的

3.操作系统的作用是控制和管理系统资源的使用。

4.在文件名模糊查找中,可用的通配符有两个,分别是* 和?,*

可代表任意多个字符,?仅可代表一个任意字符。

5.以根目录开始的路径叫作绝对路径,以当前目录开始的路径叫作相

6.每个磁盘只有一个根目录,可有多个子目录。

7.桌面是Windows面向用户的第一个界面,也是放置系统硬件和软

件资源(均以图标的形式出现)的平台。

8.组合键Alt+Esc可以完成活动窗口的切换,相当于用鼠标单击活动

任务栏按钮。在多个窗口中切换可用命令Alt+Esc。

9.在Windows中,能弹出对话框的操作是选择了带省略号的菜单项。

10.设Windows桌面上已经有某应用程序的图标,要运行该程序,可

以用鼠标左键双击该图标。

11.在Windows菜单命令后面有省略号(。。。)时,表示执行该命令后

12.Windows中窗口与对话框的区别是窗口有菜单栏而对话框没有。

13.窗口的排列方法有层叠、横向平铺和纵向平铺。

14.活动窗口表现为总是深色加亮的窗口。

15.用鼠标改变窗口的大小时,可以通过拖动窗口边框或窗口角来调

16.一个菜单项的后面有一个指向右方的小黑三角,则表示该项操作后

面还有下一级菜单;如果菜单选项前面有一个小钩表示该选项已经

选用,如果菜单选项前面有小黑点存在,则表示该项命令正处于有

17.要安装或卸载某个中文输入法,可先启动“控制面板”,再使用其

18.实现中文输入法和英文输入法之间的直接切换应按的组合键是

19.按Ctrl+Alt+Del 键,从关闭程序列表中选择程序,在单击“结束

任务”按钮可以退出应用程序。

20.树状结构的目录方式指的文件组织是按层次划分的。

21.树状结构的好处是文件按层次结构组织,文件可以分门别类储存在

方式,文件的名称最多可由255个字符组成。

23.在Windows中同样可以使用* 和?作为通配符查找文件。

24.要复制文件夹时,按住Ctrl键,然后拖放文件夹图标到另一个文

件夹图标或驱动器图标上即可。

25.要移动文件夹时,按住Shift键再拖放文件夹图标到目的位置后释

26.剪贴板只能存放最近一次的剪贴内容,也就是说,前一次的内容将

27.若在某一文档中连续进行了多次剪切操作,当关闭该文件后,“剪

贴板”中存放的是最后一次剪切的内容。

28.从本质来讲,剪贴板是Windows程序或文件之间用于传递信息的

29.在资源管理器左部窗口中,若显示的文件夹图标前带有加号“+”,

意味着该文件夹含有下级文件夹,若显示的文件夹图标前带有加号

“-”,意味着该文件夹处于展开状态。

30.在资源管理器中,单击有“+”的方框可以展开此文件夹,单击有

“-”号的方框可以折叠此文件夹。

31.在资源管理器窗口中,其左边窗口中显示的是系统的文件夹树。

32.按下鼠标左键在同一驱动器不同文件夹内拖动某一对象,结果是移

33.按下鼠标左键在不同驱动器的文件夹内拖动某一对象,结果是复制

34.想选定多个文件名,如这多个文件名连续成一个区域,则先选定第

一个文件名,然后按住Shift键,再在最后一个文件名上单击一下

35.想选定多个文件名,当多个文件名不在一个连续的区域时,应该先

按住Ctrl键,再用鼠标逐个单击选定。

36.如果设备不符合即插即用的规范,那么Windows操作系统不能发

现此设备,用户需手工安装此设备的驱动程序。。

37.Windows附件中“记事本”应用程序是一个编辑小型文本文件的编

1.对话框的特征是什么?同步练习册P34。

2.对窗口的基本操作主要有哪些方法?同步练习册P38。

3.对文件夹的操作有哪些方法?同步练习P45。

4.如何移动文件?同步练习P45。

5.如何复制文件? 同步练习P45。

6.如何重命名文件?自学辅导P60。

第三章:文字处理软件Word

2.在资源管理器中双击某个Word文档名,可以打开Word文档,同

3.在Word的下拉菜单中,有的命令右端有黑色小三角图标,表示这

命令后面还有下级菜单供选择;有的命令左端有打勾图标,表示该

命令选项被选中;有的命令呈灰色状态,表示这些命令在当前状态

4.在Word中,双击状态栏中“改写”方框,则“改写”两字又呈灰

色,表示目前处于“插入”状态。。

5.在Word中,每个菜单项括号内的英文字母的作用是:它可以和

Alt组合成快捷键,用来打开与菜单项后英文字母相对应的下拉菜

6.在Word中选定一块连续的文本的方法是:方法1:首先将光标定

位到文本的开始处,然后按住Shift键,再单击文本块的末尾;方

法2:在文本块的开始处按下鼠标左键并拖动到文本块的末尾即可。

7.在Word中,复制文本、粘贴文本、剪切文本、选定整个文档中文

8.在Word中,保存文档的快捷键是Ctrl+S,当此文档是新建的并且

是第一次保存时,会弹出“另存为”对话框。

10.在Word中,脚注出现在文档中每一页的末尾,尾注一般位于文档

11.在Word中,以下操作的效果是复制文本:选定文本,按住Ctrl

键的同时拖动鼠标至插入点,释放鼠标按键。

12.在Word中的“页码”对话框中“首页显示页码”复选框的选择与

否,决定文档的第一页是否要插入页码。

13.在分栏过程中,如果没有选定任何内容,则表示对整个文档进行分

14.Word提供打印预览功能,查看实际打印的效果。

15.在Word中,对于“字号”框内选择所需字号的大小和磅值时,字

号越大字体越小,磅值越大字体越大。。

16.删除一个段落标记符,将使得前后两段合并成一段。

17.在Word中,当拖动水平标尺上的列标记调整表格中单元格的宽度

时,同时按住Alt键,则在标尺上会显示列宽的具体数据。

18.创建自动表格的方法有两种:一是利用“常用工具栏”中的“插入

表格”按钮;二是利用“表格”菜单中的“插入表格”命令。

19.Word可以将文本转换成表格,但对文本中的各项数据的排列格式

有一定的要求,这就是每一个数据项之间的分隔符必须相同,且分

隔符只能是空格、制表符、逗号或其它特殊字符之一。

20.在Word中文本和表格可以相互转换。

21.如果要在表格底部插入一个空行,那么只要把插入点移到表格最右

下角的单元格中,按Tab键;或把插入点移到表格最后一行的行结

22.在修改表格列宽时,将鼠标“I”型指针移到表格的列边界上,当

鼠标指针变为左右指向的分裂箭头时,按住鼠标左键,此时出现一

23.当一张表格超过一页时,通常希望在第二页的续表中也包括第一页

的表头,则单击“表格”菜单中的“标题”命令。

24.在Word中,选定表格的一列,再按Del键,其效果是删除了该列

中的文本内容,而不是删除了该列。

25.Word中表格中的单元格既可水平拆分又可垂直拆分。

26.在Word 中,图形在文档中的位置由两种方式:浮动式和嵌入式。

27.在Word 中,插入图形文件可分为链接文件和随文档保存两种方

式,链接方式是虚插入(没有将图形文件真正地插入到当前文档

中),插入前后文件长度不变;而随文档保存方式是实插入,真正

地将图形插入到了当前文档中,插入后文件长度增加。

1.单选框及其作用?同步练习P55。

2.复选框及其作用?同步练习P55。

3.在文档中输入当前日期和时间的具体操作步骤? 同步练习册P62。

4.在Word中如何合并单元格?同步练习册P70。

5.在Word中如何拆分单元格?同步练习册P70。

第4章:表格处理软件Excel

1.在一个Excel工作表中的最大行数可达65536行,最大列数可达256

2.在Excel中,一个工作簿文件就是一个扩展名为XLS的文件。

3.在Excel中,下列概念从大到小的排列顺序为工作簿、工作表、单

4.当工作表中某个单元中的数值型数据显示为“##########”时,一

般可以采用改变单元格宽度或者改变单元格数据的显示方式,使单

元格的数据正常地显示出来。

5.Excel 97中,若要在任意单元格的左方插入一个单元格,应在“插

入”菜单中的“单元格”命令中应选择的按钮是活动单元格右移。

6.用户在Excel工作表中输入日期,可以是以下三种格式:10-01-99、

的数据被Excel认为是普通的字符串而非日期。。

7.一个新建的Excel工作簿中默认的工作表的个数是3个。

8.在Excel工作薄中,要同时选择多个不相邻的工作表,可以按住

Ctrl键的同时依次单击各个工作表的标签。

11.当向Excel工作表单元格输入公式时,使用单元格地址D$2的形式

来引用当前工作表的第D列第2行单元格,这种引用方式称为混合

地址引用或混合单元格引用。

}

我要回帖

更多关于 c语言怎么把数字变成字母 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信