天天看点

真实面试题之一

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

Java基础

1、 实现clone方法和equals方法时需要注意什么?

答:深度clone:实现Serializable

浅度clone:实现Cloneable接口

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

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

3、 

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

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

class Counter {

private volatile int count = 0;

public int getNext() {

  return ++count;

}

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

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

4、 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. scan和keys命令的区别?

SCAN:将所有查询的参数分页处理,每次处理的条数通过参数传入

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

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

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

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

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

数据库

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

表名 students
username tel content date
张三 13801281191 大专毕业 2006-10-11
李四 13612312331 本科毕业 2006-10-15
王五 021-55665566 硕士毕业

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%’

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

第二个和第三个可以使用索引