面试官基本按照简历面,但是简历写的太差了,没有突出重点,自己的知识也没有完全cover简历,基础较差,面试效果不理想。
1、自我介绍
2、简历写了学过数据结构和算法
question1:笔试中递归题的时间复杂度你是怎么做的?
answer1:递归的时间复杂度一般都是2的n次方(胡说八道ing)
面试官纠正:在递归函数中,需要进行拆解,并不都是2的n次方,比如这道题就是O(n)
question2:你了解哪些数据结构?数组和链表有什么区别?
answer2:数组、链表、栈和队列、二叉树、字符串。数组在内存中是开辟一片连续的内存地址储存,而链表的内存地址不一定连续,链表依靠指针来指向下一个数据的内存地址,浪费了一定的内存。
question3:说一下链表和数组的各种操作的时间复杂度分析,和原理,以及使用场景。
answer3:数组,增删都是O(n)查改都是O(1);链表,查删改都是O(n),插入是O(1)。原理:数组是分配的连续的内存地址,链表有额外的空间存储下一个数据的指针。使用场景:链表用于需要遍历的场景,数组用于查询频繁的场景。(说完,面试官笑笑不说话)
PS:请忽略我的胡说八道。
补充:- 数组:
无序数组:查询修改O(1),插入O(1)(直接到最后),删除末尾元素O(1),删除任意一个元素O(n)。
有序数组:查询修改O(1),插入(基于二分查找)O(n+logn),删除末尾元素O(1),删除任意一个元素O(n)。
- 链表:
有序链表:查询O(n)、插入O(n)、删除O(n) 失去了链表插入快速的特性
无序链表:查询O(n)、插入O(1)(头插、尾插)、删除O(n)
原理:数组是分配的连续的内存地址,链表有额外的空间存储下一个数据的指针。
举个栗子:得到数组本身id,再加上数组的索引,由于数组每个元素的空间是固定的,所以元素的内存地址为:id+索引*每个元素的固定大小。即可实现O(1)的查询。
使用场景:
- 数组:数据较少、查询密集型业务
- 链表:插入删除密集型,对动态性要求高
3、简历写了熟悉redis、mysql数据库,了解linux基础,学过计算机网络
question4:你说你了解linux基础,你有没有linux开发经验,如何解决linux系统下多线程争夺内存问题。
answer4:有项目部署在linux上的经验。(试探性)查看内存占用情况,再分析问题解决问题?(面试官笑笑不说话)
question5:你说你了解mysql数据库,知道mysql怎么优化吗?
answer5:mysql靠索引优化(再次试探)?索引分为主键、外键、联合索引、唯一索引...
question6:你说你学过计算机网络,你学了哪些?
answer6:窝学过http、https、tcp、udp协议。
question6-2:那你能说一下tcp/ip协议的底层架构吗,在五层架构模型上。
answer6-2:卒....
补充:
4、简历写了学过算法
question7:你了解哪些排序算法?讲一下原理,分析一下时间复杂度。
answer7:慢一点的冒泡排序,快一点的快速排序。冒泡排序就是巴拉巴拉,快排就是巴拉巴拉,时间复杂度冒泡O(n²)快排O(nlogn)。
question8:写个快排吧,面试结束了
answer8:..........
估计是凉了,哎