Day18刷题总结

选择题

  • 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);
	}
}

猜你喜欢

转载自blog.csdn.net/sl1130398099/article/details/83579039