本文为 2021 年 6 月知识总结。

编码总结

C / C++

使用sscanf检查不确定的输入参数:

    char name[8] = {0};int type = 0;int threadnum = 0;int total = -1;// 注:先检查多的,再检查少的int num = sscanf(cmd, "%s %d %d %d", name, &type, &threadnum, &total); if (num != 4){num = sscanf(cmd, "%s %d %d", name, &type, &threadnum);if (num != 3){return -1;}}

注:实践中检查参数,建议使用main(argc, argv[])的形式,好修改。

docker

修改容器的root密码

场景:下载 centos 镜像,运行之,默认为普通用户,无法切换到 root——因为不知道密码。

sudo docker exec -id -u root <容器名或ID> bash

此时进入的容器即为 root 权限。再用passwd root设置密码。此时另起终端进入容器,即可用su root切换权限。当然,也可直接用上述命令进行root权限方面的操作。

python脚本创建docker镜像

知识点:执行命令,执行命令并获取返回值,字符串为空的判断。

SRC_PATH = '/home/latelee/docker-test/demo'
DOCKER_ADDRESS = "registry.cn-hangzhou.aliyuncs.com/latleee"
DOCKER_IMAGE_NAME = "busybox"
DOCKER_TAG = "latest"def buidDocker():# 可切换到目标目录#os.chdir(SRC_PATH)# 查询已存在的镜像并删除之,注:用popen获取返回的镜像IDcmd = "docker images | grep " + DOCKER_IMAGE_NAME + " | awk '{print $3}'"imageid = os.popen(cmd).read()#print("cmd %s %s" % (cmd, imageid))if len(imageid) != 0:print("found docker image, remove it")cmd = 'docker rmi ' + imageidos.system(cmd)print("start build  docker in %s" % (SRC_PATH))# 使用绝对路径cmd = "docker build -t " + DOCKER_ADDRESS + "/" + DOCKER_IMAGE_NAME + " " + SRC_PATH# 前述切换目录,则可用此命令#cmd = "docker build -t " + DOCKER_ADDRESS + "/" + DOCKER_IMAGE_NAME + " ."#print("build cmd: %s " % (cmd))ret = os.system(cmd)if ret == 0:print('build docker ok')else:print('build docker failed')

SQL

查询 sqlite3 数据库所有表名:

SELECT name FROM sqlite_master where type='table' order by name

编码其它

Makefile

继续总结 Makefile 知识:

某工程需编译为 32 位程序和 64 位程序,因为有2套目标系统。原来的工程使用 eclipse 编辑和编译。接手后改为 Makefile 编译,为方便个人使用,研究如何在 Makefile 中自适应 2 种不同位数的系统。

在 shell 脚本中可如下方法判断系统位数:

BITS=`getconf LONG_BIT`
BITS="  --$BITS"bit

根据所在系统,上述输出结果为32bit64bit,此字符串可用于生成版本号头文件。

在 Makefile 中如下使用:

ARCH = $(shell getconf LONG_BIT)DEFS    += -DARCH=$(ARCH)ifeq ($(ARCH), 32)
CFLAGS += -I/usr/local/sqlite/sqlite-x86/include/
LDFLAGS += -L/usr/local/sqlite/sqlite-x86/lib/ -L/usr/local/uuid/uuid-x86/
endif

这样就能根据不同的系统使用不同的库目录。

另外,目标系统中,32 位为 debian 系统,64 位为 centos 系统,本想用 Docker 实现同一虚拟机的编译,但因为版本不好找,放弃之。再者,工程有大量不再使用但未删除的代码,大部分变量、函数近似,只是相差几个字符或日期,如foofoo_Ifoo_2020,导致一定的阅读障碍——刚刚看过的代码段,切换了文件,又看到相同的,过一会,还能看到相同的。目前暂不敢动。

版权

github上有个外国网友在一个几年前的项目上咨询协议,因为当时代码是没有版权声明的——现在大部分代码都没有,看了些帖子,大意是没有声明版权的话,默认是私有不开源的。考虑之后,还是要将自己仓库加上声明的。对其它人友好,对后续维护亦友好。目前暂定是 BSP 协议,限制比较少。

BSD:允许商用、私用(共开亦可)。带原有的版权文件,修改后的代码不用做说明。不能用作者名字做推广。

一般知识

研发思考

写代码久了,发现自己不敢突破,不追求编程技巧,而是追求可维护性、可读性。有时候,发现一些问题后自然会去重构,但重构后发现达不到预期,因为有些隐藏得很深的业务点,自己并没有掌握了解,贸然修改,只会浪费时间。所以,只要不出问题,不会主动去改,但像代码风格命名这种影响编程效率的,不在此列。在修改过程中,则根据实际情况**部分重构 **。

领域设计:先对某领域有一定认知,进行总结概括,理清逻辑,再进行设计。个人见解:应该不合适,编码多年,接触了不同领域的行业,但自己那套学习知识的方法和编写的代码,或多或少都能应用上。——因为会总结积累,从而形成自己的知识库,以应对不同的领域/业务。而且更重要的一个原因,自己并没有在一个领域中深耕。可能自己对业务研究不深,沉淀不够,才得出以上结论。

