langzi989
码龄11年
关注
提问 私信
  • 博客:356,841
    社区:2
    动态:6
    356,849
    总访问量
  • 149
    原创
  • 1,195,015
    排名
  • 80
    粉丝
  • 0
    铁粉

个人简介:每个现象后面都隐藏着一个本质,关键在于我们是否去挖掘它

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2014-04-09
博客简介:

langzi989的专栏

查看详细资料
个人成就
  • 获得165次点赞
  • 内容获得25次评论
  • 获得710次收藏
  • 代码片获得127次分享
创作历程
  • 1篇
    2022年
  • 19篇
    2020年
  • 107篇
    2019年
  • 15篇
    2016年
  • 22篇
    2015年
  • 9篇
    2014年
成就勋章
TA的专栏
  • protobuf
    2篇
  • C++11
    7篇
  • zookeeper
    5篇
  • golang学习
    3篇
  • C&C++学习
    81篇
  • 网络相关
    9篇
  • ACM算法
    4篇
  • 其他
    13篇
  • linux工具及命令
    27篇
  • 前端知识
    1篇
  • redis研究
    3篇
  • 汇编相关
    2篇
  • 分布式系统理论
    4篇
  • 云计算
    2篇
  • python
    5篇
  • 系统架构
    2篇
  • 设计模式
    2篇
  • effective C++
    2篇
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++ Memory Order 理解

多线程编程过程中,并发、数据竞争和线程同步是一个绕不过的问题,为了支持多线程并发编程,C++提供了atomic、mutex等标准库用于原子操作以及线程之前的同步机制。在使用atomic进行原子操作的时候,由于原子操作可能在对象本身以外的内存进行操作,可能会导致线程A的操作1和操作2 在线程C、D看来执行顺序可能不同(即C可能看到的执行顺序是1->2,D可能看到的执行顺序是2->1),为了解决这个问题,在所有原子操作的接口中都提供了一个Memory Order参数,用于给Progermer提供灵活的控制选
原创
发布博客 2022.09.10 ·
1075 阅读 ·
0 点赞 ·
1 评论 ·
5 收藏

隐藏struct具体实现细节

​ 我们知道对于struct,其所有的成员默认情况下是所有对外可见的,即为public属性。但是有时候为了提高程序的封装性,我们需要将struct的内容细节隐藏起来,怎么做呢?可以使用下面这种做法达到目的。// a.htypedef struct A At;class Test {public: Test(int a); int Get(); At* _a;};// a.cpp#include "a.h"typedef struct A { int a;} At;T
原创
发布博客 2020.06.01 ·
795 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

自旋锁、互斥锁、乐观锁、悲观锁、读写锁概念以及特点总结

​ 在开发的过程中,很常见的场景就是在多进程或者多线程中访问同一份资源,而如果直接不加限制的对这段资源进行写操作的话,很可能会将这段共享资源写乱而导致不可预期的后果。在Linux中为了解决这个问题,一个常用的方法就是对操作这段共享资源的区域进行加锁避免上述问题。在Linux中将锁在不同的角度进行了一些分类,这里记录一下Linux中提到的一些锁的概念以及其特点。本文只对部分类型的锁的概念、特点进行记录,而不深究其实现。如果有什么理解有误的地方欢迎指正。1、自旋锁(spinlock)与互斥锁1.1 概
原创
发布博客 2020.05.31 ·
1605 阅读 ·
3 点赞 ·
0 评论 ·
9 收藏

以示例方式记录pthread_once_t

#include <iostream>#include <thread>#include <vector>#include <pthread.h>/* 参考链接:https://www.cnblogs.com/qinwanlin/p/pthread_once.html* @desc: pthread_once_t* 用于控制函数只执行一次的变量,一般初始化为PTHREAD_ONCE_INIT,即0* 取值范围:*
原创
发布博客 2020.05.27 ·
427 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

以示例方式记录unique_lock&lock_guard

#include <iostream>#include <mutex>#include <thread>#include <vector>/* 参考链接:https://www.cnblogs.com/fnlingnzb-learner/p/9542183.html* @desc: unique_lock* @constructor:* (1) unique_lock() noexcept;
原创
发布博客 2020.05.27 ·
272 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

以示例方式记录mutex

#include <iostream>#include <mutex>#include <thread>#include <vector>/** @desc std::mutex* @constructor* constexpr mutex() noexcept; // 只有一个默认构造函数* mutex (const mutex&) = delete; // 禁止拷贝构造* @func
原创
发布博客 2020.05.27 ·
189 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

以示例方式记录pthread_key_t

#include <thread>#include <iostream>#include <string>#include <vector>#include <chrono>// 参考链接:https://blog.csdn.net/Kaiwii/article/details/8461277/** @desc pthread_key_t* 线程特有变量,对进程来看只有一个变量,但是在线程中,该变量的数据是完全独立
原创
发布博客 2020.05.27 ·
178 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

读扩散与写扩散分析

