阅读本文需要5分钟
1确定自己是否要学习java
1.1其他语言对比
1).net、py、javascript、c/c 。
1.2学习的目的
1)为了当程序员?、高级测试?、黑客?、大数据?、???、主要目标、次要目标。
1.3成本分析
1.3.1能投入多少钱
1)几十块:
百度自学 购买少量书籍 效果1
2)几百块:
购买书或者电子书,或者视频教程 效果3
请一个老司机帮你分析思路以及线上指导 效果4
3)几千块:
请老司机线下指导你 效果5
购买专业成体系的视频教程以及专人服务或者辅导 效果6
4)1-5w:
业务时间线下学习 效果7
脱产学习 效果8
1.3.2能投入多少时间
1)每天8小时
2)每天3-4小时
3)每天1小时
4)每周一天
1.3.3沉默成本
1.3.4机会成本
1.4主要障碍
1.4.1入门难度过高,太容易放弃
1.4.2英语
1.4.3坚持
1)能坚持超过30天么?
2)计算机基础
1.4.4几个计算知识爆炸-导致相当吃力
1.5正确认知自己为何要学习
1.5.1认知是否完善
1)对于编程难度的认知
2)对于能否坚持的正确认知
3)对于学习完使用场景的认知
4)对于学习完能记住多少的正确认知
1.5.2期望目标
1)乐观目标:
达到业界1-2年左右比较优秀开发水平???能够独立搭建框架。增删改查等
2)悲观目标:
需要高度能够依赖百度,朋友的帮助等一系列才能完成简单需求
3)标准差:
能够独立写出一些小程序,少部分需要百度
1.5.3失败处置
1)主要目标完成度
2)同你的次要目标完成度
3)失败利益:
基本达到科普级别
4)失败挽回方案:
1失败是正常的事情,准备好了勇气再来一轮或者二轮学习了么
2心态崩溃自救方案
3失败时间成本经济成本认知
2学前准备
2.1学前教育-计算机基础
2.1.1基本使用计算机软件硬件
1)Windows操作、微软office等
2.1.2计算机网络等常识
- 局域网,ftp传文件,路由器的使用等。
- Windows,cmd命令,主策略,linux系统使用等
2.1.3大学c语言-数据库等编程启蒙知识
- 基本知道变量,循环,控制等?
- 数据库sql相关基础知识
2.2辅助工具
2.2.1 xmind思维导图
1)帮助整理学习成果
2.2.2网易云笔记或者微软onenote,印象笔记
1)帮助记录重点
2.2.3百度,google,github正常使用
1)快速学习知识点
2.2.4 csdn新闻、开源中国新闻
1)帮助自己强化兴趣
2.2.5收藏夹使用、云盘使用
2.3学习工具
2.3.1笔记本
1)又贵又帅气性能又牛逼的笔记本:培养极客文化让自己进入准程序员思维
2)性价比较高的性能优越的电脑:牛逼的电脑让你事半功倍
3)白菜价笔记本:卡顿会影响心情
4)老爷机:极度的卡顿严重影响学习心情
2.3.2硬件
1)键盘
1樱桃高端机械键盘:加强程序员认同感
2雷蛇黑寡妇光污染键盘:炫酷的黑客感觉
3 10块钱的键盘:写不出来可以随意折磨,发泄怨气
4 无所谓那。。好看就行
2)鼠标
2.4方法论
2.4.1大数据方法论
- 技术总量多的可怕
- 技术永远学不完
2.4.2搜商
1)从互联网的各种驱动收集所需的信息,并摒弃不需要的信息
2.4.3互联网迭代论
- 你学的技术必然在迭代中变形,或者竞争对手中会过时
- 反复多次学习回顾是常态
2.4.4 200小时定律
1)任何领域至少需要200小时才能达到精通的水平
2.4.5从一而终法
1)每本书每个人的思路不一样,哪怕有不好的地方,一定要坚持按照一种思路去学习,不要半路换,不然很容易失去乐趣或者放弃。
3学习线路
3.1基础学习
3.1.1基础问题,基本定义,关键字,常用类,基础函数
3.1.1.1 能够认识几乎所有关键字,以及意义
3.1.1.2 能够默写出常用关键字
3.1.1.3 背诵主要概念
举例:
- 什么是重载什么是重写
- 什么是面向对象
3.1.1.4重点知识点
1) abstract、boolean、break、byte、case、catch、char、class、const、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、instanceof、int、interface、long、native、new、package、private、protected、public、return、strictfp、short、static、super、switch、synchronized 、this、throw、throws、transient、try、void、volatile、while
2) class类的编写,引用,函数的编写,调用,函数的参数,函数的返回值。重载,重写,继承,实现,接口,类,抽象类,数组,多维数组。
3) 面向对象:
类与对象、构造方法、封装、继承、多态、抽象类、接口、默认方法
4)常用类:
1 Object:各个数据类型的包装类
2 String,Stringbuffer,Stringbuilder:String的各种处理技巧和思路(字符串查找替换筛选、正序倒序、String问题比较,创建了几个对象问题、Java8新方法)
3 Math
4 时间处理:
经典时间模型:
1 java.util.Date
2 java.sql.Date
3 java.sql.Time java.sql.Timestamp
4 java.text.SimpleDateFormat
5 java.util.Calendar
时钟:
1 System.currentTimeInMillis()
2 TimeZone.getDefault()
提升(经典时间模型):
1 格式化时间
2 时间对比
3 时区转换
4 求闰年,对比时间间隔等
Java8新时间API:
1 处理不用的时区
2检查闰年,检查固定日期
3时间间隔
4线程安全的日期与时间格式器
5 LocalDate,LocalTime,LocalDateTime,ZonedDateTime
5) 数组,多维数组
6)编码规范
3.1.2开发环境
- Eclipse
- Idea
- 环境变量
3.2逻辑学习
3.2.1逻辑流程控制
3.2.1.1 目标
1) 阅读并试图模仿相关编码思路
2 )解决一些经典编程问题,打印正反三角形,求质数,水仙花等 (部分题目难度较高,实在做不出来就先背答案,然后做别的)
3.2.1.2 学习方法
1)看书
2)百度面试题算法题
3)lecode刷题
4)让别人给你题
3.2.1.3 重点知识点
1)if else
2)switch
3)while
4)do while
5)for
6)三元表达式
3.3java核心类学习
3.3.1学习方法强化
3.3.1.1 万物皆对象
1 )看到任何物品思考该对象的属性和方法
2 )猜测多个对象之间的关系
3.3.1.2 学习任何事物
1)5W1H:
why:为什么要用,是原因
what:用来做什么
where:(同样功能的不同技术)什么场景下用
when:何时用
who:谁(哪类人)来用
how:怎么用
3.3.2面向对象深入学习-设计模式
3.3.2.1 目标
1)原则尽可能多记住
2)设计模式佛系
3.3.2.2 知识点
1)设计模式的6大原则:
1开闭原则
2单一职责
3里氏替换原则
4依赖倒转原则
5接口隔离原则
6迪米特法则
7合成复用原则
2)23种设计模式:
创建型模式,共五种:
1工厂方法模式
2抽象工厂模式
3单利模式
4建造者模式
5原型模式
结构型模式,共七种:
1适配器模式
2装饰器模式
3代理模式
4外观模式
5桥接模式
6组合模式
7享元模式
行为型模式,共十一种
1策略模式
2模板方法模式
3观察者模式
4迭代子模式
5责任链模式
6命令模式
7备忘录模式
8状态模式
9访问者模式
10中介者模式
11解释器模式
额外:
1并发行模式
2线程池模式
3.3.2.3 对象之间的关系
3.3.3异常处理Exception
- 背诵全文...,背不到,那单词能认全就好了
- 自定义异常
3.3.4集合Collection
3.3.4.1 目标
1)可以使用重要的集合,次要的百度可以快速掌握
3.3.4.2 知识点
1)类与类之间的关系和区别
1 List:ArrayList、LinkedList
2 Map
3 SET
4 Queue
5部分数据结构学习(自己对应上是哪种):
哈希、 链表、数组、树、队列、不同点,用户场景
2) 集合工具类
Collections
3)使用
1各种集合的遍历方法,增加,删除元素判断,判空
2查找,筛选,排序
3 for,foreach,iterator
4) 泛型
钻石操作符(即<>)
3.3.5输入输出IO
3.3.5.1 目标
1)知道什么时候用什么流
2)知道缓冲的意义和原理
3.3.5.2 知识点
1)字节流,字符流
2)输入流,输出流
3)包装流:
1缓冲流
2对象流
3文件流
4过滤流
4)FileReader,FileWriter
5)Reader,Writer
6)特殊流RandomAccessFile
3.3.6线程Thread
3.3.6.1 目标
1)会用相关函数
2)大概知道异步执行,线程同步,线程锁等概念
3)大概知道线程死锁问题
4)千万别以为你可以完全掌握
3.3.6.2 基础知识
1)线程和进程
3.3.6.3 java.lang.Thread
3.3.6.4 线程池Executor
3.3.6.5 线程的交互,调度,休眠,优先级,让步,同步,合并
3.3.7 文件解析
3.3.7.1 txt解析不难
1)编码问题
3.3.7.2 xml不重要了,了解下
1)sax一次读一点 jdom
2)dom异常读整个文档 dom4j
3.3.7.3 json
1)fastjson -常用
2)jackson -常用
3)gson 不常用
3.3.7.4 properties 不难
3.3.8 反射reflect
1)大概知道就好了
2)了解下动态编译
3.3.9 日志和日志门面
3.3.9.1 日志
1)Log4j,Log4j2,Logback,Jul
2)日志级别
3.3.9.2 门面
1)Commons Logging
2)Slf4j
3.3.9.3 日志格式定制化,文件大小切割,按照时间分割等
3.3.10 网络
3.3.10.1 目标
了解下
3.3.10.2 知识点
1)基础网络知识:七层网络协议
2)socket:子主题1
- tcp与UDP
- Netty了解:大坑没时间的直接放弃
- 客户的./服务器编程思想
- ftp,sftp
- 性能优化思路:
1 bitmap优化
2文件压缩与解压缩
3.3.11正则表达式
1)难度较大,量力而已,了解即可
3.4数据库
3.4.1目标
1)完全掌握数据库sql的使用以及使用java执行sql
3.4.2数据库本身
3.4.2.1 基本数据库知识
1)通用知识:事务
2)mysql专有特点,权限等
3)数据类型
4)约束
5)索引
3.4.2.2 RDBMS术语
1)数据库
2)表
3)列
4)行
5)冗余
6)主键
7)外键
8)复合键
9)索引
10)参照完整性
3.4.2.3 mysql的安装
1)linux不会就先不管,之后再补
2)安装,配置,权限设置,参数设置
3)创建数据库,启动,关闭,重启
4)管理mysql,备份,恢复
3.4.2.4 DDL数据库定义语言
1)ADD/ALTER/DROP
3.4.2.5 DML数据操纵语言
1)sql:
1 insert
2 update
3 delete
4 select:
where:
NULL值处理
运算符:
算数运算符
比较运算符:
like
IS NULL
IN
BETWEEN
>
<>,!=
<=>安全等于
逻辑运算符:
AND
NOT 或 !
OR
XOR
位运算符:
& 按位与
| 按位或
^ 按位异或
! 取反
<< 左移
>> 右移
运算符优先级
连接join
排序
分组
UNION
函数:
字符串处理
数学
日期
高级函数
子主题7
5 复杂sql:
例如列转行,行转列
求出每个班语文成绩最好的前三名
求成绩70分,80分,90分,100分各个区间第一名的名字和分数
2)存储过程
3)函数
3.4.2.6 DCL数据库控制语言
1)grant,deny,revoke权限控制
3.4.3java操作数据库
3.4.3.1 经典jdbc
1)DriverManager,Connection,Statement,PreparedStatement,ResultSet
2)目标:很简单,能用就行
3)增查(单个)查(列表)改删 各种数据格式处理
4)存储过程,游标,batch等特殊场景
3.4.3.2 连接池
1)Druid
2)传统连接池
3.4.3.3 框架
1)全自动化ORM框架
hibernate/JPA:
特点:简单好用,完全符合面向对象
场景:外资或者发达资本主义世界喜欢用,但是国内容易被鄙视
知识点:
主键查询
HQL查询
QBC查询完全面向对象的查询
本地SQL查询
特殊:存储过程调用,函数调用
配置
2)半自动化
mybatis:
特点:中国特色喜欢用,可以直接写sql
知识点:
Xml编写
批量插入,查询
注释方式
配置
3)非主流框架
1JOOQ 真,完全面向对象数据库框架
2支持国货:
nutz
jfinal
4)由于后边需要结合各种其他框架,所以搭建这块先忽略,拿成品直接玩就好了
3.5编程思想深入学习
1)深入一点学习设计原则和设计模式
2)能够背诵和默写,简单工厂,工厂模式,抽象工厂优先..
3.6html,css/js
3.6.1重要度较高
1)门槛技术
3.6.2html/html5
1)各种标签的使用
3.6.3js
3.6.3.1 类似于重新学一个小的编程语言,变量,循环,逻辑判断
3.6.3.2 框架(一般纯前端的项目)
1)前端三巨头:
React
Vue.js
Angular.js
主要思想:数据驱动,MVVM
3.6.3.3 框架java包干前后端工作常用框架
1)jquery已经淘汰但是没有专门前端人员的项目用的多
3.6.3.4 组件库
1)目标:有空的随便学一种其他的类似
2)选择:挺多的,各家大厂都有:
蚂蚁金服antd
传统厂商:
extjs
easyui
miniui
饿了吗element
3.6.3.5 ajax
1)json交互,java,json互相转换
3.6.3.6 编程思想
1)异步编程思想
3.7web编程
3.7.1 tomcat
1)重要并且简单
2)能使用就好了
3)其他容器的了解
3.7.2 servlet
1)传统方式
2)注解方式:大概知道就行
3)jstl???基本没人用了 没时间就算了
4)监听器/过滤器
3.7.3 模板引擎
1)Freemarker
2)Thymeleaf
3)Velocity
4)学一种吧,大概知道这玩意
Freemarker用的多,Thymeleaf新出的
5)了解js也有模板引擎
3.8重要框架学习
3.8.1 maven
3.8.1.1 难度不高,顺便学习下
3.8.1.2 知识点
1)依赖管理
2)本地包,或者是由包导入
3)编译级别
4)插件
5)安装
6)仓库和镜像
3.8.2 springboot
3.8.2.1 重点,投入产出比较高
3.8.2.2 知识点
1)如何使用:
spring官网直接生成
eclipse生成
手工创建
2)基本原理:
原理,以及概念,专业术语:
包括版本差异
webflux
四大神器:
actuator监控-了解
Starter起步依赖
auto-configuration自动配置&约定大约配置
cli-了解
3)思想:
MVC的概念
控制器的概念
开箱即用
IOC,AOP初步使用
4)配置和配置文件
日志集成
xx集成
5)Application事件和监听器
6)主要注解使用
@RestController
@Controller
@RequestMapping
@RequestBody,@ResponseHeader
@Component,@Service,@Autowired
7)额外知识点:
restfulAPI
Swagger
Vo,dto,po
http调用:
集成@Feign
httpclient
StringTemplate了解
定时任务 线程池:
@Async
@Scheduled
@corn表达式
开发,测试,生产多配置文件独立
3.8.2.3 特点
1)快速入门几乎所有框架
3.8.3 spring Framework
3.8.3.1 知识点
1)IOC,AOP
2) 事务:
ACID
声明式事务和编程式事务
事务的传播特性和隔离级别
扩展分布式事务
3.8.3.2 重点
1)投入产出比较高
3.8.3.3 目标
1)顺便学习设计原则,设计模式的大好时机
2)完全掌握,搭建
3)完全掌握注入以及使用
3.8.4 Sring everything
3.8.4.1 mybatis
1)关键配置文件
2)使用:
注解方式
xml方式
高级使用:
Driver
Provider面向对象查询
批量查询
3)多数据源
3.8.4.2 redis
1)redis本身:
原理 数据类型
单机 分布式概念
过期策略,使用场景
缓存命中率概念
RedisDesktopManager工具
NoSQL概念:
键值(key-value)存储
列存储
文档数据库
图形数据库
2)传统RedisTemplate
expire过期,续期等
hasKey等操作
del
get
set
increment递增递减
各种数据类型
StringRedisTemplate、RedisTemplate
3)注解
@Cacheable
@CacheEvict
@CachePut
4)集成相关
配置
配置文件详解
序列化
5)使用场景
缓存
任务队列
网站访问统计
应用排行榜
数据过期处理
session分页
实现分布式锁
3.8.4.3 JDBCTemplate
3.8.4.4 hibernate
3.8.4.5 thymeleaf
3.8.4.6 权限等
1)shiro
2)springsecurity
3)jwt
4)oauth2
3.8.4.7 其他
1)消息队列
2)Spring Data:
redis
jpa
rest
ladp单点登录
cassandra
hive
mongodb
全文检索:
elasticsearch
solr
3)流:
kafka
spark
3.8.4.8 batch
3.8.5 框架组合学习
3.9各种杂项
svn,git,pd,uml
3.10数据结构
- 线性表
- 链表
- 栈
- 队列
- 树
- 二叉树
- 图
- 子主题8
- 学过几十遍每次均全军覆没,工作中也是拿来主义,别问怎么学
3.11算法
3.11.1 复杂度
3.11.2 排序算法
1)冒泡排序
2)选择排序
3)插入排序
4)希尔排序
5)归并排序
6)快速排序
7)堆排序
8)计数排序
9)桶排序
10)基数排序
3.11.3 学过几十遍每次均全军覆没,工作中也是拿来主义
1)别问怎么学
3.12进阶思考
- 架构师
- 资深技术专家
- 技术经理
- 项目经理
- 跨界测试开发
- 跨界全栈工程师
- 业务开发专家
3.13程序员社交技巧
1)同java工程师沟通技巧
2)同测试工程师沟通技巧
3)同前端工程师沟通技巧
4)同业务人员沟通技巧
5)乙方同甲方沟通技巧
6)甲方同乙方沟通技巧
7)同领导沟通技巧:
技术型领导
业务型领导
高层
8)同女性沟通技巧
9)同跨行业人沟通技巧
3.14光荣退役方案
觉得还行可以收藏一波!!!
结束