字节跳动暑期实习面试题准备

字节跳动暑期实习后端面试题准备

1.Java基础

java中int和Integer的区别,为什么有了int还要有设计Integer

  • 区别:
    int和Integer的区别
  • 为什么还要设计Integer
    首先,Java是面向对象的语言,把基本类型封装成对象可以将数值和处理这些数值的方法结合在一起,比如说Integer就有parseInt()等方法来专门处理int型相关的数据,可以大大减少程序员工作量。
    其次,也是最重要的一点, 原始数据类型和 Java 泛型并不能配合使用,也就是Primitive Types 和Generic 不能混用,于是JAVA就设计了这个auto-boxing/unboxing机制,实际上就是primitive value 与 object之间的隐式转换机制,否则要是没有这个机制,开发者就必须每次手动显示转换,非常麻烦。
    参考:
    已经有int了,为什么要用integer?
    int和Integer有什么区别?

java中hashmap的实现原理,讲解一下哈希函数

知道哪些垃圾回收器,CMS的优势在哪

不可变类,机制,实现原理

HashMap 和 HashTable 的区别?


2.计算机操作系统

操作系统中线程和进程的区别

  • 进程可以拥有资源,并且作为系统中拥有资源的一个基本单位;线程并不拥有资源,而是仅有一点必不可少的、能保证独立运行的资源。
  • 同一进程的不同线程之间的独立性要比不同进程之间的独立性低的多
  • OS创建、撤销进程的代价比线程的高的多(进程每次创建都要重新分配相应的PCB和其它资源)
  • 一个进程是不是可以创建无限数量的线程?
    不可以
  • 线程的数量会受到什么限制
    内存大小、系统限制进程最大内存
  • 线程在内存中会占用什么资源
    TCB(控制线程运行)、程序计数器(指示被执行指令序列)、一组寄存器和堆栈(保留局部变量、少数状态参数和返回地址)

说明几种IPC(进程间通信)

  • 共享存储系统
    相互通信的进程可以共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
  • 管道通信系统
    所谓“管道”,是指连接一个读过程和一个写过程以实现它们之间通信的一个共享文件,向管道提供输入进程(写进程)以字符流的方式将大量数据送入管道;而接受管道输出的接受进程(读进程)则从管道接受数据。
  • 消息传递系统
    在该机制中线程不用共享任何存储区或者数据结构,而是以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一系列通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。
  • 客户机-服务器系统
    在网络环境的各种应用领域已经成为当前主流的通信实现机制,主要有套接字、远程程序调用和远程方法调用三类。

3.计算机网络

OSI七层模型

  • 应用层、表示层、会话层、运输层、网络层、数据链路层、物理层。

HTTP报文 method有哪几种 分别简单解释

HTTP 请求方法?Post 和 Put 的区别?

Cookie 和 Session 的区别?

udp和tcp的区别

  • UDP是无连接的,尽最大努力交付,面向报文,没有拥塞控制,支持一对一、一对多、多对多、多对一的交互通信,UDP首部开销少(8个字节)。
  • TCP是面向连接的运输层协议,有拥塞控制,只能进行一对一通信,提供可靠交付,提供全双工通信,面向字节流,首部开销大(20个字节)。
  • 讲解udp的校验和
    发送方首先将全零放入检验和字段,再把伪首部以及UDP用户数据报看做是由许多16位的字串接起来的,若UDP用户数据报部分不是偶数个字节,则填充一个全零的字节(但不发送),然后按照二进制反码求这些16位字的和,最后将此和的二进制反码填入检验和字段,发送给接收方。
    接受方收到数据报之后,将用户数据报连同伪首部按二进制反码求和,当没有差错时,其结果应该全为1,否则代表出现差错。
  • 讲解tcp的校验和
    同UDP检验和,同样要在报文段前面加上12字节的伪首部,但应该将伪首部的第四个字段中的 17改为6(TCP协议号是6)。
  • tcp的三次握手、四次挥手过程
    • 三次握手:
      假设有两个程序A和B要通信,A主动打开连接,B被动打开连接。一开始B的TCP服务进程先创建传输控制模块TCB,准备接受客户进程的请求,然后服务器就处于LISTEN状态,等待客户的连接请求。
      1)第一次握手:A的TCP客户进程首先也是创建传输控制模块PCB。在打算建立连接请求时,向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x,TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗一个序号,这时TCP客户进程A进入SYN-SENT(同步已发送)状态。
      2)第二次握手:B收到A的请求报文段后,如果同意建立连接,则向A发送确认。在确认报文段中应该把SYN和ACK位都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。这个报文段也不能携带数据,但同样要消耗一个序号。这时服务器进程B进入SYN-RCVD(同步收到)状态。
      3)第三次握手:TCP客户进程A收到B的确认后,还要向B给出确认。确认报文段的ACK=1,确认号ack=y+1,而自己的序号seq=x+1。TCP标准规定,ACK报文段可以携带数据,但如果不携带数据,则不消耗序号,在这种情况下,下一个数据报文段的序号仍是seq=x+1 。这时,TCP连接已建立,A进入ESTABLISHED(已建立连接)状态。
    • 四次挥手:
      1)第一次握手:客户端进程A先向B发送连接释放报文段,并停止再发送数据,主动关闭TCP连接,此时A的释放报文段FIN=1,seq=u(值为前一个已传送过的数据的最后一个字节加一),A进入FIN-WAIT-1(终止等待1)状态。(TCP规定,FIN报文段即使不携带数据,也要消耗一个序号)。
      2)第二次握手:B收到连接释放报文之后即发出确认,确认号ack=u+1,seq=v(值为前一个已传送过的数据的最后一个字节加一),然后B进入CLOSE-WAIT(关闭等待)状态。此时TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍然要接收。A收到来自B的确认之后,就进入FIN-WAIT2状态,等待B发送的连接释放报文段。
      3)第三次握手:若B已经没有想要向A发送的数据,其应用进程就通知TCP释放连接。此时B发送的连接释放报文段FIN=1,seq=w(在半关闭状态B可能还发送了数据),ack=u+1(必须是上次已经发送过的确认号)。这时B进入LAST-ACK(最后确认)状态,等待A的确认。
      4)第四次握手:A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段ACK=1,确认号ack=w+1,自己的序号seq=u+1。然后进入TIME-WAIT(时间等待)状态。在经过时间等待计时器设置的时间2MSL后,A才进入到CLOSED状态。当A撤销掉相应的传输控制块TCB后,这次TCP连接才算结束。
      图文解释:TCP三次握手四次挥手详解
  • 如果服务器中含有大量一直处于close_wait的tcp连接,是为什么?
    服务器大量TIME_WAIT和CLOSE_WAIT的原因及解决办法

