商汤科技Java一面(2021.12.8)

Posted Panda_Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了商汤科技Java一面(2021.12.8)相关的知识,希望对你有一定的参考价值。

1. 总体感觉

百分之90以上都来自于八股文,没有手撕算法。
感觉面试的Java岗位的都有套路,含Java基础,多线程,Spring, Mybatis, JVM。

2. Java基础

  1. Java中的多态理解
  2. protected 和 缺失修饰的区别
protected :只能是本类和子类可以访问
不加任何修饰的关键字:本类和同一个包下的类都可以访问
  1. Hashmap 中为什么是线程非安全的?链接: link.
    在hashmap做put操作的时候会调用到以上的方法。现在假如A线程和B线程同时对同一个数组位置调用addEntry,两个线程会同时得到现在的头结点,然后A写入新的头结点之后,B也写入新的头结点,那B的写入操作就会覆盖A的写入操作造成A的写入操作丢失.
  2. 如何设计一个哈希函数?
  3. 在hashMap中put一个键值对,经历了哪些流程?链接: link.
1 判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容;
2 根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新
建节点添加,转向⑥,如果table[i]不为空,转向③;
3 判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,
这里的相同指的是hashCode以及equals;
4 判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则
直接在树中插入键值对,否则转向55 遍历table[i],判断链表长度是否大于8,大于8且数组长度大于等于64的话把链表
转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作;遍历过程中若
发现key已经存在直接覆盖value即可;
6 插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,
如果超过,进行扩容。

3.mysql

  1. 解释一下什么原子性
  2. 原子性和事务有什么区别
  3. Java中执行i++ 是不是原子操作? 为什么?(不是,1读内存到寄存器,2在寄存器自增,3写回内存)

4. 多线程

  1. synchornized使用场景: A类有一个方法f, (其中方法f 被synchornized修饰),方法f被 A类的两个实例对象a1 和a2分别调用,会怎么样?
  2. synchornized 锁升级是什么样的?链接: 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁.
  3. 两个线程依次轮流按需打印100 多少种方法实现?
  4. 线程池参数有哪些?

5. Spring

  1. 前置处理器、@autowired 、后置处理器的执行流程链接: link.
  2. bean的生命周期(实例化、初始化、使用、销毁)
  3. @autowired 和 @resource 区别
  4. @autowired 放在属性上和放在方法上有什么区别链接: link.

6. JVM

  1. 类加载的执行流程
  2. 双亲委派机制
  3. 垃圾回收算法
  4. GC root 存在哪些地方

7. Mybatis

1. #与"$"区别?哪个效率高?为什么 # 具有安全性有时还会选择$?

以上是关于商汤科技Java一面(2021.12.8)的主要内容,如果未能解决你的问题,请参考以下文章

最真实的2021Android面经(无广告版)

商汤科技2面复盘

冲刺上市,商汤科技能否撑起近千亿市值?

商汤科技AI“内卷”破局术:独角兽需学会先赚钱

AI独角兽商汤科技的内部服务容器化历程

商汤科技面试——深度学习