记录java学习计划及相关工作中用到的技术/工具
简单记录自己的学习路线(大部分待学习),及在工作中用到的技术,工具等.目前只记录了大纲,后续会不断补充具体内容,供自己温故,也供同学们参考.
技术有限,写的不对的地方,欢迎大家纠错.
持续更新中。。。
1.java基础 1.j2ee: 1)语法 2)面向对象 3)接口 4)容器 5)异常 6)泛型 7)反射 8)注解 9)I/O 2.多线程,并发 1.并发编程基础 2.线程池 3.锁 4.并发容器 5.原子类 6.JUC并发工具类 3.jvm 1.类加载机制 2.字节码执行机制 3.JVM内存模型 4.GC垃圾回收 5.JVM性能监控与故障定位 6.JVM调优 2.数据结构和算法(概括) 1.数据结构 1.串 2.数组 3.链表 4.堆/栈/队列 5.二叉树 6.哈希 7.图 2.算法 1.排序 2.查找 3.贪心 4.分治 5.动态规划 6.回溯
具体知识点:
1.时间复杂度和空间复杂度
1.时间复杂度计算方法
1)事后统计法:直接比较程序运行前后的时间差
2)事前估算法: T(N) = O(f(n)) --> T(N) = O(n^2)
分析思路:
(1):用常数1代替所有加法常数 常数 T(n)=n²+7n+6 => T(n)=n²+7n+1
(2):修改后的运行次数函数中,只保留最高阶项 T(n)=n²+7n+1 => T(n) = n²
(3):去除最高阶项的系数 T(n) = n² => T(n) = n² => O(n²)
3)常见的时间复杂度:
常数阶O(1)
对数阶O(log2n)
线性阶O(n)
线性对数阶O(nlog2n)
平方阶O(n^2)
立方阶O(n^3)
k次方阶O(n^k)
指数阶O(2^n)
4)常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)< Ο(nk) <Ο(2n) ,随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低
5)我们应该尽可能避免使用指数阶的算法
6)在可能的情况下,使用空间换时间的概念进行优化(例如使用缓存等)
2.数组
3.链表
1.单链表
2.双链表
4.队列:队尾添加数据,队头取出数据
1.用数组实现队列
2.用数组实现循环队列
5.栈
6.优先队列/堆
7.哈希表
1.碰撞解决方法:
1)开放地址法
2)链地址法
3)再次哈希法
4)建立公公溢出区
2.布隆过滤器
8.树
1.二叉树(各种遍历)
2.AVL树
3.B树与B+树
4.红黑树
5.红段树
9.常见算法
1.十大排序算法
1)简单排序:选择/插入/冒泡(必学)
2)分治排序:快速排序/归并排序(必学)
3)分配排序:桶排序/基数排序
4)树状排序:堆排序(必学)
5)其他:计数排序(必学)/希尔排序
2.图论算法
1)图的表示:邻接矩阵和邻接表
2)遍历算法:深度搜索和广度搜索(必学)
3)最短路劲算法:Floyd,Dijkstra(必学)
4)最小生成树算法:Prim,Kruskal(必学)
5)实际常用算法
6)二分图匹配
7)拓展:中心性算法,社区发现算法
对应代码:https://gitee.com/gaoyangsixue/data-structures-and-algorithms/tree/develop/
3.计算机网络 1.ARP协议 2.IP协议/ICMP协议 3.TCP/UDP协议 4.DNS/HTTP/HTTPS协议 5.session/cookie 4.SQL/数据库 1.SQL语句 2.SQL语句优化 3.事务,隔离级别 4.索引 5.锁 5.操作系统 1.进程/线程 2.并发/锁 3.内存管理和调度 4.I/O原理 6.设计模式 1.单例 2.工厂 3.代理 4.策略 5.模板方法 6.观察者 7.适配器 8.责任链 9.建造者 7.spring家族 1.spring 1.IOC 2.AOP 2.springMVC 3.springboot 1.自动配置,开箱即用 2.整合WEB 3.整合数据库 4.整合权限(shiro/spring security) 5.整合中间件(Redis/MQ/RPC框架/NIO框架) 8.服务器软件 1.web服务器:Nginx 2.应用服务器: 1.Tomcat 2.Jetty 3.Undertow 9.中间件 1.缓存 1.Redis: 1)5大基础数据类型 2)事务 3)管道 4)持久化 5)集群 2.zookeeper: 2.消息队列 1.RocketMQ 2.RabbitMQ 3.kafka 3.RPC框架 1.Dubbo 2.gRPC 3.Thrift 4.SpringCloud 5.Netty 10.数据库框架 1.ORM层框架 1.mybatis 2.hibernate 3.JPA 2.连接池 1.Druid 2.HikariCP 3.C3P0 3.分库分表 1.MyCAT 2.sharding-JDBC 3.sharding-Sphere 11.搜索引擎 1.ES 2.Solr 12.分布式/微服务 1.服务注册/发现 1.Consul 2.Zookeeper 3.Nacos 2.网关 1.zuul 2.GateWay 3.服务调用 1.Ribbon 2.Feign 4.熔断/降级 1.Hystrix 5.配置中心 1.config 2.apollo 2.nacos 6.认证和授权: 1.spring security 2.OAuth2 3.SSO单点登录 7.分布式事务 1.JTA接口-Atomikos组件 2.2PC/3PC 3.XA模式 4.TCC模式 1)tcc-transaction 2)byteTcc 3)EasyTransaction 4)Seata 5.SAGA模式 1.ServiceComb 2.Seata 8.任务调度 1.quartz 2.Elastic-job 9.链路追踪 1.Zipkin 2.sleuth 3.skywalking 10.日志分析与监控 1.ELK 1)ElasticSearch 2)Logstash 3)Kibana 13.虚拟化/容器化 1.容器技术:Docker 2.容器编排技术: 1)kubernetes 2)swarm 14.workwith 1.socket 2.ftp 3.sftp 4.fserver 5.http 6.soap 报文 7.XML/JSON 解析及转换 8.正则 9.加解密/加解签 10.工具类(时间/日期/货币格式化....) 11.quartz 12.haproxy 13.工作流 14.配置/spring... 15.开发工具 1.git/gitlab 2.idea/eclipse 3.maven 4.FlashFxp 5.secureCRT/Xshell 6.DBeaver(数据库)/Navicat 7.JSONView 8.postman/jmetter 14.前端 1.基础: 1)三大件: html/css/javascript 2)基础库:jquery/ajax 2....