以下java题目,为我自己面试遇到的问题,在此做个记录,以便于以后自己能随时查阅,若答案有问题,欢迎大佬指出,谢谢!!!!

1.exist和in的区别?以及何时exist效率大于in?何时in的效率大于exist?

          in()适合B表比A表数据小的情况

          exists()适合B表比A表数据大的情况

          当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.

参考连接:https://blog.csdn.net/lilun517735159/article/details/78826521

2.Controller向页面传值有几种方式?如何实现传值?

有五种传值方式:

利用request进行值传递: request.SetAttribute()

利用Model进行值传递: model.addAttribute()

利用hashMap进行传递:hashMap.put();

利用ModelAndView进行传递: xxx.addObject("admin", bean);  xxxx.setViewName("Model");

利用Session进行传递: session.setAttribute()

3.页面向Controller传值有几种方式?如何实现传值?

有五种传值方式:

直接将请求参数名作为Controller中方法的形参:   

    public  String login (String username,String password)   :

使用@RequestParam 绑定请求参数参数值:     

    public String login(RequestParam ("username") String name) :

用注解@RequestMapping接收参数的方法            

使用实体类   public String login(User user){}

使用request         public String login(HttpServletRequest request){String usernma=Request.getParameter("username");}

 

4.jsp的内置对象,及其作用?

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

5.查询所有学科成绩大于80分的学生姓名。

    sql1: select name from table  group by  name having  min(fenshu > 80);   -------推荐 

    sql2:select  name from table group by name having  name  not in (select  name  from  table  where fenshu <=80);  (也可使用 not exist)

    sql3:  select  distinct  from table where  name  not in (select  name  from  table  where fenshu <=80);   (也可使用 not exist)

6.面向对象的特征,并分别解释下

封装:封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别.

继承:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

多态:多态就是同一个行为具有多个不同表现形式或形态的能力(多态存在条件:继承、重写、父类引用指向子类对象)。

7.==和equals的区别?

==是一个比较运算符,基本数据类型比较的是值,引用类型则比较的是所指向的对象的地址是否相同。

equals()是一个方法,只能比较引用数据类型。默认比较的是所指向的对象的地址是否相同,如String等重写后比较的是所指向的对象的内容是否想等

8.书写一个单列模式

单列模式的书写公有8中方法,下面只列出推荐使用的几种:

1.饿汉式(线程安全,类加载时就初始化,可能会浪费内存)

public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

2.懒汉式(线程安全)---推荐

public class Singleton {
    private Singleton() {}
    private static class SingletonInstance {
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance() {
        return SingletonInstance.INSTANCE;
    }
}

 

 

9.如何查询出2个字段完全一样的表的所有数据

使用union或者union all

10.如何查询一个表中重复的数据

select NAME,scoure,SUBJECT  from student GROUP BY NAME,scoure,SUBJECT HAVING COUNT(1) >1    -----除了主键外其余相同的字段都要放到group by中

 11.书写一个jdbc连接代码?

package mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class Day01 {
//    public static void main(String[] args) {
//        try {
//            Class.forName("com.mysql.jdbc.Driver");
//            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/study?&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false","root","123456");
//            Statement statement = conn.createStatement();
//            statement.executeUpdate("insert  into test (id,name) values(2,'魏义己')");
//            System.out.println("执行完毕");
//            
//        } catch (Exception e) {
//            // TODO: handle exception
//        }
//    }
    
    public static void main(String[] args) {
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取连接
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/study?&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false","root","123456");
            //创建PreparedStatement
            PreparedStatement pStatement = conn.prepareStatement("insert  into test (id,name) values(?,?)");
            for(int i=3;i<10;i++) {
                pStatement.setInt(1, i);
                pStatement.setString(2, "测试"+i);
                pStatement.executeUpdate();
            }
            System.out.println("执行完毕");
            //关闭连接
            conn.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}
View Code

12.用位运算计算出(Int)x乘以8的结果和过程?

public static void main(String[] args) {

System.out.println(num(2));
}
public static int num(int a){

return a<<3;

} 

 

13.书写一个冒泡算法案例。

/*
 * 冒泡排序(从小到大排序)
 */
public class BubbleSort {
  public static void main(String[] args) {
    int[] arr={6,3,8,2,9,1};
    System.out.println("排序前数组为:");
    for(int num:arr){
      System.out.print(num+" ");
    }
    for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
      for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
        if(arr[j]>arr[j+1]){
          int temp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=temp;
        }
      }
    } 
    System.out.println();
    System.out.println("排序后的数组为:");
     for(int num:arr){
       System.out.print(num+" ");
     } 
  }
 }

14.java中如何交换2个字符串的值?

创建一个中间变量,然后直接交换即可

15.java中统计某个字符串中某个字符出现的次数。

方法一:使用replace方法将字符串替换为空,然后用原来总长度减去替换后的长度

