草庐IT

Java并发编程解析 | 基于JDK源码解析Java领域中并发锁之同步器Semaphore,CyclicBarrier以及CountDownLatch等的设计思想与实现原理 (四)

苍穹之边,浩瀚之挚,眰恦之美;悟心悟性,善始善终,惟善惟道!——朝槿《朝槿兮年说》写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题:线程之间内存共享,需要通过加锁进行控制,但是加锁会导致性能下降,同时复杂的加锁机制也会增加编程编码难度过多线程造成线程之间的上下文切换,导致效率低下因此,在并发编程领域中,一直有一个很重要的设计原则:“不要通过内存共享来实现通信,而应该通过通信来实现内存共享。”简单来说,就是尽可能通过消息通信,而不是内存共享来实现进程

Java并发编程解析 | 基于JDK源码解析Java领域中并发锁之同步器Semaphore,CyclicBarrier以及CountDownLatch等的设计思想与实现原理 (四)

苍穹之边,浩瀚之挚,眰恦之美;悟心悟性,善始善终,惟善惟道!——朝槿《朝槿兮年说》写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题:线程之间内存共享,需要通过加锁进行控制,但是加锁会导致性能下降,同时复杂的加锁机制也会增加编程编码难度过多线程造成线程之间的上下文切换,导致效率低下因此,在并发编程领域中,一直有一个很重要的设计原则:“不要通过内存共享来实现通信,而应该通过通信来实现内存共享。”简单来说,就是尽可能通过消息通信,而不是内存共享来实现进程

开发思想

思想策略思想解决的问题:一类对象,不同对象有不同的处理实现顶级接口定义规范,面向接口编程抽象策略定义一套模板,不同的交给不同的策略实现具体策略枚举对象标识--具体策略策略集合-对象标识 观察者思想解决的问题:当一个对象状态发生改变时,所有依赖他的对象将得到通知并自动更新常见场景:spring事件消息队列我们不用去关心依赖的对象,只用把自己的事情做好实现:充分解耦可实现一对一和广播顶级事件接口具体事件顶级订阅者接口具体订阅者事件发布中心 上下文思想解决的问题:当一个参数在需要四处传递,可设置上下文,从上下文中取实现:spring提供了一系列获取容器对象的接口ApplicationContextA

开发思想

思想策略思想解决的问题:一类对象,不同对象有不同的处理实现顶级接口定义规范,面向接口编程抽象策略定义一套模板,不同的交给不同的策略实现具体策略枚举对象标识--具体策略策略集合-对象标识 观察者思想解决的问题:当一个对象状态发生改变时,所有依赖他的对象将得到通知并自动更新常见场景:spring事件消息队列我们不用去关心依赖的对象,只用把自己的事情做好实现:充分解耦可实现一对一和广播顶级事件接口具体事件顶级订阅者接口具体订阅者事件发布中心 上下文思想解决的问题:当一个参数在需要四处传递,可设置上下文,从上下文中取实现:spring提供了一系列获取容器对象的接口ApplicationContextA

Java外包程序员的技术出路

学习的两个目的:应付面试应付工作(解决问题)首先要明白学习的目的,不同阶段,不同技术的学习目的是不一样的。有些技术,仅仅是应用级别的,有些技术是原理级别的(主要还是应试)。所以不同技术、不同时间学习方式需要改变。学习方法:mysql、redis等日常使用技术:直接就要熟练掌握,因为日常工作经常使用,忘记说不过。分布式微服务技术:组件用来解决什么问题;思想是什么;会带来什么新的问题,新的问题怎么解决?分布式技术就是用来解决各种分布式问题的组件,体系庞大,涉点面广,主要对应于具体的业务问题。所以学习时了解原理,会应用就行了。源码什么的,面试前挑选两个核心、经典组件了解下核心原理(主要记结论)项目不

Java外包程序员的技术出路

