美团AI面试

解释一下cookie和session的区别(换题)

  • 存储位置:Cookie存储在客户端,Session存储在服务器端。
  • 安全性:Session比Cookie更安全,因为Session数据不通过网络传输,而Cookie可以被拦截。
  • 容量:Cookie有大小限制(4KB),而Session理论上没有。
  • 使用场景:Cookie适合于不需要高度安全性的状态维护,而Session适用于需要更高安全性的场合。

服务器会为每个用户创建一个唯一的Session ID,并将这个ID存储在Cookie中,这样每当用户发起请求时,就会携带这个Session ID,服务器可以根据这个ID找到对应的Session数据。

OSI七层模型,每层的主要功能

物理层:负责在物理媒介上传输未加解释的位流(即0和1)

数据链路层:提供节点间数据帧的可靠传输,负责错误检测和纠正、流量控制以及物理寻址(以太网)

网络层:负责数据包从源到目的地的路由选择

传输层:提供端到端的可靠数据传输服务

会话层:负责建立、管理和终止表示层实体之间的通信会话(RPC)

表示层:处理数据的表示形式,如数据格式化(JSON)

应用层:提供网络服务与最终用户之间的接口(HTTP)

如何查看系统日志文件,常见的日志系统文件有哪些

在Linux/Unix系统中,系统日志文件通常存储在/var/log目录下,你可以使用文本编辑器(如vim)或者命令行工具来查看日志文件,除了下面两个还有其他的

  • /var/log/syslog/var/log/messages:包含了系统启动以来的所有系统日志信息。
  • /var/log/auth.log(Ubuntu/Debian)或 /var/log/secure(Red Hat/CentOS):记录了与安全相关的事件,如登录尝试。

redis如何实现分布式锁,需要考虑哪些问题

分布式锁是在分布式环境中协调多个进程对共享资源的访问,Redis 提供了原子操作,这使得它可以作为一个可靠的分布式锁服务

获取锁:可以设置一个过期时间来防止持有锁的客户端崩溃导致锁无法释放

SETNX lock:resource_name client_id
EXPIRE lock:resource_name ttl

释放锁:必须确保只有锁的拥有者才能释放它

WATCH lock:resource_name
MULTI
IF redis.get(lock:resource_name) == client_id
   DEL lock:resource_name
EXEC

考虑的问题:

死锁:需要设计合理的锁获取策略,如设置锁的获取超时时间

分布式一致性(redis主从复制和故障转移)

异常处理(网络中断或客户端崩溃)

锁的超时时间、公平性

C++中两种自动类型推导

auto关键字告诉编译器根据变量的初始化表达式自动推导变量的类型。这在声明变量时非常有用,特别是当你不确定变量的确切类型,或者类型比较复杂难以书写时。

decltype关键字允许你根据一个表达式的类型来定义一个新的类型名。

decltype(auto)允许你在声明变量的同时推导出变量的类型,并且保留表达式的CV限定符(const和volatile限定符)以及引用类型。这对于确保类型正确性和避免不必要的类型转换特别有用。

C++的函数重载,如何实现

函数具有不同的参数列表(参数的数量、类型或顺序不同)。函数重载使得同一个函数名可以对应多种不同的实现,这增加了代码的可读性和灵活性。

  • 二义性:如果多个重载函数对于相同的调用参数都是可行的,那么编译器将无法确定应该选择哪个版本,这会导致编译错误。例如,如果两个函数除了返回类型不同外完全相同,则会导致二义性。
  • 隐式转换:如果存在可以从实参到形参的隐式转换,则编译器会尝试这样的转换来匹配函数签名。但是,如果多个函数都可以通过隐式转换来匹配,则可能会导致二义性。
  • 默认参数:虽然默认参数可以用来扩展函数的功能,但它们不应用于区分重载函数,因为默认参数并不会改变函数签名。

如何设计一个社交媒体的关注功能和API

1、用户认证:任何社交应用都需要用户认证机制来确保每个用户的身份

2、数据模型:

  • 用户(User):存储用户的基本信息,如用户名、密码哈希、邮箱等。
  • 关注关系(Follow):表示用户之间的关注关系,包含关注者和被关注者的用户ID。

3、存储方案:

关注关系可以存储在一个表中,该表至少包含以下字段:

  • follower_id:关注者的用户ID。
  • following_id:被关注者的用户ID。
  • created_at:关注关系创建的时间戳。

