6、请概述消息中间件?
答:消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠传递、广播、流量控制、最终一致性等一系列功能,已成为异步RPC的主要手段之一。
7、StringBuffer和StringBuilder有什么区别?
答:两者的区别主要是在运行速度和线程安全这两方面。
1.StringBuffer与StringBuilder中的方法和功能完全是等价的。
2.只是StringBuffer中的方法大都采用了Synchronized关键字进行修饰,因此线程是安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。
3.在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。
8、字符串拼接为什么要使用Stringbuffer,而不使用String+String?
答:StringBuffer是可以改变的字符串,而String是不可改变的。每次使用System.String类中的方法之一时,都要在内存汇总创建一个新的字符串对象,就要为该对象分配新的空间。当要对字符串重复修改时,创建新的String对象相关的系统开销很大,就是要修改字符串而不创建新的对象,则用StringBuffer。
9、怎么样去实现一个多线程?
答: JAVA多线程实现的四种方式
1.继承Thread类创建线程
2.实现Runnable接口创建线程
3.实现Callable接口通过FutureTask包装器来创建Thread线程
4.使用ExecutorService、Callable、Future实现有返回结果的线程
10、什么是数据库水平、垂直拆分?
答:水平拆分,垂直拆分后遇到单击瓶颈,可以使用水平拆分。相对于垂直拆分的区别是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。
垂直拆分,专库专用。一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布道不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。
11、百万级的单表如何优化?
答: 1.对查询进行优化,要尽量避免全表扫描,首先考虑在where及order by涉及的列上建立索引。
。
3.应尽量避免在where子句使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。
12、怎么优化一个sql语句的性能,从哪些方法入手?
答:1.对查询进行优化,要尽量避免全表扫描,首先考虑在where及order by涉及的列上建立索引。
2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。
3.应尽量避免在where子句使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。
13、简单描述Jquery的跨域请求,并且如何实现?
答:1.通过ajax在服务器端通过代理的方式实现
2.通过jsonp的方式
14、简单描述Redis和Memcache、Ehcache的区别?
答:Ehcache是一个纯java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider,所以被用于大型复杂分布式web application的各个节点中。
memcache是一套分布式的高速缓存系统。通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据库调用到内存中,然后从内容中读取,从而大大提高读取速度。
Redis是用C语言开发的一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型:字符串类型、散列类型、列表类型、集合类型、有序集合类型。
15、书写一个单例类?
答:1.饿汉式单例
public class Singleton {
private Singleton(){};
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
2.懒汉式单例
public class Singleton1 {
private Singleton1(){
System.out.println("createSingleton");
}
private static Singleton1 instance = null;
public static synchronized Singleton1 getInstance(){
return instance==null?new Singleton1():instance;
}
public static void testSingleton(){
System.out.println("CreateString");
}
}