BAT大厂面试题与全栈知识体系结合 Hot必读

TIP

你好,我是pdai。你是否也曾对未来迷茫不知方向,也曾每天在碎片化的学习中焦虑,也曾钦羡他人步入高于你的层次? 那么跟随我,结合BAT大厂面试题帮你构筑你自己的知识体系,提升靠技术实现自我价值的概率和掌控力;而往往当你将本文中知识点掌握时,你会发现那些平时高谈阔论的家伙其实都是纸老虎;但你依然要保持谦卑,闻道有先后,术业有专攻,如是而已。@pdai

全栈知识体系总览

为适配更多屏幕,切成两个图:

(点击放大看)

(点击放大看)

适合什么样的人群阅读

  • 面试官:系统性的理解不仅能帮助你理解知识的基础体系,更能帮快速甄别候选人才
  • 开发入门者:提前上船,赢在起跑线
  • 开发进阶者:若干年的开发,尚还没有方向的
  • 是个想上进的:关键是你觉得对你有意义,且做你认为正确的事就够了

Java入门与进阶

面向对象与Java基础

知识体系系统性梳理

相关文章

Java入门:你可能会注意到,面向对象与Java基础 这个章节写的非常简单,为什么呢? 因为就语法本身而言,大多数人入门一门语言只需要两周左右,所以这里主要梳理下知识点和常见的Q/A。

基础知识点复习完了以后,我们需要深入的理解Java中的一些基础机制:

  • Java 基础 - 泛型机制详解
    • Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(Type Erasure),将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型),就像完全没有泛型一样。
  • Java 基础 - 注解机制详解
    • 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它是框架学习和设计者必须掌握的基础。
  • Java 基础 - 异常机制详解
    • Java异常是Java提供的一种识别及响应错误的一致性机制,ava异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。
  • Java 基础 - 反射机制详解
    • JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。
  • Java常用机制 - SPI机制
    • SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用。

Java进阶 - 集合框架

知识体系系统性梳理

相关文章

A. Java进阶 - Java 集合框:Java 集合框架应用是极其广泛的,对于其总体框架用法及源码都必要深刻理解。@pdai

B. Java进阶 - Java 集合框之 Collection源码解读:对核心的Collection类进行源码解读。

C. Java进阶 - Java 集合框之 Map & Set 源码解读:对核心的Map & Set 类进行源码解读。


Java进阶 - 并发框架

知识体系系统性梳理

相关文章

A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解并发理论基础和线程基础,并发关键字等,这些是你理解Java并发框架的基础。@pdai

  • Java 并发 - 知识体系
  • Java 并发 - 理论基础
    • 多线程的出现是要解决什么问题的?
    • 线程不安全是指什么? 举例说明
    • 并发出现线程不安全的本质什么? 可见性,原子性和有序性。
    • Java是怎么解决并发问题的? 3个关键字,JMM和8个Happens-Before
    • 线程安全是不是非真即假? 不是
    • 线程安全有哪些实现思路?
    • 如何理解并发和并行的区别?
  • Java 并发 - 线程基础
    • 线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式?
    • 通常线程有哪几种使用方式?
    • 基础线程机制有哪些?
    • 线程的中断方式有哪些?
    • 线程的互斥同步方式有哪些? 如何比较和选择?
    • 线程之间有哪些协作方式?
  • 关键字: synchronized详解
    • Synchronized可以作用在哪里? 分别通过对象锁和类锁进行举例。
    • Synchronized本质上是通过什么保证线程安全的? 分三个方面回答:加锁和释放锁的原理,可重入原理,保证可见性原理。
    • Synchronized由什么样的缺陷? Java Lock是怎么弥补这些缺陷的。
    • Synchronized和Lock的对比,和选择?
    • Synchronized在使用时有何注意事项?
    • Synchronized修饰的方法在抛出异常时,会释放锁吗?
    • 多个线程等待同一个snchronized锁的时候,JVM如何选择下一个获取锁的线程?
    • Synchronized使得同时只有一个线程可以执行,性能比较差,有什么提升的方法?
    • 我想更加灵活地控制锁的释放和获取(现在释放锁和获取锁的时机都被规定死了),怎么办?
    • 什么是锁的升级和降级? 什么是JVM里的偏斜锁、轻量级锁、重量级锁?
    • 不同的JDK中对Synchronized有何优化?
  • 关键字: volatile详解
    • volatile关键字的作用是什么?
    • volatile能保证原子性吗?
    • 之前32位机器上共享的long和double变量的为什么要用volatile? 现在64位机器上是否也要设置呢?
    • i++为什么不能保证原子性?
    • volatile是如何实现可见性的? 内存屏障。
    • volatile是如何实现有序性的? happens-before等
    • 说下volatile的应用场景?
  • 关键字: final详解
    • 所有的final修饰的字段都是编译期常量吗?
    • 如何理解private所修饰的方法是隐式的final?
    • 说说final类型的类如何拓展? 比如String是final类型,我们想写个MyString复用所有String中方法,同时增加一个新的toMyString()的方法,应该如何做?
    • final方法可以被重载吗? 可以
    • 父类的final方法能不能够被子类重写? 不可以
    • 说说final域重排序规则?
    • 说说final的原理?
    • 使用 final 的限制条件和局限性?
    • 看本文最后的一个思考题

B. Java进阶 - Java 并发之J.U.C框架:然后需要对J.U.C框架五大类详细解读,包括:Lock框架,并发集合, 原子类, 线程池和工具类。@pdai

B.1 Java进阶 - Java 并发之J.U.C框架【1/5】:CAS及原子类:从最核心的CAS, Unsafe和原子类开始分析。

  • JUC原子类: CAS, Unsafe和原子类详解
    • 线程安全的实现方法有哪些?
    • 什么是CAS?
    • CAS使用示例,结合AtomicInteger给出示例?
    • CAS会有哪些问题?
    • 针对这这些问题,Java提供了哪几个解决的?
    • AtomicInteger底层实现? CAS+volatile
    • 请阐述你对Unsafe类的理解?
    • 说说你对Java原子类的理解? 包含13个,4组分类,说说作用和使用场景。
    • AtomicStampedReference是什么?
    • AtomicStampedReference是怎么解决ABA的? 内部使用Pair来存储元素值及其版本号
    • java中还有哪些类可以解决ABA的问题? AtomicMarkableReference

B.2 Java进阶 - Java 并发之J.U.C框架【2/5】:锁:然后分析JUC中锁。

  • JUC锁: LockSupport详解
    • 为什么LockSupport也是核心基础类? AQS框架借助于两个类:Unsafe(提供CAS操作)和LockSupport(提供park/unpark操作)
    • 写出分别通过wait/notify和LockSupport的park/unpark实现同步?
    • LockSupport.park()会释放锁资源吗? 那么Condition.await()呢?
    • Thread.sleep()、Object.wait()、Condition.await()、LockSupport.park()的区别? 重点
    • 如果在wait()之前执行了notify()会怎样?
    • 如果在park()之前执行了unpark()会怎样?
  • JUC锁: 锁核心类AQS详解
    • 什么是AQS? 为什么它是核心?
    • AQS的核心思想是什么? 它是怎么实现的? 底层数据结构等
    • AQS有哪些核心的方法?
    • AQS定义什么样的资源获取方式? AQS定义了两种资源获取方式:独占(只有一个线程能访问执行,又根据是否按队列的顺序分为公平锁非公平锁,如ReentrantLock) 和共享(多个线程可同时访问执行,如SemaphoreCountDownLatchCyclicBarrier )。ReentrantReadWriteLock可以看成是组合式,允许多个线程同时对某一资源进行读。
    • AQS底层使用了什么样的设计模式? 模板
    • AQS的应用示例?
  • JUC锁: ReentrantLock详解
    • 什么是可重入,什么是可重入锁? 它用来解决什么问题?
    • ReentrantLock的核心是AQS,那么它怎么来实现的,继承吗? 说说其类内部结构关系。
    • ReentrantLock是如何实现公平锁的?
    • ReentrantLock是如何实现非公平锁的?
    • ReentrantLock默认实现的是公平还是非公平锁?
    • 使用ReentrantLock实现公平和非公平锁的示例?
    • ReentrantLock和Synchronized的对比?
  • JUC锁: ReentrantReadWriteLock详解
    • 为了有了ReentrantLock还需要ReentrantReadWriteLock?
    • ReentrantReadWriteLock底层实现原理?
    • ReentrantReadWriteLock底层读写状态如何设计的? 高16位为读锁,低16位为写锁
    • 读锁和写锁的最大数量是多少?
    • 本地线程计数器ThreadLocalHoldCounter是用来做什么的?
    • 缓存计数器HoldCounter是用来做什么的?
    • 写锁的获取与释放是怎么实现的?
    • 读锁的获取与释放是怎么实现的?
    • RentrantReadWriteLock为什么不支持锁升级?
    • 什么是锁的升降级? RentrantReadWriteLock为什么不支持锁升级?

