前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【面经分享,附答案】美团到家 | 实习一面 | 后端

【面经分享,附答案】美团到家 | 实习一面 | 后端

作者头像
飞天小牛肉
发布2022-11-08 14:36:43
6440
发布2022-11-08 14:36:43
举报
文章被收录于专栏:飞天小牛肉

本文收录于 www.cswiki.top

小伙伴大家好呀,我是小牛肉,最近在准备秋招所以基本没啥时间更技术文了,今年真的卷到爆炸、卷到离谱、卷到起飞、卷到升华,不过乐观来讲也应该是未来五年最容易的一年了(哭泣),这段时间看了不少面经,挑一篇发上来和大家分享下,以后发面经都会尽量带上我的答题思路(蓝色引用中的就是),今日面经来源可文末 “阅读原文“ 直达,时间 2022/06/29

楼主自述:第一次来面大厂,本来不想面的,过了笔试一个月才来,有点紧脏,面试体验非常好(特指面试官非常奈斯)。第一次面这么长时间,还好备了杯水,讲到后面有点没力气了,一直灌水,虽然这样真的有点不礼貌,但真的控制不住寄己。每一次面试都当作一次测验,像这次就感觉到:自己的源码,以及一些和实际生产环境相关的应用不太了解,甚至说不出来几个字,还有有些心里清楚的讲得不好,讲给自己听都有些难懂。。。继续加油吧💪

1)自我介绍

2)项目:用到的技术,登录是单机的还是分布式的

3)多级缓存

4)超卖问题

5)分布式锁

分布式锁的几种方案:

  • 数据库
    • 锁表
    • 悲观锁:select … for update
    • 乐观锁:添加 version 列
  • Redis
    • 单机:set…nx(可扩展存在的问题:业务还没执行完锁已经被释放、错误地释放了别的线程占有的锁)
    • 多机:Red Clock
  • Zookeeper

6)线程池参数

最重要的四个参数:corePoolSize、maxsiumPoolSize、workQueue、rejectHandler

7)多线程里用到过的锁

synchronized、Locks 接口(如 ReentrantLock、ReadWriteLock)

8)JUC 里还有啥(CAS)

CAS(Unsafe 类)、Atomic 原子类、ThreadLocal、并发工具类(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)、并发集合(ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueue(ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue)……)

9)乐观锁、悲观锁及其使用场景

悲观锁:认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改(synchronized 和 ReentrantLock 就是悲观锁) 乐观锁:认为自己在使用数据时不会有别的线程修改数据,因此不会添加锁,只是在提交修改的时候去判断一下,在此之前有没有其他的线程也修改了这个数据 使用场景:乐观锁适用于【写操作比较少】的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果写操作比较多经常产生冲突,上层应用就会不断的进行重试,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适

10)Linux 有哪些命令

11)操作系统怎么看日志

应该问的 Linux 怎么看日志,Linux 系统日志一般存在 /var/log 目录下,可以用 catheadtail 等命令进行查看

  • /var/log/message:系统启动后的信息和错误日志,最常用的日志之一
  • /var/log/secure:与安全相关的日志信息
  • /var/log/maillog:与邮件相关的日志信息
  • /var/log/cron:与定时任务相关的日志信息
  • /var/log/spooler:与UUCP和news设备相关的日志信息
  • /var/log/boot.log:守护进程启动和停止相关的日志消息

12)TCP 可靠性

TCP 保证可靠传输的手段:校验和、序号和确认应答机制、重传机制(超时重传、快速重传、Sack 重传)、流量控制(滑动窗口)、拥塞控制(慢启动、拥塞避免、快重传和快恢复)

13)Http 与 Https 区别

HTTP 不安全:

  • 窃听:HTTPS 加密
  • 伪装:HTTPS 数字证书
  • 篡改:HTTPS 数字签名

14)打开网页流程

封装 HTTP 请求报文、DNS 域名解析、TCP 三次握手、封装成 IP 数据报进行传输、ARP 根据 IP 找到 MAC 地址

15)Cookie/Session 比较

16)MySQL 有哪些索引,使用的原则

17)怎么看有没有走索引

explain 看执行计划(USING INDEX)

18)MySQL 执行查询流程?里面的缓存是啥

连接器、查询缓存、解析器、优化器、执行器 当表被修改时,查询缓存中的任何相关条目都会被清空,对于更新比较频繁且流量很大的表来说,这个特性会导致很大的数据库压力

19)设计表时如何设计索引

建立索引的几个原则:

  • 为经常作为查询条件 or 经常需要排序/分组/联合操作 的字段建立索引
  • 索引的数量不是越多越好
  • 尽量使用数据量少的索引(如果索引字段的值确实很长,可以使用前缀索引)
  • 不在频繁更新的字段上建立索引、表数据可以确定比较少的不需要建索引、where 条件中用不到的字段不适合建立索引、唯一性太差的字段不适合建立索引

20)MySQL 有哪些锁

悲观锁:

  • 表锁:读锁和写锁(可以加在表上也可以加在行上)、意向锁
  • 行锁:Record Lock、Gap Lock、Next-Key Lock

乐观锁:手动实现,添加 version 列

21)Redis 的数据类型

String(底层:long 型整数、embstr 编码的 SDS、SDS)、List(底层:ziplist、linkedlist)、Set(底层:intset、dict)、Zset(底层:ziplist、skiplist + dict)、Hash(底层:ziplist、dict)

22)Redis 的使用场景

做 cache or storage,可以根据每种数据类型说说具体的应用场景:

  • String:存储对象、分布式锁、限流
  • List:消息队列、消息列表时间轴
  • Set:点赞列表
  • Zset:排行榜
  • Hash:存储对象、购物车

23)Java 集合 Map->HashMap

Java 集合包括 List(ArrayList)、Set(HashSet)、Map(HashMap) HashMap 原理关键点:

  • JDK 1.7:数组 + 链表,头插法存在循环链表问题
  • JDK 1.8:数组 + 链表 + 红黑树、尾插法、扩容操作就是新开一个原数组大小 * 2 的新数组

24)ConcurrentHashMap 为什么安全

可以先说下 HashMap 为什么不安全(JDK 1.7 循环链表、JDK 1.8 并发 put 导致数据被覆盖),然后解释下 ConcurrentHashMap 的原理,关键点:

  • JDK 1.7:数组 + 链表、Segment 锁(ReentrantLock)、粒度较大
  • JDK 1.8:数组 + 链表 + 红黑树、synchronized + CAS(从 JDK 1.8 采用 synchronized 而不是 ReentrantLock,可以看出来 JDK 对 synchronized 的优化确有成效)、粒度较小

25)TreeMap 底层

26)JVM 内存模型(JMM)

线程工作内存 + 主内存。线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据。可扩展如何保证可见性(synchronized/Locks、volatile、final,三大并发关键字都能保证可见性!)

27)JVM 内存调优

28)JVM 垃圾回收器

29)算法题:字符串相加

心之所向,素履以往,我是小牛肉,小伙伴们下篇文章再见

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 飞天小牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档