这一段时间事情有点多,有点没顾上写博客,但是看大佬说,想变强不仅需要输入,还需要持续的输出,所以博客还是要写滴。最近开始学习linux了,争取做到两天一总结好吧。spring相关的项目开发与基础学习也在进行中。整体的学习路线下面列一下,每周都会在此基础上进行以下总结。每天学习的东西也做一个总结放在博客里。
首先是今日学习安排:leetcode349 两数组交叉数据,很简单将数据放到hashset里,遍历一个的所有数据是不是在第二个之中包含,set.contains(num),还有一种是排序之后的双指针,需要注意的是不能重复添加数据,因此需要加上判断保证不能重复添加数据。
if (index == 0 || num1 != intersection[index - 1]) { intersection[index++] = num1; }
然后对老师的一个项目进行了需求分析文档整理和组会。linux看的鸟哥私房菜,刚开个头,任务量不大明天加油!!!!!
结合知乎大佬沉默王二的回答与自己的总结(争取把里面的超链接都换成自己的博客):
面试前需要掌握的所有知识
Github使用,协作开发
Java 基础入门
1)基本数据类型
- 8 种基本数据类型(boolean、char、byte、short、int、long、float、double)
- 整形中 byte、short、int、long 的取值范围
- 单精度和双精度
- 为什么不能使用“==”比较浮点数
- 基本类型和包装类型的区别
- 自动拆箱与装箱
- Integer 的缓存机制
2)操作符
- 算术运算符
- 逻辑运算符
- 比较运算符
3)流程控制语句
- 条件分支(if/else/else if、三元运算符、switch)
- 循环或者遍历(for、while、do-while)
- break 和 continue
4)包
- 创建包
- 导入包
- 包全名
5)main 方法详解
- public 关键字
- static 关键字
- void 关键字
- main 方法
- 字符串数组参数(
String[] args
)
6)数组
7)注释
- 单行注释
- 多行注释
- 文档注释
- 注释真的不会被执行吗?
- 优秀的程序员真的不写注释吗
8)字符串
- 双引号字符串和 new 字符串对象
- 字符串为什么是不可变的?
- String、StringBuilder 和 StringBuffer 之间的区别
- 字符串拼接的几种方式
- 字符串常量池
- 关于 intern
- 字符串比较(== 和 equals)
- 字符串拆分
- 字符串操作小技巧
- 字符串转整形
- 生成 UUID
- 字符串可以引用传递吗?
- 字符串长度
- 关于 substring
Java 核心技术
1)面向对象
- 面向对象和面向过程
- 封装
- 继承
- 多态
- 接口
- 抽象类
- 重写和重载
- 构造方法
- 局部变量、成员变量、静态变量、常量
- 值传递还是引用传递
- final 关键字
- this 关键字
- super 关键字
- 不可变对象
- equals() 和 hashCode()
- 打印 Java 对象
- NullPointerException
2)常用工具类
3)集合框架
- ArrayList
- LinkedList
- ArrayList 和 LinkedList 之间的区别
- 不可变 List
- CopyOnWriteArrayList
- HashMap
- LinkedHashMap
- TreeMap
- ConcurrentHashMap
- fail-fast
4)反射机制
- 什么是反射?
- 反射有什么用?
- Class 类
5)异常处理
- 为什么需要异常处理机制?
- Error 和 Exception
- try-catch-finally
- try-with-resource
- 自定义异常
- 尽量捕获原始异常
- 不要打印堆栈后再抛出异常
- 不要用异常处理机制代替判断
- 不要过早捕获异常
6)注解
- 注解是什么?
- 注解的生命周期
- 注解装饰的目标
- 自定义注解
- 使用注解
7)IO 流
- 字符流、字节流
- 输入流、输出流
- 同步、异步
- 阻塞、非阻塞
- BIO、NIO 和 AIO
- NIO 2.0
8)序列化
- 什么是序列化和反序列化
- Java 如何实现序列化和反序列化
- Serializbale 和 Externalizable
- serialVersionUID
9)泛型
- 什么是泛型?
- 类型擦除
- 泛型带来的问题
- 泛型中 K T V E 这些特殊字幕的含义
- 通配符
- 上下界限定符 extends 和 super
- 不要在集合中使用 Java 原始类型
10)单元测试
- Junit
- TestNG
11)编码方式
- ASCII
- Unicode
- UTF-8
- GBK、GB2312
- 如何解决乱码问题
12)并发编程
- 什么是并发
- 什么是并行
- 什么是线程
- 什么是进程
- 线程的状态
- 线程的优先级
- 创建线程
- 创建线程池
- 什么是线程安全
- 多级缓存和一致性问题
- CPU 时间片和原子性问题
- 指令重排和有序性问题
- 线程安全和内存模型
- happens-before
- 可重入锁
- 阻塞锁
- 乐观锁
- 悲观锁
- 分布式锁
- CAS
- ABA
- 偏向锁
- 轻量级锁
- 重量级锁
- 自旋锁
- 什么是死锁
- 如果避免死锁
- synchronized
- volatile
- ThreadLocal
- Executors
- CountDownLatch
- Thread
- Runnable
- Callable
- ReentrantLock
- ReentrantReadWriteLock
- Atomic 相关类
13)Java 8 新特性
14)源码阅读
- String
- Integer
- ArrayList
- LinkedList
- CopyOnWriteArrayList
- HashMap
- TreeMap
- LinkedHashMap
- ConcurrentHashMap
- CopyOnWriteArrayList
Java 进阶升级
1)JVM
- Java 内存结构
- 堆
- 栈
- 垃圾回收
- JVM 参数调优
- Java 对象模型
- HotSpot
- 类加载机制
- 编译和反编译
- 反编译工具
- JIT
- 虚拟机性能监控和故障处理工具(jps、jstack、jmap、jstat、jconsole、javap)
2)性能优化
- 使用单例
- 使用线程池
- 减少上下文切换
- 减小锁粒度
- 数据压缩
- Stream 并行流
- GC 调优
- JVM 内存分配调优
- btrace
3)设计模式
- 设计模式的六大原则
- 创建型设计模式(单例、抽象工厂、建造者、工厂、原型)
- 结构型设计模式(适配器、桥接、装饰、组合、外观、享元、代理)
- 行为型设计模式(模板方法、命令、迭代器、观察者、中介者、备忘录、解释器、状态、策略、责任链、访问者)
- 单例的七种写法
4)数据结构和算法
- 简单的数据结构(栈、队列、链表、数组、哈希表)
- 树(二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、红黑树、多路树)
- 堆
- 图(拓扑、有向图、无向图)
- 稳定的排序算法(冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序)
- 不稳定的排序算法(选择排序、希尔排序、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序、Clover 排序)
- 时间复杂度
- 空间复杂度
- 贪心算法
- KMP 算法
5)操作系统
- Linux 常用命令(find、top、tar、move、grep、tail、netstat、curl、wget、ping、ssh)
- 服务器性能指标(qps、CPU 利用率)
- 进程同步
- 分段和分页
- 虚拟内存和主存
6)网络安全
- CSRF
- XSS
- SQL 注入
- 加密和解密(对称加密、非对称加密)
- MD5、SHA1、DES、RSA
- DDOS 攻击
- HTTP 和 HTTPS
- SSL
- TLS
- TCP 和 UDP
- Cookie、Session
- CDN
- DNS
7)数据库
8)大数据
- 搜索(Elasticsearch 、Solr)
- 流式计算(Storm、Spark、Flink)
- Hadoop
9)服务器
- Tomcat
- jetty
- Nginx
10)框架
- Spring
- MyBatis
- Spring MVC
- Spring Boot
- Spring Security
- Spring Cloud
- Netty
- Dubbo
11)消息队列
- RabbitMQ
- Kafka
12)容器
- Docker
- K8s
最后要学一下java推荐的两个jar包,guava和hutool