前段时间收到了字节跳动的面试,虽然有点小震惊,但还是用平常心对待了。结果一不小心,面试的时候就吊打了面试官。不愧是我!
前后一个半小时的面试过程全程没卡壳,项目和算法全部搞定,甚至聊到了面试官的盲点…
**面试官:**我看你简历上掌握的技术还蛮多的啊。
**在下:**还行还行,平时会多研究一下。
**面试官:**那直接开始吧。我看你写着熟练掌握分布式技术,那么在多线程并发的情况下,如何保证一个代码块在同一时间只能由一个线程访问?
**在下:**简单,可以用锁来保证。比如java的synchronized语法以及reentrantlock类等等;
**面试官:**嗯嗯,如果在分布式的集群环境中,如何保证不同节点的线程同步执行呢?
**在下:**对于单进程的并发场景,可以使用语言和类库提供的锁;对于分布式场景,可以用分布式锁。
**面试官:**分布式锁的实现有哪些?
**在下:**Memcached分布式锁、Redis分布式锁、Zookeeper分布式锁、Chubby;
**面试官:**哟呵,你对分布式锁研究很深嘛。如何用Redis实现分布式锁?
**在下:**加锁使用setnx命令,key是锁的唯一标识,按业务来决定命名……(此处略去)
**面试官:**Redis与Zookeeper实现分布式锁的区别?
**在下:**redis分布式锁,需要不断去尝试获取锁,比较消耗性能;zk分布式锁,获取不到锁,注册个监听器即可,性能开销较小;redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁;而zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁…
**面试官:**我们聊点别的吧……我看你关于并发这一块也了解过,双11高并发大促场景下,为什么淘宝只能够下订单, 而不能够退款?
**在下:**高并发系统有三把利器用来保护系统:缓存、降级、限流,不能退款就是服务降级,保证核心任务的正常运行…
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了
J-1710435446275)]
[外链图片转存中…(img-tjMJeeer-1710435446275)]