- 博客(69)
- 资源 (50)
- 收藏
- 关注
原创 C++ 通过域名获取服务器ip(跨平台)
在实际项目开发中,服务端有可能提供域名或者ip地址,在提供域名时,则需要通过域名获取到真实的ip地址。同时考虑到代码的兼容性,因此代码需在linux和windows环境下均可运行。
2025-01-23 17:36:15
662
原创 windows环境下zstd编译
官网提供了编译好的dll和lib库,可以直接使用,但是提供的dll文件没有对应的lib文件,后续添加可能会导致依赖的问题,因此需要再次编译。
2024-10-15 21:15:46
1005
1
原创 软件设计基本原则
YAGNI原则向投机取巧和过度设计宣战,它的主旨是希望你不要写目前用不上,但将来也许会需要的代码。KISS:Keep it simple and stupid.(保持简单和直接原则)对于程序员来说,关注简单性可能是最困难的事情之一,并且这是一个终生的学习经验。总是在你需要的时候再实现它们,而不是在你只是预见到你需要它们的时候实现它们。建议:在你确定真的有必要的时候再写代码,那时再重构仍然来得及。任何事情都应该尽可能简单,而不是稍微简单一点。
2023-03-01 23:07:53
320
原创 设计模式:模板模式 CRTP设计习语
Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2023-02-19 22:02:06
459
原创 设计模式:装饰模式
动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。
2023-02-14 21:21:52
226
原创 设计模式:观察者模式
观察者模式的关键对象是主题Subject和观察者Observer,一个Subject可以有任意数目的依赖它的Observer,一旦Subject的状态发生改变,所有的Observer都可以得到通知。Subject发出通知时并不需要知道谁是它的观察者,也就是说,具体观察者是谁,它根据不需要了解。Observer类,抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。StockObserver,具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。
2023-02-05 22:27:15
3968
1
原创 C++ Lambda表达式详解
lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法。通常,lambda用于封装传递给算法或异步方法的几行代码 。
2023-01-31 15:06:58
1991
原创 设计模式:单例模式
在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常安全地执行,不会出现数据的污染等情况。这种方法存在问题:在多线程场景下还是有可能会存在线程安全的问题,因为多线程同时调用GetInstance方法有可能还是会产生竞争。上述单例利用std::call_once和std::once_flag实现,std::call_once的调用是线程安全。(2)拷贝构造函数和赋值构造函数是私有类型,目的是禁止外部拷贝和赋值,确保实例的唯一性;单例模式是为了保证程序的线程安全。
2023-01-28 19:48:33
533
原创 设计模式:简单工厂模式
所有初学者可能会有这个问题,在碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这种用计算机方式思考,本身没有什么问题,但是仅仅实现了当前的需求,程序不容易维护,不容易扩展,更不容易复用。达不到高质量代码的要求。操作分为加减乘除,因此可以抽象出一个运算类,分出加法类、减法类、乘法类和除法类,通过这四个类继承运算类。运算类关联简单工厂类,通过简单工厂类创建不同的操作对象。如何能够让上述程序更加灵活并且易于复用,准确的说就是让业务逻辑与界面逻辑分开,让它们之间的耦合度下降。
2023-01-27 21:28:24
155
原创 无锁队列概述
一、无锁队列原理1、队列操作模型队列是一种非常重要的数据结构,其特性是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信间经常采用队列做缓存,缓解数据处理压力。根据操作队列的场景分为:单生产者——单消费者、多生产者——单消费者、单生产者——多消费者、多生产者——多消费者四大模型。根据队列中数据分为:队列中的数据是定长的、队列中的数据是变长的。(1)单生产者——单消费者(2)多生产者——单消费者(3)单生产者——多消费者...
2021-09-19 22:01:02
9246
1
原创 windows下事件通知
简单代码实现如下:#pragma once#include<Windows.h>#include<stdio.h>#include<signal.h>class SyncEvent{public: SyncEvent(bool manual_reset = true, bool signaled = false) { handle_ = ::CreateEvent(NULL, manual_reset, signaled, NULL); if
2021-09-04 15:25:00
335
原创 类 类模板学习
目录一、定义类模板二、示例2.1 类模板实现Array队列一、定义类模板形式如下:1 template<class 模板参数表>2 class 类名{ 3 // 类定义...... 4 };其中,template 是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是类型参数,也可以是非类型参数。类型参数由关键字class或typename及其后面的标识符构成。非类型参数由一个普通参数构成,代表模板定义中的一个常量。注意:.
2021-08-22 09:56:26
225
原创 C++中回调函数(CallBack)
一、定义回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。最著名的回调函数调用有C/C++标准库stdlib.h/cstdlib中的快速排序函数qsort和二分查找函数bsearch中都会要求的一个与strcmp类似的参数,用于设置数据的比较方法。二、示例.
2021-08-17 08:09:39
2993
原创 http协议
一、简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,
2021-08-07 09:36:27
1025
转载 zlib使用gzip / Accept-Encoding和Content-Encoding概要
zlib是个著名的开源解压缩库,gzip是一种压缩文件格式。zlib可以压缩原始数据并输出gzip文件,gzip文件中除了压缩数据外,还有描述这些数据的文件头,所以当原始数据较小时,会出现zlib的压缩输出会比原始数据还大的情况。zlib能使用一个gzip数据头,zlib数据头或者不使用数据头压缩数据。通常情况下,数据压缩使用zlib数据头,因为这提供错误数据检测。当数据不使用数据头写入时,结果是没有任何错误检测的原始DEFLATE数据,那么解压缩软件的调用者不知道压缩数据在什么地方结束。g
2021-08-07 00:05:08
1275
原创 C++字符串常见操作函数
字符串分割各种方式总结如下:1)模仿boost库中split函数实现字符分割void SplitFun(const string& str, vector<string>& vec_str, const string& delimiter){ // 找到第一个不是分隔符的位置 string::size_type lastPos = str.find_first_not_of(delimiter, 0); // 以lastPos为起点,找到第一个分隔符所在
2021-07-21 09:00:54
197
转载 Cannot assign requested address解决办法
问题原因:TCP/IP的状态图:“Cannot assign requested address.”是由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放,端口才可以继续使用。在http查询中,需要发送大量的短连接,这样的高并发的场景下,就会出现端口不足,从而抛出Cannot assign requested address的异常。可能解决方法1 --调低time_..
2021-07-19 23:50:19
35642
转载 linux服务器查看进程、线程数量、进程中的线程
查看进程总数ps -ef | wc -l查看系统设置的最大进程数sysctl kernel.pid_max查看当前进程数ps -eLf | wc -l修改最大进程数echo "kernel.pid_max=1000000 " >> /etc/sysctl.confsysctl -p查看物理cpu个数grep 'physical id' /proc/cpuinfo | sort -u查看核心数量grep 'core id' /proc/cp
2021-07-11 23:03:52
9175
原创 linux和windows sleep函数
1、sleep函数功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在windows中使用带上头文件#include <windows.h>;在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h>; 在windows中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说wind
2021-07-11 20:12:23
2583
1
原创 走进私募-概要
1 私募基金的特点1)高门槛100万起,投资者需要通过合格投资者认证;2)安全性资金在第三方银行托管,避免“捐款跑路”;3)收益性由于操作灵活性,优秀私募产品收益可能远超同类公募产品;4)风险性投资私募基金同样可能出现本金亏损的情况;...
2021-05-29 15:48:04
271
原创 行情系统分析
行情系统背景我国证券行情主要包括股票行情、LV2行情、基金行情、债券行情、期权期货行情等,股票行情主要指A股、B股和即将上线的新三板。那证券行情系统主要有四个显著特点:1、行情指标计算量大从交易所快照行情数据到行情指标数据,需要经过大量计算工作。以十种K线计算为例,证券数保守估计1.5W,每天开市4小时,每3秒刷新一次行情,共需计算7.2亿次。再加上实时,分时,市盈率,涨跌幅,委比,委差等十几项指标计算,每日计算量在10亿级别以上。2、行情指标时效性高实时行情服务是券商的基础服务
2021-05-15 17:55:22
1534
原创 资源管理 智能指针
对软件开发人员来说,管理资源时一项基本的任务。大量的资源必须合理分配、使用和归还。主要的资源包括:1、内存(栈、堆);2、访问硬盘或者其他的介质(如网络)上的文件(读/写)所需的文件句柄;3、网络连接(例如:连接服务器、数据库等);4、线程、锁、定时器和事务;5、其他操作系统资源,如Windows操作系统上的GDI句柄。一、资源申请即初始化资源申请即初始化(Resource Acquisition is Initiazation, RAII),该术语也被称为“构造时获得.
2021-05-03 23:16:59
225
原创 链表的头插法和尾插法
下面通过图像简要示意链表的头插法和尾插法1、头插法代码示意:#include<stdio.h>#include<stdlib.h>struct stu_node{ int num; struct stu_node *next;};int main(){ struct stu_node *head,*p; int n; head=NULL; scanf("%d",&n); while(n!=0) { p=(struct st
2021-05-02 17:36:42
455
原创 boost thread类创建和销毁线程
boost thread使用一、创建线程示例#include<iostream>#include<boost/thread.hpp>#include<windows.h>using namespace std;class Foo{public: void foo();};void Foo::foo(){ Sleep(2000); cout << "jaminliu" << endl; cout <&l
2020-12-06 13:56:30
811
原创 Linux基础--gcc编译 静态库 动态库
gcc编译的四个阶段:静态库: 静态库的使用中,库被打包到应用程序中,导致库的体积很大,应用程序也比较大。动态库: 动态库又称为共享库,放在虚拟地址空间的共享库位置。虚拟地址空间:...
2020-11-22 23:32:49
170
原创 Scrum敏捷项目管理
敏捷的背景与动机软件危机及软件工程的出现速度是企业竞争致胜的关键因素,软件项目的最大挑战在于,一方面要应付变动中的需求,一方面要在紧缩的时程内完成项目,传统的软件工程难以满足这些要求所以软件团队除了在技术上必须日益精进,更需要运用有效的开发流程,以确保团队能够发挥综效。这正是Agile Process (敏捷的软件开发流程)于近年来兴起的主要原因。软件项目的复杂性解决复杂性问题需要采用经验式方式解决问题的两种方式:预定义过程控制(富士康流水线生产)经验性过程控制(摸着.
2020-11-22 11:44:52
2004
原创 boost库 常用字符串处理函数
下面总结了boost库常用字符串处理函数头文件#include <boost/algorithm/string.hpp> using namespace std; using namespace boost; 代码:#include<iostream>#include<vector>#include<boost/algorithm/string.hpp>using namespace boost;using namespa
2020-11-22 00:12:54
660
原创 金融行业--IT人才的破茧之路
金融行业--IT人才的破茧之路第一阶段:精深技术(开发、测试、运维) 将自己的技术栈磨砺到在团队中上层水平,做成团队中核心人物。 第一阶段尤其困难,如今的职场中,跳槽已经成为IT人薪资提升的普遍行为,如何在一个行业中深耕技术,这个是一个值得深思的问题,但是如果自己在未来有持续的竞争力,在开发、测试、运维等方面精深是我们的必经之路。第二阶段:熟悉金融业务 对工作中的金融方面的业务要非常熟悉,达到无死角的地步,熟知金融业务中的各个板块的知识和流程。 ...
2020-11-18 23:51:08
162
原创 boost库读写Json字符串
boost库中property_tree0.头文件相关头文件为:#include <boost/property_tree/ptree.hpp>#include <boost/property_tree/json_parser.hpp>using namespace boost::property_tree;1.读Json字符串1.1 读简单值auto description = pt.get<std::string>("descripti
2020-11-09 08:27:13
1084
luther whitepaper
2018-08-06
CP CHAIN whitepaper
2018-07-30
genaro network whitepaper
2018-07-13
MagnaChain_Tech-Whitepaper
2018-07-12
eHarveatHunb白皮书(中文)
2018-07-12
ProjectPAI-WhitePaper
2018-07-03
初链黄皮书
2018-06-28
Thunder 共识协议
2018-06-28
RchainWhitePaper
2018-06-26
EOS技术和存储白皮书
2018-06-15
初链(Truechain )白皮书 中文版
2018-05-14
区块链数据格式规范和参考架构
2018-04-08
计算机软件开发国家标准
2018-03-21
Git基本操作和问题汇总
2020-10-18
Facebook加密货币项目Libra技术白皮书(英文版).pdf
2019-06-19
软件架构设计 温昱 (第二版)带书签.pdf
2019-06-11
编译原理-龙书(第2版)-高清带书签.pdf
2019-06-06
百度区块链白皮书(带书签)
2018-09-27
qt5中自动导入文件生成散列图
2018-09-25
Gemini Dollar白皮书和合约代码
2018-09-19
DXchain whitepaper
2018-08-06
Fcoin whitepaper
2018-08-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人