学习记录
- 《深入理解计算机系统》,《Computer System A programmer`s prespective - 程序员需要了解的计算机知识. 描述了计算机系统的实现细节, 帮助在大脑中构建一个层次型的计算机. 这是程序员必读的一本书.
- TCP 的那些事儿(上)
- TCP 的那些事儿(下) 状态机, 拥塞控制中心, windows 滑动窗口
- 图解TCP/IP - 快速入门书籍
- C10K 问题
学习 Java 语言有以下入门级的书(注意:下面一些书在入门篇中有所提及,但为了完整性,还是要在这里提一下,因为可能有朋友是跳着看的)。
- 基础
- 标准
- Java Community Process Java 标准(jsr)网站
- 底层知识
- Java Memory Model(JMM)
- Understanding Java JIT Compilation with JITWatch, Part 1
- 字节码技术
JDepend traverses Java class and source file directories and generates design quality metrics for each Java package. JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to effectively manage and control package dependencies.
功能 | # | # | # | # | # | # | # |
---|---|---|---|---|---|---|---|
API 网关 | Soul | Spring Cloud Gateway | Zuul | ||||
服务调用 | Dubbo | SOFA RPC | Motan | Ribbon | |||
服务编排 | camel.apache.org | airflow.apache.org | |||||
服务网格service mesh | istio.io | 蚂蚁金服 | weibo mesh | ||||
消息队列 | RocketMQ | Kafka | RabbitMQ | Pulsar | ActiveMQ | ||
作业调度 | Elastic Job Lite | Elastic Job Cloud | Quartz | XXL-Job | |||
注册中心 | Eureka | Zookeeper | Nacos | Consul Etcd | |||
配置中心 | Apollo | Nacos | Spring Cloud Config | Disconf | |||
链路追踪 | SkyWalking | Zipkin | Pinpoint | CAT | |||
服务保障 | Hystrix | Sentinel | Resilience4j | ||||
服务器 | Netty | Tomcat | Jetty | Nginx | |||
Java | JDK 源码 | Java 并发 | JVM 虚拟机 | Java 面试题 | |||
Cache | Caffeine | guava | |||||
J2EE | Spring | Spring Boot | Spring Cloud | ||||
Web 框架 | Spring MVC | Spring Security | Spring Webflux | Shiro | |||
ORM 框架 | MyBatis | Hibernate | Spring Data JPA | ||||
数据库连接池 | HikariCP | Druid | |||||
数据库中间件 | Sharding JDBC | Sharding Sphere | MyCAT | Canal | |||
分布式事务 | TCC Transaction | Seata | Fescar | Happylifeplat TCC | |||
数据库 | MySQL | Redis | MongoDB | TiDB | |||
搜索引擎 | Lucene | Elasticsearch | Solr | ||||
工具类 | RxJava | Guava | beanshell | ||||
容器服务 | Linux | Docker | Kubernetes | Swarm | |||
开发工具 | Git | Maven | Jenkins | IntelliJ IDEA | |||
测试工具 | moco | ArchUnit | |||||
前端框架 | React | Vue | Angular | ||||
大数据 | HBase | Hive | Spark | Flink | |||
其它语言 | Go | Python | |||||
自我修养 | 设计模式 | 数据结构与算法 | 性能测试 |
- [CAS] 是java无锁编程的核心机制,底层依赖cpu指令实现比较和替换。 不可不说的Java“锁”事
- Inside the Java Virtual Machine 讲解JVM内部机制的系列文章。I'll be posting chapters of Inside the Java 2 Virtual Machine in the coming weeks and months.
-
btraceio/btrace BTrace - a safe, dynamic tracing tool for the Java platform.Java动态追踪技术探究
-
arthas Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
- 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理 https://cloud.tencent.com/developer/article/1540142
-
alibaba/asyncload 阿里异步框架
- awesome-java - A curated list of awesome Java frameworks, libraries and software.
- Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...) - This is a tale of two approaches to regular expression matching. One of them is in widespread use in the standard interpreters for many languages, including Perl. The other is used only in a few places, notably most implementations of awk and grep. The two approaches have wildly different performance characteristics:
- 在线分析GC gceasy
一种函数式编程语言, 如果对学习新的语言或者函数式编程, 递归编程感兴趣, 可以研究一下.
I/O模型可以分为以下几类:
-
阻塞I/O
-
非阻塞I/O
-
I/O 的多路复用( select 和 poll )
-
信号驱动的 I/O (SIGIO)
-
异步 I/O ( POSIX 的 aio_functions)
-
Boost application performance using asynchronous I/O ibm Boost application performance using asynchronous I/O
- Programming paradigm wiki
- Programming paradigm A programming paradigm is a style, or “way,” of programming.
- Six programming paradigms that will change how you think about coding 中文翻译
- Programming Paradigms for Dummies: What Every Programmer Should Know
- Why Functional Programming Matters
- ring buffer A ring showing, conceptually, a circular buffer. This visually shows that the buffer has no real end and it can loop around the buffer. However, since memory is never physically created as a ring, a linear representation is generally used as is done below. A circular buffer, circular queue, cyclic buffer or ring buffer is a data structure that uses a single, fixed-size buffer as if it were connected end-to-end. This structure lends itself easily to buffering data streams.
- 6.851: Advanced Data Structures (Fall'17) - MIT 高级数据结构课程.youtube 地址
- 数据结构动画网站 - 以动画的方式展示数据结构, 非常直观.
- 图解算法 - 比较生动的一本算法书
- 练习题
- 6.3 拓扑排序 Topological Sorting, 请问下面的三个列表哪些可行、哪些不可行?
- 练习题
- 算法(第四版) - 算法领域的经典参考书 , 给出了50个程序员应该知道的算法. 深入浅出的算法介绍, 让一些比较难的算法也比较容易理解, 尤其是书中对红黑树的讲解非常精彩. 缺点是不深入, 缺少算法设计内容. 甚至动态规划都未提及. 官网
- 编程珠玑 -
- 算法导论 - 不太好肯的一本书, 详细介绍了算法的推导过程, 需要些数学功底.
-
divide and conquer,D&C 分而治之
-
动态规划 Dynamic programming(hard to learn)
-
回溯 back tracing
-
分治 Divide and Conquer
-
算法实例
-
List_of_algorithms - 罗列了很多算法, 完全可以当做算法字典, 或用来开阔眼界.
-
快速排序(D&C)
-
广度优先搜索(breadth-first search,BFS).
- Topological Sorting | 拓扑排序 In the field of computer science, a topological sort or topological ordering of a directed graph is a linear ordering of its vertices such that for every directed edge uv from vertex u to vertex v, u comes before v in the ordering.
使用广度优先搜索可以:
- 编写国际跳棋AI,计算最少走多少步就可获胜;
- 编写拼写检查器,计算最少编辑多少个地方就可将错拼的单词改成正确的单词,如将READED改为READER需要编辑一个地方;
- 根据你的人际关系网络找到关系最近的医生。
- 第一类问题:从节点A出发,有前往节点B的路径吗?(在你的人际关系网中,有芒果销售商吗?)
- 第二类问题:从节点A出发,前往节点B的哪条路径最短?(哪个芒果销售商与你的关系最近?)
-
-
基础算法题, 其中有大量的算法题,解这些题都是有套路的
- 耗子的"理论学科"中的介绍
- 递归, 深度优先DFS, 广度优先BFS
- 折半查找 Binary search
- 大量的对树, 数组, 链表, 字符串, hash表的操作.
- 蓄水池算法, 统计过去1分钟P99
- 服务调度的背包问题
- 红黑树
- leetcode - 一个算法在线练习网站
- Algorithm = Logic + Control - 算法是逻辑+控制
- Algorithms and Data Structures - 算法和数据结构. 综合这两篇论文, 可以得到公式: 程序=数据结构+逻辑+控制
- CAP定理 掘金上的分布式理论(一) - CAP定理
- An introduction to distributed systems 一个人总结的分布式系统涉及到的内容。
- opentracing 分布式追踪语义规范,介绍了非语言相关的最终定义数据模型和机制。蚂蚁金服基于此标准实现了分布式链路追踪中间件 SOFATracer SOFATracer
- zipkin Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in microservice architectures. It manages both the collection and lookup of this data. Zipkin’s design is based on the Google Dapper paper.
-
原则
- Don't repeat yourself
- KISS principle
- program to interface, not an implimentation
- You aren't gonna need it
- Law of Demeter | 迪米特法则,最少知识原则
- Solid
- Liskov substitution principle 里氏替换原则
- Internet service provider 接口隔离原则
- Dependency inversion principle 依赖倒置原则
- Common Closure Principle 共同封闭原则
- Common Reuse Principle | 共同重用原则 共同重用原则
- Principle of least astonishment | 最少惊诧原则
- Hollywood Principle 好莱坞原则, "don
t call us, we
ll call you.". 是IOC, DI 的基础.Inversion of Control Containers and the Dependency Injection pattern - High Cohesion & Low/Loose coupling 高内聚, 低耦合. 对于面向对象来说, 可以看看马塞诸塞州戈登学院的面向对象的一节讲义
- Convention over configuration 惯例优于配置原则. 简单说, 就是将一些公认的配置方式和信息作为内部缺省规则来使用. 例如 Maven 的项目结构, Hibernate 的映射文件.
- Separation of concerns 关注点分离. SoC 是计算机科学中最重要的努力目标之一. 这个原则是软件开发中, 通过各种手段, 将问题的各个关注点分开. 如果一个问题能分解为独立且较小的问题, 就是相对较容易解决的.
- Design by contract 契约式设计. DbC 的核心思想是对软件系统中的元素之间相互合作以及责任和义务的比喻. 这种比喻从商业活动中客户与 供应商达成契约而来.如果在程序设计中一个模块提供了某种功能, 那么它要:
- 期望所有调用他的客户模块都保证一定的进入条件: 这就是模块的先验条件,
- 保证退出时给出特定的属性: 这就是模块的后验条件( 供应商的义务, 显然也是客户的权利)
- 在进入时假定, 并在退出时保证一些特定的属性: 不变式.
- Acyclic Dependencies Principle 无环依赖原则
-
书籍
- 领域驱动设计
- Clean Architecture 如果你读过 Clean coode | 代码整洁之道, The Clean coder | 程序员的职业素养 都是出自 Bob 大叔 之手. Clean architecture 也是一本书, 这是一本很不错的架构类图书. 对软件架构的元素, 方法等讲的很清楚. 实例都比较简单, 并带一些软件变化历史的讲述, 可开阔视野.
- The Twelve-Factor App如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建SaaS 应用提供了方法论,这也是架构师必读的文章。(中译版) 这篇文章在业内的影响力很大,必读!
- How to Design a Good API & Why it Matters
- 基本算法
- Doug Lea's Home Page Java 并发包的作者.
- medium 文章的集散地
- cool shell
- 杰夫·阿特伍德(Jeff Atwood) Stack Overflow 网站创始人.
- https://www.joelonsoftware.com/
- http://blog.cleancoder.com/ 是編程大师 Bob大叔的博客, 其真名叫 Robert C. Martin, 世界级软件开发大师, 设计模式和敏捷开发先驱.
- https://martinfowler.com/ Marting 主要专注面向对象分析和设计, 统一建模语言, 领域建模, 以及敏捷软件开发方法.
- http://www.paulgraham.com/articles.html
- think in java 作者的博客
- dzone
- 软件随想录
- Patterns of Enterprise Application Architecture | 企业应用架构模式 作者 [美] Martin Fowler ,
- 编程语言排行
- The Key To Accelerating Your Coding Skills - When you learn to code, there is a moment when everything begins to change. At Firehose, we like to call this the inflection point of coding. After this phase, the way you operate as a developer will be dramatically different. Building up to the inflection point is the process of becoming self-sufficient in programming, to the point where you no longer need any hand-holding. It can be a frustrating experience, but once it’s behind you, it is incredibly empowering.
- Teach Yourself Programming in Ten Years
- awesome-java - A curated list of awesome Java frameworks, libraries and software.
- How To Ask Questions The Smart Way
- What-are-some-of-the-most-basic-things-every-programmer-should-know
- Pro Git 如果要了解一个版本管理工具的话, git是首选.
- Git代码行统计命令集