2022字节跳动后端开发暑期实习_深圳_OC
寻找一起租房的同学哇!深圳湾的租金太太太贵了,本人男生,有意者微信聊吧
4.19 字节java开发一面
-
进程和线程的区别,为什么不都是进程呢?管理进程的原则(要考虑的点)
- 线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线 程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程, 或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。进程是系统执行程序的基本单位,线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。所以进程的意义就在于管理进程的时候可以实现原子性,相互隔离
-
进程间的通信,管道支持的数据类型?
-
TCP和UDP的区别,怎么进行流量控制的?适用场景的区别,视频面试用的什么协议?四次挥手,为什么一定要四次挥手?如果A方的ACK丢失了怎么办?
- udp是无连接的,tcp是面向连接的;udp是不可靠传输,tcp是可靠传输;udp是面向报文传输,tcp是面向字节流传输。
- 流量控制是通过滑动窗口来实现的,TCP适用于要求通信数据可靠,比如文件传输、邮件传输等,UDP适用于通信速度高的场景,比如语音、视频、直播等
- TCP的连接是全双工的,所以连接的拆除需要单独将两个通道分别拆除,而四次挥手所做的事情就是拆除两条通道和释放资源。如果A方的ACK丢失了,B方会再次发送第三部的报文,计时重新开始
-
数组在内存中有什么特点?二维数据的行遍历和列遍历为什么耗时不一样?
-
select * from table where city= 10 and age< 30 怎么优化?select * from table where 1 < id < 1000 是怎么查找的?
- 获取连接、查询缓存、词法分析(将SQL语句分成一个个的单词)、语法分析(按照SQL定义的语法规则生成一个数据结构,叫做解析树)、查询优化器(基于开销的优化器)
-
Mysql索引的结构,为什么用B+树,而不用别的?一般多少层,为什么3、4层就可以存很多数据?
-
1000个苹果,10个盒子,怎么放,使得任意数都可以由若干个盒子拼出来?
-
一个内存页面是多大:4KB
4.22 字节java开发二面
-
操作系统创建进程的流程
-
1.映射EXE文件:第一步就是将该exe文件放在内存中,如上文A.exe,每个exe内部都有说明,自己存放的位置。
2.每个进程都有一个EPROCESS(结构体)对象,它被放在内核区。
3.映射系统DLL:ntdll.dll被放在用户区。DLL:动态链接库,包含可由多个程序同时使用的代码和数据的库
4.创建进程的时候必然会自动创建一个线程,创建在内核区。
5.运行A.exe,除开ntdll.dll外,将系统中其它dll也放在用户空间中。
6.线程开始执行。
-
-
父子进程的关系,资源,父进程下子进程kill掉会有什么问题,把父进程kill掉,子进程还存活吗
- 子进程是为了要运行另一个程序,所以复制现有的一个进程来生成新进程
- 由fork()函数创建的新进程被称为子进程.fork()函数被调用一次,但返回两次,两次的返回值不同,子进程的返回值是0,父进程的返回值是新进程的进程ID。之后将为子进程申请PCB和用户内存空间.子进程是父进程的副本.在用户空间将复制父进程用户空间所有数据(代码段、数据段、BBS(未初始化的全局变量和静态变量)、堆、栈),复制父进程内核空间PCB中的绝大多数信息.(注意:共用同一文件表项,共享一个文件偏移量)
- vfork用于创建一个新进程,而该新进程的目的是exec一个新程序。区别一:不将父进程的地址空间复制到子进程。区别二:vfork保证子进程先运行,在它调用exec或(exit)之后父进程才可能被调度运行。
- 父进程结束子进程是可以继续运行的,父进程kill掉之后成为孤儿进程,会被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。那么这个子进程的进程号就不能被再分配了。
-
虚拟内存的介绍,虚拟地址到物理地址的转换,内存换页,局部性,局部性的实现
-
OS内的大小端:小端模式是低地址上存放低字节,高地址上存放高字节。大端模式是低地址上存放高字节,高地址上存放低字节,又称网络字节序(网络传输用的大端)。是因为在32位或者64位操作系统上,寄存器的宽度大于一个字节,所以有大小端之分。x86、ARM使用小端,Mac OS使用大端模式
-
java的GC
-
java内函数的调用整体是怎样实现的,堆和栈的区别
-
用户态和内核态的区别,用户态调用系统函数的调用流程:即用户态切换到内核态
-
怎么将UDP实现成TCP:大概就是从他们的却别作答,流量控制怎么实现的,流量控制和拥塞控制的区别;不从传输层入手,从应用层去修改:增加确认机制,也就是seq\ack机制,增加拥塞窗口机制,添加发送和接受缓冲区,增加超时重传:添加超时重传机制
-
输入一个网址,发生了一些什么
-
mysql语句的区别,一个涉及到回表,另一个不存在。一个mysql语句怎么加索引,索引的顺序能换吗
-
找出访问频次最高的十个ip:用HashMap+小顶堆
-
任务调度器怎么实现:某个时间点可能有很多任务要同时执行,然后还要按照任务id来删除任务(就是定时了,但是我不想按时执行了,删除),还有一个是轮询,即每秒都扫描一下这一秒有没有要执行的任务。把时间指向这一秒要执行的任务,然后轮询只用轮询之间,删除的话直接把时间的指针删掉就可以了
4.27字节三面
- 也全是些八股文的内容