大厂面经: 字节跳动 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基础+进阶,数据结构 ...
随机推荐
- Java中Calendar类与SimpleDateFormat类的介绍
目录 Calendar类(关于日期的一些方法) get(Calendar.XXX); get(Calendar.Year) get(Calendar.MONTH) get(Calendar.DAY_O ...
- 为什么魂斗罗只有128KB却能实现那么长的剧情有答案了
PPU 首发公号:Rand_cs 本文继续讲述 NES 的基本原理,承接上文的 CPU,本文来讲述 PPU,较为复杂,慢慢来看.例子基本都是使用的魂斗罗,看完本文相信对那问题"为什么魂斗罗只 ...
- nginx resolver 指定多个DNS (2个DNS)
nginx resolver 指定多个DNS (2个DNS) 直接在 resolver 后边填2个DNS,中间用空格 location / { resolver 223.5.5.5 114.114.1 ...
- 双网卡、多网卡指定IP分别访问网卡(windows添加静态路由)
有两块网卡,网关分别是 128.0.100.198 和 192.168.10.2,128.0.100.198,网速10M.192.168.10.2,网速100M.平时上网用192.168.10.2,访 ...
- “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。
安装较低版本的Newtonsoft.Json: Newtonsoft.Json官网:https://www.nuget.org/packages/Newtonsoft.Json/ Install-Pa ...
- 使用 OpenTelemetry 构建可观测性 05 - 传播和行李(Propagation & Baggage)
我们开发的应用程序可能具有不同的形态和架构:有些是单体应用,有些是微服务.为单体应用程序添加遥测数据相对来说简单,因为所有数据都在同一进程中.然而对于微服务应用程序,情况可能会更具挑战性. 通常,分布 ...
- 《Android开发卷——实时监听文本框输入》
在实际开发中,有时候会让用户发布一些类似微博.说说的东西,但是这个是有限制长度的,除了在文本输入框限制长度外,还要在旁边有一条提示还能输入多少个字的"友好提示". 1.文本框 ...
- OSI七层网络模型和TCP/IP四层模型
OSI七层网络模型 OSI: 开放系统互连参考模型是ISO制定的一个用于计算机或通信系统间互联的标准体系 OSI七层模型功能: 物理层: 七层模型的最底层,主要是物理介质传输媒介(网线或者无线),在不 ...
- UIButton选择状态下长按时会变回原始状态
问题大概就像这样 (请无视那红字) 一般而言这是高亮状态的设置有所缺乏.完善代码如下: [_pupilBtn setImage:[UIImage imageNamed:@"a1"] ...
- 修改Git Commit提交记录的用户名Name和邮箱Email
修改Git 本次Commit提交记录的用户名Name和邮箱Email git commit --amend --author="new-name <xxx@new.com>&qu ...