首页
学习
活动
专区
工具
TVP
发布

一个程序员的修炼之路

专栏作者
62
文章
79397
阅读量
13
订阅数
杂想之一个C++内存泄露案例
这些年来开发模型从传统的瀑布模型,逐步向敏捷开发过渡。敏捷开发将需求进行细分后,进行更快速的迭代,不断的交付,从原先瀑布模型按半年,甚至几年一次性交付,变成敏捷开发模式的1个月,2周,甚至是几天为一个交付周期。在这样的开发模式中,可以让客户更快速地使用功能给出反馈,开发人员可以及时做出调整。但从开发者的角度来看,在快速的迭代开发中,CI/CD (持续集成/持续部署)成为不可或缺的部分,自动化必须替代其中大部分的手动工作。
河边一枝柳
2022-12-20
3810
设计模式之桥梁模式
也许你在很多的代码中见过成员叫做_pImpl或者xxxImpl, 然后一个方法的实现为如下代码所示,比如方法为DoSomething中调用了成员的同名方法DoSomething()(有时候也是会有额外的一些处理代码),这个时候可能就是使用了设计模式之桥梁模式 (Bridge Pattern)。
河边一枝柳
2022-06-21
3030
里氏替换原则(LSP)
里氏替换原则(英文名为Liskov substitution principle,简称LSP)是由Barbara Liskov在1988年提出的,在Robert C. Martin提出的SOLID软件设计原则中的第三个字母L。
河边一枝柳
2022-06-21
5890
C++类库隐藏私有属性和方法的两种方式
在我们编写程序的时候,会将程序模块化,常见的就是用动态链接库的方式,然后导出函数接口或者类。而对于导出类的方式,作为模块的实现者,不论是给第三方使用或者自己的项目使用,应该都不太愿意暴露自己的私有属性和方法,个人碰到的主要有以下两个常见原因:
河边一枝柳
2022-06-21
6600
单一职责原则(SRP)
单一职责原则(英文名为Single Responsibility Principle,简称SRP)是Robert C. Martin提出的SOLID软件设计原则中的第一个字母S。
河边一枝柳
2022-06-21
4260
设计模式之简单工厂,工厂方法和抽象工厂
在面向对象的编程中,一般通过继承和虚函数来提供抽象能力,多态让程序在执行期,调用者只需要看到父类类型,而不需要关心继承的子类类型。举个例子: 比如有个游戏,里面的游戏的活动对象为动物,比如有老虎和猫,会对主人公进行攻击。那么可能会实现为如下:
河边一枝柳
2022-01-20
2680
GoReplay进阶之插件实现
GoReplay神器最有效的功能就是在基本不影响线上服务机器运行的情况下,非侵入式地将真实流量导入到本地磁盘文件或者测试机器,实现测试机器上采用真实流量进行测试,从而保证产品发布的质量。
河边一枝柳
2021-12-04
1.1K0
HTTP流量拷贝测试神器GoReplay
一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数据比测试的数据更加多样性,并且随着用户数量的增加,线上流量的也越来越大,更多的隐藏问题也会暴露,比如并发处理不当导致的Crash。那么我们有什么方法能够在上线之前完成这些测试呢?有的,那就是GoReplay。
河边一枝柳
2021-11-25
1.1K0
谈谈多例模式(multiton)
在文章<<谈谈单例模式>>中介绍过单例模式, 一个类全局只会生成一个实例化的对象。而本文将从一些工程经验中,抽象出问题的场景,来谈一谈多例模式,便于还不熟悉的读者更好的理解。
河边一枝柳
2021-10-26
9180
Lambda表达式
常见的语言中都提供Lambda语法糖,比如C#, Python, Golang等。本文将探讨下C++ 11引入的Lambda语法糖。语法糖是一种让程序员使用更加便利的一种语法,并不会带来额外的功能,比如Lambda,没有这种语法糖,其可以用已有的语法等价的实现出相应的功能。 有编程实践经验的同学一定能够快速的理解Lamdba产生的意义,而缺乏编程经验的同学,跟着我一起来梳理下Lamdba给我们带来了哪些便利性?
河边一枝柳
2021-10-14
5450
谈谈单例模式
那么有人要问,那我不就定义一个类,程序只初始化一个全局的实例就好了吗?没错,这样是可以的。但是我们都知道程序会经过多人的接手维护和开发,比如第N个接手程序的时候,并不知道这个类定义的时候只能初始化一个实例,然后又实例化了新的对象, 则可能会造成意想不到的场景。那么这时候就要提到防御性编程,个人认为单例模式的实现也是防御性编程的一种方式,让这个类保证只有一个实例化对象,并且如果试图构造多个对象的时候,在程序的编译期报错。题外话,这也是为什么本人在进行一些稍大规模开发的时候,只会去选择强类型语言,而不会选择弱类型语言的原因,强类型语言会在编译期间帮我们避免很多运行时可能产生的的Bug。
河边一枝柳
2021-09-24
3450
插件式开发架构综述
在现有软件开发中,业务越来越复杂,代码规模越来越大,依赖的人力也越来越多。为了降低系统模块内部耦合度,减少开发难度,也为了能够支持多团队的并行开发,插件式开发架构变得愈加流行,尤其是在桌面软件、移动端应用中。对于后端开发,微服务的形式也越来越流行,但是据笔者看来,微服务的很多设计思路,和插件式开发架构的设计理念也有相近之处。Eclipse, Visual Studio, VSCode等,都是插件式开发架构的典型案例。
河边一枝柳
2021-09-24
2.7K0
对象池的使用场景以及自动回收技术
在编程中,我们经常会涉及到对象的操作,而经常的操作模式如下图所示:创建对象->使用对象->销毁对象。
河边一枝柳
2021-09-24
9690
Protobuf用过没?
这也是很久之前了,在一直都怀念的读书时代,参与的第一个的项目,其中有一部分网络通信,基于socket编程。网络通讯TCP/IP相当于交通工具,上层应用协议还得自己设计。学过计算机网络这门课的,自然会对所学的知识举一反三。
河边一枝柳
2021-09-02
1.1K0
你踩过几种C++内存泄露的坑?
在Modern C++之前,C++无疑是个更容易写出坑的语言,无论从开发效率,和易坑性,让很多新手望而却步。比如内存泄露问题,就是经常会被写出来的坑,本文就让我们一起来看看,这些让现在或者曾经的C++程序员泪流满面的内存泄露场景吧。你是否有踩过?
河边一枝柳
2021-09-02
4470
Windows C++堆破坏场景及分析
还记得第一次碰到堆破坏的时候,大概十年前了,当时在学校开发一个Wireshark插件,可是有一个问题我久久未能解决: 二次开发后的Wireshark,启动的时候偶尔会出现程序崩溃,那时候也不会用Windbg, 后来用Visual Studio启动Wireshark, 也是偶尔报错,这个时候可以看到堆栈,只记得当时是在一个很正常的内存分配或者释放的时候出现崩溃。那么总结为两点:
河边一枝柳
2021-09-02
9890
Ceph架构综述
Ceph是一款以对象存储技术(独立存储技术)为核心,并在此基础之上实现块存储、文件系统的一体化存储系统。
河边一枝柳
2021-08-06
6840
GDB读取动态库中定义的全局变量错误
最近看了一篇getopt使用的文章,为了追踪其执行的逻辑,于是采用GDB挂载调试的方式进行查看。但却出现了GDB打印全局变量optind的时候出现错误。
河边一枝柳
2021-08-06
2K0
Windows文件换行符转Linux换行符
前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。
河边一枝柳
2021-08-06
14K0
Linux中删除文件,磁盘空间未释放问题追踪
在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放。是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景
河边一枝柳
2021-08-06
3.1K0
点击加载更多
社区活动
Python精品学习库
代码在线跑,知识轻松学
【玩转EdgeOne】征文进行中
限时免费体验,发文即有奖~
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品·最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档