学习的两个目的:应付面试应付工作(解决问题)首先要明白学习的目的,不同阶段,不同技术的学习目的是不一样的。有些技术,仅仅是应用级别的,有些技术是原理级别的(主要还是应试)。所以不同技术、不同时间学习方式需要改变。学习方法:mysql、redis等日常使用技术:直接就要熟练掌握,因为日常工作经常使用,忘记说不过。分布式微服务技术:组件用来解决什么问题;思想是什么;会带来什么新的问题,新的问题怎么解决?分布式技术就是用来解决各种分布式问题的组件,体系庞大,涉点面广,主要对应于具体的业务问题。所以学习时了解原理,会应用就行了。源码什么的,面试前挑选两个核心、经典组件了解下核心原理(主要记结论)项目不

【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)

文章有点长,耐心看完应该可以懂实际原理到底是啥子。这是一个KV数据库的C#实现,目前用.NET6.0实现的,目前算是属于雏形,骨架都已经完备,毕竟刚完工不到一星期。当然,这个其实也算是NoSQL的雏形,有助于深入了解相关数据库的内部原理概念,也有助于实际入门。适合对数据库原理以及实现感兴趣的朋友们。整体代码,大概1500行,核心代码大概500行。为啥要实现一个数据库大概2018年的时候,就萌生了想自己研发一个数据库的想法了,虽然,造轮子可能不如现有各种产品的强大,但是,能造者寥寥无几,而且,造数据库的书更是少的可怜,当然,不仅仅是造数据库的书少,而是各种各样高级的产品的创造级的书都少。虽然,现

【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)

文章有点长,耐心看完应该可以懂实际原理到底是啥子。这是一个KV数据库的C#实现,目前用.NET6.0实现的,目前算是属于雏形,骨架都已经完备,毕竟刚完工不到一星期。当然,这个其实也算是NoSQL的雏形,有助于深入了解相关数据库的内部原理概念,也有助于实际入门。适合对数据库原理以及实现感兴趣的朋友们。整体代码,大概1500行,核心代码大概500行。为啥要实现一个数据库大概2018年的时候,就萌生了想自己研发一个数据库的想法了,虽然,造轮子可能不如现有各种产品的强大,但是,能造者寥寥无几,而且,造数据库的书更是少的可怜,当然,不仅仅是造数据库的书少,而是各种各样高级的产品的创造级的书都少。虽然,现

如何站在开发者的角度理解框架的设计思想?

有问必答最近有好多读者私信我,为什么选择GoFrame做电商项目的开发?原因很简单:因为我司是用GoFrame做电商业务开发的,而且我司同事基本都是PHP转Go的。GoFrame可以说是非常适合PHPer转Gopher的开发框架。在入职我司之前,我有使用Gin和go-micro框架,目前也正在学习go-zero。不管是开发语言还是开发框架,都服务于我们所做的业务,抛开业务去聊语言或者框架都是没有意义的。使用GoFrame做开源项目的另一个原因是:想体验一下V2版本的新特性,自己的项目怎么做自己能完全说了算,没有历史包袱。前言让开发者更好的做到“模块内部高内聚,模块之间松耦合”,是我认为GoFr

如何站在开发者的角度理解框架的设计思想?

有问必答最近有好多读者私信我,为什么选择GoFrame做电商项目的开发?原因很简单:因为我司是用GoFrame做电商业务开发的,而且我司同事基本都是PHP转Go的。GoFrame可以说是非常适合PHPer转Gopher的开发框架。在入职我司之前,我有使用Gin和go-micro框架,目前也正在学习go-zero。不管是开发语言还是开发框架,都服务于我们所做的业务,抛开业务去聊语言或者框架都是没有意义的。使用GoFrame做开源项目的另一个原因是:想体验一下V2版本的新特性,自己的项目怎么做自己能完全说了算,没有历史包袱。前言让开发者更好的做到“模块内部高内聚,模块之间松耦合”,是我认为GoFr