写扩散与读扩散的概念常见于feeds流类型的业务中的数据写入和数据读取的流程。下面用两张图简单说明一下读扩散和写扩散分别是什么。写扩散读扩散从上面的读写扩散的流程我们可以分析出读写扩散分别具有哪些优缺点。写扩散的优点:1、控制逻辑和数据读取逻辑简单2、粉丝数据独立,方便粉丝内容定制化推荐。3、大V数据丢失,对关注者数据影响不大,关注者依然可以正常读取关注者发布的数据内容。写扩散的缺点:1、浪费存储成本2、写扩散需要使用专门的扩散队列3、数据实时性较差。(要等待数据扩散完才
原创
发布博客 2020.05.22 ·
6950 阅读 ·
4 点赞 ·
0 评论 ·
11 收藏

使用示例方式记录lamda表达式使用方法

#include <iostream>#include <vector>#include <algorithm>/* lamda表达式的基本语法: [capture](parameters)->return-type{body} 语法说明: [capture]:变量捕获,这里指定在lamda表达式中可见的外部变量,并说明是以传值还是传引用的方式进行捕获 (parameters):lamda表达式
原创
发布博客 2020.05.21 ·
177 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

使用示例方式记录weak_ptr使用方法

#include <iostream>#include <memory>/*// pa与pb相互引用,导致引用计数不能减为0,导致内存泄漏class B;class A {public: std::shared_ptr<B> m_pb; ~A() { std::cout << "A deleted" << std::endl; }};class B {public: std::s
原创
发布博客 2020.05.20 ·
440 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

使用示例方式记录shared_ptr使用方法

#include <memory>#include <iostream>// shared_ptr实现共享式拥有概念。// 多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。// 从名字share就可以看出了资源可以被多个指针共享,它使用计数机制来表明资源被几个指针共享。int main() { std::cout << "***********************默认初始化为空******************
原创
发布博客 2020.05.20 ·
242 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

使用示例方式记录unique_ptr使用方法

#include <memory>#include <iostream>int main() { std::cout << "*************************默认初始化为nullptr*************************" << std::endl; std::unique_ptr<int> u1; std::unique_ptr<int> u2(nullptr); s
原创
发布博客 2020.05.20 ·
358 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++11 nullptr与常量表达式constexpr记录

1、nullptr(1) nullptr是一个关键字,而nullptr_t是一个类型typedef decltype(nullptr) nullptr_t使用nullptr_t类型必须包含#include ,而nullptr不需要包含任何头文件。nullptr_t类型可以隐式转换为任意一种指针类型;如:std::nullptr_t test;char* s = test;Nullptr_t类型不适用于算数表达式,但是使用与关系表达式。(2) nullptr是有类型的,仅可以被隐式转换为指
原创
发布博客 2020.05.15 ·
333 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

基于Protobuf的简单RPC框架实现原理

​ 以前对protobuf的使用仅限于将其作为C/S之间的数据传输的序列化工具,而对于基于protobuf实现rpc框架的使用较少了解,这两天通过一个开源的简单RPC框架对这部分的实现原理进行学习,并做相关记录,如存在理解有误之处,欢迎指正。​ 开源简单RPC框架:https://github.com/goyas/goya-rpc​ 使用Protobuf实现RPC框架大致可以分为以下几步:1、编写proto文件定义服务,并使用Protoc工具生成RPC对象接口模型。2、编写RPC服务处理主逻辑(继
原创
发布博客 2020.05.11 ·
4325 阅读 ·
10 点赞 ·
1 评论 ·
24 收藏

protobuf基本用法详解

文章目录1、包名package2、option3、消息类型3.1 message3.2 字段规则3.3 标识号3.4 数据类型3.4.1 基本数据类型3.4.2 枚举类型3.4.3 map数据类型3.4.4 message类型3.4.5 嵌套消息类型4、import导入其他proto文件4.1 import4.2 import public5、更新Message消息类型原则6、protobuf扩展...
原创
发布博客 2020.05.08 ·
17249 阅读 ·
10 点赞 ·
0 评论 ·
65 收藏

Linux设置命令行提示符格式

命令行提示符的环境变量是PS1,所以我们只需要对命令行提示符进行设置,即可按照我们想要的格式进行设置。这里分享一下我的设置:export PS1="\[\e[32;1m\][\[\e[33;1m\]\u\[\e[31;1m\]@\[\e[33;1m\]`/sbin/ifconfig eth1 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/...
原创
发布博客 2020.05.03 ·
726 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

http协议详解

​ http协议是一种超文本传输协议,用于客户端和服务器的一种请求应答标准。设计http协议的最初目的是为了提供一种发布和接收html页面的方法,通过http或者https协议请求的数据使用url来标识。1、http协议特点(1)基于请求/响应模型的客户端服务器模型。(2)简单快速:客户端请求服务端只需要指定请求方法+请求路径,由于http协议简单,使得http服务器程序规模较小,因而传输...
原创
发布博客 2020.03.24 ·
547 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Golang 协程优雅退出

关于golang中消费协程优雅退出的写法,写了一个简单的小例子进行记录一下。使用场景:1、生成协程生产数据到管道中2、消费协程在管道中取数据进行处理通过捕捉特定信号对程序进行相关处理,当某个信号进行触发的时候,主协程将向各个协程发送退出指令,当数据管道处理完成时,若接收到退出指令 将结束协程的执行package mainimport ( "fmt" "git.code.oa.co...
原创
发布博客 2020.02.23 ·
1671 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

优雅实现golang默认参数

​ 原生的golang中,函数定义不支持默认参数。但是在实际开发过程中,经常会有些参数用户可以不关心或者可以根据实际情况去定制实现,这个时候需要使用到默认参数,在C++中,函数的定义和实现本来就支持默认参数,如果需要在golang中实现默认参数,可以参考一下做法:package mainimport "fmt"// 可以由用户自定义的参数集合type Option struct { ...
原创
发布博客 2020.01.11 ·
11726 阅读 ·
0 点赞 ·
0 评论 ·
6 收藏

golang值类型与引用类型的区别

1、golang值类型与引用类型的区别1.1 本质存储区别值类型与引用类型的区别主要在于:值类型的变量: 存储当前类型的存储的数据。值类型包括数值类型、bool、string、数组、struct结构体引用类型的变量:存储地址,该地址对应的空间才是真正存储的数据。引用类型包括:指针、slice切片、管道chan、map、以及interface等类型。注意:golang中的引用类型和值...
原创
发布博客 2020.01.10 ·
2528 阅读 ·
1 点赞 ·
0 评论 ·
9 收藏
加载更多