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需求。