面试现场实战分析

注: 这是字节跳动的一次视频面试,需要通过特定窗口敲代码
 

Q:堆排序(二面)
A:让大概说了思路,没让具体实现,面试来的比较突然,这块也没看,忘得差不多了,就说堆排不太会,用的不多......然后就问了其他常见排序算法了

 

分析:问堆排序的一般比较少,只需要答出堆排序的思路即可,由于理解不深可能会遗忘,所以这道题目难度较大。

 


Q:说一说一些常见的算法(二面)
A:堆排序,希尔排序,快拍,冒泡,插入,动态规划,二叉树的相关算法……


Q:挑几个刚刚你说的算法的时间复杂度(二面)
A:问了堆排序(nlogn),快速排序(nlogn),冒泡排序(n方),动态规划(n方)

 

排序的时间复杂度在面试中基本属于送分题的部分


Q:编程题字符串输出最长数字子串:(二面)
A:写出来了,中间的时候面试官以为我理解错了(他以为我理解成必须是连续子串,其实是输出最长数字子串就可以了),打断了一次,让我先说下思路,我就说了是从前往后走,遇到数字计数加一,保存最大计数和起始位置,然后输出就行了,说完思路应该是发现我理解没问题,就让我继续实现了

 

/************************以下是具体题目*****************************/

读入一个字符串str,输出字符串str中的连续最长的数字串

例如:输入abcd12345ed125ss123456789aa123456  输出123456789

/************************以上是具体题目*****************************/

 


Q:你实现的这个算法遍历了多少次?(二面)
A:遍历一次数组就可以了


Q:反复跟我确认是不是遍历一次,因为我判断是不是数字用的是while(digital)(二面)
A:开始犹豫了一下,后来想着这个while不是遍历啊,就告诉他,只遍历一次就可以了,判断数字的while用if也可以


Q:有没有办法改进?怎么改进?(二面)
A:有,可以加一些判别条件,符合条件时不用遍历完整个数组,比如遍历到一半时候发现全部是数字,那后面的就不用遍历了。然后想了想,又说,刚刚说的那个可以扩充,就是遍历到某个位置发现后面未遍历的就算全是数字也不可能最长了就可以退出循环了

 

就这道题目而言,是一道非常简单的题目,一次遍历就可以完成,已经是O(N), 优化意义不大。


 

工程题:
Q:100000个玩家的战斗力,要排名前500名,而且需要实时更新,怎么处理?(二面)(问这道题因为自己多嘴,本来二面都要完事了,面试官问你觉得自己优缺点是什么?我就说我觉得相比科班出身的和没做过具体工程项目的,我的代码能力弱一点,但是工程能力比较强,然后面试官就说那出一道题考考你)

A:

第一、100000名实时遍历系统一定承受不了或者说这样做代价太大,那么可以首先遍历一遍,挑选出战斗力最高的1000名,然后后面只遍历这1000名就可以了,因为前500名大概率都是前一千名产生的,减少系统开销。

第二、为了防止某些玩家充钱了,大幅提升战斗力,那么可以设置一个阈值,如果某个玩家战斗力增加速度超过阈值,那么这个玩家也应该纳入实时排序过程中。

第三、最后100000名玩家的战斗力可以定期在服务器压力不大的时候,比如休服时期或者夜间,做整体排序,以便校验数据的准确性。

 

这就是topK 问题, 就维护一个最小堆,保存500个玩家的战斗力就行了,答得不好。

 

分析:整个二面是比较水的,唯一有难度的题目是第一道堆排序的题目,容易遗忘。

 

问答题:
A:tcp/udp区别是什么?(一面、二面上来的第一个问题)
答:简单说一句话:tcp面向链接,udp不是,然后我又补充了一下两者的不同:
tcp开销小,udp开销大
tcp有拥塞控制,可以慢开始,拥塞避免,快重传和快恢复,udp没有,不管网络是否拥塞,udp客户端都可以一直发
tcp数据完整,按时,按序到达,udp尽力满足
tcp延时高,适用于数据传输准确度要求高的场合,udp适用于数据传输量大,实时性要求高的场合

 

分析:TCP和UDP的区别基本是面试必问问题,需要背诵以下内容。。。

TCP面向连接,UDP面向无连接,

TCP可靠,UDP不可靠,TCP可靠是通过序号,重传,流量控制,拥塞控制

TCP面向字节流,UDP面向数据报

共三方面的区别。

TCPUDP区别

  • TCP面向连接(三次握手),通信前需要先建立连接;UDP面向无连接,通信前不需要连接。
  • TCP通过序号、重传、流量控制、拥塞控制实现可靠传输;UDP不保障可靠传输,尽最大努力交付。
  • TCP面向字节流传输,因此可以被分割并在接收端重组;UDP面向数据报传输。

 

 


