前言
上个月底的时候向字节跳动投了简历,本来也是本着试一试的心态的,上星期收到了字节跳动效率工程部门的hr小姐姐的电话约面试了。
后来因原本约定的时间有另外的事情,就跟hr小姐姐改了时间,效率也是十分棒。
面试准备
在网上看了许多大家的面经,边复习边总结。
重新看了一下自己当时投的简历,做好被问的准备。
复习常考的算法。
面试进行
面试前奏
-
先是自我介绍,说了一下自己的基本信息,介绍了自己的项目。
然后面试官对我说,可以说一下自己对一些框架、工具的熟悉程度、使用过哪些,都可以说一下 -
git的常用命令
git init
初始化:创建一个git仓库,创建之后就会在当前目录生成一个.git的文件
git add filename
添加文件:把文件添加到缓冲区
git add .
添加所有文件到缓冲区
git commit -m "提交的说明"
git status
查看git库的状态
git branch 分支名
创建分支
git checkout 分支名
切换当前分支到指定分支
git checkout -b 分支名
创建分支并切换到创建的分支
git merge 分支名
合并某分支的内容到当前分支
git branch -d 分支名
删除分支
git pull
从远端库更新内容到本地
git push
将更新内容提交到远程仓库
还有许多就不一一举例了
- 分支和主干的管理,最后的代码是怎样的
分支:不会影响整个项目里面的主线文件
git branch 列出本地分支,带*号表示当前所在分支。
git branch -r 列出所有远程分支。
git branch -v 列出本地命令。
git branch [本地分支名称] [远程分支名称] 创建本地分支。
git checkout [分支名称] 切换当前分支。
git fetch 获取分支信息,其它同事添加/删除了远程分支,你得fetch一下才能看到。
git push origin [本地分支]:[远程分支] 提交分支,如果创建此分支则为git push origin 本地分支名。
git merge [分支名称] 将某分支合并到当前分支,仅是合并到了本地,因此合并完成后还需要push。
————————————————
版权声明:本文为CSDN博主「阿甘人生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/phpwww/article/details/44339647
-
除了前端,还接触过哪些其他的技术
-
介绍一下我自己的某个项目,为什么选择用vue
面试高潮
后来面试官直接出题,再从中发散地提问
1
const shape = {
radius: 10,
diameter() {
return this.radius * 2;
},
perimeter: () => 2 * Math.PI * this.radius
};
// 下列语句的返回值分别是什么?
(diameter => diameter())(shape.diameter);
(s => s.perimeter())(shape);
-
解读
-
形参、实参
-
立即调用函数
1.js 中的立即执行函数
2.Javascript-立即调用函数表达式
3.IIFE(立即调用函数表达式,自执行匿名函数)函数声明和函数表达式不同之处在于
1、JavaScript 引擎在解析 JavaScript 代码时会“函数声明提升”,提升当前执行环境(作用域)上的函数声明,而函数表达式必须等到 JavaScript 引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式。
2、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以 fnName() 形式调用。
用括号包裹是为了将函数声明转换成函数表达式,消除了 javascript 引擎识别函数表达式和函数声明的歧义,告诉 javascript 引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。立即调用函数表达式一般在3种情况下运用:
1、立刻执行的函数(注意:此函数因为立刻执行,所以只能执行一次,不能反复调用)
2、防止命名冲突,解决命名空间和变量污染的问题。
3、创建闭包,保存状态,隔离作用域 -
箭头函数和普通函数区别
- 声明方式不同
- this指向
箭头函数中的this是在定义函数时绑定,普通函数是在执行函数时绑定
箭头函数没有prototype(原型),所以箭头函数本身没有this,它的 this 是继承它的父作用域的(即上层作用域);
箭头函数不能直接使用call等方法来修改它的this指向,但是可以间接修改,去修改被继承的普通函数的this指向,然后箭头函数的this指向也会跟着改变;
箭头函数外层没有普通函数,严格模式和非严格模式下它的this都会指向window(全局对象) - 箭头函数的this指向全局,使用arguments会报未声明的错误
- 使用new调用箭头函数会报错,因为箭头函数没有constructor
2
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
- 用var、let、const分别输出什么
- var let const 区别
- 能否重复声明、是否可以声明前使用
- 局部作用域,为什么用let就是0 1 2
这里可以参考一下我的这篇文章
给了一道题
/**
* 设定如下对应关系
A: 1,
B: 2,
C: 3,
...
Z: 26,
AA: 27,
AB: 28,
AC: 29,
...
AZ: 52,
BA: 53,
BB: 54,
...
ZZ: 702
AAA: 703
AAB: 704
...
* 写一个转换函数,根据上面规则把一个字符串转换为数字
* str2Int('ABCDEFG') → 334123303
*/
function str2Int(str) {
var answer = 0;
for (var i = str.length; i > 0; i--) {
answer += Math.pow(26, str.length-i) * (str[i-1].charCodeAt(0) - 'A'.charCodeAt(0) + 1);
}
return answer;
}
console.log(str2Int('AAB'));
- css动画:transition、animate
- http常见状态码
1xx 表示信息,服务器收到请求,需要请求者继续执行操作
100 Continue 信息型状态响应码表示目前为止一切正常, 客户端应该继续请求, 如果已完成请求则忽略
101 Switching Protocol(协议切换)状态码表示服务器应客户端升级协议的请求(Upgrade请求头)正在进行协议切换。
2xx 表示成功,操作被成功接收并处理
200 服务器成功处理了请求并提供请求的页面。
202 服务器已接受请求,但尚未处理。最终该请求可能会执行,也可能不执行。
204 服务器成功处理了请求,但没有返回任何内容。
3xx 表示重定向,需要进一步的操作以完成请求
301 表示客服端请求的文档在其他地方,新的URL地址在Location头中给出,浏览器应该自动访问新的URL。
302 临时重定向,类似于301,但新的URL应该被视为临时性的代替,而不是永久性的。
304 客户端有缓存的文档并发出一个条件性的请求。服务器告诉客户,原来缓存的文档还可以继续使用。
4xx 客户端错误,请求包含语法错误或无法完成请求
400 请求出现语法错误。
401 请求要求身份验证(未授权),对于需要登录的页面,服务器可能返回此响应。
403 服务器拒绝请求(禁止)。
404 服务器找不到请求的页面(未找到)。
5xx 服务器错误,服务器在处理请求的过程中发生了错误
500 服务器遇到错误,无法完成请求(服务器内部错误)。
501 服务器不具备完成请求的功能(尚未实施)。
503 服务器目前无法使用(超载或停机维护,服务器不可用)。
505 服务器不支持请求中所用的HTTP协议版本。
- http头部缓存
53.HTTP缓存详解
面试尾声
- 面试官说因为时间有限,也就差不多了
- 问了几个问题,他们部门做哪方面的业务、对我这次面试的评价、给我的一些建议
面试官说到我的项目涉及面比较窄,要多涉及其他技术栈,多练习css布局
总结
个人第一次线上面试献给了字节跳动。当然我自己很清楚自己的水平,这次面试的体验很好,面试官小哥哥很温柔,我不会的地方也在引导我,就是我水平不够,真是难为面试官了hhh。
很多概念性的东西都是可以提前好好准备的,不然面试官放一道题过来,一问就问出你水平了。
所以说,我们还是要坚持不断学习,机会永远不会等你准备好了才来的,一起加油呀朋友们!