public static void way2(String st,String M) {
        int count = (st.length()-st.replace(M, "").length())/M.length();
        System.out.println("指定字符串在原字符串中出现:"+count+"次");
    }

方法二:使用indexOf和subString方法,循环判断并截取

public static void way1(String st,String M) {
        int count = 0;
        while(st.indexOf(M)>=0) {
            st=st.substring(st.indexOf(M)+M.length());
            count++;
        }
        System.out.println("指定字符串在原字符串中出现:"+count+"次");
    }

 16.在JSP中<%!%>,<%%><%=%>三个标签有什么区别

<%!%> 表示声明一个变量

<%%>表示所执行的jsp语句块,也就是相应的java代码

<%=%>相当于<%out.println("字符串");%>,在网页中显示某一个变量或某一个表达式的值

 17.ArraryList和LinkList区别?

1.ArrayList是Array(动态数组)的数据结构,LinkList是Link(链表)的数据结构,此外,它们两个都是对List接口的实现。

2.用get方法访问时,ArraryList效率高,因为LinkList是链表结构,需要移动指针从前到后依次查找。

3.增加删除时LinkList效率更高,因为ArraryList是数组,删除时会对之后的数据下标造成影响,需要进行数据的移动。

 18.表空间与用户和数据文件关系?

  1. 一个表空间有多个数据文件,一个数据文件只能属于一个表空间。
  2. 一个数据库可以有多个表空间,每一个库都有一个system表空间。
  3. 一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用。
  4. 用户和表空间没有隶属关系,表空是一个用来管理数据存储逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。
  5. 用户在创建表的时候没有指定表空间,使用该用户的默认表空间(创建用户的时候需要指定)。

 19.jsp和Servert的区别?

 1.JSP是Servlet技术的扩展,本质上就是Servlet的简易方式,JSP编译后就是“类servlet”。

 2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

20.http中404、405、500分别是什么错误?

 404  访问路径不存在

500 系统出现重大问题

405  找不到处理请求的方法

21.jsp和freemarker以及thymleaf的区别?

参考链接:https://blog.csdn.net/ztchun/article/details/76407612

22.try和finally中都有return时返回值是否改变?

首先要确定的一点是,不管有木有出现异常,finally块中代码都会执行

执行try块,执行到return语句时,先执行return的语句,但是不返回到main 方法,接下来执行finally块,遇到finally块中的return语句,执行,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值

23.利用递归算法,计算6!

package com.xuanyin.udp;
/**
 * 递归算法案例
 * @author Administrator
 *
 */
public class DiGui {
    
    public static long fac(int i) {
        if(i == 1) {
            return 1;
        }else {
            
            return i*fac(i-1);
        }
    }
    
    public static void main(String[] args) {
        System.out.println(fac(6));
    }
}

 24.java参数传递方式?

 值传递:不会改变原来的

引用传递:会改变引用对象的值

推荐博客:https://www.cnblogs.com/sum-41/p/10799555.html

 25.jvm的内存机制介绍?

堆:存储所有new出来的对象(包括成员变量),堆是被所有线程共享的,如果java堆空间不足了,程序会抛出OutOfMemoryError异常。

栈:栈中包含着一个一个的栈帧,栈帧中存储着正在调用方法中的所有局部变量(包括参数),栈不是线程所共享的,每个线程对对应着一个java栈

  因此,递归调用方法容易出现StackOverflowError(内存溢出)

方法区:存储了每个类的信息(包括类的名称、方法信息[方法只有一份,通过this来区分具体的对象]、字段信息)、静态变量、常量以及.class字节码文件等,方法区是被线程所共享的

  方法区中包含着运行时常量池

本地方法栈:本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。

程序计数器:用来指示 执行哪条指令的,程序计数器是每个线程所私有的。

 26.基本类型的范围?

int 范围: -231 —— 231 -1

byte范围: -2—— 2-1

总结:-2n-1 ——2n-1 -1(n是位数,例如:int是4个字节,一个字节占8位,所以是32位)

27.位运算

3&1 结果是1

3 |1 结果是3

先转化成二进制,然后对应每一位进行&或|运算,最后将每位计算结果拼起来再转换成十进制

3 >> 2 结果是0 

