个人遇到的java面试题

面试中遇到的笔试或是面试的题目拿来给大家分享一下。所有的题目我们只重视思路,不纠结结果。

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_noint学号
stu_namevarchar学生姓名
stu_gradevarchar年级
stu_sexvarchar性别

表二:成绩表

列名类型注释
stu_noint学号
stu_coursevarchar课程
stu_scoreint成绩

 

1).求所有成绩都及格的学生信息

题目分析(重点看第二条):

1、首先我们查询出成绩>=60并且根据学号分组求count是否=总课程的学号,我们根据学号查询出学生信息

2、先查出成绩<60的学号(说明这些学生存在不及格的课程),我们查学号不在这里面的学生信息

2).把‘一年级一班’的同学的英语成绩增加10分

题目分析:略

3).求平均成绩大于60分的男女人数

题目分析:略

4).删除张三学生的所有信息 

题目分析:先删除成绩表后删除学生信息表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值