好家伙,

线上面试,总时长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.第一题:

  1. function threeSum(nums, target) {
  2. nums.sort((a, b) => a - b);
  3. for (let i = 0; i < nums.length - 2; i++) {
  4. let left = i + 1;
  5. let right = nums.length - 1;
  6. while (left < right) {
  7. const sum = nums[i] + nums[left] + nums[right];
  8. if (sum === target) {
  9. return true;
  10. } else if (sum < target) {
  11. left++;
  12. } else {
  13. right--;
  14. }
  15. }
  16. }
  17. return false;
  18. }

Array.sort的复杂度为O(nlogn)

外层循环为n-2,内层循环为n-1,算O(n^2)

平均复杂度为O(n^2)

5.2.第二题:

使用前缀树实现

一组单词,adv,age,ant,ate,inn,int

用前缀树去储存大概长这样:

  1. class TrieNode {
  2. constructor() {
  3. this.children = {};
  4. this.outputs = [];
  5. }
  6. }
  7. class Trie {
  8. constructor() {
  9. this.root = new TrieNode();
  10. }
  11. insert(key, output) {
  12. let node = this.root;
  13. for (const char of key) {
  14. if (!node.children[char]) {
  15. node.children[char] = new TrieNode();
  16. }
  17. node = node.children[char];
  18. }
  19. node.outputs.push(...output);
  20. }
  21. search(key) {
  22. let node = this.root;
  23. for (const char of key) {
  24. if (node.children[char]) {
  25. node = node.children[char];
  26. } else {
  27. return [];
  28. }
  29. }
  30. return node.outputs;
  31. }
  32. }
  33. // 初始化Trie树
  34. const trie = new Trie();
  35. trie.insert('a', ['一', '三']);
  36. trie.insert('ab', ['三']);
  37. trie.insert('b', ['二', '四']);
  38. trie.insert('bc', ['四']);
  39. // 查询
  40. console.log(trie.search('a')); // 输出: ['一', '三']
  41. console.log(trie.search('ab')); // 输出: ['三']
  42. console.log(trie.search('b')); // 输出: ['二', '四']
  43. console.log(trie.search('bc')); // 输出: ['四']

6.总结与反思

从整个整体的面试过程来看,大厂还是更加注重基础,四大件和算法,狠狠的补

