不会填坑的程序员不是一个好程序员!

你是否经常遇到这样的情景:负责开发的项目遇到线上bug,心想这不是我的锅,先不管了,放着吧;代码写完后,隐隐感觉有问题,可程序跑得通,先用着吧;接手一个老系统,这什么破代码,算了,改吧改吧将就用吧……

今天绕过的坑明天将加倍回来:

下次再改这块代码你仍然遇上它,只能硬着头皮一行行捋代码解决;线上某种场景触发问题代码,造成意想不到的崩溃;老系统改起来太费时间和容易踩坑,不如花时间重构。

测试向你吐槽你写的bug,你否认道,这是前人挖的坑。PM改需求时说这里只加了个小功能,等到你开发时刚要挖坑,轰地掉进一个天坑里。你有没有发现,每天的工作实则是在填一个接一个的坑。

填坑力,是程序员要具备的核心技能之一。

填坑力说到底是解决问题的能力

还记得自己上一次快速成长是什么时候吗?是往做了一年的系统上CtrlC,CtrlV?还是去给人讲你熟悉的业务框架?

人无法在顺境中成长,而是在逆境中成长:新跳槽一家公司学习全新业务和技术框架,一边闯祸一边改进;公司想引进某项新技术,你被指定在一个月内完成迁移,于是你捉紧时间下班后扒技术文档,周末在家写demo……

从坑里摔倒爬起后才明白,先前遇到的问题,其实是成长机会。

几年前震惊互联网的“3Q大战”,360给腾讯挖了个天坑,腾讯艰难填坑对战。而后马化腾给员工内部信写道,如果没有360的发难,我们不会有这么多的反思和感悟。或许未来有一天,当我们走上一个新的高度时,要感谢今天的对手给与我们的磨砺。

随后腾讯改变战略发展方向,走向“开放”。

我们似乎一直活在坑里头:挖坑的挖坑,掉坑的掉坑,填坑的填坑。可不管乐不乐意,人只有努力把身下的坑填好,然后去下一个坑,如此往复,才有真正的成长。

虽然程序员通常主张“我的锅你来背,我的坑你来填”。但是低级坑请别挖:

1.天坑:不写注释

排期紧张,新人海宇匆匆忙忙地将代码堆好便申请提测。可他的TL一句话将给他打回去重写:一行注释都不写谁能看懂!

有一位开发说,注释和代码同等重要,注释要写的清楚明了,让测试甚至是PM能读懂你的代码,这才算一个合格的程序员。

2.山坑:不写接口文档

有些公司的前后端联调基本靠吼,“哥们,某参数少传了”、“这个字段得大写”、“你传这么多我没用,算了,放着吧”……

曾见过一个测试reject开发的邮件:前端没传某参数,导致流程跑不通,reject。

技术人员通常不爱写文档或者不愿意在文档上花时间,导致前后端各开发各的,没有规范标准,如需和外部系统对接时,又得捋一遍代码找接口参数。接口文档能节约联调沟通时间和减少bug引入,提高代码质量。

3.地坑:不考虑拓展功能

代码不解解耦,不考虑未来可能会拓展的设计,无疑是在给队友挖坑。

除了上面几个坑外,还有底下的挖坑指南:

不实时容错,程序只按照自己脑子“理所当然”的轨迹运行;

将判断放在一层层深不见底的逻辑里;

一个方法写了上千行,没人敢动;

从不自测。

从事java十余年,现在把架构师必须具备的一些技术总结出来一套思维导图和录制了一些相关视频,分享给大家,供大家参考。

利用业余时间学习,提升技术

需要相关资料可以关注+加群:810589193就能获取

1. 高性能架构专题

1.1. 分布式架构思维

1.1.1. 大型互联网架构演进过程

1.1.2. 架构师应具备的分布式知识

1.1.3. 主流分布式架构设计详解

1.2. Zookeeper分布式环境指挥官

1.2.1. zookeeper基础

