hello大家好,这里是字节跳动国际化全组技术及格线的前端er,坐标字节跳动国际化,负责印度产品helo的开发,具体部门介绍可以看https://www.nowcoder.com/discuss/449040,如果想要投递我们部门的话可以投简历到我的邮箱jinjing.posterus@bytedance.com,定向直推国际化,部门直推就是比网投简历快,更方便的查询面试进度和投递情况~
一年一度的秋招又开始了,为了方便各位前端er能够更好的复习前端知识点、准备面试,以下整理了我个人和同组里其他同事当时面试本组的面经,供各位小伙伴查漏补缺,看面经犹如高考做真题,做多了就考上了(狗头
话不多说,开始放题
我个人(2020年3月)
一面:
- 讲项目和比赛,做了什么,哪些跟前端有关
- http 缓存机制
- cookie sessionStorage lcoaleStorage,cookie 是不是每一个都能读
- TCP 三路握手 四路挥手
- axois:axois.get().then().catch()
- promise all/race场景题
- 手撕串行 promise 请求
- 手撕图片加载调度器,给一个 urls 的数组和每次最多加载的数量,加载完加载剩下的序列:使用发布者 监听者机制/promise.race()=>使用 hashmap=>hashmap 中设置 key 的值的方法
- 手撕数组里总和等于目标值的连续数字和的所有序列
- CDN 加速,为什么用 CDN 加速
- DNS 缓存,DNS 请求顺序
- 负载均衡
- 有啥想问的,问了字节的 分享会频率,还问了刚刚自己的表现有哪些不好的地方可以提升。
二面:
- transition 动画:从一个地方移动到另外一个地方
- 写一个轮播图,不能用 img.src,会导致回流,性能很低
- 写一个简易 MVVM(拼错英文单词的除了我还能有谁)
- 实现数字转中文,比如 5555=>五千五百五十五(超级多坑,卡了很久很久很久还是没写出来)
- 项目里的 vuex 和 emit 怎么用的
- 项目里有没有遇到浮点数相加的问题,怎么解决
- 有没有啥要问的
三面:
- 自我介绍
- 询问各个项目技术难点
- vuex
- 跨域
- 同源策略
- 页面优化
- 用过哪些页面性能工具(lighthouse
- 从哪检测页面 fps 值(谷歌有一个插件,但是还是记不清了 orz
- 二叉树中序遍历(超简单,但是没有一遍 ac 我是真的菜
- 红蓝墨水各倒 1ml 问两瓶墨水中的红中蓝和蓝中红浓度
- webpack 怎么用的
- tree shaking
- 怎么实现的轮播图
- 讲一下 css3 动画
- 写一下原生 ajax
- 前端学习过程中有遇到什么挫败的事情想放弃前端吗
- 未来职业规划(学业/前端)
- 有啥要问的吗
hr面:
- 对前三轮面试感觉咋样
- 什么时候学的前端
- 学习路线
- 手里有 offer 吗,要不要去
- 为什么不考研
- 实习时间与就职时间
- 项目里印象最深刻的项目,为什么
- 实习的公司,干了什么,从实习到独立写功能用了多久
- 问一些项目里的工作
- 还有啥问题吗
“昨天还在考研,今天就来面试”的同事(2019年11月)
一面:
一面是交叉面, 一个超级有气质的小姐姐hhh, 瞬间对头条充满了憧憬。 一上来先做了一下自我介绍, balabalabala~
- 问题1: 签到题
- Q: vue的双向绑定是怎么实现的?
- A: 旧版本是defineProperty, 新版本是proxy。 defineProperty可以设置对象的一个属性的setter和getter, 以及是否冻结等等, 通过这样的方式来给赋值运算注入更多的操作, 比如触发更新事件。
- 马后炮: 大概看过defineProperty的API, 目测是通过getter实现触发更新的, 更多细节还真没有看过代码。 还有proxy也没有研究。
- Q: vue的生命周期?
- A: 马马虎虎答上来了, 半年多没用vue, 忘了~
- 问题2: 真没想到会问这个
- Q: 如何debug?
- A: console.log打日志,但是一般效率比较低下。 然后主要是打断点。
- Q: 怎么打断点排查?
- A: 如果涉及网络请求, 要先排查是否是前端问题, 是否请求错误或者返回的数据格式不符合预期。 打断点的话有个二分打断点的思路很巧妙。 但其实主要是在整个页面的主逻辑打断点, 看进入各个外层的函数的参数 以及它们的返回值是否符合预期, 发现问题后进一步再看这个函数/调用栈内的细节。 这样一层层定位到问题。
- 问题3: 综合知识
- Q: 知道网页从打开到展示的全过程吗?
- A: 首先是DNS解析, 这个过程是先访问本地的DNS服务器, 如果有缓存会直接返回对应域名的ip地址, 如果没有缓存会先到对应的根DNS服务器, 比如.com的DNS服务器, 查询到对应的域名的DNS服务器, 这样迭代查询之后得到ip地址, 然后访问对应的端口, 如果没有写, 默认是80端口。 这时候服务器上的http服务器, 比如nginx,监听着这个端口, 接到请求后根据命中的host的规则, 一般会再转发给node.js的服务, 或者php等服务的端口去处理后端路由, 静态资源就可以直接返回了。 这里就根据路由规则去命中, 如果都没有命中一般会配置默认规则, 走到统一的404错误页。 到了具体的前端页面之后, 还会有前端路由, 类似的机制去渲染页面。 前端的head里的css、js会阻塞渲染, 然后渲染页面
- 马后炮: 没有好好准备, 应该先讲整体的步骤, 再细说, 页面渲染的部分才是前端的重点, 反而也没有答好。 再补一下浏览器渲染的相关知识比较好。
- 问题4: 写道题
- Q: 写一道数据结构题吧, 给一个二叉树和一个目标值, 写一个函数返回这个树中是否有一条路径等于目标值。 ()给的例子节点都是正值)
- A: 路径的话就是从树根到任何一个结点了, 包括非叶子结点? 结点值会出现0或者负值吗?
- Q: 不会。
- A: 有些紧张, 不追求最优解了, 写了一个递归深搜然后剪枝, 递归调用返回true时返回ture, 否则返回false。 遍历到某个节点的时候路径值等于target就返回true, 这样逆着调用栈就会一直弹出true, 终止函数。 如果到底某个节点的路径值大于目标值, 则直接返回false剪枝, 不再往下搜索(太懒了, 代码略)。 大概写了15分钟, 差不多的时候面试官说了过。
- 马后炮: 马马虎虎吧~ 太紧张了, 不过不追求最优解比较稳扎稳打, 不然可能由于太紧张答不出来。 边写代码边讲自己思路, 免得最后翻车面试官不知道你在干嘛。 自我感觉答的还行。
- 问题5: 问项目1 -> websocket
- Q:说说南大马拉松做的那个项目吧。
- A:大概类似雨课堂, 就是上课的时候学生可以签到, 老师可以在线提问题, 学生在线回答, 统计正确率等等。
- Q: 有什么技术难点吗?
- A: 用到了websocket。
- Q: 为什么用websocket, 不用轮询?
- A: 如果轮询间隔太短服务器压力会比较大, 如果轮询时间太长延迟比较高?
- Q: 说说websocket和轮询的区别?
- A: 轮询的话就是使用ajax, 每次都是一个基于TCP的HTTP请求, 需要三次握手, 传播时延和传输时延都比较长, 就算数据量很小, 带上TCP的请求头, HTTP的请求头, 数据报还是很长。 websoket的话大概四个套接就可以进行一次通信, 了解是否有数据更新。 (遍不下去了hhhh)
- Q: balabalabala(知识盲区, 大概就是进一步问websocket的知识)?
- A: 不了解, 我当时是马拉松的时候临时上网快速看了一下websocket的demo, 了解不深。 (战略放弃, 快点抄作业, 大神不用管, 什么都懂)
- 马后炮: 做足准备哈朋友, 裸面不可取, 不熟悉的技术弱化一下甚至不提比较好。
- 问题6: 问项目2
- Q: 这个财务系统的项目有什么难点?
- A: 一张订单我们会有展示、编辑和新建几种行为, 我开发的时候为了减少复制粘贴, 将这三种都实现在一个页面组件里。
- Q: 具体说说?
- A: 每一行的数据增加一些虚拟参数, 比如id, 新建的时候用-1做常量, 编辑的时候已经从后端读到了数据, 有一个editable属性, 标识是否处于编辑状态。 然后视图上做相应的展现, 进入页面根据path生成一个局部变量action表示是新建还是编辑, 在提交的时候根据这些信息做不同的数据处理, 主要是每一行在提交的时候回去掉虚拟参数, 然后调用对应的接口等等。
- 马后炮: 没准备好难点, 其实还有个表单配置化没说, 哭了。
- 轻松环节:
- Q: 有什么想问我的吗?
- A: 技术栈会有要求吗? 我看岗位描述上主要使用react。
- Q: 这边有vue也有react的, 过来会有导师带你。
- A: 实习多久可以转正?
- Q: 40天后可以转正答辩。
二面:
一面背景还是一排排工位, 二年背景是面试间的白墙, 一上来就感觉比较有压力。 一面结束后休息了半个小时开始的二面, 有点点累。 惯例先自我介绍, balabala。
面试官:嗯? 你准备考研? (眼睛里放出了光芒), 然后开始虐我。
- 问题1: 网络知识
- Q: 说一下慢启动和快重传?
- A: 一开始是两倍两倍地增加传输的帧数, 发现拥塞后。 慢启动是一种保守的策略, 认为刚刚发生了拥塞, 就从指数增长改成了线性增长, 慢慢增加传输的帧数。 快重传是一种乐观的策略, balabale~
- Q: 说一下RIP协议和ospf协议的区别?
- A: RIP适用于小型网络,比较简单, OSPF适用于大型网络 , 内部又分为若干个自制系统~ (还回答了一两句, 记不清了)
- Q: 我想知道他们的区别?
- A: (开始胡诌) RIP是根据跳数来度量距离的, 没有考虑传输时延, 不太准确。 OSPF是利用Dijkstra(又百度了一下这个怎么拼有没有) 算法用时间作为度量的, 比较准确。 RIP追求精确,得到的是根据度量的最短路,但是遇到不可达网络的时候收敛会比较慢。 OSPF通过划分为一个个自治区域, 不追求最短路, 先大致得到一条路径, 收敛比较快。
- ......此处省略两三个问题, 磕磕绊绊答了一些, 概念记不清, 不过都按自己的理解胡诌了一下。不过居然没有问TCP的三次握手四次挥手。
- 马后炮: 当时答的应该更好一丢丢, 由于考研学了点, 虽然考研后期都在看数学~
- 问题2: 操作系统
- Q: 说一下进程和线程的区别?
- A: 线程是系统调度的最小单位, 进程是系统资源分配的最小单位。 同一个进程的线程可以共享内存资源, 不需要调度机调度, 不同的进程间的线程切换以及不同的线程切换需要调度机调度, 开销比较大。 线程的实现比进程灵活, 可以在操作系统内核实现也可以在编程语言层面实现。
- Q: 怎么实现一个LRU算法?
- A:(忘了怎么答的了, 应该还行
- 问题3: 再写个题
- 忘了, 大概跟一面差不多难度, 比预想的轻松。
- 问题4: 来, 翻个车
- Q: 知道防抖节流吗?
- A: 不知道... 是指某个时间多少秒内只执行一次吗
- 马后炮: 其实是知道的(强行狡辩, 在做游戏的时候类似的手法用的非常多~
- 问题5: 浏览器渲染 && JS基础
- Q: 知道BFC吗?
- A: 不知道。
- Q: 知道重排和重绘吗?
- A: 不知道。
- Q: 说一下bind、call和apply。
- A: 老经典题了, 原理就是利用的是闭包和arguments实现的。 此处省略基本实现。 附赠了, 现了call或者apply其中一个, 再封住一层就实现了另一个。
- Q: 说一下typeof和instanceOf的区别?
- A: 又是老经典题。 typeof返回的的是字符串, 对于数组会返回“Object”。 instanceof是在原型链上一层层往上查找 balabala
- 马后炮: 前端知识确实不扎实, 让你二把刀前端~
- 问题6: 人生题?
- Q: 为什么选前端?
- A: 有了解过Java, Java的swing和awt做UI很蛋疼, 布局能力太差。 后来用python的pyqt写UI的时候, 它也实现了一套类似CSS的机制, 远远不如CSS强大。 特别是现在的electron这么强大, github的客户端、atom、vscode、cocos creator都是用它写的, 对比之下前端确实很强。 还有TS和JS混写, 非常舒服, 底层的一些兼容处理之类的可以用js来写, 上层逻辑用TS来写, TS的类型推断、自动向上转型等等。 强类型和弱类型结合起来, 体验非常好。balabala, 还有说学的PHP, 现在大厂都不用了, 算法转后端怕简历投不进的现实~
- 轻松一下
- Q: 有什么想问的吗?
- A: 我答的还行吗, 能进入下一轮吗(慌了慌了) 是不是前端基础部分比较差, 网络之类的还可以。
- Q: 对自己定位还挺准确的, 我觉得还不错, 你说的挺有意思。
三面:
听说三面都是leader, 非常紧张, 特别害怕像阿里那种压力面。 还好leader看起来很随和。 先自我介绍, 都会背了hhh
- 问题1: promise
- Q: 知道promise吗
- A: 忘了怎么答的了, 马马虎虎。
- Q: 来, 写个题, 我现在一张图用很多CDN, 怎么知道哪个先加载完成(大概是类似的问题 ,具体忘了)
- A: 一直听不懂image是什么, 哑巴英语吃亏了。 promise用的不熟, 用回调混过这道题了。
- 马后炮: 平时只是简单地使用promise的all之类功能, 没有深究。 在《深入浅出node.js》这本书里对这个非常详细的介绍, 不过当时没有太关注。
- 问题2: cookie
- Q: 知道cookie、session和localstorage吗?
- A: 常规回答, 具体忘了, balabala, 马马虎虎。
- Q: cookie有哪些字段?
- A: cookie作为一个字符串存储, 要自己实现一个kv的机制, 我一般用cookiejs这个库, 然后cookie有过期时间等等。
- Q: 知道cookie的samesite字段吗?
- A: 不知道。
到这里其实很慌了, 感觉要凉了, 还好后半段还行。
- 问题3: 安全问题
- Q: 知道CSRF吗?
- A: 知道, 这个是为了防止绕过页面, 直接像我们的服务端发送接口的一种防御机制。 它是生成一个token存储在后端, 然后我们打开一个表单页的时候这个token会放在表单里作为一个隐藏的字段或者请求的header, 提交的时候带过去, 这样就知道这个请求是从我们的页面来的, 而不是跳过我们的页面直接发过来的请求。
- Q: 还知道什么安全的问题?
- A: XSS攻击和SQL注入
- Q: 具体说说?
- A: XSS攻击是指向我们页面直接注入一段javascript脚本, 然后别的用户访问的时候就会被攻击到。 SQL注入是指一些请求比如直接在GET写的参数, 后端进行sql查询的时候直接拼接sql语句, 导致的安全漏洞, 比如在参数里写一个or 1 = 1。不过现在的JAVA的JDBC和PHP的PDO之类的都自带了防御。
- Q: XSS攻击再具体说说怎么攻击的, 怎么防御的,举个例子?
- A: 比如一个留言板, 如果我们没有对HTML标签进行过滤, 用户可以插入js脚本。其他用户访问这个页面的时候就会直接执行JS标本。 这个脚本可能是把页面上的一些信息直接发送出去, 泄漏用户隐私。 更危险的是如果我们没有验证码和CSRF的机制, 这个脚本直接帮用户发请求修改密码等等。
- Q: 就只是过滤HTML标签吗?
- A: 想不到别的了。
- 问题4: 场景题, 设计支持多来源的搜索框, 这道题会透题~慎重
- Q: 实现一个搜索框, 类似百度那种, 要考虑什么问题?
- A: 首先要有缓存机制, 用户可能输入四个字再删掉两个字这种会重复搜索, 加个缓存机制减少服务器的压力。 其次是要节流, 停止输入一定间隔才会触发自动的去获取相关的搜索词。 然后是数据的转换, 比如空格隔开关键词和使用+隔开, 这种是一样的, 要做数据的反序列换, 转换成后端容易处理的数据, 比如数组, 当然常见的数据处理还有去掉首尾空格之类的。
- Q:要支持从不同的来源搜索, 这些来源的数据格式也不同? 怎么设计?
- A: 首先有一个服务注册的概念, 每一个来源是一个服务, 它有服务id, 请求的url等一些信息, 最主要的是有一个parse函数, 输入是获取到的原始数据, 返回的值是经过转换的, 我们搜索页面能识别的最终格式, 这样把不同来源数据转换过来。 然后注册的服务会存储在一个数组中, 主逻辑就读出这些服务, 去生成界面, 主逻辑大概这样balabala 写了点代码表示。
- 问题5: 项目1
- Q: 财务系统的难点在哪?
- A: ~又回答了一次。
- 问题6: 项目2
- Q: 二手交易那个项目?
- A: 那个技术栈比较老。
- Q: 哪个项目比较复杂?
- A: 游戏引擎和塔防游戏吧。 游戏引擎的话要实现动画系统、精灵系统之类的,当时看了cocos-js和erget的源码 用到很多设计模式, 解决一些浏览器兼容性问题。 比如有的浏览器不支持暂停播放的api, 只能通过记录上次暂停的时间节点, 通过停止再重新播放模拟暂停, 封住后屏蔽底层的兼容,给上层调用。塔防游戏也是, 用到享元模式、有限状态机之类的。
- Q: 说说有限状态机吧, 哪里用到了?
- A: 主要是怪物的状态, 有等待中、发现目标的行进中和攻击中这几种状态。 有限状态机主要就是定义进入状态 、 更新 、 离开状态的一些操作。
- Q: 写一下有限状态机的实现。
- A: 大概写了十多分钟, 还实现了钩子函数, 每个状态机的子类在对应阶段会自动调用父类钩子函数, 可以封住一些公共行为。
- Q: 说一下怪物的状态, 这个状态流转是一定要遵循一定的次序还是可以任意切换?
- A: 不能任意切换。 必须按照一定的次序, 这样每一个状态的前一个和后一个就确定了, 实现的时候不容易出现bug, 否则状态越多, 排列组合有非常多的可能。 比如需要从等待状态切换到攻击中, 其实可以在同一帧里完成等待->行进中, 下一桢进入攻击中, 这样在玩家看来是直接从等待中到了攻击中, 游戏逻辑没有影响, 代码逻辑更健壮。
- 轻松一下
- Q: 为什么做前端?
- A: 省略了前端和 java GUI、python GUI的对比, 直接说了PHP就业前景, 前端的前景等等。
- Q: 有什么想问我的吗?
- A: 如何成为一个合格的前端工程师。 然后成为一个优秀的前端工程师呢?
- Q: 这个问题有点大,来了之后问你导师吧。 加个微信吧, 有别的问题也可以问我。
- A: (愣头青提问 ), 我通过了吗, 如果没有通过多久能知道结果呢?
- Q: 现在不能告诉你, 不过我都暗示的这么明显了...
- A: 谢谢~
后记
有点点愣头青, 不过应届生嘛, 也不能表现的太圆滑。 当晚开始上知乎研究和HR谈薪的技巧, 不过校招安排的明明白白, 白白和空气斗智斗勇。
总体不是很难, 面试官都很nice, 主要是自己前端基础不太扎实, 有些很简单的问题被卡住就比较有压力。 后续还是先专注前端的学习。
“明明可以靠脸吃饭,却选择靠实力”的同事R(2019年9月)
帅哥只记了自己当时没做出来的题,所以题目比较少qaq
一面:
webpack 按需加载
通过import()异步引入
二面:
CommonJS 和 ES6 Module的区别
CommonJS 是被加载时运行,ESModule是编译时运行。
CommonJS 输出的是值的浅拷贝,ESModule输出值的引用
CommonJS 加载的是整个模块,ESModule可以单独加载其中的某个接口。
CommonJS this指向当前模块,ESModule this指向undefined。
三面:
封装一个带超时处理的fetch请求
虽然大体知道要用Promise.race()来处理,但因为之前没用过fetch,所以脑袋突然麻痹,只能支支吾吾写一些片段。
考点:Promise.race()
Promise.race(iterable) 方法返回一个 Promise 实例,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
class NetUtil extends Component{ static baseUrl = 'https://api.xxx.com/' static token = '' static fetch_request = function(url, method, params = ''){ let header = { 'Accpet': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', 'accesstoken': NetUtil.token } static fetch_request = function(){ let promise = null // 定义主要请求promise promise = new Promise((resovle, reject)=>{ fetch(NetUtil.baseUrl+url, {method:method, header:header, params:params}) .then(responds => responds.json()) .then(res => resolve(res)) }) return NetUtil.warp_fetch(promise) } static warp_fetch(fetch_promise, timeout = 10000){ let timeout_fn = null // 定义超时promise let timeout_promise = new Promise((resolve, reject) => { timeout_fn = function(){ reject('超时') } }) // 计时 setTimeout(timeout_fn,timeout) // 竞赛 let wrap_promise = Promise.race([fetch_promise, timeout_promise]) return wrap_promise } } } export default NetUtil
引申:Promise.all()
Promise.all(iterable) 方法返回一个 Promise 实例, 此实例在 iterable 参数内所有的 promise 都完成(resolve)或参数不含 promise 时回调完成(resolve);如果参数有一个promise失败(reject),此实例回调失败(reject)。
实现:
Promise._all() = (promises) => new Promise((resolve,reject) => { let count = 0; let values = [] promises.forEach((promise, index) => { Promise.resolve(promise).then((data)=>{ values[index] = data if(++count === promises.length){ resolve(values) } },(err)=>{ reject(err) return }) }) })
引申: 实现promise.race()
Promise._race = (promises) => new Promise((resolve, reject)=>{ promises.forEach(promise => { promise.then(resolve,reject) }) })
谈谈Vue diff算法的优势
- 同层比较
- 两端比较
如何解决1px细线问题
“从视频云转岗来的xgplayer精通选手”
一面:
- 栈跟对列的区别?给两个数组,手搓出几种不同的队列
- 栈跟堆的区别?
- HTML Collection, NodeList 区别?
- bind的参数有哪些,手搓bind如何进行原生设计?
- 手搓快排的实现,及各种如何优化策略,方法有哪些?
- localstorage如何做到不同标签页下的共享? 这个纠结半天,不是都是共享的吗?结果是要进行事件监听的,而且safria 隐身模式下,localstorage是被禁止的,相关操作直接报错。当时给忘记了
- 小程序的http封装?
- 进程间的通信?方法有哪些?
- css 选择器的优先级,(继承和属性的优先级给忘记了)
- splice,split,slice的区别?
- 0.1+ 0.2 问题
- js里面的数值 number如何进行存储,大小是多少,4byte如何分配的
- this指向问题,闭包中this的指向问题
- 小程序中数据渲染绑定的机制? 双向绑定原理?
- 其他的还有很多拓展深度及广度的问题有些忘记了(这里也聊了很多)
- 向面试官问些想问的问题 , 等结果(十分钟后HR小姐姐打电话说下接下来二面的时间问题)一面视频面试共一个半小时
二面
- 简单介绍自己
- 说说自己做过的项目
- 关于我第一个项目开发的流程及难点
- 将到http协议,http1.0,http1.1,http2.0之间的区别
- http中自己常见的状态码,说完200,301,302,307,400,403,404,500,503等等
将304忘记了,等面试官问到缓存,猛然醒悟,这是又来协商缓存的,讲下协商缓存与强缓存的区别。
- 聊到跨域问题,解决跨域的几种方法,说到 jsonp,然后手搓代码封装一个jsonp出来;
又让我讲下跨域资源共享(CORS),如何设计及处理
- css盒模型的相关知识
- prototype原型的相关问题,以及“proto”的指向等问题,原型链的相关知识
- 手搓双向绑定的封装实现,比如在input输入框中输入值在地下p标签内实时进行显示更新。
- promise的相关问题,当多条异步请求进行时,如何在所有异步请求完成后,再进行其他的同步的任务?有没有相关的api可以实现呢?第一个想到的就是事件监听,但如何监听呢,感觉没有具体场景很做,然后就说了promise.all(p1,p2,p3)可以处理多个请求,然后不同情况返回的值是什么,差点把自己给绕坑里去。
- 一个还比较简单算法题(果然头条每次都会考算法,差点翻车) ,如题: A和B玩抛硬币,A和B轮流抛一枚硬币,谁先抛到正面谁就获胜并结束游戏,硬币两面均匀。A先抛,请问A获胜的概率是多少? (哇,1/2吗?哈哈哈哈,仔细看看坑还是有的,有点像高中的求概率分布问题?)
- 手搓实现 css 一个自适应搜索框,输入框部分宽度自适应,搜索按钮宽度固定;
- 当时用的是双飞翼圣杯布局来实现的,原理一样;之后面试官问有没有其他方法,就又用了 flex布局
- 又是算法,手搓实现 给定字符串,统计字符串中出现最多的字母和次数,给出部分模板代码,自己手搓进行实现
- 其他问题也有些忘记了,扩展交流比较多,以及项目中遇到的坑
- 结束,向面试官问些想问的问题,等结果(一小时左右leader的三面就来了)二面视频面试2个小时左右
三面
- 简单的自我介绍;
- 介绍自己的项目;
- 自己在项目开发中遇到的挑战都是那些?
- 如何进行的前端学习?
- 你印象最深的文章都是那些?
- 从0到1整个web开发,如果你来负责,你会怎么做?感觉这个问题真的很有深度,我大概先分析这个web 站点的类型,根据不同的复杂程度或者仅仅管理员的后台界面,选择不同策略,之后从技术选型开始,比如react相关生态,Vue相关生态,后台UI组件的选择,css预处理器的选择less or sass等等,
然后考虑是否自己搭建架构,还是省事用官方的Cli脚手架工具。
搭建基本的架构,比如http的封装,css样式的统一,比如淘宝官方的统一样式库都可以进行借鉴和二次开发,然后,基本小组件的封装,比如弹框,按钮,loding状态等等可复用性的组件
之后就是开始协调项目团队进行任务分配,进行相关的工具进行项目管理,使用git进行版本控制,协调组员的分离配合开发,避免重复性工作或者冲突。大概聊到差不多后,leader说了句,你忘了性能啊?
然后我就谈下如何进行性能优化,
1.减少http请求
2.对相关的静态资源比如img,svg等放在服务端,或cdn上面.
3.对图片进行懒加载
4.减少DOM操作
5.避免更多的重绘或回流
6.进行代码压缩等等
- 你实习的目标是什么?
- 你每周上班时间能有多久?
- 一定要有创新能力,很重要
- 让你学习React 你能在多久时间内能上手开发?(当时没怎么用过react)
- 其他的问题也忘记了,一些学校与公司实习的问题
- 整个过程语速比较快,丝毫不拖泥带水
- 问我有什么想问的问题?大概聊聊业务处理跟学习时间的平衡。
头条四面(HR)
HR也问了很多相关项目的问题,个人学习,性格,优缺点?什么其他的很多很多,感觉很nice,也很随缘。三观一般都没啥问题吧!
最后的最后
其实字节跳动对于校招的同学的前端方面要求并不高(甚至前端0基础也可以尝试),更多的是要求基础扎实、编码能力ok,比如操作系统(会被很多人忽略的一部分,需要了解一下物理内存/虚拟内存、页面调度算法等)、计算机网络、数据结构这样的专业课程都会有一定的考察,前端部分对于计算机网络(dns解析、tcp/udp协议、http/https、滑动窗口、慢启动等知识)可能考察更多一些,也需要了解一下基础的数据结构(二叉树、栈、队列、链表)和基础算法题
祝大家都能拿到自己想要的offer呀~
全部评论
(0) 回帖