3 <<2 结果是12   (结论:n << m 结果是: n * 2m

先将3转换成二进制11,>>是右移2位,变成0,<<是左移2位,变成1100 转换成十进制就是12 

 28.HashMap、LinkedHashMap、HashTable、TreeMap的区别?

1.Hashtable、HashMap、TreeMap都实现了Map接口,使用键值对的形式存储数据和操作数据。

2.Hashtable是java早期提供的,方法是同步的(加了synchronized,即是线程安全的)。key和value都不能是null值。

3,HashMap的方法不是同步的(即是线程不安全的),支持key和value为null的情况。行为上基本和Hashtable一致。由于Hashtable是同步的,性能开销比较大,一般不推荐使用Hashtable。通常会选择使用HashMap。

4.HashMap进行put和get操作,基本上可以达到常数时间的性能

5.TreeMap是基于红黑树的一种提供顺序访问的Map,和HashMap不同,它的get或put操作的时间复杂度是O(log(n))。具体的顺序由指定的Comparator来决定,或者根据键key的具体顺序来决定。

6.LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。

29.Lock与synchronize的区别?

Lock是一个接口,而synchronized是关键字。.

synchronized会自动释放锁,而Lock必须手动释放锁。

Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。

通过Lock可以知道线程有没有拿到锁,而synchronized不能。

Lock能提高多个线程读操作的效率。

synchronized能锁住类、方法和代码块,而Lock是块范围内的

30.Mysql如何查看正在执行sql的运行情况?

再mysql输入命令行show processlist查询即可

 31.java中常见的线程安全和不安全的类有那些?

线程安全的:Vector(向量类)、hashtable、String类、StringBuffer

线程不全的:HashMap、ArrayList、StringBuilder

 32.java中常见的线程池?

参考链接:https://www.cnblogs.com/zhujiabin/p/5404771.html

 33.spring中bean的作用域

singleton:IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

prototype: IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

request:该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

session:该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

global-session:该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

 34.常见的RuntimeExcetion有哪些?

 ArithmeticException:数学计算异常。

 NullPointerException:空指针异常。

ArrayOutOfBoundsException:数组索引越界异常。

ClassNotFoundException:类文件未找到异常。

ClassCastException:类型强制转换异常。

FileNotFoundException:文件未找到异常。

NumberFormatException:字符串转换为数字异常。

 35.为什么重写equals,就必须重写hashcode,什么情况下可以不重写hashcode?

(1)当所在类不使用HashSet、Hashtable、HashMap等散列集合进行存储的时候,可以不使用hashcode。

(2)当在HashSet、Hashtable、HashMap中使用该类时,hashcode和equals是有关系的,hashcode和equals需要同时重写才能保证元素的唯一性。hashcode是为了提高散列结构存储中查找的效率,在线性表中没有作用。

 36.synchronize和Lock锁的区别?

Lock是一个接口,而synchronized是关键字。

synchronized会自动释放锁,而Lock必须手动释放锁。

Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。

通过Lock可以知道线程有没有拿到锁,而synchronized不能。

Lock能提高多个线程读操作的效率。

synchronized能锁住类、方法和代码块,而Lock是块范围内的

 37.springboot如何在项目启动后添加输出语句?

1..实现 ApplicationRunnerImpl

2.实现CommandLineRunnerImpl 

 38.为什么HashMap是不安全得?

初始桶的数量为16,超过阈值后就会进行扩容操作(每次都变成原理的2倍),在扩容操时可能出现线程不安全。比如:

put的时候导致的多线程数据不一致。

HashMap的get操作可能因为resize而引起死循环

39.多线程同时操作HashMap是会出现什么情况?

会造成数据不一致得错误,如:A线程put时,B线程也调用了put,并且把值插入进去了,当A线程和B线程插入得key一样时,A插入成功后,会把B线程插入的值覆盖掉

40.Mysql数据量过大时,limit 100000,100 查询效率很低,该如何进行优化?

首先limit 100000,100查询的是前10W条之后的100条数据,limit 后边如果只有一个数字则是查询前多少条记录

优化方式:利用子查询优化,修改成 where id >=(select id from XXX limit 10000,1)

41.Mysql优化方案有哪些?

1.数据库方面优化:

  a.设计表时字段大小的定义,主外键的指定

  b.尽量把字段设置为NOT NULL

  c.适当的添加索引、视图、函数等

  d.选择正确的存储引擎

2.查询方式的优化:

  a.适当的采用分页查询和子查询

  b.查询所需字段即可,尽量避免查询所有字段

  c.sql的优化等

 42.已知π/2≈1+1/3+1/3*2/5+1/3*2/5*3/7…… 计算π的近似值,保留10位小数

  private static double fun2() {
        double he = 1;  //
        double a = 1;   // 每一项的值
        int b = 1;  //第几项
        while (a > 0.000000000001) {
            a = (b*1.0) / (b * 2 + 1) * a;
            he += a;
            b++;
        }
        BigDecimal adafa = new BigDecimal(he*2);
        he = adafa.setScale(10, BigDecimal.ROUND_HALF_UP).doubleValue();
        return he;
    }

 43.ArrayList的扩容机制是什么?

在第一个添加元素时,创建一个长度为10的数组,之后随着元素的增加,以1.5倍原数组的长度创建一个新数组,即10, 15, 22, 33,。。这样序列建立,将原来的元素拷贝到新数组之中,如果数组长度达到上限,则会以MAX_ARRAY_SIZE 或者 Integer.MAX_VALUE作为最大长度,而多余的元素就会被舍弃掉。

 

 

posted on 2019-03-20 12:54  蓝色恋人  阅读(350)  评论(0编辑  收藏  举报