如题,OP 在一家小公司。公司里面有几位前端,现在有前端对接蓝牙设备的需求。且通讯格式已经固定。
在最近他们开发时在百度或者 chatgpt 搜索如何编解码 16 进制,而且和其他前端讨论这个问题。
然后我就看到了令人震惊的代码,他们把收到的数组数据转成字符串,然后再通过截取字符,通过字符串匹配解码,或者在把这字符通过 parse 转为 实际的十进制
最离谱的是,当你问起为什么不用位运算,与或非,数组之类的。他们很有气势的说:前端不学进制转换。
离谱吧,当看到他们的命名更高血压,都是拼音首字母。不过!还好加了备注。

我见过最水的,我写的接口接受 post 参数,前端用 get 请求,我说换成 post 文档写的是 post 。下午前端还告诉我说请求不通,我过去瞅了一眼,用 post 请求 但传参还是 Get Query 。

因为这个是公司唯一的前端,当天下午我找领导说我不干不了要走(入职第二天,不敢想和这样的前端工作一年会不会被气死)

太正常不过。前端不学二进制。前端不会二进制。前端不会串口通信。。就因为这三个不会,我司硬是整出来一个 golang 做中间件把串口转成 websocket 。喂到嘴里。
不排除有牛人。但 99%的。。抱歉。。。看不起。

别说前端了,有的后端连 hex 字符串和 byte 数组也搞不清楚。16 个字节长度的密钥,经常直接只用了前面 16 个字符作为密钥,都不转为 byte

别开地图炮,前端后端都有水货,和岗位没关系,只是你恰好碰到的水货是前端。
位运算这种东西平时用的少我觉得正常,前端用的少就更正常了,不过这个转成字符串确实是奇葩。。。不会的话查一下就好了。

不能从一个技术点上就否定某个人整体的技术水平,每个人都有自己不懂的点。

前端在数据处理尤其是二进制这块确实很差,这是前端业务特性导致的。只要他能很好地沟通流程、完成需求,做到自己应该做的,就不水

所以一个会 JS 的后端是夺末的重要‼️

CSS 我写不过你,JS 你不行得有人能顶上才行。

别开地图炮,前端后端都有水货 我后端也不会

别从一个点就否定整个人,每个人都有自己不熟悉的领域。你说的这些东西前端平时接触少是事实,但你因为这个就瞧不起 99%的前端,有没有想过很多前端熟悉的领域你自己也不清楚呢

点进来前:我看看有多水,让我看看笑话。
点进来后:哦,这个我也不会。

湖南人嘴角都有一颗痣吗?

你也说了,这是家小公司,厉害的哪会去这呀

没办法,php 也是这样,晚清时期都是用 ascii 字符串来表示二进制。还好到了现代 js 才有了 TypedArray ,比 php 处理二进制更方便点

太难教了,直接写几个函数照抄,ArrayBufferToBase64 Base64ToArrayBuffer ,NumberToArrayBuffer ArrayBufferToNumber ,ArrayBufferToHex HexToArrayBuffer 全家桶

xiangyuecn.github.io/Recorder/assets/%E5%B7%A5%E5%85%B7-%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E5%92%8C%E9%9D%99%E6%80%81%E5%88%86%E5%8F%91Runtime.html?jsname=lib.js-binary-bytes

我通过“嵌入式 奇技淫巧 sillydaddy” 搜索到了 v 友面试遇到的一个题目给楼主看能不能做出来:

“请用一个 C 语言表达式判断某个数是否为 2 的 N 次幂 ”

前端确实用不到进制与非
我是在手搓了小端序读写后才发现 nodejs 里内置了 readInt16LE
人家拼音命名是菜了点,但是前端的事情你少管

人没有办法去熟悉自己不常用的东西

感觉 99%的前端没有对接蓝牙的需求 我刚开始也搞了很久 没有 gpt 之前 网上能搜到的资料感觉也不多

