仅记录近期的一些思考:万丈高楼平地起,搞清楚底层逻辑,拨开技术神秘的外衣,很多东西迎刃而解。
一、数据思维
1. 所有的操作,都是围绕数据, 一个.java文件,一个.class文件, 每一个字母,每一次表单提交,都是数据
2. 这些数据可以以不同的形态存在于不同的介质中,可以在磁盘中,可以在内存中,可以在CPU中 ,只是存在的形态不一样
3. 程序代码的各种处理,本质上是对数据的计算和移动,全都依赖于计算机硬件最基本的运行原理
二、数据移动思维
1. 互联网各种分层架构,分布式架构体系的本质是数据的移动,在不管使用了多少种框框架架的一次请求/响应中, 数据在 客户端,到网关,到服务层,到MQ,到Redis,到数据库.. 等等等等 各个中间件中来回移动
2. 各种"奇淫技巧", 都是对数据的计算和移动,并依赖于计算机相关硬件
三、服务业务:归根揭底技术是服务业务的,这里的"业务"应该是抽象出来的某类事务,而不是指人。
这几个思维下,来理解技术,比如:
1. 类加载?从计算机的组成原理来说, 数据必须要"移动"到主存,然后才能移动到CPU中进行各种计算,然后通过网络传输进行数据的各种移动 ,所以需要将.java文件编译为.class文件 ,加载到内存中
2. JVM内存模型?从数据思维的角度,我们编写的代码,里面有各种东西,比如有类,有方法,有枚举,类中还有各种属性,变量,运行时的各种数据, 这就要求 jvm需要对内存进行分类处理,在加载的过程中,分门别类
3. 什么voliate,synchronized,CAS, AQS ,分布式锁 等都是在不同业务场景下,产生了各种数据问题,然后出现了很多所谓"秘技", 来处理对应的问题