B.3 Java进阶 - Java 并发之J.U.C框架【3/5】:集合:再理解JUC中重要的支持并发的集合。

  • JUC集合: ConcurrentHashMap详解
    • 为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么?
    • ConcurrentHashMap在JDK1.7和JDK1.8中实现有什么差别? JDK1.8解決了JDK1.7中什么问题
    • ConcurrentHashMap JDK1.7实现的原理是什么? 分段锁机制
    • ConcurrentHashMap JDK1.8实现的原理是什么? 数组+链表+红黑树,CAS
    • ConcurrentHashMap JDK1.7中Segment数(concurrencyLevel)默认值是多少? 为何一旦初始化就不可再扩容?
    • ConcurrentHashMap JDK1.7说说其put的机制?
    • ConcurrentHashMap JDK1.7是如何扩容的? rehash(注:segment 数组不能扩容,扩容是 segment 数组某个位置内部的数组 HashEntry<K,V>[] 进行扩容)
    • ConcurrentHashMap JDK1.8是如何扩容的? tryPresize
    • ConcurrentHashMap JDK1.8链表转红黑树的时机是什么? 临界值为什么是8?
    • ConcurrentHashMap JDK1.8是如何进行数据迁移的? transfer
  • JUC集合: CopyOnWriteArrayList详解
    • 请先说说非并发集合中Fail-fast机制?
    • 再为什么说ArrayList查询快而增删慢?
    • 对比ArrayList说说CopyOnWriteArrayList的增删改查实现原理? COW基于拷贝
    • 再说下弱一致性的迭代器原理是怎么样的? COWIterator<E>
    • CopyOnWriteArrayList为什么并发安全且性能比Vector好?
    • CopyOnWriteArrayList有何缺陷,说说其应用场景?
  • JUC集合: ConcurrentLinkedQueue详解
    • 要想用线程安全的队列有哪些选择? Vector,Collections.synchronizedList( List<T> list), ConcurrentLinkedQueue等
    • ConcurrentLinkedQueue实现的数据结构?
    • ConcurrentLinkedQueue底层原理? 全程无锁(CAS)
    • ConcurrentLinkedQueue的核心方法有哪些? offer(),poll(),peek(),isEmpty()等队列常用方法
    • 说说ConcurrentLinkedQueue的HOPS(延迟更新的策略)的设计?
    • ConcurrentLinkedQueue适合什么样的使用场景?
  • JUC集合: BlockingQueue详解
    • 什么是BlockingDeque?
    • BlockingQueue大家族有哪些? ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, SynchronousQueue...
    • BlockingQueue适合用在什么样的场景?
    • BlockingQueue常用的方法?
    • BlockingQueue插入方法有哪些? 这些方法(add(o),offer(o),put(o),offer(o, timeout, timeunit))的区别是什么?
    • BlockingDeque 与BlockingQueue有何关系,请对比下它们的方法?
    • BlockingDeque适合用在什么样的场景?
    • BlockingDeque大家族有哪些?
    • BlockingDeque 与BlockingQueue实现例子?

B.4 Java进阶 - Java 并发之J.U.C框架【4/5】:线程池:再者分析JUC中非常常用的线程池等。

  • JUC线程池: FutureTask详解
    • FutureTask用来解决什么问题的? 为什么会出现?
    • FutureTask类结构关系怎么样的?
    • FutureTask的线程安全是由什么保证的?
    • FutureTask结果返回机制?
    • FutureTask内部运行状态的转变?
    • FutureTask通常会怎么用? 举例说明。
  • JUC线程池: ThreadPoolExecutor详解
    • 为什么要有线程池?
    • Java是实现和管理线程池有哪些方式? 请简单举例如何使用。
    • 为什么很多公司不允许使用Executors去创建线程池? 那么推荐怎么使用呢?
    • ThreadPoolExecutor有哪些核心的配置参数? 请简要说明
    • ThreadPoolExecutor可以创建哪是哪三种线程池呢?
    • 当队列满了并且worker的数量达到maxSize的时候,会怎么样?
    • 说说ThreadPoolExecutor有哪些RejectedExecutionHandler策略? 默认是什么策略?
    • 简要说下线程池的任务执行机制? execute –> addWorker –>runworker (getTask)
    • 线程池中任务是如何提交的?
    • 线程池中任务是如何关闭的?
    • 在配置线程池的时候需要考虑哪些配置因素?
    • 如何监控线程池的状态?
  • JUC线程池: ScheduledThreadPool详解
    • ScheduledThreadPoolExecutor要解决什么样的问题?
    • ScheduledThreadPoolExecutor相比ThreadPoolExecutor有哪些特性?
    • ScheduledThreadPoolExecutor有什么样的数据结构,核心内部类和抽象类?
    • ScheduledThreadPoolExecutor有哪两个关闭策略? 区别是什么?
    • ScheduledThreadPoolExecutor中scheduleAtFixedRate 和 scheduleWithFixedDelay区别是什么?
    • 为什么ThreadPoolExecutor 的调整策略却不适用于 ScheduledThreadPoolExecutor?
    • Executors 提供了几种方法来构造 ScheduledThreadPoolExecutor?
  • JUC线程池: Fork/Join框架详解
    • Fork/Join主要用来解决什么样的问题?
    • Fork/Join框架是在哪个JDK版本中引入的?
    • Fork/Join框架主要包含哪三个模块? 模块之间的关系是怎么样的?
    • ForkJoinPool类继承关系?
    • ForkJoinTask抽象类继承关系? 在实际运用中,我们一般都会继承 RecursiveTask 、RecursiveAction 或 CountedCompleter 来实现我们的业务需求,而不会直接继承 ForkJoinTask 类。
    • 整个Fork/Join 框架的执行流程/运行机制是怎么样的?
    • 具体阐述Fork/Join的分治思想和work-stealing 实现方式?
    • 有哪些JDK源码中使用了Fork/Join思想?
    • 如何使用Executors工具类创建ForkJoinPool?
    • 写一个例子: 用ForkJoin方式实现1+2+3+...+100000?
    • Fork/Join在使用时有哪些注意事项? 结合JDK中的斐波那契数列实例具体说明。

