学习java架构的笔记

来源:互联网 发布:c 程序员 编辑:程序博客网 时间:2024/06/01 21:30
对于接触 Java 不太久的朋友,建议按照以下几个步骤来学习:
1、学习 Java 基础语法与核心技术,包括 Servlet、JSP、JDBC 等。
2、熟练使用流行开源框架,包括Spring、MyBatis 等
3、研究开源框架源码,并吸取其中优秀的架构
六大设计原则
  1. 单一职责原则(Single Responsibility Principle - SRP)

    原文:There should never be more than one reason for a class to change.

    译文:永远不应该有多于一个原因来改变某个类。

    理解:对于一个类而言,应该仅有一个引起它变化的原因。说白了就是,不同的类具备不同的职责,各施其责。这就好比一个团队,大家分工协作,互不影响,各做各的事情。

    应用:当我们做系统设计时,如果发现有一个类拥有了两种的职责,那就问自己一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分吧。千万不要让一个类干的事情太多!

    2. 开放封闭原则(Open Closed Principle - OCP)

    原文:Software entities like classes, modules and functions should be open for extension but closed for modifications.

    译文:软件实体,如:类、模块与函数,对于扩展应该是开放的,但对于修改应该是封闭的。

    理解:简言之,对扩展开放,对修改封闭。换句话说,可以去扩展类,但不要去修改类。

    应用:当需求有改动,要修改代码了,此时您要做的是,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。当然,如果能够确保对整体架构不会产生任何影响,那么也没必要搞得那么复杂了,直接改这个类吧。

    3. 里氏替换原则(Liskov Substitution Principle - LSP)

    原文:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

    译文:使用基类的指针或引用的函数,必须是在不知情的情况下,能够使用派生类的对象。

    理解:父类能够替换子类,但子类不一定能替换父类。也就是说,在代码中可以将父类全部替换为子类,程序不会报错,也不会在运行时出现任何异常,但反过来却不一定成立。

    应用:在继承类时,务必重写(Override)父类中所有的方法,尤其需要注意父类的 protected 方法(它们往往是让您重写的),子类尽量不要暴露自己的 public 方法供外界调用。

    该原则由麻省理工学院的 Barbara Liskov 女士提出,她是美国第一位获取计算机博士学位的女性,曾经也获得过计算机图灵奖。

    4. 最少知识原则(Least Knowledge Principle - LKP)

    原文:Only talk to you immediate friends.

    译文:只与你最直接的朋友交流。

    理解:尽量减少对象之间的交互,从而减小类之间的耦合。简言之,一定要做到:低耦合,高内聚。

    应用:在做系统设计时,不要让一个类依赖于太多的其他类,需尽量减小依赖关系,否则,您死都不知道自己怎么死的。

    该原则也称为“迪米特法则(Law of Demeter)”,由 Ian Holland 提出。这个人不太愿意和陌生人说话,只和他走得最近的朋友们交流。

    5. 接口隔离原则(Interface Segregation Principle - ISP)

    原文:The dependency of one class to another one should depend on the smallest possible interface.

    译文:一个类与另一个类之间的依赖性,应该依赖于尽可能小的接口。

    理解:不要对外暴露没有实际意义的接口。也就是说,接口是给别人调用的,那就不要去为难别人了,尽可能保证接口的实用性吧。她好,我也好。

    应用:当需要对外暴露接口时,需要再三斟酌,如果真的没有必要对外提供的,就删了吧。一旦您提供了,就意味着,您将来要多做一件事情,何苦要给自己找事做呢。

    6. 依赖倒置原则(Dependence Inversion Principle - DIP)

    原文:High level modules should not depends upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.

    译文:高层模块不应该依赖于低层模块,它们应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

    理解:应该面向接口编程,不应该面向实现类编程。面向实现类编程,相当于就是论事,那是正向依赖(正常人思维);面向接口编程,相当于通过事物表象来看本质,那是反向依赖,即依赖倒置(程序员思维)。

    应用:并不是说,所有的类都要有一个对应的接口,而是说,如果有接口,那就尽量使用接口来编程吧。

  2. 作者:刘若海
    链接:https://www.zhihu.com/question/29031276/answer/214091926
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    那么架构师该学些什么知识呢?请看下面罗列的知识点

    第一部分 Java高并发编程

    1.Java 线程、锁基础知识

    2.深入剖析volatile、synchronized、Lock、AtomicX关键字(一)

    3.深入剖析volatile、synchronized、Lock、AtomicX关键字(二)

    4.深入剖析java concurrent 包 阻塞队列、ConcurrentMap

    5.深入剖析java concurrent包 闭锁、栅栏、交换机、信号量

    6.深入剖析java concurrent 包 执行器服务、线程池、Jvm调优


    第二部分 分布式系统+Zookeeper + 消息中间件

    7.项目简介:Springboot简介入门配置项目准备

    8.MariaDB主从安装SpringBoot整合MyBatis配置

    9.MyBatis主从实现代码读写分离应用以及实现

    10.RocketMQ入门及其使用(一)

    11.RocketMQ入门及其使用(二)

    12.RocketMQ与项目整合

    13.消息可靠性投递和幂等设计与实现

    14.Zookeeper Java api 、rmi高可用分布式集群

    15.Zookeeper整合RocketMQ代码实现

    16.生产、消费平台消息业务场景讲解(一)

    17.生产、消费平台消息业务场景讲解(二)

    18.项目架构总结

    第三部分 分布式搜索引擎

    19.课程大纲介绍 elk相关技术栈的介绍

    20.搜索引擎相关技术知识

    21.Elasticsearch的学习与使用(一)

    22.Elasticsearch的学习与使用(二)

    23.ElasticSearch, Logstash, Kibana技术栈的学习与使用(一)

    24.ElasticSearch, Logstash, Kibana技术栈的学习与使用(二)

    25.扩展开源日志组件实现java项目日志与ES结合

    26.分布式服务链路跟踪平台设计与代码实现一

    27.分布式服务链路跟踪平台设计与代码实现二

    28.分布式服务链路跟踪平台设计与代码实现三

    29.分布式服务链路跟踪平台设计与代码实现四

    30.项目架构总结

    第四部分 NIO + Netty高并发编程

    31.网络编程的伪异步IO模式、模型概念、原理

    32.网络编程的NIO、AIO编程模型讲解

    33.通信框架Netty实战部署以及Netty服务讲解

    34.Netty的TCP粘包拆包、序列化以及自定义协议

    35.Netty实战数据通信以及集群心跳检测服务

    36.数据交换项目通信服务场景讲解和环境搭建

    37.数据交换项目设计、代码实现(一)

    38.数据交换项目设计、代码实现(二)

    39.数据交换项目设计、代码实现(三)

    40.数据交换项目设计、代码实现(四)

    41.数据交换项目设计、代码实现(五)

    42.项目架构总结

    第五部分 高并发+高可用+微服务分布式互联网架构实战

    43.项目简介,SpringCloud简介、作用

    44.数据库表结构设计整体项目微服务概述

    45.微服务讲解与搭建(一)

    46.微服务讲解与搭建(二)

    47.微服务讲解与搭建(三)

    48.Nginx学习与使用

    49.Redis数据类型、JDBC、持久化(AOF+RDB)

    50.Redis Transaction事务、pipeline以及优化和Sentinel高可用集群

    51.Nginx分离zuul+Redis实现token网关登录认证

    52.Activiti工作流核心讲解(一)

    53.Activiti工作流核心讲解(二)

    54.实现动态工作流事项申请审批流程

    55.项目架构总结

    第六部分 Hadoop Hive分布式大数据存储与计算

    56.Hadoop核心介绍、集群结构、伪分布搭建方案

    57.HDFS底层原理、分布式搭建实现方

    58.HDFS中datanode以及namenode详解

    59.Hadoop2.x集群搭、HA、集群常见问题以及HA部署

    60.Yarn平台详解、HDFS总结

    61.MapReduce工作流程、切片机制详解、Shuffle Sort介绍

    62.Wordcount实例工作流程介绍、MapReduce总结

    63.MapReduce实战案例以及Pagerank算法

    64.Hive体系以及集群构建、

    65.Hive HiveQL、数据类型、表结构、

    66.Hive DML、DDL、select与客户端

    67.Hive 自定义函数、Hive与JDBC

    68.外部表分区表讲解、Hive优化

    69.ZooKeeper集群、数据一致性与Paxos算法和数据模型讲解

    70.写操作和ZooKeeper对应关系以及Watcher关系和集群管理

    71.大型电商日志以及订单管理项目实战讲解

    第七部分 Python与Scala

    72.Python基础 注释、逻辑、数据类型等、元组、列表、字典等

    73.Python 常见内建函数、函数参数、类与继承网络爬虫案例

    74.Python mongodb基础、数据库连接、pip安装模块、

    75.Scala语言基础 解释器、变量、常量、数据类型、条件表达式、输入输出

    76.Scala 语言 元组、映射、对象、类、包、引入、继承

    77.Scala高阶函数、操作符、集合和数据库连接

    第八部分 Hbase Spark Kafka Storm分布式实时存储与流式计算

    78.HBase数据模型、系统架构、集群构建

    79.HBase树形表设计,读、写优化以及案例分析

    80.Spark介绍以及与Hadoop和Strom比较、安装

    81.Spark中RDD、Transformation、Action以及PageRank

    82.Spark缓存策略以及容错处理和宽窄依赖讲解

    83.Spark集群构建、任务调度、性能优化以及源码解读

    84.Spark Streaming实时计算方案

    85.Kafka体系结构、存储策略、分区、发布与订阅

    86.Kafka 整合zookeeper协调管理 java scala操作kafka

    87.Flume和Storm与Kafka整合

    88.Storm集群构建、配置文件以及常见问题解决

    89.Storm分组策略以及常用组件和第一个Storm实例

    90.Storm整合消息队列、Storm Trident以及整合Hadoop2.x

    91.电信基站话务数据实时分析项目讲解


    第九部分 分布式数据挖掘、机器学习、人工智能

    92R语言 数据类型、循环、函数使用、

    93.SparkMLlib机器学习以及贝叶斯、随机森林算法实现以及互联网平台大数据分析项目项目实战讲解

    94.Mahout讲解以及分类、聚类讲解

    95.项目实战 微博营销数据挖掘项目以及推送项目讲解

    96.项目实战 分布式计算平台、数据采集flume、数据清洗ETL、

    97.项目实战数据库 HBase、redis 机器学习Mahout

    98.机器学习与TensorFlow

    第十部分 搭建企业级分布式云

    环境

    99.Docker VM、docker对比、系统架构、进程虚拟化 轻量级虚拟化

    100.Docker 镜像制作、常用命令、镜像迁移、docker pipework、docker weave

    101.KVM 系统架构、适用场景、Qemu、Libvirt、快照、系统扩展及java、Python控制kvm

    102.OpenStack 模块和基本原理分析、多节点安装部署、Keystone、glance、cinder、swift、Neutron、 openstack Api二次开发


原创粉丝点击