2021年3月七牛云暑期测开实习面经
下次要记得拿张纸来写。
我以为要电脑,没想到不用,就手机说一说就行。
算法题:
根据一个相对字符串, 得到绝对路径。
我写,就口头给他讲一讲。
while(不为回车){ char c = getchar(); if( c== '/'){ while( 读入后面的!= '/' 且不为回车){ 读入字符串 } 字符串入栈。 } 如果是‘。’ 那就不变 如果是‘。。’ {, if(栈非空) pop else 啥都不做,停在根目录 } }
1.ArrayList创建对象时,若未指定集合大小初始化大小为0;若已指定大小,集合大小为指定的大小;
2.当第一次调用add方法时,集合长度变为10和addAll内容之间的较大值;
3.之后再调用add方法,先将集合扩大1.5倍,如果仍然不够,新长度为传入集合大小;
链表的时间复杂度, 双向链表时间空间复杂度。
然后问hashmap实现
然后问hashmap实现
如果开放寻址之后, 删除一个,会怎么处理? 加tag么? tag怎么变?
如果用冲突了用链表, 链表很大的时候怎么办? 我说不知道
HashMap在JDK1.8及以后的版本中引入了红黑树结构,若桶中链表元素个数大于等于8时,链表转换成树结构;若桶中链表元素个数小于等于6时,树结构还原成链表。因为红黑树的平均查找长度是log(n),长度为8的时候,平均查找长度为3,如果继续使用链表,平均查找长度为8/2=4,这才有转换为树的必要。链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。
还有选择6和8,中间有个差值7可以有效防止链表和树频繁转换。假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。
topK问题, 一个很大的文本文件,无法进入内存, 怎么选择出现频率最多的。
我那时候应该问问,是一个文件,我以为是多个文件。
一种方法是读出到几百万个小文件中, 同时计数
这个我没有想出来。 他说大数据联机处理也可以
问我多态是怎么实现的,我说override 和overload 。
线程怎么实现的, 我说runnable ,他说还有呢? 我说task, cached pool, 他叫我停下, 估计知道我要背书了。
问我锁, synchronize 现在没有lock用的多, 为什么? 我不知道
我问你们做啥的? 他说效率工具, 打包自动化, sici, 持续集成持续发布, 质量管理, 业务线自动化golang脚本
问的好简单,就只问了我会的数据结构和java, 计网操作系统数据库sql都没问,