面试中遇到的笔试或是面试的题目拿来给大家分享一下。所有的题目我们只重视思路,不纠结结果。
1.下面程序的输出结果:(此题中的thread类是匿名类)
private static void main(String[] args){
Thread thread = new Thread(){
@Override
public void run(){
print();
}
}
thread.run();
System.out.println("main method");
}
private static void print(){
System.out.println("print method");
}
题目中的也是匿名类的一种,也是可以正常执行的,我们正常的声明类的方式可能是下面这种:
Thread thread = new Thread(new Runabble(){
@Override
public void run(){
}
}
代码分析:首先我们看到thread首先想到的是线程,但是往往错误处在此处(线程调用我们也不知道什么时候执行),我们要仔细看题目中的代码,代码中并不是start()方法,而是thread.run()这是普通方法的调用。所以,我们肯定先执行print方法打印,然后执行main方法中的打印语句
2.在一个单链表中q是p的前驱节点,请问如何向q和p之间插入s节点?
首先我们将这个单链表构建出来,如下图:
题目分析: 构建出来单链表的结构之后就很容易了,我们只需将s节点的next->p(q.next),再将q.next->s就可以了
3.是否存在 i + 1 < i?
题目分析:这个题目炸一看确实是不存在,但是我们java中的数据类型是有范围的,如果超过这个范围就会回到最小值,这是这道题目的关键点,因此,那我们i是多少呢?我们java的数据类型有很多中byte、short、int、long、float、double,那么我们取那个?如果我们的i是byte类型(-128-127),那i = 127就可以了,+1之后是-128,但是 i + 1 是存在类型隐式转换的,1默认是int类型,则 i + 1 之后也会变成int类型,所以我们只需取int的最大值就可以了(2^31 - 1)。解题关键是边界值
4. 问下面代码的时间复杂度?(这个题目我记得不是很清楚了,区别点在 int j = 0?还是 int j = i了)
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
//for(int j = i; j < n; j++)
}
}
题目分析:如果是上面的代码运行感觉so easy,时间复杂度不就是o(m * n)嘛,但是如果将上面代码的注释打开,时间复杂度是多少?我们姑且自己分析一下,m < n; m = n; m > n是否是一样的呢?
5.我们将A、B、C、D顺序放入一个栈中,我们借助另外一个栈可以取出什么样的顺序?
我们借助下面的这个图,可以清晰的分析出我们可以取出什么样顺序的结果
6. 写代码将 int[] array = {1,23,10,6,94,45} 从小到大排序。
冒泡、快速……排序都可以
7.有以下表结构:
表一:学生表
列名 | 类型 | 注释 |
---|---|---|
stu_no | int | 学号 |
stu_name | varchar | 学生姓名 |
stu_grade | varchar | 年级 |
stu_sex | varchar | 性别 |
表二:成绩表
列名 | 类型 | 注释 |
---|---|---|
stu_no | int | 学号 |
stu_course | varchar | 课程 |
stu_score | int | 成绩 |
1).求所有成绩都及格的学生信息
题目分析(重点看第二条):
1、首先我们查询出成绩>=60并且根据学号分组求count是否=总课程的学号,我们根据学号查询出学生信息
2、先查出成绩<60的学号(说明这些学生存在不及格的课程),我们查学号不在这里面的学生信息
2).把‘一年级一班’的同学的英语成绩增加10分
题目分析:略
3).求平均成绩大于60分的男女人数
题目分析:略
4).删除张三学生的所有信息
题目分析:先删除成绩表后删除学生信息表