2023年12月个人工作生活总结

本文为 2023 年 12 月工作生活总结。

研发编码

Sqlite3数据库已有表添加字段

需求:某工程因需要在数据库已有表添加一新字段,不影响原有结构。关键代码:

添加表名:
ALTER TABLE <表名> ADD COLUMN <新字段> INTEGER DEFAULT -1  // 示例为新加age,int类型

如果已存在新加字段,则执行语句会报错,错误示例:

Exec sql failed: [duplicate column name: age] [ALTER TABLE myList ADD COLUMN age INTEGER DEFAULT -1]

因此,需先判断有无此字段,关键代码:

select sql from sqlite_master where type = 'table' and name = 'myList' and sql like '%age%'

如果不存在,该语句返回为空,参见下文代码示例的results.Next()判断。

示例代码片段:

columnName := "age" // mileagesqlstr = fmt.Sprintf(`select sql from sqlite_master where type = 'table' and name = '%v' and sql like '%%%v%%'`,tableList, columnName)fmt.Printf("check column run sql: [%v]\n", sqlstr)results, err = sqldb.Query(sqlstr)if err != nil {fmt.Println("query error: ", err)return}if results.Next() == false {fmt.Printf("not found %v, will add it\n", columnName)sqlstr = fmt.Sprintf(`ALTER TABLE %v ADD COLUMN %v INTEGER DEFAULT -1`, tableList, columnName)_, err = sqldb.Exec(sqlstr)if err != nil {fmt.Printf("Exec sql failed: [%v] [%v] \n", err, sqlstr)}}

C++和Golang判断周末日期的方法

场景:指定日期,判断该日期是否属于周末(或指定的周几)。

C++中,通过localtime获取时间结构体,其中的tm_wday表示星期,16依次表示星期一星期六,0表示星期日。测试代码如下:

bool isWeekend(time_t timestamp)
{int Year = 0;int Month = 0;int Day = 0;struct tm * timeinfo = localtime(&timestamp);Year   = 1900 + timeinfo->tm_year;Month  = 1 + timeinfo->tm_mon;Day    = timeinfo->tm_mday;// 周六、周日if (timeinfo->tm_wday == 6 || timeinfo->tm_wday == 0){const char* wday_name[] = { "日","一","二","三","四","五","六" };char timestr[16] = "";snprintf(timestr, 16, "%04d-%02d-%02d", Year, Month, Day);printf("FOUND: %s 星期%s\n", timestr, wday_name[timeinfo->tm_wday]);return true;}return false;
}

Golang中,原理类似,代码如下:

func isWeekend(timestamp string) bool {myTime, _ := com.DateParse(timestamp, conf.DefaultTimeFmtT)myWeek := myTime.Local().Weekday()// 周六~周日if myWeek == time.Saturday || myWeek == time.Sunday {simpleDate := fmt.Sprintf("%04d-%02d-%02d", myTime.Year()%2000, myTime.Month(), myTime.Day())fmt.Printf("%v: %v\n", simpleDate, myTime.Local().Weekday().String())return true}return false
}

docker-compose容器健康检查

原由:容器的一java程序,时不时无故退出。因当初设计原因,该容器有2个进程,另一C++进程正常,故java程序退出容器无法重启。需添加健康检查。docker-compose.yaml文件添加healthcheck,示例如下:

    healthcheck:test: ["CMD-SHELL", "ps aux | grep foobar.jar | grep -v grep || exit 1"]interval: 20stimeout: 3sretries: 3start_period: 20s

docker-compose up -d启动容器后,进入容器,kill掉进程,容器会重启。

附:镜像基于openjdk:11-jre制作,无ps命令,拷贝虚拟机/usr/bin/ps文件对系统PATH目录中,外加基础镜像缺少的依赖库libprocps.so.4,容器中执行命令正常。

代码风格及习惯

现在主力代码语言为C++和Golang,偶尔Dephi和JS,因为经常切换语言,会出现C++代码语句省了分号;情况,在编译时才发现错误。当然这是小问题,大的问题是,不同语言风格有差异,很难同时兼顾。如if语句的花括号位置,Golang是强制性的,C++则是可选的。

对于编译,我基本上是自制mybuild.sh脚本来进行的,像Goalng,可以适用于Windows、Linux(含x86和ARM),不管哪个平台,一个命令即可编译。像C++,也是类似。两者仅是内部脚本语句不同,相同语言的工程,相差不大,很大情况仅是生成的目标文件名不而已,但对于跨平台、跨系统的工程编译,用这种方法很方便。同理,对于docker镜像也是类似的处理。

工作记录

