• 李迟2022年7月工作生活总结


    本文为 2022 年 7 月工作生活总结。

    研发编码

    近来编码,基本都是业务、自动化测试相关的,在写代码时,主要考虑便捷性,快速出结果。性能方面不怎么考虑。像写C++,如果没有什么特殊的要求,字符串都是用string类型,涉及格式化,则还是用数组,结合sprintf,但最后还是用string,因为组装比较方便。另一方面,也不怎么纠结字节大小,一般数字用int存储,也不考虑深拷贝还是浅拷贝,原则就是,怎么写代码快就怎么来。像实现web服务器,对外提供接口,优先考虑 golang,解析json文件亦然。

    C++

    某个txt文件,使用=分割字段和值,需读取解析出来。使用了C++的getline函数,但当文件格式为\r\n结束时,会出错,会把\r当成普通字符读取,导致值错乱,而结束符为\n时正常。为了使用那套代码,在读取一行字符串时,判断最后一字符,如果为\r则删除。

    int readInputFile(std::string filename)
    {
        std::string str;
        std::ifstream ifs1(filename);
    
        if (!ifs1.is_open())
        {
            printf("open [%s] failed: %s\n", filename.c_str(), strerror(errno));
            return -1;
        }
    
        while (getline(ifs1, str))
        {
            if ((int)str.size() == 0 || str.at(0) == '[' || str.at(0) == ';' || str.at(0) == '#')
                continue;
            if (str.at((int)str.size()-1) == 0x0d) str.pop_back();
    
            std::vector linestr = splitString(str, "=");
            int len = (int)linestr.size();
            if (len != 2)
            {
                continue;
            }
    
            std::string key;
            std::string value;
            key = linestr[0];
            value = linestr[1];
    
            if (key.compare("foo") == 0)
            {
                printf("foo = [%s]\n", value.c_str());
                
            }
            // ... 其它字段
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    go

    某工程需要使用测试数据,但又不想直接在代码中固定。可在指定目录使用特殊的文件名称以作区别,随机读取其中一个作为测试用例数据。思路:

    • 先获取符合要求的文件数量N;
    • 再从[0, N)中取一随机数,得到某个文件的索引,使用包math/rand即可;
    • 再读取该文件。

    如此一来,不用再修改代码,而是添加不同测试用例文件即可达到目的。

    func CmdCmd() {
    	fmt.Println("test...")
    	fmt.Printf("file: %v\n", getTestFileData("postcase_"))
    	fmt.Printf("file: %v\n", getTestFileData("getcast_"))
    	fmt.Printf("file: %v\n", getTestFileData("update_"))
    }
    // 固定测试目录
    var testdata = "testdata"
    // 获取指定目录N个指定文件格式中的随机一个,返回内容
    func getTestFileData(patten string) (ret string) {
    	ret = ""
    	//  获取目录下所有符合的文件数量
    	files, err := com.GetAllFilesOneDir(testdata)
    	if err != nil {
    		return
    	}
    	var myfiles []string
    	for _, item := range files {
    		if strings.Contains(item, patten) {
    			myfiles = append(myfiles, item)
    		}
    	}
    	// 防止随机数函数小于0出错
    	if len(myfiles) == 0 {
    		return
    	}
    
    	// 随机一个
    	rand.Seed(time.Now().UnixNano())
    	randidx := rand.Intn(len(myfiles))
    	// fmt.Printf("files: %d %d %d\n", len(files), len(myfiles), randidx)
    
    	// 读取之
    	buffer, err := com.ReadFile(myfiles[randidx])
    	ret = string(buffer)
    
    	// ret = myfiles[randidx]
    
    	return
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    工作记录

    在国产化工控机移植任务中,因为 onvif 视频播放有问题,最终定位到 gsoap 版本不兼容,于是重新编译,花了一定的时间。后机缘巧合下,拿到一台前前前前东家的相机进行测试,开机的LED灯状态没变化,依然是我设计的红灯、黄灯,绿灯的顺序,所幸还记得默认IP、默认账号,不需要额外的协助。离开那家公司时,大锤才三个月,现在他妹妹都两岁半了,时间过得真快。

    主任工找了我一次,语重心长分享了编码、测试心得,并问我如何做好测试,如何管理代码,因为有个较重要较关键的工程要交接,——这也是主任担心的原因,我受宠若惊,也诚惶诚恐,如履薄冰,这是个挑战,也是个机遇。

    生活记录

    月初,网购了几种不同的蟑螂药,都一一试了,战果颇丰,清除几次后,半夜就没再见小强到处散步了。但不知道能坚持多久。

    中旬,在大锤多次要求下,办了一张小区的游泳卡,共30次,但下个月底过期,所以周末又多了一个事:带大锤和大妞去游泳——当然现在更多的是玩水。

    天气越来越热,用电量持续上升,但又不能天天呆家里,当然也不能长时间呆户外。某个周末全家去公园,天空时而放晴,时而下雨,看完荷花盛开,又爬小山坡听松涛阵阵,顺便找蝉壳和松果,让大锤大妞知道夏天的气息。

    这段时间,看到新闻报道有较多负面的事:打人,取不出钱,篡改数据,烂尾,断供,停贷。我的不幸,是在去年利率处于较高(可能是最高)水平时买房。我的幸运,是当初没有在五象入手期房而是购买二手房、现在有份稳定的工作(虽然是外包,虽然工资延后近一个月发),所以现在有地方住,有钱交房贷。我和父母通话谈了这些事,父母说得最多的是没有多余的钱支持,但不用担忧他俩生活,管好我自己,孙子的钱不能太省。居安思危,我对工作的态度,可谓比家人还好,叫加班二话没有,叫搬东西二话不说,熬夜写代码是常事。

    思想方面

    互联网太泛了,聚集了不同的观点的人,可发表不同的看法。我关注但很少参与网上的事,目前我的重点是:努力工作写代码,顺便写点文章,偶尔看书提升自己,教育小孩,带小孩玩,买菜,做家务。人的精力有限,挑主要的做即可。

    我在网上分享了软考的事,很人质疑,但没过多回复,因为没必要。如质疑证书真假,对我而言,能靠证书评职称或者有补贴就好,不用对外交待。如质疑技术,大可看写的文章和 github 的代码。如质疑我不懂带小孩,我也无须过多辩解和证明,小孩开心即可(当然不听话时该打还得打)。

    业余研究

    掘金平台上个月的日更活动得了全勤奖,共发表31篇文章,奖品在月末如期收到,大锤和大妞喝上新鲜果汁了,我的拖鞋码数也符合,后面整理些东西,和电饭煲一起寄回老家。

    计划实现一个播放器,初步设想中,使用 Qt、ffmpeg、SDL编写,把以前写的YUV播放、H264裸码流播放、各种格式转换功能等加进去。目前迫切需要的是音视频分离,音视频截取功能。主要是要把下载的音乐、儿歌转成音频,减少小孩看手机的机会。

  • 相关阅读:
    SpringMVC的执行流程
    “从部署到优化,打造高效会议管理系统“
    牛客网刷题——运算符问题
    nacos2.0.2漏洞分析及解决方法
    建站系列(六)--- 后端开发语言
    第9章 Spring Boot整合JPA 与 JpaRepository 基础方法介绍
    C语言经典100例题(50)--#include 的应用练习
    阅读开源软件源码的心得体会
    智能配电室运维云平台
    Maven - 客户端 Nexus 配置
  • 原文地址:https://blog.csdn.net/subfate/article/details/126091393