Q:什么时候考的ccna(思科认证网络工程师)和ccie(思科认证网络专家)?(问我的网络的比较少估计是看到了我简历上写的考了这两个认证吧)(二面、三面)
A:大二、三考的na,大四暑假考的ie


Q:本科网络工程?主要学的什么?(三面)
A:路由交换方向,一部分网络安全


Q:为什么选择本科专业?(三面)
A:那时候觉得网络是未来,加上一直对计算机感兴趣就填了


Q:那你觉得现在不是网络时代了么?移动互联网这么发达?(三面)
A:我理解现在网络更多是一种工具融入到我们的生活之中了


Q:为什么选择研究生专业(电子与通信工程)?(三面)
A:一是现在网工就业不是那么好,因为更多的企业运用了云服务,我去买腾讯,阿里的云服务,他们给我接口和相关的配套就可以了。 同时也觉得和硬件相关的工作会比较有意思


Q:对现在自己学的专业的看法?(三面)
A:如实回答,现在做的和通信专业没什么关系,但是根据自己对身边同学的了解,通信更多是编码解码技术和传输技术,比如2-3-4g其本质都是编解码技术的升级,再比如5g的大规模mimo


Q:你这跨度还挺大的,那你选择专业是因为什么呢?是因为工资么?(三面)
A:更多是因为兴趣,这也是对自己的一种负责(面试官说对,这是一种好习惯)


Q:数据库了解么?(二面)
A:平时没有涉及过,也不了解(然后就没问了)


Q:如果最后没能进入我们部门,你觉得最大的原因是什么?(三面)
A:作为技术岗,我觉得可能更多的是自己技术不够精进,还有一个可能就是可能我不是最适合的,适合的才是最好的

 

分析: 上面的问题都是专业相关个性化的问题,没有参考价值, 值得注意的是,面试官本来想问数据库问题,但没有涉及过,是一块减分项, 基本应该一些基本概念。


 

Q:指针和引用?

A:指针占用内存空间,四个字节,引用不占用内存空间,占用的空间也是引用对象本身占用空间,引用可以说是外号和别称

指针可以是空指针,引用不可以,引用对象必须存在

指针的自加是对地址的操作,引用的自加是对引用对象的操作。


Q:内存的操作?

A:new/delete,malloc/free

 

Q:就这些?

A:目前想到就这些(当时问完指针和引用就有点懵逼了,毕竟四面问这玩意,脑子就有点短路了......)


Q:new和malloc?

A:一个是函数,一个是关键字,一个是程序员自己使用,一个是系统自动调用


Q:反转链表?(手撕)

A:瞬间懵逼,不是zoom面试么?怎么还手撕?面试官问了下HR,说手撕不了,然后让说思路,我就回答,链表的精髓就是指针,翻转链表其实就是翻转指针。

 

以上内容问了几个简单的C/C++ 题目,基本属于基础内容。

 

总结这一场面试题基本属于简单内容, 其中算法题部分有一定难度,下面贴出面试过程中的所有算法题

 

先手最高得分

有N张卡牌堆成一摞,每张卡牌上都会有一个整数标记其分数。

现有两个人要交替从牌堆顶拿牌,每次至少拿一张,至多拿M张,直到牌堆被拿完。

每个人拿至手中的牌的分数和即为其最终得分。假设两个人都会采取最佳策略拿牌来使自己的得分最大化,请问先手拿牌的人的得分为多少?

输入描述

输入第一行是样例个数;

对于每个样例,第一行是N,M,第二行有N个整数,代表牌堆顶到牌堆底N张牌的分数。

0 < N, M < 1,000,000,  每张牌的分数在-100和100之间

输出描述

每个样例,输出一个整数代表先手得分。

示例1

输入

2

4 2

1 1 1 1

5 2

3 -4 1 1 7

输出

2

6

说明

第一个样例,先手拿2张1,最高得分为2。 第二个样例,先手拿3,-4,逼迫对方接下来只能拿1,1,最后自己再拿到7,所以先手最高得分为6。

 

笔试题目

1、小球下落问题

一个小球从初始高度为H的地方下落,每次落地后反跳回原高度的一半; 再落下, 求它在第n次落地时,共经历多少米?结果保留两位小数:(n不超过五次)

输入测试用例:1 5 2 (第一个数代表测试用例个数,第二个数代表小球下落的起始高度,最后一个数代表第n次落地)

 

这道题目找下规律,比较简单。

 

2、最小长方形问题


       给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。

 

这道题目也是一道比较简单的题目,找到左上角和右下角的点即可。

 

 

3、N人围圈报数问题

      有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。依次输出退出人的编号:

约瑟夫问题变种,大不了用链表模拟,比较简单。

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值