年底忙是常态,各种忙。在几个办公点转。

某天的工作记录

某周五,早上刚出门不久,领导急call,说现场有问题,于是转道另一个驻点。到上班时间,办公室还没开门,一边等,一边想问题。想到几种可能性,但都被自己否定了。运维同事到之后,取日志,一边发给有关同事,一边分析,约半小时定位到问题,同时评估到涉及到2个业务子系统,于是向领导汇报,然后定方案,本是在下周升级的计划,提前至今天内完成。我需要针对早上的问题改一个模块源码及自测,预计今天编译明天测试的国产化代码分支也要完成(不经测试)上线。和同事讨论如何取日志找测试用例时。另一同事拉了线上会议,领导也参加,因为发生的事多,近期并行的几个事务一并讨论,耗时约2小时,结束时已近1点。会上决定,我需在下午3点提供另一个模块的测试版本,并部署好,并协助测试人员测试,再提供相同模块的另一个测试版本。

由于日常带饭,所以无须到外面吃,中午改源码,按时部署一个测试版本,在电话指导测试的同时,修改今早问题的模块代码。接着和另一同事讨论决定,一个开发自测,一个线上升级。先是指导同事熟悉服务器上的相关程序和查日志,改完测完,打包,指导同事如何升级及确认是否成功,由同事自行升级其它服务器,我同步合并国产化分支代码和编译。升级完毕,编译完毕时,已是晚上7点多了。于是联系另一同事跟试点现场人员联系升级事宜,同事在出差,半小时后发联系方式过来,联系上后已8点多,等待过程中准备好了条件,只待现场人员重启即可——原则上,不在后台由开发重启,决定权在现场。先是一台重启,观察一段时间正常后,再升级其它机器,完毕后,已是10点多了。抽一点时间和还在办公室的同事复盘,整理结果给小组长,由其汇报领导,于是打卡下班。还没出门,大锤来电,问我几时回,他要睡觉了。当我回到家,吃完路上打包的粉时,已是翌日了,大锤睡正酣,我也倒头睡了。

月底的工作记录

类似上述的,中下旬时不时发生着,其实遇事都会有计划,甚至提前做好,但计划比不上变化,又掺杂着突发事项,所以显示手忙脚乱,所幸没有导致重大生产事故。

平时和急时

其实很多事都是已经做了计划的,只是一直忙,各人步调不好统一,于是耽搁了。这次紧急事件也对我们做了提醒,晚上和一些同事讨论,一致认为要启动了,否则下次又手忙脚乱了。由于个人只是其中一份子,有些要点仅作简单描述。

环境问题:由于网络原因,需集成到一个地方办公,每天接入网络要全盘扫毒,一些策略限制,查日志也不方便。

代码分支:不同形态分支不同,有些是可以合并到同一分支的,但一直忙未做,急中会出错。比如X86、X64、ARM不同架构,其实就是加上不同的宏定义,不会涉及业务的调整。

业务:平时还是要熟悉一些基础的运维操作技巧和业务。最简单的,知道有什么业务在哪台服务器哪个目录,怎么取日志,怎么看日志。这个需要大家都有共同的认知才行,

生活记录

农行卡

因为某些原因,需要办农行I类卡,去了2次才办成。第一次中午去,提前准备了身份证、劳动合同,进门告知来意,提供资料复印,被问办卡目的。填个人信息表,再填一张表承诺不拿银行卡做某某事,再扫码认脸,看一段视频,再下载银行APP,填写个人信息,填写办卡申请,被告知过几天再去,前后耗时约一顿饭工夫。隔几天的中午再去,进门告知来意,提供身份证,经理拿材料再问事由。取号等候,办卡时,输入若干次密码,签字若干次,由于不是工资卡,被限额5K。前后耗时约半小时,最后拿到卡。翻阅材料时,发现在认脸时,后台系统自动识别风险,我是正常的,前面那个人是高风险。

橄榄枝

月初,校友通过微信找到我,请我下馆子,相互聊了很多,工作经历、养家、育娃。师兄向我抛了橄榄树,月薪比现在高,还提供无息贷款。若在前3年,我会毫不犹豫奔赴,但我已经安于现状,没有斗志了,只好婉拒了。   
当年我向领导主动请辞时有句名言:有多少钱过多少钱的日子。目前条件去不了名山大川,但不妨碍和大锤大妞看记录片,也不妨碍我带大锤去青秀山和邕江。

育儿记录

秋天

大锤要背诵课文《秋天》,偶然机会看到有部叫《伴你高飞》的电影,和小孩一起看了,这部电影讲小孩成长,里面有秋天的景象,有黄叶,有大雁,还看到大雁一会儿排成人字,一会儿排成一字。

