JAVA-2003笔试题
一、选择题(每小题2,共10分)
- 下列语句序列执行后,m 的值是( C )
int a=10, b=3, m=5;
if( a==b ) m+=a; else m=++a*m;
A.15 B.50 C.55 D.5 - 若已定义byte[]x={11,22,33,-66}其中0≤k≤3,则对x数组元素错误的引用是( C )
A x[3-k] B x[k] C x[k+1] D x[0] - 下列程序片段运行的结果是( D )
int a = 36; int b = (a++)%5; System.out.println(“a=”+a+",b="+b);
A a=36,b=0 B a=37,b=2 C a=36,b=1 D a=37,b=1
4、下列关于二维数组a的结论,正确的是( C )
int[][] a= {{1,2,3},{4,5,6,7},{8,9},{10,11,12,13,14,15}};
A. a[3][2]为9 B. a[2].length为4 C. a.length为4 D. a[1]为4
5、设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( A )
A. 3 B. 3. 5 C. 4 D. 5
二、填空题(每题2分,共计20分):
- Linux常用文件的命令是(6个): cp cd pwd mkdir ll ls mv touch rm
2、Spring事务注解@Transactional可以作用在 类 类方法 接口 接口方法
3、加密主要分为 对称加密 非对称加密 单向加密
4、常用的加密算法是(说2个): MD5 BASE64 SHA HMAC
5、盐值加密概念: 通过加入一些随机数进行加密的方式叫做盐值加密
6、try{}里有一个return语句,在try后的finally里的code什么时候执行,return前还是return后: return 前
7、jdk8中ArrayList初始化容量是 0 进行add方法添加后的大小是 10
8、LinkedList初始化大小是 0 原因: LinkedList 是一个双向链表,没有初始化大小,也没有扩容机制,就是一直在前面或者后面新增就好了
9、HashMap初始化容量是 0 进行put方法添加后的大小是 16
10、@ResponseBody注解描述: 主要用于返回json 字符串
三、阅读程序写结果(每小题5,共15分)
1、阅读以下程序,补充代码完成功能(用冒泡排序完成数据降序排序)
public static void main(String[] args) {
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
//降序
if (arr[j] < arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.print("[");
for (int k = 0; k < arr.length; k++) {
if(k == arr.length - 1) {
System.out.print(arr[k] + “]”);
}else {
System.out.print(arr[k] + “,”);
}
}
}
2、阅读代码(输出打印结果)
输出结果是(5分):
2
4
1
3
输出结果是(5分):
8
11
7
6
10
9
四、简答题(每题2分,共30分)
1、序列化ID有什么用,为什么要进行序列化操作?
作用:这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,java的序列化机
制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来
的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一
致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。
因为:序列化采用数据流来存储,以数据流传输会提高网络的传输速度,并且可以直接对数据流进行操
作,从而减少了对数据表的操作过程,减少数据出错的几率。
好处:数据操作规范类似于xml文件,保证数据的一致性和安全性。
2、Object类包含哪些方法?(至少5个)
(1)clone方法:保护方法,实现对象的浅克隆。
(2)getClass方法:获得运行时的类型。
(3)toString方法:该方法用的比较多,一般子类都有覆盖。
(4)equals方法:一般equals和 == 是不一样的,但是在 Object 中两者是一样的。
(5)hashCode方法:该方法用于哈希查找,可以减少在查找中使用 equals 的次数,重写了 equals 方
法一般都要重写 hashCode 方法。
3、请描述String为什么用final修饰?
因为 String 类不能被继承,不会被修改,并且在程序中出现的频率比较高,所以使用 final 修饰
String 便于提高安全性和效率。
4、Java类为什么是单继承的?
因为如果提供多继承的话可能会出现错误,例如:一个类继承了两个父类,而两个父类中有相同的方法,
那么子类的调用结果就会含糊不清,出现错误,所以java 类是单继承的。
5、Maven有哪些优点和缺点(各至少3点)?
优点:(1)简化了项目依赖管理。
(2)易于上手,便于满足工作要求。
(3)有助于多模块项目的开发。
缺点:(1)学习难度大。
(2)出现问题难以调试。
(3)当依赖很多时,程序会出现卡顿的情况。
6、描述HashMap底层实现原理?
(1)JDK1.7:数组 + 链表。
(2)JDK1.8:数组 + 链表 + 红黑树。
7、ThreadLocal、synchronized 和 Lock 有什么区别?有哪些使用场景?
(1)ThreadLocal 为解决多线程程序的并发问题提供了一种新思路,使用这个工具类可以更简洁
地编写出优美的多线程程序。应用场景主要是用来解决数据库连接,Session 管理等。
(2)Lock 有比 synchronized 更精确的线程语义和更好的性能,synchronized 会自动释放锁,而Lock
却要求程序员手工释放,而且必须在 finally 语句中释放。
(3)synchronized 无法判断锁的状态,而 Lock 可以判断锁的状态度。
8、HashMap和ConcurrentHashMap、LinkedHashMap的区别?
(1)HashMap 不保证顺序,即为无序的,具有很快的访问速度,HashMap 最多只允许一条记录的键为
Null,允许多条记录的值为 Null,HashMap 不支持线程的同步,是线程不安全的。
(2)LinkedHashMap 是继承于 HashMap,是基于 HashMap 和双向链表来实现的, LinkedHashhMap 是
有序的, 它可以保证 HashMap 集合有序,存入的顺序和取出的顺序一致,是线程不安全的。
(3)ConcurrentHashMap是基于分段锁设计来实现线程安全性,只有在同一个分段内才存在竞争关系,
不同的分段锁之间没有锁竞争,是线程安全的。
9、TCP 为什么要三次握手,两次不行吗?为什么?
两次不行,因为三次握手可以有效地防止已失效的连接请求会再次传送到服务器端,因而会产生错误。
10、描述下@Resource和@Autowired、@Qualifier注解区别?
(1)@Resource:Spring 的注解,默认按名称 name 注入,如果没有找到相同名称的 Bean,则会按照
类型进行匹配,同时还可以通过名称 name 和类型 type 属性进行选择性注入。
(2)@Autowired:Spring 的注解,默认按类型 type 注入。
(3)@Qualifier:Spring 的注解,按名称 name 注入。
11、url中 ? 和 # 的区别?
(1)?代表查询字符串(query)。
(2)# 代表url中的hash(fragment)。
12、MyBatis中 #{} 和 KaTeX parse error: Expected 'EOF', got '#' at position 12: {} 的区别? (1)#̲{} 是预编译处理,{} 是字符串替换。
(2)使用 #{} 可以有效地防止 SQL 注入,提高系统的安全性。
(3)MyBatis 在处理 #{} 时,会把 SQL 中的 #{} 替换为 ? 号,并使用 PreparedStatement 的 set
方法来赋值,而MyBatis 在处理 ${} 时,会把 ${} 替换成变量的值。
13、描述Spring/MyBatis所用设计模式(各至少2个)
两者都有单例模式、工厂模式、代理模式。
14、写出Jquery ajax语法?
$.ajax({
url:‘地址’,
data:{
参数:xxx,
参数:xxx
},
type:‘POST/GET’,
success:function(str){ //成功回调函数
alert(str);
},
error:function (err){ //失败回调函数
alert(err);
}
});
15、描述你熟悉的设计模式(除单例、工厂以外,是什么、作用是什么)?
(1)代理模式:Mybatis 实现的核心,比如 MapperProxy、ConnectionLogger。为其他对象提供一个
代理以便控制这个对象的访问。
(2)Builder 模式 :例如 SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、
XMLStatementBuilder、CacheBuilder。
(3)适配器模式:将一个类的方法接口转换成客户希望的另外一个接口。
四、描述题(每题5分。共计25分)
1、如果某段业务与数据库交互的程序运行较慢你将如何处理(说出你的解决方案 至少3点)
2、描述你所知道的JAVA开发中常用的代码优化方案(至少3点)
4、描述你所知道的WEB安全漏洞,并给出解决方案(至少3点)
4、如何设计出优秀的数据库表结构(扩展、查询性能等方面考虑)
5、项目中高并发是不可避免的,自我总结从哪几点出发,解决高并发(至少3点)