ホームページ  >  記事  >  Byte にエントリーできるかどうかを判断するためのいくつかの質問

Byte にエントリーできるかどうかを判断するためのいくつかの質問

Java后端技术全栈
Java后端技术全栈転載
2023-08-25 15:48:00809ブラウズ

1 職務内容

  • Bytedance のビジネスライン (Toutiao、Douyin、Huoshan などを含む) のセキュリティ システムと製品を担当します。 .) 設計と開発
  • プラットフォーム内の自動化ツールのセキュリティ機能の向上
  • Toutiao、Douyin、およびその他の一般的なセキュリティ モジュールを担当します。 Huoshan およびその他の製品、コンポーネントの設計および開発

2 職務要件

  1. 学士以上の学位
  2. Linux/Mac/Windows プラットフォームでのさまざまな開発スキルに熟練している
  3. Java/Python/Go/C の 1 つ以上の言語に熟練しているなど。
  4. 一般的に使用されるアルゴリズムとデータ構造に精通しており、ネットワーク プログラミングとマルチスレッド プログラミング技術に精通している
  5. 学習能力が高く、新しい知識を応用し、優れた分析と問題解決スキルを備えている 能力
  6. 優れたチームワーク精神と積極的なコミュニケーション意識を持つ

追加ポイント

  1. セキュリティ製品開発の経験があることが望ましい
  2. セキュリティ開発とセキュリティについての十分な理解があるテスト、脆弱性検出、その他のセキュリティ知識

3 面接

面接官は、 で候補者の名前を簡単に確認し、質問します。候補者の現在の勤務先 その後、彼はこう言いました。Byte の面接プロセスを理解する必要がありますよね?

私の友人は、これまで Byte の面接に参加したことがなかったため困惑しており、どんなプロセスですか? Byte に参加するのは初めてです。

面接官はこう答えました まず、アルゴリズムに関する質問をいくつか行います。履歴書に、厳しい質問をたくさんしたと書かれているのを見て、最初に前菜として簡単な質問を書いてください

その後、面接官が質問を始めました。

私の友人 (バイト アルゴリズムの質問は簡単ではないと聞いたことがあります) 何だ、あなたの単純な質問は特に難しくないでしょう、と思いました。

3.1 プログラミングの質問 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. 16 進数間の変換;

3. 整数を文字列に変換する関数 itoa の実装。

一見単純な基本的な質問は多くのことを検討しており、

「分割統治」の考えを採用する必要があります。 私の友人は面接官に、私は普段リートコードを書いているのですが、突然この種の質問を書くことに抵抗を感じたと言いました。

面接官はこう答えました 答えるのが非常に難しい同様の質問を見てみましょう。

面接官は質問を始めました。

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 を作成できますか。

以上がByte にエントリーできるかどうかを判断するためのいくつかの質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はJava后端技术全栈で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。