JAVA基础技术体系结构

全栈技术路线:
 
1. 基础 - 数据 结构(数组、单/双向链表、二叉树、B树、 有/无向图 、哈希表、 压缩列表 、跳表、 位图、 队列
1.1 算法 基础(GC算法、排序算法、链表遍历算法、二叉查找算法、递归、动态规划、一致性Hash算法、先进后出队列算法)
2. 基础 -JVM 原理及调优(JVM内存划分、JVM类加载机制、对象的生命周期、GC垃圾回收器、参数调优)
3. 基础 -Spring 源码及 应用(Bean生命周期、环形依赖)
4. 网络编程 - Netty 通讯 原理(NIO模型)
5. 并发编程 - 线程(线程池、锁、队列、拒绝策略)
6. 微服务 - 开发框架 - Dubbo HSF SpringCloud
7. 微服务 - 注册 中心高可用方案 - Eureka Nacos、EDAS
8. 微服务 - 配置 中心 - Nacos Apollo Spring cloud Config Zookeeper ETCD、 Disconf
9. 微服务 - 限流 & 降级 - Hystrix sentinel
10. 微服务 - 网关 - Zuul GateWay
11. 微服务 - 链路追踪 - skywalking Slueth Zipkin
12. 高可用 - 负载 均衡 - Nginx LVS Haproxy Feign Ribbon Zookeeper
13. 高可用 - 分布式 - - Reddision ZK
14. 高可用 - 分布式 - 事务 - TCC Saga、Seata
15. 高可用 - 高速 缓存方案 - Redis Codis Twemproxy Cluster 、冷热备份、性能调优、数据迁移
16. 高可用 - 异步 框架 - KafKa RocketMQ MNS RabbitMQ 、原理及集群部署
17. 高可用 - 调度 框架 - XXLJob
18. 高可用 - 编码 规则 - 高可用 ID 服务 中心
19. 高可用 -SLA
20. 高可用 - 灰度方案
21. 高可用 - 安全架构
22. 高性能 - 性能调优、响应时间、吞吐量、高并发
23. 模板 引擎 -Enjoy Freemaker
24. 规则 引擎 - Drools
25. 工作 流引擎 - Activiti
26. 分布 式日志框架 - ELK Solr Beats
27. 数据库 - MYSQL 、阿里 RDS MyCat 、索引、性能调优、灾备、分库分表( shardingspere
28. NoSQL-MongoDB 、集群、冷热备份、数据迁移、安全管理
29. 连接 - hikaricp druid
30. 文档 - Swagger YAPI
31. DevOps 自动化 - Git Gradle Jenkins Maven
32. 容器 - K8S Docker Rancher
33. 自动化运维 - Saltstack Zabbix
34. 监控 -Prometheus Grafana
35. 三方 - 支付、微信 JFinal
36. 业务 - 秒杀、详情页
37. 设计模式(兜底、补偿、重试)、研发规范、应用 / 部署架构、技术选型( CAP BASE 、通信原理、 CDN 、多级缓存、 MQ SSO
38. 大数据 - 推荐系统、 Spark 全栈、 HDFS Hbase Flink K afKa
39. 区块链

一、JDK新特性

jdk1.8新特性知识点:

  • Optional

 

Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。

  • Lambda表达式

Lambda 表达式也可称为闭包,是推动 Java 8 发布的最重要新特性。lambda表达式本质上是一个匿名方法。

口诀:左右遇一省括号,左侧推断类型省

语法:(parameters) -> expression 或 (parameters) ->{ statements; }

注:当一个接口中存在多个抽象方法时,如果使用lambda表达式,并不能智能匹配对应的抽象方法,因此引入了函数式接口的概念

  • 函数式接口

value -> System.out.println(value)是一个Consumer函数式接口,可以采用list.forEach(System.out::println);方法引用的方式替换。

  • *方法引用和构造器调用

使用操作符“::”将方法名和对象或类的名字分隔开

  • Stream API
例子:set.stream().forEach(i-> System.out.println(i));
  • 接口中的默认方法和静态方法

Java 8 对接口做了进一步的增强。

a. 在接口中可以添加使用 default 关键字修饰的非抽象方法。即:默认方法(或扩展方法)

b. 接口里可以声明静态方法,并且可以实现。

默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是。

  • 新时间日期API

Duration和Period
Duration用于计算两个时间间隔
Period用于计算两个日期间隔

二、集合特性

LinkedeList和ArrayList的区别

LinkedeList和ArrayList是常用的两种存储结构,都可以实现了List接口。

1、数据结构不同

ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

2、效率不同

当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

3、自由性不同

ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

4、主要控件开销不同

ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

JDK1.8 HashMap底层实现原理

最新实现原理:采用数组+链表+红黑树。

JDK 1.8 中引入了红黑树(查找时间复杂度为 O(logn))来优化这个问题,红黑树是许多平衡搜索树中的一种,可以保证在最坏的情况下基本动态集合操作的时间复杂度为O(logn),n为节点个数。 
同时在扩容的时候,重哈希的计算方式大大简化,仅仅通过计算高出来的一位是1还是0进行拆分,如果是1,则位于新数组中相同的位置+旧数组长度的位置;如果是0,则位于新数组中相同的位置。不仅计算方式简单,而且还把之前的冲突分散到其他的桶里。

三、Object常用方法

Object类有12个成员方法,按照用途可以分为以下几种 
1,构造函数 
2,hashCode和equale函数用来判断对象是否相同, 
3,wait(),wait(long),wait(long,int),notify(),notifyAll() 
4,toString()和getClass, 
5,clone() 
6,finalize()用于在垃圾回收

四、java深克隆和浅克隆

基本概念

1、浅复制(浅克隆)

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对象。

2、深复制(深克隆)

被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

实现java深复制和浅复制的最关键的就是要实现Object中的clone()方法

五、其他

NIO

NIO原理

selector chanel选择

JDK

JAVA8十大新特性

默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API

Spring

springBean加载机制

第一种:通过注解@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

第二种是:通过 在xml中定义init-method 和  destory-method方法

第三种是: 通过bean实现InitializingBean和 DisposableBean接口

springBean生命周期

实例化(容器寻找Bean定义将其实例化)

设置属性(依赖注入)

BeanNameAware setBeanName

BeanFactoryAware setBeanFactoy

BeanPostProcessor预初始化

InitializingBean afterPropertiesSet

调用定制的init-method方法

调用BeanPostProcessor后初始化方法

-----------------

容器关闭

DisposalbeBean destroy方法

调用定制destroy-method方法

 

各种接口方法分类

Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

1、Bean自身的方法  :  这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法

2、Bean级生命周期接口方法  :  这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法

3、容器级生命周期接口方法  :  这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。

4、工厂后处理器接口方法  :  这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器  接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

Spring4.0增强和新功能

@Configuration注解、@Bean注解以及配置自动扫描、bean作用域

注: 
(1)、@Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同; 

(2)、@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域; 

(3)、既然@Bean的作用是注册bean对象,那么完全可以使用@Component、@Controller、@Service、@Ripository等注解注册bean,当然需要配置@ComponentScan注解进行自动扫描

 

设计思想&设计模式

 

  1. 单例模式
  2. 代理模式
  3. 工程模式
  4. 门面模式
  5. 观察者模式

代理模式是常用的Java设计模式。代理类主要负责为委托类预处理消息、过滤信息、把消息转发给委托类,以及事后处理信息等。

 

 

 

数据库高可用

服务高可用

限流&降级

反向代理

分布式存储

性能调优

代码Review

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江晓曼*凡云基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值