前端真的可以这么水吗?

335 天前
 Karte

如题,OP 在一家小公司。公司里面有几位前端,现在有前端对接蓝牙设备的需求。且通讯格式已经固定。

在最近他们开发时在百度或者 chatgpt 搜索如何编解码 16 进制,而且和其他前端讨论这个问题。

然后我就看到了令人震惊的代码,他们把收到的数组数据转成字符串,然后再通过截取字符,通过字符串匹配解码,或者在把这字符通过 parse 转为 实际的十进制

最离谱的是,当你问起为什么不用位运算,与或非,数组之类的。他们很有气势的说:前端不学进制转换。

离谱吧,当看到他们的命名更高血压,都是拼音首字母。不过!还好加了备注。

14204 次点击
所在节点    程序员
133 条回复
binge921
335 天前
水的还是蛮多的 至少我的环境是这样 我现在就是 混就混吧 也过了掰头技术的年纪 只要别影响我就行了
rivercherdeeeeee
335 天前
@Karte 世界本来就是个草台班子
Karte
335 天前
@Marlon 协议是私有的,这个不好放出来. 大体结构就是如下:

接收的是 UintArrayBuffer

```javascript
function decode(buffer) {

var result = {
"success": true,
"message": "成功",
}

if (buffer.length < 15) {
result['success'] = false;
result['message'] = "数据长度不符合最低要求."
return result;
}

// 切除无效数据, 直到获取到指定字符.
while ((buffer[0] !== 0x00 || buffer[8] !== 0x00)) {
buffer = buffer.slice(0, 1);
}

if (buffer.length < 15) {
result['success'] = false;
result['message'] = "无有效数据."
return result;
}

var offset = 0;

// 长度
var dataLength = ((buffer[offset] << 8) | buffer[offset + 1]) & 0xFFFF;
offset += 2;

// CRC
var data = buffer.slice(offset, offset + dataLength);
offset += dataLength;

// 校验 CRC
var crc = (((buffer[offset] << 8) & 0xFF00) | (buffer[offset + 1] & 0xFF)) & 0xFFFF;
var calcCrc = _calculateCRC16(buffer.slice(0, offset));

//
if (crc !== calcCrc) {
result['success'] = false;
result['message'] = 'crc failed. receive: ' + crc + ", calculate: " + calcCrc
return result;
}

return {
"succes": true,
"message": "成功",
"hex": byte2Hex(buffer),
"decode": {

}
};
}
```
weixind
335 天前
🤔 和你对接的大概率水平和工资都和你差不多。
Cooooooode
335 天前
昨天还听朋友吐槽同事命名用 a,b,c 的
Genshin2020
335 天前
位运算是我高中时候打算写一个贪吃蛇小游戏时候学的,

至于与或非,是了解电路的时候先知道这个概念的,然后写代码也有与或非就多去接触一下,发现和电路是一样的,到现在知道了计算机的与或非,电路是计算机的爸爸。

我是后端转的前端,转前端以后,几年内没和蓝牙对接过,等小程序出来以后,才开始用 JS 处理蓝牙信息。

我同事毕业后就是前端,她对这些确实欠缺一些,很多概念就是课本上的,实际使用就懵了。

我就写了一份很详细的文档,然后开个分享会,讲解前端是如何进行数据处理的,包括不仅限于后端擅自做主把 2 个字段合并成一个,让前端没有办法正常数据回显,蓝牙和各种协议的数据如何对接,和海康这种文档拉垮的玩意怎么进行联调。

可能是这样的事情做多了,有一天就成技术经理了。

然后一次裁员就把自己填上了,可算远离这帮大傻逼了。

哦耶。
Genshin2020
335 天前
@Genshin2020 电路学习也是高中
equationl
335 天前
楼上各位说的很对,不要因为一个技术点就否定一个人或一个岗位,毕竟每个人擅长的地方都不一样。

但是,前提是要能沟通啊,知道自己不会,你问人,你百度,你找 AI 都行,你至少得有点基本的分辨能力吧。

自己不会还要死鸭子嘴硬才是真的有问题。