ARP是什么?ARP内部如何实现?

  • ARP是地址解析协议,主要是用来查找同一局域网的主机或路由器的IP地址对应的硬件地址。在每台主机内部的ARP高速缓存区都有一个从IP地址到硬件地址的映射表(本局域网上的)。
  • 实现细节:当主机A想要向主机B发送IP数据报的时候,主机A会先在自己ARP高速缓存区查找有无主机B的IP地址,如果有,则查找对应的硬件地址,并把地址写入MVC帧,然后通过局域网把该MVC帧发送到该硬件地址;如果没有,主机A就会自动运行ARP找出主机B的硬件地址:主机A的ARP进程首先会向本局域网广播发送一个ARP请求分组(内容是“我的IP地址是XXX,硬件地址是XXX,我想找到IP地址为XXX的主机的硬件地址”);然后在同一局域网上运行的ARP进程都会收到这个ARP分组;主机B的IP地址和这个ARP请求分组中要查询的IP地址一样,于是便收下这个的ARP请求分组,并向主机A发送相应的ARP响应分组(内容是“我的IP是XXX,我的硬件地址是XXX”),同时在这个响应分组里面写下自己的硬件地址,单播发送给主机B;最后主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射(同样,主机B在收到主机A的请求分组的时候也会把主机A的映射写到自己的高速缓存区)。

DNS是什么?内部如何实现?

  • 域名系统DNS是互联网使用的命名系统,用来把便于人们记忆的机器名字转为IP地址,所以实质上也就是名字系统。
  • 实现细节:当某一个应用进程需要把主机名解析为IP地址,该应用进程就会调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS的请求报文中,以UDP用户数据报文的形式发送给本地域名服务器(使用UDP报文是为了节省开销),本地域名服务器在查找完域名后,把对应的IP地址放在回答报文中返回,应用进程在获得目的主机的IP地址之后即可进行通信。若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中另一个客户,并向其他域名服务器发出查询请求,这种过程直至找到能够回答该域名请求的服务器为止。

内存单元的作用是什么?


4.数据库

事务的概念,索引,B+树,隔离级别

  • 事务是用户定义的一个操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

数据库事务特征ACID 各代表什么,简单解释

  • 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的诸多操作要么全做,要么全不做。
  • 一致性(Consistency):事务的执行结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 隔离性(Isolation):一个事务的执行不能被其它事务干扰。即一个事务的内部操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能相互干扰。
  • 持续性(Durability):也称为永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的,接下来的其它操作或故障不应该对其执行结果有任何影响。

数据库索引 B+树B树特征

聚集索引?

事务隔离级别


5.数据结构及算法

完全二叉树和满二叉树的概念和区别

堆排,建堆的时间复杂度

红黑树的特性

给一个字符串str,打印出这个文件夹的文件结构

给一个有序序列,又给了这些数字两个数字在一起的分组,调整后必须使得一个组的两个数字挨着,最少交换几次数字

设计一个开根号的函数,二分法

给了未来一周股票价格,求什么时候买,什么时候卖能赚最多

在O(1)的时间复杂度内返回栈的最小元素

建堆过程

数组中除了两个数,其他树都出现偶数次,找出这两个只出现一次的数。

二叉树转双端链表

二叉树的序列化和反序列化

手写算法:判断一个数是否为二叉树的路径节点值之和

讲解算法:一个连连看小游戏(二维数组存储),如何判断两个点可以消去?时间复杂度?连线最多只有两个拐点,怎么判断?


题目来源:
牛客网:字节跳动后端一面面试经验
CSDN:字节跳动后端开发实习面试一
牛客网:字节跳动一面二面凉经
牛客网:字节跳动后台开发实习三面
牛客网:字节跳动(上海)后端开发实习一面二面
知识点总结:
GitHub大佬总结

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值