4、API:关注用户、取消关注、获取用户关注列表、获取关注用户列表

如何高效的处理每个用户的关注列表和被关注列表

索引:对Follows表中的follower_id和following_id列建立索引,以加快查询速度。

查询优化:使用JOIN语句来获取用户关注列表,同时可以通过分页来减少数据量;类似地,使用JOIN语句来获取用户的粉丝列表

缓存机制:使用Redis等内存数据库来缓存经常访问的数据

如何提高自己的代码质量和编程技巧的,有哪些学习方法,请详细分享一下

举一个具体的例子来说明一下

请描述一次你在编程项目中遇到的最具挑战性问题,如何解决的

对上面的问题进行细节处的提问

#美团ai面试#
全部评论

相关推荐

02-19 00:33
已编辑
国防科技大学附属小学 C++
一面:面了一个半小时#日常实习面试#1. 自我介绍2. 一两句话说明隐私计算是做什么的(之前实习主要做的这方面)后面聊到怎么将加密数据安全给用户没说清楚,被打断3. 介绍bustub项目,三种事务隔离级别:Read Uncommitted、Read Committed 和 Repeatable Read是怎么实现的4. 和mysql的实现不一样吗?5. 持久化是怎么做的6. redis的持久化是怎么做的7. 保持一致的算法,raft知道吗?(只听说过一些,讲了点大概)8. raft中是怎么选出主节点的?为什么超过半数票就成为主节点?(只能靠猜了)9. mysql的持久化怎么做的10. 介绍实习中的难点11. 爬楼梯(要打印出所有方案,递归写的,问有没有更快更省空间的做法,只说了dp,没完全满意)总结:本人做的偏底层,对redis和分布式算法了解不多,面试官主要是做业务的,问项目逻辑和流程更多,因此答的不是很好。孩子想学学业务,求给个机会吧二面:1. 自我介绍2. 讲一下实习做了哪些工作(我主要输出的是难点工作,涉及一些细节,但面试官更想知道性能怎么提升的,而不是代码重构的细节,这方面要注意)3. B+树的优势,为什么数据库用的是B+树4. 索引红黑树不是也可以吗,为什么不用5. 消息队列用过吗,介绍几种常见的6. 分布式有什么用?7. 分布式算法有什么(因为不太了解问题记不太清了,但面试官问的是提交、取消、二阶段提交等,我说了一下mysql的二阶段提交)8. 分析sql语句联合索引是否失效联合索引(a,b,c)select * from t where b=xx and a=xxselect * from t where a=xx and b>xxselect * from t where a=xx and b>xx and c=xx9. redis为什么快10. redis怎么实现分布式锁11. z字型遍历二叉树总结:简历上的问的不多,可能还是面试官都是做业务的。总之是凉了。
查看42道真题和解析
点赞 评论 收藏
分享
500-1000人的上市公司能不能算上中小厂呢?时长:45min整体难度不高,但本人基础没打牢,有些问题没回答上,感觉大概率寄了1.自我介绍2.问了一些在学校的情况,课程,实习情况等3.平常如何学习的?正在看哪些书籍?(说的是网上看对应的教程,相关技术网站,,纸质书籍,java虚拟机,深入了解多线程,Redis的设计)4.如何看待ai对程序员的影响?5.你觉得你们科班和那些非科班的优势在哪?6.项目拷打  6.1 这里的缓存击穿是怎么解决的?  6.2 缓存和数据库的一致性如何实现的?7.看你正在看java虚拟机这本书,现在看到哪了?(垃圾回收)  7.1 什么时候进行垃圾回收?  7.2 有哪些垃圾回收器?  7.2 什么场景使用对应的垃圾回收器?8. Redis看到哪里了?  8.1 有什么数据结构?  8.2 Zset是怎么实现的?跳表的原理是什么?(原理没怎么看,寄)  8.2 Stream了解吗?9. MySQL了解多少?说说MySQL的有哪些数据结构吧。varchar是可变的吗?是否可以不规定长度?(没回答好,寄)10. MySQL为什么要用B+树索引?11. 看你也学习过消息队列RocketMQ,延迟消息了解吗?原理是什么?12. RocketMQ和Redis的消息队列有什么区别?反问#投递实习岗位前的准备##牛客AI配图神器#
查看20道真题和解析 投递实习岗位前的准备
点赞 评论 收藏
分享
评论
15
32
分享

创作者周榜

更多
牛客网
牛客企业服务