本月学习及计划

其它点滴

自体检出结果,打完2针疫苗,外包人员取消餐补后,家里那位问什么时候买房,又和老爸老妈小吵一次,工作和生活都没动力了。但并没有耽误公司的事,晚上加了几次小班,上周末加了一整天的班(早上8点到公司至下午6点离开),在百年献礼中也算出了一点微不足道的力。

李迟2021年6月知识总结相关推荐

  1. 李迟2021年12月知识总结

    本文为 2021 年 12 月知识总结. 研发编码 测试发现,不同语言对浮点数的存储和处理不太相同,比如1.5,有的语言存储的可能是1.49999999999,有的可能是1.500000001.这样四 ...

  2. 李迟2021年11月知识总结

    本文为 2021 年 11 月知识总结. 研发编码 C / C++ 无. golang 保留小数点后2位,假定在原数值基础上上浮10%(即1.1倍),但不进位. // 使用Sprintf有些情况会导致 ...

  3. 李迟2021年10月知识总结

    本文为 2021 年 10 月知识总结. 研发编码 C / C++ 无. golang 写了数字签名.数字信封的测试示例,了解了 RSA .AES 加解密,知道 AES 的密钥长度必须大于16字节. ...

  4. 李迟2021年9月知识总结

    本文为 2021 年 9 月知识总结. 研发编码 C / C++ 无. golang 跟时间转换有关的几个片段: exTime := "20210901"mytime, _ := ...

  5. 李迟2021年8月知识总结

    本文为 2021 年 8 月知识总结. 编码总结 C / C++ 产生随机数示例二则. 产生给出范围,并指定数量的随机数.即给定数组(实为向量),其内可预先定义有数值,也可以为空,产生随机数时,需保留 ...

  6. 李迟2021年7月知识总结

    本文为 2021 年 7 月知识总结. 编码总结 C / C++ 读取文件,在得到一行字符串中查找中文: int readIFile2Map(const char* filename) {string ...

  7. 李迟2021年4月知识总结

    前言: 上一篇类似的文章,是2011年的3月份,看了下当时写的内容,除了代码外,还有其它思考,但后面越来越少了,年纪大了,想的东西少,也没什么好写了,现在重拾起来,觉得十分有必要,可以将每个月的实践. ...

  8. 李迟2022年1月知识总结

    本文为 2022 年 1 月知识总结. 研发编码 Golang golang中中文字符长度为3,如下示例中,判断某字段中文开头是否为"广西"二字,如是则舍去,只保留后面的字符串,如 ...

  9. 李迟2022年2月知识总结

    本文为 2022 年 2 月知识总结. 研发编码 Golang Linux linux 系统可用 nc 命令来模拟 Socket 服务端和客户端.已在工作中应用到. 在后台执行valgrind时,可用 ...

最新文章

  1. URL加随机数的作用
  2. Python入门学习(四)
  3. 折纸机器人的步骤图解_儿童节特辑丨为你精选二十款超好玩的折纸玩具,这么多总有你的菜!...
  4. SEO【总结】by 2019年5月
  5. microsoft vbscript编译器错误怎么解决_win7系统ie应用程序错误怎么办 ie应用程序错误解决方法【详解】...
  6. Java程序运行时间的计算
  7. 王道考研系列 计算机考研 ——机试指南(第二版) 笔记(一)
  8. 如何阅读Java源码?已收藏以备后用
  9. 电子系统综合设计作业笔记
  10. python从入门到入魔(肝3天总结的3万字经验)
  11. 解决 array subscript has type char 错误
  12. 【Java 8 新特性】Java 8 Collectors:reducing 示例(List分组取最值)
  13. 软件评测师题库--操作系统基础知识
  14. 后台接口统一返回类型-ResponseBodyAdvice
  15. 相机上的这个自定义功能太好用了
  16. Matlab标题加变量
  17. UART串口发送卡在UART_WaitOnFlagUntilTimeout()函数出不来
  18. 01 words sentences BYOD
  19. 数据挖掘算法与原理(第三版)
  20. Linux命令:wget

热门文章

  1. MFC开发IM-字符串转换大全
  2. Eclipse创建Maven父子项目
  3. 说出来你可能不信,谷歌一年要给苹果交200亿保护费。
  4. 谷歌Pixel 6系列正式发布:搭载自研Tensor SoC 规格超骁龙888
  5. Twitter进军NFT领域 发布并赠送7款NFT数字艺术品
  6. 马云终于露面了!发表千字演讲
  7. 飞书上线“程序员友好”功能 迎接1024程序员节
  8. 6.18张朝阳再次直播带货    现拌现吃凉拌槐花上演“回忆杀”
  9. iPhone 12“概念视频”曝光:被恶搞的太惨了
  10. 称新手机是“二手货” 消费者起诉要求三倍赔偿