1 岗位描述
负责字节跳动业务线(包括头条、抖音、火山等)安全系统及产品的设计与开发 完善平台内自动化工具的安全能力 负责头条、抖音、火山等产品的通用安全模块、组件的设计和开发
2 岗位要求
本科及以上学历 熟练掌握 Linux/Mac/Windows 平台的各种开发技能 精通一种或几种以下语言,Java/Python / Go / C++ 等等 熟悉常用算法和数据结构,熟悉网络编程、多线程编程技术 善于学习和运用新知识,具有良好的分析和解决问题能力 具有良好的团队合作精神和积极主动的沟通意识
加分项
有安全产品开发背景优先 比较了解安全开发、安全测试、漏洞检测等安全知识
3 面试
面试官在简单确认候选人姓名并询问侯获选人当前工作地之后,说道 你应该了解字节的面试流程吧?
朋友由于之前没参加过字节的面试,一脸懵逼,问道 请问流程是怎样的,我是第一次参加字节的面试。
面试官答道 先做几道算法题。看你简历上说有刷不少力扣题,那就先写一道简单题作为开胃菜吧。
接着面试官开始出题了。
朋友(之前听过字节的算法题不容易)心里默想 What's the fuck, 你的简单题不会特别难吧?
3.1 编程题一
请写一个函数:string ConvertNum(string src, int src_base, int dst_base) 测试用例: ConvertNum("FF", 16, 10) = "255" ConvertNum("077", 8, 10) = "63" ConvertNum("10", 16, 10) = "16" 假设: 参数:src_base/dst_base = 2, 8, 10, 16 src >= "0" 假设没有任何前缀; 假设参数都正确; 假设参数都是非负数
面试官要求
20 分钟之内完成,越快越好,要求通过所有测试用例,代码尽可能简洁。
朋友
好久没刷这种题了,看到题之后,没思考清楚,一顿操作猛如虎,导致在不少细节出了问题。
解题思路(主要考察如知识点:)
1、字符串转换成整型数函数 atoi 的实现;
2、进制之间的转换;
3、整数转换为字符串函数 itoa 的实现。
一道看似简单的基础题,考察的东西还不少,需要采用 “分治” 的思想。
朋友对面试官说 一般刷 leetcode,突然写这种题很不适应。
面试官答道 那就看一道力扣的类似题吧。
面试官开始出题。
3.2 面试题二
C++ typedef struct LinkListNode { int value; struct LinkListNode* left; struct LinkListNode* right; } LN, *PLN; bool IsBranch(PLN root, int *nodes, int length) 1 / \ 2 3 / \ 4 5 / \ 6 7 1 T 0 F 2, 3 F 1, 2, 3 T 1, 3, 5, 6 T 6, 5, 3, 1 T
面试官提示
面试官出完题之后,笑了笑说提示一下哈,本题可以找规律。
朋友
做了一段时间之后,大部分写出来了,但是还是有些细节没考虑好。
解题思路
将这颗树看成一个族谱,如果输入的是一颗子树的话,必须要有父亲节点,比如 1, 3, 6,由于 6 没有父亲节点,所以输出肯定是 F;如果只有兄弟节点的话,同样输出也是 F。
面试官问 你刷题的时候,最擅长刷哪种类型的题目,数组 or 链表 or 二叉树 or 排序 or...?
朋友一想,最近自己刷 链表 的题目比较多,递归、迭代以及增加虚拟头节点等等解法都掌握了,而且听了慕课网 liuyubobo 老师的算法课中的链表部分,于是自豪地说 链表。
面试官说 那就看看链表的算法题吧。
朋友露出笑容问道 面试官,你不会出一道 hard 的链表题吧?
面试官哈哈大笑,答道 我还是有节操的,不会坑你的,不过如果你通过了这一面,下一面的算法题估计比较难。
说完面试官出题了。
3.3 面试题三
给定一个单链表,在链表中把 L 个节点到 R 个节点这一部分进行反转。 示例1: 输入 [1, 2, 3, 4, 5] 1, 3 输出 {3, 2, 1, 4, 5}
朋友一看,面露喜色,这么简单的,而且这不跟力扣中某道题类似嘛?
面试官好像看出来啥了,笑着问 你如果做过这道题的话,你就说做过,我再给你换道题。
朋友答道 确实做过,哈哈。
面试官开始换题(出题)。
3.4 面试题四
将一个链表 m 位置到 n 位置之间的区间反转,要求时间复杂度,空间复杂度。 例如: 给出的链表为 1->2->3->4->5->NULL,返回 1->4->3->2->5->NULL. 注意: 给出的满足一下条件: 1 ≤ m ≤ n ≤ 链表长度。
朋友一看,笑了,心想这不就是 leetcode 92. 反转链表 II 的原题嘛?于是乎很诚实地跟面试官说 这题我做过。
面试官面露微笑,说 继续换题,不过不用担心,我不坑你,做一道合并两个排序链表的题。
朋友听到 合并两个排序数组,心中一顿窃喜,这不还是 leetcode 原题嘛?
3.5 面试题五
合并排序数组 typedef struct LinkListNode { int value; struct LinkListNode *next; }LN, *PLN; 示例: listA 升序(1, 3, 5, 7, 9) listB 降序(8, 6, 4, 2, 0) 返回:升序(0, 9) PLN mergeLinkList(PLN listA, PLN listB)
面试官果真不坑人,笑着说我提示一下哈 为了简单一点,这道题你可以不用考虑这两个链表中有相同值得节点。
朋友一想,这不简单嘛,力扣中已经刷过原题(合并两个已升序排列的链表),这道题只需要 把链表 B 反转一下,这是链表 B 就有序了,这样不就跟力扣的原题完全一毛一样了嘛,心中一顿窃喜,于是刷刷刷地写完了。
面试官看了看,说 如果链表 B 中的最后一个节点的值都大于链表 A 的最后一个节点的值呢?如果链表 B 中的第一个节点的值都小于链表 A 的第一个节点的值呢?
朋友想了想,好像也是,还要考虑 链表 B 中每个节点的值放到链表 A 中的什么位置,这还得遍历整个链表 B 和 链表 A,并跟面试官说了。
面试官说这就是本题的难点。
解题思路
考虑几种特殊情况。
1、链表 A 和链表 B 都为空,直接返回即可。
2、链表 A 不为空,链表 B 为空,直接返回链表 A。
3、链表 A 为空,链表 B 不为空,翻转链表 B 并返回翻转后的链表 B。
4、链表 A 和链表 B 都不为空,遍历链表 A 和链表 B 并将链表 B 中的节点(从后往前)向链表 A 中插入,并记录插入位置。
面试官笑着说道 这道题其实是欺负你们这种已经工作了的,那些学生有时间,每天可以刷题,刷得很熟练。
总结
这次面试,“分治思想”考得比较多,一道编程题,往往可以分成几道简单的小的编程题,只有这些小的编程题能 AC 之后,才能把它们组合成大的题 AC 。
以上是决定你是否能进字节的几道题的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器