个人java项目面试题整理

以下是个人项目中用到的技术点和大家讨论一下,还望和大家一起相互学习

  1. 垃圾回收算法 首先一个对象是否被回收的话要看这个内存对象是否有被GCROOT对象引用。 标记-清除算法:对堆内存里面GCROOT对象无法达到的进行标记,然后清除。CMS垃圾收集器就是用了这个算法。 标记-整理算法:对堆内存里面GCROOT对象无法达到的进行标记,把存活的对象放在内存的一端,对另一端进行清理。serial old收集器和parallel old收集器就是这个算法。 复制算法:标记过程是一样的。但是它把内存块分成两部分,每次使用其中一部分,整理的时候把存活的对象全部拷贝到另一块内存上,原来那块内存全部清理。 分代算法:对上面三种算法进行整合,分开年轻代和老年代两块分别进行垃圾回收,年轻代采用复制算法,老年代因为没有额外的空间来进行复制,必须采用标记清除或者标记整理算法。
  2. 垂直分表的必要性 垂直分表的概念:把一个表的部分列拆分到新的表中。 垂直分表的好处: 从业务层面:不同业务的列可以放在不同的表里面,便于修改和扩展。 从技术层面: ① 数据库存储单位是一页,一页是16K,当你把列拆开了,每行的数据就变少了,从而每页储存的行数就会增加,对于一些查询来说,不垂直分表可能需要读第一页和第三页的数据,这会导致两次IO,但是垂直分表了之后这些数据落在同一页里面就只有一次IO。 ② 列比较少的话这行数据被改的概率页变小,更容易命中缓存。 ③ 易变数据落在储存页的数量减少,减少了脏页的数量。
  3. 跨域问题的原因和具体解决过程 跨域问题
经验分享 程序员 微信小程序 职场和发展