B.5 Java进阶 - Java 并发之J.U.C框架【5/5】:工具类:最后来看下JUC中有哪些工具类,以及线程隔离术ThreadLocal。

  • JUC工具类: CountDownLatch详解
    • 什么是CountDownLatch?
    • CountDownLatch底层实现原理?
    • CountDownLatch一次可以唤醒几个任务? 多个
    • CountDownLatch有哪些主要方法? await(),countDown()
    • CountDownLatch适用于什么场景?
    • 写道题:实现一个容器,提供两个方法,add,size 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束? 使用CountDownLatch 代替wait notify 好处。
  • JUC工具类: CyclicBarrier详解
    • 什么是CyclicBarrier?
    • CyclicBarrier底层实现原理?
    • CountDownLatch和CyclicBarrier对比?
    • CyclicBarrier的核心函数有哪些?
    • CyclicBarrier适用于什么场景?
  • JUC工具类: Semaphore详解
    • 什么是Semaphore?
    • Semaphore内部原理?
    • Semaphore常用方法有哪些? 如何实现线程同步和互斥的?
    • Semaphore适合用在什么场景?
    • 单独使用Semaphore是不会使用到AQS的条件队列?
    • Semaphore中申请令牌(acquire)、释放令牌(release)的实现?
    • Semaphore初始化有10个令牌,11个线程同时各调用1次acquire方法,会发生什么?
    • Semaphore初始化有10个令牌,一个线程重复调用11次acquire方法,会发生什么?
    • Semaphore初始化有1个令牌,1个线程调用一次acquire方法,然后调用两次release方法,之后另外一个线程调用acquire(2)方法,此线程能够获取到足够的令牌并继续运行吗?
    • Semaphore初始化有2个令牌,一个线程调用1次release方法,然后一次性获取3个令牌,会获取到吗?
  • JUC工具类: Phaser详解
    • Phaser主要用来解决什么问题?
    • Phaser与CyclicBarrier和CountDownLatch的区别是什么?
    • 如果用CountDownLatch来实现Phaser的功能应该怎么实现?
    • Phaser运行机制是什么样的?
    • 给一个Phaser使用的示例?
  • JUC工具类: Exchanger详解
    • Exchanger主要解决什么问题?
    • 对比SynchronousQueue,为什么说Exchanger可被视为 SynchronousQueue 的双向形式?
    • Exchanger在不同的JDK版本中实现有什么差别?
    • Exchanger实现机制?
    • Exchanger已经有了slot单节点,为什么会加入arena node数组? 什么时候会用到数组?
    • arena可以确保不同的slot在arena中是不会相冲突的,那么是怎么保证的呢?
    • 什么是伪共享,Exchanger中如何体现的?
    • Exchanger实现举例
  • Java 并发 - ThreadLocal详解
    • 什么是ThreadLocal? 用来解决什么问题的?
    • 说说你对ThreadLocal的理解
    • ThreadLocal是如何实现线程隔离的?
    • 为什么ThreadLocal会造成内存泄露? 如何解决
    • 还有哪些使用ThreadLocal的应用场景?

C. Java进阶 - Java 并发之 本质与模式:最后站在更高的角度看其本质(协作,分工和互斥),同时总结上述知识点所使用的模式。@pdai


Java进阶 - IO框架

知识体系系统性梳理

相关文章

A. Java进阶 - IO框架之知识体系:首先了解下Java IO框架包含什么,同时推荐下如何学习IO框架。@pdai

B. Java进阶 - IO框架之基础IO:其次对Java基础IO框架进行梳理,包括其分类,使用和源码详解。@pdai

C. Java进阶 - IO框架之NIO/AIO等:然后再对Unix IO模型学习,引入到Java BIO/NIO/AIO相关知识详解。@pdai

  • IO 模型 - Unix IO 模型
    • 本文主要简要介绍 Unix I/O 5种模型,并对5大模型比较,并重点为后续章节解释IO多路复用做铺垫
  • Java IO - BIO 详解
    • BIO就是: blocking IO。最容易理解、最容易实现的IO工作方式,应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除等待状态
  • Java NIO - 基础详解
    • 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O
  • Java NIO - IO多路复用详解
    • 本文主要对IO多路复用,Ractor模型以及Java NIO对其的支持
  • Java AIO - 异步IO详解
    • 本文主要对异步IO和Java中对AIO的支持详解。@pdai

D. Java进阶 - IO框架之开源框架:最后再对常用的开源框架进行分析和详解。@pdai

  • Java N(A)IO - 框架: Netty
    • Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等

Java 8 新特性解读

知识体系系统性梳理

相关文章

A. Java进阶 - Java 8 新特性知识点:JDK1.6和JDK1.8是两个大的版本,目前主流使用的是JDK1.8, 所以有必要系统的学习下Java 8相关的知识点。@pdai

B. Java进阶 - Java 8 新特性解读之 常用核心特性:主要包含:函数编程(lambda表达式),Optional类,默认方法,类型注解,重复注解,LocalDateTime等等。

  • Java 8 - 函数编程(lambda表达式)
    • Lambda 表达式的特点?
    • Lambda 表达式使用和Stream下的接口?
    • 函数接口定义和使用,四大内置函数接口Consumer,Function,Supplier, Predicate.
    • Comparator排序为例贯穿所有知识点。
  • Java 8 - Optional类深度解析
    • Optional类的意义?
    • Optional类有哪些常用的方法?
    • Optional举例贯穿所有知识点
    • 如何解决多重类嵌套Null值判断?
  • Java 8 - 默认方法
    • 为什么会出现默认方法?
    • 接口中出现默认方法,且类可以实现多接口的,那和抽象类有啥区别?
    • 多重实现的默认方法冲突怎么办?
  • Java 8 - 类型注解
    • 注解在JDK哪个版本中出现的,可以在哪些地方用注解?
    • 什么是类型注解?
    • 类型注解的作用是什么?
    • 为什么会出现类型注解(JSR308)?
  • Java 8 - 重复注解
    • Java8之前对重复注解是怎么做的?
    • Java8对重复注解添加了什么支持?
  • Java 8 - 类型推断优化
    • 什么是泛型?
    • Java7对泛型推断做了哪些优化?
    • Java8对此有做了哪些优化?
  • Java 8 - LocalDate/LocalDateTime
    • Java8之前的Date有哪些槽点? (Calendar的所有属性都是可变的,SimpleDateFormat的线程不安全性等)
    • Java8之前使用哪些常用的第三方时间库?
    • Java8关于时间和日期有哪些类和方法,变比Java8之前它的特点是什么?
    • 其它语言时间库?

C. Java进阶 - Java 8 新特性解读之 其它知识点:主要包含:JRE精简,Permgen删除及增加MetaSpace,StampedLock,JavaFx2.0等等。

  • Java 8 - JRE精简
    • 为什么精简Java8 JRE,及好处是啥?
    • 紧凑的JRE分3种,分别是compact1、compact2、compact3,他们的关系是?
    • 在不同平台上如何编译等?
  • Java 8 - 移除Permgen
    • Java8之前 “java.lang.OutOfMemoryError: PermGen space”是怎么引起的,怎么解决的?
    • 新增加的元空间(Metaspace)包含哪些东西,画出图?
    • 元空间(Metaspace)和PermGen对比?
  • Java 8 - StampedLock
    • 为什么会引入StampedLock?
    • 用Lock写悲观锁和乐观锁举例?
    • 用StampedLock写悲观锁和乐观锁举例?
    • 性能对比?
  • Java 8 - JavaFx 2.0
    • JavaFX发展历程?
    • Java8对其增加了哪些特性?
  • Java 8 - 其它更新: 字符串,base64,...
    • Java8 还有哪些其它更新?

Java进阶 - JVM相关

知识体系系统性梳理

学习思路

相关文章

A. Java进阶 - JVM相关 知识体系: 首先按照上述学习思路,理解总体知识点在全局上与知识体系之间的对应关系。

B. Java进阶 - JVM相关 类加载: 然后理解类字节码和类的加载机制。

C. Java进阶 - JVM相关 内存结构: 因为类字节码是加载到JVM内存结构中的,所以紧接着理解JVM内存结构。

D. Java进阶 - JVM相关 JMM: 然后通过理解JVM与硬件之间的联系,理解Java 通过其内存模型保证数据线程安全等,这是JVM在并发上底层的支持。

  • JVM基础 - Java 内存模型引入
    • 很多人都Java内存模型和JVM内存结构,以及Java内存模型与物理内存之间的关系。本文从堆栈角度引入JMM,然后介绍JMM和物理内存之间的关系, 为后面JMM详解, JVM 内存结构详解, Java 对象模型详解等铺垫。
  • JVM基础 - Java 内存模型详解
    • 本文主要转载自 Info 上深入理解Java内存模型 (opens new window), 作者程晓明。这篇文章对JMM讲的很清楚了,大致分三部分:重排序与顺序一致性;三个同步原语(lock,volatile,final)的内存语义,重排序规则及在处理器中的实现;java 内存模型的设计,及其与处理器内存模型和顺序一致性内存模型的关系

E. Java进阶 - JVM相关 GC: 再者理解下Java GC机制,如何回收内存等。

