avatar-decorate
获赞
2001
粉丝
752
关注
7
看过 TA
1.3W
武汉理工大学
2025
前端工程师
IP属地:广东
四面八方offer来!!!
私信
关注
头像
2024-10-10 11:06
已编辑
字节跳动_抖音互娱_前端工程师
今天分享一下美团和蔚来面试中遇到的一些问题。1.(蔚来二面)在forEach和map里面对遍历的值进行改变会影响原数组吗认真背八股的同学肯定都记得,forEach不会返回新的数组,只是遍历每一项并做计算,map会返回新的数组,所以理所当然的想map不会改变原数组,forEach...会怎么样??想到这里就错了,这也是我当时的思路。事实上这个问题跟上面那个八股完全没关系。试想一个函数,传递了参数进来并改变这个参数,会不会对原来数据进行改变呢?这个题是在靠这个,需要分类回答。数组中数据为基本数据类型时,forEach和map都不会改变原数组;数据为引用数据类型时,map和forEach都会改变原数组。在使用 forEach 和 map 方法时,对引用类型元素的修改会直接反映在原始数组中。这是因为引用类型的元素实际上存储的是引用(内存地址),而非值本身。因此,通过引用可以访问和修改原始数组中的元素。而number,string,Boolean,null,undefined这些基本类型在栈内存中直接存储变量与值。2.(美团到家一面)为啥会出现箭头函数这一个问题可以去b站渡一老师的小视频里看看。肯定很多人跟我一样第一时间想到的是箭头函数和普通函数的区别,那为啥有这些区别,为啥要单独搞个箭头函数出来?难道只是为了简单吗。其实原因只有一个:消除函数的二义性。在出现箭头函数之前,函数可以直接被调用,也可以被new当作构造函数使用,这就是函数的二义性。而这种二义性的存在是会给开发带来负担的,因为创建者并不知道未来函数的调用者是如何使用这个函数的,所以后来先在命名上做了规范:小写开头的函数是直接使用的,大写开头的是构造函数。但这种规范也不是强约束,毕竟既可以Number(),又可以new Number(),所以为了消除这种二义性,创造了箭头函数和class,箭头函数只能() => {},当作普通函数调用,而class只能被new,这就刚好对应二义性的两种用法,解决这种复杂情况了。————————10.10补充————————感谢牛u的提示,这边还有一个点补充。箭头函数的出现解决了this的复杂指向问题。举例如图3所示,当调用show方法打印this.x的时候打印的是undefined。这是因为当代码执行到了setTimexout( )的时候,此时的this已经变成了window对象(setTimeout( )是window对象的方法),因此会在window上查找x,找不到,就输出undefined。而如果是箭头函数,箭头函数的this是定义时就确定的,因此箭头函数的this指向的是obj,输出的就是obj.x。这样就解决了普通函数在当作回调函数传递的时候this变化带来的麻烦,否则就要用全局变量或者闭包之类的方法。3.(美团到家一面)obj对象中有一个方法,用obj.a()和(obj.a)()去调用分别输出什么(a方法中输出this.name,obj和全局都有一个name属性)?这个题其实是当时考的一个输出题(图1)。下来尝试了一下,答案是没区别,都输出obj对象中的name。这个题我一开始以为(obj.a)()这种调用就跟let b = obj.a,然后调用b()这种形式一样,但不是这样的,这个点可以记一下。然后还要注意的一个点是,如果这个方法是箭头函数的形式(图2),那么this指向就不一样了,指向的是window。所以会在window上面去找name。那么这个时候输出什么?是不是很多人脱口而出,“输出hong!”恭喜各位掉到新坑了,这个时候输出是空(什么都没有:“”)因为let和const定义的变量是不会挂到window对象身上的,如果改成var就能输出hong了,大家可以自行尝试一下、(上面这个点个人认为还是很细的,一定要小心)这几个是自己踩过的坑,第三点应该很多同学都会想错。欢迎各位评论区交流~
菠萝包lime:佬说的太棒了,箭头函数这块我也看的渡一的视频,当时被问到还是挺爽的,直接从二义性回答。
24届软开秋招面试经验大...
0 点赞 评论 收藏
分享
第三期来了,惯例感谢牛u们的点赞收藏和花花~话不多说直接开始。1.(百度一面)什么时候会用到预检请求可能有些小伙伴还没了解过这个概念,那就整体介绍一下预检请求,看完就明白了。首先说下啥时候会用到预检请求:在CORS解决跨域的这套机制内会用到。在 CORS 机制中,客户端将请求分为了两种:简单请求和非简单请求(分类见图1);当请求为非简单请求时,就会触发浏览器发送预检请求,这是浏览器的行为。预检请求会向服务器确认跨域是否允许,服务返回的响应头里有对应字段Access-Control-Allow-Origin来给浏览器判断:如果允许,浏览器紧接着发送实际请求;不允许,报错并禁止客户端脚本读取响应相关的任何东西。所以,比如一个 POST 请求并且请求头添加了Content-Type: application/json ,浏览器判定为非简单请求,自己先发一个 OPTIONS 请求给服务器获取做跨域判定,获取响应后浏览器发现可以跨域,接着就发送真实的 POST。接下来的问题是:为什么预检请求选择了 OPTIONS 呢?来看预检请求的流程,如果是一个跨域请求,浏览器会自动给该请求带上 Origin 头部,标明当前请求的来源域;服务器判断这个请求是否允许跨域,就会在返回时,选择是否带上 Access-Control-Allow-Origin 头部,最后,浏览器判断 Access-Control-Allow-Origin 就知道,后续请求是否发送。这个流程中,对预检请求方法的要求:① 不需要带请求体,服务器判断的依据在 Request header 中;② 服务器返回不需要响应体,浏览器判断的依据在 Response header 中;③ 请求不会去修改服务器资源(幂等),要是一个安全的请求;④ 浏览器默认不会缓存,需要每次发送跨域验证;再看看 OPTIONS 的定义(图2),会有一种量身定做的感觉。下一个问题:为啥要先去发个请求判断能不能跨域,这样不是比较麻烦吗?我认为这个做法的优点有两个:① 如果类似浏览器这种,包含 CORS 机制的客户端发送的请求,每次都要经过一个复杂逻辑才能知道自己是否跨域,服务器的压力和用户体验是不理想的,那么预检请求就孕育而生:发送实际请求前,先发送预检请求询问服务器是否允许跨域,不允许就不发送实际请求,服务器只需要对预检请求进行跨域处理;② 发送预检请求是一种保护机制,保护资源不被未授权的请求修改。和授权服务很像,预检请求通过了,浏览器后续对同一服务的请求,不需要做跨域询问,服务端不想支持跨域访问,啥也不用做。2.(阿里国际一面)react组件的INP比较长,如何优化问到我这个问题的时候是没听说过这个概念的。INP(Interaction to Next Paint)是一个网站性能度量指标,用于衡量用户界面的响应性,即用户进行点按、点击或键盘交互后,到屏幕上绘制下一帧的时间。我认为这个指标的优化其实不太涉及到组件。先来看看一次交互是怎么组成的,一次交互可分为 3 个阶段(图3):① 输入延时(Input Delay)= 交互事件回调开始运行时 - 用户发起与页面的交互时,FID 度量的就是这段时间。② 事件处理(Processing Time)= 事件回调运行完成时 - 事件回调运行开始时③ 渲染延时(Presentation Delay)= 浏览器显示包含交互的可视结果的下一帧渲染时 - 事件回调运行完成时所以这三个阶段的总和就是总的交互延时,优化的时候应该尽可能的减少这三部分的耗时。三点的话分别有几个思路:首先对于输入延时,对于交互过程中执行时间过长的会阻塞主线程的任务应该尽可能减少,或者放到别的线程;其次是事件处理,也是一样的要让主线程上的事件处理尽可能快,同时可以对不同类型的输入建立优先级,进行分类;最后对于渲染耗时:减小dom大小,比如虚拟列表之类。除此之外我当时想到了不要让dom的层级或组件嵌套太深,缩短数据传输的链路,链路越长耗时肯定也越长。上面的内容详细来自于这篇帖子,有兴趣的牛u自行查阅哈:******************************************3.(阿里国际一面)一个秒杀按钮用防抖还是节流看到按钮可别想当然就说防抖啊,应该想一下这个场景需要什么。从功能的角度来说,用户肯定希望在事件到的那一刻尽可能快的点击抢购东西。如果是防抖,那么按一次重新计时一次,用户点了几下发现还不如不点,肯定不是我们希望的。所以用节流,在第一次点击后就触发,直到一段时间后才能再次触发。4.(快手三面)react的useEffect叫副作用函数,“副作用”是什么意思?首先回想一下什么叫做纯函数:给一个 function 相同的参数,永远会返回相同的值。这个概念在react中可以类比成,给一个组件相同的props,渲染出来的视图是一样的。那么副作用就是指一个 function 做了和本身运算返回值无关的事,比如:修改了全局变量、修改了传入的参数、甚至是 console.log()。在 React 中,副作用指的是与组件渲染结果无关的任何操作,例如:① 发送网络请求② 修改 DOM 元素③ 访问本地存储④ 订阅或取消订阅事件⑤ 改变组件状态外的变量等这些操作会影响组件的行为和状态,但是并不会直接影响渲染结果。想一下useEffect一般会做些什么是不是就很明了了(如发送网络请求或订阅事件,以及在组件卸载时清除这些操作)。下一期准备挑蔚来和美团的几个问题,大型连续剧不要错过,欢迎来个关注~这些问题自己确实也没实操过,大部分是我自己个人结合知识点消化理解的东西,有问题评论区可以批评指正。再次欢迎大家点赞收藏送花!
我的求职思考
0 点赞 评论 收藏
分享
不知道这个系列可以更新多久,我预期是希望逐步整理所有的我认为有价值的问题,趁着还有时间,多复盘一下,大概每篇更新四五个问题,在精不在多。如果大家觉得有用欢迎点赞收藏送花!1.(Minimax二面)react的单向数据流怎么理解,有什么好处?当时对这个概念了解的不太深入,没回答好,下来复盘我觉得可以按照如下思路展开。首先这个问题想回答好就需要理解几个概念:什么是数据流?什么是单向?为什么要设置成单向的?咱一个一个看看react组件中最常用到的数据有两类:state和props,state是组件内部自行维护的,props是父组件传给子组件的,下面说的数据我理解都指的是props。数据流:也就是数据在不同组件或节点之间的流动,比如a数据(引用类型)被b节点引用,又被b传递给c,那么a数据改变后会影响b,从而影响c,这就叫数据流。但是这种流动是双向的,因为如果在b或c修改了这个数据,其他的也会变化。单向:在react中,单向是”自顶向下“的,也就是react规定了数据的流向是从外层组件向内层组件进行传递和更新的,而内层组件是无法直接修改props影响外层的。那么为什么要用单向的形式?如果内层的组件可以通过修改props来修改外层的数据,那么外层使用到这个数据或者其他使用到这个数据的地方都会造成数据更新,UI渲染也会改变,这会造成数据紊乱和不可控。所以为了更好的可控性,react设计了单向数据流。除此之外还有一个好处,所有的数据更新是单向的,那么出现问题的时候会更好溯源,因为修改数据的链路是确定的,排查起来顺着调用链就可以一层一层找到问题了。2.(快手二面)如果用户传了一个很大的excel要解析,如何处理比较好?web worker如何和主线程通信?首先这个问题可以泛化到很多复杂计算上,而不只是excel解析,其次可以延申展开一些东西。‘web worker是JS里难得的多线程。在 HTML5 中,工作线程的出现使得在 Web 页面中进行多线程编程成为可能。众所周知,传统页面中(HTML5 之前)的 JavaScript 的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:JavaScript 中的 setinterval 方法,setTimeout 方法等),但是在本质上程序的运行仍然是由 JavaScript 引擎以单线程调度的方式进行的。在 HTML5 中引入的工作线程使得浏览器端的 JavaScript 引擎可以并发地执行 JavaScript 代码,从而实现了对浏览器端多线程编程的良好支持。HTML5 中的 Web Worker 可以分为两种不同线程类型,一个是专用线程 Dedicated Worker,一个是共享线程 Shared Worker。两种类型的线程各有不同的用途和主线程之间的通信是通过postMessage来进行的。简单的说,主线程用postMessage向webworker推送消息,子线程用onMessage接受并处理,处理完之后在子线程内调用postMessage将结果返回给主线程,主线程同样用onMessage接受。具体内容请查阅MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers3.(灵犀互娱一面)多个web worker如何保证顺序?还好当时面试官只是提了一嘴,没让我解答。这个问题属于上面的问题的延申版本,其实没了解过具体方式也能猜个七七八八(类比文件切片上传之类的)。要想保证顺序,最简单的方式就是在给不同web worker分配任务时附带上一个唯一编号,在web worker处理完返回结果时也将这个编号一起发回给主线程,在主线程中按顺序重组。查了一下,webworker自身也提供了all和race等方法,这些其实就是在promise的基础上封装的(想来也正常,毕竟不同线程,肯定要异步返回)。有一个很详细的知乎文章,有兴趣的uu们自行查阅哈:https://zhuanlan.zhihu.com/p/41431253#:~:text=web-worker4.(快手二面)setInterval准确吗?感觉大家可能也看过,但是这个问题还是比较有意思的。答案是不准确,为啥呢?嵌套的 setTimeout 相较于 setInterval 能够更精确地设置两次执行之间的延时。下面来比较这两个代码片段。第一个使用的是 setInterval:let i = 1;setInterval(function() {func(i++);}, 100);第二个使用的是嵌套的 setTimeout:let i = 1;setTimeout(function run() {func(i++);setTimeout(run, 100);}, 100);对 setInterval 而言,内部的调度程序会每间隔 100 毫秒执行一次 func(i++)(图1),时间开始计算的位置是调用内部方法的那一刻,因此第一次方法结束到第二次开始之间的时间间隔其实是小于100ms的,这就是为啥他不准确。再看看setTimeout(图2)。时间开始计算的位置是内部方法调用结束的时刻,也就是说两次方法之间的时间间隔是准确的100ms。好处在于如果内部方法调用的耗时比较长,那么这个方法也能确保两次调用之间的时间间隔。延申:如果setInterval的内部函数执行耗时大于设定的时间间隔咋办?在这种情况下,JavaScript 引擎会等待 func 执行完成,然后检查调度程序,如果时间到了,则 立即 再次执行它。极端情况下,如果函数每次执行时间都超过 delay 设置的时间,那么每次调用之间将完全没有停顿。5.(百度一面)语义化标签如果没加样式,跟div、span这些非语义化标签有啥区别?这个就看大家对语义化标签的理解了。首先肯定能想到的一点就是更方便理解,看到header就知道是顶,看到aside就知道是侧边栏,但是这些任务div都能完成,区别在哪?1.即使在没有CSS的情况下,HTML页面也能呈现出很好地内容结构、代码结构。语义标签具有默认的CSS,比如html5之前的h1、h2等等就是语义化标签,他们表示几级标题;虽然我们在html没有引入任何css时,我们仍然可以看到h标签有字体放大加粗的效果。 实际上,html本身是没有表现的,我们看到例如 h1标签是粗体,字体大小2em,加粗;strong是加粗的,不要认为这是html的表现,这些其实html默认的css样式在起作用,所以去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML结构的优点,但是浏览器都有有默认样式,默认样式的目的也是为了更好的表达html的语义,可以说浏览器的默认样式和语义化的HTML结构是不可分割的2.不仅人更容易看懂,也更利于机器看懂,对SEO更友好。再次感谢大家的点赞收藏和花花
软件开发2024笔面经
0 点赞 评论 收藏
分享
一直面试只能让你把会的背的更熟,但想进步还是得回头看看不会的问题。今天回顾一下我遇到的一些有价值的问题,结合我自己的一些理解对这些问题尝试解答一下,相信对大家一些知识的理解也会有些帮助(有问题的话欢迎指出)。有用的话感谢大家点赞收藏送花~1.(滴滴提前批二面)Vue开启了keep alive之后会经历哪些生命周期?缓存了什么东西?这个点我自己是没有仔细思考过的,当时面试官提问vue的生命周期,我提到了Vue开启keep alive前后生命周期的不同,面试官拓展的问了这个问题。背八股的时候都背过,使用<keep-alive></keep-alive>组件包裹后可以在切换路由的时候不必销毁组件。并且会多出两个生命周期:activated和deactivated。其中activated在组件渲染的时候执行,deactivated在组件隐藏时执行,因此将这两个生命周期对比mounted和beforeDestory来学习。组件在初次渲染的时候会经历从beforeCreate到mounted这整个阶段,在后续切换的过程中则只会经历activated,随后的beforeUpdate和updated都会经历,隐藏时经历deactivated,最后销毁的时候才会经历beforeDestory和destoryed。那么缓存了什么?我们知道在mounted阶段,虚拟DOM转为真实DOM,此时data,method,虚拟DOM都有了;而activated阶段可以不经历前面的钩子,直接挂载DOM,说明keep-alive缓存了虚拟DOM,并且还有所有的数据/方法,也就是缓存了组件实例。如果面试阶段没有见过这个题,可以从每个生命周期干了什么开始联想,其中走到mounted阶段拥有了什么,那么actived阶段就也会有这些。2.(4399一面)http1.1的情况下,一个网页的图片是一张一张加载还是一批一批加载的?首先回顾一下http1.1的特性:● 默认长连接,新增响应头Connection:keep-alive字段,保持TCP连接不断开● 管道化:基于上面长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回● 缓存处理:新增catch-control字段● 断点传输机制。文件传输时如果遇到网络故障,可以从已经上传/下载好的地方继续请求,不用从头开始其中第二点提到的管道化基本可以解答整个问题,虽然可以发送多个请求,但是返回的顺序还是有序的。因此虽然TCP最大连接数有6~8个,但是返回时还是顺序返回的。但是需要注意,如果严谨一点的话还是要考虑一下预加载的情况。例如,当浏览器解析到 HTML 中的<link rel="prefetch">标签时,它可能会提前发起对指定资源(包括图片)的请求,这样在真正需要显示该图片时,可能已经加载完成或者部分加载,从而在一定程度上出现看似一批加载的情况。3.(Minimax一面)eval和new Function的this指向问题:eval的this指向可以看这篇,很详细:https://ayk.moe/articles/javascript-change-this-in-eval-function/index.html简单的说:eval函数只要是在全局直接运行或者是通过一个函数调用执行、作为对象属性被调用执行这种间接的执行方式,他的指向都是全局作用域。他不能直接被call/bind/apply改变this指向,改变的思路是在eval外面包一层函数,改变外面这个函数的this指向。new Function:使用 new Function 创建的函数,它的 [[Environment]] 指向全局词法环境,而不是函数所在的外部词法环境。因此,我们不能在 new Function 中直接使用外部变量。如果你对这块不熟悉,来看看这个:https://zh.javascript.info/new-function4.(Minimax二面)React:在if else里书写hooks,为什么不可以?我用我自己比较容易理解的话术来简述一下关键原因,这里面的具体细节还是比较复杂的,有兴趣的牛u可以找找资料了解一下。react的fiber树有两颗:current fiber树: 当完成一次渲染之后,会产生一个current树,current会在commit阶段替换成真实的Dom树(可以看成虚拟dom转真实dom)。workInProgress fiber树: 即将调和渲染的 fiber 树。再一次新的组件更新过程中,会从current复制一份作为workInProgress,更新完毕后,将当前的workInProgress树赋值给current树。workInProgress tree上有一个memoizedState属性,在函数组件中,memoizedState在一次调和渲染过程中,以链表的形式存放hooks信息。每一个hook函数执行,都会产生一个hook对象,里面存放了hook的当前信息,然后会以链表的形式串联每个hook对象,并赋值给workInProgress的memoizedState。每次组件更新的时候,会先复制一份current tree到workInProgress tree,此时在workInProgress上进行更新。一旦在条件语句中声明hooks,在下一次函数组件更新,hooks链表结构,将会被破坏(某个节点可能被跳过),current树的memoizedState缓存hooks信息,和当前workInProgress不一致,如果涉及到读取state等操作,就会发生异常。以上很多是自己的理解,可能讲述不准确但有助于自己理解,欢迎评论区留言指出错误~
24届软开秋招面试经验大...
0 点赞 评论 收藏
分享
第二个秋招总结帖,相比起上一次总结,最后的三家也顺利面完,正在泡池子。本贴详细记录一下投递的各家情况和tl。(由于本人在实习期间面试,流程推进比较慢,基本同一家的两轮面试之间都相隔一周左右,但面试后约面相隔基本都是1~4天)笔试/简历挂:1.OPPO:7.31投递,约三周后简历挂。2.大疆:8.5投递->8.11笔试,一周左右笔试挂。3.联想:8.5投递->8.22测评->8.25笔试。联想测评和笔试一起发的,但是笔试做的很烂,确实该挂投递/笔试测评后没消息的:影石、网易雷火、旷视、拓竹科技、完美世界、腾讯音乐一面完:1.阿里国际:8.17投递->8.30一面。阿里国际是先一面再笔试,一面问的很多,会有些压力。笔试太晚不想笔了。二面挂:1.美团到店:8.1投递->8.17笔试->8.21一面->8.29二面。二面当天挂,第二天被到家捞起。2.蔚来:8.3投递->8.14笔试->8.23一面->9.2二面。二面完一周挂。过了一周第二志愿被捞起,竟然要重新笔试,笔不了一点。3.Minimax(提前批):8.3投递->8.20一面->8.28二面。二面完两周挂。Minimax面试官很有水平,但问的确实太难了。。。三面完泡池子:1.快手:8.17投递->8.21一面->8.26二面->9.2三面->9.14录用评估。部门:用户增长,目前牛客没看到有oc的。2.百度(提前批):7.31投递->8.22一测评>8.30一面->9.5二面->9.9三面->9.24录用评估。部门:安全部门,能力平台部,目前牛u们也没看到oc的。3.4399:8.3投递->8.12笔试->8.20一面->8.24二面(hr面)->9.4三面。4399二面是HR面,会问薪资,但是既然进了三面,说明薪资应该问题不大,只是还在泡着。4.京东:8.1投递->8.24笔试->9.10一面(hr面)->9.13二面->9.18三面。部门:京东零售。一面是hr面,问了三面面试官,应该目前都是三面hr面了,当时比我前一批的同学参加了线下四面,今天意向了,不知道没有四面的是什么情况。5.顺丰:8.12投递->8.29笔试->9.9一面->9.14二面->9.19测评->9.24三面(hr面)。部门:顺丰科技。顺丰的测评是二面完才发的(也有牛u是一面完发),三面hr面会问薪资。6.灵犀互娱:8.12投递->8.17测评->8.31笔试->9.10一面->9.13二面->9.20三面。部门:技术中台:感觉部门只有一个hc,被我hxd拿走了,大伙一块泡吧,哈哈。意向:1.滴滴(提前批):7.31投递->8.16一、二、三面->9.13意向。滴滴提前批两面间隔1010分钟,这样好就好在一口气搞定或挂,至少在这中间不会拖着。2.美团到家:9.3一面(8.30约)->9.11二面->9.14三面->9.23意向。其实面完当天下午组内ld就加wx了,只是可能中间有个中秋节,把我忘了,意向发的比较晚。3.字节:9.19转正答辩->9.29oc/意向。字节是转正的,所以只能给各位转正的牛u们一个offer审批大致的参考时间了。主动结束流程:1.虾皮:8.18投递,约9.7一面,由于那个时候有点忙不过来了,就拒了。2.用友:8.7投递->8.12测评,笔试一直和自己时间冲突,实在抽不开,拒了。3.去哪儿:8.5投递->8.17测评,应该是不会去,也拒笔试。4.拼多多:8.3投递->8.5测评->8.25笔试,约面的时候流程到后期了,不想面了,拒面试。由于没笔试没后续的:1.科大讯飞:8.5投递->8.5测评。其实约面很快,可能就过了两天就约面了,但是当时刚开始准备,感觉没法面,同时约的时间跟组内分享冲突了,就搁置了,后续又两次错过笔试,无缘了。2.bilibili:8.3投递,发过一次笔试,没时间笔,就没有后续了。给各位参考一下,各位uu有相同部门的消息及时交流哈,评论区欢迎留言
软件开发投递记录
0 点赞 评论 收藏
分享
头像
2024-10-23 12:04
已编辑
字节跳动_抖音互娱_前端工程师
面试70场,感觉我的预感都比较准确,感觉过了的都过了,感觉挂了的都挂了。我的经历来看,遇到下面的情况或者听到下面的话术,基本就稳啦!1.面试官在反问的时候特别详细的介绍部门情况:印象最深刻的几场面试,阿里国际一面,快手三面,美团到家二面,阿里灵犀一面。这几场面试中面试官都特别详细的介绍了产品业务和技术栈,详细到感觉是他在面试而不是我在面试,毫无意外这几场面试很顺利的通过了2.面试官在面试过程中对你的某一点回答表现的很感兴趣:比如美团到家二面反问的时候,我提到了美团的Ketta业务,面试官眼前一亮说:“看来你还是有了解我们的业务动态哈”,当时就觉得稳了3.你能够偶尔调动面试氛围,整体面试流畅,如果偶尔引得面试官笑了(不是扶额苦笑哈),这种氛围的加持也能极大提高面试通过率4.反问面试官个人表现,面试官给出很多正向反馈,比如“各方面都挺全面的”,“基本功比较扎实”,“我觉得挺好的”,甚至有的面试官直接说“我这边给你过了”,这些情况基本就稳了那什么时候感觉是要挂了呢:1.有很多东西不会,特别是一开始问的问题就开始卡壳,面试体验很差,很不流畅2.前面回答的一般,有一部分没说出来,手撕部分也没完成3.面试官一直在重复一个问题,或者对一个问题反复解释,这个时候你可能没回答到他的点上,可能就没达到他的预期但是以上也不一定哈,也有很多绝地翻身的机会,不管遇到啥情况,都不要面到一半就开摆了,面试有时候可能就是一瞬间决定了你能不能过,多去创造这种机会
自闭咕:多看知乎的c++笑话,亲测可以有效把面试官逗乐
听到哪句话就代表面试稳了...
0 点赞 评论 收藏
分享
今年5月至9月,我有幸进到字节抖音进行为期4个月的暑期实习,成为一名前端开发实习生。我相信有很多牛u跟我一样,刚进去的时候不知道到底该做些什么,该怎么上手,怎么总结。做的活大部分是dirty work,或者是业务需求,如何沉淀技术亮点?下面我从我自己个人的一些经验出发,总结几点我认为比较重要的,可能对大家有所帮助。1.在landing阶段明确自己实习的目标如果你是一段日常实习或者是非秋招阶段前的暑期实习,那么大概率是为了一段漂亮的履历丰富自己的简历,那么你实习的目标就是在做需求并精进自己业务能力的同时深入挖掘每一个大需求中的亮点,并做好总结。如果你是秋招前的暑期实习,那么首先需要明确自己的目标是什么:是为了一段履历,为后续找工作铺路?还是为了争取转正名额,最后留在这里?这些需要你在进入公司后的landing期内做出最初的决定。一般所有公司对于实习生都会有一段融入时间。以字节为例,我们部门的landing期为两周,第一周会看各种文档,比如团队技术栈、参与产品的业务介绍、产品功能介绍以及各种培训考试;第二周会上手写一个小demo,熟悉组件库、react和基本的技术框架;之后就会慢慢上手接触需求。业务上:在这两周,要多跟mt或者ld了解团队业务背景,比如大团队细分为哪些方向,不同的方向在做什么业务和产品,在整体链路中属于哪一环,自己参与到的产品当前的进展和本Q目标等等,业务内容是否符合你的期望,产品目标是否体现出了这个产品或者部门的发展前景,这些跟自己未来的发展也有强关联(比如当前已经过于成熟,没什么可做的了,那也许会有裁员风险;比如当前业务处于初期,那么后面入职后可能很累,或者压力很大,不确定性比较强)。技术上:在这里工作是否有很多技术项可以接触?如果要作为第一段正式工作,我认为一定是要能带给你技术成长的才更适合,如果你看完了他们的文档,通过交流也没有发现有什么技术沉淀,那么建议以此作为跳板去找更优秀的工作。团队氛围上:团队氛围很大程度上决定了你未来工作的体验。团队成员工作状态怎么样(是否比较有活力,上下班时间),团队工作外的氛围如何(成员间关系、周末活动、团建),团队技术氛围怎么样(平时会不会注重体验做专项优化、会不会有自己的想法推动落地),这些在landing期内通过观察和与同事沟通就能知道的差不多。我在实习期间,深刻的感受到了团队的技术氛围很浓厚,并且大家周末会约着打羽毛球、健身、特种兵徒步,也参与到了团建中,这种团队氛围让我产生了很强的留在这里的欲望。并且我认为周围的人都是很有思想的,他们会真正产生想法并推动落地,让我觉得有很多可以学习的点。在这段时间明确自己的目标,后续的实习才好安排主要内容。2.在不同的阶段明确主体目标如果你的目标是转正,那么要跟ld确定好是否有转正hc,是等额还是差额。如果没hc那就把重点放在秋招把。如果目标是转正,我的经验是前期(8月前)认真实习,做好需求,并保证质量,这个阶段的努力是给ld和mt留下好的印象分。后期(8月后到答辩)匀一部分时间出来给笔试面试和复习,这段时间的目标是为了并行秋招和转正,所有两边都要兼顾好,前期打下了基础并做好了总结,后面写文档、复盘、整理面经都会顺手很多。3.主动跟ld或mt要需求,主动约一对一总结会我认为避免dirty work的方法之一就是主动要某一块的需求。当你做完第一个小需求的时候,就可以主动跟mt去要大型需求或者其他活了,比如你看中了那一块,希望参与,或者觉得有哪些可以优化的点,都可以跟他们去提出想法。一来是凸显出你的主动性,二来是把选择工作内容的权力尽可能的掌握在自己手里(也许有用)。我是经常跟带我的同学要需求,实习期间一共三个需求,全是大需求,所以后面就有的沉淀。主动跟老板约一对一总结会。这是你在老板面前表现的机会,老板不一定会知道你最近在做什么的,所以你的情况要主动去跟他同步。大概两周一次或者一个月一次,这样的频率就是每次会议都有内容可以说。这里有我自己的一些经验(也来自于我老板给我的建议):①提前书写总结会的文档。可以从近期工作内容和产出、收获、自己本阶段发现的问题和不足、下一阶段的规划展开。②总结文档🈲空话。最好是你列举的每一点都能写上一到两个具体case,如git使用不熟练不规范,出现了xxxx问题,原因是xxxx。有case非常重要!!!③文档一定要体现自己的思考。ld可能不了解你做的事情,但从你的总结中看到自己的思考,这点是与你个人的发展潜力挂钩的,综合评判的时候一定有帮助。4.及时总结我在实习期间,写了四个需求总结,写了两个技术方案,两个团队分享。个人的习惯是在开发完一个需求后,重新复盘自己的开发思路、遇到的问题、新学习到的技术框架或技术栈,还能优化的点之类的。这些总结文档老板是会看的,所以当他看到你平时的总结习惯,特别是里面自己的一些思考的时候,一定会给你加分的。写总结还有一个好处,你所有的实现细节、思路都在里面,这就是你后面转正文档的主要内容,前期写好,后期写转正答辩文档就轻而易举了。5.需求全是业务需求,如何沉淀技术亮点写上简历?我想这个问题应该是很多uu遇到的。我自己有几个小建议:①多看一下其他同学的内容,把技术难点偷一部分。一个大型需求有几个同学同时开发,那么其他同学那边可能会有能偷的点,比如服务端渲染之类的技术点,抽空去看这部分的代码,去问他实现思路和原理,自己再去拓展了解和延申,这就是简历的一个亮点了。②多去思考自己的业务逻辑或者代码有什么可以优化的点,比如复杂的计算能不能开启web worker优化?真正开发中没用上可以自己私下尝试一下,自己没有尝试过可以多去了解一下大致的实现细节,只要能讲明白,那不也可以作为简历的一个亮点吗?毕竟面试官可不知道你做了没有作为实习生,老板或者mt不会一上来就给你很难的需求的,也不会接触到太多的技术,想要有亮点,一定要多去自己发现和思考。平时做好总结,多多沉淀,不管什么活都认真干好,一定会在老板们心中留下好印象。对你后续的简历书写、秋招都有好处。最后祝大家实习顺利、秋招顺利。四面八方offer来!!!欢迎大家点赞  收藏  评论  留言,方便的话送朵花花,哥们想要个领航员挂饰。欢迎评论区交流。以上是自己的个人经验,希望帮到大家
平安海拉尔:要是能在实习前看到这篇帖子就好了
投递字节跳动等公司10个岗位
0 点赞 评论 收藏
分享
头像
2024-09-30 10:42
已编辑
字节跳动_抖音互娱_前端工程师
目前我的秋招已走到末期,所有的面试基本都结束了(个别厂可能还有hr面),目前手上有滴滴、美团的意向,收到了字节的oc,还有其他6家正在泡着。这期间有挺多牛友问如何兼顾实习转正和秋招,我觉得回顾过去两个月,自己成功转正并且秋招也有收获,我可以给出一点个人的经验。先简单介绍一下个人bg:投递岗位:前端开发。双2本硕、实验室项目经历两个、实习经历一段。研究生期间成绩不错,拿到了国奖,也靠这个东西过了很多简历关。实习期间是在字节抖音,需求紧张时工作时间早10晚10,不紧张时早10晚8,周三会去跟同学三国杀。下面是我个人的一些经验:1.前期努力干活,后期平衡时间如果你有转正想法,前期的一两个月一定要努力干事情,这点可以说是卷,但更多是要凸显出你对一个工作的负责的态度。很多ld或者mt可能会说不用卷,但要不要卷一下自己心里有杆秤。我的话,前期写需求或者自己看东西基本都会到八点半九点半,时间不早不晚,但是确实也不是卡点下班,干的事情会被老板看到的,也是一个印象分。我是7月30左右开始准备秋招的,那个时候陆陆续续投简历,八股重新看。到后面笔面试多起来了,就需要重新平衡时间。这个时候除了很紧急的需求或者第二天要发布的情况,其他时候都可以提早走,这个时候你的印象分已经留下了,mt和ld对你的工作能力也已经有一个认识了,大家都知道这个阶段是秋招的时候,所以不用担心早走会怎样,回去准备自己的面经、刷题或者笔试,再到后期面试也尽量安排在这个时间。2.抓住碎片时间我上班通勤时间40分钟左右,其中地铁半个小时从地铁站出来到食堂吃早餐大概有一个小时时间,这段时间可以用来背面经;中午午休的时候就少刷点视频,打开语雀(或者别的软件)开始背书,晚上早点走,或者下班回到家刷刷题做做笔试。应该很多牛友都会熬熬夜,我自己就是,与其熬夜玩手机,不如这两个月就多背背书,平时玩到一点,这段时间背到一点,睡得还香一些。3.不要海投选择自己想去的厂,或者头部大厂,这些投递起来流程推进比较快,而且面试流程固定且规范。小厂或者自己一定不会去的厂就没必要浪费时间了。我实习期间投递了30家,到后面根本不敢再投了,一定是忙不过来的。后面想想,什么minimax、蔚来、去哪儿,这些自己根本不会去的厂,投递和面试也浪费了不少经历,面的还一团糟。所以大家投递的时候一定考虑清楚,有选择的投递,切忌开一家投一家。4.错开工作时间我的原则是能错开工作时间的一定错开,所以在选择时间的时候没有合适的我都会留言说希望晚上7点或者中午1点面试。有很多公司是可以调整面试时间的,比如百度、美团、字节,基本都可以错开工作时间。但腾讯好像是直接约,没法改,这也是我一直没投的原因。如果一天之内面试多,建议可以集中面试,比如请半天或者一天的假,上午下午约满,充分利用这一天时间,实习生请一天假对公司没啥影响,同时也不在乎这半天一天的工资了。实在没办法调整的,隔三差五约个会议室面一下,其实也问题不大。还是那句话,不要担心老板看了对你有想法,身边的人都是这么过来的,大家都心知肚明。5.不要完全相信老板画的饼我身边也有同学相信老板的饼结果后面没hc的情况,永远要居安思危,在没有真正拿到offer的时候一切都不能说稳了,作为实习生,一切要以自己自身利益的最大化为标准,真正从始至终为你着想的只有你的父母和你自己。6.自己的需求要完成好到后期了,其实各方面能力都会有提升,有些东西做起来会比较顺手,这个时候为了腾出更多时间就需要提高效率,同时保证需求开发质量。不要为了秋招而糊弄mt或者ld,最终转正的权力还是在他们手上。7.最后,要相信自己有无限潜力这两个月是会很累的,并行这两件事本身就会耗费大量精力。我的想法是,就辛苦这俩月,后面就轻松了。事实证明,回到学校后看到大家还在苦苦秋招,去双选会,而自己已经可以开摆,帮学弟们搞搞项目,觉得还是值得的。在开始之前也一直犹豫,真的能行吗,需求做得完吗,有时间完整过完面经吗,有时间整理自己实习期间的内容吗???很多疑问,但是真的实施起来会发现,好像也没那么难,就是把平时玩的时间换成了学习时间。最晚的一天搞到两点半,但只要愿意做愿意努力肯定能做到。你永远不知道自己的极限在哪里,逼自己一下!8.最后的最后,越早投越好一家公司的秋招难度一定是会越来越难的,我同学拿到字节国际电商offer后,再去问hr,hr告知他的bg目前简历关都难过了。所以一定不要因为自己准备不充分就不投,早投早享受,或许大部分人准备的还没有你充分呢。当你并行成功,回头看看这两个月的努力,肯定会觉得不虚此行。加油大家!(前期有挺多小伙伴问简历怎么写,不知道有多少人想看看,感觉可以写一下)
我已成为0offer...:可以,但是bg稀巴烂的人只能海投了,海投都没几家理,而且我个人感觉的话,投的早不等于早筛,92先来,双非投的再早也得先泡着
实习与准备秋招该如何平衡
0 点赞 评论 收藏
分享
隔了几天才有时间整理三面面经,三面面试官聊业务,会看之前的面试评价,从里面挑之前面试官没问过的一些问题。没开摄像头,但聊起来沟通没啥压力。灵犀的三面好像都是一个面试官来面,所以面试得排队,可能比较忙就约的比较晚了。面经:1.分享一个所有项目经历中最有自豪感的事情,介绍一下自己做的事情2.微前端的意义和作用3.这些方案和工作是独立设计/实施还是跟mt一起完成的4.各子应用之前是否有通信5.子应用是类似与iframe的嵌入还是都挂在一个dom下6.各子应用对全局的污染如何解决7.怎么选择前端这条路8.本科期间没接触前端9.为什么选择读研之后再出来工作10.为什么选择了一个游戏公司11.平时玩什么游戏,挑一个玩的时间最久或者对你影响最大的一个讲一下12.逻辑题接下来的一道题直接想了二十分钟,好难的逻辑题。。。说了两个方案,感觉都有瑕疵给出一个平面上的点的数组(偶数个),每个元素是点的横纵坐标,怎么找到一条线把这些点分成数量相等的两半面试官说如果觉得很复杂那就是想复杂了,有很简单的思路,但我到现在也想不出来13.最近读过的技术相关的书籍14.自己学过的课程中哪个最感兴趣,学得最好15.(说了深度学习)有没有自己手撸过一些神经网络16.为什么不选择算法方向感觉偏聊天向,但是逻辑还是需要清晰的
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务