当前位置: 首页 > news >正文

前端如何丢掉你的饭碗?

对于后端而言,我们常有“删库跑路”的说法,这说明后端的操作对于信息系统而言通常影响很大,可以轻易使信息系统宕机、崩溃,直接导致项目失败。所以,不要去逼后端程序员!

作为前端程序员,我们似乎自己也认为前端相比于后端,代码的安全风险更低。一种常见的看法是,前端随便整,掀不起大波浪!大不了是一些显示性问题!

我们可以这样开玩笑,但作为一名前端开发者,良好的安全意识仍然是必需的,事实上一些问题不仅仅作用于显示层面。更现实一些的层面是,你如何确保你的代码运行稳定,不会给公司、客户带来损失,进而丢掉自己的饭碗?

这不是危言耸听,如果意识缺乏,前端是有可能引发重大问题,丢掉自己的饭碗的。本文试图分析,前端究竟哪些操作可能存在重大风险,以便对各位有所启发。

第一章 代码兼容性考虑——意识不足可能丢掉你的饭碗

有人可能认为,代码兼容性问题,即便出现影响也不大,其理由是:

  • 并非开发者逻辑漏洞,而是客户端、平台、设备千差万别所致
  • 大部分的用户是完全正常的
  • 代码兼容性问题无法得到100%的保障

这么说,实际上是低估了代码兼容性的影响。我们不否认,许多兼容性对用户影响相对比较小,或者说影响的用户数量很少,又或者影响的是那些使用陈旧设备、客户端版本较低、相对不那么重要的客户。

但,代码兼容性是有可能导致你丢掉饭碗的,理由是

公司都是追求效益至上,一旦因为兼容性问题影响到几分之一以上的用户,这仍然算是极为严重的问题。比较典型的案例有,ios平台不支持某属性,安卓某版本以下的chrome不支持某属性、低于某版本的app不支持某jsbridge调用等,直接导致客户端白屏。因此给开发者的建议是 ,对于js、正则、css不熟悉的写法,一定需要查明兼容性,明确影响范围,尽量避开不熟悉的写法。譬如,正则断言、findLastIndex这都是笔者身边真实发生过引发内部复盘的重大代码性事件。当然,就影响而言,一般css兼容性导致的影响会小很多。

一旦到这种层级,内部复盘追责几乎是少不了的。影响到几分之一的用户,对于公司的客户收入可能是影响很大的。、

第二章 业务兼容性考虑——老用户直接崩溃的重大事件

业务兼容性,是一个极容易被程序员忽略的角度,尤其前端程序员。更准确的讲,这应该是产品经理、程序员共同考虑的问题。

如果产品经理在业务兼容性考虑上有所欠缺,那么程序员也应该做适当考虑和提醒,切忌不做思考的直接编码。

下面是一些典型的案例:

  • 业务层面要求修改分享链接:这时程序员应该高度敏感,这是可能导致存量用户崩溃的重大事件。这就是说,虽然软件系统的所有展示都已经替换成了新链接,但对于以前已经分享出去的老链接,用户仍然会使用,如果老链接直接不可用,就会导致大量崩溃。用户完全过渡到接受新链接,必然是需要一个过程,不可能是一蹴而就的。这个事件在笔者身边曾多次发生过。
  • 业务层面需要调整表单字段。这时,程序员应该意识到,对于老用户而言,他的一些字段已经存入数据库,而在表单调整时,他的数据可能会被读出,自动填入表单,但由于表单字段的调整,有可能直接导致显示层面、流程层面的直接问题,这也属于业务兼容性的重大事件。

这种业务兼容性事件,往往是影响到存量用户的使用流程,影响不可谓不大。

第三章 业务流程把控——评审不细致可能丢掉你的饭碗、

听起来似乎评审和丢饭碗没有直接的关系,这也就是个工作方式的问题,但实际上,在评审中,如果不够细致,可能导致技术上无法实现、项目延期,就有可能引发严重后果了。

就笔者亲身经历而言,在流程式交互设计时,产品经理容易想当然的将不同流程放至不同页面,又存在跨页面的大量判断和数据传递。这时,一名专业的程序员应该斩钉截铁的驳斥产品经理的不合理设计。笔者曾经两度迁就这种不合理的设计,导致项目存在延期风险、技术上过于复杂,虽然最终完成了,但仍让我心有余悸。、

所以,如果你不能从专业的角度,纠正产品经理的复杂设计,那么你可能最终在实现上出现困难,项目延期,最终导致内部复盘,责任会挂在你的身上。

第四章 区分环境意识——不良习惯可能会让你丢掉饭碗

在开发中为了效率或者方便测试,往往会写定一些配置,这些配置仅仅适用于开发、测试环境,一旦上线,则需要替换成真正的线上配置。

这就要求我们在上线之前,一定要做好记录,哪些是需要做替换的,并在上线前替换,一旦忘了替换,则会引发线上问题。

