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去校验该实体类,如果验证失败则会抛出异常。
如何处理重复提交
前端处理
- 设置标志位,用户提交后修改标志位
- 将提交按钮设置为不可用,或关闭表单提交页面
后端处理
在提交表单中设置隐藏字段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优化
- Mysql索引
- Mysql集群、负载均衡、读写分离
- Mysql表与字段设计、存储引擎选择
原则:
- 尽可以选择小的数据类型和指定短的长度
- 尽可能使用 not null
- 单表字段不宜过多
- 存储引擎:MyISAM 和 Innodb(选择Innodb)