Skip to content

webVueBlog/awesome-stars-webVueBlog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

awesome-stars-webVueBlog

Auth GitHub Pull Requests HitCount

🤩 我的star列表,每天凌晨自动更新 🤩


数据结构

队列

集合

链表、数组

字典、关联数组

二叉树

每个节点最多有两个叶子节点。

完全二叉树

  • 《完全二叉树》
    • 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。

平衡二叉树

左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉查找树(BST)

二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。

红黑树

B,B+,B*树

MySQL是基于B+树聚集索引组织表

LSM 树

LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。

  • 《LSM树 VS B+树》
    • B+ 树读性能好,但由于需要有序结构,当key比较分散时,磁盘寻道频繁,造成写性能较差。
    • LSM 是将一个大树拆分成N棵小树,先写到内存(无寻道问题,性能高),在内存中构建一颗有序小树(有序树),随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历(二分查找)所有的小树,但在每颗小树内部数据是有序的。
  • 《LSM树(Log-Structured Merge Tree)存储引擎》
    • 极端的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。
    • 优化方式:Bloom filter 替代二分查找;compact 小数位大树,提高查询性能。
    • Hbase 中,内存中达到一定阈值后,整体flush到磁盘上、形成一个文件(B+数),HDFS不支持update操作,所以Hbase做整体flush而不是merge update。flush到磁盘上的小树,定期会合并成一个大树。

BitSet

经常用于大规模数据的排重检查。

常用算法

排序、查找算法

选择排序

冒泡排序

插入排序

快速排序

归并排序

希尔排序

TODO

堆排序

计数排序

桶排序

基数排序

按照个位、十位、百位、...依次来排。

二分查找

Java 中的排序工具

布隆过滤器

常用于大数据的排重,比如email,url 等。 核心原理:将每条数据通过计算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),其中每一位都是通过随机计算获得,在将指纹映射到一个大的按位存储的空间中。注意:会有一定的错误率。 优点:空间和时间效率都很高。 缺点:随着存入的元素数量增加,误算率随之增加。

字符串比较

KMP 算法

KMP:Knuth-Morris-Pratt算法(简称KMP) 核心原理是利用一个“部分匹配表”,跳过已经匹配过的元素。

深度优先、广度优先

贪心算法

回溯算法

剪枝算法

动态规划

朴素贝叶斯

推荐算法

最小生成树算法

最短路径算法

并发

Java 并发

多线程

线程安全

一致性、事务

事务 ACID 特性

事务的隔离级别

  • 未提交读:一个事务可以读取另一个未提交的数据,容易出现脏读的情况。

  • 读提交:一个事务等另外一个事务提交之后才可以读取数据,但会出现不可重复读的情况(多次读取的数据不一致),读取过程中出现UPDATE操作,会多。(大多数数据库默认级别是RC,比如SQL Server,Oracle),读取的时候不可以修改。

  • 可重复读: 同一个事务里确保每次读取的时候,获得的是同样的数据,但不保障原始数据被其他事务更新(幻读),Mysql InnoDB 就是这个级别。

  • 序列化:所有事物串行处理(牺牲了效率)

  • 《理解事务的4种隔离级别》

  • 数据库事务的四大特性及事务隔离级别

  • 《MySQL的InnoDB的幻读问题 》

    • 幻读的例子非常清楚。
    • 通过 SELECT ... FOR UPDATE 解决。
  • 《一篇文章带你读懂MySQL和InnoDB》

    • 图解脏读、不可重复读、幻读问题。

MVCC

Java中的锁和同步类

公平锁 & 非公平锁

公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。

悲观锁

悲观锁如果使用不当(锁的条数过多),会引起服务大面积等待。推荐优先使用乐观锁+重试。

乐观锁 & CAS

ABA 问题

由于高并发,在CAS下,更新后可能此A非彼A。通过版本号可以解决,类似于上文Mysql 中提到的的乐观锁。

CopyOnWrite容器

可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。

RingBuffer

可重入锁 & 不可重入锁

  • 《可重入锁和不可重入锁》

    • 通过简单代码举例说明可重入锁和不可重入锁。
    • 可重入锁指同一个线程可以再次获得之前已经获得的锁。
    • 可重入锁可以用户避免死锁。
    • Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock
  • 《ReenTrantLock可重入锁(和synchronized的区别)总结》

    • synchronized 使用方便,编译器来加锁,是非公平锁。
    • ReenTrantLock 使用灵活,锁的公平性可以定制。
    • 相同加锁场景下,推荐使用 synchronized。

互斥锁 & 共享锁

互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。

死锁

操作系统

计算机原理

CPU

多级缓存

典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32k,L2 一般 256k,L3 一般12M。内存速度需要200个 CPU 周期,CPU 缓存需要1个CPU周期。

进程

TODO

线程

协程

  • 《终结python协程----从yield到actor模型的实现》
    • 线程的调度是由操作系统负责,协程调度是程序自行负责
    • 与线程相比,协程减少了无谓的操作系统切换.
    • 实际上当遇到IO操作时做切换才更有意义,(因为IO操作不用占用CPU),如果没遇到IO操作,按照时间片切换.

Linux

设计模式

设计模式的六大原则

  • 《设计模式的六大原则》
    • 开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。
    • 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。
    • 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。
    • 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。
    • 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用,通过中间类建立联系。
    • 合成复用原则:尽量使用合成/聚合,而不是使用继承。

23种常见设计模式

应用场景

  • 《细数JDK里的设计模式》

    • 结构型模式:
      • 适配器:用来把一个接口转化成另一个接口,如 java.util.Arrays#asList()。
      • 桥接模式:这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变化,如JDBC;
      • 组合模式:使得客户端看来单个对象和对象的组合是同等的。换句话说,某个类型的方法同时也接受自身类型作为参数,如 Map.putAll,List.addAll、Set.addAll。
      • 装饰者模式:动态的给一个对象附加额外的功能,这也是子类的一种替代方式,如 java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap。
      • 享元模式:使用缓存来加速大量小对象的访问时间,如 valueOf(int)。
      • 代理模式:代理模式是用一个简单的对象来代替一个复杂的或者创建耗时的对象,如 java.lang.reflect.Proxy
    • 创建模式:
      • 抽象工厂模式:抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型,如 java.util.Calendar#getInstance()。
      • 建造模式(Builder):定义了一个新的类来构建另一个类的实例,以简化复杂对象的创建,如:java.lang.StringBuilder#append()。
      • 工厂方法:就是 一个返回具体对象的方法,而不是多个,如 java.lang.Object#toString()、java.lang.Class#newInstance()。
      • 原型模式:使得类的实例能够生成自身的拷贝、如:java.lang.Object#clone()。
      • 单例模式:全局只有一个实例,如 java.lang.Runtime#getRuntime()。
    • 行为模式:
      • 责任链模式:通过把请求从一个对象传递到链条中下一个对象的方式,直到请求被处理完毕,以实现对象间的解耦。如 javax.servlet.Filter#doFilter()。
      • 命令模式:将操作封装到对象内,以便存储,传递和返回,如:java.lang.Runnable。
      • 解释器模式:定义了一个语言的语法,然后解析相应语法的语句,如,java.text.Format,java.text.Normalizer。
      • 迭代器模式:提供一个一致的方法来顺序访问集合中的对象,如 java.util.Iterator。
      • 中介者模式:通过使用一个中间对象来进行消息分发以及减少类之间的直接依赖,java.lang.reflect.Method#invoke()。
      • 空对象模式:如 java.util.Collections#emptyList()。
      • 观察者模式:它使得一个对象可以灵活的将消息发送给感兴趣的对象,如 java.util.EventListener。
      • 模板方法模式:让子类可以重写方法的一部分,而不是整个重写,如 java.util.Collections#sort()。
  • 《Spring-涉及到的设计模式汇总》

  • 《Mybatis使用的设计模式》

单例模式

责任链模式

TODO

MVC