F. Java进阶 - JVM相关 排错调优: 最后围绕着调试和排错,分析理解JVM调优参数,动态字节码技术及动态在线调试的原理;学会使用常用的调工具和在线动态调试工具等。

  • 调试排错 - JVM 调优参数
    • 本文对JVM涉及的常见的调优参数和垃圾回收参数进行阐述
  • 调试排错 - Java OOM 分析
    • 本文以两个简单的例子(堆内存溢出MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程
  • 调试排错 - Java问题排查:Linux命令
    • Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查
  • 调试排错 - Java问题排查:工具单
    • Java 在线问题排查主要分两篇:本文是第二篇,通过java调试/排查工具进行问题定位
  • 调试排错 - Java动态调试技术原理
  • 调试排错 - Java应用在线调试Arthas
    • 本文主要介绍Alibaba开源的Java诊断工具,开源到现在已经1.7万个点赞了,深受开发者喜爱。具体解决在线问题,比如:
    • 这个类从哪个 jar 包加载的? 为什么会报各种类相关的 Exception?
    • 我改的代码为什么没有执行到? 难道是我没 commit? 分支搞错了?
    • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
    • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
    • 是否有一个全局视角来查看系统的运行状况?
    • 有什么办法可以监控到JVM的实时运行状态?

数据结构与算法

数据结构

知识体系系统性梳理

学习思路

避免孤立的学习知识点,要关联学习。比如实际应用当中,我们经常使用的是查找排序操作,这在我们的各种管理系统、数据库系统、操作系统等当中,十分常用,我们通过这个线索将知识点串联起来:

数组的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查找,二分查找要求数组的构造一定有序,二分法查找解决了普通数组查找复杂度过高的问题。任和一种数组无法解决的问题就是插入、删除操作比较复杂,因此,在一个增删查改比较频繁的数据结构中,数组不会被优先考虑

普通链表由于它的结构特点被证明根本不适合进行查找

哈希表是数组和链表的折中,同时它的设计依赖散列函数的设计,数组不能无限长、链表也不适合查找,所以也适合大规模的查找

二叉查找树因为可能退化成链表,同样不适合进行查找

AVL树是为了解决可能退化成链表问题,但是AVL树的旋转过程非常麻烦,因此插入和删除很慢,也就是构建AVL树比较麻烦

红黑树是平衡二叉树和AVL树的折中,因此是比较合适的。集合类中的Map、关联数组具有较高的查询效率,它们的底层实现就是红黑树。

多路查找树 是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。

B树与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。它的应用是文件系统及部分非关系型数据库索引。

B+树在B树基础上,为叶子结点增加链表指针(B树+叶子有序链表),所有关键字都在叶子结点 中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中。通常用于关系型数据库(如Mysql)和操作系统的文件系统中。

B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针, 在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3。

R树是用来做空间数据存储的树状数据结构。例如给地理位置,矩形和多边形这类多维数据建立索引。

Trie树是自然语言处理中最常用的数据结构,很多字符串处理任务都会用到。Trie树本身是一种有限状态自动机,还有很多变体。什么模式匹配、正则表达式,都与这有关。

相关文章

A. 数据结构 知识点:数据结构是基础中的基础,任何进阶都逃不开这些知识点。

B. 数据结构之 线性结构:首先理解数据结构中线性结构及其延伸:数组和矩阵,链表,栈和队列等。

  • 线性表 - 数组和矩阵
    • 数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变
  • 线性表 - 链表
    • n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。确定一个链表我们只需要头指针,通过头指针就可以把整个链表都能推出来
  • 线性表(散列) - 哈希表
    • 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。@pdai
  • 线性表 - 栈和队列
    • 数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用

C. 数据结构之 逻辑结构:树:然后理解数据结构中逻辑结构之树:二叉搜索树(BST),平衡二叉树(AVL),红黑树(R-B Tree),哈夫曼树,前缀树(Trie)等。

  • 树 - 基础和Overview
    • 树在数据结构中至关重要,这里展示树的整体知识体系结构和几种常见树类型
  • 树 - 二叉搜索树(BST)
    • 本文主要介绍 二叉树中最基本的二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
  • 树 - 平衡二叉树(AVL)
    • 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
  • 树 - 红黑树(R-B Tree)
    • 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组,是平衡二叉树和AVL树的折中。
  • 树 - 哈夫曼树
    • 哈夫曼又称最优二叉树, 是一种带权路径长度最短的二叉树。
  • 树 - 前缀树(Trie)
    • TODO

D. 数据结构之 逻辑结构:图:最后理解数据结构中逻辑结构之图:图基础,图的遍历,最小生成树(Prim & Kruskal),最短路径(Dijkstra & Frolyd),拓扑排序(Topological sort),AOE & 关键路径等。

  • 图 - 基础和Overview
    • 图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如: 生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体、分析计算机网络的拓扑结构确定两台计算机是否可以通信、找到两个城市之间的最短路径等等。
  • 图 - 遍历(BFS & DFS)
    • 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似; 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索"
  • 图 - 最小生成树(Prim & Kruskal)
    • Kruskal算法是从最小权重边着手,将森林里的树逐渐合并;prim算法是从顶点出发,在根结点的基础上建起一棵树
  • 图 - 最短路径(Dijkstra & Frolyd)
    • 最短路径有着广泛的应用,比如地图两点间距离计算,公交查询系统,路由选择等
  • 图 - 拓扑排序(Topological sort)
    • 拓扑排序主要用来解决有向图中的依赖解析(dependency resolution)问题
  • 图 - AOE & 关键路径
    • 关键路径在项目管理计算工期等方面有广泛等应用,提升工期就是所见缩减所有关键路径上的工期,并且在实现时需要应用到之前拓扑排序的算法(前提: 有向无环图,有依赖关系)

内部排序

知识体系系统性梳理

相关文章

A. 内部排序:重点理解几个排序之间的对比,时间和空间复杂度,以及应用。PS:越简单越要提高认知效率,做到战略上藐视战术上重视。

B. 内部排序 详解:具体分析各种排序及其复杂度,查漏补缺;在综合复杂度及稳定性情况下,通常希尔, 快排归并需要重点掌握。

  • 排序 - 冒泡排序(Bubble Sort)
    • 它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止
  • 排序 - 快速排序(Quick Sort)
    • 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
  • 排序 - 插入排序(Insertion Sort)
    • 直接插入排序(Straight Insertion Sort)的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
  • 排序 - Shell排序(Shell Sort)
    • 希尔排序实质上是一种分组插入方法。它的基本思想是: 对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。
  • 排序 - 选择排序(Selection sort)
    • 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
  • 排序 - 堆排序(Heap Sort)
    • 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
  • 排序 - 归并排序(Merge Sort)
    • 将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。
  • 排序 - 桶排序(Bucket Sort)
    • 桶排序(Bucket Sort)的原理很简单,将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)
  • 排序 - 基数排序(Radix Sort)
    • 它的基本思想是: 将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列

算法思想

相关文章

A. 算法思想 详解:紧接着我们通过理解算法背后常用的算法思想,进行归纳总结,并通过leetcode练习来辅助理解和提升。

  • 算法思想 - 分治算法
    • 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解
  • 算法思想 - 动态规划算法
    • 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解
  • 算法思想 - 贪心算法
    • 本文主要介绍算法中贪心算法的思想: 保证每次操作都是局部最优的,并且最后得到的结果是全局最优的
  • 算法思想 - 二分法
    • 本文主要介绍算法思想中分治算法重要的二分法,比如二分查找;二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
  • 算法思想 - 搜索算法
    • 本文主要介绍算法中搜索算法的思想,主要包含BFS,DFS
  • 算法思想 - 回溯算法
    • Backtracking(回溯)属于 DFS, 本文主要介绍算法中Backtracking算法的思想。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法

领域算法

知识体系系统性梳理

相关文章

A. 领域算法 梳理知识点:在了解基础算法之后,我们还要学习和了解在不同专业领域有哪些特有的算法。这里不一定要求复杂度,而是要有知识面以及解决问题的思路。

B. 领域算法之 安全算法:主要包括摘要算法和加密算法两大类。

  • 安全算法 - 摘要算法
    • 消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。
  • 安全算法 - 加密算法
    • 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程