观星

上旬某天深夜写完代码在阳台吹风,抬头看到大楼边上似乎有参宿,于是下楼看,果然如此,南河三、参宿四、参宿七、天狼星、毕宿五这些冬季大三角和冬季钻石特别明亮。次日和大锤分享,大锤要求半夜叫他起床去看,于是首次父子俩半夜在小区里看星星。除参宿外,据大锤说他还看到昴星团。

博物馆

无意间看到博物馆有《无极——长沙马王堆汉墓文物精品展》展出,月中就结束了,于是周末带大锤去,在此之前给大锤买了本旅行者笔记,拿着去,在博物馆盖了很多印章。从展出的文物可以想象食邑七百户的利苍家族生前的奢侈生活。后来大锤不断问我辛追夫人为什么会保存到现在,我也趁机说了些生老病死的事。对这种事我是不避讳的,当然也会考虑大锤的接受能力,还叮嘱他除了爸爸外,不要和其他人说——哪怕是妈妈。

杂项

每个阶段有每个阶段的优喜,现阶段优大于喜。大妞现在不太愿意和我玩;大锤手上的石膏折了,但怕恢复不理想,下个月才能去学校;买了带拼音的书,让大锤每天读一点也不愿意,逼着他又给他妈妈落下话柄;老师在班级群里说自开学以来班里一直存在迟到现象。

业余研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DS|串应用

问题一&#xff1a;DS串应用 -- KMP算法 题目描述&#xff1a; 学习KMP算法&#xff0c;给出主串和模式串&#xff0c;求模式串在主串的位置 输入要求&#xff1a; 第一个输入t&#xff0c;表示有t个实例 第二行输入第1个实例的主串&#xff0c;第三行输入第1个实例的模式…

RHCE9学习指南 第13章 硬盘管理

新的硬盘首先需要对硬盘进行分区和格式化&#xff0c;首先了解一下硬盘的结构&#xff0c;如图13-1所示。 图13-1 磁盘上的磁道和扇区 硬盘的磁盘上有一个个的圈&#xff0c;每两个圈组成一个磁道。从中间往外发射线&#xff0c;把每个磁道分成一个个的扇区&#xff0c;每个扇…

Linux个人常用总结

1 文件操作 1.1 查看文件 ls ls -a&#xff1a;Linux上的文件以“.”开头的文件被系统视为隐藏文件&#xff0c;仅用ls命令是看不到他们的&#xff0c;而用ls -a除了显示 一般文件名外&#xff0c;连隐藏文件也会显示出来。ls -l&#xff1a;这个命令可以使用长格式显示文件内…

Python高级用法:生成器(generator)

生成器&#xff08;generator&#xff09; 生成器是一种返回生成序列的方法&#xff0c;与直接使用列表等方式返回序列的方式不同的是&#xff0c;他的生成可以是无限的。 生成器可以与next搭配使用&#xff0c;可以被看作是一种特殊的迭代器。 yield语句 yield一般与循环相…

机器学习的底层技术

机器学习的底层技术主要包括以下几个方面&#xff1a; 数学推导能力&#xff1a;机器学习依赖于数学理论和方法&#xff0c;例如线性代数、概率论、统计学等。数学推导能力可以帮助人们理解和推导机器学习算法的原理&#xff0c;进而应用于实际问题中。 数据结构和算法&#x…

vue的工作原理

获取内存中的(虚拟)dom树和新生成的(虚拟)dom树,通过diff算法进行对比,得到需要更新的DOM元素 这两颗(虚拟)DOM树都是框架模拟出来的,就是个对象,旧的会被保存在内存中 Vue.js 是一种用于构建用户界面的渐进式 JavaScript 框架。下面是 Vue.js 的工作原理概述&#xff1a; 声明…

“图解C语言:一维数组的声明、创建与初始化艺术“

各位少年&#xff1a; 标题&#xff1a;《C语言一维数组的探索之旅&#xff1a;从声明到初始化&#xff0c;及如何避免常见误区》 引言 在编程世界中&#xff0c;数组无疑是最基础且重要的数据结构之一&#xff0c;尤其在C语言中&#xff0c;它以其简洁明了的特性为各类数据处…

UDP套接字搭建简易服务器与客户端

使用UDP套接字搭建 文章目录 使用UDP套接字搭建前言一、基本结构二、使用步骤1.服务器端2.客户端 三、效果展示总结 前言 这次较上个版本《Python 网络编程之搭建简易服务器和客户端》https://only-me.blog.csdn.net/article/details/135251171增加了&#xff1a; UDP协议来进…

