longlong ago 做的阿里的正式批的笔试题了,不会做。
yesterday 阿里打电话约一面时间,说一面之前会有一个笔试环节,带好电脑。
Nowadays 约的今天下午三点,打来电话,先发了一个阿里内部的测评连接,两道笔试题,如下:
/*
问题:启动a、b两个线程,由这两个线程打印出1到100共一百个数字。
要求:
1. a线程打印1、3、5、7等奇数,b线程打印2、4、6、8等偶数。
2. 依次串行打印,即打印完1之后,再打印2,然后是3、4、5…直到100,全部打印完成后,进程能正常结束。
3. 标准时间:20分钟
*/
public class A implements Runable{
private boolean isRun;
private Object lock;
private int num;
public A(boolean isRun,Object lock,int num){
this.isRun = isRun;
this.lock = lock;
this.num = num;
}
public void run(){
synchronized(lock){
while(num<=100){
if(isRun){
isRun = false;
}else{
lock.waite();
}
System.out.println(num);
num+=2;
lock.notify();
}
}
}
public static void main(String args[]){
Object lock = new Object();
Thread t1 = new Thread(new A(true,lock,1));
Thread t2 = new Thread(new A(false,lock,2));
t2.start();
t1.start();
}
}
//编程实现:二分搜索算法
public class BinarySearch{
public int binarySearch(int[] nums,int target){
if(nums == null || nums.length == 0)
return -1;
int begin = 0;
int end = nums.length-1;
while(begin <= end){
int mid = begin + (end-begin)/2;
if(nums[mid] > target){
end = mid;
}else if(array[mid] < target){
begin = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
不知道对不对,瞎做的。。。
问题:启动a、b两个线程,由这两个线程打印出1到100共一百个数字。
要求:
1. a线程打印1、3、5、7等奇数,b线程打印2、4、6、8等偶数。
2. 依次串行打印,即打印完1之后,再打印2,然后是3、4、5…直到100,全部打印完成后,进程能正常结束。
3. 标准时间:20分钟
*/
public class A implements Runable{
private boolean isRun;
private Object lock;
private int num;
public A(boolean isRun,Object lock,int num){
this.isRun = isRun;
this.lock = lock;
this.num = num;
}
public void run(){
synchronized(lock){
while(num<=100){
if(isRun){
isRun = false;
}else{
lock.waite();
}
System.out.println(num);
num+=2;
lock.notify();
}
}
}
public static void main(String args[]){
Object lock = new Object();
Thread t1 = new Thread(new A(true,lock,1));
Thread t2 = new Thread(new A(false,lock,2));
t2.start();
t1.start();
}
}
//编程实现:二分搜索算法
public class BinarySearch{
public int binarySearch(int[] nums,int target){
if(nums == null || nums.length == 0)
return -1;
int begin = 0;
int end = nums.length-1;
while(begin <= end){
int mid = begin + (end-begin)/2;
if(nums[mid] > target){
end = mid;
}else if(array[mid] < target){
begin = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
不知道对不对,瞎做的。。。
然后就是在公屏上跟面试官交流,约了明天晚上七点的面试。
PS:阿里后端的小哥声音挺好听😂
全部评论
(0) 回帖