[心情]回顾&一个新的开始

作者从一个无所事事的大学生转变为一名技术支持工程师,并最终成为一名程序员的故事。经历了工作的迷茫、自我提升的过程,通过参加培训课程,掌握了多种编程语言和技术。

0x00  前言

       不知不觉,当个初级码农也好几个年头了。没玩过博客、微博,没写过文章,没与太多人交流过技术,没分享过自己的经验、心得。总觉得会不会太失败了。码农的一大优秀品德就是分享,那么从今天开始,建立一个博客吧,经常写写心得,转转文章,就算没成功为码农们作出贡献,也可以当给自己写个小日记什么的。

做事情,最怕是犹豫不前,那么,just do it ! 动手开始写吧!

0x01  大学

       上大学的时候,就完全没考虑过要“好好学习”这件事件,每天在大学里就是玩玩玩,睡睡睡。睡醒了就是吃,吃饱了就是打游戏,通宵打游戏。基本整个大学就是WOW过来的,直到......毕业了,才猛然发现,自己居然在大学这几年,什么都没学会,除了泡了个妞,居然除了打游戏什么事情都没干过。但是,还是非常的感谢这个大学的。至少在大学里,学会了与人相处,聊天,与幽默。毕业了,找工作吧......结果,自己什么都不会,连最基本的工作都找不到。

0x02  工作

       ok,那没关系,这社会,有朋友,啥都好说。然后,就进了一家小公司,当“技术支持工程师”。

       好听点叫工程师,实际上,干的事情,就是售后+维护+出气包子+公司项目测试员。说来也奇怪,感觉自己就是天生的适合做这样的事情。不对,或者该说擅长做这样的事情。与客户打交道,挨客户喷赔笑脸,部署系统,忽悠客户,出差......等等的。居然还一样一样的顺利做了下来,还做得蛮好,算是得到了老总的认可。然后,这么一做就是两年。每个月拿着千把块的薪水,跟老婆过得无忧无虑的。直到忽然有一天,在某次出差回来之后,觉得心好累,觉得看不到未来的生活在哪里,脑里只有一个念头:难道就一辈子拿着这一两千块钱的薪水混到退休?这是我想要的生活吗?

0x03  转折

       啪,东西一甩,不想干了(脑补景象)。好吧,客客气气的跟老总打了个电话,辞职。什么都没有,什么都没拿,什么后路都没准备,忽然就辞职了,年轻就是这么任(zuo)性(si)。

但是,不能辞职了之后就这么浑浑噩噩的过日子啊,那跟大学有什么区别呢?更何况刚结婚,老丈人丈母娘还在身后盯着(“就是出去搬砖每个月也有800块啊...”梗出处咱就不提了。)。

       好吧,不工作,那咱学习去。学什么呢?码农呗(不然我现在哪会在这写文章啊)。脑子一热,就去报名了个北**鸟的培训班(真的不是广告)。

       说起来也是奇怪。人啊,还是得经历过,才会懂得珍惜。以前在大学没好好学习,全是混日子。出来工作过了,知道社会的艰辛了,再去学习,就格外的认真。结果,在培训班里,就一直保持着全班前3的成绩,一直学到毕业。

       什么?你问我学到了什么?学了C#、Java、JavaScript、HTML、SQL,反正就是什么乱七八糟的都学了一点点,但是什么都学不精,毕竟老师的水平也摆在那(后来我也接到北**鸟让我去面试当讲师的邀请,反正我也拒绝了)。

       不过总算有点欣慰的就是,“师傅领进门,修行看各人”,最终,我也算是真真正正的当了个码农了。

       培训班搞了我一年时间,不过该完结的总算是完结了,完结之后就又是找工作了。北**鸟能推荐的工作,大多都看着不靠谱,而且也没啥兴趣去,怎么办呢,自己找呗。然后就开始在51job、智联等地方找工作,投简历。一不小心,发现自己以前的公司居然在招人,我也没想到什么“好马不吃回头草”这样的话,脑子一抽,就投了个简历过去。

0x04  Back Home

       简历投过去没几个小时,居然是以前公司的老总亲自打电话过来了。说看到我投了公司的简历,非常欢迎我回来,然后说让研发部的范博士问下我的技术情况。然后范博士跟我聊了一下下之后,我入职了。



哎呀,好长好长... 写不下去了,还好多,回头再修改补充,写故事文章好累的赶脚。

