前言
正文
1.Java中定义两个字符串,String str1 = “abc”; String str2 = “abc”; 分别写出用“==”和“equals”比较这两个字符串的结果;
答:“==”结果为true,“==”比较地址值,因为有常量池所以为true。equals结果为true,比较字符串值
2.简单解释java中异常的继承体系结构;并列出常见的5种运行时异常;
答:Thorwable是所有异常和错误的父类,有两个子类为Error和Exception,分别表示错误和异常。
常见异常有:
- ClassNotFountException
- IndexOutOfBoundsException
- NullPointException
- NumberFormatException
- ClassCastException
3. List list = new ArrayList();
Person p1 = new Person();
p1.setName(“zhouxingchi”);
Person p2 = new Person();
p2.setName(“liudehua”);
Person p3 = new Person();
p3.setName(“zhourunfa”);
list.add(p1);
list.add(p2);
list.add(p3);
请使用JAVA编写代码进行删除list中name为“liudehua”的Person对象;
Person p1 = new Person();
p1.setName(“zhouxingchi”);
Person p2 = new Person();
p2.setName(“liudehua”);
Person p3 = new Person();
p3.setName(“zhourunfa”);
list.add(p1);
list.add(p2);
list.add(p3);
请使用JAVA编写代码进行删除list中name为“liudehua”的Person对象;
1 | list.removeIf(person -> "liudehua".equals(person.getName())); |
4.@Data
public static class Book {
private String name;
private Integer price;
public Book(String name, int price) {
this.name = name;
this.price = price;
}
}
List bookList = Arrays.asList(new Book(“Java从入门到精通”, 55), new Book(“深入理解Java虚拟机”, 60), new Book(“Java从入门到精通”, 50), new Book(“深入理解Java虚拟机”, 65));
请使用JAVA Stream API 筛选出上述书籍价格最便宜的书籍列表;同名书籍需要排重;要求结果集合中只包含 new Book(“Java从入门到精通”, 50),new Book(“深入理解Java虚拟机”, 60)
请使用JAVA Stream API 筛选出上述书籍价格最便宜的书籍列表;同名书籍需要排重;要求结果集合中只包含 new Book(“Java从入门到精通”, 50),new Book(“深入理解Java虚拟机”, 60)
1 | ArrayList<Book> bookArrayList = new ArrayList<>(bookList); |
5.请写出cookie的作用; Cookie有哪几个重要属性? 简要描述下cookie过期和服务端Session超时有什么区别;
cookie可以记录一些用户信息,例如登录信息,用户下次访问时可以自动填充。或者记录用户登录后服务端生成的唯一密钥,方便辨别用户身份。属性有name、value、path、Max-Age。cookie过期是固定时间,比如设置了30分钟,从设置开始30分钟后cookie信息或者用户关闭浏览器就会自动销毁,而session过期时间设置了30分钟,当用户第29分钟访问了session信息,session就会重新变为30分钟后过期
6.什么是请求重定向? 请写出两种SpringMVC中实现重定向的方式;
重定向是将用户请求转到另一个地址,用户地址栏会发生变化。
第一种:
response.sendRedirect(“https://www.baidu.com”);
第二种:
return “redirect:https://www.baidu.com”;
7.简述java web中servlet的生命周期; JSP和servlet的联系和区别; Filter的实现机制;
生命周期:加载类、实例化、初始化、处理请求、销毁
JSP编译之后就是Servlet,是对servlet的一种封装,本质还是servlet。servlet生成页面时需要使用writer来输出html,而jsp是java和html组合成的后缀名为.jsp的文件,擅长页面展示,而servlet擅长控制逻辑
8.什么是浏览器的同源策略? 什么是跨域请求? 列举几种可以规避跨域限制的方式; 请简述其中某一种的实现原理;
同源策略是域名、协议、端口都相同。任意一个不同就属于跨域。
规避方式:
- JSONP
- 服务端设置Header
- proxy代理
proxy代理就是让代理服务器去请求目标地址,因为服务端请求没有跨域问题。
9.写出SpringMVC中@RestController、@Controller、@ResponseBody、@RequestBody、@RequestParam、@PathVariable这几个注解的作用和区别; 同时也介绍一下@Autowired、@Resource、@Qualifier这几个注解的作用和区别;
@RestController 和 @Controller 用于标注类是一个控制器,RestController不可以返回页面,return的都是具体内容。 而@Controller返回的是相应的页面。
@ResponseBody用于标注返回结果不解析为跳转的页面路径,@RequestBody用于将请求body中的数据转化为方法中的参数
@RequestParam标注获取的是请求参数,如?id=1。@PathVariable标注获取路径参数, 如/id=1
@Autowired和@Resource用于装配bean,Autowired按照类型自动注入,而Resource按照名称自动注入, 当有多个同样类型的Bean时,使用Autowired会出现错误,使用@Qualifier配合@Autowired可以按照名称注入
10.简单介绍一下Spring Boot 自动装配的原理以及如何关闭指定组件的自动装配功能;
在classpath中找到META-INF文件夹下的spring.factories文件,将里面EnableAutoConfiguration对应的配置项,用反射实例化为IOC的配置类,然后加载到IOC容器中。
通过@EnableAutoConfigureation或@SpringBootApplication的exclude属性来关闭自动装配功能
11.请介绍一下在Spring Boot中如何配置Web过滤器(Filter)以及Spring MVC的拦截器
实现Filter,通过@WebFilter注解以及启动类@ServletComponetScan注解配置Web过滤器
实现HandlerInterceptor,然后通过继承WebMvcConfiguration配置拦截器
12.Redis常用的数据结构有哪些,简述其特性;
String:字符串类型,使用二进制存储。
List:字符串列表,实际为一个链表,按插入顺序排序,元素可以重复。
Hash:相当于Java中的Map,键值对形式。
Set:无序的字符串列表。并且不可以重复。
ZSet:有序的字符串列表。 不可以重复。
13.持久化的机制有几种,都是怎么样触发的?
分为RDB和AOF两种,RDB是将数据写入dump.rdb文件中,重启时加载此文件恢复数据。AOF为将每一个执行的操作用文本方式记录,重启时将这些记录从头开始执行一遍。
14.Redis使用过程中遇到的性能瓶颈有哪些,是如何解决的?
运行时出现Red Timed Out错误,最后发现是使用了大量的keys操作,keys在大量并发情况下性能很差。对keys做了优化,尽量避免使用keys。
15.Linux如何查看启动指定端口7480的JAVA进程;
lsof -i:7480
ps -ef |grep 进程id
16.统计指定文件(nginx日志文件)中3月2号中午12点到13点访问量?(日志文件是标准的log4j输出日志,每行以时间开头,时间格式“yyyy-MM-dd HH:mm:ss”)
sed -n '/2019-03-02 12:00:00/,/2019-03-02 13:10:00/p' nginx.log
17.数据库
学生表STUDENT,内容如下
SNO(学号) | SNAME | SAGE |
---|---|---|
1 | 周杰伦 | 18 |
2 | 周润发 | 18 |
3 | 吴孟达 | 25 |
课程表:COURSE,内容如下
CNO(课程编号) | CNAME |
---|---|
001 | 数学 |
002 | 语文 |
003 | 英语 |
成绩:SC,内容如下
SNO(学号) | CNO(课程编号) | SCORE(成绩) |
---|---|---|
1 | 001 | 85 |
1 | 002 | 80 |
2 | 001 | 83 |
2 | 002 | 83 |
1.查询001 课程 比002课程 成绩高的所有学生的编号
1 | SELECT t1.SNO |
2.查询所有学生的学号,姓名,选课数,总成绩
1 | SELECT t1.SNO as 学号, t1.SNAME as 姓名, count(t3.CNO), sum(t2.SCORE) as 总成绩 as 选课数 |
3.查询没有学全所有课的学生的姓名,学号
1 | select t1.SNO,t1.SNAME from student t1 |