最近面试回答不出来的题

  1. redis由于很多key没设置ttl导致爆了,你会如何处理呢(某云原生团队)
  2. JVM 新生代和老年代比例
  3. varchar(100) 和 varchar(10)啥区别
  4. OOM排查,咋定位到是哪个方法的,jps jsatck最多能知道线程id
  5. 采用了堆外内存,为啥用这个?为啥又要用分布式缓存呢,我直接都存到本地内存不行嘛?我说本地内存可能存在机子down掉,他:不都是很多台机子部署的嘛 每次把全量数据从本地缓存返给前端,每次都传好几M数据。
  6. 继续:本地缓存命中率多少?我:没测 感觉是很高。。
  7. 继续:堆外内存咋存的,序列化成string?
  8. rag问准确率提升多少? 根本没评估
  9. 有没有在学agent课程 无 建议不用开源框架写agent。。(某云原生团队)
  10. 实习:我感觉你说的没有热点key,主要是用户量userid很大
  11. 实习:架构,怎么存储的,just<id,List<Userid>>这样查询太慢了吧,,
  12. 项目:超时关单用定时任务,是30s执行一次嘛? 忘记说为啥不用MQ了考量点在哪
  13. 装饰器模式 举例子
  14. 开闭原则
#实习如何「偷」产出?##牛客在线求职答疑中心#
全部评论
更多实时面试问题请见:https://m.nowcoder.com/mianshi/top
6 回复 分享
发布于 10-15 15:04 北京
2. 新生代与老年代的比例默认是1:2,即新生代占堆内存的1/3,老年代占2/3。可以通过JVM参数-XX:NewRatio来设置,例如-XX:NewRatio=2表示新生代与老年代的比例为1:2。 3. varchar(100)和varchar(10)都是可变长度的字符串类型,区别在于最大允许的字符数不同。 varchar(10)最多能存储10个字符,如果超过则会被截断。varchar(100)最多能存储100个字符。 注意:实际存储时,varchar只会占用实际字符数+1个字节(长度前缀)的存储空间,所以定义更大的varchar并不会占用更多存储空间。但是,定义更大的长度可能会影响内存临时表和排序时的内存分配,因为MySQL会根据定义的长度分配内存。 4. Histogram 中,List大对象点击出现具体的XXHash对象右键点击,选择: Path to GC Roots分析生成的引用链。特别注意 Thread 相关的引用。如果这个 ArrayList 被某个线程的局部变量直接或间接引用,并且在堆转储时该线程仍然存活,那么这个线程的整个调用栈信息将会显示出来 。通过调用栈,你就可以清晰地看到是在哪个类的哪个方法中创建或引用了这个 ArrayList。 利用 Thread Overview 辅助分析:通过 Thread Overview,你可以查看堆转储时所有线程的详细信息,包括它们的名称、状态以及调用栈 。
6 回复 分享
发布于 10-14 13:30 上海
求大佬帮我看看 本地缓存命中率多少?rag问准确率提升多少?咋回答
1 回复 分享
发布于 10-14 13:35 上海
哇,看起来你面试的时候遇到了不少挑战呢!不过别担心,我们一起来分析一下这些问题吧~ 首先,关于Redis爆了的问题,如果是很多key没有设置TTL(生存时间),可以考虑以下方法: 1. 定期扫描并清理无TTL的key。 2. 使用Redis的TTL功能,为key设置过期时间。 3. 优化业务逻辑,避免产生大量无TTL的key。 至于JVM新生代和老年代的比例,这个要根据应用的具体情况来调整,一般来说,新生代比例大一些,因为新生代对象生命周期短,回收频繁。 关于varchar(100)和varchar(10)的区别,主要是存储空间和索引性能上的差异。varchar(100)可以存储更长的字符串,但可能会影响索引性能。 遇到OOM(内存溢出)排查时,可以使用jps和jstack来定位问题线程。具体方法: 1. 使用jps获取Java进程ID。 2. 使用jstack <pid>查看线程堆栈信息。 至于堆外内存和分布式缓存,堆外内存可以减少GC压力,而分布式缓存是为了解决单机内存不足的问题。同时,分布式缓存还可以提供数据共享和负载均衡等功能。 关于本地缓存命中率,确实需要测试来评估。堆外内存的存储方式可能包括序列化成string或其他格式,具体取决于你的应用需求。 至于agent课程和开源框架,确实有时候根据项目需求,可能需要自定义agent而不是直接使用开源框架。 关于架构存储问题,可以考虑使用更高效的数据结构,比如B树、哈希表等,来优化查询性能。 至于超时关单的定时任务,确实可以考虑使用MQ来异步处理,这样可以提高系统的响应速度和可靠性。 最后,装饰器模式和开闭原则,举个例子: - 装饰器模式:比如一个咖啡店,咖啡是一个基础类,然后可以有各种调料(装饰器)来增加咖啡的味道。 - 开闭原则:软件实体应该对扩展开放,对修改封闭。比如一个图形编辑器,当增加新的图形类型时,不需要修改原有的代码,只需增加新的类即可。 怎么样,我们聊聊这些问题的细节吧?如果你想要更深入地讨论,可以点击我的头像,给我发私信哦~牛可乐在这里等你哦!🐮💬</pid>
1 回复 分享
发布于 10-13 18:30 AI生成
还被问到了这个问题是: 只有一台redis,让我想办法分成测试环境和生产环境用 我没想到啥好办法能想到的就是key分别以特定的前缀开头
点赞 回复 分享
发布于 10-16 10:42 上海
redis爆了咋办
点赞 回复 分享
发布于 10-15 12:47 四川
这个面试题看起来有些难度,好好复盘总结下咋回答😹
点赞 回复 分享
发布于 10-15 12:08 广东

