3.25饿了么一面凉经

#软件开发2024笔面经# 1.说一下项目架构,项目模块

2.项目中用到了Redis说一下应用场景,为什么要用Redis,Redis宕机造成用户端和商家端状态不一样怎么处理(持久化),说到了AOF和RDB那说一下他们的工作流程和优缺点,Redis的主从复制,哨兵模式,Redis为什么那么快?

3.项目中用到了ThreadLocal,怎么保证再多线程下的安全性,这里就是说他的原理,里面的key代表什么,扯到了threadlocalMap,会导致什么问题,为什么会造成内存泄漏,说一下垃圾回收机制。

4.手写一下threadLocal的操作方法,根据代码讲为什么可以保证线程安全性。

5.写一下你知道的单例模式,写了饿汉式,懒汉式。懒汉式有什么问题,怎么解决,写一下优化代码,一个是加锁,另一个写了双重校验,双重校验里面的第二次判断的作用,为什么可以减少获取锁的次数,同一个类中,不同方法会阻塞吗,会,为什么会阻塞。
全部评论
兄弟面的什么部门呀
点赞 回复
分享
发布于 03-26 09:38 浙江

相关推荐

头像
不愿透露姓名的神秘牛友
05-06 15:05
已编辑
点赞 评论 收藏
转发
选择题跳过。编程题三题T1 签到,排序去重即可。T2 问刚好等于x。考虑01背包(下标从1开始)。dp[i][j][k]表示到第i个数,总共选取了j个,k=0表示[1~i]都没多次操作(都没加倍)。k=1表示[1~i]存在加倍的情况,可能是i,也可能是之前的某次。列出状态转移方程:dp[i][j][0] = min(dp[i-1][j][0], dp[i-1][j-a[i]/2][0]+1) 表示不选和选的情况。dp[i][j][1] = min(dp[i-1][j][1], dp[i-1][j-a[i]/2][1]+1, dp[i-1][j-a[i]][0]+1) 表示不选、选择但是不多次操作、选择并多次操作的情况。最后输出min(dp[n][x][0],dp[n][x][1])即可,若为inf则输出-1.第一维可以优化掉,空间O(x),时间O(nx)。T3 样例给的比较号是<和>这种,很神秘,最后发现直接改成都行。也考虑dp。先把等号去掉,那个不影响答案。假设有len个运算符dp[i][j]表示到第i个运算符右侧的数,选择j,所得到的方案数。如果第i个运算符是 > ,说明右侧的数更小,则 dp[i][j] = dp[i-1][j+1] + dp[i-1][j+2] + ... + dp[i-1][m]如果第i个运算符是 初始化dp[0][1~m] = 1,表示最左侧的数取任何数的方案数都是1最后对dp[len][1~m]求和即可。当然直接算会超时,毕竟要求和。实际上如果第i个运算符是 >,那么由于dp[i][j+1] = dp[i-1][j+2] + ... + dp[i-1][m],因此dp[i][j] = dp[i][j+1] + dp[i-1][j+1]。同理如果第i个运算符是 由于i只用到2个,因此可以压缩一维到大小为2.最后空间复杂度O(2*m) = O(m),时间复杂度O(n*m)#笔试##小红书#
投递小红书等公司9个岗位
点赞 评论 收藏
转发
4 39 评论
分享
牛客网
牛客企业服务