C. 领域算法之 大数据处理:这里其实想让大家理解的是大数据处理的常用思路,而不是算法本身。

  • 大数据处理 - Overview
    • 本文主要介绍大数据处理的一些思路
  • 大数据处理 - 分治/hash/排序
    • 就是先映射,而后统计,最后排序:
    • 分而治之/hash映射: 针对数据太大,内存受限,只能是: 把大文件化成(取模映射)小文件,即16字方针: 大而化小,各个击破,缩小规模,逐个解决
    • hash_map统计: 当大文件转化了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行频率统计。
    • 堆/快速排序: 统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。
  • 大数据处理 - Bitmap & Bloom Filter
    • 布隆过滤器有着广泛的应用,对于大量数据的“存不存在”的问题在空间上有明显优势,但是在判断存不存在是有一定的错误率(false positive),也就是说,有可能把不属于这个集合的元素误认为属于这个集合(False Positive),但不会把属于这个集合的元素误认为不属于这个集合(False Negative)
  • 大数据处理 - 双层桶划分
    • 其实本质上还是分而治之的思想,重在“分”的技巧上!适用范围: 第k大,中位数,不重复或重复的数字;基本原理及要点: 因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。
  • 大数据处理 - Trie树/数据库/倒排索引
    • 适用范围: 数据量大,重复多,但是数据种类小可以放入内存;基本原理及要点: 实现方式,节点孩子的表示方式;扩展: 压缩实现
  • 大数据处理 - 外排序
    • 适用范围: 大数据的排序,去重;基本原理及要点: 外排序的归并方法,置换选择败者树原理,最优归并树
  • 大数据处理 - Map & Reduce
    • MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。但如果你要我再通俗点介绍,那么,说白了,Mapreduce的原理就是一个归并排序

D. 领域算法之 分布式算法:接着向大家介绍分布式算法,包括一致性Hash算法,经典的Paxos算法,Raft算法,ZAB算法等;顺便也介绍了经典用于全局ID生成的Snowflake算法。

  • 分布式算法 - Overview
    • 本文总结下常见的分布式算法
  • 分布式算法 - 一致性Hash算法
    • 一致性Hash算法是个经典算法,Hash环的引入是为解决单调性(Monotonicity)的问题;虚拟节点的引入是为了解决平衡性(Balance)问题
  • 分布式算法 - Paxos算法
    • Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性, 很多分布式一致性算法都由Paxos演变而来
  • 分布式算法 - Raft算法
    • Paxos是出了名的难懂,而Raft正是为了探索一种更易于理解的一致性算法而产生的。它的首要设计目的就是易于理解,所以在选主的冲突处理等方式上它都选择了非常简单明了的解决方案
  • 分布式算法 - ZAB算法
    • TODO
  • 分布式算法 - Snowflake算法
    • TODO

E. 领域算法之 其它算法汇总:最后概要性的了解常见的其它算法:负载均衡算法,推荐算法,数据挖掘或机器学习算法。因为有其专业性,一般总体上了解就够了。

  • 负载均衡算法 - 汇总
    • 本文主要介绍常用的负载均衡算法和Nginx中支持的负载均衡算法:轮询法(Round Robin),加权轮询法(Weight Round Robin),平滑加权轮询法(Smooth Weight Round Robin),随机法(Random),加权随机法(Weight Random),源地址哈希法(Hash),最小连接数法(Least Connections)
  • 推荐算法 - 汇总
    • 本文主要对推荐算法整体知识点做汇总,做到总体的理解;深入理解需要再看专业的材料
  • 数据挖掘 - 10大算法汇总
    • 国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法: C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART

数据库理论与实践

知识体系系统性梳理

数据库基础与理论

相关文章

A. 了解数据库基础和理论知识:在学习数据库之前,不要一上来就是SQL语句;这里建议从数据结构开始切入到数据库,然后再理解数据库是如何工作的,紧接着理解数据库系统的原理知识点和相关知识体系。


SQL语言基础和进阶

相关文章

B. 完全掌握SQL语言:在了解数据库基础之后,如下章节将重点阐述SQL语言相关的知识;主要顺序是:SQL语法->SQL语句练习->SQL题目进阶->SQL语句优化建议等。


SQL DB - MySQL数据库

相关文章

C. 掌握MySQL数据库:在理解了SQL语言后,开始进阶MySQL相关的知识点吧(在开始前,建议你完整看一本MySQl相关的书,作为你的知识体系基础);这里不会讲如何安装MySQL或者如何使用,因为这是容易的,而是会关注一些有助于我们构建MySQL相关知识体系的知识点等。


NOSQL DB - RedisTBD

D. 掌握Redis数据库:在理解了关系型数据库后,开始进阶最为常用的KV库Redis,一些大厂都在使用,面试也必问。

TODO


NOSQL DB - MongoDB

E. 掌握MongoDB数据库:在理解了Redis后,让我们认识NoSQL数据库中最为常用的MongoDB;它在后期版本中更换了证书,使用时需要注意下;但是不妨碍我们学习。

1. MongoDB引入和生态介绍: 首先了解NoSQL基本的概念以及MongoDB基础概念,进而引入MongoDB的生态。

  • Mongo入门 - MongoDB基础概念
    • 在学习MongoDB之前先简单了解相关概念。
  • Mongo入门 - MongoDB整体生态
    • 很多人在学习Mongo时仅仅围绕着数据库功能,围绕着CRUD和聚合操作,但是MongoDB其实已经基本形成了它自身的生态了。我们在学习一项技能时一定要跳出使用的本身,要从高一点的格局上了解整个生态,这样会对你构筑知识体系有很大的帮助。。

2. MongoDB入门 - 基本使用: 开始学习MongoDB安装,使用等。

3. MongoDB进阶 - 原理和WiredTigger存储引擎: 在学习完常用的基础之后,我们再看下MongoDB的原理和WiredTigger存储引擎。

  • Mongo进阶 - MongoDB体系结构
    • 上面章节已经对MongoDB生态中工具以及使用有了基础,后续文章我们将开始理解MongoDB是如何支撑这些功能的。我们将从最基本的MongoDB的体系结构开始介绍,主要包括MongoDB的包结构MongoDB的数据逻辑结构MongoDB的数据文件结构。其中围绕着MongoDB的数据文件结构,将为我们后续介绍MongoDB的存储引擎详解打下基础。
  • Mongo进阶 - 原理和WiredTiger引擎
    • 开始初步了解MongoDB实现原理和WiredTiger引擎。
  • Mongo进阶 - WT引擎:数据结构
    • MongoDB的WiredTiger存储引擎背后采用了什么样的数据结构呢?本文将从常见引擎数据结构典型B-Tree数据结构磁盘数据结构, 内存数据结构, Page数据结构等方面详解介绍。。
  • Mongo进阶 - WT引擎:Page生命周期
    • 通过前文我们了解到数据以page为单位加载到cache; 有必要系统的分析一页page的生命周期、状态以及相关参数的配置,这对后续MongoDB的性能调优和故障问题的定位和解决有帮助。
  • Mongo进阶 - WT引擎:checkpoint原理
    • Checkpoint主要有两个目的: 一是将内存里面发生修改的数据写到数据文件进行持久化保存,确保数据一致性;二是实现数据库在某个时刻意外发生故障,再次启动时,缩短数据库的恢复时间,WiredTiger存储引擎中的Checkpoint模块就是来实现这个功能的。

4. MongoDB进阶 - 数据库核心知识点: 再者我们还学要进一步学习MongoDB的核心知识点。

5. MongoDB进阶 - 数据模型设计: 在真正使用中,需要知道如何设计数据模型。

  • Mongo进阶 - 系统设计:数据模型
    • MongoDB使用文档数据模型。
  • Mongo进阶 - 系统设计:模式构建
    • MongoDB使用文档数据模型具有内在的灵活性,允许数据模型支持你的应用程序需求, 灵活性也可能导致模式比它们应有样子的更复杂。这涉及到如何在MongoDB中设计数据库模式(schema),有一个严峻的现实,大多数性能问题都可以追溯到糟糕的模式设计。

6. MongoDB进阶 - 性能优化: 最后基于上述知识点,我们再了解下常见的性能优化的方式。


NOSQL DB - ElasticSearch

E. 掌握ElasticSearch数据库:在理解了MongoDB后,让我们再学习下搜索的索引库;日志收集ELK栈是非常常见的,同时在一些离线大数据分析中也经常使用。


开发与常用基础

知识体系系统性梳理

开发之常用类库

A. 开发之常用类库:区别于学习,在开发应用时正确使用一些开源第三方工具包可以极大的提升开发效率,本章主要介绍运用极为广泛的工具包,比如Apache Common,Google Guava,Hutool等。