譬如,某购物软件给用户的推送消息变成了“测试”,则可以想象开发人员可能是忘了替换一些开发中写死的配置,这无疑会给用户带来不良影响。

第五章 权限配置——缺乏意识可能会直接导致上线失败

 对于公司的服务器而言,一般会配置权限,因此一些开发和测试环境能跑通的情况,到了正式环境机器上面,由于权限限制,就无法跑通了。

前端比较典型的有csp限制等,这些限制可能使得正式环境上面脚本无法运行,从而功能无法正常使用。

这要求开发者提早熟知公司服务器的权限限制,提早与运维部门确定,做好上线权限配置方案。

第六章 攻击防范——缺乏意识可能引发系统被入侵

  • 前端一般需要防范xss攻击,这要求代码中一定不能给恶意用户植入恶意代码的机会,如果缺乏这种意识,当公司遭遇攻击,就离开丢掉饭碗不远了。当然,远远不止xss攻击。
  • 另外,公司的安全系统可能要求不能直接使用第三方脚本,要使用则必须经过安全审查,如果不经安全审查直接调用第三方脚本,则可能是触发安全红线的行为,可能会让你丢掉饭碗。
  • 除此之外,公司可能有一些敏感信息不能暴露给用户,这时需要做屏蔽或者替换处理。譬如,敏感域名不能向外暴露。

作为程序员,一定需要时时有安全意识,尤其对于小型企业,安全上面可能不够完善,这时程序员切记不能墨守成规不去防范,安全上面需要反复深入研究。

第七章 卡死——死循环可能让你丢掉饭碗

前端虽然不直接操作用户数据库,但在程序中会存在大量定时器、循环、遍历的场景,这时,程序员如果不能充分掌控自己代码的边界,那么就很可能写出死循环这样的代码,而一旦出现这种情况,那么最轻也会内部复盘!

对策是,凡是循环、遍历、定时器都需要清晰掌控你的边界。

莫言前端足够安全,稍有不慎,仍然可能丢掉你的饭碗。

那么,你还知道前端哪些会引发职场生存危机的事件呢,欢迎留言讨论。

相关文章:

前端如何丢掉你的饭碗?

对于后端而言,我们常有“删库跑路”的说法,这说明后端的操作对于信息系统而言通常影响很大,可以轻易使信息系统宕机、崩溃,直接导致项目失败。所以,不要去逼后端程序员! 作为前端程序员,我们似…...

栈、队列、优先级队列的模拟实现

优先级队列的模拟实现栈stack的模拟实现push()pop()top()size()empty()swap()stack总代码队列queue的模拟实现push()pop()front()back()empty()size()swap()queue总代码优先级队列(堆)push()pop()top()empty()size()swap()priority_queue总代码deque的了解栈 在CSTL中栈并不属…...

JMM内存模型

JMM内存模型JMM内存模型定义三大特性原子性可见性有序性volatile语义JMM规则操作系统实现术语缓存一致性要求缓存一致性机制写传播事务串行化重排序as-if-serial 语义(像是有序的)happens-before 原则happens-before 原则的八大子原则内存屏障总结finalf…...

Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花

文章目录1、背景2、命令浏览器-双生姐妹花2.1、姐妹花简介2.2 、验名正身2.3、常用功能选项3、常用实操3.1、发送请求获取文件3.1.1、抓取页面内容到一个文件中3.1.2、多个文件下载3.1.3、下载ftp文件3.1.4、断点续传3.1.5、上传文件3.1.6、内容输出3.2 、利用curl测试接口3.3 …...

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…...

Linux - 进程控制(创建和终止)

1.进程创建fork函数初识 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程返回0,父进程返回子进程id,出错返回-1getpid()获取子进程id&#xff0c…...

依赖注入~

依赖注入之setter注入: 依赖注入是IOC具体的一种实现方式, 这是针对资源获取的方式角度来说的,之前我们是被动接受,现在IOC具体的实现叫做依赖注入,从代码的角度来说,原来创建对象的时候需要new&#xff0…...

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时,为解调(输入);否则为调…...

Go语言异步下载视频

