大厂面经: 字节跳动 iOS开发实习生-飞书
好家伙,
线上面试,总时长1h30mins左右
整体流程:
0.自我介绍(0-2mins)
1.做的比较难的事情(15min)
我讲我之前写的一个低开平台,写了一个撤销回退功能,提了个pr,用了节流,用了命令模式
1.1.节流怎么用的?用在哪?为什么用?
1.2.节流把前面的触发直接clean了还是怎么处理?会不会清除掉一些关键变化?
1.3会不会导致某些变化无法触发?如何更好的优化?
2.前端知识+计算机四大件拷打(25min)
2.1.用户态和内核态的区别?
(忘了,直接跳)
2.2. https或者http连接过程发生了什么?
讲了tcp, dns代理返回ip
接着问2.2.1.TCP三次握手过程?
2.2.2.握手过程中唯一标识符作用?
2.2.3.DNS解析过程,如何解析?
2.3. TCP/IP协议多少层?每层作用?
2.3.1.为什么要分层?
2.4. 有没有用过Rust?(每太听清楚问的什么,好像是这个)
没有,直接跳
2.5. 用过什么设计模式,展开说?
我讲了订阅发布模式,命令模式
2.5.1.命令模式解决了什么问题?
2.5.2.发布订阅模式怎么用的?解决了什么问题?
2.6.用过什么数据结构?为什么用?怎么用的?
2.7. 异步有了解过吗?讲讲异步
3.算法(35min)
3.1.算法一(20min)
三数之和
题目描述
给你一个数组,有N个数,怎么判断三个数之和等于某个数,每个数只能使用一次
let number = [10, 21, 3, 14, 5...]
input: 9
output: true
input:2
output: false
要求代码实现
会写
3.2.算法二(10min)
数据源:a->一,b->二 ,c->三,d->四
输入: a 返回 [一、三], ab返回[三],b返回[二、四],bc返回[四]
要求给出思路,
面试官给了提示,说是类似拼音输入法,用树去实现
我妹答出来
4.最后反问(10min)
5.算法答案补充
5.1.第一题:
function threeSum(nums, target) {
nums.sort((a, b) => a - b);
for (let i = 0; i < nums.length - 2; i++) {
let left = i + 1;
let right = nums.length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right];
if (sum === target) {
return true;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
return false;
}
Array.sort的复杂度为O(nlogn)
外层循环为n-2,内层循环为n-1,算O(n^2)
平均复杂度为O(n^2)
5.2.第二题:
使用前缀树实现
一组单词,adv,age,ant,ate,inn,int
用前缀树去储存大概长这样:

class TrieNode {
constructor() {
this.children = {};
this.outputs = [];
}
}
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(key, output) {
let node = this.root;
for (const char of key) {
if (!node.children[char]) {
node.children[char] = new TrieNode();
}
node = node.children[char];
}
node.outputs.push(...output);
}
search(key) {
let node = this.root;
for (const char of key) {
if (node.children[char]) {
node = node.children[char];
} else {
return [];
}
}
return node.outputs;
}
}
// 初始化Trie树
const trie = new Trie();
trie.insert('a', ['一', '三']);
trie.insert('ab', ['三']);
trie.insert('b', ['二', '四']);
trie.insert('bc', ['四']);
// 查询
console.log(trie.search('a')); // 输出: ['一', '三']
console.log(trie.search('ab')); // 输出: ['三']
console.log(trie.search('b')); // 输出: ['二', '四']
console.log(trie.search('bc')); // 输出: ['四']
6.总结与反思
从整个整体的面试过程来看,大厂还是更加注重基础,四大件和算法,狠狠的补
大厂面经: 字节跳动 iOS开发实习生-飞书的更多相关文章
- 字节跳动后端开发实习生面试(Python)
一面: 1.自我介绍. 2.介绍“工大小美”项目相关. 3.Python中的GIL(全局解释器锁),以及哪种情况下使用python的多线程性能有较大的提升. 4.项目中用到了SQLite数据库,如果有 ...
- 字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路
点这里申请 本文主要介绍Heimdallr对卡死.卡顿异常的监控原理,并结合长时间的业务沉淀发现的问题进行不断迭代和优化,逐步实现全面.稳定.可靠的历程. 作者:字节跳动终端技术--白昆仑 前言 卡死 ...
- [知乎] 刚开始学习 iOS 开发有什么书推荐呢?
http://www.zhihu.com/question/19649679 我来说说我学习的过程:(无耻的使用一个回答 回答了很多问题.^^) 第一步,精读 Stephen G. Kochan 的& ...
- iOS开发讯飞语音的集成
1.进入官网注册账号,登陆,注册,应用. 2,下载sdk 导入系统库. 3,关闭bitcode 4,初始化讯飞语音. NSString * initString = [[NSString alloc ...
- iOS 开发中的争议(二)
这是该系列的第二篇.在本文中,我想讨论的是:对于 UI 界面的编写工作,到底应该用 xib/storyboard 完成,还是用手写代码来完成? 本着 “使用过才有发言权” 原则,我介绍一下我的经历: ...
- 想进大厂?字节跳动等独角兽公司都在招募Python工程师!(Python就是第一语言)
在本文章中,作者通过自身经历,力求客观的谈谈个人选择学习Python的动机,以及独角兽公司对Python工程师的要求及薪资. 从目前各种迹象(企业招聘,语言排名等)看来Python相对Java应该是暂 ...
- 2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?
前言 2020年是转折的一年,上半年疫情原因,很多学android开发的小伙伴失业了,虽找到了一份工作,但高不成低不就,下半年金九银十有想法更换一份工作,很多需要大厂面试经验和大厂面试真题的小伙伴,想 ...
- 刷到血赚!字节跳动内部出品:722页Android开发《360°全方面性能调优》学习手册首次外放,附项目实战!
前言 我们平时在使用软件的过程中是不是遇到过这样的情况:"这个 app 怎么还没下载完!"."太卡了吧!"."图片怎么还没加载出来!".&q ...
- iOS开发|从小公司到进大厂,我的进阶学习之旅!
iOS高级进发 OC源码下载地址 苹果开发文档 如何阅读苹果开发文档 GNUstep是GNU计划的项目之一,它将Cocoa的OC库重新开源实现了一遍 源码地址:http://www.gnustep.o ...
- 一周内被程序员疯转3.2W次,最终被大厂封杀的《字节跳动Android面试手册》!
一眨眼又到金三银四了,不知道各位有没有做好跳槽涨薪的准备了呢? 今天的话大家分享一份最新的<字节跳动Android面试手册>,内容包含Android基础+进阶,Java基础+进阶,数据结构 ...
随机推荐
- 判断是不是ie浏览器 加上ie11
var b_version = navigator.appVersion; var version = b_version.split(";"); var trim_Version ...
- 剑指Offer-64.滑动窗口的最大值(C++/Java)
题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6, ...
- kettle从入门到精通 第二十一课 kettle Carte服务器
1.相关配置文件 jdbc.properties保存在simple-jndi目录下,这个文件用来存储JNDI连接对象的连接参数.Kettle可以用JNDI的方式来引用JDBC连接参数,如IP地址.用户 ...
- Linux下,安装单机版Flink
安装前准备 jdk环境 开始安装 下载安装包 地址1:https://archive.apache.org/dist/flink/flink-1.18.0/flink-1.18.0-bin-scala ...
- 通过 Helm Chart 部署 Easysearch
Easysearch 可以通过 Helm 快速部署了,快来看看吧! Easysearch 的 Chart 仓库地址在这里 https://helm.infinilabs.com. 使用 Helm 部署 ...
- 硬件开发笔记(十七):RK3568底板电路串口、485、usb原理图详解
前言 原理图有一些常用电路. 本篇就将集中常用电路分析完,如uart口,涉及usart串口.rs485.usb口. 串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接 ...
- CRP关键渲染路径笔记
关键渲染路径CRP笔记 关键渲染路径(Critical Render Process)是浏览器将HTML.CSS和JavaScript代码转换为屏幕上像素的步骤序列,它包含了DOM(Document ...
- 网络诊断工具traceroute的使用
在 Linux 系统中,traceroute 是一个网络诊断工具,用于确定数据包从你的计算机到目标主机(如一个网站或远程服务器)所经过的路由路径. 如果你的系统中没有安装 traceroute,你可以 ...
- Lecture5
Smiling & Weeping ---- 在街上看到长得和你相似的人时 我心中的那股雀跃 请你至少同情一下吧 第五章 Git 内部原理 5.0 引言 本章相对独立,从底层出发带你了解Git ...
- JAVA Stream在jdk17下的例子
最近因为某些原因,又要用stream,所以耗费了一些时间,做了一些例子,以便自己后续参考. 环境: windows11 jdk 17 spring 2.6.7 Article类代码: package ...