IOC

  • 《理解 IOC》
  • 《IOC 的理解与解释》
    • 正向控制:传统通过new的方式。反向控制,通过容器注入对象。
    • 作用:用于模块解耦。
    • DI:Dependency Injection,即依赖注入,只关心资源使用,不关心资源来源。

AOP

UML

微服务思想

康威定律

  • 《微服务架构的理论基础 - 康威定律》

    • 定律一:组织沟通方式会通过系统设计表达出来,就是说架构的布局和组织结构会有相似。
    • 定律二:时间再多一件事情也不可能做的完美,但总有时间做完一件事情。一口气吃不成胖子,先搞定能搞定的。
    • 定律三:线型系统和线型组织架构间有潜在的异质同态特性。种瓜得瓜,做独立自治的子系统减少沟通成本。
    • 定律四:大的系统组织总是比小系统更倾向于分解。合久必分,分而治之。
  • 《微服务架构核⼼20讲》

运维 & 统计 & 技术支持

常规监控

命令行监控工具

APM

APM — Application Performance Management

统计分析

持续集成(CI/CD)

Jenkins

环境分离

开发、测试、生成环境分离。

自动化运维

Ansible

puppet

chef

测试

TDD 理论

  • 《深度解读 - TDD(测试驱动开发)》
    • 基于测试用例编码功能代码,XP(Extreme Programming)的核心实践.
    • 好处:一次关注一个点,降低思维负担;迎接需求变化或改善代码的设计;提前澄清需求;快速反馈;

单元测试

压力测试

全链路压测

A/B 、灰度、蓝绿测试

虚拟化

KVM

Xen

OpenVZ

容器技术

Docker

云技术

OpenStack

DevOps

文档管理

中间件

Web Server

Nginx

OpenResty

Tengine

Apache Httpd

Tomcat

架构原理

调优方案

Jetty

  • 《Jetty 的工作原理以及与 Tomcat 的比较》
  • 《jetty和tomcat优势比较》
    • 架构比较:Jetty的架构比Tomcat的更为简单。
    • 性能比较:Jetty和Tomcat性能方面差异不大,Jetty默认采用NIO结束在处理I/O请求上更占优势,Tomcat默认采用BIO处理I/O请求,Tomcat适合处理少数非常繁忙的链接,处理静态资源时性能较差。
    • 其他方面:Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好;Tomcat 对JEE和Servlet 支持更加全面。

缓存

本地缓存

客户端缓存

服务端缓存

Web缓存

Memcached

Redis

  • 《Redis 教程》

  • 《redis底层原理》

    • 使用 ziplist 存储链表,ziplist是一种压缩链表,它的好处是更能节省内存空间,因为它所存储的内容都是在连续的内存区域当中的。
    • 使用 skiplist(跳跃表)来存储有序集合对象、查找上先从高Level查起、时间复杂度和红黑树相当,实现容易,无锁、并发性好。
  • 《Redis持久化方式》

    • RDB方式:定期备份快照,常用于灾难恢复。优点:通过fork出的进程进行备份,不影响主进程、RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。缺点:会丢数据。
    • AOF方式:保存操作日志方式。优点:恢复时数据丢失少,缺点:文件大,回复慢。
    • 也可以两者结合使用。
  • 《分布式缓存--序列3--原子操作与CAS乐观锁》

架构

回收策略

Tair

  • 官方网站
  • 《Tair和Redis的对比》
  • 特点:可以配置备份节点数目,通过异步同步到备份节点
  • 一致性Hash算法。
  • 架构:和Hadoop 的设计思想类似,有Configserver,DataServer,Configserver 通过心跳来检测,Configserver也有主备关系。

几种存储引擎:

  • MDB,完全内存性,可以用来存储Session等数据。
  • Rdb(类似于Redis),轻量化,去除了aof之类的操作,支持Restfull操作
  • LDB(LevelDB存储引擎),持久化存储,LDB 作为rdb的持久化,google实现,比较高效,理论基础是LSM(Log-Structured-Merge Tree)算法,现在内存中修改数据,达到一定量时(和内存汇总的旧数据一同写入磁盘)再写入磁盘,存储更加高效,县比喻Hash算法。
  • Tair采用共享内存来存储数据,如果服务挂掉(非服务器),重启服务之后,数据亦然还在。

消息队列

消息总线

消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。

消息的顺序

RabbitMQ

支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。

RocketMQ

Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。

ActiveMQ

纯Java实现,兼容JMS,可以内嵌于Java应用中。

Kafka

高吞吐量、采用拉模式。适合高IO场景,比如日志同步。

Redis 消息推送

生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。

ZeroMQ

TODO

定时调度

单机定时调度

分布式定时调度

RPC

Dubbo

** SPI ** TODO

Thrift

gRPC

服务端可以认证加密,在外网环境下,可以保证数据安全。

数据库中间件

Sharding Jdbc

日志系统

日志搜集

配置中心

servlet 3.0 异步特性可用于配置中心的客户端

API 网关

主要职责:请求转发、安全认证、协议转换、容灾。

网络

协议

OSI 七层协议

TCP/IP

HTTP

HTTP2.0

HTTPS

网络模型

  • 《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》

    • 五种I/O模型:阻塞I/O,非阻塞I/O,I/O复用、事件(信号)驱动I/O、异步I/O,前四种I/O属于同步操作,I/O的第一阶段不同、第二阶段相同,最后的一种则属于异步操作。
    • 三种 Web Server 工作方式:Prefork(多进程)、Worker方式(线程方式)、Event方式。
  • 《select、poll、epoll之间的区别总结》

    • select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。
    • select 有打开文件描述符数量限制,默认1024(2048 for x64),100万并发,就要用1000个进程、切换开销大;poll采用链表结构,没有数量限制。
    • select,poll “醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,通过回调机制节省大量CPU时间;select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll只要一次拷贝。
    • poll会随着并发增加,性能逐渐下降,epoll采用红黑树结构,性能稳定,不会随着连接数增加而降低。
  • 《select,poll,epoll比较 》

    • 在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
  • 《深入理解Java NIO》

    • NIO 是一种同步非阻塞的 IO 模型。同步是指线程不断轮询 IO 事件是否就绪,非阻塞是指线程在等待 IO 的时候,可以同时做其他任务
  • 《BIO与NIO、AIO的区别》

  • 《两种高效的服务器设计模型:Reactor和Proactor模型》

Epoll

Java NIO

kqueue

连接和短连接

框架

零拷贝(Zero-copy)

序列化(二进制协议)

Hessian

Protobuf

数据库

基础理论

关系数据库设计的三大范式

  • 《数据库的三大范式以及五大约束》
    • 第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
    • 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
    • 第三范式:必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);

MySQL

原理

InnoDB

优化

索引

聚集索引, 非聚集索引

MyISAM 是非聚集,InnoDB 是聚集

复合索引

  • 《复合索引的优点和注意事项》
    • 文中有一处错误:

    对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高; select * from table1 where col1=A AND col2=B AND col3=D 如果使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引

    • 原文中提到索引是按照“col1,col2,col3”的顺序创建的,而mysql在按照最左前缀的索引匹配原则,且会自动优化 where 条件的顺序,当条件中只有 col2=B AND col1=A 时,会自动转化为 col1=A AND col2=B,所以依然会使用索引。
  • 《MySQL查询where条件的顺序对查询效率的影响》

自适应哈希索引(AHI)

explain

NoSQL

MongoDB

  • MongoDB 教程
  • 《Mongodb相对于关系型数据库的优缺点》
    • 优点:弱一致性(最终一致),更能保证用户的访问速度;内置GridFS,支持大容量的存储;Schema-less 数据库,不用预先定义结构;内置Sharding;相比于其他NoSQL,第三方支持丰富;性能优越;
    • 缺点:mongodb不支持事务操作;mongodb占用空间过大;MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方;

Hbase

搜索引擎

搜索引擎原理

Lucene

Elasticsearch

Solr

sphinx

性能

性能优化方法论

容量评估

CDN 网络

连接池

性能调优

大数据

流式计算

Storm

Flink

Kafka Stream

应用场景