位运算效率高我们不否认,但前端的职责是更高效地完成需求,而不是硬套底层逻辑。如果非要按嵌入式的思路写,那你来前端搞一搞响应式布局、跨平台兼容和性能优化试试?不同领域有不同的开发习惯,技术选型要看团队和项目需求,强行按嵌入式标准衡量前端,那不如你们直接用 C 写前端?省得看不惯我们的实现方式。

js 那破语言,搞不好你一顿优化真不如人家直接字符串来的省心,不了解的语言还是不要乱加评论,你以为很简单的事实际上一堆坑

这个挺有意思,你们的前端页面是运行在浏览器的吗?是的话怎么通过浏览器跟串口通信?

话说我问 chatgpt: JavaScript 编解码 16 进制 数据,给我答案是:在浏览器中,你可以使用 parseInt 和 String.fromCharCode 来手动实现 16 进制的编解码。doge

查到了,是 Chrome.Serial

要是前端让你用 css 改个动画你不会,前端会笑你连动画都不会画吗?

术业有专攻罢了,不要动不动嫌弃别人。

正常用不到的技术不知道是正常的,但是有更优解不使用,别人好心提醒还不改正,这是态度问题

总感觉你们上班带着一股莫名的戾气,动不动就要挂人。我是比较友好的,再菜的人我都要教会他,因为我知道,十年前我也是个菜狗。

放心,后端大水逼也多的是

的确, 是我遇到的都是水货.

会不会那些专注图像处理、音频处理才会特地学二进制处理? 那我直接用其他语言写一个转换的接口

所以这个操作有严重的性能问题么,不谈数据大小、不跑性能测试在这夸夸其谈性能效率真不是在耍流氓么
别到时候一顿操作猛如虎,还不如 v8 在底层帮你做的优化

既然是前端,为什么要懂你说的这些东西,懂前端领域不就行了,懂了你能多给钱吗还是什么,最少的工资你要人家什么都要懂来服务你

水都能说一两个你不知道的点出来,然后说后端真的可以这么水。脾气好能干活就行啊

是否科班?什么学历?是否外包?薪资多少?加班情况如何?福利待遇如何?

抛开这些去讨论一个人的技术能力那不就是耍流氓吗?

再者,要怪你也要怪你们公司,为啥要怪这个人?是你们公司根据自己的筛选标准筛选了这个人,这个人有何罪之有?

一定要搞清楚真正的敌人,不要跟无辜的人盲目对立起来。

蓝牙用字符串通信没啥问题,很多硬件开发程序员的知识体系几十年没更新,有的协议是十进制 16 进制混着来的,别提多恶心。

我并不觉得, 因为进制转换是计算机的入门课程

的确术有专供, 但是进制转换不是计算机入门的课程吗? 而且这辐射所有计算机语言, 这不是术有专攻, 是基础不牢.
进制转换不是入门吗?

不聊性能, 我自己也通过 js 写出编解码的一个版本放在了 git 上.

不, 当建议他们使用数组或者 UintArray 等进行规范化处理时, 他们说: 还不如我这个字符串呢?

进制转换不是入门吗?

进制转换是入门,只能说你们公司的这几位比较水

的确, 心情太差了, 血压太高. 在这里先给前端同学说声对不住了.

我想看一下 js 写出编解码代码,能贴一个地址吗?

965, 无任何加班,薪资都在 16 左右.

我写这么多年 Java ,也没有用过进制、与或非。。一直都是 CURD boy 。但是有需要的话,还是能查一查,用起来的

他们薪资要的不低啊.

水的还是蛮多的 至少我的环境是这样 我现在就是 混就混吧 也过了掰头技术的年纪 只要别影响我就行了

世界本来就是个草台班子

协议是私有的,这个不好放出来. 大体结构就是如下:

接收的是 UintArrayBuffer

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": {

 }
 };
}

🤔 和你对接的大概率水平和工资都和你差不多。