1.2.2. zookeeper进阶

1.2.3. zk的使用举例

1.3. Nginx高并发分流进阶实战

1.3.1. Nginx模块简介

1.3.2. Nginx工作原理及安装配置

1.3.3. Nginx常用命令管理及升级

1.3.4. Nginx配置文件精讲

1.3.5. 实战线上Nginx多站点配置

1.3.6. Nginx配置优化及深入剖析

1.3.7. Nginx Rewrite规则剖析

1.3.8. Nginx日志分析及脚本编写

1.3.9. Nginx日志切割案例讲解

1.3.10.Nginx防盗链案例配置

1.3.11.Nginx日常运维及故障解决

1.3.12.Nginx构建安全HTTPS架构实战

1.3.13.企业实战Nginx+Tomcat动静分离架构实战

1.3.14.Nginx+Keepalived集群架构实战

1.3.15.Nginx+Keepalived双主架构案例实战

1.4. ActiveMq消息中间件

1.4.1. 消息中间件(ActiveMQ、RabbitMQ、Kafka)简介及对比

1.4.2. 软件下载、安装及部署

1.4.3. P2P、PUB\SUB模型详解

1.4.4. 消息确认及重发机制

1.4.5. 企业级高可用集群部署方案

1.4.6. ActiveMQ基于Spring完成分布式消息队列实战

1.5. RabbitMq消息中间件

1.5.1. RabbitMQ及高可用集群部署

1.5.2. 深入学习RabbitMQ消息分发机制及主题消息分发

1.5.3. RabbitMQ消息路由机制分析

1.5.4. RabbitMQ消息确认机制分析

1.5.5. RabbitMQ基于Spring完成分布式消息队列实战

1.5.6. 安装配置

1.5.7. 集群化与镜像队列

1.6. Kafka百万级吞实战

1.6.1. 基于ZooKeeper搭建高可用集群实战

1.6.2. Kafka消息处理过程解析

1.6.3. 基于Java语言实现Kafka生产者与消费者实例

1.6.4. Kafka副本机制及选举原理窥探

1.6.5. 使用Kafka实现日志实时上报统计分析实战

1.7. Memcached进阶实战

1.7.1. 概述

1.7.2. 开发基础

1.8. Redis高性能缓存数据库

1.8.1. Redis初入门及介绍

1.8.2. Redis主从模式

1.8.3. Redis常用命令及应用场景

1.8.4. Redis客户端

1.8.5. Redis持久化

1.8.6. 哨兵核心机制

1.8.7. 高可用集群

1.8.8. 原子性

1.8.9. 应用场景代码开发与设计分析实战

1.9. MongoDB进阶实战

1.9.1. mongodb入门

1.9.2. mongodb进阶

1.9.3. mongodb高级知识

1.9.4. 最佳实践与注意事项

1.10. 高性能缓存开发实战

1.10.1.缓存雪崩解决方案实战

1.10.2.缓存粒度控制实战

1.10.3.缓存击穿实战

1.10.4.缓存热点KEY重建优化实战

1.10.5.缓存同步实战

1.10.6.Spring-Cache开发实战

1.11. Mysql高性能存储实战

1.11.1.Mysql

1.11.2.Mycat

1.12. FastDFS分布式文件存储实战

1.12.1.文件存储实战

1.12.2.文件同步实战

1.12.3.文件查询实战

1.12.4.分布式部署实战

1.13. 高并发场景分布式解决方案实战

1.13.1.分布式主键生成方案

1.13.2.Session跨域共享实战

1.13.3.分布式事务解决方案实战

1.13.4.分布式锁解决方案实战

1.13.5.分布式单点登录 SSO实战

1.13.6.分布式调度任务实战

1.13.7.分布式配置中心

2. 微服务架构专题

1.1. 服务的前世今生

1.2. 基于分布式思想下的RPC解决方案

1.3. Dubbo应用及源码解读

1.3.1. Dubbo简介及初入门

