面试题准备day03

面试题03

1,get请求与post请求的区别

  1. get请求一般用于获取或查询资源信息,而post请求一般用于提交或更新资源信息。

  2. get请求把参数包含在URL中,而post请求通过request body传递参数。

  3. get请求的参数长度有限制,不同的浏览器和服务器有不同的限制,一般在2~8K之间;而post请求的参数长度没有限制。

  4. get请求的参数只能是ASCII字符,而post请求可以支持多种编码方式。

  5. get请求相对于post请求更不安全,因为参数会暴露在URL中,容易被拦截或篡改。

2,同步和异步的区别

  1. 同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。

  2. 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。

3,什么是阻塞与非阻塞

  1. 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

  2. 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

  3. 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

4,软件的生命周期

分为1.需求分析阶段 2.软件设计阶段 3.软件编码阶段 4.软件测试阶段 5.软件运行和维护阶段

5,String,StringBuffer和StringBuilder的区别

  1. String是一个只读字符串,底层是一个final的字符数组,一经定义,无法增删改,每次对String的操作都是生成新的String对象
  2. 字符串拼接操作(+):就是在堆上new了一个StringBuilder对象,再调用append方法,拼接字符串
  3. StringBuffer和StringBuilder底层都是可变字符数组,但是StringBuffer是线程安全的,而StringBuilder是线程不安全的

6,mybatis中$和#的区别

  1. mybatis&将传入的数据直接显示生成在SQL中,不会自动加引号,也不会进行JDBC类型转换,因此可能存在SQL注入的风险。

  2. mybatis#将传入的数据当成一个字符串,会自动加引号,并且会进行JDBC类型转换,因此可以防止SQL注入。

  3. 在JDBC能使用占位符的地方,最好优先使用mybatis#;在JDBC不支持使用占位符的地方,就只能使用mybatis&,例如动态指定表名或排序字段。

7,start方法和run方法的区别

  • start方法会创建一个新的线程,并让该线程执行run方法中的代码,同时主线程会继续执行下面的代码,实现了多线程的并发。
  • run方法只是一个普通的方法,如果直接调用run方法,就相当于在主线程中执行run方法中的代码,并没有创建新的线程,也没有实现并发。
  • start方法只能调用一次,否则会抛出IllegalThreadStateException异常;run方法可以多次调用。

8,http协议如何保证请求安全

  1. 选择拦截过滤器,拦截非法请求

  2. 数据加密,使用如md5等加密方式对传输的数据进行加密

  3. 签名:使用jwt进行验证

  4. 使用第三方框架与技术支持比如spring security和auth2框架

9,MySQL数据库连接方式

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接):与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
  • CROSS JOIN(交叉连接):获取两个表中所有可能的组合。
  • NATURAL JOIN(自然连接):根据两个表中相同的字段进行连接。

10,HashTable、HashMap、ConcurrentHashMap的区别

  • hashtable是线程安全的,但效率低,因为它在修改数据时会锁住整个表。它不允许键或值为null。它的初始容量是11,扩容时新容量等于旧容量的两倍加一。它使用链表来解决哈希冲突。
  • hashmap是线程不安全的,但效率高,因为它不加锁。它允许键或值为null。它的初始容量是16,扩容时新容量等于旧容量的两倍。它也使用链表来解决哈希冲突,但当链表长度超过8且数组容量超过64时,会将链表转换为红黑树来提高查询效率。
  • concurrenthashmap是线程安全的,且效率较高,因为它使用了分段锁的技术,只锁定部分数据而不是整个表。它不允许键或值为null。它的初始容量是16,扩容时只针对某个段进行扩容而不影响整个表。它也使用链表来解决哈希冲突,但在JDK1.8中也采用了红黑树的优化。
  • 哈希冲突:是指在使用哈希表存储数据时,两个或多个不同的键(Key)被哈希函数映射到同一个位置的情况。这种情况会导致数据的存储和查找变得复杂
  • 红黑树:基于二叉查找树实现,普通二叉查找树可能存在n个节点形成一条链的最坏情况,而红黑树就是在不影响树性质情况下使之平衡,即自平衡二叉查找树
    1. 左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。
    2. 右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值