什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。
普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题。
如何控制呢?就是设置一个各个线程都能看的见的标志。然后,每个线程想访问临界区域时,都要先查看标志,如果标志没有被占用,则说明目前没有线程在访问临界区域。如果标志被占用了,则说明目前有线程正在访问临界区域,则当前线程需要等待。
这个标志,就是锁。
在单机多线程的java程序中,我们可以使用堆内存中的变量作为标志,因为多线程是共享堆内存的,堆内存中的变量对于各个线程都是可见的。
技术焦虑
现在的技术圈子很火热,任何技术点,任何知识,只要你肯搜索,都能找到资料。但是现在技术圈确实有一个不好的地方,就是贩卖焦虑。这种贩卖焦虑的点并不在于形式,而是一种普遍的心态。特别是对于那种知识点比拼的心态:“xx知道的东西好多,好厉害!我要向xx学习”。我一直宣扬,这种心态千万不要有。xx比你知识点多很多,但是不代表他比你强,比你厉害。程序员如何比拼强弱?要比拼的绝不是知识点的多寡,而是使用知识点的能力强弱。即如何使用你掌握的知识改变行业。
关于晨读,各种账号确实现在很经常发晨读,晨读这件事情,我自己也坚持了三年,现在开的群也在和几个人坚持发。其实我自己也知道,晨读这些内容恐怕没有几个人会看,大多数人恐怕就是浏览了下标题。晨读这个事情,本质是好的,它对收集和发送的人来说是最有利的,基本上收集和发布的人至少需要大致看过这些文章,这对发布的人是一种坚持学习的东西。而但是对于看的人,我自己也知道见仁见智。如果这些晨读标题引起了自身的恐慌和焦虑,我觉得绝对是得不偿失的。
前沿技术
聊聊前沿技术。不管你现在是学习什么前沿的技术,大致一句话应该是没有错的,你所掌握的技术,在你有生之年,是会过时的。这种过时的生命周期是从后端向前端逐渐缩短的。我这里的后端和前端的方向是以靠近真实用户的距离计算的。比如数据库,操作系统这种技术,距离用户最远,用户基本不会感知,他们可能几十年都不会过时,从mysql,linux大致就能看出来。再往前,中间件技术,缓存等技术,大致十几年把。再往前,后端服务技术,我认为生命周期应该是10年之内。再往前,前端技术,我觉得迭代周期应该是5年之内了。如果有工作超过10年的朋友,应该对我这个时间估计也会有所赞同的。迭代更新是伴随着技术红利的,这里的技术红利指的是新技术的培训,人员更新,市场需求等。越是更新换代快的,越容易抢占这个技术红利。在这个技术红利中,会有一波人才缺口流出,会有一波技术很强的人出现。但是,残酷的是,这波人才缺口,很多情况下是通过淘汰只掌握过时的技术的人员空出来的。所以越靠近用户侧的技术人员越需要跟紧技术迭代的脚步,否则一不小心就会被淘汰。当然也不是说越往后端越舒服,技术迭代慢同时也代表坑位固定,因为在同技术领域沉淀很久的老人会把及格线带的很高,所以基本需要沉淀比较久才能成为比较合格的人才。而且靠近后端的人才一旦遇到技术迭代,那么可能是毁灭性的,究其原因,恐怕一个是深入后端技术比较慢,一个是新的后端技术坑更少。
是不是所有的技术迭代都是好的呢?我的观点是肯定的。新技术的出现一定是为了解决某种痛点,或者填补某种空缺才会出现的。但是,大家往往忘记了,技术是为了解决问题的,有很多公司由于体量,技术人员储备等条件,根本不存在所谓的痛点,但是也莫名其妙引入了各种时髦新技术。技术都不是银弹,使用新技术,一定要承担新技术带来的成本和新痛点。衡量一个新技术引入公司的决策是否正确的标准,恐怕应该是业务是否得到提升。这里说的业务提升,两个方面,一个成本侧减少,一个收益侧增加。在我看来的很多公司,对于新的技术往往是为了革新而革新,所带来对公司业务上的伤害,恐怕更多于旧的技术。所以架构师的价值,特别是业务架构师的价值我认为体现在这里,对整个公司或者部门的业务,人员水平有一定判断,选择合适的技术,有时候,甚至于拒绝新技术的引入也是一个成功的决定。
技术人员的发展路线
可以再聊聊技术人员的发展路线。我认为技术人员的发展路线有两条,一条是改变技术行业,一条是改变业务行业。
改变技术行业的人,这类人我认为现在在中国应该是比较少数的。改变技术行业的人基本上恐怕究其一生,最多只能改变一个、至多两个技术行业。这种人,我认为可能必须有热衷于某个技术行业的觉悟。基本上我觉得各个语言的创造者,追随者算是这类人,各种数据库,大型开源项目的创造者、追随者算是这类人。这类人比如mysql的精深专家,基本需要在mysql这个领域没有什么解决不了的问题,而且对这个领域有持续的贡献能力。但是我这十年所见,确实遇到的非常少(可能是我的有限的个人经历所致)。
成为改变业务行业的人,我觉得应该是现在大多数的接触程序员所应该追求的。我们之所以有工作,是公司在某个行业希望有所建树,有所作为,所以雇佣你来做这份工作。如果你不能让公司在这个行业有所发展,那么恐怕,你很快会被公司淘汰。所以,这点是我对所遇到的工作几年之后有职业迷茫的年轻人说的,千万不要为了追求新技术而轻易换行业。任何业务,都有技术可以改变的地方,只是你没找到而已,没找到的原因,恐怕就在于你的浮躁。并不是人人都有机会追求各种高并发的CURD,但是人人都有机会踏踏实实写一些CURD,只要这些CURD在某个行业,某个领域确实是起到了作用,对公司起到了正面收益,那么你的工作就是值得的。代码无分贵贱,能让代码起价值的,就是你怎么使用这个代码改变你所在的业务行业。
所以,对于大多数业务行业的程序员来说,在几年期间,选择一个你喜欢的(或者你很看好的)行业,用各种技术来尝试,改变它,对自己也并不需要设限。就和实验室里面做实验的科学家一样。或许最后可能失败,但是所积累下来失败的经验,才是你真正的财富。而且据我观察,如果在某个行业真的长期沉浸思考的人,最后它自己就会变成这个行业的稀缺资源。各个公司所谓的技术总监,大都需要有这种特质。技术总监做的管理工作,在这个视角看来,是组织一批技术人员用技术改变行业。
最后
笔者已经把面试题和答案整理成了面试专题文档,有想获取到借鉴参考的朋友:点赞关注后,戳这里即可免费领取
7)]
[外链图片转存中…(img-9zcDPZzf-1624626530498)]