- 01.Maven配置环境变量
- 02.Maven仓库
- 03.Maven导入依赖
- 01.Maven基础复习
- 02.Maven父子工程
- 03.Maven生命周期
- 04.Idea创建Maven工程
- 05.Idea创建父子工程
- 06.Idea配置Tomcat
- 07.Idea创建Servlet
- 01.ORM和框架
- 02.Mybatis环境搭建-导入Maven依赖
- 03.mybatis大配置文件
- 04.mybatis基础案例-查询所有数据
- 01.Navicat工具讲解
- 02.复习Mybatis第一次
- 03.Navicat激活
- 05.Mybatis基础案例之添加数据
- 06.Mybatis基础案例之修改数据
- 07.Mybatis添加记录返回主键
- 08.Mybatis基础案例之删除数据
- 09.Mybatis别名设置
- 01.作业总结
- 02.登陆案例(一)
- 03.登陆案例(二)
- 04.Log4j日志引入
- 01.resultMap和自动映射
- 02.模糊查询
- 01.复习
- 02.Map版多条件查询
- 03.索引号方式实现多条件查询
- 04.openSession底层详解
- 05.Where和IF智能标签
- 06.choose-when-otherwise
- 06.choose-when-otherwise智能标签
- 07.choose标签的问题
- 08.智能标签set-trim-foreach
- 09.foreach迭代集合
- 01.关联映射之关联关系
- 02.一对多单条SQL
- 03.一对多多条SQL
- 04.多对一单条SQL和多条SQL
- 05.多对多
- 06.自关联
- 07.多表自动映射
- 01.延迟加载
- 02.缓存开篇
- 03.一级缓存
- 04.一级缓存增删改不commit
- 05.二级缓存
- 01.复 习
- 02.二级缓存cache配置
- 03.Ehcache
- 04.Ehcache版本问题
- 05.PageHelpermp4
- 01.注解方式查询
- 02.关联映射注解方式
- 01.Spring核心概念
- 02.Spring第一个案例:注入Bean
- 03.Spring第二个案例:域属性注入
- 04.Spring第三个案例:打印机
- 01.AOP概论
- 02.SpringAop第一个案例
- 03.切点表达式
- 04.小技巧
- 05.IOC注入方式
- 02.注入不同类型数据
- 03.域属性自动注入
- 04.SpringBean生命周期和作用域
- 05.静态代理
- 06.JDK动态代理
- 07.CGLIB动态代理
- 01.复习回顾
- 02.代理工厂实现增强
- 03.代理工厂实现环绕增强
- 04.代理工厂实现异常增强
- 05.最终增强
- 01.名称匹配方法顾问
- 02.正则匹配方法
- 03.默认顾问代理生成器和BeanName代理生成器
- 04.Bean的调度
- 05.IOC注解注入
- 06.注解增强
- 01.复 习
- 02.JDBCTemplate配置式(一)
- 03.JDBCTemplate配置式(二)
- 04.JDBCTemplate注解式
- 01.事务预热
- 02.事务方案(事务代理工厂Bean)
- 03.事务方案(AOP事务以及注解事务)
- 01.复-习
- 02.基于XML的整合Spring+Mybaits
- 03.基于注解的整合
- 01.SpringMVC开篇
- 02.刘老师画图
- 03.SpringMVC请求流程图
- 04.SpringMVC基于配置方式案例
- 05.SpringMVC基于注解配置
- 06.视图解析器
- 07.静态资源拦截
- 1.SpringMVC请求流程剖析
- 02.上次内容复习
- 03.路径通配符
- 04.关于@RequestMapping返回页面路径的问题
- 05.SpringMVC方法返回值
- 06.返回数据的乱码解决方案
- 07.零散参数自动装配和乱码解决
- 08.手动参数装配以及基于restful地址栏取数据
- 09.对象参数(包含域属性以及集合传递)
- 01.复习
- 02.系统异常处理器
- 03.自定义异常使用系统异常捕获
- 04.自定义异常处理器
- 05.注解异常
- 06.单文件上传
- 07.多文件上传
- 01. 复习
- 02.拦截器初体验
- 03.拦截器收尾以及请求流程
- 04.数据校验
- 05.数据校验收尾
- 01.复 习
- 02.SSM整合依赖导入
- 03.SSM整合完毕
- 04.拦截器拦截问题以及过滤器实现
- 01.zookeeper概述
- 02.zookeeper集群搭建
- 03.windows中使用zk以及结构图
- 04.zookeeper常用命令
- 05.zookeeper一致性
- 06.JavaAPI操作ZK
- 01.zk课程回顾
- 02.zk相互通信
- 03.zk事件通知
- 04.zk选举策略
- 05.zk选举机制效果演示
- 01.zk分布式锁实现概述
- 02.zk解决分布式锁
- 01.细说架构模式
- 02.Dubbo概述
- 03.Dubbo架构
- 04.Dubbo服务注册
- 05.查看zk当中注册的服务
- 06.服务消费
- 07.dubbo服务发布调用
- 01.Dubbo复习
- 02.Dubbo-Admin平台介绍
- 03.Dubbo集群负载均衡以及容错
- 04.Dubbox服务提供和消费
- 02.SpringBoot第一个案例
- 03.启动类和静态资源访问
- 04.异常解决方案
- 05.SpringBoot整合Freemarker模板
- 02.SpringBoot集成JSP
- 03.Spring热部署
- 04.热部署问题
- 05.SpringBoot整合thymeleaf
- 06.SpringDataJPA案例(一)
- 07.SpringDataJPA案例(二)
- 01.SpringBoot整合JDBCTemplate
- 02.SpringBoot整合Mybatis
- 03.SpringBoot整合Dubbo
- 01.课程回顾
- 02.SpringBoot控制事务
- 03.SpringBoot打包发布
- 01.SpringCloud概述和搭建Eureka服务注册中心
- 02.Eureka生产者
- 03.Eureka消费者
- 04.Ribbon负载均衡
- 05.Feign的使用以及负载均衡策略
- 01.课程回顾
- 02.zuul网关
- 03.Zuul路由请求参数
- 04.Git铺垫
- 05.服务雪崩效应原因
- 01.zuul路由网关
- 02.雪崩效应
- 03.Hystrix熔断器
- 04.Rest方式实现熔断
- 05.Config分布式配置中心
- 01.Git简介
- 02.Git安装
- 03.TortoiseGit安装
- 04.添加文件到本地仓库
- 05.命令方式将文件添加到本地仓库
- 06.更新文件内容到本地仓库
- 07.删除本地仓库文件
- 08.将工程提交到到本地仓库
- 09.将本地仓库内容同步到远程仓库
- 10.本地连接远程进行克隆,拉取,推送
- 01.基于HTTPS连接远端
- 02.解决文件合并冲突
- 03.分支管理
- 04.分支合并冲突解决
- 01.Idea中集成Git提交本地仓库
- 02.Idea中Git操作远程仓库
- 03.Idea解决远程文件冲突
- 04.Idea中操作分支
- 05.Idea中Git分支再次讲解
- 01.Redis简介
- 02.windows安装Redis
- 03.连接Redis
- 04.Redis数据类型和常用命令
- 05.Linux系统安装Redis
- 01.开放端口IP
- 02.Jedis操作String类型
- 03.Jedis操作List
- 04.Jedis操作Set,SortSet,Map
- 05.SpringBoot操作Redis
- 01.主从复制,读写分离
- 02.Redis主从复制实现
- 03.Redis哨兵机制
- 04.Redis哨兵机制问题
- 05.哨兵自动故障转移数据
- 01.Redis事务操作
- 02.Jedis和StringRedisTemplate操作事务
- 03.RDB持久化
- 04.AOF持久化
- 01.Oracle安装
- 02.Oracle简介和PLSQL工具连接
- 03.Navicat连接Oracle数据库
- 04.Oracle体系结构
- 05.Oracle创建表空间和用户
- 06.Oracle操作表
- 07.Oracle数据增删改
- 08.Oracle序列
- 01.Oracle听写内容
- 02.Oracle用户解锁
- 03.Oracle中单行函数
- 04.Oracle日期函数习题
- 05.Oracle条件表达式
- 06.Oracle多行函数
- 07.Oracle分组
- 08.Oracle连接查询
- 09.Oracle自关联查询
- 10.Oracle子查询
- 01.rownum和分页
- 02.视图操作
- 03.用户表数据迁移
- 04.索引
- 05.PLSQL语法
- 06.PLSQL的条件判断
- 07.PLSQL循环
- 08.PLSQL游标
- 01.存储过程的定义
- 02.存储函数
- 03.语句级触发器
- 04.行级触发器
- 01.HTTP协议
- 02.HTTP协议请求信息分析
- 03.时间戳
- 04.缓存分类
- 05.防盗链
- 06.重定向
- 01.HTTP协议和HTTPS协议的区别
- 02.HttpClient模拟Get请求
- 03.HttpClient模拟Post请求
- 04.PostMan
- 05.长连接和短链接
- 01.跨域问题的第一种解决方案
- 02.JSONP跨域解决方案
- 03.HTTPClient跨域解决方案
- 04.表单重复提交解决办法一
- 05.Token解决表单重复提交
- 06.XSS攻击
- 01.Nginx解决服务器宕机问题
- 02.Nginx请求路由转发解决跨域问题
- 03.Nginx防盗链
- 04.Nginx防止DDOS流量攻击
- 01.linux系统搭建
- 02.linux系统安装nginx
- 03.keepalived高可用工具
- 04.keepalived执行
- 01.Session共享解决方案
- 02.Nginx解决Session共享
- 03SpringSession+Redis解决共享
- 01.同步请求
- 02.消息中间件概述
- 03.JMS介绍
- 04.消息模型
- 05.windows安装ActiveMQ
- 06.点对点通讯
- 07.发布订阅模式
- 01.ActiveMQ持久化机制
- 02.JMS可靠消息
- 03.SpringBoot整合ActiveMQ-生产者
- 04.SpringBoot整合ActiveMQ-消费者和主题
- 05.jmsTemplate持久化
- 06.AcitveMQ全局消息ID解决问题
- 01.RocketMQ概念
- 02.RocketMQ原理
- 03.RocketMQ搭建
- 04.RocketMQ监控
- 01.课程回顾
- 02.RocketMQ生产者
- 03.RokectMQ消费者和重试机制
- 04.RocketMQ解决重复消费问题
- 05.再谈重复消费
- 01.数据库优化概述
- 02.数据库设计
- 03.分库分表概念
- 04.取模算法
- 05.慢查询定位
- 06.收尾任务布置
- 01.索引概述
- 02.索引实现原理
- 03.查看索引执行计划
- 04.SQL优化
- 05.存储引擎
- 01.MySQL高可用概念
- 02.MySQL主从复制
- 03.MySQL环境搭建
- 04.搭建从机
- 05.主从复制
- 06.读写分离介绍
- 07.mycat实现读写分离
- 01.全文检索概念
- 02.全文检索应用场景
- 03.Lucene全文检索流程
- 04.Lucene案例:创建索引
- 05.Luke工具
- 06.Lucene案例:查询索引
- 01.默认标准分析器
- 02.IKAnalyzer分词
- 03.程序中使用IKAnalyzer
- 04.Field域的分类
- 05.索引维护-添加索引
- 06.索引维护-删除索引
- 07.索引维护-修改索引
- 08.基于Query查询
- 09.QueryParser
- 01.ES简介
- 02.ES和Solr对比
- 03.ES和HEAD安装
- 04.ES概念讲解
- 05.POSTMAN创建索引库
- 06.POSTMAN修改索引库
- 07.POSTMAN删除索引库以及HEAD常用索引维护操作
- 01.向索引库的类型中添加文档数据
- 02.修改文档数据
- 03.删除以及HEAD工具查看文档
- 04.文档数据查询的三种方式
- 05.使用HEAD工具组合条件查询文档数据
- 06.IK分析器使用
- 07.使用IK分析器创建Field
- 08.ES集群概念
- 09.ES集群搭建
- 01.创建一个空的索引库
- 02.指定索引库mappings信息
- 03.创建索引库指定Mapping信息
- 04.删除索引库
- 05.创建文档方式一:XContentBuilder
- 06.创建文档方式二:基于JSON
- 07.删除文档
- 08.根据文档ID获取数据
- 09.根据Term关键词进行搜索
- 10.基于QueryString搜索文档
- 11.分页数据
- 12.高亮显示数据
- 01.ES简介和开发环境搭建
- 02.创建空的索引库
- 03.创建索引库并且指定Mapping信息
- 04.添加文档数据
- 05.删除文档数据
- 06.修改文档数据
- 07.根据文档ID查询数据
- 08.查询所有数据并且带分页
- 09.自定义方法进行查询
- 10.基于NativeSearchQuery查询
- 01.课程回顾
- 02.今日课程大纲
- 03.JVM优化讲解
- 04.标准参数的基本使用
- 05.-server和-client讲解
- 06.-X非标准参数运行模式和-XX参数
- 07.-Xms参数和-Xmx参数
- 08.查看参数信息
- 09.堆内存模型
- 01.jstat命令的使用
- 02.jmap查看内存使用情况和jhat分析
- 03.MAT工具使用
- 04.模拟内存溢出通过Mat工具分析
- 05.线程状态以及监控
- 06.模拟死锁,通过jsatck查看
- 01.JVisualVM工具使用
- 02.JVisualVM远程连接服务
- 03.GC垃圾回收概念
- 04.常见垃圾回收算法列举
- 05.引用计数算法
- 06.标记清除法
- 07.标记压缩算法
- 08.复制算法+JVM内存存储过程
- 09.分代算法
- 02.串行垃圾收集器
- 03.并行垃圾收集器
- 04.CMS垃圾收集器
- 05.G1垃圾收集器内存模型讲解
- 06.YoungGC垃圾回收模式
- 07.G1续讲
- 08.MixedGC讲解
- 09.G1垃圾收集器实现
- 01.复习
- 02.生成GC日志以及进行分析
- 03.后续课程安排
- 04.安装Tomcat并且查看配置信息
- 05.Tomcat优化方案-执行器
- 06.Tomcat优化方案-运行模式
- 07.总结Tomcat部署
- 08.总结优化方案
- 01.Tomcat压力测试准备
- 02.默认参数配置Tomcat压力测试
- 03.Tomcat配置优化(一)
- 04.Tomcat配置优化(二)
- 05.Tomcat配置JVM优化(三)
- 01.JVM字节码查看(常量池讲解)
- 02.JVM字节码查看(方法重点部分)
- 03.JVM字节码查看典型案例i++和++i
- 04.JVM查看字节码:+和StringBuilder
- 05.动态字节码技术
- 06.代码优化以及作业布置
- 01.类的加载过程
- 02.类加载过程演示
- 03.类加载器种类
- 04.类加载器加载机制
- 05.监控类加载过程
- 01.单列集合-简单篇
- 01.复习
- 02.ArraList追问
- 03.关于CopyOnWriteArrayList面试讲解
- 04.关于ArrayList扩容源码解读
- 05.关于ArrayList源码编写
- 01.手写ArrayList
- 02.Map基础篇
- 03.hashCode和equals方法讲解
- 04.Map中级篇
- 05.Map加锁问题
- 01.HashMap数据结构
- 02.红黑树简单介绍
- 03.get底层核心逻辑
- 04.ConcurrentHashMap演变过程
- 05.ConcurrentHashMap中put底层
- 01.复习HashMap
- 02.复习ConcurrentHashMap
- 03.并发编程概念及其课程介绍
- 04.并发编程上下文切换问题
- 05.并发线程死锁问题
- 06.并发线程安全问题
- 01.课程安排
- 02.CountDownLatch讲解
- 03.CyclicBarrier讲解
- 04.Semaphore讲解
- 05.Exchager讲解
- 06.线程池概述
- 07.CacheThreadPool线程池
- 08.FixedThreadPool线程池
- 09.ScheduledThreadPool线程池
- 10.SingleThreadExecutor线程池
- 11.线程池流程
- 12.线程数合理分配
- 01.Callable使用方案
- 02.Future模式
- 03.同步容器和并发容器
- 04.并发队列
- 01.课程计划
- 02.可重入锁
- 03.手写可重入锁
- 04.读写锁
- 05.悲观锁和乐观锁
- 01.Java内存模型介绍
- 02.CAS无锁机制
- 03.线程安全三个方面概述
- 04.原子类浅析
- 05.AQS过程解析
- 06.总结
- 01.Volatile关键字
- 02.指令重排
- 03.Happens-Before先行发生原则
- 04.线程安全三要素
- 05.并发编程面试题
课程目标
了解泛型、MySQL、JDBC、流、调试程序,掌握查看Java API源代码的方法。
适用人群
对Java面向对象知识有一定了解的学员。
课程简介
听强哥说Java之Java高级教程
课程目录
01.Java中的泛型
讲解Java中的泛型,编写一个泛型类。泛型技术比较复杂,工作中用的简单,不是讲课的重点。
02.MySQL简介及其下载安装
讲解如何下载安装MySQL。
03.使用WorkBench创建数据库和表
使用MySQL工具WorkBench管理数据库和表。
......
14.字节流转换为字符流并讲解打印流
15.老虎机抽奖特效
1. JVM相关
对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。
不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。
JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。
我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。
当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。
在JVM这个大类中,我认为需要掌握的知识有:
JVM内存模型和结构
GC原理,性能调优
调优:Thread Dump, 分析内存结构
class 二进制字节码结构, class loader 体系 , class加载过程 , 实例创建过程
方法执行过程
Java各个大版本更新提供的新特性(需要简单了解)
2. Java的运行
这条可能出看很简单,java程序的运行谁不会呢?
不过很多时候, 我们只是单纯通过IDE去执行java程序,底层IDE又是如何执行java程序呢?很多人并不了解。
这个知识点是最最基本的java开发者需要掌握的,第一个肯定是教你如何在命令行中执行java程序,但是很多人一旦把java学完了,IDE用上了,就把这个都忘了。
为什么强调要知道这个呢,知道了java最纯粹的启动方式之后,你才能在启动出问题的时候,去分析当时启动的目录多少,执行命名如何,参数如何,是否有缺失等。
这样有利于你真正开发中去解决那些奇奇怪怪的可能和环境相关的问题。
在这里需要掌握的知识有:
javac 编译java文件为 class 文件
java 命令的使用, 带package的java类如何在命令行中启动
java程序涉及到的各个路径(classpath, java。library。path, java运行的主目录等)
3. 数据类型
这条没有什么好多说的,无非就是Java中的基本类型和对象类型的掌握。
可以再了解一些JDK如何自动转换方面的知识,包括装箱拆箱等,还要注意避免装箱之后的类型相等的判断。
主要知识点:
基本类型:int, long, float, double, boolean 。。。
对应的对象类型:Integer 等类型到基本类型的转换, 装箱和拆箱
Object类型:equals, hashcode
String 类型的特点
4. 对象和实例
在这方面,开发者需要了解class和instance的概念以及之间的差别, 这是java面向对象特性的一个基础。
主要知识点有:
Class和 Instance 的概念
Instance 创建的过程:
无继承:分配内存空间, 初始化变量, 调用构造函数
有继承:处理静态动作, 分配内存空间, 变量定义为初始值 , 从基类->子类, 处理定义处的初始化, 执行构造方法
需要注意的点:
静态属性等从基类->子类进行初始化
默认无参构造方法相关的特性
5. 访问控制
这也是java封装特性的一个基础,需要掌握的有:public protected default private 对于class, method, field 的修饰作用。
6. 流程控制
Java 流程控制的基础, 虽然有些语法不一定很常用,但是都需要了解,并且在合适的地方使用它们。
需要掌握的有:if, switch, loop, for, while 等流程控制的语法。
7. 面向对象编程的概念
这是一个java的核心概念,对于任何java开发者都需要熟练掌握。
Java中很多特性或者说知识点都是和java面向对象编程概念相关的。
在我的理解,一个好的开发者不仅仅需要了解这些特性(知识点)本身。
也更需要知道这些对象在java的面向对象编程概念中是如何体现出来的,这样更有利于开发者掌握java这门开发语言,以及其他面向对象编程的语言。
在这里只是简单罗列了一下,主要的知识点包括有:
面向对象三大特性:封装,继承,多态;
各自的定义概念,有哪些特性体现出来,各自的使用场景
静态多分派,动态单分派的概念
重载的概念和使用
继承:接口多实现,基类单继承
抽象,抽象类,接口
多态:方法覆盖的概念和使用
接口回调
8. static
静态属性在java日常开发中也是经常使用,需要了解和 static 关键字相关的用法,还有和其他关键字的配合使用, 如是否可以和 abstract, final 等关键字联合使用。
主要需要掌握的有:
静态属性的定义,使用,以及类加载时如何初始化
静态方法的定义和使用
静态类的定义和使用
静态代码块的定义和初始化时机
9. 基础知识点
这里主要罗列一些散落的,没有系统归类的一些java知识点。
在日常的开发中用到也不少。这块内容其实还有很多,目前只是暂时归纳了这几个在这里:
包括有:
equals
hashcode
tring/stringbuffer
final
finally
finalize
10. 集合框架
这个是一个需要多加掌握的部分,做java开发,可以说没有不用到集合框架的,这很重要,这里整理的Java集合面试题及答案你必须都要清楚。
但是这里的知识点并不难,但是对于集合最好要了解内部的实现方式,因为这样有助于你在各个不同的场景选择适合的框架来解决问题,比如有1W个元素的集合,经常要进行contains判断操作,知道了集合的特性或者内部实现,就很容易做出正确的选择。
这里包括了如下内容(并发相关不包含在内):
集合框架的体系:基础Collection ,Map
具体集合实现的内容, List ,Set ,Map 具体的实现,内部结构, 特殊的方法, 适用场景等
集合相关的工具类 Collections 等的用法
11. 异常框架
异常在java的开发中可能没有那么被重视,异常处理的最佳实战详细说明了。
一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响。不过在企业级设计开发中, 异常的设计与处理的好坏,往往就关系着这个系统整体的健壮性。
一个好的系统的异常对于开发者来说,处理应该统一,避免各处散落很多异常处理逻辑;对于系统来说,异常应该是可控的,并且是易于运维的,某些异常出现后,应该有应对的方法,知道如何运维处理,所以虽然异常框架很简单,但是对于整个企业级应用开发来说,异常处理是很重要的,处理好异常就需要了解Java中的异常体系。
这部分需要掌握的知识点不多,主要就是:
异常的体系:
Throwable
Exception
RuntimeException
Error
RuntimeException 和 一般 Exception 的区别, 具体处理方法等
12. Java IO
IO 在java中不仅仅是文件读写那么简单,也包括了 socket 网络的读写等等一切的输入输出操作。比如说 标准HTTP请求中Post的内容的读取也是一个输出的过程,等等…
对于IO,Java不仅提供了基本Input、Output相关的api,也提供了一些简化操作的Reader、Writer等api,在某些开发(涉及大量IO操作的项目)中也很重要,一般日常的开发中也会涉及(日志,临时文件的读写等)。
在这中的知识点主要有:
基本IO的体系包括有InputStream , OutputStream, Reader/Writer, 文件读取,各种流读取等,NIO 的概念, 具体使用方式和使用场景。
13. 多线程并发
多线程是Java中普遍认为比较难的一块。
多线程用好了可以有效提高cpu使用率, 提升整体系统效率, 特别是在有大量IO操作阻塞的情况下;这里整理的Java多线程面试题及答案你必须都要清楚。
但是它也是一柄双刃剑, 如果用不好,系统非但提升不大,或者没有提升,而且还会带来多线程之间的调试时等问题。
在多线程中内容有很多,只是简单说明一下Java中初步使用多线程需要掌握的知识点,以后有机会单独再详细介绍一些高级特性的使用场景。在Java技术栈公众号回复"多线程"可获取多线程系列教程。
多线程的实现和启动
callable 与 runable 区别
syncrhoized ,reentrantLock 各自特点和比对
线程池
future 异步方式获取执行结果
concurrent 包
lock
14. 网络
Java中也是提供了可以直接操作 TCP协议、UDP协议的API。
在需要强调网络性能的情况下,可以直接使用TCP/UDP 进行通讯。
在查看Tomcat等的源码中,就可以看到这些相关API的使用情况。
不过一般也比较少会直接使用TCP,会使用诸如MINA、Netty这样的框架来进行处理,因为这个方面的开发涉及不多,所以就不再详细罗列了。
15. 时间日期处理
几乎对于每个应用来说,时间日期的处理也是绕不过去的,但是JDK8 之前的时间相关API用法并不友好。
在那个时代,可以选择Joda等时间框架。到了JDK8 发布之后,全新的时间API基本融合了其他框架的优点,已经可以很好的直接使用了。
对于Java开发者来说,需要熟练地使用API来对时间和日期做相关的处理。
具体知识点不再罗列,会在以后再写个专门的文章来总结一下JDK8中时间日期API的用法。
16. XML解析/JSON解析
其实这两块内容都不是J2SE里面的内容,但是在日常开发中,和其他程序交互,和配置文件交互,越来越离不开这两种格式的解析。
不过对于一个开发者来说,能够了解一些XML/JSON具体解析的原理和方法,有助于你在各个具体的场景中更好的选择合适你的方式来使得你的程序更有效率和更加健壮。
XML:需要了解 DOM解析和 SAX解析的基本原理和各自的适用场景
JSON:需要了解一些常用JSON框架的用法, 如 Jackson, FastJson, Gson 等。
17. Maven使用
Maven也不是Java里面的内容,但是maven是革命性的,给java开发带来了巨大的便利,这30个Maven命令你必须熟悉。
从依赖的引入和管理,开发流程的更新和发布产出,乃至版本的更新,使用maven可以大大简化开发过程中的复杂度,从而节省大量时间。
可以说,maven已经成为java开发者的标配了。所以我把maven也作为一个java开发者对于基础必备的知识点。
在Java技术栈公众号回复"Maven"可获取Maven系列教程,以后会再放上一些我的一些对于maven使用的经验和技巧等,这里就不再细说了。
18. 泛型
这是JDK5开始引入的新概念,其实是个语法糖。
在编写java代码时会有些许便利, 一般的应用或者是业务的开发,只需要简单使用,不一定会用到定义泛型这样的操作。
但是开发一些基础公共组件会使用到,可以在需要的时候再细看这个部分,一般情况下只要会简单使用即可。
19. 注解
也是jdk5 之后引入的,元注解你必须了解。
spring是个优秀的框架,最开始就以xml作为标准的配置文件。
不过到了Spring3 之后,尤其是 spring-boot 兴起之后,越来越推崇使用标注来简化xml配置文件了,对于开发者来说,可以节省不少xml配置的时间。
但是劣势是在于标注散落在各个类中,不像xml,可以对所有配置有个全局性的理解和管理,所以还没有办法说完全就取代所有的xml。
对于一般开发者,会使用标注即可,一些公共组建的开发者可能会需要了解标注的定义和实现,可以在具体需要的时候再细看。
20. RMI
RemoteMethodInvocation ,Java语言特有的远程调用接口,使用还是比较简单方便,点击这里了解RMI与RPC的区别详情。
不过需要跨语言的情况下,就需要使用 webservice 等其他方式来支持。
一般来说,程序都不需要使用RMI,不过可以在特定的情况下使用,我就在一个项目中,使用RMI来进行程序远程启动停止的控制。