程序员如何优雅地解决线上问题?

2023-11-05

身为一个程序员,遇到线上问题那都是家常便饭的事儿。

如果你在深夜看到一群同事围在一起,他们是在共同探讨什么哲学问题么?非也,他们一定是遇到了线上BUG。

线上问题只要影响到了核心业务流程那便是事故,所以一旦事故发生,无论你在约会,还是周末打游戏,甚至是在睡觉,只要接到了来自公司的电话,那只能赶紧连上公司网络加班了。

BUG分类

线上问题是复杂多变的,我们一般将bug分为系统级别和业务级别bug。

系统级别bug

业务部署在整套系统上运行,一旦出现系统级别bug则业务会被严重拖垮。如CPU爆满、服务不可用、甚至服务器宕机等都属于系统级别的bug。

如果是CPU100%,那是由哪个线程,哪个类,甚至是哪个方法导致的?

若是业务流程正常但是部分服务性能拉跨,那么如何快速定位到问题在哪儿?

因为是线上发生的事儿,所以重点在于如何迅速解决

以下分享我最常用的一些问题排查工具。

业务级别bug

如何定位到业务bug?

出现了业务bug那就纯纯的是开发或测试的锅了。

bug确定后第一步一定是先看日志,只要你写需求的时候日志打的全,一般出现了问题日志或者告警都会第一时间推送。

通过日志我们可以定位到bug对应代码的位置,但这仅仅是第一步,因为你只知道哪里出了问题,并不知道代码出了什么问题(除非一眼就能看出)。

所以下一步,看数据,数据是业务应用的核心。若通过日志和页面表现查看到你的主流程是没有问题的,那么下一步就是要确定表的数据是否有问题,数据存在bug的表现会是各方面的,可能是用户反馈,也可能是流程错误,这要取决于你表的设计。

切记!!线上数据是重中之重,当你决定要修复数据,在处理之前一定要做好备份,这样起码可以保证事情不会变的更糟。一般情况下修改线上数据这种活都需要你写好SQL,然后经过leader审批再交给DBA来操作,一定不要干出删库跑路这种事哟。

假设验证了你数据是OK的,那么问题就极大可能出现在了代码层面

当代程序员最难过的瞬间无非就是有一个非常紧急的线上bug需要你来解决,但是摆在你面前的却是一堆屎山代码!!

修改业务bug最重要的是要将bug点修改掉并且保证其它业务还能正常运行,这是牵一发而动全身的事情,否则bug只会越改越多。

所以平时应该预知到这些风险,做好代码设计。总结一下定位业务bug的正确步骤:

方案设计

一般公司都有自己的代码设计规范。比如由外到里包装代码,每一个方法都要有对应的职责,并且一个方法不要超过100行,一个类不要超过1000行代码等。清晰的结构可以让你和他人更好地review代码,避免看起来一头雾水。

写业务逻辑有两种方式,一种就是简洁明了的线性逻辑,另一种就是通过封装代码来减少代码耦合提高内聚性,也就是我们说的设计模式的使用。两种方式各有优缺点,但是工作多年了咱写的代码也不能直里直气的,多少得带点”艺术“对吧?推荐一下我经常使用但是也不会特别复杂的设计模式。

当然了这也能够体现出你在公司的不可替代性!

做好事故复盘

都说小事故伤身,大事故提桶。。一般发生事故后写一张事故单是不可避免的。除了详细描述好事故发生的经过,背锅人,解决方案,后续的事故跟进也是一系列流程的事,多则需要数周去跟进。事故的发生对于团队的技术发展和成型往往起着积极推进作用,所以对于每一个团队来说事故一定是不可避免的。每次事故发生我们都要思考如何完善系统,打破技术壁垒。并且遇到事儿也不要慌,如果是大问题,那么首先背锅的一定是leader!

其实呢一般公司最喜欢的是能快速解决问题的员工,即便这些问题可能是由你创造的。

最后免费分享给大家一份Python全套学习资料,包含视频、源码,课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 在这里插入图片描述在这里插入图片描述

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 在这里插入图片描述

五、Python练习题

检查学习结果。 在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 在这里插入图片描述在这里插入图片描述

这份完整版的Python全套学习资料已经打包好,需要的小伙伴可以戳下方链接免费领取

读者福利《Python全套学习资料》,戳这里免费领取!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员如何优雅地解决线上问题? 的相关文章