相关推荐

12-06 12:37
给定一组朋友关系,统计一下该朋友关系网中的朋友圈个数。朋友圈的定义:一个朋友圈至少由3个朋友组成,且要求同一个朋友圈中的任意两个人都具有直接的朋友关系。输入描述输入一个朋友关系列表,如&nbsp;Fiends&nbsp;=A.B],[A.C],IB,DI,其中的每一个元素&nbsp;Friendsi表示&nbsp;Friends[i][0)和&nbsp;Friends&nbsp;[i][1]&nbsp;是朋友关系&nbsp;先输入一个数字&nbsp;N&nbsp;代表关系的总数,后面每条关系一行,两个成员以逗号分隔输出描述输出一个整数,表示整个关系网中朋友圈的个数补充1:Friends.length&gt;=1,Friends.length&lt;=&nbsp;10^32:输入的总朋友个数&lt;=&nbsp;1003:输入保证&nbsp;Friend[i][0]和&nbsp;Friend[i][1]一定不一样,且同一关系不会反向输入,即不会同时输入[A,B]&nbsp;和&nbsp;[B,A]。4:不考虑子朋友圈,即当发现&nbsp;[A,B,C,D]组成一个朋友圈时,[A,B,C]、[A,B,D]等子朋友圈不单独计数示例1:输入:3A,BA,CB,D输出:0示例2:输入:7A,BA,CB,CA,DD,EB,DA,E输出:3示例3:输入:6A,BA,CB,CA,DB,DD,C输出:1————————————————版权声明:本文为CSDN博主「MISAYAONE」的原创文章,遵循CC&nbsp;4.0&nbsp;BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/misayaaaaa/article/details/155455278//bronKerbosch算法是最优解,但是对于现在的我来说好难啊!如果考试考到了还是老老实实邻接矩阵+暴力算法吧,起码简单一些的用例应该是能通过的#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;unordered_map&gt;#include&nbsp;&lt;string&gt;#include&nbsp;&lt;cmath&gt;#include&nbsp;&lt;algorithm&gt;#include&nbsp;&lt;bitset&gt;using&nbsp;namespace&nbsp;std;//定义全局变量bool&nbsp;isFriend[100][100]&nbsp;=&nbsp;{&nbsp;false&nbsp;};//记录谁和谁是朋友int&nbsp;totalPeople;vector&lt;int&gt;&nbsp;maxCircle;//P-还可以考虑加入到朋友圈的人//X-已经排除,不考虑的人void&nbsp;bronKerbosch(int&nbsp;R,&nbsp;int&nbsp;P,&nbsp;int&nbsp;X)&nbsp;{if&nbsp;(P&nbsp;==&nbsp;0&nbsp;&amp;&amp;&nbsp;X&nbsp;==&nbsp;0)&nbsp;{if&nbsp;(std::bitset&lt;32&gt;(R).count()&nbsp;&gt;=&nbsp;3)&nbsp;{maxCircle.push_back(R);}return;}int&nbsp;pivot&nbsp;=&nbsp;0;//枢顶点IDif&nbsp;(P&nbsp;!=&nbsp;0)&nbsp;{//找到P中第一个人的idfor&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;totalPeople;&nbsp;i++)&nbsp;{if&nbsp;(P&nbsp;&amp;&nbsp;(1&nbsp;&lt;&lt;&nbsp;i))&nbsp;{pivot&nbsp;=&nbsp;i;break;}}}//遍历P中所有不是枢轴朋友的人for&nbsp;(int&nbsp;v&nbsp;=&nbsp;0;&nbsp;v&nbsp;&lt;&nbsp;totalPeople;&nbsp;v++)&nbsp;{//检查P的第v位是否为1if&nbsp;(P&nbsp;&amp;&nbsp;(1&nbsp;&lt;&lt;&nbsp;v))&nbsp;{//if&nbsp;(!isFriend[pivot][v])&nbsp;continue;int&nbsp;newR&nbsp;=&nbsp;R&nbsp;|&nbsp;(1&nbsp;&lt;&lt;&nbsp;v);int&nbsp;newP&nbsp;=&nbsp;0;for&nbsp;(int&nbsp;u&nbsp;=&nbsp;0;&nbsp;u&nbsp;&lt;&nbsp;totalPeople;&nbsp;u++)&nbsp;{if&nbsp;((P&nbsp;&amp;&nbsp;(1&nbsp;&lt;&lt;&nbsp;u))&nbsp;&amp;&amp;&nbsp;isFriend[v][u])&nbsp;{newP&nbsp;|=&nbsp;(1&nbsp;&lt;&lt;&nbsp;u);}}//计算新的Xint&nbsp;newX&nbsp;=&nbsp;0;for&nbsp;(int&nbsp;u&nbsp;=&nbsp;0;&nbsp;u&nbsp;&lt;&nbsp;totalPeople;&nbsp;u++)&nbsp;{if&nbsp;((X&nbsp;&amp;&nbsp;(1&nbsp;&lt;&lt;&nbsp;u))&nbsp;&amp;&amp;&nbsp;isFriend[v][u])&nbsp;{newX&nbsp;|=&nbsp;(1&nbsp;&lt;&lt;&nbsp;u);}}//递归bronKerbosch(newR,&nbsp;newP,&nbsp;newX);P&nbsp;&amp;=&nbsp;~(1&nbsp;&lt;&lt;&nbsp;v);X&nbsp;|=&nbsp;(1&nbsp;&lt;&lt;&nbsp;v);}}}int&nbsp;main()&nbsp;{////声明变量名intN;cin&nbsp;&gt;&gt;&nbsp;N;cin.ignore();if&nbsp;(N&nbsp;&lt;=&nbsp;0)&nbsp;{cout&nbsp;&lt;&lt;&nbsp;0&nbsp;&lt;&lt;&nbsp;endl;return&nbsp;0;}//把人名转换为数字编号unordered_map&lt;string,&nbsp;int&gt;&nbsp;idMap;vector&lt;string&gt;&nbsp;names;int&nbsp;nextId&nbsp;=&nbsp;0;//读取所有朋友关系for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;N;&nbsp;i++)&nbsp;{string&nbsp;line;getline(cin,&nbsp;line);&nbsp;&nbsp;//&nbsp;读取整行//&nbsp;处理可能的空格size_t&nbsp;commaPos&nbsp;=&nbsp;line.find(',');if&nbsp;(commaPos&nbsp;==&nbsp;string::npos)&nbsp;{//&nbsp;没有逗号,格式错误continue;}string&nbsp;a&nbsp;=&nbsp;line.substr(0,&nbsp;commaPos);string&nbsp;b&nbsp;=&nbsp;line.substr(commaPos&nbsp;+&nbsp;1);//&nbsp;去除首尾空格a.erase(0,&nbsp;a.find_first_not_of(&quot;&nbsp;\t&quot;));a.erase(a.find_last_not_of(&quot;&nbsp;\t&quot;)&nbsp;+&nbsp;1);b.erase(0,&nbsp;b.find_first_not_of(&quot;&nbsp;\t&quot;));b.erase(b.find_last_not_of(&quot;&nbsp;\t&quot;)&nbsp;+&nbsp;1);//&nbsp;给人分配idif&nbsp;(!idMap.count(a))&nbsp;{idMap[a]&nbsp;=&nbsp;nextId++;}if&nbsp;(!idMap.count(b))&nbsp;{idMap[b]&nbsp;=&nbsp;nextId++;}int&nbsp;idA&nbsp;=&nbsp;idMap[a];int&nbsp;idB&nbsp;=&nbsp;idMap[b];//标记他们是朋友isFriend[idA][idB]&nbsp;=&nbsp;true;isFriend[idB][idA]&nbsp;=&nbsp;true;}totalPeople&nbsp;=&nbsp;nextId;if&nbsp;(totalPeople&nbsp;&lt;&nbsp;3)&nbsp;{cout&nbsp;&lt;&lt;&nbsp;0&nbsp;&lt;&lt;&nbsp;endl;return&nbsp;0;}int&nbsp;P&nbsp;=&nbsp;0;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;totalPeople;&nbsp;i++)&nbsp;{P&nbsp;|=&nbsp;(1&nbsp;&lt;&lt;&nbsp;i);//把第i位设为1}maxCircle.clear();bronKerbosch(0,&nbsp;P,&nbsp;0);sort(maxCircle.begin(),&nbsp;maxCircle.end(),&nbsp;[](int&nbsp;a,&nbsp;int&nbsp;b)&nbsp;{return&nbsp;std::bitset&lt;32&gt;(a).count()&nbsp;&gt;&nbsp;std::bitset&lt;32&gt;(b).count();});//存储真正独立的朋友圈vector&lt;int&gt;&nbsp;uniCircle;for&nbsp;(int&nbsp;Circle&nbsp;:&nbsp;maxCircle)&nbsp;{bool&nbsp;isSubset&nbsp;=&nbsp;false;for&nbsp;(int&nbsp;larger&nbsp;:&nbsp;uniCircle)&nbsp;{if&nbsp;((Circle&nbsp;&amp;&nbsp;larger)&nbsp;==&nbsp;Circle)&nbsp;{isSubset&nbsp;=&nbsp;true;break;}}if&nbsp;(!isSubset)&nbsp;{uniCircle.push_back(Circle);}}cout&nbsp;&lt;&lt;&nbsp;uniCircle.size()&nbsp;&lt;&lt;&nbsp;endl;}
投递华为HUAWEI等公司10个岗位
点赞 评论 收藏
分享
评论
14
176
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务