选择题
- Java Application(Java 应用程序)源程序文件编译后的字节码文件的
扩展名是( B )。
A.java
B.class
C.exe
D.jar - 下列选项中属于面向对象设计方法主要特征的是( A)。
A.继承
B.自顶向下
C.模块化
D.逐步求精 - 下面程序的运行结果是(B)
String str1 = “hello”;
String str2 = “he” + new String(“llo”);
System.err.println(str1 == str2);
A.true
B.false
C.exception
D.无输出 - 关于以下application,说法正确是什么?(B)
public class Test {
static int x=10;
static {x+=5;}
public static void main(String[] args) //4
{
System.out.println("x="+x);
}
static{x/=3;};
}//9
A.4行与9行不能通过编译,因为缺少方法名和返回类型
B.编译通过,执行结果是:x=5
C.编译通过,执行结果是:x=3
D.9行不能通过编译,因为只能有一个静态初始化器
解析:
- 执行如下程序,输出结果是(C )
class Test
{
private int data;
int result = 0;
public void m()
{
result += 2;
data += 2;
System.out.print(result + " " + data);
}
}
class ThreadExample extends Thread
{
private Test mv;
public ThreadExample(Test mv)
{
this.mv = mv;
}
public void run()
{
synchronized(mv)
{
mv.m();
}
}
}
class ThreadTest
{
public static void main(String args[])
{
Test mv = new Test();
Thread t1 = new ThreadExample(mv);
Thread t2 = new ThreadExample(mv);
Thread t3 = new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}
A.0 22 44 6
B.2 42 42 4
C.2 24 46 6
D.4 44 46 6
解析:
Test mv =newTest()声明并初始化对data赋默认值
使用synchronized关键字加同步锁线程依次操作m()
t1.start();使得result=2,data=2,输出即为2 2
t2.start();使得result=4,data=4,输出即为4 4
t3.start();使得result=6,data=6,输出即为6 6
System.out.print(result +" "+ data);是print()方法不会换行,输出结果为2 24 46 6
- 阅读以下 foo 函数,请问它的时间复杂度是:( C )
int foo(intarray[], int n, int key)
{
int n1=0,n2=n-1,m;
while(n1<=n2)
{
m=(n1+n2)/2;
if(array[m]==key)
return m;
if(array[m]>key)
n2=m-1;
else
n1=m+1;
}
return -1;
}
A.O(n2)
B.O(n)
C.O(log(n))
D.O(n)
解析:
二分查找的时间复杂度O(logn)
-
判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。(B)
A.对
B.错
解析:
java多态有两种情况:重载和覆写
在覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;
在重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法 -
Which keyword can protect a class in a package from accessibility by the classes outside the package but not package inside ?(D)
A.private
B.protected
C.final
D.don’t use any keyword at all (make it default) ?
解析:
-
关于Spring MVC的核心控制器DispatcherServlet的作用,以下说法错误的是( C)?
A.它负责处理HTTP请求
B.加载配置文件
C.实现业务操作
D.初始化上下应用对象ApplicationContext
解析:
SpringMVC的原理:
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。
DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户。
实现业务操作时在service层,所以C答案错误。 -
关于ThreadLocal类 以下说法正确的是(DE)
A.ThreadLocal继承自Thread
B.ThreadLocal实现了Runnable接口
C.ThreadLocal重要作用在于多线程间的数据共享
D.ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
E.ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
解析:
1、ThreadLocal的类声明:
public class ThreadLocal
可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。
2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。
由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,
变量被彻底封闭在每个访问的线程中。所以E对。
3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
static class ThreadLocalMap {static class Entry extends WeakReference<ThreadLocal> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal k, Object v) { super(k); value = v; } } /** * The table, resized as necessary. * table.length MUST always be a power of two. */ private Entry[] table;
}
所以D对。
编程题
https://leetcode-cn.com/problems/array-partition-i/
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。 示例 1: 输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).
import java.util.Arrays;
import java.util.Scanner;
class Solution {
public int arrayPairSum(int[] nums) {
int sum=0;
Arrays.sort(nums);
for(int i=0;i<nums.length;i+=2){
sum+=Math.min(nums[i],nums[i+1]);
}
return sum;
}
}
public class arrayPairSum {
public static void main(String[] args) {
Solution solution=new Solution();
int[] nums={1,4,3,2};
int num=solution.arrayPairSum(nums);
System.out.println(num);
}
}
https://leetcode-cn.com/problems/toeplitz-matrix/
如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True。
class Solution{
public boolean isToeplitzMatrix(int[][] matrix) {
int R=matrix.length;
int C=matrix[0].length;
for(int i=0;i<R-1;i++){
for(int j=0;j<C-1;j++){
if(matrix[i][j]!=matrix[i+1][j+1]){
return false;
}
}
}
return true;
}
}
public class isToeplitzMatrix {
public static void main(String[] args) {
Solution solution=new Solution();
int[][] matrix={{1,2,3,4},{5,1,2,3},{9,5,1,2}};
boolean flag=solution.isToeplitzMatrix(matrix);
System.out.println(flag);
}
}
https://leetcode-cn.com/problems/contains-duplicate/
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
import java.util.Arrays;
class Solution{
public boolean containsDuplicate(int[] nums) {
/*int[] num=new int[0];
for(int i=0;i<nums.length;i++){
if(!iscontain(num,nums[i])){
num=Arrays.copyOf(num, num.length+1);
num[num.length-1]=nums[i];
}
}
if(num.length==nums.length){
return false;
}
return true;
}
private boolean iscontain(int[] num, int n) {
for(int i=0;i<num.length;i++){
if(num[i]==n){
return true;
}
}
return false;
}*/
Arrays.sort(nums);
for(int i=0;i<nums.length-1;i++){
if(nums[i]==nums[i+1]){
return true;
}
}
return false;
}
}
public class containsDuplicate {
public static void main(String[] args) {
Solution solution=new Solution();
int[] nums={1,1,1,3,3,4,3,2,4,2};
boolean flag=solution.containsDuplicate(nums);
System.out.println(flag);
}
}