C++ 互斥锁和条件变量实现读写锁 is a project mainly written in , based on the .最近的诸多面试经历确实让自己发现内功还不够,还需要持续的学习精进。 实现如下: class RWLock{private:int state;mutex mu;condition_variable cond;public:RWLock():state(0){}void rlock(){mu.lock();while(state <...
Leetcode-152 乘积最大子序列 is a project mainly written in , based on the .题目描述: 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 该题目...
设计模式 之美 --- 初篇 is a project mainly written in , based on the .接下来的一段时间将按照如下体系导图,对23种设计模式 按照自己的理解一一总结,为后续工作中持续灵活使用做好积累。 学习应用 设计模式的过程有如下好处 提高复杂代码的设计开发能力让阅读源码 和 学习框架事半功倍告别被别人吐槽的烂代码为职场发展做铺垫应对面试中设计模式的相关问题 希望大家也能够重视设计模式,写出高质量的优雅代码!...
Leetcode-300 最长上升子序列 is a project mainly written in , based on the .题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n^2) 。...
设计模式 之美 -- 面向对象(C/C++分别实现) is a project mainly written in , based on the .文章目录前言封装C++实现C 实现继承C++ 实现C实现 前言 为了保证代码的可复用性、可扩展性、可维护性,我们提出了面向对象的思想。 面向对象的核心特性有以下几个 封装特性 信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。 封装用来提升代码的可扩展性、可维护性继承特...
设计模式 之美 -- 单例模式 is a project mainly written in , based on the .为什么要使用单例? 一个类只允许创建一个对象或者实例。 背景简介:使用多线程并发访问同一个类,为了保证类的线程安全,可以有两种方法: 将该类定义为单例模式,即该类仅允许创建一个实例为该类的成员函数添加类级别的锁 举例: 一个向指定文件写入日志的类,为了保证该类并发调用时写入文件的日志不会覆盖,需执行以上操作。 单例模式的几...
C语言 #ifndef 引起的redefinition of xxx 问题解决 is a project mainly written in , based on the .问题如下
多个.c和.h文件
其中cloth.h分布被hat.h和paths.h包含,编译时出现如下问题:
error: redefinition of struct _Cloth
我的cloth.h定义如下:
#include
设计模式 之美 -- 简单工厂模式 is a project mainly written in , based on the .文章目录1. 解决问题2. 应用场景3. 实现C++实现:C语言实现4. 缺点 1. 解决问题 举例如下: 我们实现一个卖衣服的功能,衣服的种类有很多:帽子,裤子,T恤。。。 每卖一种衣服,我们都要进行一次实例化,通过new/malloc申请空间,会有如下两种问题: new /malloc之后往往需要跟随一堆异常处理代码...
Shell --- trap 抓取信号 is a project mainly written in , based on the .1. 解决问题 针对部分运行在生产环境中的脚本来说,有一些脚本运行的过程是不能被中断的,比如:生产环境 定期备份脚本,为了保证备份安全,备份期间不能被 SIGTERM和SIGINT 之类的中断信号中断。 该种类型的脚本逻辑增加抓取信号的命令,从而保证脚本的运行不会被中断。 trap命令即可提供该功能,trap 命令能够抓取除 -...
网络故障排查命令 is a project mainly written in , based on the .ping #检测目标主机是否畅通traceroute #追踪路由mtr #检查到目标主机之间是否有数据包丢失nslookup #查看域名并解析,获取IP地址telnet #检查端口链接状态tcpdump #细致分析数据包发送接收 的详细内容netstat #查看网络端口连接状态ss #另外一种各式的查看网络端口连接状态 检测过程:...
Linux的 计划任务机制,自己带节奏 is a project mainly written in , based on the .文章目录1. 解决问题2. 计划任务分类3. 一次性计划任务实现添加计划步骤注意事项4. 周期性计划任务实现`cron`和`crontab`命令5. 延时计划任务6. `flock`脚本加锁,保证单实例运行 1. 解决问题 环境中有脚本需求,周期性运行或者固定时间运行脚本,为了保证脚本的正常运行以及不会有冲突,可以增加计划任...
设计模式 之美 -- 工厂方法模式 is a project mainly written in , based on the .文章目录1. 解决问题2. 应用场景3. 实现如下C++实现C语言实现4. 缺点 1. 解决问题 在简单工厂模式中,我们使用卖衣服进行举例,同一种工厂可以卖很多不同种类的衣服,工厂只是将衣服的生产过程进行了封装。 当我们增加衣服种类的时候,在简单工厂模式中需要修改工厂的代码,破坏了类的开闭原则(对扩展开发, 对修改关闭),...
Shell --- awk规范 系统总结 is a project mainly written in , based on the .文章目录awk和sed的区别awk脚本的流程控制awk 记录和字段字段的引用awk表达式赋值操作符算数操作符系统变量(awk本身自定义的系统变量)关系操作符布尔操作符awk 条件和循环条件语句循环awk 的数组数组的定义数组的遍历删除数组举例,编写awk脚本文件`avg.awk`命令行参数数组复杂数组的使用案例awk函数算数函数字符...
编程模式 之美 -- 抽象工厂模式 is a project mainly written in , based on the .文章目录1. 解决问题2. 应用场景3. 实现如下:C++实现C语言实现4. 缺点 1. 解决问题 在工厂方法模式中,我们卖衣服。此时我们为每一种衣服创建不同的工厂,帽子有一个工厂专门创建,裤子有一个工厂专门创建,T恤有一个工厂专门创建。这样的方式保证了代码设计的开闭原则(对扩展开发,对修改关闭),解决了简单工厂模式中暴露的...
C++ 智能指针(unique_ptr / shared_ptr)代码实现 is a project mainly written in , based on the .文章目录unique_ptr 智能指针的实现shared_ptr 智能指针的实现指针类型转换
unique_ptr 智能指针的实现
一个对象只能被单个unique_ptr 所拥有。
#include
设计模式 之美 -- 建造者模式 is a project mainly written in , based on the .文章目录1. 解决问题2. 应用场景3. 实现C语言实现C++实现4. 缺点 1. 解决问题 描述如下场景: 类的数据成员很多(8个以上),当我们进行初始化的时候放在初始化列表中,影响类的可读性,同时校验初始化参数列表是否有效的逻辑也无处放置假如初始化列表中的参数有一定的依赖关系,比如数据成员max 一定比 数据成员min...
设计模式 之美 -- 原型模式 is a project mainly written in , based on the .文章目录1. 解决问题2. 应用场景3. 实现方式C++实现C语言实现4. 缺点5. 和其他三种创建模式的对比(单例,工厂,建造者) 1. 解决问题 如果对象的创建成本较大,而同一个类的不同对象之间的差别不大(大部分字段相同),在这种情况下,我们可以利用已有对象(原型)进行赋值(拷贝)的方式,创建新的对象,从而达到节省对象创...
读书:个人成长 -- 即兴演讲 is a project mainly written in , based on the .与人交流时,有人发言语无伦次,舌头像打了结。 有人一开讲便滔滔不绝,却毫无重点。 也有人说话索然无味,没法让你投以关注。 如何在任何场合游刃有余地表达? 如何掌控此时此刻,用说话影响他人? 本书提供了一系列实用技巧,让你成为出色的即兴演讲家。...
设计模式 之美 -- 代理模式 is a project mainly written in , based on the .文章目录1. 解决问题2. 应用场景1. 业务系统的非功能性开发2. 代理模式在RPC、缓存中的应用3. 实现C++实现C语言实现 1. 解决问题 客户端和目标对象之间需要进行交互,此时客户端类和目标对象类相关操作之间的逻辑如果交合在一起,会导致客户端和目标对象模块耦合度升高,后期扩展客户端的功能时,则需要修改两者的源代码。...
LRU算法 -- 链表 完整实现 is a project mainly written in , based on the .LRU算法(Least Recently Used) 算是我们经常遇到的一种淘汰算法,其中内存管理模块进行内存页回收时有用到,针对不经常使用的内存页,LRU淘汰策略能够将该内存页回收给操作系统。 属于 我们操作系统设计中的 时间局部性原理,最长时间未被访问的数据优先淘汰,当内存中已存在的数据再次被访问时,则进行热度的提升。 本文为...