9.29京东面经
作者:互联网
电面复盘:
一、项目经验
(1)对于敏捷开发模式的看法
- 优点:软件版本迭代速度快,能更快让客户看到产品的雏形。开发人员对于开发进度有概念,便于项目管理。
- 缺点:对于task的用时预估很难完全准确,尤其是在不熟悉敏捷开发的团队中。另task的分割有可能导致重复性的工作,例如耦合性的两个模块由两个人开发。
(2) DevOps工具的使用
- backlog:待开发的功能。
- sprint:当前进行的开发周期,用user story 描述需求,以及验收方式
- taskBoard:管理 done、to do、doing 列表。使个人的开发进度团队可见,项目进度对开发人员透明。
二、专业基础
(1)浮点数在计算机内部的存储方式:
脑子突然卡壳没有说上来,概念太模糊了。后面面试官说我可能太紧张了,先换个问题。
总的来说,float型的浮点数由32位二进制存储:1位符号位+8位阶码+23位尾数;double型的浮点数由64位二进制组成:1位符号位+11阶码+52位尾数;
float的阶码偏移量是127,double是1023。在内存中从高地址向低地址存储。ps:这里又要考虑系统的大端序小端序。
原文:https://www.cnblogs.com/xuzhaoping/p/10994919.html
(3) 快排的思路
设置一个哨兵,遍历全部的元素,比哨兵小的放哨兵左边,比哨兵大的放哨兵右边。递归对哨兵两边的元素快速排序。
时间复杂度的计算:
最坏的情况下,每次取到的元素都是最大或最小的那个,算法退化到冒泡排序。最差的时间复杂度为:o(n*n);
平均时间复杂度:o(nlogn) ,计算过程如下:第一次划分得到的等式意思是,遍历了n个元素,并且还要分别遍历哨兵两边的元素。
原文地址:https://www.jianshu.com/p/93ce432262f0
这个时间复杂度的计算公式应该能推及任一个程序。
空间复杂度的计算:空间的占用主要考虑递归的深度,递归过程要用到的栈空间,可以利用二叉树来理解递归过程。最好和平均空间复杂度为logn,最坏情况是要进行n-1次调用,空间复杂度为n;
(4) 计算时间复杂度的意义
通过时间复杂度和空间复杂度来衡量一个算法需要的时间和空间资源,而时间和空间都是计算机的稀缺资源,我们以此来评估一个算法的复杂度。对算法的优化有助于计算机资源得到最大限度的利用率,也提高了用户体验。
(5) 说说对数据库索引的理解
索引分为主键索引、 复合索引等。 我们将经常进行查询的字段设为索引, 用B+树存储, 这样我们大部分的查询就可以直接查索引, 而不必遍历数据库中的数据,会大大提高查询效率。
(6) 为什么要用B+ 树存索引
B+树的根节点存的是叶子节点的指针,索引数据存在叶子节点, 我们只需要扫一遍叶子节点就能遍历所有的索引数据。
(7) 瞎问
成绩最好的几门课?
你认为的最重要的几门课?为什么?
作为女生,互联网的加班强度ok吗?
为什么想做偏后端的开发?
手里有什么公司的offer?
你怎么理解“ 拼搏 ”?
你的优势和劣势?
标签:遍历,递归,9.29,哨兵,索引,东面,空间,复杂度 来源: https://www.cnblogs.com/hdm926/p/11609999.html