随机推荐

  • 【华为OD机试真题 JS】靠谱的车

    标题 靠谱的车 时间限制 1秒 内存限制 262144K 语言限制 不限 程序员小明打了一辆出租车去上班 出于职业敏感 他注意到这辆出租车的计费表有点问题 总是偏大 出租车司机解释说他不喜欢数字4 所以改装了计费表 任何数字位置遇到数字4就
  • [Scala]001-初识

    Scala 发音 sk l 取自于 Scalable 可伸缩 可扩展的 Language简写 01 基本概念 1 多范式 多种编程方法 目前有四种程序设计方法 面向过程 面向对象 函数式 泛型 编程范式 programming paradi
  • latexit使用教程

    必备条件 下载MacTex mpkg zip并安装 写好test bib文件和test tex文件
  • Flutter一天一控件之ListTile(列表的实现)

    ListTile简介 Flutter中的ListTile控件是一种常用的列表项控件 它可以用于显示列表中的每一个项 通常包含标题 副标题 图标等内容 ListTile控件的外观和行为类似于Android中的ListView中的列表项 一个简
  • 基于相干解调法和基于相位比较法的2DPSK数字通信系统 MATLAB Simulink仿真

    1 课程设计目的 通过课程设计 巩固已经学过的通信原理课程中有关数字调制系统的知识 加深对相关知识的理解和应用 学会应用Matlab Simulink工具对通信系统进行仿真和调试 设计与实现的过程中充分利用图书馆和网络资源 提高发现问题和自
  • linux虚拟机中和主机三种网络连接方式的区别

    在介绍网络模式之前 关于网络的几个简单命令的使用 ifup eth0 启动网卡eth0 ifdown eth0 关闭网卡eth0 etc network interfaces 网络配置文件 etc init d networking 网络服
  • 软件实训之从调研到设计,产品设计的从0到1

    软件实训之从调研到设计 产品设计的从0到1 内容关键词 调研 设计 产品 课程 软件项目实训 授课老师 张森鹏 新浪ID sunlifestyle 中城投丝路 720科技 知识来源 网络资源汇总整理 张森鹏讲课视频汇总整理 在互联网产品开发
  • 滴滴社招三面(已拿offer)

    一面 项目 基础技术 算法都有 项目部分 1 业务流程 2 具体负责的部分 3 工作职责 4 碰到的问题 以及怎么解决的 每个问题展开说 技术部分 1 JVM内存模型 具体细节 结合实际说每个空间的作用 2 哪些垃圾回收算法 各个垃圾回收器
  • 如何给家人购买保险

    一 保险的本质 保险是为了防范 分散风险 保险的本质是杠杆 是风险对冲 和风险转移工具 杠杆 用低成本的投入 获得风险发生时 高额的索赔 买保险就是买一份协议 一纸合同 二 保险的分类 保险主要有两大类 分别是社会保险和商业保险 社会保险主
  • 计算机网络重点知识解析(2)

    计算机网络重点知识的总结 接上一篇文章 文章目录 HTTP协议 HTTP协议简介 HTTP请求响应的步骤 HTTP常见状态码 GET请求和POST请求 Cookie和Session HTTPS协议 Socket 简介 总结 HTTP协议 h
  • Mybatis的xxxMapper.xml文件节点的statementType属性说明

    概述 在xxxMapper xml文件中可以使用statementType标记使用什么的对象操作SQL语句 说明 StatementType取值说明 1 STATEMENT 直接操作sql 不进行预编译 获取数据 gt gt Stateme
  • 给模型的模块添加触摸点击等交互事件

    给camera添加组件 Component Event Physics Raycaster 给模型添加碰撞体 选中要交互的模块 Component Physics Box Collider 调整collider的size直到合适 最后同时给
  • Windows下python(conda)加载spatialite模板

    如果在python调用spatialite的函数 报错no such function MBRContains ST Contains python则需要加载spatialite扩展 共两步 1 先在The Gaia SINS federa
  • java创建request_java ->HttpServletRequest

    HttpServletRequest HttpServletRequest概述 我们在创建Servlet时会覆盖service 方法 或doGet doPost 这些方法都有两个参数 一个为代表请求的request和代表响应response
  • [JSP暑假实训] 三.MySQL数据库基本操作及Servlet网站连接显示数据库信息

    本系列文章是作者暑假给学生进行实训分享的笔记 主要介绍MyEclipse环境下JSP网站开发 包括JAVA基础 网页布局 数据库基础 Servlet 前端后台数据库交互 DAO等知识 前一篇文章讲解了MyEclipse环境下创建JSP注册表
  • Java锁性能提高(锁升级)机制总结

    锁的使用很难避免 如何尽量提高锁的性能就显得比较重要了 锁偏向 所谓的偏向锁是指在对象实例的Mark Word 说白了就是对象内存中的开头几个字节保留的信息 如果把一个对象序列化后明显可以看见开头的这些信息 为了在线程竞争不激烈的情况下 减
  • 机器学习极好的入门学习视频推荐

    首先说明本人最早看的机器学习视频是吴恩达的机器学习后来发现并不适合我 如果你以前了解过一些算法 不妨看看我以下推荐的视频 对于一点都不了解机器学习的小白 那就更要看我推荐的视频了 当然吴恩达的机器学习也很好 但是相信我 看下面我推荐的视频是
  • wikiextractor 提取维基百科语料报错的解决办法

    我提取维基百科语料的时候 刚开始使用的wikiextractor 后来发现总是报错 于是就没有用了 由于很多人都在问我是怎么提取的 现在把代码公布下 代码不是我写的 是从一个网站找到的 由于太久了 忘记了网站的地址 就没办法贴原网址了 如果
  • 登录验证码由servlet实现

    简单的登录验证码由servlet实现 创建包util 类ImageServlet package util import javax imageio ImageIO import javax servlet ServletException
  • 程序员如何优雅地解决线上问题?

    身为一个程序员 遇到线上问题那都是家常便饭的事儿 如果你在深夜看到一群同事围在一起 他们是在共同探讨什么哲学问题么 非也 他们一定是遇到了线上BUG 线上问题只要影响到了核心业务流程那便是事故 所以一旦事故发生 无论你在约会 还是周末打游戏