机器学习部分相关概念

数据集(Data Set)即数据的集合&#xff0c;每一条单独的数据被称为样本(Sample)。 对于每个样本&#xff0c;它通常具有一些属性(Attribute)或者特征(Feature)&#xff0c; 特征所具体取得值被称为特征值(Feature Value)。 西瓜数据集 色泽根蒂纹理青绿稍蜷模糊乌黑蜷缩清晰 …

Python编程-实现对自定义类对象排序

Python编程-实现对自定义类对象排序 具有不同标识的类的实例比较结果通常为不相等&#xff0c;除非类定义了 __eq__() 方法。 一个类的实例不能与相同类的其他实例或其他类型的对象进行排序&#xff0c;除非定义该类定义了足够多的方法&#xff0c;包括 __lt__(), __le__(), __…

学Python的正确顺序千万别弄反了,到时候后悔就来不及了

学Python的正确顺序&#xff1a;从基础到高级&#xff0c;步步为营 在当今数字化时代&#xff0c;Python已成为最受欢迎的编程语言之一。它不仅广泛应用于数据分析、人工智能和Web开发等领域&#xff0c;还为初学者提供了一个友好且功能强大的平台。然而&#xff0c;学习Python…

matalb实践(十二):减肥

1.题目 2.解答 2.1模型假设 1.体重增加正比于吸收的热量&#xff0c;平均每8000kcal增加体重1kg 2.身体正常代谢引起的体重减少正比于体重&#xff0c;每周每千克体重消耗热量一般在200kcal至320kcal之间&#xff0c;且因人而异&#xff0c;这相当于体重70kg的人每天消耗2000k…

【Spark精讲】一文讲透Spark RDD

MapReduce的缺陷 MR虽然在编程接口的种类和丰富程度上已经比较完善了&#xff0c;但这些系统普遍都缺乏操作分布式内存的接口抽象&#xff0c;导致很多应用在性能上非常低效 。 这些应用的共同特点是需要在多个并行操 作之间重用工作数据集 &#xff0c;典型的场景就是机器学习…

【强化学习】SARAS代码实现

前言 SARAS&#xff0c;假设环境状态和动作状态都是离散的。利用动作价值矩阵来进行行为的预测。其主要就是利用时序差分的思想&#xff0c;对动作价值矩阵进行更新。 代码实现 import gymnasium as gym import numpy as npclass sarsa():def __init__(self, states_n, acti…

Apollo自动驾驶:改变交通运输的游戏规则

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo缓存层2. 本地状态管理库3. 离线同步和冲突解决4. 离线数据同步和离线优先策略结论 &#x1f4f2;&#x1f50c; 构建离线应用&#xff1a;Apollo…

ssm基于web 的个人时间管理系统+vue论文

基于web 的个人时间管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。传统的个人时间信息管理模式&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人…

【数据结构】排序之交换排序(冒泡 | 快排)

交换目录 1. 前言2. 交换排序3. 冒泡排序3.1 分析3.2 代码实现 4. 快速排序4.1 hoare版本4.1.1 分析4.1.2 hoare版本代码 4.2 挖坑法4.2.1 分析4.2.2 挖坑法代码实现 4.3 前后指针版本4.3.1 分析4.3.2 前后指针版本代码实现 1. 前言 在之前的博客中介绍了插入排序&#xff0c;…

QT designer的ui文件转py文件之后,实现pycharm中运行以方便修改逻辑,即添加实时模板框架

为PyCharm中的实时模板&#xff0c;你需要遵循以下步骤&#xff1a; 打开PyCharm的设置: 选择 File > Settings&#xff08;在macOS上是 PyCharm > Preferences&#xff09;。 导航到实时模板: 在设置中找到 Editor > Live Templates。 添加新的模板组 (可选): 为了…

Linux基础知识学习2

tree命令的使用 可以看到dir2目录下的这些文件&#xff0c;要想显示dir2的具体结构&#xff0c;可用tree命令 mv命令 它可以实现两个功能 1.将文件移动到另一个目录中 2.对某一个文件进行重命名 1.将文件移动到另一个目录中 这里将dir1中的2.txt移动到他的子目录dir3中 执行…

解构赋值的使用

结构赋值&#xff08;Destructuring Assignment&#xff09;是一种方便的语法&#xff0c;允许你从数组或对象中提取数据并赋值给变量。以下是结构赋值的一些常见用法&#xff1a; 1. 对象解构赋值&#xff1a; 基本语法&#xff1a; let { key1, key2 } { key1: value1, k…