例如:

  • 广告相关实时统计;
  • 推荐系统用户画像标签实时更新;
  • 线上服务健康状况实时监测;
  • 实时榜单;
  • 实时数据统计。

Hadoop

HDFS

MapReduce

Yarn

Spark

安全

web 安全

XSS

CSRF

SQL 注入

Hash Dos

脚本注入

漏洞扫描工具

验证码

DDoS 防范

用户隐私信息保护

  1. 用户密码非明文保存,加动态salt。
  2. 身份证号,手机号如果要显示,用 “*” 替代部分字符。
  3. 联系方式在的显示与否由用户自己控制。
  4. TODO

序列化漏洞

加密解密

对称加密

  • 《常见对称加密算法》
    • DES、3DES、Blowfish、AES
    • DES 采用 56位秘钥,Blowfish 采用1到448位变长秘钥,AES 128,192和256位长度的秘钥。
    • DES 秘钥太短(只有56位)算法目前已经被 AES 取代,并且 AES 有硬件加速,性能很好。

哈希算法

非对称加密

服务器安全

数据安全

数据备份

TODO

网络隔离

内外网分离

TODO

登录跳板机

在内外环境中通过跳板机登录到线上主机。

授权、认证

RBAC

OAuth2.0

OIDC

SAML

双因素认证(2FA)

2FA - Two-factor authentication,用于加强登录验证

常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key)

单点登录(SSO)

常用开源框架

开源协议

日志框架

Log4j、Log4j2

Logback

ORM

MyBatis:

网络框架

TODO

Web 框架

Spring 家族

Spring

Spring Boot

Spring Cloud

工具框架

分布式设计

扩展性设计

稳定性 & 高可用

  • 《系统设计:关于高可用系统的一些技术方案》

    • 可扩展:水平扩展、垂直扩展。 通过冗余部署,避免单点故障。
    • 隔离:避免单一业务占用全部资源。避免业务之间的相互影响 2. 机房隔离避免单点故障。
    • 解耦:降低维护成本,降低耦合风险。减少依赖,减少相互间的影响。
    • 限流:滑动窗口计数法、漏桶算法、令牌桶算法等算法。遇到突发流量时,保证系统稳定。
    • 降级:紧急情况下释放非核心功能的资源。牺牲非核心业务,保证核心业务的高可用。
    • 熔断:异常情况超出阈值进入熔断状态,快速失败。减少不稳定的外部依赖对核心服务的影响。
    • 自动化测试:通过完善的测试,减少发布引起的故障。
    • 灰度发布:灰度发布是速度与安全性作为妥协,能够有效减少发布故障。
  • 《关于高可用的系统》

    • 设计原则:数据不丢(持久化);服务高可用(服务副本);绝对的100%高可用很难,目标是做到尽可能多的9,如99.999%(全年累计只有5分钟)。

硬件负载均衡

软件负载均衡

限流

  • 《谈谈高并发系统的限流》
    • 计数器:通过滑动窗口计数器,控制单位时间内的请求次数,简单粗暴。
    • 漏桶算法:固定容量的漏桶,漏桶满了就丢弃请求,比较常用。
    • 令牌桶算法:固定容量的令牌桶,按照一定速率添加令牌,处理请求前需要拿到令牌,拿不到令牌则丢弃请求,或进入丢队列,可以通过控制添加令牌的速率,来控制整体速度。Guava 中的 RateLimiter 是令牌桶的实现。
    • Nginx 限流:通过 limit_req 等模块限制并发连接数。

应用层容灾

  • 《防雪崩利器:熔断器 Hystrix 的原理与使用》

    • 雪崩效应原因:硬件故障、硬件故障、程序Bug、重试加大流量、用户大量请求。
    • 雪崩的对策:限流、改进缓存模式(缓存预加载、同步调用改异步)、自动扩容、降级。
    • Hystrix设计原则:
      • 资源隔离:Hystrix通过将每个依赖服务分配独立的线程池进行资源隔离, 从而避免服务雪崩。
      • 熔断开关:服务的健康状况 = 请求失败数 / 请求总数,通过阈值设定和滑动窗口控制开关。
      • 命令模式:通过继承 HystrixCommand 来包装服务调用逻辑。
  • 《缓存穿透,缓存击穿,缓存雪崩解决方案分析》

  • 《缓存击穿、失效以及热点key问题》

    • 主要策略:失效瞬间:单机使用锁;使用分布式锁;不过期;
    • 热点数据:热点数据单独存储;使用本地缓存;分成多个子key;

跨机房容灾

  • 《“异地多活”多机房部署经验谈》

    • 通过自研中间件进行数据同步。
  • 《异地多活(异地双活)实践经验》

    • 注意延迟问题,多次跨机房调用会将延时放大数倍。
    • 建房间专线很大概率会出现问题,做好运维和程序层面的容错。
    • 不能依赖于程序端数据双写,要有自动同步方案。
    • 数据永不在高延迟和较差网络质量下,考虑同步质量问题。
    • 核心业务和次要业务分而治之,甚至只考虑核心业务。
    • 异地多活监控部署、测试也要跟上。
    • 业务允许的情况下考虑用户分区,尤其是游戏、邮箱业务。
    • 控制跨机房消息体大小,越小越好。
    • 考虑使用docker容器虚拟化技术,提高动态调度能力。
  • 容灾技术及建设经验介绍

容灾演练流程

平滑启动

数据库扩展

读写分离模式

分片模式

  • 《分库分表需要考虑的问题及方案》

    • 中间件: 轻量级:sharding-jdbc、TSharding;重量级:Atlas、MyCAT、Vitess等。
    • 问题:事务、Join、迁移、扩容、ID、分页等。
    • 事务补偿:对数据进行对帐检查;基于日志进行比对;定期同标准数据来源进行同步等。
    • 分库策略:数值范围;取模;日期等。
    • 分库数量:通常 MySQL 单库 5千万条、Oracle 单库一亿条需要分库。
  • 《MySql分表和表分区详解》

    • 分区:是MySQL内部机制,对客户端透明,数据存储在不同文件中,表面上看是同一个表。
    • 分表:物理上创建不同的表、客户端需要管理分表路由。

服务治理

服务注册与发现

服务路由控制

  • 《分布式服务框架学习笔记4 服务路由》
    • 原则:透明化路由
    • 负载均衡策略:随机、轮询、服务调用延迟、一致性哈希、粘滞连接
    • 本地路由优先策略:injvm(优先调用jvm内部的服务),innative(优先使用相同物理机的服务),原则上找距离最近的服务。
    • 配置方式:统一注册表;本地配置;动态下发。

分布式一致

CAP 与 BASE 理论

  • 《从分布式一致性谈到CAP理论、BASE理论》
    • 一致性分类:强一致(立即一致);弱一致(可在单位时间内实现一致,比如秒级);最终一致(弱一致的一种,一定时间内最终一致)
    • CAP:一致性、可用性、分区容错性(网络故障引起)
    • BASE:Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)
    • BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

分布式锁

  • 《分布式锁的几种实现方式》

    • 基于数据库的分布式锁:优点:操作简单、容易理解。缺点:存在单点问题、数据库性能够开销较大、不可重入;
    • 基于缓存的分布式锁:优点:非阻塞、性能好。缺点:操作不好容易造成锁无法释放的情况。
    • Zookeeper 分布式锁:通过有序临时节点实现锁机制,自己对应的节点需要最小,则被认为是获得了锁。优点:集群可以透明解决单点问题,避免锁不被释放问题,同时锁可以重入。缺点:性能不如缓存方式,吞吐量会随着zk集群规模变大而下降。
  • 《基于Zookeeper的分布式锁》

    • 清楚的原理描述 + Java 代码示例。
  • 《jedisLock—redis分布式锁实现》

    • 基于 setnx(set if ont exists),有则返回false,否则返回true。并支持过期时间。
  • 《Memcached 和 Redis 分布式锁方案》

    • 利用 memcached 的 add(有别于set)操作,当key存在时,返回false。

分布式一致性算法

PAXOS

Zab

Raft

Gossip

两阶段提交、多阶段提交

