JAVA面试经验

1.自我介绍

2.在项目中担任一个什么样的角色

3.觉得项目比较拿出来适合说的一个点

答:使用redis替换单一商品,实现购物车功能

4.读过什么源码吗?介绍一下

答:arraylist和linkedlist的区别,hashmap的实现原理

arraylist是动态数组 查找方便定位快,但是插入和删除麻烦

linkedlist是双向链表,查找麻烦,插入和删除非常快

arraylist可以实现动态扩容,默认初始容量为10。如果当前元素个数已经达到了容量上限,ArrayList就会触发扩容操作。

扩容操作的过程是:创建一个新的数组,通常是原数组容量的1.5倍(具体增长策略可以在不同的JDK版本中有所不同),然后将原数组中的元素复制到新数组中。

hashmap的实现原理

HashMap使用键的hashCode来计算存储位置(索引)。通过哈希函数,将键映射到哈希表的具体位置。

HashMap内部使用一个数组(称为哈希桶或者哈希表)来存储元素。这个数组的每个元素又是一个链表或者红黑树的头节点

由于不同的键可能具有相同的哈希值,即发生哈希碰撞。HashMap使用链地址法(即拉链法)来解决冲突,即在哈希表的每个位置上存储一个链表或者红黑树,用于存储具有相同哈希值的键值对。

插入键值对

  • 计算键的哈希值。
  • 根据哈希值确定存储位置。
  • 如果该位置为空,则直接插入。
  • 如果该位置已经有元素,则将新元素插入到链表或者红黑树的末尾(或者树中进行适当的插入操作)。
  • 当HashMap中的元素个数达到负载因子与当前容量的乘积时,HashMap会进行扩容操作。

5.那你说到arraylist有一个扩容机制,如果我数据量比较大的情况下,是如何实现的?

答:不清楚

System.arraycopy():在将原数组中的元素复制到新数组时,ArrayList通常会使用System.arraycopy()方法来实现高效的数组复制操作,以提高性能。

6.你知道什么是goc吗?

答:不知道

7.学过java几年

答:一两年,研究生主要用python

8.那你知道python的装饰器吗?

答:不知道

装饰器模式是一种结构型设计模式,它允许在不改变对象接口的情况下动态地将责任附加到对象上。装饰器模式通过将对象包装在装饰器类的实例中来实现这一点,每个装饰器类都扮演了一个包装器的角色,可以添加新的行为或修改原始对象的行为。

9.为什么sql语句占位符不用$使用#?

防止sql注入#{}语法是MyBatis或类似Java持久层框架中用于安全、类型安全和预编译处理的参数占位符。这种方式能有效保护应用免受SQL注入攻击,并且能够方便地处理动态SQL需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值