譬如我司,有一个 Flutter 开发,昨天早上刚来上班,前端(有一部分功能是 H5 ,由 Flutter 提供 WebView 运行)开发就告诉他,某个模块需要调用原生拍照之后把照片传给 H5 ,但是现在 Flutter 传的是本地文件路径,H5 无法使用。

这个 Flutter 开发就炸锅了,咬死说 H5 可以使用,是前端自己不会写,并且举例说以前都是这样用的,以前都能用,你怎么不能用了。

前端让他传 blob ,他:传不了,我就只有这个字符串(文件路径),你爱要不要!

前端改口,行行行,那你上传到公司的 OSS ,把图片地址给我总行了吧,他:我这里上传之后拿到的是 OSS:// 的链接,怎么给你 HTTP 链接嘛,给不了!(上传文件用的第三方库,返回的地址是一个自定义的 OSS 地址,只要调 API 逆向一下就是 HTTP ,但是显然,他连文档都没看过,就一口咬定转不了 HTTP )

从早上一直吵到下午四五点,还在吵。

前端无语了,都不和他啰嗦了,他可能觉得前端不理他就是理亏吧,于是像个胜利的大公鸡似的雄赳赳的去找前端负责人打小报告。

前端负责人过来了解了情况,明确告诉 Flutter 开发,H5 确实不能直接读取本地文件,你需要传二进制数据或者把文件编码成 base64 传字符串过来才行。

然后这个负责人指着我说,他以前和我们对接过类似的场景,你可以问他当时是怎么处理的(我是原生安卓开发)。

但是我可不想惹一身骚,所以我快速的给他说了一下 webview 是一个沙盒系统,是没有权限访问本地文件的,我当时那个场景文件不大,所以我是直接编码成 base64 之后传 base64 字符串给 H5 的。

果然,他打死不信,作势要和我大吵一架。

说着还打开以前的代码说,以前就是传的文件路径,怎么没问题?

我一看,笑死我,他所谓的以前都可以的代码只是拦截了 H5 的文件选择请求,然后由原生端处理文件选择,但是本质上还是由 H5 端发起的文件选择啊,和现在原生主动发文件给 H5 能是一回事?

我给他解释了,他还是不信,还一直在这里吵吵嚷嚷的。

我受不了,就给他说,你自己试一下不就知道了,然后就尿遁了。

等我遁完回来,他还在这里吵吵嚷嚷。

咱就是说,你不懂别人给你解释了你不信就算了,你自己不会求证吗?是百度要收钱还是谷歌要收钱啊?
Karte
335 天前
@magewu1223ll 的确我不会动画. 但是进制就和阿拉伯数字一样, 在计算机行业中可以说是 "9 年义务教育" 的内容. 而动画则是之后的所要学习的不同行业知识.
ztty
335 天前
@sillydaddy 除了符号位,有且只有一个 bit 是 1 就行
v2ye
335 天前
你这样我就要找那张又不是不能用的图了。
jspatrick
335 天前
在我的理解来看,大部分时候无论前后端,都是调包侠...
whyrookie
335 天前
这个问题其实很多后端如果不用的话估计也不大明白,如果是非科班的,可能有个印象。
yinxs2003
335 天前
有一说一,不用位运算我不觉得有啥,术业有专攻而已。PS:能解决问题的方案就是好方案
whyrookie
335 天前
@whyrookie 如果是科班的
Karte
335 天前
@twofox 只有偏底层的才需要这种运算, 其他时候基本上不需要. 不过在算法中进行数值替换一般会用到 ^

```go
old := 10
new := 11

old = old ^ new
new = old ^ new
old = old ^ new

fmt.Println("after OR values: ", old, new)
```
azhong123
335 天前
无聊。。。工作而已。。。。。
Karte
335 天前
@yinxs2003 的确, 解决是第一优先级. 但是在解决完成后, 需要考虑到是否可扩展, 是否清晰等因素二期重构. 否则就是💩
pandaPapa
335 天前
用的 uni-app? 它自带那个编译器, 打印 Uint8Array 什么都看不到 , 必须得先转字符串才能看到 是不是因为这个?
ltaoo1o
335 天前
@Karte

1 、我大学毕业 8 年了,有人问我一个高中化学题,我做不出来,他评价我「太水了,还大学生呢,这不是高中基础知识吗」
2 、放下助人情结 尊重他人命运

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1095486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX