这一年,熬过许多夜,也有些许收获 | 2022年终总结

弹指一挥间,时间如白驹过隙。光阴似箭,日月如梭,时间如闪电,转瞬即逝。回望来时路,不觉潸然泪下......

一说到年终总结,好像都离不开这样煽情的开场白。但不可否认的是,时间确实过得很快,一晃一年又没了。

聊聊工作

今年是疫情的第三个年头,随着放开,有句玩笑话这样说,“不放开没客户,放开连同事都没了”,生意不好做,打工的更不好过,赚钱是真的很难。如果你正好有一份工作,又没有非过不去的坎,不要轻易离职,更不要裸辞,先苟着。如果没有很好的过渡,这期间会有很多的焦虑。

常对自己说,身为技术人,总得自己做点什么东西,不要浪费了一技之长。在我看来,会写代码是一技之长,可能有的人并不觉得。所以除了本职工作,自己也在空闲时间瞎搞出了几个系统。我主要做后端工作的,从开发到完成,前后端都是一个人写的,后端页面和交互就不用说了,代码工具一生成,长得都差不多。主要还要写小程序,H5的页面和交互。不怕你笑话,曾一度,我都以为自己跻身于全栈工程师行列了。

我还是有自知之明的,全栈工程师,就这点技术面,我不配。但是我希望自己能够成为全栈并为之努力,马老师不是说了吗,梦想还是要有的,万一实现了呢。会全栈有多好?当你有个想法想去实现的时候,自己一个人不就全干了吗,不用花钱去请人。

扯远了哈,话说回来,平时没有时间搞,都是利用晚上和周末零零碎碎的时间开搞的,这一上手就停不下来,总想着撸完,所以这一年我熬了很多夜,憔悴了不少。但在这个过程中,也学习到不少东西,也让我对那句实践出真知的名言有深刻的理解,工作上的东西千篇一律,要想获得工作之外的知识,只能主动的学,还要实际动手操作,我们学代码更是如此。

为了演示这些个系统,我花了巨资(几百块总是有的,对我来说就是巨资),买了域名和服务器,全都部署上线。项目多,空间小,时不时就宕掉,凑合着用吧,我没有多余的钱用来搞这个硬件。庆幸,从这些系统中,也获取到转化变现。

说实话,做我们这一行的,不管是公司的工作又或是自己在创业,熬夜加班赶活是经常的事吧。如果你没有,你要庆幸你的工作没有频繁加班。如果你有,也不必抱怨,因为还有很多人干着比你更累的活。

聊聊软著

自己开发了这些个系统,想着也得申请一下软著不是。申请这个软著从准备资料到领到证书,都是自己一个人弄的,除了打印费用和寄材料的邮费,没有再花任何的钱。

作为搞IT的,还是搞技术的,我觉得应该拿几张属于自己的软件著作权证书,有什么作用不说,至少也是属于国家级证书吧。

说实在,在我们行业,软著有什么用呢,其实作用还蛮大的。对于在读学生来说,可能对加学分、凭奖学金、保研、简历装饰有帮助。对于企业来说,可能对高企申请、应用市场上架有帮助。对于职场人士来说,可能对职称评定、升职加薪有帮助。但最重要的一点是,能保护你的软件成果。

申请过程也踩过坑,比如补正通知,也都顺利的解决了,到最后都成功申请下来了。

聊聊写作

这一年,在各个技术平台也更新了一些文章,分享了在开发过程中遇到的问题,解决方案,技术难点,学习心得。

平时对微信、支付宝、百度、抖音等常见生态的开发研究的比较多,比如微信支付、微信电商收付通、微信开放平台、支付宝支付,支付宝直付通、支付宝小程序模板开发、百度智能小程序模板开发、抖音支付、抖音开放平台。会把对接流程、踩到的坑记录下来,以供参考,避免踩坑。

