2021年2月8日 抖音直播后端开发实习面经


title: 2021年2月8日 抖音直播后端开发实习面经
tags: 面经


2021年2月8日 抖音直播后端开发实习面经

2021-2-8 抖音直播后端开发实习面经
岗位:后端开发实习岗
自我介绍~~
项目这一块有要讲的吗?(这一块很重要,这是面试官想要去通过你的项目去开始话题,这个时候我觉得要学会对自己的项目做到融会贯通,要非常熟练地知道自己的项目利用了哪些技术啥的,顺便把面试官开始的话题转移至自己熟悉的东西上来,这里我自己就犯了一个大忌。如果这一块你讲得非常浅的话,那接下来就会像我一样把计算机基础往死里问,甚至有些名词还没听过。。。。。)
  
  你知道字典树吗?(这个我答的也是不知道,哭辽~~)
  能说一下深度优先搜索和广度优先搜索的区别吗?
  深度优先搜索和广度优先搜索实现一定需要用递归吗?不用递归,能不能做到对一棵树的深度遍历啊?
  来,说一下搜索二叉树的时间复杂度吧?(这个地方要清楚平均时间复杂度,最好的时间复杂度以及最坏的时间复杂度)。为了解决这种最坏的时间复杂度是如何解决的呢?
  红黑树和平衡二叉树有什么区别?
  那讲一下红黑树是怎么左旋和右旋的?
  红黑树中一个结点中存储了哪些数据呢?
  解决hash冲突的方式有哪些?
  你知道有哪些hash函数吗?
  影响hash查找的性能的因素有哪些?
  你知道虚拟内存吗?虚拟内存的缺点有什么呢?
  32位的物理机能申请多少内存呢?那64位呢?
  对缓存有了解吗?(如果不了解,就直接说不太了解,后面反问的时候面试官也跟我讲,如果遇到不会的,不要硬答,这样不太好。)
  页置换算法有哪些呢?操作系统用的哪一种页面置换算法?
  LRU是如何实现的呢?LRU在数据结构上是如何实现的呢?有没有更好的、高效的实现方式呢?(这个地方是根据上面回答的继续问的~~)
  对http了解吗?格式是什么啊?http的具体组成?
  那你了解http1.0, http2.0, http3.0之间的区别吗?以及http1.0和http1.1的区别吗?
  http和https有什么区别?
  https需要几次握手啊?它需要几个TTL呢,即就是有几个来回呢?在真正传输数据之前需要几次握手才能真正地开始通信呢?
  对DNS有了解吗?具体过程是什么样子的?
  数据库有了解过吗?有几个引擎啊?以及他们的区别呢?
  mysql中的索引有哪些?hash索引是什么时候使用呢?hash索引一般是用于什么的场景呢?hash索引在硬盘上建立了索引了吗?hash索引的key是什么?
  mysql有哪些锁呢?(我直接回答不是很了解~~)
  开始写代码吧 
  最后,反问环节! 

上网搜的答案:https://blog.csdn.net/weixin_34220179/article/details/93466587

 问题描述:

 * 给定一个整数数组a,长度为N,元素取值范围为[1,N]* 统计各个元素出现的次数,要求时间复杂度为O(N),空间复杂度为O(1)* 可以改变原来数组结构。

 思路:

 * 从第一个元素开始遍历,每遍历到一个元素,将(该元素值 - 1 记为index)作为一个下标值,令该下标对应的元素值为元素 index+1出现的次数。

 * 若下标index为负值,说明该元素已经处理过,跳过;

 * 判断,若a[index]为正,则赋初值-1;若为负,则执行减1操作。

 * 最后,数组中存储的元素即为统计次数,而该元素对应的下标+1即为元素值。


public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n = 6;
        int[] a = new int[]{6,2,4,1,2,5};
        int i = 0;
        
        //采用while循环
        while(i < n){
            //由于元素取值范围为[1,N],因此,可以将(当前元素值-1)作为下标值,找到相应位置处的元素,将其存储的值作为-times,因为原来存储值都为正值,为防止混淆,用负值存储
            int temp = a[i] - 1; 
            if(temp < 0){ //表示该元素已经处理过了,跳过
                i++;
                continue;
            } else if(a[temp] > 0){//第一次处理一个值
                a[i] = a[temp];//暂存新元素
                a[temp] = -1;
            } else {//已经不是第一次处理该值了
                
                a[i] = 0; //没有新的元素要处理,置0
                a[temp]--; 
            }
        }
        
        for(int j = 0; j < n; ++j){
            System.out.print(j+1 + " , " + -a[j] + "\t");
        }
    }

总结:

对于实习面试,如果自己不知道的就直接跟面试官说不是很了了解,不是很强行地去回答,因为这样会给人一种不太好的感觉,在面试反问环节对我说的这一番话。同时,我也发现了一个技巧,就是如果面试官问你一道题你不太会,我觉得这个时候你可以跟面试官说这题我不是很了解,但是我知道跟它一些相关的东西,而这个时候面试官一般是很难拒绝你这个请求的,这样一来不仅缓解了尴尬,也让面试官对你的好感增强。就比如说,面试官说你讲讲http1.0,2.0以及3.0之间的区别时,这个时候如果不会,可以说面试官这个目前不太了解,但是我知道http1.0和http1.1区别,我可以跟你讲讲,我觉得这是一种很好的方式。面试过程中,我就被面试官说了两次,如果你不会你就不要硬讲,瞎猜。其实面试官人挺好的,他也想让我过,奈何我太不争气了,又加上算法题没写对,所以就自然而然地凉了。



