学习Java需要掌握哪些技能?
想要找到Java工程师的工作,必须具备Java岗位要求的相关技能,应该有夯实的Java基础知识,熟练掌握、JavaSE开发、JavaWEB与数据库高级编程、企业级框架、大型企业级项目实战等相关的开发技能。
01 Java基础知识
Java入门、变量,基本表达式、流程分支、单层循环、双层循环、数组入门等。掌握基本的Java语法,学会并编写很多简短的代码实例,理解和认知到编程的奥义和乐趣。
02 JavaSE开发
JavaSE是Java核心,也是Java的灵魂,在这个阶段学习数据库MySQL,通过最简单的实例,快速上手,完成一系列企业级中的数据操作,学习到企业中常见的许许多多实际数据操作。
使用前期学习到的JavaSE技术+MySQL数据库,通过真实企业级项目场景,模拟出对应的后台逻辑功能,完成并实现数据库的数据操作及JavaSE中的套接字通信服务。
03 JavaWeb与数据库高级编程
数据库高级编程,JavaEE的学习体系,掌握企业项目开发的标准流程、标准开发规范、标准通信机制、标准JavaEE语法规范。后期初识MySQL高级编程,真正成为一名初级企业级程序员。
以实际企业级项目为参照,通过讲解实际企业级项目分析、设计、架构,让学员学会真实的企业级完整项目的开发流程,熟练掌握到所有的企业级编码技术,懂得了团队协作,并且已经具备初级程序员的能力。
04 企业级框架
Java三大框架:Struts、Hibernate、动态代理模式、Spring。
框架是作为一个Java程序员必须要学习的知识点,因为企业需要框架来作为开发的辅助,让开发人员编码更加规范合理,提升开发速度甚至执行效率,所以框架也是Java开发人员的必修课。
主要学习Java三大主流框架SSH(Struts、Spring、Hibernate),通过学习SSH框架,可以理解到框架的优势,框架的意义,理解到为什么企业会使用框架,并且熟练使用并应用框架。
通过前期的使用框架,到后期的框架源码解析,由浅入深的掌握框架的每一个知识点,每一个重难点,理解框架的核心思想并且掌握企业开发中的使用方式及方法。
05 大型企业级项目实战
Java高级框架SSM系统:mybatis3.4.5、Spring MVC4.X
linux虚拟机工作原理及项目部署及window sever服务器安装部署,企业级权限角色框架的基本应用(Shiro 1.3.X ),分布式缓存数据库Redis特训课,大数据存储MongoDB精讲,Java消息队列JMS基础课程,企业级Nginx从入门到实战,springboot微服务详讲,oracle数据库全体系商业实战。
最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的
- 静态代码块只会加载1次,在普通代码块前执行,会在类链接中的准备阶段执行
- 普通代码块每次new的时候都会加载,在构造方法前执行,其实是编译的时候,代码被放到构造函数前
- 构造函数每次new都会加载。构造函数默认前面是super0方法。默认会先调用父类的构造函数
1. 类的加载过程
①. 类的加载
class文件加入内存,生成class对象
②. 类的链接
- 验证:验证class文件是否满足JVM规范
- 准备:静态类变量默认初始化
- 解析:常虽池的符号引用替换为直接引用
③. 类的初始化
类构造器(构造方法和静态代码块)初始化
2. 类的加载器
- bootStrapClassLoader:核心加载器
- ExtersionClassLoader:扩展加载器
- SystemClassLoader:系统加载器
- ApplicationClassLoader:应用加载器
- 自定义加载器
3. 双亲委派
- 保证加载的关是唯一的.只会有份所以向上由父类加载
- 与Tomcat不满足双亲委派
1. Stringa= \”adf\”
- adf存在于方法区的常量池,栈空间的a直接指向常量池的adf
2. String b = new String(\” adf\”)
- adf存在于常量池,堆空间生成对象,对象实际存储指向常量池adf的地址,栈空间的b指向堆空间的地址
3. Stringc= \”adf\” + \”df\”;Stringd = \”adfdf\”;Stringe= a +\”df\”
- c和d栈都指向常量池的adfdf. e保存了堆中对象,对象指向的是常量池中的adfdf值
- 直接常量操作,返回的地址是在常量池
- 经过new或者不是纯常量操作,会进行一-次new在堆中生成对象, 对象在指向常量池中数据
- final修饰的String也在常量池
4. final修饰,不可以被继承(不可以被修改)
- 出于安全考虑,java很多类都用字符串来描述
- 处于内存考虑,字符串被常用,共享同一块内存,减少内存使用量
5. 一般字符串的内部操作
- 转成数组,toCharArray0
- 数组操作变化值
- String构造函数数组转为字符串
6. length0方法
- 返回字符串的实际长度,字符串没有size0方法
1. 直接赋值或者ValueOf田
- 享元模式,池的技术
- -128~127是常量,在堆中只会有一个对象
2. new的话,是在堆中生成新对象
3. BigInteger是整形,任意大小
4. BigDecimal是浮点型,任意精度
1. 元注解
- 修饰注解
- @Retention:注解的生命周期,Compile编译, class类对象, RunTimer运行时(此生命周期才可以用被反射拿到)
- @Target:接口,类,方法,变量,构造器
- @Inherited:注解具有继承性,随着类继承存在
2. 可重复注解, 类型注解
- Java8新特性
1. 存储单值
①. 数组
- []初始化后长度不可以更改
- 插入删除效率不高
- 查找速度快
- 只有length成员变量表示长度,没有其他的可用API
②. collection
A. set
a. 实现
treeset
- 底层是treemap.数据是红黑树结构
- 可以按属性进行排序,指定排序规则
- 需要重写比较函数,被存数据继承comparable接口(数据是否相同按compareto决定)
linkedhashSet
- 按添加的顺序有序
- 底层也是linkedhashmap,数据+链表
- 在原有的hashset的基础上增加了添加元素的链接关系,使添加数据有序(对频繁的遍历要比hashset快)
hashSet
- 存储无序的
- 底层是hashmap,也是数组+链表存的
b. 无序不可重复
c. linkedhashset和hashset的数据,一定要重写,并且要求hashcode方法和equals方法一致
- hashcode决定了key存储位置
- equals决定了key是否相等
B. list
a. 实现
arrayList线程不安全
- 数组
- 适用增删改少,遍历多
vector线程安全
- 数组:stack继承于vector
linkedList
- 链表
- 使用增删改多,遍历少
b. 有序,可重复
2. 存储对值(map)
①. hashMap线程不安全
- 底层树数组+链表
- java8后,数组+链表/红黑树,链表长度大于8的时候转红黑树
- 复合的数据需要重写hashcode和equals方法
- 多线程下死循环 主要是rehash函数 内部链表重写计算的时候,多线程下会出现环 链表的环造成get数据的时候会出现死循环
②. linkedHashMap线程不安全
- 底层是数组+链表/红黑树
- 根据添加数据的顺序,有指针关联添加的数据,数据按添加顺序有序
- 复合的数据需要重写hashcode和equals方法
③. concurrentHashMap分段锁线程安全
- 复合的数据需要重写hashcode和equals方法
- java1.7是数据的分段锁
- java1.8是CAS实现的
④. hashTable线程安全
- 方法用Synchronize修饰的
- 不能有null的key和值
- 复合的数据需要重写hashcode和equals方法
- 子类: Properties 取配置文件的数据
⑤. treeMap有序的
- 底层是红黑树结构
- 存储的数据需要实现Comparable接口
⑥. key是无序的,不可以重复,使用set存储所有的key; Entry是无序, 可重复
⑦. 扩容
- 容量的0.75的时候,会扩容,扩为原来的两倍,将数据拷贝到新的空间
- Jdk7. Jdk8默认初始数组大小是16
- Jdk8当链表长度超过8,就改用红黑树存储
- Jdk8底层是Node[]数组,Jdk是Entry[数组
- 最大容量2的30次方
3. collections
集合相关的静态方法集
4. 排序
- 自然排序:实现comparable重写compareTo(Object o)方法(随处可用的比较)
- 定制排序:实现comparator重写compare(Object o1,Object o2)方法(临时性的比较)
5. sizeQ方法
返回的是元素的个数,集合是没有length方法的
6. 数组和集合的相互转换
- toArray0集合变数组
- Arrays.asList ()数组变集合(注意,存的数据要是对象)
7. 集合遍历方式
- for循环
- iteraton迭代器
- foreach方式
- java8新特性,streem流
8. 通配符?
List<?>
- 可以写入null,不能写入数据
- 可以读数据
- List<? super A>; List<? extends A>有限制条件的通配符
1. 动态语言的特性,拿到运行时对象的状态类信息,class对象, 增加了代码的灵活性
2. 缺点:执行效率低,性能差
3. 功能
①. 拿到运行时对象的类信息
②. 根据运行时对象信息创建对象
③. 根据运行时对象信息使用其方法
④. 根据运行时对象信息修改成员,修改私有成员
⑤. 动态代理
- 创建一个实现接DInvocationHandler的类,它必须实现invoke方法
- 创建需要被代理接口和实现类
- 通过Pry)的I态nnewporvatalasloaderlader Cass iterfaces. InocationHander h)创建个代理
- 通过代理调用方法
- 生成的动态代理关会调用nvocationHandler实现类中的invoke方法
- invoke方法中我们可以选择执行被代理实现类的方法,并在其前后进行处理
4. 拿到class对象
- 类名.class
- 对象.getClass0
- Class类的静态方法forName0
- ClassLoader对象的IoadClass0方法获取
5. class对象的作用
- Constructor拿到类的构造函数,实例化对象
- Field拿到类的属性
- Method拿到类的方法(Invoke调用方法)
6. 提升反射使用的效率
- 尽量不要getMethods0后再遍历筛选,而直接用getMethod(methodName)来根据方法名获取方法
- forName获取类对象,使用缓存
1. 实质:作为接口的实例
2. 接口需要是函数式接口
- 接口中只有一个抽象函数
- 可以用注解声明接口,@FunctionInterface
- util.function包下有大量的函数式接门
1. = =
- 基本数据类型比较值
- 引用类型比较地址
2. equals
- 比较的是引用类型
- 重写过的quls比较的是地址obiec的原生方法批比较的是地址
Java基础38个必会知识点,你知道几个?
做Java培训很多年了,也面试过很多Java工程师,总的来说,大家对java基础知识的掌握普遍不大好,如果你觉得自己的技术很强,基础很好,可以划走这篇文章啦~如果你是初学者或者是最近需要面试的同学,可以仔细的看一下这篇文章,小源根据实际项目工作需要,并参考了大厂面试的高频问题,汇总整理了38个必会的基础知识点,送给有需要的同学。
这些知识点呢,是小源精心挑选出来的,对于构建知识体系,我认为是不可或缺的一些点。
第一,面向对象、基础。包括面向对象和面向过程的区别,对象和类的关系,类的特性等等。
第二,网络基础。包括DNS、域名端口、CDNP地址、VPNHTTP和htps get请求和post请求。第三,计算机原理和操作系统。包括内存、CPU、硬盘、Linux基本命令、线程和进程。
第四,数据库基础。关系型数据库和非关系型数据库,索引、慢查询、主从库。
第五,Java开发基础。包括MVC框架、跨域请求、cookie和session正则表达式JVM、JDKJ等等。
剩余的Java知识点,有需要的同学,可以关注小源后厚台dd领取!
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。