幂等

  • 《分布式系统---幂等性设计》
    • 幂等特性的作用:该资源具备幂等性,请求方无需担心重复调用会产生错误。
    • 常见保证幂等的手段:MVCC(类似于乐观锁)、去重表(唯一索引)、悲观锁、一次性token、序列号方式。

分布式一致方案

分布式 Leader 节点选举

TCC(Try/Confirm/Cancel) 柔性事务

  • 《传统事务与柔性事务》
    • 基于BASE理论:基本可用、柔性状态、最终一致。
    • 解决方案:记录日志+补偿(正向补充或者回滚)、消息重试(要求程序要幂等);“无锁设计”、采用乐观锁机制。

分布式文件系统

唯一ID 生成

全局唯一ID

  • 《高并发分布式系统中生成全局唯一Id汇总》

    • Twitter 方案(Snowflake 算法):41位时间戳+10位机器标识(比如IP,服务器名称等)+12位序列号(本地计数器)
    • Flicker 方案:MySQL自增ID + "REPLACE INTO XXX:SELECT LAST_INSERT_ID();"
    • UUID:缺点,无序,字符串过长,占用空间,影响检索性能。
    • MongoDB 方案:利用 ObjectId。缺点:不能自增。
  • 《TDDL 在分布式下的SEQUENCE原理》

    • 在数据库中创建 sequence 表,用于记录,当前已被占用的id最大值。
    • 每台客户端主机取一个id区间(比如 1000~2000)缓存在本地,并更新 sequence 表中的id最大值记录。
    • 客户端主机之间取不同的id区间,用完再取,使用乐观锁机制控制并发。

一致性Hash算法

设计思想 & 开发模式

DDD(Domain-driven Design - 领域驱动设计)

  • 《浅谈我对DDD领域驱动设计的理解》

    • 概念:DDD 主要对传统软件开发流程(分析-设计-编码)中各阶段的割裂问题而提出,避免由于一开始分析不明或在软件开发过程中的信息流转不一致而造成软件无法交付(和需求方设想不一致)的问题。DDD 强调一切以领域(Domain)为中心,强调领域专家(Domain Expert)的作用,强调先定义好领域模型之后在进行开发,并且领域模型可以指导开发(所谓的驱动)。
    • 过程:理解领域、拆分领域、细化领域,模型的准确性取决于模型的理解深度。
    • 设计:DDD 中提出了建模工具,比如聚合、实体、值对象、工厂、仓储、领域服务、领域事件来帮助领域建模。
  • 《领域驱动设计的基础知识总结》

    • 领域(Doamin)本质上就是问题域,比如一个电商系统,一个论坛系统等。
    • 界限上下文(Bounded Context):阐述子域之间的关系,可以简单理解成一个子系统或组件模块。
    • 领域模型(Domain Model):DDD的核心是建立(用通用描述语言、工具—领域通用语言)正确的领域模型;反应业务需求的本质,包括实体和过程;其贯穿软件分析、设计、开发 的整个过程;常用表达领域模型的方式:图、代码或文字;
    • 领域通用语言:领域专家、开发设计人员都能理解的语言或工具。
    • 经典分层架构:用户界面/展示层、应用层、领域层、基础设施层,是四层架构模式。
    • 使用的模式:
      • 关联尽量少,尽量单项,尽量降低整体复杂度。
      • 实体(Entity):领域中的唯一标示,一个实体的属性尽量少,少则清晰。
      • 值对象(Value Object):没有唯一标识,且属性值不可变,小而简单的对象,比如Date。
      • 领域服务(Domain Service): 协调多个领域对象,只有方法没有状态(不存数据);可以分为应用层服务,领域层服务、基础层服务。
      • 聚合及聚合根(Aggregate,Aggregate Root):聚合定义了一组具有内聚关系的相关对象的集合;聚合根是对聚合引用的唯一元素;当修改一个聚合时,必须在事务级别;大部分领域模型中,有70%的聚合通常只有一个实体,30%只有2~3个实体;如果一个聚合只有一个实体,那么这个实体就是聚合根;如果有多个实体,那么我们可以思考聚合内哪个对象有独立存在的意义并且可以和外部直接进行交互;
      • 工厂(Factory):类似于设计模式中的工厂模式。
      • 仓储(Repository):持久化到DB,管理对象,且只对聚合设计仓储。
  • 《领域驱动设计(DDD)实现之路》

    • 聚合:比如一辆汽车(Car)包含了引擎(Engine)、车轮(Wheel)和油箱(Tank)等组件,缺一不可。
  • 《领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处》

命令查询职责分离(CQRS)

CQRS — Command Query Responsibility Seperation

贫血,充血模型

  • 《贫血,充血模型的解释以及一些经验》
    • 失血模型:老子和儿子分别定义,相互不知道,二者实体定义中完全没有业务逻辑,通过外部Service进行关联。
    • 贫血模型:老子知道儿子,儿子也知道老子;部分业务逻辑放到实体中;优点:各层单项依赖,结构清楚,易于维护;缺点:不符合OO思想,相比于充血模式,Service层较为厚重;
    • 充血模型:和贫血模型类似,区别在于如何划分业务逻辑。优点:Service层比较薄,只充当Facade的角色,不和DAO打交道、复合OO思想;缺点:非单项依赖,DO和DAO之间双向依赖、和Service层的逻辑划分容易造成混乱。
    • 肿胀模式:是一种极端情况,取消Service层、全部业务逻辑放在DO中;优点:符合OO思想、简化了分层;缺点:暴露信息过多、很多非DO逻辑也会强行并入DO。这种模式应该避免。
    • 作者主张使用贫血模式。

Actor 模式

TODO

响应式编程

Reactor

TODO

RxJava

TODO

Vert.x

TODO

DODAF2.0

Serverless

无需过多关系服务器的服务架构理念。

  • 《什么是Serverless无服务器架构?》

    • Serverless 不代表出去服务器,而是去除对服务器运行状态的关心。
    • Serverless 代表一思维方式的转变,从“构建一套服务在一台服务器上,对对个事件进行响应转变为构建一个为服务器,来响应一个事件”。
    • Serverless 不代表某个具体的框架。
  • 《如何理解Serverless?》

    • 依赖于 Baas ((Mobile) Backend as a Service) 和 Faas (Functions as a service)

Service Mesh

项目管理

架构评审

重构

代码规范

代码 Review

制度还是制度! 另外,每个公司需要根据自己的需求和目标制定自己的 check list

RUP

看板管理

SCRUM

SCRUM - 争球

敏捷开发

TODO

极限编程(XP)

XP - eXtreme Programming

  • 《主流敏捷开发方法:极限编程XP》
    • 是一种指导开发人员的方法论。
    • 4大价值:
      • 沟通:鼓励口头沟通,提高效率。
      • 简单:够用就好。
      • 反馈:及时反馈、通知相关人。
      • 勇气:提倡拥抱变化,敢于重构。
    • 5个原则:快速反馈、简单性假设、逐步修改、提倡更改(小步快跑)、优质工作(保证质量的前提下保证小步快跑)。
    • 5个工作:阶段性冲刺;冲刺计划会议;每日站立会议;冲刺后review;回顾会议。

结对编程

边写码,边review。能够增强代码质量、减少bug。

PDCA 循环质量管理

P——PLAN 策划,D——DO 实施,C——CHECK 检查,A——ACT 改进

FMEA管理模式

TODO

通用业务术语

TODO

技术趋势

TODO

政策、法规

法律

严格遵守刑法253法条

我国刑法第253条之一规定:

  • 国家机关或者金融、电信、交通、教育、医疗等单位的工作人员,违反国家规定,将本单位在履行职责或者提供服务过程中获得的公民个人信息,出售或者非法提供给他人,情节严重的,处3年以下有期徒刑或者拘役,并处或者单处罚金。
  • 窃取或者以其他方法非法获取上述信息,情节严重的,依照前款的规定处罚。
  • 单位犯前两款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。

最高人民法院、最高人民检察院关于执行《中华人民共和国刑法》确定罪名的补充规定(四)规定:触犯刑法第253条之一第1款之规定,构成“出售、非法提供公民个人信息罪”;触犯刑法第253条之一第2款之规定,构成“非法获取公民个人信息罪”

