liyuhang521 / blog

:dart: 个人博客

Home Page:https://dunwu.github.io/blog/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logo

license build

BLOG

本博客内容较多,请善用 Ctrl + F

编程语言

作为程序员,编程当然是基础中的基础。

每个优秀的程序员,至少应该掌握并精通一门编程语言(根据自己的兴趣和技术方向选择)。

本人较为精通 Java ,且熟悉 C/C++/JavaScript,略懂 Shell/Python 等脚本语言。

Java

Java 领域的知识点非常庞杂,我整理成了多个教程项目,每个项目都包含大量文档和代码。

Java 教程 📚 - 本人作为一名 Java 程序员,十年的技术积累,汇总与此。

JavaCore 📚

JavaCore 教程 📚 - Java 核心技术教程。

JavaEE

JavaTech 📚

JavaTech 教程 📚 - 汇总了 Java 开发中常见的主流技术的应用、特性、原理。

JavaTool

其他语言

数据结构和算法

如果说编程语言好比是武功招式,那么数据结构和算法就相当于是内功。要想成为编程高手,必须具备一定的数据结构和算法功底。

要想学好数据结构和算法,在我看来,就是多刷题。

数据结构和算法教程 📚 - 包含基本数据结构和算法的讲解和示例,以及平时在 leetcode 上刷题的代码。

数据库

数据库大体上可以分为关系型数据库和 Nosql 数据库。

关系型数据库的特性和原理,基本上大同小异。

Nosql 数据库就真的是各有各的不同了。

数据库教程 📚 - 本人接触的最多的数据库就是 Mysql、Redis,本教程内对于这两种数据库的特性和原理讲解比较细致,其他数据库内容没那么细致。

关系型数据库

Mysql

Mysql 📚

其他

Nosql

Redis

Redis 📚

其他

中间件

操作系统

Linux

linux-tutorial 📚 是一个 Linux 教程。

主要内容如下:

其他

分布式

大型软件为了应对海量数据、高并发,一般都会被设计为分布式系统。

分布式系统需要解决很多不同领域的问题。

  • 系统原理面试题
  • 基础理论
  • 核心技术
    • 缓存 - 关键词:进程内缓存分布式缓存缓存雪崩缓存穿透缓存击穿缓存更新缓存预热缓存降级
    • 消息队列 - 关键词:重复消费消息丢失消息顺序性消息积压
    • 分布式存储 - 关键词:读写分离分库分表迁移扩容
    • 分布式事务 - 关键词:2PC3PCTCC本地消息表MQ 消息SAGA
    • 负载均衡 - 关键词:轮询随机最少连接源地址哈希一致性哈希
    • RPC - 关键词:微服务
  • 辅助技术
    • 分布式锁 - 关键词:数据库、Redis、ZooKeeper
    • 分布式 ID - 关键词:UUID自增序列雪花算法Leaf
    • 分布式会话 - 关键词:粘性 SessionSession 复制共享基于缓存的 session 共享

计算机网络

如果你是做通信领域的开发,或者是 Web 应用的开发,那就或多或少需要了解一些计算机网络的知识 。

本人做 C 程序员时,从事过两年通信领域的开发,整理了一些基本的计算机网络知识点,汇总于此。

计算机网络面试题 💯

网络分层

理解计算机网络,首先需要从宏观层面了解计算机网络通信的分层结构。最有代表性的是 OSI 七层结构模型,但现实中更流行的是五层结构模型(本人也比较倾向于这种模型)。

了解网络分层结构,需要了解每个网络层级在网络通信中的定位,以及这个层级主要的通信设备、通信协议。

  • 计算机网络指南 - 关键词:核心概念、拓扑结构、作用范围、性能指标、体系结构
  • 物理层 - 关键词:调制、解调、数字信号、模拟信号、通信媒介、信道复用
  • 链路层 - 关键词:点对点信道、广播信道、PPPCSMA/CD、局域网、以太网、MAC、适配器、集线器、网桥、交换机
  • 网络层 - 关键词:IPICMPARP、路由
  • 传输层 - 关键词:UDPTCP、滑动窗口、拥塞控制、三次握手
  • 应用层 - 关键词:HTTPDNSFTPTELNETDHCP

重要技术

对计算机网络分层有了基本的认知后,可以根据个人的工作、学习需要,针对性的会接触到的协议或技术加深理解。

大数据

bigdata-tutorial 📚 是一个大数据教程。

架构设计

🔰 知识储备:

不想做架构师的程序员不是好程序员,也写不出好代码。

体现架构师水平的,就是其架构设计功力。架构设计当然需要一定的方式方法,但是更重要的前提是:需要对系统涉及到的计算机科学的各个知识领域有宏观、微观的认知。只有理解才会运用,这就像战士不熟悉手里的武器,怎么能充分发挥战斗力呢?

所以,架构师需要不断拓展知识储备,厚积薄发。如果是一个通信系统,需要学习计算机网络;如果是一个分布式系统,需要了解分布式系统;如果要应对海量数据,需要学习大数据;如果使用了数据库,需要学习数据库。。。

简言之:路漫漫兮其修远,吾将上下而求索

🔰 工具:

  • UML - 架构设计,不画些 UML,实在说不过去。
    • UML Cheat Sheet - 全面介绍 UML 各种图,也适合作为速查手册。

系统架构

如果把软件开发工作比作是一场战争,那么系统架构无疑是战略层面的工作。众所周知,万丈高楼平地起,系统架构就像是软件的地基,如果一开始就歪了,那么代码写得再漂亮,软件也难以成功。

软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。重点是分而治之,先将大型系统抽象为各个组件或模块;然后逐一解决各组件、各模块的功能、性能问题;最后将这些组件、模块整合成对外服务的一个整体。

设计模式

TODO:以前写的教程比较简陋,一直没有抽出时间进行整理加工。待完善。

重构

改善既有代码的设计

关键词:过长函数、过大的类、基本类型偏执、过长参数列、数据泥团、switch 声明、临时字段、被拒绝的馈赠、异曲同工的类、发散式变化、霰弹式修改、平行继承体系、过多的注释、重复代码、冗余类、纯稚的数据类、夸夸其谈未来性、依恋情结、狎昵关系、过度耦合的消息链、中间人、不完美的库类

前端技术

前端编程教程 📚 - 不会前端的后端不是好后端,这里是二手前端技术的总结。

软件工程

工具

效率提升

方法论,是人们认识世界、改造世界的方法的理论。同样,项目管理、编程、写文档都应该有一定的方式方法,帮助我们合理、高效、快速的达成目标。

License

本博客所有文章除特别声明外,均采用 License: CC BY-NC-SA 4.0 许可协议。

About

:dart: 个人博客

https://dunwu.github.io/blog/

License:Other


Languages

Language:CSS 51.6%Language:JavaScript 47.0%Language:CoffeeScript 0.7%Language:Shell 0.7%