大厂面经: 字节跳动 iOS开发实习生-飞书的更多相关文章

  1. 字节跳动后端开发实习生面试(Python)

    一面: 1.自我介绍. 2.介绍“工大小美”项目相关. 3.Python中的GIL(全局解释器锁),以及哪种情况下使用python的多线程性能有较大的提升. 4.项目中用到了SQLite数据库,如果有 ...

  2. 字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路

    点这里申请 本文主要介绍Heimdallr对卡死.卡顿异常的监控原理,并结合长时间的业务沉淀发现的问题进行不断迭代和优化,逐步实现全面.稳定.可靠的历程. 作者:字节跳动终端技术--白昆仑 前言 卡死 ...

  3. [知乎] 刚开始学习 iOS 开发有什么书推荐呢?

    http://www.zhihu.com/question/19649679 我来说说我学习的过程:(无耻的使用一个回答 回答了很多问题.^^) 第一步,精读 Stephen G. Kochan 的& ...

  4. iOS开发讯飞语音的集成

    1.进入官网注册账号,登陆,注册,应用. 2,下载sdk  导入系统库. 3,关闭bitcode 4,初始化讯飞语音. NSString * initString = [[NSString alloc ...

  5. iOS 开发中的争议(二)

    这是该系列的第二篇.在本文中,我想讨论的是:对于 UI 界面的编写工作,到底应该用 xib/storyboard 完成,还是用手写代码来完成? 本着 “使用过才有发言权” 原则,我介绍一下我的经历: ...

  6. 想进大厂?字节跳动等独角兽公司都在招募Python工程师!(Python就是第一语言)

    在本文章中,作者通过自身经历,力求客观的谈谈个人选择学习Python的动机,以及独角兽公司对Python工程师的要求及薪资. 从目前各种迹象(企业招聘,语言排名等)看来Python相对Java应该是暂 ...

  7. 2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?

    前言 2020年是转折的一年,上半年疫情原因,很多学android开发的小伙伴失业了,虽找到了一份工作,但高不成低不就,下半年金九银十有想法更换一份工作,很多需要大厂面试经验和大厂面试真题的小伙伴,想 ...

  8. 刷到血赚!字节跳动内部出品:722页Android开发《360°全方面性能调优》学习手册首次外放,附项目实战!

    前言 我们平时在使用软件的过程中是不是遇到过这样的情况:"这个 app 怎么还没下载完!"."太卡了吧!"."图片怎么还没加载出来!".&q ...

  9. iOS开发|从小公司到进大厂,我的进阶学习之旅!

    iOS高级进发 OC源码下载地址 苹果开发文档 如何阅读苹果开发文档 GNUstep是GNU计划的项目之一,它将Cocoa的OC库重新开源实现了一遍 源码地址:http://www.gnustep.o ...

  10. 一周内被程序员疯转3.2W次,最终被大厂封杀的《字节跳动Android面试手册》!

    一眨眼又到金三银四了,不知道各位有没有做好跳槽涨薪的准备了呢? 今天的话大家分享一份最新的<字节跳动Android面试手册>,内容包含Android基础+进阶,Java基础+进阶,数据结构 ...

随机推荐

  1. Java中Calendar类与SimpleDateFormat类的介绍

    目录 Calendar类(关于日期的一些方法) get(Calendar.XXX); get(Calendar.Year) get(Calendar.MONTH) get(Calendar.DAY_O ...

  2. 为什么魂斗罗只有128KB却能实现那么长的剧情有答案了

    PPU 首发公号:Rand_cs 本文继续讲述 NES 的基本原理,承接上文的 CPU,本文来讲述 PPU,较为复杂,慢慢来看.例子基本都是使用的魂斗罗,看完本文相信对那问题"为什么魂斗罗只 ...

  3. nginx resolver 指定多个DNS (2个DNS)

    nginx resolver 指定多个DNS (2个DNS) 直接在 resolver 后边填2个DNS,中间用空格 location / { resolver 223.5.5.5 114.114.1 ...

  4. 双网卡、多网卡指定IP分别访问网卡(windows添加静态路由)

    有两块网卡,网关分别是 128.0.100.198 和 192.168.10.2,128.0.100.198,网速10M.192.168.10.2,网速100M.平时上网用192.168.10.2,访 ...

  5. “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。

    安装较低版本的Newtonsoft.Json: Newtonsoft.Json官网:https://www.nuget.org/packages/Newtonsoft.Json/ Install-Pa ...

  6. 使用 OpenTelemetry 构建可观测性 05 - 传播和行李(Propagation & Baggage)

    我们开发的应用程序可能具有不同的形态和架构:有些是单体应用,有些是微服务.为单体应用程序添加遥测数据相对来说简单,因为所有数据都在同一进程中.然而对于微服务应用程序,情况可能会更具挑战性. 通常,分布 ...

  7. 《Android开发卷——实时监听文本框输入》

       在实际开发中,有时候会让用户发布一些类似微博.说说的东西,但是这个是有限制长度的,除了在文本输入框限制长度外,还要在旁边有一条提示还能输入多少个字的"友好提示". 1.文本框 ...

  8. OSI七层网络模型和TCP/IP四层模型

    OSI七层网络模型 OSI: 开放系统互连参考模型是ISO制定的一个用于计算机或通信系统间互联的标准体系 OSI七层模型功能: 物理层: 七层模型的最底层,主要是物理介质传输媒介(网线或者无线),在不 ...

  9. UIButton选择状态下长按时会变回原始状态

    问题大概就像这样 (请无视那红字) 一般而言这是高亮状态的设置有所缺乏.完善代码如下: [_pupilBtn setImage:[UIImage imageNamed:@"a1"] ...

  10. 修改Git Commit提交记录的用户名Name和邮箱Email

    修改Git 本次Commit提交记录的用户名Name和邮箱Email git commit --amend --author="new-name <xxx@new.com>&qu ...