shopee面试总结

1.面试时这么一个问题:当对象在内存分配时,大对象直接进入老年代,那么jvm怎么知道哪些是大对象呢

   配置 -XX PretenueSizeThreshold参数 大于该参数的对象就会进入老年代

  PretenureSizeThreshold参数只对Serial和ParNew两款收集器有效,所以同时需要配置垃圾收集器

  配置垃圾收集器: -XX:+UseSerialGC

 配置过程:在idea中的editConfiguration中配置vmOptions

   添加 -XX PretenueSizeThreshold XXX

          -XX:+UseSerialGC         

2.数组和链表的应用场景

  数组适合大小固定的、经常随机访问的,数据量小的

  链表适合大小不固定的、经常删除和修改的

3.socket的bind和listen的区别

4.新生代转移到老年代地址会怎样

如果使用句柄访问的话,那么 Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体信息。

使用句柄来访问的最大好处就是 reference 中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。

Yong GC 类算法流程:

首先从 GC Roots 和 Old -> Young 的 Card Table(即存储了老年代对象与新生代对象之间的引用关系)出发,扫描追踪整个新生代的对象关系图。注意,在扫描过程中如果碰到指向老年代对象的引用,则停止这一路径的扫描。同时每扫描到一个对象,如果它是第一次被标记的话,我们就会将其拷贝到 survivor 区,或者晋升到老年代,并且在原对象位置的 mark word 域填上它的新地址 forwarding pointer。这样,如果原对象同时被两个以上的 reference 指向,那么在追踪过程中,别的 reference 还是有机会碰到此对象的原位置,然后发现它已经被标记过了,所以只需要通过 mark word 域的 forwarding pointer 更新 reference 值即可。

使用这类算法的有 Serial Young GC(即DefNew)、Parallel Young GC、ParNew,以及 G1 GC 的 Young GC & Mixed GC。

只需要一次遍历就可以完成对对象的拷贝和 reference 的更新。

Full GC 类算法流程:

有4个主要步骤:

1 标记:

  • 直接从 GC Roots 出发,扫面一遍整个堆(有时可以加上 metaspace),找到所有活的对象。

2 计算新地址:

  • 既然已知所有活的对象,那么就能够准确计算出它们在 compaction 后的新地址,然后将计算好的新地址保存到 mark word 域中。

3 更新 reference:

  • 更新所有活对像中指向其他对象的 reference 的值,让它们指向步骤 2 中计算好的新地址(从 mark word中读取)。

4 复制对象到新地址:

  • 将对象复制到步骤 2 计算的新地址。

使用这类算法的有 Serial Old GC、PS MarkSweep GC、Parallel Old GC、Full GC for CMS 和 Full GC for G1 GC。

参考:

内存地址会改变
5.软件的生命周期

瀑布模型:可行性分析、需求分析、软件设计、编码、软件测试、运行维护

特点:本阶段完成后才能进行下一阶段的工作。

V模型:可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试

  •                         预验收测试
    可行性分析     -- --->         验收测试
          ↘               预系统测试              ↗
       需求分析       ----->     系统测试
             ↘             预集成测试          ↗
        概要设计        ---->   集成测试
              ↘          预单元测试       ↗
         详细设计  ----->  单元测试
                   ↘                            ↗
                              编码

6.智力题 扔玻璃:

 

7.postman可以做什么:

8.数据库死锁:

9.各种排序算法的最好最坏的时间复杂度:
选择排序 最好和最坏都是O(n2)
快速排序 最好O(NlogN) 最坏O(n2)
归并排序 最好和最坏都是O(NlogN)

冒泡排序 最好O(N)最坏O(N2)

堆排  最好和最坏都是O(NlogN)

你可能感兴趣的:(shopee面试总结)