1.3.2. Dubbo管理中心及监控系统安装部署

1.3.3. 领域驱动之如何正确划分Dubbo分布式服务

1.3.4. 通讯协议TCP、UDP、HTTP分析

1.3.5. Dubbo负载均衡机制探析

1.3.6. 如何完成Dubbo服务只订阅及只注册模式

1.3.7. 架构师必备技术之如何设计Dubbo服务接口

1.3.8. Dubbo设计原理及源码分析

1.3.9. Dubbo容错机制及高扩展性分析

1.3.10.Dubbo服务与Docker虚拟化技术集成实战

1.4. SpringBoot

1.4.1. SpringBoot与微服务的区别与联系

1.4.2. 快速构建SpringBoot工程

1.4.3. SpringBoot核心组件start、actuator等剖析

1.4.4. 快速集成Mybatis实战

1.4.5. 快速集成Dubbo及案例实战

1.4.6. 快速集成redis及案例实战

1.4.7. 构建Swagger插件实现API管理及接口测试体系

1.5. SpringCloud应用及源码解读

1.5.1. Zuul路由网关详解及源码探析

1.5.2. Ribbon客户端负载均衡原理与算法详解,与服务端负载均衡区别

1.5.3. Feign声明式服务调用方式实现

1.5.4. Hystrix服务熔断及服务降级实战

1.5.5. Eureka注册中心构件及源码分析

1.5.6. Config配置服务中心与svn、git快速集成

1.5.7. Sleuth调用链路跟踪

1.5.8. BUS消息总线技术

1.5.9. Stream 消息驱动的微服务

1.6. Docker虚拟化技术

1.6.1. Docker介绍、安装与使用

1.6.2. Docker组成

1.6.3. Docker Compose部署脚本

1.6.4. Docker Service 服务编排

1.6.5. Docker Redis分布式集群部署

1.6.6. Docker File构建

1.6.7. 通过Maven插件打包Docker镜像

1.6.8. Docker部署及运行应用程序

1.6.9. Kubernetes编配

1.6.10.基于Docker构建Mysql集群实战

1.6.11.高可用SpringCloud微服务与Docker集成实现动态扩容实战

3. 开源框架解析专题

1.1. spring5概述

1.2. Spring5 Framework体系结构

1.3. Spring5环境搭建

1.4. IOC源码解析

1.4.1. 容器基本实现和组成

1.4.2. 装配Bean的方式

1.4.3. BeanFactory源码分析

1.4.4. BeanDefinition源码分析

1.4.5. Bean生命同期

1.4.6. 依赖实现

1.5. AOP源码解析

1.5.1. 面向切面的基础

1.5.2. AOP源码分析

1.5.3. Transaction事务分析

1.5.4. Spring Cache框架源码分析

1.6. Spring MVC

1.6.1. Spring MVC的使用与流程解析

1.6.2. SpringMVC组成

1.6.3. Spring MVC的高级技术

1.6.4. 手写SpringMVC框架

1.7. Mybatis

1.7.1. Mybatis组成

1.7.2. 核心源码分析

1.7.3. 手写Mybatis框架

4. 架构师筑基专题

1.1. JVM性能调优

1.1.1. 性能优化如何理解

1.1.2. JVM内存管理机制

1.1.3. JVM执行子系统

1.1.4. 程序编译与代码优化

1.1.5. 实战调优案例与解决方法

1.2. Java程序性能优化

1.2.1. 优雅的创建对象

1.2.2. 注意对象的通用方法

1.2.3. 类的设计陷阱

1.2.4. 泛型需要注意的问题

1.2.5. Java方法的那些坑

1.2.6. 程序设计的通用规则

1.3. Tomcat

1.3.1. Tomcat线程模型分析

1.3.2. Tomcat生产环境配置

1.3.3. Tomcat运行机制及框架

1.3.4. Tomcat针对并发优化

1.3.5. Tomcat针对内存优化

1.3.6. 手写Tomcat实战