避风港原则

“避风港”原则是指在发生著作权侵权案件时,当ISP(网络服务提供商)只提供空间服务,并不制作网页内容,如果ISP被告知侵权,则有删除的义务,否则就被视为侵权。如果侵权内容既不在ISP的服务器上存储,又没有被告知哪些内容应该删除,则ISP不承担侵权责任。 后来避风港原则也被应用在搜索引擎、网络存储、在线图书馆等方面。

架构师素质

  • 《架构师画像》

    • 业务理解和抽象能力
    • NB的代码能力
    • 全面:1. 在面对业务问题上,架构师脑海里是否会浮现出多种技术方案;2. 在做系统设计时是否考虑到了足够多的方方面面;3. 在做系统设计时是否考虑到了足够多的方方面面;
    • 全局:是否考虑到了对上下游的系统的影响。
    • 权衡:权衡投入产出比;优先级和节奏控制;
  • 《关于架构优化和设计,架构师必须知道的事情》

    • 要去考虑的细节:模块化、轻耦合、无共享架构;减少各个组件之前的依赖、注意服务之间依赖所有造成的链式失败及影响等。
    • 基础设施、配置、测试、开发、运维综合考虑。
    • 考虑人、团队、和组织的影响。
  • 《如何才能真正的提高自己,成为一名出色的架构师?》

  • 《架构师的必备素质和成长途径》

    • 素质:业务理解、技术广度、技术深度、丰富经验、沟通能力、动手能力、美学素养。
    • 成长路径:2年积累知识、4年积累技能和组内影响力、7年积累部门内影响力、7年以上积累跨部门影响力。
  • 《架构设计师—你在哪层楼?》

    • 第一层的架构师看到的只是产品本身
    • 第二层的架构师不仅看到自己的产品,还看到了整体的方案
    • 第三层的架构师看到的是商业价值

团队管理

TODO

招聘

资讯

行业资讯

公众号列表

TODO

博客

团队博客

个人博客

综合门户、社区

国内:

国外:

问答、讨论类社区

行业数据分析

专项网站

其他类

推荐参考书

在线电子书

纸质书

更多架构方面书籍参考: awesome-java-books

开发方面

  • 《阿里巴巴Java开发手册》详情

架构方面

  • 《软件架构师的12项修炼:技术技能篇》详情

  • 《架构之美》详情

  • 《分布式服务架构》详情

  • 《聊聊架构》 详情

  • 《云原生应用架构实践》详情

  • 《亿级流量网站架构核心技术》详情

  • 《淘宝技术这十年》详情

  • 《企业IT架构转型之道-中台战略思想与架构实战》 详情

  • 《高可用架构(第1卷)》详情

技术管理方面

  • 《CTO说》详情
  • 《技术管理之巅》详情
  • 《网易一千零一夜:互联网产品项目管理实战》详情

基础理论

工具方面

TODO

大数据方面

技术资源

开源资源

手册、文档、教程

国内:

  • W3Cschool

  • Runoob.com

    • HTML 、 CSS、XML、Java、Python、PHP、设计模式等入门手册。
  • Love2.io

    • 很多很多中文在线电子书,是一个全新的开源技术文档分享平台。
  • gitbook.cn

    • 付费电子书。
  • ApacheCN

    • AI、大数据方面系列中文文档。

国外:

  • Quick Code
    • 免费在线技术教程。
  • gitbook.com
    • 有部分中文电子书。
  • Cheatography
    • Cheat Sheets 大全,单页文档网站。
  • Tutorialspoint
    • 知名教程网站,提供Java、Python、JS、SQL、大数据等高质量入门教程。
  • LeetCode
    • 知名题库网站,提供Java、Python、C#、C++、算法、SQL、等高质量各程度题库和解决办法。

在线课堂

会议、活动

活动发布平台:

常用APP

找工作

工具

代码托管

文件服务

  • 七牛
  • 又拍云

综合云服务商

VPS

入门书籍

基础书籍

多线程与并发

网络编程

数据结构

语言基础

进阶

性能优化

响应式编程

JVM虚拟机

代码&设计优化

设计模式

框架与中间件

数据库

缓存与NoSQL

消息队列

ORM框架

Spring家族

高并发

分布式

搜索引擎

大数据

架构

分布式架构

微服务架构

架构方法论

JVM周边语言

项目管理&领导力&流程

项目管理

团队管理

数学与算法

数学

算法

职业素养与个人成长

职业素养提升

个人软技能

大厂出品

阿里巴巴技术丛书

京东技术丛书

工具书

面试求职

格局与视野

Java之外

网络知识

安全知识

工具

运维&DevOps

国内低代码平台

全栈平台

页面搭建

仅包含前端部分的 low code 平台

店铺装修

非独立页面,依附于业务系统存在的页面搭建

  • shopify
  • 有赞-微页面
  • 淘宝店铺装修

Open Source Love svg3


办公/管理系统 a.k.a no-code

声明式编程

行业综述

技术点

国外

一切改进都是源自于人类的缺陷

How we think

  • 人脑是串行的,无法有效并行思考多条线索
    • 人脑不适合思考并行执行的多线程
      • 【单线程】把共享变量的编程模式改成事务整体提交的模式
    • 人脑不适合思考同时呈现在屏幕上的多个独立的业务流程
      • 代码是按发生时间组织的,在一起的代码未必是逻辑上有关联的业务流程
        • 【按业务切分文件】阅读者应该可以按照自己的任务目标来跟踪索引,而不是默认一个按钮点击引起的处理逻辑都一定要写在一个大文件里
        • 【按变更频率切分文件】业务变更是阅读的首要原因,代码应该按照业务变更的频率来组织。会同时变更的代码应该放在一起
    • 人脑很难管理多份独立可变的状态,本质上每个独立变化的状态就是一个独立的线程
      • 驱动状态数量熵增的三大因素:
        • 因为交互体验的要求,从后端到富客户端到3d动画,状态被复制多份,越来越靠近展示层
        • 因为硬件物理的约束,内存从CPU统一寻址,到异构计算,CUDA,每个硬件核都有一层自己的内存
        • 因为数据量的增长,从统一的OLAP从库,到Data Lake,Data Mart,数据被复制成越来越多份,流水线越来越长
      • 对抗状态数量熵增的手段:
        • 【声明式数据联动】减少独立变化的状态,用表达式来表达 derived state
        • 【全局虚拟数据层】借鉴Unix的统一文件抽象,引入一层统一的虚拟数据层。尽可能把状态转化成 cache
    • 人脑很难理解新增对原有行为的剧烈变化,更习惯逐层稳定叠加。也就是人更希望“控制变量”
      • css 最大的难度在于不正交,新增一条对规则会引起意想不到的效果
        • 【局部化布局】swiftui 的 HStack/VStack/ZStack 布局规则数量少,每条规则作用都是局部的稳定的叠加
      • 性能优化往往需要破坏局部性,因为局部的自治容易引起重复劳动
        • 【局部化IO】系统自动实现 I/O 的批量等可以自动化做的全局优化
        • 【局部化IO】业务写成自治的,但是可以附加额外的手工全局调优。而不是强制要求把业务逻辑从局部抽出去

How we perceive

  • 人眼只能在狭窄的感受野里获得信息
    • 人对时间的感知是来自于对空间的感知
    • 人希望在一个屏幕内从上往下的获取时间顺序上从早到晚的信息
      • callback 的编程方式破坏了屏幕上的顺序和时间顺序的直接映射关系
        • 【协程式IO】用协程取代 callback,把屏幕上的代码撸直
      • 通过 status 字段驱动的业务状态机破坏了屏幕上的顺序和时间顺序的直接映射关系
        • 【协程式业务流程】用协程取代 status 状态机,把屏幕上的代码撸直
    • 因为感受野的限制,源代码没有空间展示所有的细节
      • 类型定义,内存分配等“细节”占用了大量的视觉区域
        • 【IDE细节隐藏】在文本上省略掉细节,由 IDE 进行补全,当鼠标移动上去的时候才展示出来
      • 人最习惯的空间整理方式仍然是层状的文件夹
        • 所有的“架构”设计,最终都是对文件夹和文件的设计。但是一个维度的静态索引(文件夹嵌套)无法满足所有可能的检索需求
          • 【IDE按需索引】由 IDE 来补全文件夹分类不能满足的索引需求,针对阅读者的任务来设计IDE索引
    • 视杆细胞容易忽略形状和顺序的差异,但是对颜色更敏感
      • 语法高亮占用了宝贵的资源,但是并没有考虑阅读者的诉求
        • 【IDE按需高亮】对于不同的任务,阅读者希望找到的重点是不同的,语法高亮应该结合任务来做

