美文网首页
2017面试遇到的问题

2017面试遇到的问题

作者: qezhhnjy | 来源:发表于2018-11-21 19:34 被阅读0次
    • MySQL实现多表更新
    UPDATE a SET a.name = b.name from a,b where a.age = b.age;
    或者
    UPDATE a SET a.name = b.name from a join in b on a.age = b.age;
    
    • Switch 怎么判定字符串?
      通过将需要判定的字符串内容封装到一个枚举类中,然后调用枚举的属性.这里其实是错误的.现在可以直接使用字符串进行swicth判断.
    • jar包和war包的区别?
      war包:是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。
      jar包:通常是开发时要引用的通用类,打成包便于存放管理。简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。
    • 通过以下数据表返回各科成绩都大于80分的学生?
    name course score
    张三 语文 75
    张三 数学 81
    李四 语文 80
    李四 数学 82
    王五 语文 81
    王五 数学 85
    王五 英语 65
    1. 第一种方法:先查询出一个有至少一科成绩小于80分的学生的去重临时表
      (select distinct s.name from list s where s.score<80;)
      然后在全表的去重学生查询中排除掉这个临时表的数据
      (select distinct l.name from list l where l.name not in(select distinct s.name from list s where s.score<80);)
      或者
      (select distinct l.name from list where not exists(select 1 from list s where s.score<80 and s.name = l.name);).关于exists及not exists的用法,以前的理解一直很模糊并不清楚怎么用.通过这个方法,可以加深理解.
      https://www.cnblogs.com/beijingstruggle/p/5885137.html
      配合这个链接方便理解其中的定义.
    2. 第二种方法:
      select distinct l.name from list l group by l.name having(min(l.score)>80);
    3. 第三种方法:
      SELECT D.name FROM ( SELECT S.name,S.score AS ITEM1,S1.score AS ITEM2,S2.score AS ITEM3 FROM Student S inner join Student S1 on S.name = S1.name and S.course <> S1.course inner join Student S2 on S.name = S2.name and S.course <> S2.course WHERE S.score>=80 and S1.score>=80 and S2.score>=80 ) D GROUP BY D.name
    • 插入排序,并删除其中重复的数字
      5,3,10,15,12,20,10,8,13,18
      关于插入排序,我之前有一个理解错误的地方,可能是网上代码的理解错误.
      在需要插入的数据对其前面有序数据的大小判定后,不是交换数据.而是将前一个的数据赋值给当前需要插入的数据.然后往前循环,不断将有序部分比该数据大的数据往后移动一位,当前循环结束后将该值插入到判定结束时的位置.
        //插入排序
        public static void sort(int[] arr, int l) {
            for (int i = 1; i < l; i++) {//设定arr[0]为有序数组,从1位开始循环.
                int temp = arr[i];//将i的值复制出来备用
                int j = i - 1;//将有序数组的最大下标赋值复制出来用于循环
                //并在循环结束后将i的值赋给循环最后j的j+1下标.
                for (; j >= 0 && temp < arr[j]; j--) {
                    arr[j + 1] = arr[j];
                }
                arr[j + 1] = temp;
            }
            System.out.println(Arrays.toString(arr));
        }
    

    这里顺便也想重新学习下归并排序.

    • 以下代码的执行结果
      (在父类构造器中引用它的两个方法,在子类构造器中引用它实现的两个方法).
      主函数中创建一个子类对象.
    public class FatherAndSon {
    
        public static void main(String[] args) {
            Father f = new Son();
        }
    }
    
    class Father {
        String FNAME = "Father name@" + this.getClass() + " ";
    
        public Father() {
            call();
            print();
        }
    
        public void call() {
            System.out.println("Father call:" + FNAME);
        }
    
        public void print() {
            System.out.println("Father print:" + FNAME);
        }
    }
    
    class Son extends Father {
    
        String SNAME = "Son name@" + this.getClass() + " ";
    
        public Son() {
            call();
            print();
        }
    
        public void call() {
            System.out.println("Son call:" + SNAME + FNAME);
        }
    
        public void print() {
            System.out.println("Son print:" + SNAME + FNAME);
        }
    }
    

    输出结果:
    Son call:nullFather name@class interview.Son
    Son print:nullFather name@class interview.Son
    Son call:Son name@class interview.Son Father name@class interview.Son
    Son print:Son name@class interview.Son Father name@class interview.Son
    这里父类构造器调用到子类call()方法后,SNAME变量是null,是因为父类中并没有这个成员变量.

    • 1G的文件,每行一个词,每个词最多16个字节,内存为1M,返回出现频率最高的100个词.
    • 关于switch 的default的执行情况。
    • 以下这两段代码的区别?
    short s = 1; s = s + 1 ;
    
    short s = 1; s += 1;
    

    前一段会出现incompatible types的错误信息.第二段则不会出现错误.

    相关文章

      网友评论

          本文标题:2017面试遇到的问题

          本文链接:https://www.haomeiwen.com/subject/hpivbxtx.html