消息队列高手课
只有在并发环境中,共享资源不支持并发访问,或者说并发访问共享资源会导致系统错误的情况下,才需要使用锁。
死锁是指,由于某种原因,锁一直没有释放,后续需要获取锁的线程都将处于等待锁的状态,这样程序就卡死了。
导致死锁的原因
- 获取了锁之后没有释放
- 锁重入
- 多把锁互相锁住
避免死锁的几点建议
- 避免滥用锁,程序里用的锁少,写出死锁 Bug 的几率自然就低
- 对于同一把锁,加锁和解锁必须要放在同一个方法中
- 尽量避免同时持有多把锁
- 解锁的顺序要和加锁顺序相反
- 在所有需要加锁的地方,按照同样的顺序加解锁
后端技术面试 38 讲
框架是对某一类架构方案可复用的设计与实现。
框架 vs 工具
框架通常规定了一个软件的主体结构,可以支撑起软件的整体或者局部的架构形式。
还有一类可复用的组件不控制软件的主体流程,也不支撑软件的整体架构,比如 Log4J 提供了一个可复用的日志输出功能,但是,日志输出功能不是软件的主体结构,所以我们通常不称 Log4J 为框架,而称其为工具。
一般说来,我们使用框架编程的时候,需要遵循框架的规范编写代码。
框架会调用我们编写的代码,而我们编写的代码则会调用工具完成某些特定的功能,比如输出日志,进行正则表达式匹配等。
如何设计、开发一个编程框架?
框架应该满足开闭原则,即面对不同应用场景,框架本身是不需要修改的,需要对修改关闭。
同时框架还应该满足依赖倒置原则,即框架不应该依赖应用程序,因为开发框架的时候,应用程序还没有呢。应用程序也不应该依赖框架,这样应用程序可以灵活更换框架。
编程框架与应用程序、设计模式、设计原则之间的关系:
- 面向对象的设计目标是低耦合、高内聚
- 为了实现这个目标,人们提出了一些设计原则,主要有开闭原则、依赖倒置原则、里氏替换原则、单一职责原则、接口隔离原则
- 在这些原则之上,人们总结了若干设计模式,最著名的就是 GoF23 种设计模式,还有 Web 开发同学非常熟悉的 MVC 模式等等
- 依照这些设计模式,人们开发了各种编程框架
- 使用这些编程框架,开发者可以简单、快速地开发各种应用程序
架构师应该通过代码落实自己的架构设计,也就是通过开发编程框架,约定软件开发的规范。开发团队依照框架的接口开发程序,最终被框架调用执行。架构师不需要拿着架构图一遍一遍讲软件架构是什么,只需要基于框架写个 Demo,大家就都清楚架构是什么了,自己应该如何做了。
断舍离
“物如其人”,杂物收纳的样子就是你本身的样子。
“自立、自由、自在法”
断舍离是“加分法”。也就是尽管得分较低,全力集中在“达成事件”上,一点点地增加成就感。
小成功的不断叠加会给人带来巨大的自信心。
断舍离也正是要从非常简单的小地方着手的。小地方获得的小成功的不断累加,能给人以勇气和信心去面对自己的老大难问题。
东西多的人往往面临的事情也多,首先压缩一下自己要处理的事情。然后从最简单的一小点开始实践断舍离。
断舍离把我们的生命分为三块——肉体生命、社会生命、精神生命,三者是我们生存下去不可或缺的。
- 肉体生命是作为生物的人的生命
- 社会生命是对归属和被承认的欲望
- 精神生命是对智慧、美、沟通的渴望
无论是谁,不管他生活在哪个地方,都会有一种倾向——轻视肉体生命,只关注社会方面和精神方面的事物。这种倾向也许可以归结为“人性”。但是肉体生命是一切的基础。只有这个肉体基础健康良好,才可能让自己的社会生命和精神生命绽放光彩。没有气力开始实践断舍离,总也迈不出第一步的人,首先要让作为根基的肉体生命恢复元气。
断舍离通过改善作为生命基台的肉体的生存环境——家,来保持三个生命的完备与健全。
“没有穿的衣服=没有想穿的衣服”相当于还没有稳定的自我意象。
衣柜断舍离
步骤
- 把柜子的门全打开,拿出所有的衣服,全部摆在面前
- 丢掉发霉的旧衣服、有裂缝划痕的破衣服等不能再穿的衣服,从“必要、合适、愉快”三个维度压缩衣服量
- 衣柜基本上是“看不见的收纳空间”,物量应该大约占空间的 7 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便。
壁橱断舍离
类似反射性的“给臭东西盖上盖子,眼不见为净”的做法,就是思维贫乏的表现,而被强塞进壁橱里不再穿戴的衣物就是懒惰的证明。
把“看不见的收纳空间”整理成无论对谁都能大大方方展示的状态,才能立竿见影地提高自我肯定感。
步骤
- 完全打开壁橱,拿出所有东西,摆在面前
- 从已经毁坏的、不能用的杂物开始处理,逐步以“必要、合适、愉快”三个维度压缩物量
- 壁橱基本上是“看不见的收纳空间”,物量应该大约占空间的 7 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便。
厨房断舍离
不是用隔断来固定杂物的位置,而是让它们身处一个“宽松舒适”的空间。
从“one touch 法”的角度来看,整备出能够轻松煮饭和便利行动的路线,才能提高全家人的生命质量。
步骤
- 完全打开橱柜,拿出所有东西,摆在面前
- 从已经过期的食品、不能用的工具和碗筷开始处理,逐步以“必要、合适、愉快”三个维度压缩物量
- 厨房橱柜和抽屉基本上是“看不见的收纳空间”,物量应该大约占空间的 7 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便。
餐具柜断舍离
吃饭并不是填饱肚子,而是五官一起感受色香味的愉悦时刻,没有什么比吃饭的用具更能左右饭菜的好坏了。
可以说对餐具讲究品位和美感的人其实怀着让自己和家人愉快吃饭的心情。
步骤
- 完全打开餐具柜,拿出所有东西,摆在面前
- 从有裂纹的、有缺口的餐具开始处理,以长期未用的餐具或待客用餐具为重点,逐步以“必要、合适、愉快”三个维度压缩物量
- 餐具柜基本上是“看得见的收纳空间”,物量应该大约占空间的 5 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便。
冰箱断舍离
“绝不糟蹋食物”固然没错,但是把食物扔进冰箱置之不理,难道就是在珍惜食物吗?
步骤
- 完全打开冰箱,拿出所有东西,摆在面前
- 从过期的食物开始处理,包括那些看起来一点胃口也没有的食材,从“必要、合适、愉快”三个维度压缩物量
- 冰箱是“看不见的收纳空间”,物量应该大约占空间的 7 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便
书架断舍离
步骤
- 书架是全部书籍都以看得见的状态陈列的,所以,首先是多次估计藏书量
- 压缩书籍量的唯一关键点就是看这本书对自己来说“好不好吃”。从这一点就能认清自己和书籍之间有没有互动性
- 在“看得见的收纳空间”中物量应该大约占 5 成,不过书籍是个例外。只需认识到“总量限制”——书籍能全部收纳到书架上就可以。从“易取、好收、美观”三个维度收纳整理,做到使用方便。
厕所断舍离
步骤
- 全部打开厕所里的收纳箱,确认下东西的状况
- 扔掉一些会给人造成不洁净印象的杂物,比如说那些满是灰尘的芳香剂或小装饰物、洁厕灵等,要不扔掉,要不擦干净再放回去
- 厕所里面是“看不见的收纳空间”,物量应该压缩到大约占空间的 7 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便
玄关断舍离
步骤
- 把鞋柜全打开,拿出包括报纸之类的所有东西
- 从旧皮鞋、脏跑鞋、撑不开的坏伞等不能用的东西开始清理,从“必要、合适、愉快”三个维度压缩物量
- 鞋柜是“看不见的收纳空间”,物量应该大约占空间的 7 成。从“易取、好收、美观”三个维度收纳整理,做到使用方便。把鞋柜上面的空间当作“看得见的收纳空间”,物量不超过这片空间的 1 成,把家的“脸”当作艺术画廊,装点成美观的物品展示点
客厅、餐厅断舍离
步骤
- 虽然想“完全打开门,拿出所有东西”,不过客厅、餐厅是每天全家人的聚集地。没有相当的条件,把东西全部摆出来很不现实。因此,首先从桌子、架子等看得见的地方开始收拾。确认一下东西是怎么摆放的,甚至可以拍个照片,对照片进行仔细观察。
- 先从自己的东西或者其他人不需要的东西开始清理,那些 DM(直邮广告)、邮件、报纸、传单等纸质类的东西几乎每天都会成群结队来客厅做客。我们可以注意一下“保质期”或是“消费期限”,多次多量地清除。如果不能立刻全部清理,那就进行局部的小清理,比如说“今天可以做 15 分钟的断舍离,那就只清理这个抽屉吧”,规定好清理的时间和地方,逐渐完成客厅、餐厅的整体清理
- 桌子和边柜上是“看得见的收纳空间”,物量应该大约占空间的 1 成。比如桌子就放一束花,别的什么也不放。其他的杂物从“易取、好收、美观”三个维度收纳整理,做到使用方便
大多数时候,与其说是想循环利用,倒不如说想从那些“花大价钱买的东西”的金钱执念或是“扔了太可惜!”之类的罪恶感中逃避出来。