菜🐔 字节跳动实习又被捞了,分享之前挂掉的面经

头条一面

介绍自己

挑一个项目重点介绍

SpringBoot的项目

  • 详细说一下你用的这用到的这几个技术,分别是怎么用的

  • 整个项目中你认为最有技术价值的点在哪

  • Spring的IOC和AOP知道吧,单实例无状态你怎么理解

  • SortAndPage Repository接口你是怎么用的

  • 分页和排序这两个功能,在Hibernate打印出来的SQL语句里是怎么样的?

  • SQL语句怎么执行的知道吗,底层原理是什么?

数据库

  • 通过SQL聊到数据库了

  • 你谈谈你对数据库的事务是怎么理解的

  • 四种隔离级别知道吗?

  • 悲观锁和乐观锁呢?悲观和乐观锁的具体实现原理呢?

  • 索引的种类知道吗?组合索引的最左匹配原则?

  • 索引的底层原理呢?

探讨题

  • 假设现在给你几千万条数据,存在外存里,你如何找到最大的前100条,综合考虑时间和空间复杂度

    我答的是 1.先联想到搜索选法的分块搜索,再想到排序的多路归并,所以可以先给数据分块, 每次取个1万两万条放进内存,然后对这一万条数据用多路归并,时间复杂度应该是nlogn, 然后取出这一万条的前一百条存进一个临时表或者干脆就放在内存里, 然后对剩下的数据采取同样的操作。 这样,就变成了100组 每组含100条有序数据的排序问题, 刚好符合多路归并的条件,再多路归并取前100就好了。 2.用哈希,也是联想到搜索有个哈希搜索,所以联想到桶排序。 只有计数排序和桶排序可以突破nlogn的上线, 之前的多路归并已经是效率最大值了,就是空间不是那么友好。 所以,依旧是分块放进内存,用精心选取的hash函数把, 数据映射到一个个桶里,对每个桶进行排序, 然后把不为空的桶合并(这里可以用桶排序递归或者其他算法), 但是这个算法的问题就是,空间开销太大,因为要维护一个映射表,还要新建一个临时数组。 3.其实多路归并,不断的二分直到长度为1, 时间复杂度和用堆排序差不多,但是堆排序更省空间, 只需要维护一个100节点的最小堆,然后取出新的数据来, 如果比最小堆的根大,就插入然后删除最小堆,堆顶结点。
#字节跳动##实习##Java工程师#
全部评论
楼主是什么岗呀
点赞 回复
分享
发布于 2019-05-15 08:03
最后探讨题的答案是楼主看其他博客总结的吗?我也想知道标准答案哈?
点赞 回复
分享
发布于 2019-06-21 20:46
联易融
校招火热招聘中
官网直投
分几十个文件,分别堆排序,最后再把这几十个堆综合起来排个序怎么样呢?
点赞 回复
分享
发布于 2019-06-21 21:27

相关推荐

2 50 评论
分享
牛客网
牛客企业服务