异步下载mp4视频列表 下面是一个简单的Go语言示例,用于异步下载视频。我们将使用goroutines来实现异步下载,并使用sync.WaitGroup来等待所有下载任务完成。此示例依赖于net/http包来执行HTTP请求。 package mainimport ("fmt""io"…...

前缀树(字典树/Trie) -----Java实现

目录 一.前缀树 1.什么是前缀树 2.前缀树的举例 二.前缀树的实现 1.前缀树的数据结构 1.插入字符串 2.查找字符串 3.查找前缀 三.词典中最长的单词 1.题目描述 2.问题分析 3.代码实现 一.前缀树 1.什么是前缀树 字典树(Trie树)是一种树形…...

​申请专利需要具备什么条件

​申请专利需要具备什么条件 在我国,如果创造出来了新的发明都可以申请专利权,一旦申请成功之后,自己的发明就受到了法律的保护,任何人不得以违法的手段进行侵犯。那么申请专利需要具备什么条件?今天律赢时代网就为大家…...

【C++】一篇带你搞懂C++“引用”

前言在C语言的学习中,并没有引用这个概念,但是在C中,加入了引用这个概念,说明引用也是很重要的,但是我们怎么理解引用呢?我是这么理解的,例如在水浒传中,108个英雄好汉都是自己的外号…...

蓝桥杯刷题冲刺 | 倒计时19天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接: 抓住那头牛 - C语言网 (dotcpp.com…...

Java每日一练(20230321)

目录 1. 出现次数最多的字符 🌟 2. 最后一个单词的长度 🌟 3. 两数之和 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 出现次数最多的字符并…...

【三维几何学习】从零开始网格上的深度学习-3:Transformer篇(Pytorch)

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 从零开始网格上的深度学习-3:Transformer篇引言一、概述二、核心代码2.1 位置编码2.2 网络框架三、基于Transformer的网格分类3.1 分类结果3.2 全部代码引言 本文主要内容如下&#…...

一、基础算法3:二分 模板题+算法模板(数的范围,数的三次方根)

文章目录算法模板整数二分算法模板浮点数二分算法模板模板题数的范围原题链接题目题解数的三次方根原题链接题目题解算法模板 整数二分算法模板 bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid 1, r]时使用: int b…...

Spring 源码解析 - Bean创建过程 以及 解决循环依赖

一、Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDefinition 存放进了 beanDefinitionMap 容器中,那 Bean 是…...

移除元素(双指针)

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…...

76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)

界面介绍界面支持: 透明 白色 黑色 渐变 单色 静态图 动态图侧边栏支持:抽屉、带折叠、多模式场景控件已集成: 暗黑风格 高亮风格、并附带个人自定义控件及开源demo白色场景如下所示:单色暗黑风格如下所示:用户自定义皮肤如下所示:皮肤预览如下所示:b站入口:https://www.bilibi…...

Python生日蛋糕

目录 前言 底盘 蛋糕 蜡烛 祝福 前言 Hello,小伙伴们晚上好吖!前两天博主满20岁啦(要开始奔三辽呜呜呜),这几天收到了不少小伙伴们的祝福,浪漫的小博主想送给大家一份不一样的生日蛋糕&#xff0c…...

QT 如何提高 Qt Creator 的编译速度

如何提高编译速度,貌似是一个老生常谈的话题。对于Qter而言,如何提高QT Creator 的编辑速度是一直都是大家所期盼的。本文也是查阅了各路大神的方法后整理出来的,希望对各位有所帮助。 1、在*.pro文件添加预编译机制 QT官方给出的示例&…...

STM32之震动传感器、继电器介绍及实战

目录 一、震动传感器介绍及实战 二、编程代码实现 1、gpio.c---------初始化GPIO口引脚函数 2、调用中断服务函数 3、中断服务函数 4、中断服务回调函数 5、把上述的中断服务回调函数,放入main主函数里 6、结果演示 三、继电器介绍及实战 一、震动传感器介…...

RK3588平台开发系列讲解(显示篇)RK3588 平台 的DP介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、功能特性二、 DP 输⼊三、DP 输出四、 代码路径沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 RK3588 平台 DP 的使⽤与调试⽅法。 一、功能特性 RK3588 的 DP ⽀持 1.4a 版本的 DP 协议,最…...

【Java】i++和++i的实现原理

文章目录 i++案例反编译分析扩展 x = x++我们接下来从字节码层面分析: 不了解字节码的可以参考这篇:【精通JVM】字节码指令全解 i++案例 package org.example;public class Main {public static void main...

第十四届蓝桥杯三月真题刷题训练——第 18 天

目录 第 1 题:排列字母 问题描述 运行限制 代码: 第 2 题:GCD_数论 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 3 题:选数异或 第 4 题:背包与魔法 第 1 题&#x…...

软件测试拿了几个20K offer,分享一波面经

1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断…...

spring2

1.Spring配置数据源1.1 数据源(连接池)的作用 数据源(连接池)是提高程序性能如出现的事先实例化数据源,初始化部分连接资源使用连接资源时从数据源中获取使用完毕后将连接资源归还给数据源常见的数据源(连接池):DBCP、C3P0、BoneC…...

【Linux】网络编程套接字(中)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…...

手撕数据结构—队列

队列队列的话只允许在一端插入,在另外一端删除。插入数据的那一段叫做队尾,出数据的那一段叫做队头(从尾巴插入)。因此的话队列是先进先出的。入的顺序与出的顺序的话是一样的。这个与栈是不一样的,因为栈的话就是说如…...

gdb调试工具和makemakefile工具

gdb调试工具和make/makefile工具 文章目录gdb调试工具和make/makefile工具一、gdb调试工具1.debug/release2.使用二、make/makefile1.什么是make/makefile2.编写一、gdb调试工具 1.debug/release 程序有两种默认的发布方式debug和release。release是无法进行调试的。Linux中g…...