相关文章

  • 常用类库 - Apache Common包
    • 工具类第一选择1 - Apache common包不仅被成千上万开源工具使用,更是学习Java编程比较好的代码参考工具,效率工具。
  • 常用类库 - Google Guava包
    • 工具类第一选择2- Google出品,必属精品。
  • 常用类库 - Hutool包
  • 常用类库 - Spring常用工具类
    • Spring作为常用的开发框架,在Spring框架应用中,排在ApacheCommon,Guava, Huool等通用库后,第二优先级可以考虑使用Spring-core-xxx.jar中的util包。
  • 常用类库 - 日志相关类库详解
    • Java日志库是最能体现Java库在进化中的渊源关系的,在理解时重点理解日志框架本身和日志门面,以及比较好的实践等。要关注其历史渊源和设计(比如桥接),而具体在使用时查询接口即可。
  • 常用类库 - JSON类库详解
    • JSON应用非常广泛,对常用对FastJson,Jackson和Gson作了具体阐述;其中考虑到FastJson代码质量,漏洞,坑等等,应该尽量避免使用。
  • 常用类库 - Lombok工具库详解
    • Lombok是一款非常实用Java工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO)。实际上我并不推荐使用Lombok(不主动使用它), 但是因为它有着很大的使用量,我们仍然有必要掌握它,不仅知道如何使用和它解决的问题,还要知道它的坑。
  • 常用类库 - MapStruct工具库详解
    • MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题。区别于BeanUtils这种通过反射,它通过编译器编译生成常规方法,将可以很大程度上提升效率。
  • 常用类库 - 其它常用类库
    • 其它常用类库体系很庞大,但是工具类的原则是只需要查找会使用即可。

开发之单元测试

B. 开发之单元测试:单元测试是从开发侧保证软件质量的第一步,本章将具体介绍单元测试相关的内容和工具,比如Junit,Mockito等。


开发之正则表达式

C. 开发之正则表达式:正则表达式运用极为广泛,但是知识点又多;在学习时,总体上理解,对常用的知悉,开发时可以快速查询使用即可。

相关文章


开发之网络协议

D. 开发之网络协议:对Web开发而言,网络协议是必学项,本章主要对常见的网络协议进行梳理,并重点分析常用TCP/IP协议等,这篇网络基础和协议 - Overview将指导你如何学习这个系列。

相关文章

第一步:学习计算机网络基础;构筑任何基础体系之前,需要学习这个专题的整体知识点(最好是一本完整的书),这里主要基于《计算机网络(第五版)》知识点梳理,不得不说这本书作者谢希仁画的PPT还是挺棒的。网络基础分三部分内容,主要包含如下:

  • 网络基础之一 - 计算机网络基础部分梳理
    • 网络基础的第一篇,主要来源于大学的课程《计算机网络(第五版)》知识点梳理,内容整理自这里 (opens new window), 但是作了调整和优化; 不得不说这本书作者谢希仁画的PPT还是挺棒的。
  • 网络基础之二 - 网络7层协议,4层,5层
    • 网络基础的第二篇,我觉的一定要有全局框架观,构建全局观时建议分三步:第一步,理解全局的网络层次;第二步,理解每一层次中的常见的网络设备及功能;第三步,理解每一层中的常见协议。在此基础上,将其它知识点放置在相应的层次(很多网络上的零散知识点是没法帮你构筑完整的知识体系的,推荐你完整的看一本关于网络的书籍来构筑基础)
  • 网络基础之三 - IP 协议相关详解
    • 网络基础第三篇,主要阐述: IP协议(在传输层)及其配套协议(在数据链路层的ARP协议,在网络层的ICMP,IGMP协议,IPV6详解,网络地址转换 NAT等。

第二步:学习传输层协议TCP/UDP;TCP/UDP是后面应用层协议的基础。

第三步:学习应用层协议;HTTP 基于TCP协议实现,web开发必学;DNS 基于UDP协议实现。

  • 网络协议 - HTTP 协议详解
    • 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解
  • 网络协议 - DNS 相关详解
    • DNS的核心工作就是将域名翻译成计算机IP地址, 它是基于UDP协议实现的,本文将具体阐述DNS相关的概念,解析,调度原理(负载均衡和区域调度)等DNS相关的所有知识点

第四步:知识点贯穿理解

  • 输入URL 到页面加载过程详解
    • 第一,将前面涉及网络协议特别是TCP协议HTTP协议DNS解析等等知识点贯穿;
    • 第二,在此基础上介绍浏览器渲染过程,以及为Web优化提供基础。

第五步:相关工具等

  • TODO:网络分析工具详解
    • 主要是一些网络分析的工具,比如warshark等;基于上述基础,你可以使用这些工具辅助你快速分析任何协议解析和实现相关编码。

开发之安全相关

E. 开发之安全相关:保障开发出的软件安全是非常重要的,本章主要对开发知识体系,OWASP Top 10梳理,以及对常见的漏洞进行详解; 这篇开发安全 - Overview将指导你如何学习这个系列。

相关文章

第一步:业内趋势和常见漏洞;在学习安全需要总体了解安全趋势和常见的Web漏洞,首推了解OWASP,因为它代表着业内Web安全漏洞的趋势

  • 开发安全 - OWASP Top 10
    • OWASP(开放式web应用程序安全项目)关注web应用程序的安全。OWASP这个项目最有名的,也许就是它的"十大安全隐患列表"。这个列表不但总结了web应用程序最可能、最常见、最危险的十大安全隐患,还包括了如何消除这些隐患的建议。(另外,OWASP还有一些辅助项目和指南来帮助IT公司和开发团队来规范应用程序开发流程和测试流程,提高web产品的安全性。)这个"十大"差不多每隔三年更新一次。。

第二步:重点知识点详解;这里将具体对常见对几种攻击方式进行阐述,包括注入攻击,CSRF,XSS等。

  • 开发安全 - 注入攻击详解
    • 注入攻击最为常见的攻击方式,作为开发而言必须完全避免; 本文会介绍常见的几种注入方式,比如:SQL 注入, xPath 注入, 命令注入, LDAP注入, CLRF注入, Host头注入, Email头注入等等,总结来看其本质其实是一样的,且防御措施也大同小异。
  • 开发安全 - CSRF 详解
    • CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
  • 开发安全 - XSS 详解
    • XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的
  • 开发安全 - DDoS 详解
    • 分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个
  • 开发安全 - 点击劫持详解
    • 点击劫持其实是一种视觉上的欺骗手段,攻击者将一个透明的、不可见的iframe覆盖在一个网页上,通过调整iframe页面位置,诱使用户在页面上进行操作,在不知情的情况下用户的点击恰好是点击在iframe页面的一些功能按钮上

第三步:学习和实践:一个比较好对学习常见web漏洞的平台 - Web安全测试平台(DVMA)

  • 开发安全实战 - Web安全测试平台(DVMA)
    • DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

第四步:渗透测试:用渗透测试的整个流程,帮你理解项目发布时安全团队如何做渗透测试来尽量避免漏洞

  • 开发安全实战 - 渗透测试流程示例
    • 在应用程序上线之前,都会进行多次内部或者外部的渗透测试。对于开发而言,有必要了解下渗透测试的整体流程,从而知己知彼,避免一些开发中的问题

开发与中间件TBD

Spring基础


Spring Boot入门


Spring Boot进阶

  • Spring Boot - 多个数据源Service层封装
    • mysql, es, mongodb 三个数据源用配置文件方式连接,JPA只是正对dao做了封装,本文主要介绍如何对service层进行封装
  • Spring Boot - java 注解
    • 本文主要介绍一些SpringBoot中常用的注解
  • Spring Boot - 使用第三方Jar
    • 在项目中我们经常需要使用第三方的Jar,出现这种情况的原因在于,即便我们有Nexus或者其他Artifactory,这里介绍两种方案
  • Spring Boot - 自定义Starter封装
    • 在Springboot封装一个自定义的Starter的一个Demo,从创建一个模块->封装starter->使用
  • Spring Boot - JavaFX 2.0应用
    • 很多人对Java开发native程序第一反应还停留在暗灰色单一风格的Java GUI界面,开发方式还停留在AWT或者Swing。本文主要基于SpringBoot和JavaFX开发一个Demo给你展示Java Native应用可以做到什么样的程度。当然JavaFX 2.0没有流行起来也是有原因的,而且目前native的选择很多,前端是个框架都会搞个native

ORM - MyBatis

  • MyBatis详解 - 总体框架设计
    • MyBatis整体架构包含哪些层呢?这些层次是如何设计的呢?
  • MyBatis详解 - 初始化基本过程
    • 从上文我们知道MyBatis和数据库的交互有两种方式有Java API和Mapper接口两种,所以MyBatis的初始化必然也有两种;那么MyBatis是如何初始化的呢?
  • MyBatis详解 - 配置解析过程
    • 【本文为中优先级】通过上文我们知道MyBatis初始化过程中会解析配置,那具体是如何解析的呢?
  • MyBatis详解 - 官网配置清单
    • 【本文为低优先级】通过上文我们知道配置是如何加载并初始化的,那MyBatis提供了哪些配置呢?通过MyBatis官网文档我们一探究竟。PS:对于清单型的,只需要大致浏览且在使用时能快速查找即可,所以是低优先级的。
  • MyBatis详解 - Mapper映射文件配置
    • 在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有: select, insert, update, delete, cache, cache-ref, resultMap, sql; 本文将Mapper映射文件配置进行详解。
  • MyBatis详解 - sqlSession执行流程
    • 前面的章节主要讲mybatis如何解析配置文件,这些都是一次性的过程。从本章开始讲解动态的过程,它们跟应用程序对mybatis的调用密切相关。
  • MyBatis详解 - 动态SQL使用与原理
    • 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦
  • MyBatis详解 - 插件机制
    • MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢?
  • MyBatis详解 - 插件之分页机制
    • Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量和limit取结果),在大数据量的情况下这样的分页基本上是没有用的。本文基于插件,通过拦截StatementHandler重写sql语句,实现数据库的物理分页
  • MyBatis详解 - 数据源与连接池
    • 本文主要介绍MyBatis数据源和连接池相关的内容。
  • MyBatis详解 - 事务管理机制
    • 本文主要介绍MyBatis事务管理相关的使用和机制。
  • MyBatis详解 - 一级缓存实现机制
    • 减少资源的浪费,MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候,如果判断先前有个完全一样的查询,会直接从缓存中直接将结果取出,返回给用户,不需要再进行一次数据库查询了。
  • MyBatis详解 - 二级缓存实现机制
    • MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。

