校招java实习生面试试题

说明:实习岗,杭州中大型互联网公司
时间:2021年3月
面试题多为Spring、SpringMVC、SpringBoot相关知识,Java基础问的较少!

1、基础知识

java编程语言有啥优点?JVM、JRE和JDK的关系

https://thinkwon.blog.csdn.net/article/details/104390612

用过哪些Object类的方法?比如== 和 equals 的区别是什么?如何理解hashCode 与 equals?
protected Object clone()//创建并返回此对象的一个副本。   
boolean equals(Object obj)//指示其他某个对象是否与此对象“相等”。   
String toString()//返回该对象的字符串表示。
int hashCode()//返回该对象的哈希码值。
void wait()//在其他线程调用此对象的 notify() 方法或 notifyAll() //方法前,导致当前线程等待。 
void notify()//唤醒在此对象监视器上等待的单个线程。   
void notifyAll()//唤醒在此对象监视器上等待的所有线程。
Class<> getClass()//返回此 Object 的运行时类。  

==与equals

Java有那些基本数据类型?基本数据类型存储在jvm的什么区域?String是不是基本数据类型,他们有何区别?

https://blog.csdn.net/welcome_zhang/article/details/84809443

写一个方法,实现字符串的反转?能想到有几种方法?

https://blog.csdn.net/EuniBoom/article/details/80136800

java常用数据结构有哪些?各有什么特点?(list、map、set)

https://blog.csdn.net/qq_29631809/article/details/72599708

hashmap的实现原理、hash冲突如何解决HashMap和Hashtable的区别

https://blog.csdn.net/jjc120074203/article/details/78579931

Hashmap和CurrentHashMap的区别

https://blog.csdn.net/yy1098029419/article/details/79672753

Overload(重载)和Override(重写)的区别

https://blog.csdn.net/qunqunstyle99/article/details/81007712

abstract class和interface有什么区别

https://blog.csdn.net/csdn_aiyang/article/details/71171886

java 中 IO 流分为几种?
java常用设计模式你知道几种?

https://blog.csdn.net/yubujian_l/article/details/81455524

java8中的新特性了解么?

https://blog.csdn.net/yczz/article/details/50896975

jvm内存结构?

https://blog.csdn.net/welcome_zhang/article/details/88138040

线程的创建方法有哪些?

https://blog.csdn.net/scgaliguodong123_/article/details/46013283

线程的生命周期

https://blog.csdn.net/qq_41405257/article/details/80587478

--------------------------------------------------------------------------------------------------

2、MySql

2.1 mysql使用left join时,右表数据有重复数据的处理

当使用mySQL中的LEFT JOIN时,在右表中存在多条记录,即一对多的情况时,给如何处理?
https://blog.csdn.net/weixin_33894640/article/details/92413068
案例

---------------------------------------------------------------------------------------------------

3、框架知识

2.1 Spring

Spring的ioc、di是什么意思

https://blog.csdn.net/llussize/article/details/79400234

Spring的AOP实现原理

转载链接

Spring 将bean注入容器4种方式
  • 包扫描+组件标注注解(比如:@controller、@service注解等)
  • @Bean 导入第三方包里面的组件
  • @import 快速给容器注入一个组件
  • 使用Spring提供的工厂Bean


2.2、 SpringMVC

SpringMVC的整个处理机制

https://blog.csdn.net/Andy_ayu/article/details/79528208

Java过滤器与SpringMVC拦截器之间的关系与区别链接


2.3、 SpringBoot

SpringBoot自动配置核心注解@SpringBootApplication组成

@SpringBootApplication该注解是SpringBoot项目的核心注解,该注解包含:

  • @SpringBootConfiguration :注解就有了自动配置功能 、扫描包功能。
  • @EnableAutoConfiguration : 让SpringBoot根据类路径中的jar包依赖为当前项目进行自动配置。例如,添加spring-boot-starter-web依赖,会自动添加tomcat和SpringMVC的依赖,SpringBoot 会对Tomcat和SpringMVC进行自动配置
  • @ComponentScan :会自动扫描@SpringBootApplication所在类的同级包以及子包的Bean。
SpringBoot自动配置原理

我觉得我们可以从以下几个方面回答:

  1. 什么是 SpringBoot 自动装配?
  2. SpringBoot 是如何实现自动装配的?如何实现按需加载?
  3. 如何实现一个 Starter?(一般不用说)

答:(1)SpringBoot 自动装配就是通过少量注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。
(2)@EnableAutoConfiguration是实现自动装配的核心注解。
自动装配的过程如下:

-@SpringBootApplication是复合注解,包含@EnableAutoConfiguration

  • @EnableAutoConfiguration会导入AutoConfigurationImportSelector这个类,这个类会利用SpringFactoriesLoader组件加载jar包里面META-INF/spring.factories配置文件里面填写的配置类,将这些配置类过滤一波后,返回全类名。
  • 通过@Conditional按需加载所需要的配置类
    大概逻辑如图所示:
    在这里插入图片描述

(3)如何实现一个 Starter
光说不练假把式,现在就来撸一个 starter,实现自定义线程池
第一步,创建threadpool-spring-boot-starter工程
第二步,引入 Spring Boot 相关依赖
在这里插入图片描述
第三步,创建ThreadPoolAutoConfiguration
在这里插入图片描述
第四步,在threadpool-spring-boot-starter工程的 resources 包下创建META-INF/spring.factories文件
在这里插入图片描述
最后新建工程引入threadpool-spring-boot-starter



2.4、 mybatis

为什么用mybatis而不是jdbc?或者问两者区别
  1. 从层次上看,JDBC是较底层的持久层操作方式,而MyBatis都是在JDBC的基础上进行了封装,使其更加方便程序员对持久层的操作。

  2. 从功能上看,JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历操作来获取数据。 MyBatis是将sql语句中的输入参数和输出参数映射为java对象,放弃了对数据表的完整性控制,但是获得了更灵活和响应性能更快的优势。

  3. 从使用上看,如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式; 如果要灵活使用sql语句的话建议采用MyBatis框架。

mybatis是如何做到防止sql注入的

在这里插入图片描述

mybatis的缓存

答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有。二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值