整顿了几道阿里巴巴真题,来试试本人程度有多厉害吧,每题还有答案和具体解答哦。
1、有个非凡的餐厅,对客人的要求是如果要来到餐厅肯定要看下餐厅内有没有比你迟进来的人,肯定要所有比你迟进来的人来到后你能力来到,有一天甲,乙,丙,丁四个客人先后进入了这家餐厅,那么他们来到的程序不可能是:
A:丙,乙,甲,丁
B:甲,乙,丙,丁
C:乙,甲,丙,丁
D:乙,丙,甲,丁
E:丁,丙,甲,乙
F:丁,丙,乙,甲
本题考查的是元素入栈出栈的程序问题。但要小心一个思维误区:并不是要等到甲、乙、丙、丁全副按序进入餐厅后才开始有人来到。答案:E。
2、在关系型数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起抵触的是:
A:其中一个 DELETE 操作,一个是 SELECT 操作
B:其中两个都是 UPDATE
C:其中一个是 SELECT,一个是 UPDATE
D:其中一个是 DELETE,另一个是 UPDATE
E:两个都是 DELETE
当要删除的记录在数据库中不存在的时候,是不会报错的。答案:E。
3、设一组初始关键字为(12,15,1,18,2,35,30,11),则以 12 为基准记录的一趟疾速排序完结后的后果为:
A:11,1,2,12,35,18,30,15
B:11,2,1,12,15,18,35,30
C:1,2,11,12,15,18,35,30
D:11,2,1,12,18,35,30,15
E:1,2,11,12,15,18,30,35
疾速排序里的挖坑填补法:以 12 为标准值,从右开始找比 12 小的值,首先是 11,把 11 放在 12 的地位,把 12 放在 11 的地位,再从左找比 12 大的值 15,把 15 放在 12 的新地位(原 11 的地位)之后变成 11,12,1,18,2,35,30,15。在新的一轮开始,从右开始找比 12 小的数是 2,把 2 放在 12 的地位,12 放在 2 的地位,在从左找比 12 大的数 18,把 18 放在 12 的新地位上(原 2 的地位)变成 11,2,1,12,18,35,30,15。答案:D。
4、以下程序的运行后果是?
public class TestThread{public static void main(String args[]){Runnable runner = new Runnable(){
@Override
public void run(){System.out.print('foo');
}
};
Thread t = new Thread(runner);
t.run();
System.out.print("bar");
}
}
A:foobar
B:barfoo
C:foobar 或者 barfoo 都有可能
D:Bar
E:Foo
F:程序无奈失常运行
这道题是考线程的调用状况,线程的启动形式只能通过 start 这种形式启动能力真正的实现多线程的成果,如果是手动调用 run 办法和一般办法调用没有区别,所以这个还是依照程序执行首先执行 run 办法之后,执行输入语句所以最终失去后果 foobar。答案:A。
5、一个二叉树有 100 个子节点数为 2 的节点,100 个子节点数为 1 的节点,那么子节点数为 0 的节点 (叶节点) 的个数为:
A:101
B:100
C:200
D:300
E:99
F:1
度数(边数) = 所有节点数 -1,这里度数 =2*100+100=300,节点数 =100+100+ 叶子节点数。所以叶子节点数 = 度数 +1- 非叶子节点数 =101。答案:A。
6、现有 1G 数据须要排序,计算资源只有 1G 内存可用,下列排序办法中最可能呈现性能问题的是。
A:堆排序
B:插入排序
C:归并排序
D:疾速排序
E:抉择排序
F:冒泡排序
答案:C
7、某开发团队有 6 位开发同学,需加入 5 个我的项目,每个我的项目都有人做,每位同学须要恰好加入 1 个我的项目,那么总共有 种不同的调配计划。
A:3600
B:3600
C:2700
D:1800
E:900
F:30
C6 2 *A5 5,先对人分组,也就是 6 集体分 5 组,则必有 1 个组有两个人,其余组 1 人。而后每组对应一个我的项目。答案:D。
8、建设和敞开一个 tcp,一共会产生的握手次数是()
A:7 B:6 C:3 D:5
建设的三次握手加敞开的四次握手。答案:A。
9、学校图书馆共有 300 万册图书,想统计其中 Computer、Science、计算机、迷信这几个词呈现的次数,并依照天然年度分类,如 2016 年出版的书籍中这几个词各自呈现的次数,2015 年……顺次类推。
将每本书都存在 hdfs 里作为一个文件,文件名为 工夫(4 位年份)+ 书的 id+ 书的名称。应用 mapreduce 进行运算,map 输入为 < 日期,computer 次数;science 次数; 计算机次数; 迷信次数 >,reduce 输入同样,不过作为 value 的字符串中的次数为总次数。代码如下:
public static class MyMapper extends Mapper<LongWritable,Text,Text,Text>{private static Text outputKey = new Text();
private static Text outputValue = new Text();
@Override
protected void map(LongWritable key,Text value,Context context)
throws IOException,InterruptedException {
// 失去 hdfs 文件名
String filename = ((FileSplit) context.getInputSplit()).getPath().getName();
String date = filename.substring(0,4);
// 别离统计 computer,science,计算机,迷信呈现的次数
int computer = 0;
int science = 0;
int jisuanji = 0;
int kexue = 0;
String line = value.toString();
String[] words = line.split(" ");
for(String s:words){if(s.equals("computer")) computer++;
if(s.equals("science")) science++;
if(s.equals("计算机")) jisuanji++;
if(s.equals("迷信")) kexue++;
}
String outputVal = ""+ computer +";"+ science +";"+ jisuanji +";" + kexue;
outputKey.set(date);
outputValue.set(outputVal);
context.write(outputKey,outputValue);
}
}
public static class MyReducer extends Reducer<Text,Text,Text,Text> {
@Override
protected void reduce(Text key,Iterable<Text> values,Context context)
throws IOException,InterruptedException {
int allComputer = 0;
int allScience = 0;
int allJisuanji = 0;
int allKexue = 0;
for(Text value:values){String val = value.toString();
String[] str = val.split(";");
allComputer += Integer.parseInt(str[0]);
allScience += Integer.parseInt(str[1]);
allJisuanji += Integer.parseInt(str[2]);
allKexue += Integer.parseInt(str[3]);
}
String finalVal = ""+ allComputer +";"+ allScience +";"+ allJisuanji +";" + allKexue;
context.write(key,new Text(finalVal));
}
}
10、以字符串的模式读入两个数字,编写一个函数计算它们的乘积,以字符串模式返回。(字符串长度不大于 10000,保障字符串仅由’0’~’9’这 10 种字符组成)。
import java.util.*;
public class Solution {
/**
* 代码中的类名、办法名、参数名曾经指定,请勿批改,间接返回办法规定的值即可
*
* @param s string 字符串 第一个整数
* @param t string 字符串 第二个整数
* @return string 字符串
*/
public String solve (String s,String t) {int len1 = s.length();
int len2 = t.length();
int[] nums1 = new int[len1];
int[] nums2 = new int[len2];
for(int i = 0; i < len1; i++){nums1[i] = s.charAt(i) - '0';
}
for(int i = 0; i < len2; i++){nums2[i] = t.charAt(i) - '0';
}
int[] result = new int[len1 + len2];
// 1. 逐位相乘
for(int i = 0; i < len1; i++){for(int j = 0; j < len2; j++){result[i + j] += nums1[i] * nums2[j];
}
}
// 2. 从后往前进位
for(int k = result.length - 1; k > 0; k--){result[k - 1] += result[k] / 10;
result[k] = result[k] % 10;
}
// 输入字符串
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < result.length - 1; i++){stringBuilder.append(result[i]);
}
return stringBuilder.toString();}
}
下面的口试题你做对了几道?如果你感觉看得不过瘾,我给大家筹备了一套阿里“有史以来”最新最全 Java 面试真题 (笼罩 P5-P8 级别) 如有须要点击此处即可收费支付,无套路。