字节实习二面

网络体系结构分层(7、5、4)

答:

OSI七层网络体系结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP四层网络体系结构:物理层、网际层、传输层、应用层

TCP/IP五层网络体系结构:物理层、数据链路层、网络层、传输层、应用层

TCP、UDP协议属于哪一层,HTTP、HTTPS呢

TCP、UDP属于传输层的协议

HTTP、HTTPS属于应用层

TCP三次握手和四次挥手

三次握手:

  1. 客户端向服务端发起一个SYN包,其中携带有客户端生成的随机编号X
  2. 服务端接受到客户端的SYN包后会返回一个ACK确认包(X+1),同时返回一个SYN的包,服务端生成的自己的随机编号Y
  3. 客户端接收到服务端的ACK后随即返回一个ACK确认包(Y+1),随即客户端进入链接建立成功状态,服务端在接收到ACK包后随即进入链接成功状态

四次挥手:

  1. 当客户端向服务端发送的数据完成后客户端会主动请求断开链接,此时客户端会发送一个FIN包表明需要断开客户端向服务端的数据传输通道
  2. 服务端接收到FIN包后返回一个ACK包,表明知道客户端准备断开向服务端的数据传输
  3. 客户端接收到ACK包后随即断开向服务端的数据传输
  4. 服务端向客户端传输的数据发送完毕后,主动向客户端发送一个FIN包,表明服务端也将断开链接
  5. 客户端接收到后返回一个ACK包随即进入time_wait状态,服务端接收到ACK确认包后即断开
  6. 如果在time_wait时间内客户端没有再接收到数据,则客户端也进入断开链接的状态

HTTP和HTTPS区别

  • HTTP是明文传输的,HTTPS是基于SSL协议实现的对数据加密传输形式的HTTP。

  • HTTP默认使用80端口,HTTPS默认使用443端口

  • HTTP传输效率比较高,HTTPS传输效率较低

  • HTTP安全性较低,HTTPS安全性较高

  • HTTP不需要证书,HTTPS需要额外证书

HTTPS加密流程

  • 浏览器将自身支持的对称加密协议发送给服务端
  • 服务端接选出自身同样支持的对称加密协议,并且将自己的非对称加密的公钥一起返回
  • 客户端生成该对称加密协议的密钥,使用服务端的公钥进行加密并返回服务端
  • 服务端使用私钥进行解密,获得对称加密的密钥
  • 随后双方使用对称加密进行数据加解密

进程和线程区别

  • 进程是操作系统中资源分配的最小单位,线程是操作系统中CPU调度执行的最小单位
  • 线程属于进程
  • 线程与线程之间的数据共享是很容易的,进程与进程之间的数据共享比较困难
  • 一个线程崩溃后很容易影响到其他线程,进程崩溃后很难影响到其他进程

进程的状态及状态切换

进程的状态主要有:创建态、就绪态、运行态、阻塞态、挂起态

就绪态➡运行态:进程获得CPU的执行权

运行态➡就绪态:进程时间片到时间释放掉CPU

运行态➡阻塞态:进程需要进行IO或者进程等待的资源未到达

运行态➡挂起态:系统内存空间不足将部分进程挂起到磁盘

阻塞态➡挂起态:同上

同步和互斥的概念(没答好)

互斥:进程之间共享临界资源,需要保证各个进程对资源的互斥的访问临界资源,是一种间接制约的关系

同步:进程之间存在某种时序关系,例如进程A需要在进程B之后执行,是一种直接制约关系

并发、并行、异步的区别

并发:同一时间有多个进程在运行,进程处于交替执行的状态

并行:在多处理器的情况下,多个进程在同一刻由不同的CPU进行执行

异步:异步是和同步相对应的,同步是顺序执行而异步中,某个事件不需要等待其他事件是否执行完。

多线程是实现异步的方式。

java实现多线程的方法

  • 继承Thread类
  • 实现Runable接口
  • 实现Callable接口
  • 使用线程池

各种方式的区别(没答好)

因为java中没有多继承所以通过继承Thread来实现多线程的话这个类就没有办法继承其他类

