Java非算法手撕总结

正在慢慢更新代码实现到:
https://www.nowcoder.com/discuss/696372866442334208?sourceSSR=users

1. 多线程交替打印:打印内容为ABC循环或者交替打印一段话
2. 多线程场景题:有5个人,在那赛跑,请你设计一个多线程的裁判程序给出他们赛跑的结果顺序,5个人的速度随机处理
3. 手写线程池(实现一个简易线程池)
4. 生产者-消费者模型:例如一个厨子4s生产一个,一个客人10s消费一个
5. 单例模式:懒汉,饿汉,双重校验锁
6. 动态代理
7. 手写一个HashMap,HashSet
8. 有一个0-4的随机器rand4,如何实现0-6的随机器rand6,概率相同。拓展:rand X = func(rand Y),实现func函数
9. 及其逆天的一个阿里手撕,来自于@byebyeneu:写三个Spring接口,调用第一个接口的时候返回这个接口的累计调用次数,调用第二个接口的时候返回调用这个接口的累计p99,调用第三个接口的时候,如果这个接口这时的qps<10,返回success,如果这个接口这时qps>10,返回err
10.判断今天星期几
11.求YYYY-MM-DD的上一天
12.两个线程和队列模拟TCP三次握手

欢迎评论区补充
全部评论
快手问过我一个逆天的:今天星期几
8 回复 分享
发布于 2024-12-09 14:55 山西
多线程转账,死锁
2 回复 分享
发布于 2024-12-09 14:57 广东
责任链
1 回复 分享
发布于 2024-12-09 23:19 北京
重写Map的equals方法: {'a':Object ,'b':Object }=={'a':Object ,'b':Object} Object : Map/List/Number public boolean equals(Map<String, Object> map1,Map<String,Object> map1)
点赞 回复 分享
发布于 04-17 22:41 北京
mark
点赞 回复 分享
发布于 03-25 16:08 上海
mark
点赞 回复 分享
发布于 2024-12-24 20:32 辽宁
太关键了
点赞 回复 分享
发布于 2024-12-23 13:49 福建
mark
点赞 回复 分享
发布于 2024-12-23 10:36 湖南
mark
点赞 回复 分享
发布于 2024-12-19 12:37 湖北
手写代码部分很厉害,感谢分享这些总结。
点赞 回复 分享
发布于 2024-12-10 21:36 重庆
Mark王哥
点赞 回复 分享
发布于 2024-12-10 10:31 浙江

相关推荐

数据库平台开发实习生&nbsp;-&nbsp;技术一面(算法太烂了,建个链表建半天,面试官等不住了,居然还用了c++语法,太招笑了)面试问题速览1.&nbsp;请做个自我介绍。2.&nbsp;能讲一下你实习项目中,分布式锁这块你是怎么实现的吗?3.&nbsp;讲一下你自学的&nbsp;Raft&nbsp;一致性算法。4.&nbsp;(追问)讲一下&nbsp;Raft&nbsp;的日志复制这块。5.&nbsp;你的&nbsp;AI&nbsp;项目里,RAG&nbsp;是怎么做的?向量数据库是怎么选型的?6.&nbsp;讲一下&nbsp;Function&nbsp;Calling&nbsp;的概念和应用。7.&nbsp;现场算法编程:删除链表的倒数第&nbsp;N&nbsp;个节点。(LeetCode&nbsp;19)我的回答策略与分析【针对问题】分布式锁的实现原理【回答策略】:我采用了“方案演进式”的回答方法。1.&nbsp;起点:从最基础的&nbsp;SETNX&nbsp;+&nbsp;EXPIRE&nbsp;方案讲起,这是最容易想到的起点。2.&nbsp;主动暴露问题:立刻指出该方案的缺陷,即两条命令非原子性,在极端情况下会导致死锁。这能体现出你思考的严谨性。3.&nbsp;方案升级:提出使用&nbsp;Redis&nbsp;2.6.12&nbsp;之后提供的原子性命令&nbsp;SET&nbsp;key&nbsp;value&nbsp;NX&nbsp;PX&nbsp;milliseconds&nbsp;来解决上述问题。4.&nbsp;再次深入:继续主动挖掘该方案的潜在问题,即“锁过期了但业务没执行完怎么办?”,引出更高级的“锁续期”概念。5.&nbsp;最终方案:最后点出&nbsp;Redisson&nbsp;等成熟框架是如何通过“看门狗(Watchdog)”机制来自动续期,保证业务执行期间锁的有效性。【回答分析】:这个回答策略的效果非常好。它向面试官展示的不仅仅是你“知道”分布式锁,更是你“理解”它背后的设计权衡和技术演进逻辑。这种结构化的、由浅入深的讲解方式,能清晰地展现出你的技术深度和体系化的知识结构,是面试中一个巨大的加分项。【针对问题】Raft&nbsp;共识算法的核心原理【回答策略】:我使用了“框架先行,细节填充”的策略来解释这个复杂的理论。1.&nbsp;理论破题:先用一句话的&nbsp;CAP&nbsp;理论来给&nbsp;Raft&nbsp;定位,表明它是一个保证一致性(C)和分区容错性(P)的系统,这能快速和面试官对齐上下文。2.&nbsp;结构化拆解:直接引用&nbsp;Raft&nbsp;论文的核心思想,即“将复杂问题拆解为三个子问题:领导者选举、日志复制、安全性”,为后续的讲解搭建清晰的框架。3.&nbsp;分点阐述:逐一讲解“领导者选举”(Follower&nbsp;-&gt;&nbsp;Candidate&nbsp;-&gt;&nbsp;Leader&nbsp;的状态转换、心跳、任期、投票过半)和“日志复制”(日志强制覆盖、复制到大多数节点才&nbsp;commit)的核心机制。【回答分析】:对于复杂的理论问题,最忌讳的是一上来就陷入细节。先搭框架再填充细节,能让你的讲解非常有条理,也方便面试官跟上你的思路。能够清晰阐述自学的底层理论,是展现学习能力和技术热情的绝佳机会。【针对问题】现场算法编程(复盘与反思)【回答策略】:我的第一反应是采用最稳妥的“两次遍历”解法:第一次遍历计算链表总长度&nbsp;L,从而确定要删除的是正数第&nbsp;L-n+1&nbsp;个节点;第二次遍历找到该节点的前一个节点,执行删除操作。【回答分析】:这个思路本身是完全正确的,能够解决问题。但在这次面试中,我最大的不足暴露在了编码的熟练度上。1.&nbsp;“辅助代码”耗时过长:我在“如何根据输入数组构建一个测试用的链表”这个环节卡了比较久,占用了宝贵的思考和编码时间。2.&nbsp;语法细节混淆:在紧张状态下,写出了&nbsp;int*&nbsp;这种非&nbsp;Java&nbsp;语法,说明对语言细节的肌肉记忆不够牢固。3.&nbsp;核心反思:这提醒我,平时刷题不能只停留在&nbsp;LeetCode&nbsp;网页上写核心函数。一定要在本地&nbsp;IDE&nbsp;里,进行从零开始的、包含数据结构定义和测试用例的“实战模拟”,才能真正提升现场编码的速度和准确率。对于“快慢指针”这种更优解法,也应当做到熟练掌握。
查看7道真题和解析
点赞 评论 收藏
分享
评论
22
177
分享

创作者周榜

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