欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字节跳动前端一面经历

程序员文章站 2024-01-29 14:00:04
...

今天参加了字节跳动的网面,对于人生第一次面试大厂,面试的时候真的很紧张!某天在牛客上看到字节招收Web前端实习生,我就不抱任何期望的投出了我的简历。然而竟然收到了一面通知。由于什么也没准备,一面自然而然地就凉了。不过这次也是一次经验,让我知道自己还有什么需要努力的地方,下面就写下这次面试的相关问题。

面试ing
1、自我介绍
2、知道css中的盒子模型吗

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
不同部分说明:
Margin(外边距) - 清除边框外的区域,外边距是透明的。
Border(边框) - 围绕在内边距和内容外的边框。
Padding(内边距) - 清除内容周围的区域,内边距是透明的。
Content(内容) - 盒子的内容,显示文本和图像。


3、你用过或者了解什么框架吗?

知道vue,现在比较热门,其他的不太清楚
其实有React、Vue、Angular三大主流框架


4、js的数据类型有哪些

8种。Number、String、Boolean、Null、undefined、object、symbol、bigInt。


5、跨域问题如何解决

同源策略:浏览器安全策略,同协议、ip、端口的脚本才会执行。
只要协议、域名、端口有任何一个不同,都被当作是不同的域
js跨域是指通过js在不同的域之间进行数据传输或通信


6、知道闭包吗

闭包就是能够读取其他函数内部变量的函数。
闭包的用途:可以读取函数内部的变量,并且让这些变量的值始终保持在内存中


7、说一下三次握手是什么

所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。
握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”:
(1)首先客户端向服务器端发送一段TCP报文,其中:标记位为SYN,表示“请求建立新连接”;序号为Seq=X(X一般为1);随后客户端进入SYN-SENT阶段。
(2)服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,其中:
标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据);序号为Seq=y;确认号为Ack=x+1,表示收到客户端的序号Seq并将其值加1作为自己确认号Ack的值;随后服务器端进入SYN-RCVD阶段。
(3)客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。其中:标志位为ACK=1;序号为Seq=x+1,表示收到服务器端的确认号Ack,并将其值作为自己的序号值;确认号为Ack=y+1,表示收到服务器端序号Seq,并将其值加1作为自己的确认号Ack的值;随后客户端进入ESTABLISHED阶段。服务器收到来自客户端的“确认收到服务器数据”的TCP报文之后,明确了从服务器到客户端的数据传输是正常的。结束SYN-SENT阶段,进入ESTABLISHED阶段。在客户端与服务器端传输的TCP报文中,双方的确认号Ack和序号Seq的值,都是在彼此Ack和Seq值的基础上进行计算的,这样做保证了TCP报文传输的连贯性。一旦出现某一方发出的TCP报文丢失,便无法继续"握手",以此确保了"三次握手"的顺利完成。此后客户端和服务器端进行正常的数据传输。这就是“三次握手”的过程。
具体图解:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc


8、TCP和UDP的区别有哪些

TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快
TCP和UDP协议的一些应用例子:
TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等等;UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。

原文:https://blog.csdn.net/buster2014/article/details/40082109 


9、线程和进程有何区别

进程是运行中的程序,线程是进程的内部的一个执行序列
进程是资源分配的单元,线程是执行行单元
进程间切换代价大,线程间切换代价小
进程拥有资源多,线程拥有资源少
多个线程共享进程的资源


10、同步机制有哪些

临界区,互斥对象,信号量,事件对象


11、链表和数组有什么区别

数组则大小固定,也无法灵活高效的插入,删除。而链表元素在堆上,无需这么麻烦。
数组静态分配内存,链表动态分配内存;
数组在内存中连续,链表不连续;
数组元素在栈区,链表元素在堆区;
https://blog.csdn.net/Jasminexjf/article/details/88847127


12、写代码:
定义单链表的节点(前端时间刷算法题独独没碰链表,考研也没考链表,这部分完全是靠大二的知识在写)

写一个反转链表:这部分我首先提出了一个方案就是重新定义一个链表,直接复制,然后面试官就说能不能重新定义。
在此基础上我拼命回忆大二数据结构学过的链表,然后找到了解决方案,反转链表中间那部分代码问题不大,面试官和我讨论的时候认为我这个方法只要让原链表加个空的头结点就行。问题就出在这里啦,我完全忘记如何初始化一个链接,往链表里面填入数据啦,之前刷leetcode也不是白板,白板写代码真的很暴露问题啦。

刚刚在网上也搜索了一圈反转链表的代码,大部分都是没有初始化,只写了中间的反转链表的函数。
不过这篇链接里还是有的:https://blog.csdn.net/bingocoder/article/details/88761047
还是要好好学习一下啦,白板不容易!


13、问了简历上曾经做过的东西

面试尾声
至此,到了面试尾声,面试官说他的问题问完了,问我有没有什么需要问他的?
我就问了两个小问题:
你认为我的个人能力有哪部分需要提升:前端的三大件,前端的框架至少要掌握一种
你们做的是什么,哪些人在做?
面试总结:
这次面试让我知道了实习的面试,多要提升对基础知识的储备量。
此外确定好自己以后的从业方向,写一些项目,不至于没有项目经历可说。
最重要的一点是,白板写代码的能力非常重要。这方面要多有提升,多在leetcode上刷题。