有时候参加平台的活动,平台给予的周边产品,有定制书包、定制T恤、定制鼠标垫、定制公仔、手办、奖牌、证书。CSDN定制书包拿了最多,做工质量还不错,送了好几个给朋友。

通过写作,也认识了很多好朋友,有同行业,也有非同行的,和同行的探讨技术,问题解决思路和方案。通过非同行也可以了解到除本身行业的知识,不亦乐乎。还会通过他们的介绍,接到单子来做,关于程序猿接私活一直是个有争议的话题,你认为呢?但是我需要钱,我要搞钱。

聊聊生活

今年做了一个对我来说算是大的一个工程,就是全款给爱车买了车位,这样进出果然方便许多,不用再经受风吹雨打了。

以前没有车位,小区门口有限的停车位都要先到先得,毕竟僧多肉少,开走了回来还得找车位不一定有,很麻烦。

每个月管理费还不便宜,关键是没怎么管理呀,真希望有一天能取消这样的收费,应该有很多同学和我有一样的想法吧,最好物业费也能取消,哪怕是降低一点也行啊。

随着年龄的增长,责任越来越重,焦虑感越来越强,感觉时间过得飞快,一周周,一月月。家人让我多运动运动,买了运动服和跑鞋,一开始运动了几天,但经常回来就在书房坐下做自己的项目,都要熬夜做,哪有时间去运动,也就耽搁了,哎。等明年吧(大抵又会被耽搁),运动有助健康,身体倍棒。

聊聊未来

不管如何,都要以积极乐观的态度生活,有了目标不要只是停留在想着,而要付诸实际行动,虽然说结果挺重要,但也需要实实在在的过程。

也不必去想太多关于未来的事,毕竟计划赶不上变化,做好当前,未来是由现在所产生出来的。

朋友,让我们一起,不忘初心,砥砺前行。

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

上一篇:自学开发技术,从入门到入行

本文转载于网络 如有侵权请联系删除