使用Runable接口的话相当于将多线程任务和多线程创建和执行分离开了,并且继承Runable接口还可以避免单继承的问题

Callable接口类似Runable只是Callable接口可以定义带返回值的方法

线程池通过提前创建线程和保留部分线程来避免重复创建销毁线程的开销,提高了运行效率

线程池

线程池底层有一堆存活线程以及一个任务队列,创建线程池时有几个重要参数:核心线程数、最大线程数、存活时间、任务队列、拒绝策略

当我们向线程池提交任务时,线程池会检测当前是否有空闲线程,如果有则直接执行。否者将任务放入任务队列中,等待空闲线程执行。如果任务队列满了的话则会检测当前线程数是否达到了最大线程数,如果没有则创建一个线程来执行,否者执行拒绝策略。

线程池拒绝策略有哪些(忘了第二个)

  1. 直接抛出异常
  2. 由调用者来执行
  3. 丢弃任务队列中最老的任务
  4. 直接丢弃任务

Spring、SpringMVC、SpringBoot的区别和联系

PS:答得不好,当时脑子有点乱说的我自己都尴尬,其实是答道了关键的但是一直在重复说。

Spring是SpringMVC、SpringBoot的基本框架,它主要提供IOC和AOP两种功能。

SpringMVC是基于Spring的一个WEB层框架

SpringBoot是整合了Spring、SpringMVC以及其他的一些框架的一个框架,它其中内嵌有Tomcat服务器,使得开发Web应用更方便,屏蔽掉了以前Spring、SpringMVC框架很多的配置文件。

Spring Bean是否有并发问题

Bean是有并发问题的,但我们平常使用的Controller、Service这些Bean,主要是直接调用它的方法没有数据共享发生。

解决办法:Synchronized等同步方式

JVM的内存分布

运行时数据区:线程共享的方法区、堆,线程不共享的虚拟机栈、本地方法栈、程序计数器

堆和栈的区别

栈中主要存放基本数据类型,以及引用数据类型的引用

常用的垃圾收集器

CMS、G1

CMS基于标记清楚和标记整理

G1是基于Region的

Redis ZSET的数据结构,如何实现跳表

ZSet底层有两种数据结构:ZipList和跳表

当元素少时使用压缩列表

img

算法:二分查找的迭代、递归写法

​ 检测链表是否有环,有环则返回入环点

​ 两条链表返回是否相交,如果相交返回交点

​ 两个循环链表是否相交,如果相交返回交点

字节跳动是一家知名的互联网公司,提供多样化的在线服务和产品。在字节跳动的go实习面经中,通常会包含以下几个方面的内容: 1. 基础知识测试:字节跳动会对应聘者的基础知识进行测试,例如数据结构、算法、计算机网络等方面的知识。这一部分的问题可以是选择题、填空题、编程题等形式,用于评估候选人的基础水平。 2. 项目经历和实践能力评估:字节跳动也会关注应聘者的项目经历和实践能力,询问候选人在实习或学校项目中担任的角色、面临的挑战、解决方案以及取得的成果。通常会以开放性问题形式出现,侧重考察候选人的思维能力和解决问题的能力。 3. 技术深度面试:在技术深度面试环节,字节跳动会聚焦于候选人在Go语言相关技术方面的掌握情况。例如对候选人对Go语言的理解、熟练程度以及应用经验进行详细的询问和讨论。 4. 沟通与团队合作:字节跳动非常注重候选人的沟通能力和团队合作能力。所以在面试过程中,他们可能会提问候选人在团队合作中的角色、如何和其他成员协作以及如何解决团队遇到的问题等。 5. 自我介绍和问题回答:面试的最后要求候选人进行自我介绍,这是一次展示个人的机会。同时,面试官还可能询问一些与实习相关的问题,了解候选人对实习的期望、目标以及对字节跳动的了解程度。 综上所述,字节跳动的go实习面经主要包括基础知识测试、项目经历和实践能力评估、技术深度面试、沟通与团队合作以及自我介绍和问题回答等环节。应聘者需要准备充分,熟悉Go语言相关知识,并能够展示自己的技术能力、项目经历以及团队合作等方面的能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenyang1026

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值