How we collaborate

  • 人与人之间最高效的沟通的方式是面对面的交互式声波震动
    • 人类低下的沟通带宽根本上限制了一个团队的规模
      • 上线速度要求越快越好,但是加人带来的边际效益递减
        • 减少开会拉齐,团队应该尽可能地自治,而不是什么都要靠 feature team 横向拉通
          • 高内聚,低耦合
            • 【静态链接包】编程工具应该提供更多的组合可能,而不是所有的组合都要在运行时用面向对象的多态来实现
            • 【按变更频率切分包】分工应该按照变更频率来确定,分工应该是明确的
    • 尽可能由最终用户,或者靠近最终用户的团队来解决问题,而不是长距离传递需求
      • 最终用户编程:直接让需求提出者自己来实现需求
        • 把“学习”内置到工具里,需要内置一个教学工具
          • 最终用户的编程工具开发难度高,成本高,投入超过了单个软件的回报
            • 【编辑器预制】把“公式编辑”,“店铺装修”等常见共性需求提前预制
        • 教学工具的目标是教学,而不是把自己标杆为更先进的生产力
          • 【教学内置】提供教学模式和生产力模式的无缝切换
      • 低代码编程:通过提前预制,把工作量前置,减少应用开发者的规模,从而可以在组织架构上把开发者内置到用户组织内部。与此相对应的是文档驱动的外包式开发。
        • “预制”来自于对共性需求的提前预判
          • 【非功能性需求云化】非功能性需求的实现,都是运行在相似的机器上
            • 操作系统
            • k8s
            • RPC 框架
          • 开发者都是人类
            • 编程工具
            • 沟通工具
          • 用户都是人类
            • 【SaaS组件】IM / 电话 / 短信
            • 【Ui组件】字处理器 / 表格
            • 【CRUD生成】惯用的展现和交互
              • 列表详情
              • 树状层级
              • 表格结构
              • 可拖拽白板
          • 【SaaS组件】相对稳定的业务流程
            • 登录注册
            • 支付
          • 行业内相对稳定的业务共性流程
            • 电商
            • HR / 招聘
            • 销售管理 / CRM

How we learn

  • 人的“归纳/理解/学习”能力高度依赖于可视化交互式地操纵与反馈
    • 帮助应该放在任务执行的地方,与其说“可视化”,不如说是“可发现”
      • 【填空题变选择题】单独的语法手册是不好使的,必须提供界面上的按钮,把填空题变成选择题,这样才能启发学习
        • GUI 设计器 / 店铺装修
        • 公式编辑器
        • 审批 / 工作流设计器
        • trigger 流程设计器
    • 人习惯于用手触碰一下对象,然后观测其反馈,从而归纳学习
      • 不可观测的行为无法学习
        • 生产环境的bug无法本地复现,我怎么找规律?
          • 【TestInProduction】tracing,大量的 tracing,流量回放
        • lowcode 平台的bug没有任何线索,除了找平台开发者,我能怎么办?
          • 不能要求用户了解所有的内部细节,“平台”要做到可依赖
          • 业务逻辑问题的定位和生产环境的bug定位一样,靠 tracing
      • 反馈太慢的行为给人的负面感受是指数增加的
        • 本地机器太慢了跑不起来,需要上公司的沙盒环境来复现问题
          • 【云IDE】
        • 改完了代码需要重新编译重新加载
          • 【LanguageServer】交互式开发的时候跳过不必要的编译
          • 【所见即所得】所见即所得的 GUI 开发,本质上就是用解释器执行,换取编译时间的缩减
          • 【HMR】重加载的时候保持页面状态

no code / low code / pro code

一切的改进都是源自于人类的缺陷

  • no code:自己编程给自己用,给用户的感觉是一个更强大的办公/实用软件。主要的手段是用图形化操作等方式降低学习曲线。no code 一定要面向非常固定的领域才能做到好用。
  • low code:编程给其他人用,为此创造了一个 citizen developer 的概念。主要的手段是平台预制好常见的需求,减少需要从头写的代码。low code 也要面向指定的领域才能让平台提前预测需求,但相比 no code 可以不把使用场景限定得那么死。
  • pro code:low code 的平台自己不会选择 low code 来创建这个平台本身,因为 low code 并没有降低从头构建一个系统的成本。但是 pro code 的平台自己会选择 pro code 来创建这个平台本身,比如 react 开发者会选择用 react 来创建自己的开发工具,因为 pro code 的工具和平台都是以从根本上降低从头构建一个系统的复杂度为目标的。

Table of Contents

Go

  • redpanda-data/console - Redpanda Console is a developer-friendly UI for managing your Kafka/Redpanda workloads. Console gives you a simple, interactive approach for gaining visibility into your topics, masking data, managing consumer groups, and exploring real-time data with time-travel debugging.

  • 1Panel-dev/1Panel - 🔥 🔥 🔥 现代化、开源的 Linux 服务器运维管理面板。

  • usememos/memos - A privacy-first, lightweight note-taking service. Easily capture and share your great thoughts.

  • hootrhino/rulex - 轻量级边缘物联网网关开发框架

  • kubernetes/kubernetes - Production-Grade Container Scheduling and Management

  • portainer/portainer - Making Docker and Kubernetes management easy.

  • alist-org/alist - 🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。

  • qax-os/ElasticHD - Elasticsearch 可视化DashBoard, 支持Es监控、实时搜索,Index template快捷替换修改,索引列表信息查看, SQL converts to DSL等

  • ConnectAI-E/Feishu-OpenAI - 🎒 飞书 ×(GPT-4 + DALL·E + Whisper)= 飞一般的工作体验 🚀 语音对话、角色扮演、多话题讨论、图片创作、表格分析、文档导出 🚀

  • tealeg/xlsx - Go library for reading and writing XLSX files.

  • avelino/awesome-go - A curated list of awesome Go frameworks, libraries and software

  • coreybutler/nvm-windows - A node.js version management utility for Windows. Ironically written in Go.

  • nanmu42/orly - 🏈 Generate your own O'RLY animal book cover to troll your colleagues | 生成你自己的O'RLY动物书封面,让你的同事惊掉下巴

Shell

PHP

  • flarum/flarum - Simple forum software for building great communities.

  • fzaninotto/Faker - Faker is a PHP library that generates fake data for you

  • easychen/howto-make-more-money - 程序员如何优雅的挣零花钱,2.0版,升级为小书了。Most of this not work outside China , so no English translate

  • kuaifan/dootask - DooTask是一款开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具;同时消息功能使用非对称加密技术让你的沟通更安全。

  • JaguarJack/catch-admin - CatchAdmin is a background management system based on secondary development of Laravel and Element Plus. CatchAdmin still adopts the traditional front-end and back-end separation strategy, and the Laravel framework is only used as an Api output. Coupling between management system modules is minimized

Scala

  • yahoo/CMAK - CMAK is a tool for managing Apache Kafka clusters

TypeScript

miscellaneous

