Java面试总结

本文探讨了HTTP和HTTPS的主要区别,包括安全性、数据加密等方面,并介绍了RESTful风格的资源定位和操作原则。此外,还涉及了HashMap扩容机制、MySQL索引优化、Redis常用数据结构、哈希冲突解决方法以及Java编程中的注解、对象排序、Dubbo服务调用、SpringCloud组件、会话管理(Cookie与Session)、死锁原理等核心概念和技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http和https的区别

HTTP和HTTPS的区别

restful风格

RESTful介绍和使用教程
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。容易实现缓存机制。
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同的方法对资源进行操作,分别对应添加、删除、修改、查询
传统方式操作资源:通过不同的参数来实现不同的效果,方法单一,post和get
使用RESTful操作资源:可以通过不同的请求方式来实现不同的效果,请求地址一样,但是功能可以不同

可变参数

可变参数也叫不定长参数,当我们不确定要接收的参数个数时,可以接收零个或多个实参,在方法内部,可变参数的使用方式,和数组完全一致,所以在声明方法时,可以将可变参数声明为数组。

为什么HashMap扩容的时候是两倍
Mysql优化
Mysql索引种类及作用
索引的基本原理
Redis有哪些数据结构
解决哈希冲突的方法
用过哪些注解
对象排序
Dubbo远程服务调用
Dubbo有哪些协议
Springcloud有哪些部分
Apollo信息更新后会发生什么
TreeMap
接口重复性消费
前后端联调互相传什么
cookie、session

会话:用户打开一个浏览器,点击了很多链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
一个网站,怎么证明你来过?

  1. 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了(cookie)
  2. 服务器登记你来过了,下次你来的时候我匹配你(session)

cookie(客户端技术,响应和请求)
从请求中拿到cookie信息,服务器响应给客户端cookie

session(服务器技术,我们可以把信息或者数据放在session中)
服务器会给每一个用户(浏览器)创建一个session对象
一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
用户登录之后,整个网站都可以登录(保存用户的信息;保存购物车的信息)

session和cookie的区别
cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
session把用户的数据写到用户独占的session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
session对象由服务创建

降级
链表反转
树的遍历
mybatis如何实现多表联查
Java多线程:死锁

死锁

死锁产生的必要条件:

  • 互斥条件
  • 不剥夺条件(只能是主动释放)
  • 请求和保持条件
  • 循环等待条件

死锁实例

public class DeadLock implements Runnable {

    public static void main(String[] args) {
        new Thread(new DeadLock(true), "t1").start();
        new Thread(new DeadLock(false), "t2").start();
    }

    private static Object obj1 = new Object();
    private static Object obj2 = new Object();

    private boolean flag;

    public DeadLock(boolean flag) {
        this.flag = flag;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "运行");

        if(flag) {
            synchronized (obj1) {
                System.out.println(Thread.currentThread().getName() + "已经锁住obj1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (obj2) {
                    System.out.println("一秒钟后," + Thread.currentThread().getName() + "锁住obj2");
                }
            }
        }else {
            synchronized (obj2) {
                System.out.println(Thread.currentThread().getName() + "已经锁住obj2");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (obj1) {
                    System.out.println("一秒钟后," + Thread.currentThread().getName() + "锁住obj1");
                }
            }
        }
    }
}
前后端交互–form表单

前后端交互–form表单

SpringBoot自动装配原理
sql执行计划
sql调优
mybatis分页处理

使用limit分页

select * from user limit startIndex,pageize;
select * from user limit 3; #[0,n]

使用RowBounds分页
分页插件

get和post的区别

请求或响应需要传输实体时才会有body,GET请求用于请求实体,而不是传输实体。Get请求没有传输实体的语义,自然也不需要body。
结论:HTTP 协议没有为 GET 请求的 body 赋予语义,也就是即不要求也不禁止 GET 请求带 body。大多数 HTTP 实现从技术上都支持 HTTP GET 请求带 body,少数实现会禁止(google-chrome 浏览器、node-fetch),少数实现会不建议(Fiddler)。
我们现在一般用chrom浏览器,如果get传参的时候使用@RequestBody可能出问题。

sql执行计划

执行计划就是sql的执行查询的顺序,以及如何使用索引查询,返回的结果集行数
执行计划是数据库执行SQL语句的具体步骤
MySQL查看方式: 在这里插入图片描述
EXPLAIN sql_statement;
type被称为连接类型或者访问类型,它显示了MySQL如何访问表中的数据。访问类型从好到差依次为:system->const->eq_ref->ref->fullext->…

SpringBoot自动装配原理

SpringBoot所有自动配置都是在启动的时候扫描并加载:springspring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!

  1. SpringBoot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值
  2. 将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置
  3. 以前我们需要自动配置的东西,现在springboot帮我们做了
  4. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
  5. 它会把所有需要导入的组件,以类名的方式返回 ,这些组件就会被添加到容器
  6. 容器中也会有非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景所需要的所有组件并自动配置
  7. 有了自动配置类,免去了我们手动编写配置文件的工作
自动配置

基于你引入的Jar包,对SpringBoot应用进行进行自动配置

SpringBoot启动流程简化版

  1. 创建IoC容器
  2. 加载源配置类
  3. 加载并处理所有的配置类
  4. 实例化所有的单例Bean
  5. 启动web服务器
Spring中bean的生命周期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值