真实面试题之一


本套题目共5页,请在1个小时内选择做答,正确率优先。mysql

Java基础redis

一、 实现clone方法和equals方法时须要注意什么?算法

 

答:深度clone:实现Serializablesql

浅度clone:实现Cloneable接口数据库

 

二、 下面的方法,当输入为2的时候返回值是多少?json

public static int getValue(int i) {浏览器

        int result = 0;服务器

        switch (i) {数据结构

        case 1:多线程

            result = result + i;

        case 2:

            result = result + i  * 2;

        case 3:

            result = result + i * 3;

        }

        return result;

    }

 

答:10

 

三、 

a.下述代码在多线程环境中是否存在问题?如有,如何修正?

b.下述代码中的volatile关键字是什么意思?若是删除对该段代码有何影响?

class Counter {

private volatile int count = 0;

 

public int getNext() {

  return ++count;

}

}

答:存在多线程环境问题,++count不是原子操做,方法:1,在 方法添加synchronized 2,用lock锁机制使++count操做是一个总体 3count变量用原子类进行操做。

使用volatile关键字确保共享变量可以呗准确和一致地更新的关键字,保证可见型,只对变量使用。

 

 

四、 Thread.sleep() 可能抛出的 InterruptedException 表明什么?如何处理?

答:阻塞方法抛出该异常

1,清除中断状态。2,捕获该异常,保留中断发生的

 

Spring

 

1. @Controller中,跳转(“redirect: url”)和转发(forward: url”)有什么区别?

 

 

答:一个跳转会改变浏览器的地址,通常用于访问外界资源

转发是在本服务器进行地址的转换,浏览器的地址不会发生改变。

 

2. 下面是HTTP请求报文:

POST /example?param1=value HTTP/1.1

Host: www.nowhere123.com

Accept: image/gif, image/jpeg, */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate

Content-Type: application/json; charset=UTF-8

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

X-Auth-Token: token-xxxxx

 

{

"param2": "value"

}

如何在Controller的方法中获取框中的数值?

 

 

答:经过HttpServletRequest获取到请求头的集合,遍历,经过键获取值

request域中获取集合体,再经过键值对获取数据。

 

 

3. 使用注解(如@Component)声明Bean,如何指定Bean加载顺序?

a) 答:经过优先级设定

b) 

 

 

 

 

4. 多个同类型的Bean,使用注解注入时如何指定?

 

 

 

 

MyBatis

 

1. XML映射中,SQL语句的两种参数注入方法:#$的区别?

 

#:使用的是PreparStatement

$: 使用的是 Statement类(会发升SQL注入问题)

 

 

2. XML映射中,如何使用LIKE进行模糊查询?

 

答:like %#{条件}%

 

 

3. XML映射中,如何批量插入传入的集合(Collection<E>)?

即,如何根据集合生成以下SQL

INSERT INTO TABLE_NAME(a, b, c)

VALUES (a1, b1, c1), (a2, b2, c2) …

 

 

 

 

 

4. XML映射中,如何在插入的同时获取MySQL自增字段(AUTO_INCREMENT)的生成值?

 

答:插入的时候用selectKey标签先生成主键再进行插入操做

 

 

 

 

 

 

Redis

1. 如何使key对应的值过5秒后失效?

 

答:expire key 5

设置了失效时间,redis也可能存放在redis 的内存中,redis采用的是软清理的方式,经过以必定的算法进行处理。

 

 

 

 

2. scankeys命令的区别?

 

SCAN:将全部查询的参数分页处理,每次处理的条数经过参数传入

KEYS:将全部查询的参数进行显示,数据量大对服务器性能有影响。

 

 

 

 

3. 如何开启和执行事务?

答:经过multi命令开启事物,

 

 

 

 

 

4. 使用管道(Pipeline)有什么好处?

答:减小服务器压力,减小链路层中的时间消耗,将大量操做结合成少许的操做。

 

 

 

 

 

数据库

 

1. 请写出如下MySQL语句的格式 : 插入 ,更新 ,删除

表名

students


username

tel

content

date

张三

13801281191

大专毕业

2006-10-11

李四

13612312331

本科毕业

2006-10-15

王五

021-55665566

硕士毕业

2006-10-15

 

a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中

 

Insert into students values(‘小王’,‘13254748547’,‘高中毕业’,date(‘2007-05-06’))

b) 请用sql语句把张三的时间更新成为当前系统时间

Update students set date=date(now()) where username=张三

 

c) 请写出删除名为张四的所有记录

Delete from student where username in

 

d) 请给date 字段列增长一个普通索引

Alter bable student add index_name (date)

 

 

 

2. 表链接的左关联和右关联有什么区别?

a) 左关联:查询以左边的表条件为主,左边表的字段所有显示,右表有就显示没有就不显示。

b) 右关联:查询以右边的表条件为主,右边表的字段所有显示,右表有就显示没有就不显示。

 

 

 

 

 

3. 下面哪些语句能够使用索引,而哪些不能?为何?能够用索引的,怎么建索引?

a)select account_name from trans where amount!=0

b)select account_name,amount from trans where account_name='amex' and account_type='a'

c)select account_name,amount from trans where account_name like zhang%

 

答:第一个不能使用索引, != 会致使索引失效,进行全局查询

第二个和第三个能够使用索引

 

创建索引:索引能够提升查询效率,可是也会影响增删改的效率,MySQL索引自己就是一种数据结构,索引维护这这种查询树,频繁的对数据进行修改,就会影响树的每一个节点变化,不停的进行IO操做对mysql数据库也是有影响的,因此通常创建全部都是在数据变化不大,查询频率比较高的数据进行创建索引。