一面之前大概几天整个人其实很紧张,复习了好几天,周二下午开始了,面试开始的时候,其实没有那么紧张了,就开始了面试之路,啦啦啦啦啦
Q:知道线程和进程吗
答:布拉布拉
Q:了解过js的数据类型吗
答:…说的挺完整的
Q:怎么判断是数据类型
答:typeof和instanceOf,布拉布拉
Q:说一下 == 和 === 的区别及用法
答:布拉布拉
Q:知道tcp和udp的区别吗
答:布拉布拉
Q:知道tcp的主要用途吗
说了一下tcp3次握手,其他就布拉布拉
.Q:看一下这个能不能弹出
if ("0") {alert( 'Hello' ); }
答:可以弹出Hello
.Q: for in 和for of的区别
答:因为忘了一些,就说了一下map和forEach
Q:那forEach可以打断吗
答:不可以,布拉,好像说的有些问题
.Q:了解那个深拷贝吗?大概说一下
答:说了一下递归的,手写了一个代码
Q:除了递归的还会其他方法吗,简单的两三行代码
答:emmm,不会了,还没有了解过
.Q:看一下这个打印的顺序
<form onclick="alert('form')"><div onclick="alert('div')"><p onclick="alert('p')"></p></div> </form>
答:我就说这个应该是事件冒泡,p->div->form,也不知道对不对
Q:看一下这个题输出
let promise = Promise.resolve(); promise.then(() => alert("1")); alert("2");
答:先是2,再是1,布拉布拉
Q:关于promise主要用那些API
答:就之前用过then和promise.all
Q:那promise.all主要实现的功能是什么
答:布拉布拉布拉
Q:那它里面的promise是串行还是并行执行呢
答:并行的
Q:看一下这个继承的题吧
let animal = {jumps: null }; let rabbit = {__proto__: animal,jumps: true }; alert( rabbit.jumps ); // ? (1) delete rabbit.jumps; alert( rabbit.jumps ); // ? (2) delete animal.jumps; alert( rabbit.jumps ); // ? (3)
答:这个是true -》 null -》undefined
Q:用class重写一下这个函数
function Clock({ template }) {let timer;function render() {let date = new Date();let hours = date.getHours();if (hours < 10) hours = '0' + hours;let mins = date.getMinutes();if (mins < 10) mins = '0' + mins;let secs = date.getSeconds();if (secs < 10) secs = '0' + secs;let output = template.replace('h', hours).replace('m', mins).replace('s', secs);console.log(output);} this.stop = function() {clearInterval(timer);};this.start = function() {render();timer = setInterval(render, 1000); }; } let clock = new Clock({template: 'h:m:s'}); clock.start();
答:这个题卡了好久,不会写,最后也没有写出来,面试官给我大概讲了一下,引导了好久,感觉人很好
Q:知道http返回的状态码304吗
答:终于离那个改写题远了,开始了网络。大概说了一下
Q:那知道关于缓存的head,就是http的请求头吗
答:这个当时不太了解
Q:那Cache-Control了解过吗
答:缓存控制,布拉布拉,说了一点点,不太清楚
Q:那说一下position的属性吧
答:这个简单,我就说了好多
Q:聊一下居中吧
答:说了水平,垂直,水平垂直居中,布拉布拉。
Q:那说一下css动画都有哪些
答:随便说了几个
Q:那写一个从左向右移动,延迟300ms的动画
答:就开始写了
Q:说一下浏览器渲染的过程
答:这个很熟悉,就布拉布拉
Q:那回流和重绘知道吗
答:布拉布拉
Q:有用过性能优化的东西吗
答:从css,js,缓存方面都说了一些
Q:有用过Chrome DevTools吗
答:当时没有听懂,就说不会了
Q:那最后写一个题吧
"()" => true ")(()))" => false "(" => false "(())((()())())" => true
答:括号匹配,就是利用栈进行写
const str = "()())"; let show= (str)=>{const leftArr = [];for(let i =0;i<str.length;i++){if(str[i]=='('){leftArr.push(i);}else if(str[i]==')'){if(leftArr.length==0){return false;}leftArr.pop();}}if(leftArr.length!== 0){return false;}return true; }
整个面试过程感觉挺轻松的,大概面了快一个小时,面试官小哥哥人也很好,正在收拾东西回宿舍的时候,hr小姐姐打电话过来了,说让我准备二面,15分钟后开始二面了。
收拾了一下东西,准备开始二面了,看到面试官,感觉有点严肃,开始紧张了。
Q:自学前端多久了
Q:过去有哪些学习的方法
Q:书籍都看过那些
Q:学习前端的过程中遇到过什么难点
答:这个问题说了之后,被深追了问了好多。怎么解决的,具体栗子什么的。
Q:遇到问题通过书籍什么的没有解决吗
答:布拉布拉
Q:具体介绍一下项目的亮点和难点
答:说了好多,各种问题都问了,以及难点自己是如何解决的,具体解决方法等等。
Q:Date的一些API
答:说了一两个,不太熟悉。 Date.now() //获取当前时间毫秒数 。dt.getTime() //获取毫秒数。 dt.getFullYear() //年
Q:那说一下这个构造函数的原型链,及它的好处
答:我说了函数的原型链,没有说时间的
Q:项目中正则用过那些特性
答:说了分组和量词
Q:对修饰符和断言有了解吗
答:修饰符布拉,不知道断言
Q:对/g有什么了解,带不带它有什么区别
答:布拉布拉,说了一下
Q:用了修饰符在for循环中有哪些影响
答:emmm,不太会
Q:知道正则中的last-index属性吗
答:用于规定下次匹配的起始位置。
Q:状态管理除了redux使用过其他的吗,以及优缺点
答:没有用过其他的,就没有问了
Q:redux使用过程中有哪些困难
答:布拉布拉
Q:了解过单向数据流撤消的功能吗,就是状态回滚
答:emmm,不太了解。下来自己查了一下,感觉触及知识盲区
Q:觉得redux写起来有没有难用的点
答:就说了一下关于数据的处理的问题,用到了ImmutableJS,就造成性能浪费
Q:ImmutableJS的好处以及他的用处
感觉给自己挖了一个坑。就大概说了一下,返回新的对象
Q:主要使用它哪些属性和方法
答:使用了Map,其他的使用不多。
Q:关于pureComponent的了解
答:布拉布拉
Q:关于shouldComponentUpdate()有使用过吗
答:因为没有用过就没有说
Q:styled-component对比其他的库有什么有点
答:布拉布拉
Q:如何从组件中抽取全局的样式
答:就说了injectGlobal废除了,现在是creactGlobalStyle
Q:说一下http的幂等性
答:这个不知道,所以没有说
Q:说一下https密钥交互过程
答:布拉布拉
Q:http的协商缓存说一下吧
答:布拉布拉
Q:返回304的时候,还会更新哪些内容
答:这个当时说错了,emmm
Q:webpack中hash的配置,三种hash的差异及应用场景
答:没有配置过hash,说了hash,chunkhash,contenthash
Q:es6中let和const解决了es5里面的那些缺陷
答:布拉布拉
Q:变量提升做了那些事情
答:布拉布拉
Q:说一下事件循环吧
答:布拉布拉,说了好多
Q:同步任务放在哪里(执行队列还是事件队列)
答:布拉布拉
Q:那看个题console.log('1'); setTimeOut(()=>{console.log('2'); }); console.log('3');
答:1.2.3,,后来发现错了是1,3,2.
Q:看一下这个题
实现一个函数sum,运算结果可以满足如下预期结果: sum(1,2,3).valueOf(); //6 sum(2,3)(2).valueOf(); //7 sum(1)(2)(3)(4).valueOf(); //10 sum(2)(4,1)(2).valueOf(); //9
答:这个就函数柯里化的问题,然后开始手写
function sum(){var _args = Array.from(arguments);var _add = function(){_args.push(...arguments);return _add;};_add.valueOf = function(){return _args.reduce((a,b)=>a+b);}return _add } console.log(sum(1,2,3).valueOf());
Q:最后看一道题吧
我(心理):太好了12 3 7 6 5 4 输出 1234567
答:开始写
function Print(pRoot){const lists =[];if(pRoot === null){return lists;}const stack1 = [];const stack2 = [];stack2.push(pRoot);let i = 1;while(stack1.length !== 0 || stack2.length !== 0){const list = [];if((i&1) ===1){while(stack2.length !== 0){const tmp = stack2[stack2.length -1];stack2.pop();list.push(tmp.val);if(tmp.left !== null){stack1.push(tmp.left);}if(tmp.right !== null){stack1.push(tmp.right);}}}else{while(stack1.length !== 0){const tmp = stack1[stack1.length -1];stack1.pop();list.push(tmp.val);if(tmp.right !== null){stack2.push(tmp.right);}if(tmp.left !== null){stack2.push(tmp.left);}}}++i;lists.push(list);}return lists; }
面试了一个半小时,终于结束了,感觉好累,自我感觉有点悬,收拾东西回宿舍,祈祷过了。在回去的路上接到hr小姐姐的面试,告诉我准备3面,开心,准备下周面试。加油。
3.9,周二,三面开始了
13:30就开始坐在电脑面前等面试官,紧张ing
Q:说一下什么时候开始学习前端的吧
答:布拉布拉
Q:说一下学习前端的心得
答:布拉布拉
Q:博客大概多久更新一次
Q:最近总结过什么吗
Q:看书和看网站有什么差异吗
Q:最近从书上学到过哪些知识点
Q:聊一下项目
Q:为什么写这个项目,项目写之前的拆解
Q:代码的设计,以及设计流程
Q:使用了哪些技术,为什么用这个技术
Q:介绍一下style-component使用和其他对比的优点
Q:使用的是react,那有对比过vue吗
Q:你觉得用react写和纯js写有什么区别
Q:redux是解决什么问题的
Q:如果不使用redux呢
Q:介绍一下redux整个数据的流向
Q:订阅组件和redux更新的实现
Q:那redux是怎么进行更新组件中的数据,是更新state,还是props
答:state,布拉布拉
Q:那这个更新的是redux中的数据,那怎么映射到组件中
答:connect([mapStateToProps],[mapDispatchToProps],[mergeProps],[options]) :连接React组件与 Redux store
Q:hooks这块大概用来做什么
Q:如果不使用hook呢,有什么不好
Q:项目中技术的难点是什么
答:说了一下字符串解析的问题。提到了正则
Q:那正则还了解过其他吗,举个栗子
Q:项目用了多久
Q:那之后会对项目进行优化吗
Q:项目有没有部署到对外的服务吗,了解过部署吗
面完之后,面试官就说去找hr了,让我等会继续面,10分钟左右hr小姐姐就接着面了
Q:自我介绍一下
Q:有读研的准备吗
Q:到岗时间和实习时长
Q:有转正的需求吗
Q:自己的规划
Q:为什么会选择前端方向
Q:前端自学的渠道有哪些
Q:评价一下项目的亮点以及角色收获
Q:有没有难点,如何解决的
Q:了解字节的工作节奏吗
Q:如果工作不轻松的话有没有顾虑
Q:如果遇到比自己强的同学会怎么样
Q:还投过其他的公司吗
Q:offer选择看重哪些维度呢
Q:那你觉得氛围怎么样是比较好的
Q:在一个组织当中你会主动承担领导者的角色吗
Q:和同学之间的关系怎么样
Q:你觉得自己的短板是什么
结果hr小姐姐说过两天给,嘿嘿,整体感觉面下来就是开心,整个过程还是很轻松的,也比较幸运吧。接下来就是许愿offer。