笔记 · 2019年10月8日 0

Java面试题整理-java面试题整理

内容目录

title: Java面试题整理
date: 2019-10-08 21:34:59.585
updated: 2020-06-30 14:30:16.654
url: https://ritoom.me/archives/java面试题整理
categories:
tags:

  • java
  • study

Java基础知识

Servlet&Servlet Container

Servlet: java处理http请求的标准

Servlet Container: 支持Servlet运行的环境

Spring Boot项目启动乱码

解决方案:

java -Dfile.encoding=utf-8 -jar xxx.jar

Collection与Collections的区别

Collection是个集合接口,Collections是个包装类,包含了一些处理集合的工具方法,比如排序方法等。

String中的一些具体方法

equals()
charAt()
substring()
hashCode()
trim()
split()

Mybatis中$与#区别

都是将值传递给映射文件,$是将值传递给sql(order by ${id}),#是将字符串传递给sql。

{}的方式可以防止Sql注入。

后台怎么处理前端Json数据

@PathVariable 与 @RequestParam 注解,@PathVariable用于获取路径参数,@RequestParam用于获取查询参数。

段落引用如果我们请求的 url 是:/klasses/123456/teachers?type=web
那么我们服务获取到的数据就是:klassId=123456,type=web

123456是路径参数,type=web 是查询参数。

@RequestBody 会读取请求body部分,并且Content-Type为application/json格式的数据,将json格式化为对象。

后台二次校验参数

使用Hibernate Validator框架,在实体类属性中添加校验的注解(@NotNull,@Email…),并且在Controller中请求参数中使用@Valid去校验该实体类,如果验证失败则会抛出异常。

如何处理重复提交

前端处理

  1. 设置标志位,用户提交后修改标志位
  2. 将提交按钮设置为不可用,或关闭表单提交页面

后端处理

在提交表单中设置隐藏字段Token,请求发起时携带token,后端校验token是否发生改变。

数据库倒叙查询几条到几条的数据

倒序:order by desc/asc(使用asc就是正序)

限定查询范围:limit ?,?;

limit 第一个参数时从第几行开始查询,第二个参数是查询多少行(数量)

全局处理异常

自定义全局处理异常类添加@ControllerAdvice注解,标明这是全局处理异常类。在这个类中新建个方法使用@ExceptionHandler注解标注这是异常处理方法,方法参数为要处理的异常。

Mysql中char与varchar的区别

char是定长的,varchar不定长。还有nchar与nvarchar类型,带n表示存储的是Unicode字符,可以存储汉字。

编码

*形组成的倒三角型

{
    for(int i = 1;i<=5 ;i++) {
            for(int j = 5; j >= i ; j--)
                System.out.print("*");
            System.out.println();
        }
}

9*9乘法表

{
  for(int i = 1; i < 9; i++){
    for(int j = 1; j < i ; j++){
      System.out.print(j + "*" + i + "=" i * j + " ");
    }
    System.out.println()
  }
}

统计字符串中字符出现的字数

将字符串转换为字符数组,遍历数组添加到集合,再遍历集合,定义一个变量记录字符元素出现的次数,双重for循环判断每个集合元素是否有重复,最后输出。


public class CountStringsArrayList {
    public static void main(String[] args) {
        String string = "wermnxmnio34oi9xnmsdkfje";//这里可以是任意字符串
        ArrayList<Character> list = new ArrayList<>();
        char[] chars = string.toCharArray();//将字符串转化成字符数组
        for (int i = 0; i < chars.length; i++) {
            char aChar = chars[i];
            list.add(aChar);//将字符数组元素添加到集合中
        }
        System.out.println(list);//打印测试
        for (int i = 0; i < list.size(); i++) {//遍历集合取出每个字符
            int count = 0;//定义计数器
            Character character = list.get(i);
            for (int j = 0; j < chars.length; j++) {//遍历数组取出每个字符和集合中的元素比较
                char aChar = chars[j];
                if (character.equals(aChar)){//如果集合中的元素有等于数组中的字符,计数器加1
                    count++;
                }
            }
            System.out.println(character + "出现了" + count + "次");//打印结果
        }
    }
}
————————————————
版权声明:本文为CSDN博主「Rua~!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42401258/java/article/details/81775180

反射获取类的属性

Class<?> c = Class.forName(className);

数据库相关

有一个学生表,sql求出每门科目大于80分的学生。

select 学生.姓名 from 学生 group by 学生.姓名 having Min(学生.成绩)>80;

mysql优化

  1. Mysql索引
  2. Mysql集群、负载均衡、读写分离
  3. Mysql表与字段设计、存储引擎选择

原则:

  1. 尽可以选择小的数据类型和指定短的长度
  2. 尽可能使用 not null
  3. 单表字段不宜过多
  4. 存储引擎:MyISAM 和 Innodb(选择Innodb)