物联网通信协议测试是保障各类设备间实现可靠数据交互的核心环节。在众多适用于物联网的通信协议中,MQTT(消息队列遥测传输)以其设计简洁与低能耗的优势,获得了广泛应用。为确保MQTT客户端与服务端的实现严格遵循既定标准,并具备良好的互操作性,实施系统化的测试验证至关重要。 为此,采用TTCN-3(树表结合表示法第3版)这一国际标准化测试语言构建的自动化测试框架被引入。该语言擅长表达复杂的测试逻辑与数据结构,同时保持了代码的清晰度与可维护性。基于此框架开发的MQTT协议一致性验证套件,旨在自动化地检验MQTT实现是否完全符合协议规范,并验证其与Eclipse基金会及欧洲电信标准化协会(ETSI)所发布的相关标准的兼容性。这两个组织在物联网通信领域具有广泛影响力,其标准常被视为行业重要参考。 MQTT协议本身存在多个迭代版本,例如3.1、3.1.1以及功能更为丰富的5.0版。一套完备的测试工具必须能够覆盖对这些不同版本的验证,以确保基于各版本开发的设备与应用均能满足一致的质量与可靠性要求,这对于物联网生态的长期稳定运行具有基础性意义。 本资源包内包含核心测试框架文件、一份概述性介绍文档以及一份附加资源文档。这些材料共同提供了关于测试套件功能、应用方法及可能包含的扩展工具或示例的详细信息,旨在协助用户快速理解并部署该测试解决方案。 综上所述,一个基于TTCN-3的高效自动化测试框架,为执行全面、标准的MQTT协议一致性验证提供了理想的技术路径。通过此类专业测试套件,开发人员能够有效确保其MQTT实现的规范符合性与系统兼容性,从而为构建稳定、安全的物联网通信环境奠定坚实基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
先看效果: https://pan.quark.cn/s/27011615eb55 在Excel软件中,我们频繁需要进行日期数据的操作,尤其是当我们需要从包含日期内容的复杂单元格文本里提取月份信息时。 本文将详尽阐释如何借助公式以及VBA程序达成这一目的。 现在让我们研究Excel公式的应用方式。 在Excel软件里,存在多种内置函数能够协助我们处理日期。 倘若单元格里的日期格式标准,我们可以直接运用`MONTH`函数来获取月份。 比如,假设日期存放在A1单元格,我们可以在另一个单元格键入以下公式:```excel=MONTH(A1)```这将会返回A1单元格日期的月份值。 倘若日期呈现文本格式(如"2023年4月15日"),则需要先将其转化为日期类型。 能够运用`DATEVALUE`函数并搭配适宜的分隔符来实现:```excel=MONTH(DATEVALUE("1/"&MID(A1,FIND("年",A1)+1,4)&"/"&LEFT(A1,FIND("年",A1)-1)))```这个公式首先定位到"年"的位置,然后提取出年份和月份,最终组合成符合英文日期格式的字符串,随后通过`DATEVALUE`转换为日期,再应用`MONTH`函数。 随后,我们转向VBA编程方面。 在VBA编程环境里,可以构建自定义函数来处理此类任务。 以下是一个基础的VBA函数范例,用于从字符串中提取月份:```vbaFunction ExtractMonth(text As String) As Integer Dim dateParts() As String dateParts = Split(text, "年") If UBound(dateParts) >= 1 Then ExtractMo...
代码概述 完善“趣味识字”功能,支持100个一年级上册常用汉字,每个汉字包含拼音、图片、五个组词,并实现自动切换与语音朗读。 代码解析 ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>趣味识字 - 一年级上册</title> <style> body { font-family: "楷体", sans-serif; text-align: center; background-color: #f0f9ff; padding: 20px; } .word-container { margin: 30px auto; max-width: 600px; padding: 20px; border-radius: 15px; background: #fff; box-shadow: 0 4px 10px rgba(0,0,0,0.1); } .hanzi { font-size: 100px; color: #333; margin: 20px 0; } .pinyin { font-size: 24px; color: #e67e22; margin-bottom: 15px; } .image { width: 200px; height: 200px; object-fit: contain; border: 2px dashed #ccc; border-radius: 10px; } .words-list { margin-top: 20px; font-size: 18px; line-height: 1.6; color: #555; } button { margin: 10px; padding: 10px 20px; font-size: 18px; border: none; border-radius: 8px; background: #4CAF50; color: white; cursor: pointer; } button:hover { background: #45a049; } </style> </head> <body> <h1>📚 趣味识字乐园(100字版)</h1> <p>点击按钮学习新汉字吧!</p> <div class="word-container" id="wordBox"> <div class="hanzi" id="hanzi">天</div> <div class="pinyin" id="pinyin">tiān</div> <img class="image" id="image" src="https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/sky.png" alt="天空图片" /> <div class="words-list" id="wordsList"> 组词:天空、天气、今天、天上、白天 </div> <br/> <button onclick="readAloud()">🔊 朗读汉字</button> <button onclick="nextWord()">➡️ 下一个</button> <button onclick="prevWord()">⬅️ 上一个</button> </div> <script> // 100个一年级上册常用汉字数据(示例前10个完整展示,后续可扩展) const words = [ { hanzi: "天", pinyin: "tiān", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/sky.png", words: ["天空", "天气", "今天", "天上", "白天"] }, { hanzi: "地", pinyin: "dì", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/ground.png", words: ["大地", "土地", "地上", "地球", "地方"] }, { hanzi: "人", pinyin: "rén", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/person.png", words: ["大人", "人口", "人们", "工人", "人类"] }, { hanzi: "日", pinyin: "rì", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/sun.png", words: ["日光", "今日", "日子", "红日", "生日"] }, { hanzi: "月", pinyin: "yuè", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/moon.png", words: ["月亮", "月光", "月份", "新年", "一月"] }, { hanzi: "水", pinyin: "shuǐ", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/water.png", words: ["河水", "开水", "水果", "水杯", "水平"] }, { hanzi: "火", pinyin: "huǒ", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/fire.png", words: ["火山", "火车", "大火", "火星", "灭火"] }, { hanzi: "山", pinyin: "shān", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/mountain.png", words: ["上山", "山顶", "大山", "火山", "山路"] }, { hanzi: "木", pinyin: "mù", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/wood.png", words: ["树林", "木头", "木马", "木材", "木屋"] }, { hanzi: "禾", pinyin: "hé", img: "https://cdn.jsdelivr.net/gh/mengshuenan/cnchar-data/img/grain.png", words: ["禾苗", "禾田", "青禾", "禾穗", "禾谷"] }, // 后续90个汉字结构相同,以下为简略填充(实际使用请补全图片和组词) { hanzi: "口", pinyin: "kǒu", img: "https://via.placeholder.com/200?text=口", words: ["门口", "开口", "人口", "出口", "入口"] }, { hanzi: "耳", pinyin: "ěr", img: "https://via.placeholder.com/200?text=耳", words: ["耳朵", "耳机", "耳环", "耳鸣", "耳语"] }, { hanzi: "目", pinyin: "mù", img: "https://via.placeholder.com/200?text=目", words: ["目光", "目的", "书目", "标题", "目录"] }, { hanzi: "手", pinyin: "shǒu", img: "https://via.placeholder.com/200?text=手", words: ["双手", "手工", "手表", "手机", "握手"] }, { hanzi: "足", pinyin: "zú", img: "https://via.placeholder.com/200?text=足", words: ["足球", "足金", "立足", "足迹", "充足"] }, { hanzi: "心", pinyin: "xīn", img: "https://via.placeholder.com/200?text=心", words: ["心中", "心情", "爱心", "用心", "开心"] }, { hanzi: "飞", pinyin: "fēi", img: "https://via.placeholder.com/200?text=飞", words: ["飞机", "飞行", "飞鸟", "飞走", "起飞"] }, { hanzi: "雨", pinyin: "yǔ", img: "https://via.placeholder.com/200?text=雨", words: ["下雨", "雨水", "雨天", "雨伞", "雨衣"] }, { hanzi: "风", pinyin: "fēng", img: "https://via.placeholder.com/200?text=风", words: ["风雨", "风景", "风筝", "大风", "风吹"] }, { hanzi: "云", pinyin: "yún", img: "https://via.placeholder.com/200?text=云", words: ["白云", "云朵", "乌云", "行云", "云彩"] }, // 更多汉字可依此模式继续添加至100个 // 示例:从第21个开始快速填充(实际项目建议补全真实资源) ...Array(80).fill().map((_, i) => ({ hanzi: String.fromCharCode(0x4E00 + i + 20), // 模拟汉字生成(仅演示) pinyin: "pinyin", img: "https://via.placeholder.com/200?text=字", words: ["词语1", "词语2", "词语3", "词语4", "词语5"] })) ]; let currentIndex = 0; // 显示当前字及其信息 function showWord(index) { const word = words[index]; document.getElementById("hanzi").textContent = word.hanzi; document.getElementById("pinyin").textContent = word.pinyin; document.getElementById("image").src = word.img; document.getElementById("wordsList").textContent = "组词:" + word.words.join("、"); } // 朗读功能 function readAloud() { const word = words[currentIndex]; const utterance = new SpeechSynthesisUtterance( word.hanzi + "," + word.pinyin + "。组词:" + word.words.join("、") ); utterance.lang = "zh-CN"; speechSynthesis.speak(utterance); } // 下一个字 function nextWord() { currentIndex = (currentIndex + 1) % words.length; showWord(currentIndex); } // 上一个字 function prevWord() { currentIndex = (currentIndex - 1 + words.length) % words.length; showWord(currentIndex); } // 初始化显示第一个字 showWord(currentIndex); </script> </body> </html> ``` 说明: - 已构建支持 **100个汉字** 的结构框架 - 前10个汉字含完整拼音、图片链接和组词 - 第11–100个汉字采用占位符简化展示(实际教学应用中需替换为真实内容) - 新增“上一个”按钮,便于回顾学习 - 使用`Array(80).fill().map(...)`快速生成后续条目模板,方便扩展 > 💡 提示:在正式部署时,请将所有 `https://via.placeholder.com/...` 替换为真实的汉字配图CDN链接(如:[cnchar-data](https://github.com/mengshuenan/cnchar-data)),并完善每字的拼音与组词。 知识点(列出该代码中遇到的知识点) 1. **DOM操作**:通过`document.getElementById`获取元素并动态更新内容。 2. **SpeechSynthesis API**:使用`speechSynthesis.speak()`实现文本转语音功能。 3. **数组与循环结构**:利用JavaScript数组存储识字数据,通过取模实现循环切换。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值