相关文章

  • python发布订阅者模式(超简版)

    1、生产者基类(父类)classBaseProducer(object): ''' 生产者 ''' def__init__(self,name): ''' 初始化生产对象 :paramname:生产名称 ''' self.name=name self.number=0 self.object=None defaction(self): ''' 抽象方法:生产方法 :return: ''' pass defaction(self,number,object): ''' 带参的生产方法:根据数量和对象生产不同的产品 :paramnumber:生产数量 :paramobject:生产产品 :return: ''' self.number=number self.object=object whilenumber>0: obj=object() l

  • 重学数据结构和算法(二)之二叉树、红黑树、递归树、堆排序

    目录树二叉树如何表示(或者存储)一棵二叉树二叉树的遍历二叉查找树(BinarySearchTree)二叉查找树的时间复杂度分析二叉查找树和散列表红黑树平衡二叉查找树如何定义一棵“红黑树”?为什么说红黑树是“近似平衡”的?递归树分析算法复杂度递归树与时间复杂度分析堆排序最近学习了极客时间的《数据结构与算法之美]》很有收获,记录总结一下。 欢迎学习老师的专栏:数据结构与算法之美 代码地址:https://github.com/peiniwan/Arithmetic树树是无向、连通的无环图。 “高度”这个概念,其实就是从下往上度量,比如我们要度量第10层楼的高度、第13层楼的高度,起点都是地面。所以,树这种数据结构的高度也是一样,从最底层开始计数,并且计数的起点是0。 “深度”这个概念在生活中是从上往下度量的,比如水中鱼的深度,是从水平面开始度量的。所以,树这种数据结构的深度也是类似的,从根结点开始度量,并且计数起点也是0。 “层数”跟深度的计算类似,不过,计数起点是1,也就是说根节点的位于第1层。二叉树如何表示(或者存储)一棵二叉树一种是基于指针或者引用的二叉链式存储法 一种是基于数组的顺

  • 基于Docker的Consul服务发现集群搭建

    一、示例整体架构  此示例会由一个APIGateway,一个ConsulClient以及三个ConsulServer组成,有关Consul的Client和Server这两种模式的Agent的背景知识,请移步我之前的文章加以了解:《.NETCore微服务之基于Consul实现服务治理》。其中,Consul的Client和Server节点共同构成一个DataCenter,而APIGateway则从Consul中获取到服务的IP和端口号,并返回给服务消费者。这里的APIGateway是基于Ocelot来实现的,它不是这里的重点,也就不过多说明了,不了解的朋友请移步我的另一篇:《.NETCore微服务之基于Ocelot实现API网关服务》。二、Consul集群搭建2.1Consul镜像拉取dockerpullconsul:1.4.4   验证:dockerimages2.2ConsulServer实例创建  以下我的实践是在一台机器上(CentOS7)操作的,因此将三个实例分别使用了不同的端口号(区别于默认端口号8500)。实际环境中,建议多台机器部署。  (1)Consul实例1docker

  • 聊聊C语言和ABAP

    这个公众号之前的文章,分享的都是Jerry和SAP成都研究院的同事在工作中学到的一些知识和感受。而今天这篇文章,写作的由来是因为最近我又参与了SAP成都数字创新空间应聘者的面试,和一些朋友聊了一些关于用不同的编程语言写HelloWorld程序的话题,突然才发现,自己从2007年毕业之后,再没有使用过C语言进行编程了。因此想做一个简单的回忆。对C语言不感兴趣的ABAP开发顾问,可以直接跳到本文讲ABAP的章节。为什么这篇文章要把C语言和ABAP放在一起讲,而不是别的语言比如Java和ABAP呢?因为ABAP语言底层是基于C/C++实现的,包括其关键字(比如最简单的关键字WRITE的C++实现有2千多行)和虚拟机(ABAPRuntime)。SAP内部的一群计算机科学家们发明了ABAP这门伟大的语言,由它实现的各种SAP应用帮助了全球超过180个国家和地区的客户们更好地运行其业务。通过Google我们能搜索到一些关于这些SAP计算机科学家们的介绍,比如这个链接:http://sapexperts.wispubs.com/SAP-Professional-Journal/Articles/Fr

  • python开发_python操作mysql数据库

    如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装本篇blog是有关python操作mysql数据的相关内容。我做了一个demo:先看运行效果:mysql中情况:======================================================代码部分:======================================================1#-*-coding:utf-8-*- 2#pythonoperatemysqldatabase 3importMySQLdb 4 5#数据库名称 6DATABASE_NAME='' 7#host='localhost'or'172.0.0.1' 8HOST='' 9#端口号 10PORT='' 11#用户名称 12USER_NAME='' 13#数据库密码 14PASSWORD='' 15#数据库编码 16CHAR_SET

  • Arcgis Runtime sdk for android 授权

    要下载和安装ArcGISRuntimeSDKforAndroid,您需要注册开发者账户,进而便拥有了访问所有功能的权限,从而实现开发和测试目的。但是,这种情况下,应用程序中的所有地图都具有水印,并且在debug消息中显示,您的应用程序仅可用于开发目的。要实现应用程序的部署,您必须在基础版或标准版上进行注册。具体的花费主要发生在下面环节:在标准级别部署功能;应用程序中调用了需要消耗积分(credits)的ArcGISOnline服务。按照下面的描述,通过添加若干行代码即可实现对应用程序的授权。授权之后,水印和调试消息将不再显示,即可实现应用程序的部署。下表显示了不同级别下所具有的功能许可级别可用功能开发者(仅用于开发和测试)所有功能(将产生水印和调试消息)基础版除了下述功能的所有功能: 本地定位器(地理编码) 本地路径分析 本地地理数据库编辑 本地地理数据库同步操作标准版所有功能这里我们主要说基础版的授权方法:访问developer.arcgis.com并用ArcGISforDeveloper账户登录登录后,将会出现Applications区域。通过点击NewApplication或Cr

  • CentOS7 LAMP编译安装

      一、编译安装Apache 1、解决依赖关系 (1)编译安装apr (2)编译安装apr-util (3)httpd-2.4.27编译过程也要依赖于pcre-devel软件包,需要事先安装 (4)创建用户,组 2、编译安装httpd-2.4.27 3、配置Apache 二、编译安装Mysql 1、准备数据库存放的文件系统 2、创建用户、组 3、编译 4、初始化mysql数据库 5、设置开机启动 6、登录检测 三、编译安装PHP 1、解决依赖关系 2、安装PHP 3、为PHP提供配置文件 4、编辑apache配置文件httpd.conf,以apache支持php 5、测试php安装是否成功: 使用环境:Centos764 所用源码包: apr-1.5.2.tar.bz2 apr-util-1.5.4.tar.bz2 httpd-2.4.27.tar.gz mysql-5.6.25.tar.gz php-5.6.10.tar.bz2 获取LAMP环境源码包集合:https://pan.baidu.com/s/1eRBMSBg均为个人收集 一、编译安装Apache 1、解决依赖关

  • 19-11-08-+

    $RP++$ ZJ: 犯傻了…… T1因为暴力打错所以表也死了。 后来改对我也没再打。(我在干什么???? T2仿佛是个原题(货车运输??)蒟蒻没做过不过现在也涨知识了。 T3多测 return0 挂15分…… 43 Miemeng 20 00:00:47 30 00:00:47 5 00:00:47 55 00:00:47   TJ解: 大家都AC了我写这个没意义了吧 T1: 简单打表会发现,我们的字符串的长相不会影响答案。 然后我们再简单证明一下。 我们的合法情况只有在原字符串的中间插入一些字符(或者卡在开头结尾) 那么为了防止重复,紧接着的下一个字符不能是字符串内的该位字符。 但是有一个不需要考虑,开头/结尾,不然就会因为把一种情况全部删除而容斥失败。 于是: #include<iostream> #include<cstring> #include<cstdio> #defineLLlonglong #defineN1111111 usingnamespacestd; LLn,l

  • What is a M3U file?

    What'sonthisPage WhatisaM3Ufile? M3UFileFormat ExtendedM3U HLSM3U M3UExample References   WhatisaM3Ufile? M3U(MP3URL)isanaudioplaylistfilestoredwiththe.m3uextension.M3Uisnotanactualaudiofile,itjustpointstoaudioandsometimesvideofiles.M3UwasdevelopedtobeusedwithWinplay3softwarebyFraunhofer.Itisalsosupportedbyvariousmediaplayersandsoftware. M3UFileFormat ThereisnoofficialspecificationfortheM3Ufileformat,itisade-factostandard.M3Uisaplaintextfilethatusesthe.m3uextensionifthetextisencoded

  • 五、【注解】Spring注解@Import

    @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public@interfaceImport{ /** *{@linkConfiguration},{@linkImportSelector},{@linkImportBeanDefinitionRegistrar} *orregularcomponentclassestoimport. */ Class<?>[]value(); } 复制 @Import注解的作用是像IOC容器中导入我们自己想要的Bean,有三种方式: 一、普通导入 @Configuration @Import({User.class})//导入一个叫User的类,那直接使用@Service不行吗?如果User是第三方jar包的类呢? publicclassMyConfig{ } 复制 二、ImportSelector ImportSelector实现类 /** *@authorzhangjianbing *time2020/09/21

  • 工具/库---好用的在线工具汇总:Iconfont图标,数据mock,时间函数库,颜色查询 等

    p.p1{margin:0;font:12px"PingFangSC";color:rgba(212,212,212,1)} p.p2{margin:0;font:12px"PingFangSC"} span.s1{font-kerning:none} 一  时间函数库———http://momentjs.com/     非常全的时间处理函数库,引入使用非常方便。     二  Iconfont———http://www.iconfont.cn/    各种小图标大全,包括各种尺寸,类型。做app里面的相关图标素材选择非常好。     三  数据模拟mock—https://easy-mock.com/mock/5954c9509adc231f356da90e/example/mock     在线模式Json数据,app或程序里面直接调用在线url地址即可,定义好数据返回结构

  • SequenceType 与 GeneratorType

    Swift语言中提供了一种for..in语法的形式,用于遍历集合,比如对于Array类型,就可以用for..in来进行遍历。这个语法在很多其他语言中也有提供,省去了我们定义下标的操作。今天我们要了解的就是关于for..in语法的原理,我们可以让我们自己的类也支持这个语法。 何为for..in 首先,我们先来了解一下for..in的用法,比如这段代码: letbookList=["Swift","iOS","Objc"] forbookNameinbookList{ print(bookName) } 复制 我们定义了一个数组bookList,里面存放了三个字符串。然后我们就可以通过for...in循环进行遍历。 数组其实就是Array类,我们上面的定义如果写的详细些,应该是这样: letbookList:Array=["Swift","iOS","Objc"] 复制 也就是说,我们传递给for...in语法的,其实是一个Array类的实例。那么我们再来看看Array类的继承关系: publicstructArray<Element>:CollectionType,Mu

  • IP地址工具类

    ///<summary> ///获取客户端IP地址 ///</summary> ///<returns></returns> publicstaticstringGetHostAddress() { stringuserHostAddress=HttpContext.Current.Request.UserHostAddress; if(string.IsNullOrEmpty(userHostAddress)) { userHostAddress=HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要) if(!string.IsNullOrEmpty(userHostAddress)&&IsIP(userHostAddress)) { returnuserHostAddress; } return"127.0.0.1"; } publicstaticboolIsIP(stringi

  • [UE4]Add Offset

    在原来值的基础上增加偏移

  • mysql limit查询优化

    mysql数据库中的查询语句有关limit语句的优化。 一般limit是用在分页的程序的分页上的,当应用数据量够小时,也许感觉不到limit语句的任何问题,但当查询数据量达到一定程度时,limit的性能就会急剧下降。这个是通过大量实例得出来的结论。 对同一张表在不同的地方取10条数据: 1)offset比较小时   代码示例:select*fromuserlimit10,10; 这条sql语句多次运行,时间保持在0.0004-0.0005之间。   代码示例:select*fromuserwhereuid>=(selectuidfromuserorderbyuidlimit10,1)limit10; 这条sql语句多次运行,时间保持在0.0005-0.0006之间,主要是0.0006。结论:偏移offset较小时,直接使用limit较优。这个显然是子查询的原因。 2)offset大时   代码示例:select*fromuserlimit10000,10; 这条sql语句多次运行,时间保持在

  • 在华为云 OSC 上快速部署 EMQX MQTT 集群

    EMQXKubernetesOperator是EMQ发布的一个封装、部署和管理工具,也是一个特定的应用控制器,方便DevOps人员在Kubernetes上编排EMQXMQTT消息服务集群,管理其生命周期。 华为云原生基础设施(云容器引擎CCE、容器镜像服务SWR、容器洞察引擎CIE、智能边缘平台IEF等)通过云原生服务中心(OperatorServiceCenter,OSC)对外开放云原生能力,包括弹性伸缩、多云部署、云边协同、应用级自动化运维等,全面支持企业架构云原生化。 本文将介绍如何使用EMQXOperator在OSC上快速发布并提供基于大规模分布式物联网消息服务器EMQX的MQTT订阅服务,实现运维的代码化、自动化、智能化。 OSC介绍 OSC是华为云面向服务提供商和服务使用者的云原生服务生命周期治理平台,提供大量开箱即用的云原生服务,支持服务的开发、发布、订阅、部署、升级、更新等,帮助用户简化云原生服务的生命周期管理。 OSC具有以下优势: 开箱即用 OSC联合生态伙伴提供了大量开箱即用的云原生服务,包括数据库、消息、缓存等通用中间件,以及新技术领域的AI、大数据、高性

  • leetcode(c++)(DFS)

    #include<iostream> #include<stack> #include<vector> usingnamespacestd; structTreeNode{ TreeNode*left=nullptr,*right=nullptr; intval=0; TreeNode(intv):val(v){} }; vector<int>inorder(TreeNode*root) { vector<int>res; stack<TreeNode*>st; while(root!=nullptr||!st.empty()) { while(nullptr!=root) { st.push(root); root=root->left; } root=st.top(); st.pop(); res.emplace_back(root->val); root=root->right; } returnres; } voidprint(constvector<int>&

  • js this小记

    在JavaScript中,this对象是在函数被调用时动态定义的. JS中有三种方法来设置this对象: someThing.someFunction(arg1,arg2,argN) someFunction.call(someThing,arg1,arg2,argN) someFunction.apply(someThing,[arg1,arg2,argN]) 上面几个例子中,this都是 someThing, 调用没有前导父对象的函数通常会得到全局对象, 在大多数浏览器中这个对象意味着窗口对象。 因此,下面的代码会打印出两个window: functiona(){ console.log(this,'是a的this') functionb(){ console.log(this,'是b的this') } b() } a() //window,是a的this //window,是b的this复制   故下面的代码会打印c和window: varc={a:a} functiona(){ console.log(this,'是a的this') fu

  • Item 18: 使用srd::unique_ptr来管理独占所有权的资源

    本文翻译自moderneffectiveC++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误。谢谢! 博客已经迁移到这里啦 当你需要一个智能指针的时候,std::unique_ptr通常是最接近你需求的那一个。默认情况下,这么假设是很合理的:std::unique_ptr和原始指针的大小是一样的,并且很多操作(包括解引用),它们执行的是完全相同的指令。这意味着你甚至能把它们用在对内存和时间都很紧的地方。如果一个原始指针对你来说足够的小和快,那么一个std::unique_ptr也几乎可以肯定是这样的。 std::unique_ptr表现出独占所有权的语义。一个非空的std::unique_ptr总是对它指向的资源拥有所有权。move一个std::unique_ptr将把所有权从源指针转交给目标指针(源指针将被设置为null)。拷贝一个std::unique_ptr是不被允许的,因为如果你拷贝一个std::unique_ptr,你将得到两个std::unique_ptr指向同样的资源,然后这两个指针都认为它们拥有资源(因此应该释放资源)。因此std::unique_ptr是一个

  • [ASP.NET MVC]视图是如何呈现的

    为了搞清楚ASP.NETMVC的请求过程,我们计划从结果追踪到源头。使用VS2012创建一个空白的ASP.NETMVC项目 然后创建一个HelloController 创建一个HelloView。在Views文件夹下创建一个Hello的文件夹,然后创建一个名为Index的View 然后再view中输入helloasp.netmvc4 点击App_Start下的RouteConfig.cs,更改Default的路由的Controller为Hello OK,点击调适按钮,你可以得到如下结果:   OK.我们就从这里出发,开始分析用户的请求是如何被处理的。首先我们再来看HelloController的代码 恩,我们就从这里开始分析吧。 (1)我们可以看到Index()返回的是一个View()。这个View()来自基类 protectedinternalViewResultView() { returnView(viewName:null,masterName:null,model:null); } &nb

  • C++基础day01 类和对象的关系思考

    /* #define_CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<string.h> #include<stdio.h> voidmain() { printf("hello...\n"); system("pause"); return; } */ #include"iostream"//包含c++的头文件//iostream.h usingnamespacestd;//使用命名空间std标准的命名空间(在这个命名空间中定义了很多标准定义) voidmain01() { //printf("hello....\n"); //cout标准输出黑屏幕, //<<左移操作符在c++里面功能的改造(增强)===>C++语言操作符重载//3day //endl\n //打印到屏幕并且换行 cout<<"hello...."<<endl; system("pause"); } //求圆的面积 //用面向过程的方法求解圆形的面积 //<<

相关推荐

推荐阅读