2021年实习生笔试题(Java开发工程师)
一、选择题(40分)(请把答案填在框内)
1. 初始序列1 6 2 5 8 4 3采用堆(大顶堆)排序,所对应的二叉树的先序遍历序列为()
A.8 4 5 1 6 2 3
B.8 6 5 1 4 2 3
C. 4 5 1 8 6 2 3
D.6 5 1 8 4 2 3
2.哪个不属于Unix系统进程间的通信方式?(A)
A.文件映射 B.共享内存 C.消息队列 D.信号量
3. HTTP协议返回状态码为403时表示(B)
A 找不到该页面
B 禁止访问
C 内部服务器访问
D 服务器繁忙
4.根据下面代码判断对应输出(A)
public class Parent {
static {
System.out.println("父静态块");
}
public Parent() {
System.out.println("父构造函数");
}
public class Son extends Parent {
{
System.out.println("子块");
}
static {
System.out.println("子静态块");
}
public Son() {
System.out.println("子构造函数");
}
public static void main(String[] args) {
new Son();
}
}
A.父静态块 B.父静态块 C.父静态块 D.父静态块
子静态块 父构造函数 父构造函数 子块
父构造函数 子静态块 子块 子静态块
子块 子块 子静态块 父构造函数
子构造函数 子构造函数 子构造函数 子构造函数
5.4 5 7 2 5 6依次进入栈,不可能的出栈顺序是(D)
A. 4 7 5 2 5 6
B. 7 5 4 2 6 5
C. 5 7 2 4 6 5
D. 7 2 4 5 6 5
6.下面一段代码执行的结果是(D)
public class Calculate {
private static int fib(int x) {
return (x > 0) ? x * fib(x - 2) : 1;
}
public static void main(String[] args) {
System.out.println(fib(5));
}
}
A.-60
B.60
C.-15
D.15
7.String a=”suishouji” 与 String b=new String(“suishouji”)两个对象分别存储在JVM中的哪个位置(C).
A.栈、堆
B.堆、堆
C.常量池、堆
D.常量池、常量池
看法:
String a=”suishouji”
1、在编译期,JVM会去常量池来查找是否存在“suishouji”,如果不存在,就在常量池中开辟一个空间来存储“suishouji”;如果存在,就不用新开辟空间。然后在栈内存中开辟一个名字为a的空间,来存储“suishouji”在常量池中的地址值指向。
String b=new String(“suishouji”)
2、在编译阶段JVM先去常量池中查找是否存在“suishouji”,如果过不存在,则在常量池中开辟一个空间存储“suishouji”。
在运行时期,通过String类的构造器在堆内存中new了一个空间,然后将String池中的“suishouji”复制一份存放到该堆空间中,在栈中开辟名字为b的空间,存放堆中new出来的这个String对象的地址值。
所以本题答案是:C.常量池、堆
8. 在排序方法中,属于稳定性排序算法的是(A)
A、直接插入排序 B、选择排序 C、快速排序 D、希尔排序
9.小明在linux环境开发过程中,自己服务需要调用一个远程服务,突然发现远程服务不能访问,小明可以使用下面那个命令判断是不是对方服务可能宕掉(D)。
A.nslookup B.netstat C.ps D.telnet
解答
nslookup作用
nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,
就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
TELNET协议可以工作在任何主机或任何终端之间。它提供使用TCP/IP在远程计算机上登录并进行命令行的方法。是一种认为是终端仿真的技术,提供了一种通过网络在远程主机上操作的方便的方式。
10.如果2A*3+3B=105成立,则采用的是(B)进制表示的。
A.16 B.15 C.13 D.12
二、编码题
1. 小明星期天去爬山,从山底到山顶有n个阶梯。小明每次可以跨一个阶梯也可以跨两个阶梯。请给出小明到达山顶总共方法的java代码实现。(15分)
package com.algorithm.demo;
/** * @Desc -累行客 * * 1.小明星期天去爬山,从山底到山顶有n个阶梯。 * 小明每次可以跨一个阶梯也可以跨两个阶梯。 * 请给出小明到达山顶总共方法的java代码实现。(15分) * * @Author luolei * @Web http://www.leixingke.com/ * @Date 2020/11/04 15:39 */ public class Step1 {
/** * @Desc: 递归实现。 * @Date: 2020/11/4 15:41 * @param n: * @return: int */ private static int step(int n) { if (n == 1) return 1; if (n == 2) return 2; return step(n - 1) + step(n - 2); }
public static void main(String[] args) { System.out.println(step(10)); } } |
2. 请用java代码实现一个字符串的大小写反转。将大写字符转换成小写字符,小写字符转换成大写字符,特殊字符以及空格不做处理。(不能借助外部库以及jdk提供的大小写转换函数)(15分)
例如:I love CHINA! ->i LOVE china!
package com.algorithm.demo;
/** * @Desc -累行客 * * 2.请用java代码实现一个字符串的大小写反转。将大写字符转换成小写字符,小写字符转换成大写字符,特殊字符以及空格不做处理。(不能借助外部库以及jdk提供的大小写转换函数)(15分) * 例如:I love CHINA! ->i LOVE china! * * @Author luolei * @Web http://www.leixingke.com/ * @Date 2020/11/04 15:45 */ public class Test2 {
public static void main(String[] args) { String str = "I love CHINA!"; // 字符串转成 char 数组 char[] ch = str.toCharArray(); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < ch.length; i++) { if (ch[i] >= 'A' && ch[i] <= 'Z') { buffer.append((char)(ch[i]+32)); } else if (ch[i] >= 'a' && ch[i] <= 'z') { buffer.append((char)(ch[i]-32)); }else{ buffer.append(ch[i]); } } System.out.println(buffer.toString()); } } |
三、数据库
下面是某班级学生考试成绩表、学生信息表,所有学生科目成绩均已录入,缺考计0分。
表名:grade_info(成绩表)
准考证号(stu_no) | 科目 (sub_type) | 成绩 (grade) |
2006001 | 语文 | 79 |
2006001 | 数学 | 88 |
2006002 | 物理 | 72 |
2006001 | 化学 | 66 |
2006001 | 物理 | 47 |
2006002 | 数学 | 59 |
2006002 | 英语 | 80 |
2006002 | 语文 | 75 |
2006001 | 英语 | 98 |
2006002 | 化学 | 80 |
…… | …… | …… |
表名:stu_info(学生信息表)
学生姓名(stu_name) | 准考证号(stu_no) |
小明 | 2006001 |
小红 | 2006002 |
…… | …… |
1) 找出所有全部成绩合格(分数大于等于60分)的学生姓名(15分)
Select b.stu_name as ‘学生姓名’ From grade_info a Left join stu_info b On a.stu_no = b.stu_no Where a.grade>=60 Group by a.stu_no Having count( a.grade)=5; #总共5门学科? |
2) 找出总成绩最高的前三名同学姓名,以及总分数(15分)
Select b.stu_name as ‘学生姓名’, sum(a.grade) as‘总分数’ From grade_info a Left join stu_info b On a.stu_no = b.stu_no Group by a.stu_no Order by sum(a.grade) desc limit 3; |