今日头条 - 面试

一面:
01.自我介绍
02.详细介绍项目,说说购物车的实现,项目优化:如何选购物车中部分商品进行结算?一定要用DB存储购物车中数据吗?
03.HTTP中,说说GET、POST
04.说说Cookie和Session
05.说说垃圾回收机制,GC常用算法
06.设计模式,选一个说说
07.代码实现操作系统中LRU[最近最久未用]算法:使用set(Key,Value)写入,get(Key)读取;
   采用双向链表存储KEY,每次都从链表头插入,双向链表的好处是直接就能取到tail,即最久未用的元素。整体用一个HashMap存储Key-Value射射关系
   


二面
01.自我介绍
02.网络存储
03.JAVA内存机制:
内存管理主要包括内存分配和内存回收两个部分。但是C++这种直接操作内存的方式存在很大内存泄露风险,而且人为管理内存复杂且困难。
在java中,内存管理由JVM完全负责,java中的“垃圾回收器”负责自动回收无用对象占据的内存资源。
java中还存在垃圾回收器没法回收以某种“特殊方式”分配的内存的情况
java的垃圾回收是不能保证一定发生的,除非JVM面临内存耗尽的情况。所以java中部分对象内存还是需要程序猿手动进行释放,合理地对部分对象进行管理可以减少内存占用与资源消耗。


垃圾收集算法:
标记-清除算法(mark-sweep)、复制算法(copying)和标记-整理算法(mark-compact)。
标记-清除算法(mark-sweep):
先把要回收的对象标记,然后一起删除。但是标记和删除都会很慢,而且会产生不可用碎片。
复制算法(copying):
把内存按照容量分成两块,每次只用一块,但这块用完了,把活着的对象复制到另一块,把原来那一块空间全部回收。
标记-整理算法(mark-compact):
先把要回收的对象标记,然后让所有将存活的对象移动到内存的一端,然后清除端边界以外的内存。
04.TCP和UDP的区别:
05.TCP流量控制和拥塞控制:
07.MySql的数据引擎:MyISAM InnoDB
08.索引:联合索引,哪个可以创建索引查询
09.关系型数据库和非关系型数据库的区别:
10.代码实现:
一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。



你可能感兴趣的:(面经)