1.4. 并发编程进阶

1.4.1. 线程基础

1.4.2. 原子操作类和CAS

1.4.3. Lock、Condition和显示锁

1.4.4. AbstractQueuedSynchronizer分析

1.4.5. 并发工具类和并发容器

1.4.6. 线程池和Executor框架

1.4.7. 实现原理和Java内存模型

1.4.8. 线程安全

1.4.9. 并发项目实战

1.5. Mysql

1.5.1. 探析BTree机制

1.5.2. 执行计划深入分析

1.5.3. Mysql索引优化详解

1.5.4. 慢查询分析与SQL优化

1.6. 高性能Netty框架

1.6.1. Netty简介

1.6.2. I/O 演进之路及NIO 入门

1.6.3. Netty 开发环境搭建安装

1.6.4. TCP 粘包/拆包问题的解决之道

1.6.5. 分隔符和定长解码器的应用

1.6.6. Netty 多协议开发和应用

1.6.7. WebSocket 协议开发

1.6.8. Netty源码分析

1.7. Linux基础与进阶

1.7.1. Linux入门安装

1.7.2. Linux注意事项

1.7.3. Linux基础指令

1.7.4. Linux Jdk1.8环境安装及操作指令

1.7.5. Linux Tomcat安装与停启

1.7.6. Linux下Docker进阶讲解

1.7.7. Linux下Docker与Tomcat集成实战

5. 团队协作开发专题

1.1. Git

1.1.1. Git基本工作原理

1.1.2. Git常用操作及问题处理

1.2. Maven

1.2.1. Maven重要指令(clean、complie、test、package、install、deploy)

1.2.2. 私服-Nexus

1.2.3. Maven流行插件实战、手写自己的插件

1.2.4. 架构师如何理解Scope\Lifecycle\Phase\Goal

1.3. Jenkins

1.3.1. Jenkins服务部署

1.3.2. Jenkins持续集成

1.4. Sonar

1.4.1. 静态代码检查,代码更健壮

1.4.2. 代码走查

6. B2C商城项目实战

1.1. 系统设计

1.1.1. 架构设计

1.1.2. 数据库设计

1.1.3. 部署设计

1.1.4. 基础开发框架讲解

1.2. 用户管理子系统

1.2.1. 用户注册 登录(二维码技术)

1.2.2. 权限控制(shiro)

1.2.3. 单点登录(session统一缓存、sso)

1.3. 商品管理子系统

1.3.1. 商品管理(mongodb)

1.3.2. 商品分类(mongodb)

1.3.3. 商品发布(nosql与mysql数据同步)

1.3.4. 热卖商品排行(redis)

1.4. 搜索子系统

1.4.1. 基于ElasticSearch搜索引擎的全文检索

1.4.2. 检索需求分析

1.4.3. 检索策略

1.4.4. 索引设置

1.4.5. 分词算法

1.4.6. 命中率优化

1.4.7. 订单实时统计

1.5. 订单子系统

1.5.1. 分布式环境生成唯一编号(ZooKeeper)

1.5.2. 下单业务流程(消息中间件)

1.5.3. 订单可靠性

1.5.4. 秒杀功能(Redis)

1.5.5. 订单管理

1.5.6. 购物车功能(MongoDB)

1.6. 支付系统

1.6.1. 微信支付对接

1.6.2. 支付宝对接

1.6.3. 银联对接开发

1.7. 分布式调度系统

1.7.1. 数据统计

1.7.2. 数据同步

1.7.3. 任务调度配置

1.8. 后台系统

1.8.1. 日常管理

1.8.2. 在线IM系统 (WebSocket NIO)

1.8.3. 用户行为分析

1.8.4. 报表大数据查询优化

好了今天的干货就分享到这里了 如果你想学习上面的知识和需要以上高清导图和相关视频资料和可以加群:810589193,点击链接加入群聊【Java架构学习交流群】:https://jq.qq.com/?_wv=1027&k=5deQUBl

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容