Java成长计划

Wonderful Java 知识点总结

本文是博主对Java的中高级知识点进行了一些总结

–Java相关知识来源于以下书籍与视频教程

  • 《Java核心技术卷I》
  • 《Java核心技术卷II》
  • 《Java编程思想》
  • 《Head First servlets & jsp》
  • 《Head First 设计模式》
  • 《深入分析JavaWeb技术内幕》
  • 《Effective Java》
  • 《深入理解Java虚拟机》
  • 《Java并发编程实战》
  • 《Spring实战》
  • 《代码整洁之道》
  • 《互联网轻量级框架整合开发》
  • 《数据结构与算法分析》
  • 《算法第四版》
  • 《阿里巴巴Java开发手册》
  • “慕课网”Java相关教程
  • “LifeCat”系列项目的经验

目录


一些概念

《Java核心技术卷I》


null为空,代表无对象,在内存中没有分配空间
“”为长度为零的字符串,但也是Java对象,在内存中生存


成员变量:堆中,随对象存在会赋初值
局部变量:栈中,随方法存在,不会自动赋初值


BigDecimal 任意精度
BigInteger 任意精度


默认访问范围 default < protected
(子孙类无法访问)


接口默认方法:
default int compareTo(…) { return 0;}


值传递:基本数据类型
引用传递:对象引用
☆ string,integer, double等包装类型,相当于不可变对象,传递值的克隆,生成新的包装对象


final修饰变对象变量,引用不可变,引用的对象可变化


泛型
编译时检查,擦除后域为Object
Object不能存储Integer等包装类型


泛型
命名规范:
E 集合
T 任意
K 键
V 值


泛型
通配符:
? extend T
? super T


集合框架

《Java核心技术卷II》


Java脚本引擎
javax.script.ScriptEngine


Java调用本地脚本 callshell方式
Process process = Runtime.getRuntime.exec(命令行语句调用本地脚本)


注解
注解本身无行为,需要处理工具调用才有用,例如使用AOP切面进行注解操作


流库
流并不存储其元素
流的操作不会修改数据源
流的操作是惰性执行的


过滤-》转换-》终结


使用基本类型流,直接处理基本类型而不通过包装类型,节约空间和内存
IntStream
DoubleStream


并行流
多线程
parallelStream()


Optional类型 “可选的”


XML
文档对象模型DOM –> 树形解析器
XML简单API –> 流机制解析器


套接字socket
创建对象
获取输入输出流
数据传输


URL资源对象
创建对象
获取输入流
加载对象


JDBC


preparedStatement 预设语句


行结束符
Windows \r\n
UNIX \n

《Java编程思想》


回收器只释放由new分配的内存
先调用finalize方法,下一次才会真正回收
垃圾回收只与内存有关,内存小,回收多
一面回收内存空间,一面使堆中的对象紧凑排列


引用计数法:
有引用+1,删除引用-1,若值为0,标记回收
当循环情况时,或者遍历引用表工作量大


停止-复制:
从堆栈和静态存储区开始,遍历找到所有活的对象,暂停程序,将活的对象复制到另一个堆,新堆排列紧凑


标记清扫:
遍历标记所有活的对象,未标记的进行清理


对象稳定:标记清扫
碎片多:停止复制


成员变量初始化
对象引用默认null
实例变量的初始化在构造函数之前运行


对象创建过程:
首次创建类对象/类静态域时:Java解释器查找类路径,加载.class文件
载入class文件,静态初始化运行
new时,先在堆上分配空间
将这块空间清零,然后复制给对象引用
执行字段定义处的初始化动作
执行构造器


先父类static –> 后本类static

父类构函 –> 本类实例域 –> 本类构函


一个类只能有一个public 的class
一个类对应一个class文件


多态:
a.方法() 动态绑定,编译器不知道对象类型,方法调用机制实现多态
func(a/b) 静态绑定,编译时确定方法类型


内部类:
内部类可访问外部类所有元素
外部类访问内部类需要对象引用
内部类对象会连接到创建他的外部类对象上


局部内部类
在方法和作用域内的类


匿名内部类


嵌套类static
创建嵌套类对象,不需要外部类对象
不能从嵌套类对象访问非静态的外部类对象
在接口中可定义嵌套类


内部类可以有多个实例,并且与外部类对象的信息相互独立
通过内部类实现不同接口,实现不同的功能


类加载:
加载,查找字节码,从字节码构建class对象
链接,验证字节码,为静态域分配存储空间
初始化,对超类初始化,执行静态初始化器和静态块

.class的初始化被延迟到对静态方法、构造函数或者静态域首次引用时

static final在链接时进行,可直接访问
static需要先初始化才可访问
class.forName直接进行了初始化


尽量使用容器替代数组
Arrays数组操作


随机读写randomAccessFile


管道流
用于多线程间的通信

全部评论

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
03-11 18:00
辽宁大学 安卓
这怎么还花钱买上了.....
不愿吃饼的变色龙很感性:没事,我不是目标院校,练花钱的机会都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务