一、专项练习
1.
答案解析:
答案解析:
答案解析:
构造方法每次都是构造出新的对象,不存在多个线程同时读写同一对象中的属性的问题,所以不需要同步 。
如果父类中的某个方法使用了 synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显示的在子类的这个方法中加上 synchronized关键字才可。当然,也可以在子类中调用父类中相应的方法,这样虽然子类中的方法并不是同步的,但子类调用了父类中的同步方法,也就相当子类方法也同步了。 接口里面的变量为常量,其实际是 public static final ;接口里面的方法为抽象方法,其实际是public abstract。 容器保存的是对象的引用 而非对象本身。
答案解析:
C直接继承自A,obj的实际类型为D,和C没有关系。所以obj instanceof C 输出false。
答案解析:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理)中间件位于操作系统之上,应用软件之下,而不是操作系统内核中。
中间件特点的描述:
1. 中间件应支持标准的协议和接口
2. 中间件可运行于多种硬件和操作系统平台上
3. 跨越网络,硬件,操作系统平台的应用或服务可通过中间件透明交互
答案解析:
既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
类的加载包括:加载,验证,准备,解析,初始化。
答案解析:
匿名内部类的创建格式为: new 父类构造器(参数列表)|实现接口(){
//匿名内部类的类体实现
}
由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器。
答案解析:
实际上这道题考查的是两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
答案解析:
设为x进制,用十进制表示方法13就是1*x^1+3*x^0=x+3
(3+x)*(4+x)=2x^2+4————》x=8/x=-1;
答案解析:
首先Map,SortedMap是接口,不能直接实例化,不能直接new创建对象。
基于哈希表的Map结构值和键都可以为空,但是键只能一次为空.
基于红黑树的Map结构,键不可以为空,值可以为空.
基于线程安全的Map结构中,键和值都不能为空.
二、编程题
class Solution {
public int balancedStringSplit(String s) {
int count = 0;
int group = 0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='L'){
count++;
}
if(s.charAt(i)=='R'){
count--;
}
if(count==0){
group++;
}
}
return group;
}
}
class Solution {
public int findMagicIndex(int[] nums) {
for(int i=0;i<nums.length;i++){
if(nums[i]==i)
return i;
}
return -1;
}
}
class Solution {
public int[] replaceElements(int[] arr) {
int rightMax = arr[arr.length - 1];
arr[arr.length - 1] = -1;
for (int i = arr.length - 2; i >= 0; i--) {
int t = arr[i];
arr[i] = rightMax;
if (t > rightMax)
rightMax = t;
}
return arr;
}
}
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
class Solution {
public List<List<Integer>> pairSums(int[] nums, int target) {
Arrays.sort(nums);
int start=0,end=nums.length-1;
List<List<Integer>> number=new ArrayList<>();
while(start<end){
if(nums[start]+nums[end]==target){
List<Integer> list=new ArrayList<>();
list.add(nums[start]);
list.add(nums[end]);
number.add(list);
start++;
end--;
}
else if(nums[start]+nums[end]<target)
start++;
else
end--;
}
return number;
}
}
【思路】
先排序,再使用两个指针start和end指向数组的头部和尾部
若nums[start] + nums[end] < target,则start++
若nums[start] + nums[end] > target,则end--
若nums[start] + nums[end] == target,则符合条件,加入list.