1,重载(Overload)和重载(Override)的区别,重载的方法能否根据返回类型区分
重载:是编译时多态,方法名相同,参数列表不同(参数类型不同,个数不同,顺序不同),与方法的返回修饰符无关
重写:是运行时多态,发生在父子类中,方法名,参数列表必须相同.返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里式代换原则);如果父类的方法访问修饰符是private则子类中就不是重写
2,Collection和Collections有什么区别
java.uitil.collection是一个集合接口,它提供了对集合对象的基本操作的通用接口方法,Collection在java库中有许多具体的实现,Collection的意义是为各种具体的集合实现了统一操作方式
List和Set是直接继承了Collection
Collections是集合类的一个工具类/帮助类,其中提供了一系列方法,用于对集合进行排序,,搜索,以及线程安全等操作
3,HashMap 是使用了哪些方法来有效解决哈希冲突的:
链地址法来连接拥有相同hash值的数据
使用两次hash函数来降低哈希冲突的概率,使得数据发布更平均,
引入红黑树进一步降低遍历时间复杂度,使得遍历更快
4,Spring Boot 自动配置原理是什么
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核 心, @EnableAutoConfiguration 给容器导入 META-INF/spring.factories 里定义的自动配置类。
筛选有效的自动配置类。 每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能
快速创建独立运行的spring项目以及主流框架集成
使用嵌入式的Servlet容器,应用无需打成war包
starters自动依赖与版本控制
大量的自动配置,简化开发,也可修复默认值
无需配置XML,无代码生成,开发即用
准生产环境运行时的应用监控
与云计算的天然集成
5,spring boot 核 心 配 置 文 件 是 什 么 ? bootstrap.properties 和 application.properties 有何区 别
application和bootstrap是核心配置文件
一般来说bootstrap是由它的父类application优先加载,配置在应用程序上下文的引导阶段生效,一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它.booststrap里面的属性不会被覆盖
application由applicationContext加载,用于springboot项目的自动化配置
6,什么是CSRF攻击
CSRF代表跨站请求伪造,攻击者诱导受害者进入第三方网站,在第三方网站中向被攻击网站发送跨站请求
CSRF的攻击过程及原理
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
CSRF攻击实例
7,如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot 项目如何热部署
可以使用DEV工具来实现,通过这种关系,你将可以节省任何更改,嵌入式tomcat将重新启动,
SpringBoot有个开发工具(DevTools),有助于提高开发人员的生产力
JAVA开发人员面临的主要问题是,文件自动部署到服务器并自动重启服务器
开发人员可以重新加载springboot上的更改,而不需要重新启动服务器
这将消除手动部署的需求,Springboot在第一版是没有这个功能的,这是开发人员最需要的功能,DevTools完全满足了开发人员的需求,该模块将在生产环境中被禁用,它还提供了H2数据库的控制台以更好的测试应用程序
8,Spring中的Starter
starter不是新技术点,还是基于Spring原有的功能实现的,
首先它提供了一个配置类,一般叫XXXAutoConfiguration,在这个配置中,通过条件注解来决定这配置是否生效
它还会提供一系列默认配置,也可以根据开发者实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进去,新的注入属性会替代掉默认属性
正因为如此,很多第三方框架我们只需要引入依赖就可以直接使用,
开发者也能自定义Starter
9,什么是字节码?采用字节码的最大好处是什么
java源码经过虚拟机编译后产生的文件,它不面向任何处理器,只面向虚拟机
一定程度上解决了传统解释型语言执行效率低的问题,又保留了解释型语言可移植的特性
10,Java 和 C++的区别
都是面向对象语言,都支持继承,封装,多态
java不提供指针来直接访问内存,程序内存更加安全
java的类是单继承,C++支持多继承
虽然java的类不能多继承,但是接口可以多继承
java有自动内存管理机制,不需要程序员手动释放无用内存