标签:2022 美团 链表 索引 线程 内存 哈希 进程 某面经
2022美团Java后端开发春招实习面经
一面
1.讲一下计算机网络的五层架构,每层分别有什么协议
五层架构:应用层、运输层、网络层、数据链路层、物理层
2.什么是 Http 协议,各种 Http 协议状态码的含义
HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol
HTTP协议拆解为超文本、传输、协议。可以理解为HTTP是一个在计算机世界里专门在两点
之间传输
文字、图片、音频视频等超文本
数据的约定和规范
,至于为什么是在两点间,而不是最常见的Client和Server,是因为有时也会是服务器与服务器的传输
Http协议状态码:老生常谈,1xx,2xx,3xx,4xx,5xx
1xx:提示信息,协议处理的一种中间状态
2xx:服务器成功处理了客户端的请求,报文被受到且被正确处理
3xx:重定向,资源位置有变动,需要客户端重新发送请求
4xx:客户端错误,请求报文有误,服务器无法处理
5xx:服务端有误,在处理请求时内部发生了错误
3.Tcp协议为什么是可靠的,Tcp协议的细节
最近在学OS,学完计网回来补
4.进程与线程的区别
最近在学go,拓展一下吧,加一个协程进来,一起写
- 进程:并发执行的程序在执行过程中
操作系统分配和管理资源的基本单位
,竞争计算机系统资源的基本单位- 线程:进程的一个执行单元,是
处理器任务调度和执行的基本单位
- 协程:比线程更加轻量级的存在,一个线程可以有多个协程。
进程和线程的区别:
- 根本区别:进程是操作系统资源分配的基本单位,而线程是处理机任务调度和执行的基本单位
- 资源开销:进程之间具有独立的代码和数据空间(每个进程可以理解为一个可执行文件,将装载模块扔进内存中。称为程序上下文),进程之间的切换会有巨大的系统开销。而线程则是在隶属于的进程中共享代码和数据空间,独立拥有运行栈和PC(程序计数器),也就使得线程间的切换开销很小
- 包含关系:如果一个进程中有多个线程,现代计算机会并发执行。线程是进程的一部分
- 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源都是相互独立的
- 影响关系:一个进程崩溃以后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都会死掉。所以多进程比多线程健壮
- 执行过程:每个独立的进程有程序运行的入口,顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,二者均可并发
5.Linux查看文件用什么指令,查找 123 出现在一个 txt 中的位置用什么指令
不知道这个面试的标准答案会是啥,就写我自己的答案了。应该有很多种方式
查看文件指令:cat 文件位置
查找123出现在一个txt中的位置:grep 要查找的内容 文件位置
,其实也可以vim打开然后/内容
,只是感觉grep更强大方便一些
6.常用的数据结构有哪些,数组与链表区别,树和链表的区别,哈希冲突的解决方法
常用数据结构:数组、堆、栈、树、哈希表、链表、队列
比较内容 | 数组(Array) | 链表(Linked List) |
---|---|---|
逻辑结构 | 1.数组在内存中需要连续的一片空间;2.在使用数组前,必须事先想好数组的长度,并不能后续动态改变;3.元素元素在增加时,可能产生越界的代码BUG;4.因事先要规定好数组的长度,就容易导致存储空间的浪费,利用率较低;5.数组增删需要移动数组中已有的全部元素,费时费力 | 1.链表采用动态分配内存的方式,在内存中并不需要连续的一片内存空间;2.支持动态的增删元素;3.自由度大,需要时可以new或者malloc申请一片内存,不需要时就使用free或delete来释放内存 |
内存结构 | 数组从栈上分配内存,使用方便,自由度较小 | 链表从堆上分配内存,自由度大,要注意内存泄漏 |
访问效率 | 数组的随机访问性强,查找速度快。时间复杂度为O(1),但头插和头删的效率低,为O(N) | 链表的查找效率低,为O(N);但删除和插入元素的效率较高,为O(1).同时链表的内存空间并不连续,不存在随机访问性 |
越界 | 数组存在越界的风险 | 只要还有内存空间可被申请,链表就不越界 |
树和链表的区别:
- 树是数据结构的一种逻辑结构形式。一个前驱多个后继
- 链表是数据结构的一种存储结构形式。用数据域以外的附加存储空间表明逻辑关系
- 树的存储可以用链表进行实现
哈希冲突的解决方法:
- 线性探测法(寻找一个新的空闲哈希地址):
- 线性探测法:每次都加一,直到有可以放入的位置即可 不足是会出现聚集现象
- 平方探测法:将线性探测法中的加一改为12,(-1)2,22,(-2)2……即可
- 再哈希法:同时构造多个不同的哈希函数,等发生哈希冲突时就使用第二个、第三个……等其他的哈希函数计算地址,直到不发生冲突为止。虽然不易发生聚集,但是增加了计算时间。
- 链地址法:将所有哈希地址相同的记录都链接在同一链表中。
- 建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都存放在溢出表中。
7.HashMap 的底层实现, put 的过程,扩容机制,链表转化红黑树的条件,为什么用红黑树不用二叉搜索树
涉及到Java底层了,过一阵子回来补吧。
8.String、StringBuilder、StringBuffer的区别
比较内容 | String | StringBuffer | StringBuilder |
---|---|---|---|
执行速度 | 最差(数据放在常量池中,默认以常量形式保存,且用final进行修饰。因此线程安全,因为当String创建好后就不可改变,所以执行速度是最差的。) | 其次 | 最快(因为不需要考虑线程安全的问题) |
线程安全 | 线程安全 | 线程安全 | 线程不安全(StringBuilder并不保证线程安全,所以不推荐在多线程的情况下令多个线程对同一StringBuilder对象进行操作) |
使用场景 | 少量字符串操作(如果程序中有大量的字符串拼接工作,效率极差。避免使用+操作) | 多线程环境下的大量操作(因为考虑线程安全) | 单线程环境下的大量工作 |
9.ReentrantLock 和 Synchronized 的区别,讨论了一下实现原理
典中典问题。但是没学,过阵子回来补吧……
10.JVM 内存模型有哪些,分别说说
1.程序计数器
2.虚拟机栈
3.本地方法栈
4.堆
5.方法区
11.垃圾回收算法有哪些,JVM 老年代用什么垃圾回收算法
垃圾回收算法:
- 标记-清除
- 复制算法
- 标记-整理
JVM老年代GC:
12.说一下 CMS 和 G1 垃圾回收器
CMS垃圾回收器和G1垃圾回收器区别_shlgyzl的博客-CSDN博客_g1垃圾回收器
过阵子回来补吧
标签:2022,美团,链表,索引,线程,内存,哈希,进程,某面经 来源: https://www.cnblogs.com/appletree24/p/16489994.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。