ORM - JPA

缓存

消息队列

流式处理

模板引擎

...


开发与项目学习 TBD

后端中小型项目

前后端分离项目

Spring Cloud项目


开发与工具New

开发百宝箱(常用资源)

开发工具清单


开发工具详解


Linux相关


Docker相关

  • Docker - Overview
  • 虚拟化技术 - Docker Vs. 虚拟机
    • 人们为了提高系统及硬件资源的利用率而引入了虚拟化技术。虚拟化是一种资源管理技术,它可以各种实体资源抽像后再分隔,从而打破实体结构的限制,最大程度的提高资源的利用率。Docker属于软件虚拟化技术中的操作系统层虚拟化技术,它是基于LXC实现的一个应用容器引擎,Docker让开发者可以打包他们的应用及依赖环境到一个可移植的容器中,然后可以将这个容器快速部署开发、测试或生产环境中。了解本文从三个问题着手,什么是虚拟化技术,docker和虚拟机区别,docker可以用来做什么?
  • Docker基础 - 入门基础和Helloworld
    • 在了解了虚拟化技术和Docker之后,让我们上手Docker,看看Docker是怎么工作的。这里会介绍CentOS环境下Docker的安装和配置,以及会给你展示两个实例,给你一个直观的理解。再啰嗦下,有条件的情况下直接看官网 (opens new window), 网上资料鱼龙混杂,版本也更新不及时。
  • Docker基础 - 仓库,镜像,容器详解
    • 本文将从仓库,镜像,容器三个方面讲解常用的docker命令和使用等,对于开发而言这块使用的
  • Docker基础 - 一个web应用运行实例
    • 通过上文我们已经基本了解了docker的结构(仓库,镜像,容器)以及跑docker应用了;本文将通过介绍一个web应用:向你展示如何进行主机与web容器之间的通信,这是web开发者常用的;第二,贯穿上文中内容, 且为我们后续讲解网络提供基础
  • Docker基础 - Docker网络使用和配置
    • 上文已经向你介绍了,web容器创建和容器互联了,但是容器之间为什么可以直接通信?主机和容器之间为何可以通信?如何进行自定义的配置呢?所以这节就是我们要讲述的Docker网络。
  • Docker基础 - Docker数据卷和数据管理
    • Docker 容器的数据放哪里呢? 本文带你理解如何在 Docker 内部以及容器之间管理数据。

开发与方法论

开发原则,流程,协议

相关文章


代码规范

相关文章


设计模式

在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将对24种设计模式和7个设计原则进行总结,和具体阐述意义。你可以通过这篇文章设计模式 - Overview 了解整体上的知识点。

相关文章

第一步:创建型设计模式

  • 创建型 - 单例模式(Singleton pattern)
    • 单例模式(Singleton pattern): 确保一个类只有一个实例,并提供该实例的全局访问点, 本文介绍6中常用的实现方式
  • 创建型 - 简单工厂(Simple Factory)
    • 简单工厂(Simple Factory),它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化,这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类
  • 创建型 - 工厂方法(Factory Method)
    • 工厂方法(Factory Method),它定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类
  • 创建型 - 抽象工厂(Abstract Factory)
    • 抽象工厂(Abstract Factory),抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同
  • 创建型 - 生成器(Builder)
    • 生成器(Builder),封装一个对象的构造过程,并允许按步骤构造
  • 创建型 - 原型模式(Prototype)
    • 原型模式(Prototype),使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象

