新浪微博笔试

来源:互联网 发布:mac的flash 编辑:程序博客网 时间:2024/04/28 23:33

1、mysql的查询缓存:

看这里:mysql查询缓存

汗,第一次听说

2、数据库优化:

master-slave数据库:

在做web应用系统中,如果数据库出现了性能瓶颈,而你又是使用的MySQL数据库,那么就可以考虑采用数据库集群的方式来实现查询负载了。因为一般来讲任何一个系统中数据库的查询操作比更新操作要多的多,因此通过多台查询服务器将数据库的查询分担到不同的查询数据库从而提高数据库的查询效率

      MySQL数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据库查询,这样就可以将更新操作与查询操作分离到不同的数据库上,从而提高查询的效率。


1. 纵向分表
纵向分表是指将一个有20列的表根据列拆分成两个表一个表10列一个表11列,这样单个表的容量就会减少很多,可以提高查询的性能,并在一定程度上减少锁行,锁表带来的性能损耗。

纵向分表的原则是什么呢,应该怎样拆分呢?答案是根据业务逻辑的需要来拆分,对于一张表如果业务上分两次访问某一张表其中一部分数据,那么就可以根据每次访问列的不同来做拆分; 另外还可以根据列更新的频率来拆分,例如某些列每天要更新3次,有些列从创建开始基本上很少更新。

举例:
假定场景,我有一张用户表,这张表包含列:
ID, UserName, Password, RealName, Gender, Email, IsEmailValid, Birthday, Country, City, Address, Mobile, Phone, ZipCode, Hometown, OfficePhone, Company, Position, Industry, LatestLoginTime, LatestLoginIP, LoginTimes,OnlineMinutes

假定现在我们的登录出现了性能问题,用户登录经常出现数据库超时的现象。我们打算用拆表的方法解决这个问题。先看下涉及到登录的字段有:UserName,Password,LatestLoginTime,LatestLoginIP,LoginTimes;那么我们就可以以此为依据将原表拆分为:UserLogin和UserBase 两个表,后者包含除了登录信息的其他列信息;两张表都要包含主键ID。

2. 横向分区
横向分区是将表从行的角度拆分,例如将创建时间在05年之前的数据放在一个分区上,将05年到08年之间的数据放到另一个分区上,以此类推。横向分区所根据的列必须在聚集索引上,通常会根据时间,主键id等进行划分。

横向分区将数据划分为不同的区,在根据分区列条件进行查询时可以缩小查询的范围,从而提高查询的性能;另外如果数据库服务器有多个cpu,则可以通过并行操作获得更好的性能。

到底要根据那个列进行横向的分区和查询有关系,我们在建表的时候需要分析,会根据那个列进行查询。

举例:
1. 订单是一个实效性很强的实体,我们很少查询几年前的订单数据,我们就可以在订单的创建时间列上创建分区函数来做分区。
2. 比如帖子通常情况下只有在首页推荐的最新的帖子被访问次数很多,而几年前的帖子被访问的几率较小,这时候我们可以根据帖子的主键id来做分区,id小于300w的在一个分区上,id在300w到600w之间的在一个分区上。 


函数索引看这里

使用函数索引的原因如下:DBA在SQL语句调优的过程中遇到的一个很常见的问题就是,如何优化那些在WHERE子句中使用了函数的语句。
因为在以前,在WHERE子句中使用函数会使在这个表上创建的索引没法利用,从而难以提高这个语句的性能。

3、版本管理软件:

vss、cvs、svn、git

4、信号量:生产者消费者模型

5、一个对象的equals函数和String类的equals函数。

6、linux基本操作命令:文件的最后几行显示命令?tail

7、设计模式中,创建类型,行为类型,结构类型分别包含什么模式?


刚查了一下:

创建型模式:各个工厂模式、单例模式、原型模式、建造者模式。

结构型模式:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式(代理模式不是很清楚,所以不知道为什么分到结构型模式中)。

行为型模式:职责链模式、命令模式、解释器模式、中介者模式、备忘录模式、观察者模式、模板方法模式、访问者模式。


1、创建型模式(Creationalpattern):为你创建对象,而不必由你直接实例化对象。针对给定的案例,程序可以在确定需要创建哪些对象是获得更大的灵活性。

创建模式分为类的创建模式和对象的创建模式两种。

     类的创建模式   类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到哪些具体类的信息,并且隐藏了这些类的实例是如何创建和放在一起的。

     对象的创建模式对象的创建模式则把对象的创建过程动态的委派给另一个对象,从而动态地决定客户端将得到哪些具体类的实例,以及这些类的实例是如何被创建和组合在一起的。

2、结构型模式(Structuralpattern):有助于将对象组合成更大的结构,例如复杂的用户界面和统计数据。

   结构模式可以分为类的结构模式和对象的结构模式两种。

      类的结构模式  类的结构模式使用集成来把类、接口等组合在一起,以形成更大的结构。当一个类从父类继承并实现某接口时,这个新的类就把父类的结构和接口的结构结合起来。类的结构模式是静态的。一个类的结构模式的典型例子,就是类形式的适配器模式。

      对象的结构模式对象的结构模式描述怎样把各种不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。

3、行为型模式(Behavioralpattern):有助于定义系统对象之间的通信,以及在一个复杂的程序中如何控制流程。

   行为模式分为类的行为模式和对象的行为模式两种。

      类的行为模式  类的行为使用集成关系在几个类之间分配行为。

      对象的行为模式对象的行为模式则使用对象的聚合来分配行为。

更细节的 lookv at here