Java

  • jetlinks/device-simulator - 基于netty的设备模拟器,模拟设备消息收发,压力测试。

  • jetlinks/demo-protocol - 此协议已弃用,请使用官方协议 https://github.com/jetlinks/jetlinks-official-protocol

  • jetlinks/jetlinks-official-protocol - jetlinks 官方设备接入协议

  • jetlinks/jetlinks-core - jetlinks 核心模块,统一相关API

  • zlt2000/microservices-platform - 基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提供应用管理方便第三方系统接入;同时还集合各种微服务治理功能和监控功能。模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。

  • mongodb/mongo-java-driver - The official MongoDB drivers for Java, Kotlin, and Scala

  • didi/DoKit - 一款面向泛前端产品研发全生命周期的效率平台。

  • apache/cassandra - Mirror of Apache Cassandra

  • Netflix/astyanax - Cassandra Java Client

  • pjmike/springboot-netty - SpringBoot 整合 Netty 实战

  • smltq/spring-boot-demo - spring boot demo 是一个Spring Boot、Spring Cloud的项目示例,根据市场主流的后端技术,共集成了50+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway(服务网关)等模块

  • paascloud/paascloud-master - spring cloud + vue + oAuth2.0全家桶实战,前后端分离模拟商城,完整的购物流程、后端运营平台,可以实现快速搭建企业级微服务项目。支持微信登录等三方登录。

  • brettwooldridge/HikariCP - 光 HikariCP・A solid, high-performance, JDBC connection pool at last.

  • DerekYRC/mini-spring-cloud - mini-spring-cloud是简化版的spring-cloud框架,能帮助你快速熟悉spring-cloud源码及掌握其核心原理。在保留spring cloud核心功能的的前提下尽量精简代码,核心功能包括服务注册、服务发现、负载均衡、集成Feign简化调用、流量控制、熔断降级、API网关等。

  • Netflix/Hystrix - Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.

  • Netflix/ribbon - Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.

  • sanshengshui/netty-learning-example - 🥚 Netty实践学习案例,见微知著!带着你的心,跟着教程。我相信你行欧。

  • medcl/elasticsearch-analysis-ik - The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.

  • iteaj/iot - iot是基于netty, spring boot, redis等开源项目实现的物联网框架, 支持tcp, udp底层协议和http, mqtt, modbus等上层协议.支持心跳处理、短线重连、服务端同步和异步调用设备、应用客户端同步和异步调用设备、协议实现和业务处理解耦分离、基于redis的数据生产和消费。并指定一套统一、易理解和简单的api接口

  • didi/KnowStreaming - 一站式云原生实时流数据平台,通过0侵入、插件化构建企业级Kafka服务,极大降低操作、存储和管理实时流数据门槛

  • eclipse/paho.mqtt.java - Eclipse Paho Java MQTT client library. Paho is an Eclipse IoT project.

  • netty/netty - Netty project - an event-driven asynchronous network application framework

  • facundomedica/fast_qr_reader_view - A Fast QR Reader widget for Flutter. For both Android and iOS

  • bcko/flutter_qrcode_reader - Flutter qrcode reader

  • X-dea/flutter_vpn - Plugin to access VPN service for Flutter | Flutter 的 VPN 插件

  • edufolly/flutter_mobile_vision - Flutter implementation of Google Mobile Vision.

  • fluttify-project/amap_map_fluttify - 高德地图 地图组件 Flutter插件

  • nisrulz/android-examples - :shipit: [Examples] Simple basic isolated apps, for budding android devs.

  • alibaba/Sentinel - A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)

  • AwakenCN/InChat - 一个轻量级、高效率的支持多端(应用与硬件Iot)的可分布式、异步网络应用通讯框架

  • zhoutaoo/SpringCloud - 基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。持续更新中

  • simplepeng/HeGuiChecker - 🔥🔥🔥 基于Hook方案的合规化检测器

  • OpenFeign/feign - Feign makes writing java http clients easier

  • apache/shardingsphere - Distributed SQL transaction & query engine for data sharding, scaling, encryption, and more - on any database.

  • junneyang/xxproject - SpringCloud 微服务综合实例。分布式配置中心,服务发现&负载均衡,链路断路器,API网关,OAuth2认证授权,分布式追踪,ELK日志中心,Ansible/Docker持续交付等最佳实践。

  • vangao1989/cloudE - 基于spring cloud的分布式系统架构。提供整套的微服务组件,包括服务发现、服务治理、链路追踪、服务监控等

  • NaikSoftware/StompProtocolAndroid - STOMP protocol via WebSocket for Android

  • ityouknow/spring-cloud-examples - Spring Cloud 学习案例,服务发现、服务治理、链路追踪、服务监控等

  • YunaiV/yudao-cloud - ruoyi-vue-pro 全新 Cloud 版本,优化重构所有功能。基于 Spring Cloud Alibaba + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。你的 ⭐️ Star ⭐️,是作者生发的动力!

  • wechatpay-apiv3/wechatpay-java - 微信支付 APIv3 的官方 Java Library

  • codecentric/spring-boot-admin - Admin UI for administration of spring boot applications

  • apache/hbase - Apache HBase

  • alibaba/canal - 阿里巴巴 MySQL binlog 增量订阅&消费组件

  • seata/seata - 🔥 Seata is an easy-to-use, high-performance, open source distributed transaction solution.

  • projectlombok/lombok - Very spicy additions to the Java programming language.

  • logfellow/logstash-logback-encoder - Logback JSON encoder and appenders

  • jwtk/jjwt - Java JWT: JSON Web Token for Java and Android

  • aliyun/aliyun-oss-java-sdk - Aliyun OSS SDK for Java

  • alibaba/druid - 阿里云计算平台DataWorks(https://help.aliyun.com/document\_detail/137663.html) 团队出品,为监控而生的数据库连接池

  • elastic/elasticsearch - Free and Open, Distributed, RESTful Search Engine

  • crossoverJie/cim - 📲cim(cross IM) 适用于开发者的分布式即时通讯系统

  • lenve/tienchin -

  • jeequan/jeepay - Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接微信支付,支付宝,云闪付官方接口,支持聚合码支付。

  • dromara/lamp-cloud - lamp-cloud 基于Jdk11 + SpringCloud + SpringBoot 开发的微服务中后台快速开发平台,专注于多租户(SaaS架构)解决方案,亦可作为普通项目(非SaaS架构)的基础开发框架使用,目前已实现插拔式数据库隔离、SCHEMA隔离、字段隔离 等租户隔离方案。

  • alibaba/spring-cloud-alibaba - Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.

  • spring-cloud/spring-cloud-netflix - Integration with Netflix OSS components

  • spring-projects/spring-framework - Spring Framework

  • spring-projects/spring-boot - Spring Boot

  • pagehelper/Mybatis-PageHelper - Mybatis通用分页插件

  • mybatis/mybatis-3 - MyBatis SQL mapper framework for Java

  • yangzongzhuan/RuoYi-Vue - 🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本

  • woodwhales/woodwhales-springboot-xss - SpringBoot Xss 防御 DEMO 示例

  • thymeleaf/thymeleaf - Thymeleaf is a modern server-side Java template engine for both web and standalone environments.

  • wuyouzhuguli/SpringAll - 循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc

  • xkcoding/spring-boot-demo - 🚀一个用来深入学习并实战 Spring Boot 的项目。

  • 527515025/springBoot - springboot 框架与其它组件结合如 jpa、mybatis、websocket、security、shiro、cache等

  • codedrinker/community - 开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap

  • Heeexy/SpringBoot-Shiro-Vue - 提供一套基于Spring Boot-Shiro-Vue的权限管理思路.前后端都加以控制,做到按钮/接口级别的权限。(当前新版本已移除shiro依赖,简化了配置)

  • yangzongzhuan/RuoYi-Vue-fast - 🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

  • apache/zookeeper - Apache ZooKeeper

  • apache/kafka - Mirror of Apache Kafka

  • alibaba/nacos - an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.

  • fluttercommunity/flutter_webview_plugin - Community WebView Plugin - Allows Flutter to communicate with a native WebView.

  • RAOE/show-videos - 🍭短视频社交软件 ,微信小程序,后台管理系统,专科毕业设计,仿抖音,springcloud+springboot+springmvc+mybatis+docker+bootstrap+h plus+微信小程序

  • apache/dubbo - The java implementation of Apache Dubbo. An RPC and microservice framework.

  • CarGuo/GSYVideoPlayer - 视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS,支持弹幕,外挂字幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,列表切换详情页面无缝播放,rtsp、concat、mpeg。

  • elunez/eladmin - eladmin jpa 版本:项目基于 Spring Boot 2.6.4、 Jpa、 Spring Security、Redis、Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由

  • ityouknow/spring-boot-examples - about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。

  • newbee-ltd/newbee-mall - 🔥 🎉newbee-mall是一套电商系统,包括基础版本(Spring Boot+Thymeleaf)、前后端分离版本(Spring Boot+Vue 3+Element-Plus+Vue-Router 4+Pinia+Vant 4) 、秒杀版本、Go语言版本、微服务版本(Spring Cloud Alibaba+Nacos+Sentinel+Seata+Spring Cloud Gateway+OpenFeign+ELK)。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。

  • YunaiV/ruoyi-vue-pro - 🔥 官方推荐 🔥 RuoYi-Vue 全新 Pro 版本,优化重构所有功能。基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 微信小程序,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城等功能。你的 ⭐️ Star ⭐️,是作者生发的动力!

  • yudaocode/SpringBoot-Labs - 一个涵盖六个专栏:Spring Boot 2.X、Spring Cloud、Spring Cloud Alibaba、Dubbo、分布式消息队列、分布式事务的仓库。希望胖友小手一抖,右上角来个 Star,感恩 1024

  • CodingDocs/springboot-guide - SpringBoot2.0+从入门到实战!

  • hustcc/JS-Sorting-Algorithm - 一本关于排序算法的 GitBook 在线书籍 《十大经典排序算法》,多语言实现。

  • facebook/react-native - A framework for building native applications using React

  • macrozheng/mall - mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

  • justauth/JustAuth - 🏆Gitee 最有价值开源项目 🚀:100: 小而全而美的第三方登录开源组件。目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackOverflow、Pinterest、人人、华为、企业微信、酷家乐、Gitlab、美团、饿了么、推特、飞书、京东、阿里云、喜马拉雅、Amazon、Slack和 Line 等第三方平台的授权登录。 Login, so easy!

  • dromara/Sa-Token - 这可能是史上功能最全的Java权限认证框架!目前已集成——登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0、踢人下线、Redis集成、前后台分离、记住我模式、模拟他人账号、临时身份切换、账号封禁、多账号认证体系、注解式鉴权、路由拦截式鉴权、花式token生成、自动续签、同端互斥登录、会话治理、密码加密、jwt集成、Spring集成、WebFlux集成...

  • lenve/vhr - 微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。

  • ifnoelse/pdf-bookmark - pdf bookmark generator 目录 书签 大纲

  • jeecgboot/JimuReport - 🔥「数据可视化报表工具」类似excel操作风格,在线拖拽完成报表设计!功能涵盖: 报表设计、图形报表、打印设计、大屏设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、解决各类报表难题。

  • GrowingGit/GitHub-Chinese-Top-Charts - 🇨🇳 GitHub中文排行榜,各语言分设「软件 | 资料」榜单,精准定位中文好项目。各取所需,高效学习。

  • MisterBooo/LeetCodeAnimation - Demonstrate all the questions on LeetCode in the form of animation.(用动画的形式呈现解LeetCode题目的思路)

  • xiaoqi6666/NYCSDE - 公众号【码农田小齐】的分类合集

  • geekxh/hello-algorithm - 🌍 针对小白的算法训练 | 包括四部分:①.大厂面经 ②.力扣图解 ③.千本开源电子书 ④.百张技术思维导图(项目花了上百小时,希望可以点 star 支持,🌹感谢~)推荐免费ChatGPT使用网站

JavaScript

PLpgSQL

  • chillzhuang/SpringBlade - SpringBlade 是一个由商业级项目升级优化而来的SpringCloud分布式微服务架构、SpringBoot单体式微服务架构并存的综合型项目,采用Java8 API重构了业务代码,完全遵循阿里巴巴编码规范。采用Spring Boot 2.7 、Spring Cloud 2021 、Mybatis 等核心技术,同时提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。

Kotlin

Dart

C#

  • linfx/MqttFx - MqttFx is a mqtt v3.1.1 client using DotNetty

Erlang

  • emqx/emqx - The most scalable open-source MQTT broker for IoT, IIoT, and connected vehicles

Swift

C++

Vue

Objective-C

Python

Dockerfile

MDX

Jupyter Notebook

HTML

  • yangzongzhuan/RuoYi - 🎉 (RuoYi)官方仓库 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用

  • mdn/learning-area - GitHub repo for the MDN Learning Area.

  • tailwindlabs/tailwindcss-forms - A plugin that provides a basic reset for form styles that makes form elements easy to override with utilities.

  • jashkenas/docco - Literate Programming can be Quick and Dirty.

  • madrobby/zepto - Zepto.js is a minimalist JavaScript library for modern browsers, with a jQuery-compatible API

  • leizongmin/js-xss - Sanitize untrusted HTML (to prevent XSS) with a configuration specified by a Whitelist

  • jasl/ueditor_rails - [Abandoned] UEditor integration with Rails

  • alpinejs/alpine - A rugged, minimal framework for composing JavaScript behavior in your markup.

  • tailwindlabs/tailwindcss - A utility-first CSS framework for rapid UI development.

  • pagedjs/pagedjs - Display paginated content in the browser and generate print books using web technology

  • aui/pinyin-engine - JavaScript 拼音匹配引擎

  • sindresorhus/screenfull - Simple wrapper for cross-browser usage of the JavaScript Fullscreen API

  • a597873885/webfunny_monitor - webfunny是一款轻量级的前端性能监控系统,也是一款埋点系统,私有化部署,简单易用。Webfunny is a lightweight front-end performance monitoring system and a burying point system, which is privatized and easy to use.

  • ElemeFE/node-interview - How to pass the Node.js interview of ElemeFE.

  • byoungd/English-level-up-tips - An advanced guide to learn English which might benefit you a lot 🎉 . 离谱的英语学习指南。

  • whatwg/html - HTML Standard

Starlark

Groovy

Rust

Ruby

C

  • tporadowski/redis - Native port of Redis for Windows. Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs. This repository contains unofficial port of Redis to Windows.

  • bytecodealliance/wasm-micro-runtime - WebAssembly Micro Runtime (WAMR)

  • cossacklabs/themis - Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms.

  • yangkun19921001/AVFFmpegLib - 移植 FFmpeg 最新版本v4.4-dev-416 + libx264 + freetype + fontconfig + fribidi + openh264 +libfdk-aac + gnutls + speex + libwebp + lame +opus + opencore-amr + https)编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,目前内置了音视频剪辑、编辑、视频拼接、字幕、水印、倒放等功能,也可以根据 ffmpeg 命令模式来进行处理。

  • yangkun19921001/AVEditor - 这是一款短视频编辑 SDK,仿 DouYin 音视频处理。功能包含有美颜、滤镜、贴纸、特效、录制、分段录制、速率录制、变声、配乐、rtmp 直播推流、图片转视频、剪辑,mp4/flv 格式封装等功能。动态库用的我另一个项目编译好的 https://github.com/yangkun19921001/AVFFmpegLib

  • yangkun19921001/AVSample - 0 基础音视频进阶路线 (MediaCodec、FFmpeg、OpenCV、OpenGL、短视频 SDK、音视频播放器、webrtc)

  • leandromoreira/ffmpeg-libav-tutorial - FFmpeg libav tutorial - learn how media works from basic to transmuxing, transcoding and more. Translations: 🇺🇸 🇨🇳 🇰🇷 🇪🇸 🇻🇳 🇧🇷

CSS

OCaml

  • facebook/flow - Adds static typing to JavaScript to improve developer productivity and code quality.

Markdown

  • labuladong/fucking-algorithm - 刷算法全靠套路,认准 labuladong 就够了!English version supported! Crack LeetCode, not only how, but also why.

Bikeshed

CoffeeScript

SCSS

Stylus

Thanks

About

🤩 我的star列表,每天凌晨自动更新

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published