**查缺补漏:

1.1 字典树

字典数又称单词查找树,Trie树,是一种树形结构],是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

它有三个性质:

①根节点不包含字符,除根节点外每一个节点都只包含一个字符;

②从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;

③每个节点的所有子节点包含的字符都不相同。

可以参考一下:

Trie树(字典树)的介绍及Java实现

数据结构与算法之字典树

1.2 深度优先搜索和广度优先搜索的区别吗?

深度优先搜索和广度优先搜索的深入讨论

java实现-深度优先搜索

漫画:深度优先遍历 和 广度优先遍历

深度优先搜索法有递归以及非递归两种设计方法。一般的,当搜索深度较小、问题递归方式比较明显时,用递归方法设计好,它可以使得程序结构更简捷易懂当搜索深度较大时,当数据量较大时,由于系统堆栈容量的限制,递归容易产生溢出,用非递归方法设计比较好。

二叉树的前序、中序、后序遍历,本质上可以认为是深度优先遍历(DFS)。

二叉树的层序遍历,本质上可以认为是广度优先遍历(BFS)。

实现深度优先遍历的关键在意回溯。自后向前追溯曾经访问过的路径,就叫做回溯。要想实现回溯,可以利用栈的先入后出特性,也可以采用递归的方式(因为递归本身就是基于方法调用栈来实现)。

实现广度优先遍历的关键在于重放。其实,回溯与重放是完全相反的过程。把遍历过的顶点按照之前的遍历顺序重新回顾,就叫做重放。同样的,要实现重放也需要额外的存储空间,可以利用队列的先入先出特性来实现。

1.3 搜索二叉树的时间复杂度

参考博客:

二叉排序树的搜索、插入、删除,时间复杂度

二叉树的详解与实现

1.4 红黑树和平衡二叉树有什么区别

参考博客:

【数据结构】红黑树与平衡二叉树的区别以及原理详解(附图解)

面试中红黑树常考问题

1.5 解决hash冲突的方式

1.6 哈希函数的有哪些?

1.7 影响hash查找的性能有哪些?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WD8epHs7-1616259159159)(/Users/cdf/Library/Application Support/typora-user-images/image-20210215161851490.png)]

1.8 虚拟内存

参考博客:什么是虚拟内存(Virtual Memory)?

虚拟内存是计算机系统内存管理的一种技术,我们可以手动设置自己电脑的虚拟内存。不要单纯认为虚拟内存只是“使用硬盘空间来扩展内存“的技术。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬盘空间

虚拟内存的优缺点有哪些呢?

①**优点:**可以弥补物理内存大小的不足;一定程度的提高反映速度;减少对物理内存的读取从而保护内存延长内存使用寿命;

②缺点: 占用一定的物理硬盘空间;加大了对硬盘的读写;设置不得当会影响整机稳定性与速度。

1.9 32位的虚拟机能申请多少内存呢?那64位呢?

2.0 缓存的介绍

面试官:谈谈你是怎么理解缓存的?

面试【常见的缓存技术?缓存应用的场景?】

2.1 页面置换算法有哪些实现呢?操作系统主要应用的是哪一种页面置换算法?

2.2 LRU是如何实现的呢?LRU在数据结构上是如何实现的呢?有没有更好的、高效的实现方式呢?

参考博客:

LRU算法原理及其实现

数据结构与算法 | 如何实现LRU缓存淘汰算法

如何实现LRU算法?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oIj8gkan-1616259159250)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227110456385.png)]

2.3 对http了解吗?格式是什么啊?http的具体组成?

2.4 那你了解http1.0, http2.0, http3.0之间的区别吗?以及http1.0和http1.1的区别吗?

http1 http2 http 3 区别

一文读懂 HTTP/1HTTP/2HTTP/3(详见此文)

同样也可以去参考:《小林coding的图解网络》

这部分内容来自:面试题大全(cxuan程序员)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baAXRqGR-1616259159301)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227171011389.png)]

这部分的内容来自微信公众号:一文读懂 HTTP1/HTTP/2HTTP/3(详见此文)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-snajqBGJ-1616259159336)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227170124254.png)]

http1.0和http1.1的区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivoxssrV-1616259159345)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227171153571.png)]

2.5 http和https有什么区别呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4dvhTgAG-1616259159348)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227171326938.png)]

2.6 https需要几次握手啊?它需要几个TTL呢,即就是有几个来回呢?在真正传输数据之前需要几次握手才能真正地开始通信呢?

为什么 HTTPS 需要 7 次握手以及 9 倍时延

2.7 对DNS有了解吗?具体过程是什么样子的?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-neuKWmj6-1616259159370)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227195253997.png)]

2.8 数据库有了解过吗?有几个引擎啊?以及他们的区别在哪?

2.9 mysql中的索引有哪些?hash索引是什么时候使用呢?hash索引一般是用于什么的场景呢?hash索引在硬盘上建立了索引了吗?hash索引的key是什么?

24个经典的MySQL索引问题,你都遇到过哪些?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urizmtG9-1616259159409)(/Users/cdf/Library/Application Support/typora-user-images/image-20210227215907834.png)]

参考博客:深入浅出索引

3.0 mysql有哪些锁?

mysql行级锁与表级锁,乐观锁 ,悲观锁

来自《高性能的MySQL》

来自极客时间中的课程内容:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值