第二步:结构型设计模式

  • 结构型 - 外观(Facade)
    • 外观模式(Facade pattern),它提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用
  • 结构型 - 适配器(Adapter)
    • 适配器模式(Adapter pattern): 将一个类的接口, 转换成客户期望的另一个接口。 适配器让原本接口不兼容的类可以合作无间。 对象适配器使用组合, 类适配器使用多重继承
  • 结构型 - 桥接(Bridge)
    • 桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变
  • 结构型 - 组合(Composite)
    • 组合模式(composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合
  • 结构型 - 装饰(Decorator)
    • 装饰者模式(decorator pattern): 动态地将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案
  • 结构型 - 享元(Flyweight)
    • 享元模式(Flyweight Pattern): 利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 它让某个类的一个实例能用来提供许多"虚拟实例"
  • 结构型 - 代理(Proxy)
    • 代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问

第三步:行为型设计模式

  • 行为型 - 责任链(Chain Of Responsibility)
    • 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象
  • 行为型 - 策略(Strategy)
    • 策略模式(strategy pattern): 定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户
  • 行为型 - 模板方法(Template Method)
    • 模板方法模式(Template pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤
  • 行为型 - 命令模式(Command)
    • 命令模式(Command pattern): 将"请求"封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作
  • 行为型 - 观察者(Observer)
    • 观察者模式(observer pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新
  • 行为型 - 访问者(Visitor)
    • 访问者模式(visitor pattern): 当你想要为一个对象的组合增加新的能力, 且封装并不重要时, 就使用访问者模式
  • 行为型 - 状态(State)
    • 状态模式(State pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好象改了它的类
  • 行为型 - 解释器(Interpreter)
    • 解释器模式(Interpreter pattern): 使用解释器模式为语言创建解释器,通常由语言的语法和语法分析来定义
  • 行为型 - 迭代器(Iterator)
    • 迭代器模式(iterator pattern): 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示
  • 行为型 - 中介者(Mediator)
    • 中介者模式(Mediator pattern) : 使用中介者模式来集中相关对象之间复杂的沟通和控制方式
  • 行为型 - 备忘录(Memento)
    • 备忘录模式(Memento pattern): 当你需要让对象返回之前的状态时(例如, 你的用户请求"撤销"), 你使用备忘录模式

架构与系统设计

学习思路

架构基础与方法论

相关文章

A. 架构基础 - 基础知识:首先带你梳理下架构中有哪些知识点,如何学习架构,并向你介绍架构相关基础知识。

B. 架构基础 - 理解架构:然后带你从构架的视角,架构的演进,架构的服务演化等角度分析架构的维度; 而架构的模式即方法论总结,架构的核心要素是我们架构实现的目标。

  • 架构 - 理解构架的视角
    • 在学习架构时,我认为首先要理清楚架构的视角,因为你所认知的架构和别人所说的架构可能是两码事。对于不同职位的视角是不一样的,比如开发而言他更多的看到的是开发架构;对售前人员,他可能更多的看到的是业务架构;对于运维人员,他看到的可能是运维架构;而对于技术支持和部署人员,他更多的看到的网络和物理架构
  • 架构 - 理解架构的演进
    • 在学习架构时,第一步不要去学习框架,而是要学习架构的演进。强烈推荐李智慧老师的《大型网站技术架构》,这本书翻起来很快,对构筑你自己的体系很有帮助,本文的内容来源于它,在此基础上拓展了下
  • 架构 - 理解架构的服务演化
    • Kubernetes、Service Mesh 和 Serverless应该是最近比较火的了,而上文主要从逻辑架构角度分析了架构演进,本文将从服务演化容器编排化的角度帮你增强对架构演进的认识
  • 架构 - 理解架构的模式
    • 架构演进中有很多知识点,总体上可以归结为以下模式,这里说的模式本质是架构中技术点的抽象。强烈推荐李智慧老师的《大型网站技术架构》,本文的内容也是来源于它,在此基础上拓展了下
  • 架构 - 理解架构的核心要素
    • 一般来说软件架构需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素

架构技术点详解

相关文章

C. 架构技术点详解:紧接着对于高并发和高可用,高性能,具体阐述其中涉及的知识点,比如:缓存,限流,降级和熔断,负载均衡,容灾备份,故障转移。

  • 架构之高并发:缓存
    • 高并发实现的三板斧:缓存,限流和降级。缓存在高并发系统中有者极其广阔的应用,需要重点掌握,本文重点介绍下缓存及其实现
  • 架构之高并发:限流
    • 每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。限流其实就是:当高并发或者瞬时高并发时,为了保证系统的稳定性、可用性,系统以牺牲部分请求为代价或者延迟处理请求为代价,保证系统整体服务可用
  • 架构之高并发:降级和熔断
    • 在高并发环境下,服务之间的依赖关系导致调用失败,解决的方式通常是: 限流->熔断->隔离->降级, 其目的是防止雪崩效应
  • 架构之高可用:负载均衡
    • 负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案
  • 架构之高可用:容灾备份,故障转移
    • TODO
  • 架构 - 保障架构安全
    • 本文对架构安全知识点梳理

互联网架构案例

相关文章

D. 架构案例:从系统设计的角度,将上述的知识点融入进来,比如:秒杀系统设计等。

E. 互联网架构案例:最后我们再看下互联网架构案例,帮助自己理解和学习架构。


架构参考资料

书籍推荐

F. 架构参考资料:此外还会总结下架构里面比较好的学习资料。

1. 《大型网站技术架构:核心原理与案例分析》

这是比较早,比较系统介绍大型网站技术架构的书,通俗易懂又充满智慧,即便你之前完全没接触过网站开发,通读前几章,也能快速获取到常见的网站技术架构及其应用场景。非常赞。

2. 《亿级流量网站架构核心技术》

相比《大型网站技术架构》的高屋建瓴,开涛的这本《亿级流量网站架构核心技术》则落实到细节,网站架构中常见的各种技术,比如缓存、队列、线程池、代理……,统统都讲到了,而且配有核心代码。甚至连 Nginx 的配置都有!

如果你想在实现大流量网站时找参考技术和代码,这本书最合适啦。

3. 《架构即未来》

这是一本“神书”啦,超越具体技术层面,着重剖析架构问题的根源,帮助我们弄清楚应该以何种方式管理、领导、组织和配置团队。

4. 《分布式服务架构:原理、设计与实战》

这本书全面介绍了分布式服务架构的原理与设计,并结合作者在实施微服务架构过程中的实践经验,总结了保障线上服务健康、可靠的最佳方案,是一本架构级、实战型的重量级著作。

5. 《聊聊架构》

这算是架构方面的一本神书了,从架构的原初谈起,从业务的拆分谈起,谈到架构的目的,架构师的角色,架构师如何将架构落地……强烈推荐。

不过,对于没有架构实践经验的小伙伴来讲,可能会觉得这本书比较虚,概念多,实战少。但如果你有过一两个项目的架构经验,就会深深认同书中追本溯源探讨的架构理念。

6. 《软件架构师的12项修炼》

大多数时候所谓的“技术之玻璃天花板”其实只是缺乏软技能而已。这些技能可以学到,缺乏的知识可以通过决定改变的努力来弥补。


微服务与服务网格TBD

微服务

Spring Cloud

Kubernetes

Service Mesh


产品与团队

作为一个技术人,你还有必要了解下产品设计,和团队组织管理等。@pdai

产品相关

团队与组织相关


关于本站点和我

感恩

感恩活着,感谢岁月静好。@pdai

关于我

A. 关于我:如果你我本人以及我是如何构建知识体系等,可以在如下章节中了解。

相关文章

  • 关于 - 我
    • 你的时间花在哪里,你的收获就在哪里。技术只是技术,生活中的一小部分,仅此而已
    • 等在合适的时机会放出我的微信,并且会建学习讨论圈,尽请期待
  • 关于 - 如何构建知识体系
    • 本文主要小结下我在构建一个知识体系时的思考
  • 关于 - 如何自我驱动
    • 本文主要介绍我总结这个知识体系所用的工具栈和自我驱动(类似于公司里敏捷开发)

关于本站点:内容,构建和部署

B. 关于本站点:如果你对这个站点感兴趣,可以在如下章节了解,包含排版,搭建,编译,部署,域名,https以及备案等。

相关文章

  • 关于文档 - 文档的内容
    • 你觉的《Java 全栈知识体系》还应该有哪些内容,或者现有的章节中你发现有好的资源也可以推荐,请在这里留言区向我推荐吧
  • 关于文档 - 文档的排版
  • 关于文档 - 文档的搭建
    • 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简书等;自己搭建比如 Hexo, Gitbook, Docisify等等。我有一颗不安分的心,每种我都用过...但是最后的最后我还是选择了将博客逐移至自己搭建的vuepress
  • 关于文档 - 文档的自动编译
    • 文档托管在Github,有几种选择: Github自带的Github Actions,或者插件Travis CI, 或者插件Circle CI;本文简述本站是如何实现自动化编译的
  • 关于文档 - 文档的自动部署
    • 本文主要介绍 当前文档是如何在我自己的服务器自动编译部署的
  • 关于文档 - 文档的域名,HTTPS,备案
    • 本文主要记录 本文档的域名,HTTPS,备案。 文档的域名,HTTPS,备案 这三个步骤不能反,因为存在依赖关系。

关于内容版权

本站点申明如下:

  • 我的初衷?:希望我的总结可以帮助到在后端开发迷茫的IT从业者, 永远相信助人者自助
  • 非商业用途?:纯个人学习站点,不会用于商业用途;
  • 内容来源?:目前站点内容大约50%内容为原创,50%内容系整合或者转载,我在每篇文章中尽量注明了出处;针对转载或引用的内容,侵删;
  • 可以转载?:遵循行业内知识共享协议CC 4.0下可以注明出处转载;

关于我的读书

TODO,这里会总结以下我读过的觉得有意义的书

关于我的技术观

TODO,这里会写一些我的技术观

关于我的小结

TODO, 这里会写一些我的阶段性总结


后面还有哪些内容

WARNING

本知识体系导读的后续的章节还在紧锣密鼓的添加中, 还有大量的内容即将添加进来,尽请期待...@pdai

感谢您的关注!

有些章节其实我已经梳理或者写过了(可以看其它章节部分,这里我暂时没给链接;还有一部分我隐藏掉了),暂时还没放到这里是因为我觉的还不成体系,我会再次梳理和丰富下并且将BAT大厂的题目融合进来。请多给我一些时间,尽请期待!@pdai


给我留言

联系我

添加@pdai微信

PS:添加时请备注Java全栈,谢谢!