Skip to content

fuyao-w/KnowledgeBase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

KnowledgeBase

这个仓库里面的东西是我总结的知识库。

里面的内容:

  1. java 源码分析

    几乎覆盖了所有常用的类,集合、多线程、并发包等。对源码尽我所能的进行了分析。

    也对线程池,AQS的基础CLH 锁,提供了简易的实现,帮助理解。

  2. jvm

    将深入理解 jvm 的内容与oracle 官网的内容进行了总结,将其分为了几部分。便于查看。

  3. Spring

    对spring core、mvc 等模块的源码进行分析。

    例如 spring 的启动运行过程、AutoWired 的原理,MVC 模块的原理。xml 的解析还夹杂着spring 基础设施的分析。

    如果你只是从网上了解过一些博客,没有自己看过源码。建议你下定决心自己debug 源码,并且将我的分析作为参照。收获肯定非常巨大。

  4. 计算机网络、操作系统

    对比较常考的概念进行总结,比如握手挥手拥塞控制、HTTPS、状态码等等。

    操作系统涉及的概念总结较少。进程线程区别等等

  5. 数据库

对数据库的常用概念进行了总结,内容来自《高性能MYQL》、MYSQL 官网、还有网上的博文。

  1. Redis

只总结了一些简单的概念 持久化、过期、等概念,但没有对例如各数据结构的底层实现进行总结。(

想要了解推荐一本书《Redis 设计与实现》)

其他还有零散的例如红黑树的简介等。

  1. Golang

现在使用golang 开发,会逐渐增加 golang 相关的知识总结。

由于懒没有写目录,如果你使用 Chrome 插件 Octotree ,那就不是问题。

本仓库里的东西其实很浅薄,非常欢迎本仓库的内容进行补充。

PS:对即将面临找工作或者对技术感兴趣的同学有几点建议。
  1. 对于学生来说,像操作系统、计算机网络这种可能其实很重要,可以证明你的基础。还有你的学习能力。

  2. 算法也特别的重要,去LeetCode 上刷个 300 道一点都不多。找一些ACM 的书看一下了解一些套路也挺好。

  3. 个人认为了解设计模式也很重要,它可以让你更容易理解像Spring 、mybatis 等框架的源码。但是最好的学习方式就是通过阅读源码+ 实践理解设计模式。

    例如:Java 里面的线程池其实就是代理模式 + 阻塞队列,如果你理解这两样。完全可以自己写出一个简易的线程池。那几个参数的意义与拒绝策略什么的也轻而易举的就可以理解。又或者是Spring 中最为常见的策略模式、模板模式等。Mybatis 里面的组合模式等等。

  4. 去官方网站进行了解是学习技术的好习惯。

  5. 还有,如果你想给面试官留下深刻的印象,最好的方式就是通过实践增加自己的经验,而不是从网上博客中获取一些浅薄的知识。就像数据库你知道四个隔离级别、与各种索引,但不能写出一条像样的SQL、Redis 只知道几个数据类型但是没实践过的话,那还有什么意义呢?而且在面试中只要面试官稍微往深一问就完全暴露了。

  6. 最后,不要认为学了 Java 这辈子只能作为一名Java 程序员了,语言并不重要。你可以学习一两门其他的语言,比如python 、go。不用非要深入学习各种原理,你一定会有一个全新的认知。