java知识点总结__fromruisi

    • Java核心知识
      • Java基础
        • 新版本特性
        • 跨平台特性
        • Java四个基本特性
        • Object类及其方法实现(尤其是equals() and hashCode())
        • 基本数据类型与引用数据类型
        • Exception vs Error
        • finally vs final vs finalize
        • final vs static
        • 四种引用:强引用、软引用、若引用、幻象引用的比较
        • 重载 vs 重写
        • 接口 vs 抽象类
        • 深克隆 vs 浅克隆
        • String vs StringBuffer vs StringBuilder (底层实现)
        • IO vs NIO vs AIO
        • 反射与动态代理
        • 序列化与反序列化(底层实现)
      • 集合框架 (应用及源码分析)
        • 集合框架的设计与所有的继承关系
        • Vector vs ArrayList vs LinkedList
        • HashTable vs HashMap vs TreeMap
        • HashTable vs HashMap vs ConcurrentHashMap
        • HashSet vs TreeSet
      • 并发与多线程(应用及底层实现)
        • 线程的创建方式
        • 多线程应用场景
        • 线程状态与转换
        • 线程安全与同步机制:volatile vs synchronized vs Lock(ReentrantLock)
        • volatile底层原理
        • synchronized底层原理及其锁的升级与降级
        • Lock(ReentrantLock)底层原理
        • ThreadLocal
        • 线程通信
        • 线程池(底层实现)
        • 死锁的出现场景、定位以及修复
        • CAS 与 Atomic*类型实现原理
        • AQS:并发包基础技术
        • Java并发包(java.util.concurrent及其子包)提供的并发工具类
          • 比synchronized更加高级的各种同步结构,如:Semaphore,CyclicBarrier, CountDownLatch
          • 各种线程安全的容器(主要有四类:Queue,List,Set,Map),如:ConcurrentHashMap,ConcurrentSkipListMap,CopyOnWriteArrayList
          • 各种并发队列的实现,如各种BlockingQueue的实现(ArrayBlockingQueue, LinkedBlockingQueue, SynchorousQueue, PriorityBlockingQueue,DelayQueue,LinkedTranferQueue)等。
          • Executor框架与线程池
    • JVM
      • JVM运行时数据区域 vs Java内存模型 (这2不一样!!!
      • Java内存模型与happen-before原则
      • 内存泄露、内存溢出以及栈溢出
      • JVM类加载机制及其作用与对象的初始化
      • JVM垃圾回收
        • 如何判断对象已经死亡?引用计数法 vs 可达性分析
        • 如何回收对象?垃圾收集算法
        • Minor GC vs Full GC
        • 常用的垃圾收集器及其特点
        • 内存分配与回收策略
      • GC调优
        • GC调优的思路
        • JVM常用参数
        • 基于JDK命令行工具监控Java进程, 如 jps,jinfo,jstat,jmap,jstack
        • 基于图形化工具监控Java进程,如MAT(Memory Analyzer),VisualVM,Btrace
  • 面向对象与设计模式(了解常用设计模式及其应用场景、示例)
    • 面向对象的六个基本原则
    • 单例模式(手撕各种单例模式)
    • 工厂模式(Spring的BeanFactory,ApplicationContext)vs.抽象工厂模式
    • 构造器模式(应用场景:解决构造复杂对象的麻烦。复杂:需要输入的参数的组合较多)
    • 代理模式(Spring AOP(动态代理模式:2种实现方式,即jdk & 字节码方式))
    • 装饰器模式(应用场景:若想对一个类从不同角度进行功能扩展,例如java.io中,InputStream是一个抽象类,标准类库中提供了FileInputStream\ByteArrayInputStream等各种不同的子类,分别从不同角度对InputStream进行了功能扩展。这些不同的实现类其构造函数的输入均为InputStream(的实现类),然后对InputStream添加不同层次的逻辑,从而实现不同的功能,这就是装饰。)
    • 观察者模式(各种事件监听器)
    • 策略模式(比较器Comparator)
    • 迭代器模式(ArrayList等集合框架中的迭代器)
    • 生产者消费者模式(消息队列)要能手撕
    • ...还有很多,但是掌握这些基本上够了
  • 数据结构与算法
    • 时间复杂度和空间复杂度分析
    • 常用的数据结构及其特点
      • 数组 vs 链表
      • 队列 vs 栈
      • 跳表(Redis利用跳表实现有序集合Sorted Set)
      • 散列表
      • 堆与优先级队列
      • 二叉树:普通二叉树 vs 二叉查找树 vs 平衡二叉树(AVL)vs 红黑树 (vs 哈夫曼树)
      • 多叉树:B-Tree vs B+Tree vs B*Tree / Trie Tree
        • B+Tree: MySQL索引数据结构
        • Trie Tree: 实现敏感词过滤算法; 实现搜索引擎的关键词提示功能
      • 图:考数据结构不多,主要考2个最短路径优先算法
    • 常用算法
      • 各种排序算法:内部排序+外部排序([url=]https://blog.csdn.net/hguisu/article/details/7776068/)[/url]
        • 需要手撕:冒泡、插入、堆排、归并、快排(2路快排+3路快排+随机枢值)
        • 大数据排序:外部排序
      • 各种查找算法:
        • 二分查找算法及其变种
        • 二叉查找树的查找
        • 利用快排查找
        • ...
      • 常用的遍历算法
        • BFS vs DFS
        • Morris遍历
      • 常用的Hash算法
        • 一致性哈希
        • 布隆过滤器
      • 贪心算法
      • 分治算法
      • 回溯算法
      • 动态规划
      • 海量数据处理算法
        • bitmap算法
        • 布隆过滤器
        • https://blog.csdn.net/v_july_v/article/details/6279498
      • 其他算法:
        • LRU算法
        • KMP算法
        • Manacher算法(面试问过1次)
        • BFPRT算法
    • 常见的手撕代码问题
      • 《剑指offer》的问题
      • 后续搜集补充。。。
  • 计算机网络
    • OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及及各层协议
    • 给定一个网址,访问这个网址经过了那些过程?涉及哪些协议?
    • HTTP and HTTPS
      • HTTP报文格式
      • HTTP方法及相互区别
      • HTTP的无状态
      • HTTP状态码
      • HTTP 1.0 vs 1.1 vs 2.0
      • HTTP vs HTTPS
      • HTTP安全性
      • HTTP底层协作协议(如传输层为TCP协议)
    • TCP and UDP
      • TCP vs UDP
      • TCP如何保证可靠传输?
      • TCP的三次握手和四次挥手及其原因
      • TCP的流量控制与滑动窗口
      • TCP的拥塞控制与拥塞窗口
      • TCP的拆包粘包
      • 关于TCP协议非常好的2篇文章:
        • https://coolshell.cn/articles/11564.html
        • https://coolshell.cn/articles/11609.html
    • RPC协议(经常和Dubbo一起问)
    • Socket编程
    • 异步IO多路复用:select poll epoll
  • OS
    • 内核态 vs 用户态
    • 进程 vs 线程
    • 进程调度算法
    • 进程间通信的几种方式
    • OS死锁相关的问题
      • 什么是死锁?哲学家就餐问题
      • 死锁的必要条件
      • 死锁的应对方法
        • 死锁的检测与恢复
        • 死锁的动态避免:银行家算法
        • 死锁的静态防止:破坏死锁的必要条件之一
    • 段页式内存管理
    • 页面置换算法
    • 磁盘调度算法
    • Linux系统常用的命令有哪些?是否会Shell,Python?
  • 数据库MySQL
    • 数据库范式
    • 数据库事务
      • 什么是事务?
      • 事务特性:ACID
      • 事务隔离级别以及脏读、不可重复读、幻读
      • 分布式事务
    • 数据库索引
      • 索引的应用场景
      • 索引特点
      • 索引的优点和缺点
      • 索引的分类
      • 索引选择原则
      • 索引的优化
      • 索引失效
      • 索引的底层实现(B-Tree vs B+Tree)
      • 对于建立索引的列,数据均匀分布好还是不均匀好?
    • 数据库的锁
      • 行锁 vs 表锁
      • 读锁 vs 写锁
      • 乐观锁 vs 悲观锁以及如何实现?(MVCC)
      • 加锁的方式
      • 分布式锁
    • 数据库存储引擎比较
      • InnoDB
      • MyISAM
      • Memory
    • MySQL连接池对比
    • MySQL命令
    • JOIN的执行计划?
    • 数据库分库分表
    • 主从复制
  • 数据库Redis
    • 为什么使用Redis?
    • Redis的优点与缺点
    • Redis的数据类型、底层实现以及各种数据类型的使用场景
    • Redis是单线程吗?单线程的Redis为啥这么快?
    • Redis持久化的方式
    • 谈谈Redis的过期策略以及内存淘汰机制
    • 如何解决Redis和和数据库双写一致性的问题?
    • 如何应对缓存穿透与缓存雪崩的问题?
    • 如何解决Redis的并发竞争Key问题
  • Web与常见框架
    • Servlet的生命周期(问的很少)
    • Cookie vs Session
    • 分布式Session
    • Spring相关(应用与源码分析)
      • 看过Spring的源码吗?
      • IOC应用及原理
      • AOP应用及原理
      • 事务
      • Spring涉及的设计模式
      • 谈谈Spring Bean的生命周期和作用域
      • Spring MVC的工作原理
      • Spring vs Spring MVC
      • Spring vs Spring Boot
      • 了解微服务,Spring Cloud
    • Netty (网络框架)
    • Dubbo
  • 分布式架构
    • 服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等
    • 资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
    • 流量调度,涉及路由、负载均衡、流控、熔断等。
    • 数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等
    • 容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
    • 自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。
  • 项目
    • 准备项目对于秋招而言是非常重要的,为啥呢?
      • 加深对所学知识的理解,将知识转换为能力
      • 证明你的学习能力和实践能力
      • 项目可以在一定程度上,将面试官的问题引导到一定范围内,例如在面试的时候,一般情况下,项目会最开始介绍,在介绍项目的时候,你就可以以你熟悉的内容,不断引申,就像是多米诺骨牌一样,一直延续下去。这样就有可能避免面试官深挖基础,问到你没有准备过的东西。
    • 如何准备项目呢?我以我准备的Java后端项目为例说明,即叶神的高级项目课:https://www.nowcoder.com/courses/semester/senior
      • 明确这个项目的需求与解决的问题
      • 明确这个项目的结构与组成
      • 明确这个项目涉及的技术栈
      • 完成这个项目的基本功能
      • 在完成的过程中,总结归纳
        • 总结归纳业务知识,例如如何实现系统的登陆和注册功能,如何实现点赞功能
        • 总结技术栈的相关知识与应用场景,例如Spring, Spring Boot, MyBatis, MySQL, Redis
        • 总结几个你认为做的非常好的点,例如利用Redis实现一个异步处理框架
        • 总结项目中出现的问题以及解决方式,例如响应时间过长,你是如何解决的?
        • 总结如何扩展系统,例如如何扩展系统的业务功能(添加后台管理模块等)
        • 总结如何提升系统性能,例如如何处理缓存,如何提高系统响应
        • 总结如何设计一个系统,例如根据经验如何设计和实现一个秒杀系统?
        • 总结如何进行系统的测试,例如你甚至可以测试驱动开发(TDD)
        • 还有很多总结...这里只是提供一些思路
      • 扩展项目
        • 添加业务模块,例如添加后台管理模块
        • 添加推荐算法,例如给timeline增加推荐能力
        • 公共模块服务化
      • 如果可以的话,将系统上线(非常加分的),这里涉及另外的一些知识点:
        • 项目的版本管理:Git & Github
        • 项目的部署:涉及Linux、服务器
        • 项目的扩展:涉及Nginx与负载均衡
        • 项目的调试与优化:涉及如何在服务器端远程进行调试和优化,例如jmeter进行远程调试系统
        • 项目的服务化与分布式架构:微服务,例如如何将项目从单体应用扩展为分布式应用,如何将常用模块或者固定模块变成一个个服务
        • 还有很多知识点...这里知识提供一些丝
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值