gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档技术架构

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 分类归档: "技术架构"
技术架构 4月 5,2023

技术领导者的 2023 年指南

最近,我有机会向十几位领先的技术专家询问他们对 2023 年的希望、预测和指导。这篇文章提炼了我回想起的广泛对话和丰富的见解。未来一年在金融投资方面看起来很精简,但在创新方面却很长。
毫不奇怪,经济状况对许多技术人员来说很重要。用更少的钱做更多的事情的主题很普遍,同时推动技术解决方案来弥补这一不足。
Vercel 首席执行官兼创始人 Guillermo Rauch(见访谈)表示:“随着宏观经济压力不断上升,企业将不得不为每一分钱而更加努力地奋斗,同时用更少的钱做更多的事。在线企业将如何在短时间内解决这些挑战,同时牢记成本?通过为他们的开发人员配备合适的工具并转向前端性能优化和个性化,为他们的客户提供新的创意体验。”
Builder.io 的首席执行官兼创始人 Steve Sewell(见访谈)也提到了简化的推动力。 “由于裁员而减少工程人员意味着专注于核心业务,减少投机性投资,减少营销/增长支出,以及高效增长而不是不惜一切代价。不要过度修饰——简单。用更少的钱解决更多的事情。”
OutSystems 全球投资组合负责人 Prakash Vyas 对此表示赞同:“确保 IT 生产力在 2023 年将变得更加重要。由于越来越多的技术裁员加剧了开发人员的短缺。” Vyas 补充说,为开发团队提供低代码工具可能有助于最大限度地提高生产力。
Sentry.io 的首席执行官 Milin Desai 也谈到了专注的必要性:
Brave 的首席执行官兼联合创始人 Brendan Eich 指出,“ChatGPT 预测浏览和信息应用程序(不仅仅是搜索)将重新焕发活力,这要归功于网络上所有人类创建的文本。今年可能是结合区块链、隐私和浏览器技术的创新将打破 Big Social 围墙花园的一年。”
2022 年,我们看到人工智能和机器学习从前景广阔的前沿领域转变为许多业务流程中的实际因素。 Java Champion 和 Drools 项目负责人 Mario Fusco 希望在 2023 年采用更加慎重的方法:
OutSystems 的首席技术官 Patrick Jean 预测,今年,公司将采用低代码工具来实现高效的业务流程管理 (BPM):
Guillermo Rauch 预计“基于 AI 的应用程序将包含整个软件类别。但每个应用程序都会找到嵌入人工智能的机会。”作为一个例子,他引用了 Vercel 的无头架构,“让开发人员可以轻松地将现成的人工智能模型集成到客户体验中。”他还预计人工智能/机器学习的进一步发展工作负载“正在为低延迟人工智能驱动的应用程序在边缘执行。”
SvelteKit 框架的创建者 Rich Harris(见访谈)看到了 AI 对用户界面设计的影响。 “AI 将无处不在,其中大部分将是垃圾——繁琐的界面、可疑的结果以及普遍存在的机会主义意识——但它也将在一代人中引发我们对 UI 和工作流程的看法的一些最根本的变化”
Fusion Auth 开发者关系负责人 Dan Moore 表示,机器学习“将继续集成到软件和应用程序中,但像 ChatGPT 这样的东西非常昂贵,只有大玩家才能拥有如此流畅的体验。”与此同时,机器学习“将继续成为任何寻求风险投资资金的公司所必需的闪亮对象,”摩尔说。
AI 取代人类的工作有一些声音和愤怒,但任何花时间使用 AI 工具的人都明白它们只是工具包中的一个工具。当前的 AI 是现有功能和数据的 NLP 接口——其解析和响应人类语言的能力令人印象深刻,但不是根本性的改变。
在过去的几年中,前端框架和技术一直处于激烈的发展之中,并且这种趋势显示出与我们保持一致的迹象。
Solid.js 的创建者(见访谈)和 JavaScript 框架前沿工作人员之一的 Ryan Carniato 说:“过去的一年有点觉醒。在过去十年的大部分时间里,我们一直假设我们开发网站和应用程序的方式正朝着一个特定的方向前进——可以在浏览器中运行的东西,将在浏览器中运行。”Carniato 继续说道:
Steve Sewell 还看到了对开发人员体验的日益关注:“制作高性能网站将更容易维护我们习惯的出色 DX。”他还指出,“React 的主导地位最终将开始失去一些动力。”
吉列尔莫·劳赫继续说道:
Vaadin 的首席营销官 Kim Weins 将 Java 引入了对话,他说“公司将使用全栈 Java 构建新的应用程序,或者将基于 TypeScript 和 JavaScript 的前端框架与 Java 后端相结合。”Weins 引用了开源框架 Hilla作为一个框架的例子,它使开发人员可以更快、更容易地将 React 与 Java 后端结合起来。
MongoDB 首席技术官 Mark Porter(见访谈)也指出,分析正在“左移”到应用程序开发中:
加密货币在 2022 年遭受了真正的打击。尽管如此,许多技术仍在向前发展。似乎在区块链主题上出现了两个阵营。一方面,正如 Mario Fusco 所说,“我希望人们最终会意识到加密货币只是历史上最大的庞氏骗局。”

作者 east
技术架构 11月 28,2021

阅读开源软件源码的心得体会

互联网大厂研发的职位,很多有对源码有要求。同时,看源码最大的好处是可以开阔思维,提升架构设计能力。有些东西仅靠书本和自己思考是很难学到的,必须通过看源码,看别人如何设计,然后思考为何这样设计才能领悟到。能力的提高不在于你写了多少代码,做了多少项目,而在于给你一个业务场景时,你是否能拿出几种靠谱的解决方案,并且说出各自的优缺点。而如何才能拿出来,一来靠经验,二来靠归纳总结,而看源码可以快速增加你的经验。而不少源码十分庞大复杂,下面谈谈阅读源码心得体会。

那么如何阅读源码呢?在你看某一个框架的源码前,先去Google查找这个开源框架的官方介绍,通过资料了解该框架有几个模块,各个模块是做什么的,之间有什么联系,每个模块都有哪些核心类,在阅读源码时可以着重看这些类。或者找找是否有这方面源码解读的书,在别人探索好的路再去探索,能节省时间。

然后对哪个模块感兴趣就去写个小demo,先了解一下这个模块的具体作用,然后再debug进入看具体实现。在debug的过程中,第一遍是走马观花,简略看一下调用逻辑,都用了哪些类;第二遍需有重点地debug,看看这些类担任了架构图里的哪些功能,使用了哪些设计模式。如果第二遍有感觉了,便大致知道了整体代码的功能实现,但是对整体代码结构还不是很清晰,毕竟代码里面多个类来回调用,很容易遗忘当前断点的来处;那么你可以进行第三遍debug,这时候你最好把主要类的调用时序图以及类图结构画出来,等画好后,再对着时序图分析调用流程,就可以清楚地知道类之间的调用关系,而通过类图可以知道类的功能以及它们相互之间的依赖关系。另外,开源框架里面每个功能类或者方法一般都有注释,这些注释是一手资料,比如JUC包里的一些并发组件的注释,就已经说明了它们的设计原理和使用场景。

在阅读源码时,最好画出时序图和类图,因为人总是善忘的。如果隔一段时间你再去看之前看过的源码,虽然有些印象,但当你想去看某个模块的逻辑时,又需根据demo再从头debug了。而如果有了这俩图,就可以从这俩图里面直接找,并且看一眼时序图就知道整个模块的脉络了。

作者 east
技术架构 2月 12,2021

直播间机器人设计方案

设计目标

1:模拟一定人数在房间,保证房间的人气

2:不同时段房间内房间机器人的人数要有波动,防止人数不真实

3:支持房间内做活动,需要临时增加大批量的用户

4:机器人不能出现大批量进入房间,大批量退出房间的情形

设计流程

1:增加robot进程进行通知机器人进入房间退出房间的处理

2:设计给机器人分配特定的号段区间 (例如:850000000-860000000)

2:robot进程读取配置文件,获取房间信息,以及房间的机器人配置信息流程

4:如有讲师在麦上,robot服务定时判断真实人数和在线人数的比例公式,判断是否需要增加或减少机器人,如果需要,则发起信令请求,消息流为:

robot->usermgrsvr->gateway->roomsvr

5:房间服务器获取到加入房间请求后,判断当前的最大机器人ID,然后从最大的机器人ID

往上累加,获取最新的机器人ID。(如果达到最高的配置860000000,则从最低850000000开始循环)。然后根据新增加机器人ID,做加入房间的处理.

6:房间服务器获取到退出房间的请求后,判断当前的最小机器人ID,然后删除指定的机器人数量

7: 如果没有讲师在麦上,robot服务逐步删除房间内的机器人,发起信令请求, 消息流为:

   robot->usermgrsvr->gateway->roomsvr,房间服务器处理为第6部。

配置文件

robot配置文件robot.conf如下信息:

[roomlist]        #房间列表配置

Roomid=60001,60002,60003

[onlineparam]

onlinenum=20   #机器人基础在线人数

onlinerate=1-200:30;201-500:20;501-2000:10;2001-1000000000:5 #机器人数比率

假设M为真实的在线总人数

当1<=M<=200时

Totalonline =  onlinenum + M * 30

当200<M<=500时

Totalonline = onlinenum + 200 * 30 + (M-200) * 20

当500<M<=2000时

Totalonline = onlinenum + 200 * 30 + 300 * 20 + (M-500) * 10

当2000<M<=1000000000时

Totalonline = onlinenum + 200 * 30 + 300 * 20 + 500 * 10 + (M-500) *5

作者 east
技术架构 2月 12,2021

Redis数据同步服务器(syncsvr)文档

架构图

流程图

初始化同步流程:

动态数据同步线程:

服务器部署

  1. 每个机房部署一个syncsvr服务器
  2. Syncsvr与其他机房的syncsvr相互连接
作者 east
技术架构 2月 11,2021

C++编码规范

一、    文件名命名规范

  1. 文件的名字需和承载的类之间有一定的关联性,而且常用的公共头文件需要定义得比较简短
  • 文件名采用全部小写的方式,不允许大小写混合的方式

二、    源程序文件

  1. 源文件段落依下列顺序:
  2. 序言
  3. 系统头文件引用(include)
  4. 用户头文件引用(include)
  5. 全局常量宏定义(define)
  6. 全局函数宏定义(define)
  7. 全局类型定义(typedef)
  8. 全局枚举类型定义(enums)
  9. 全局变量说明(extern)
  10. 全局变量说明(non-static)
  11. 全局变量说明(static)
  12. 函数(通常从最高层开始,按层次横向排列。如果定义较多的独立的公用函数,可以考虑按字母顺序排列。
  13. 序言内容应包括版权声明、内容描述、格式如下:

/*********************************************************************

 *  Copyright 2016  by 99letou.

 *  All right reserved.

 *

 *  功能:*****文件

 *

 *  Edit History:

 *

 *    2016/04/04 – Created by David.

 *    2006/04/06 – Modified by John to print output in the new form.

 */

  • 段落之间用空行分隔。
  • 文件长度尽可能在1000行之内。
  • 每行长度尽可能不要超过79列。

三、    头文件

  1. 头文件开头注释:

/**
 * Description: This is a test program
 */ 

  • 每个头文件采用下面的形式避免被重复引用:

#ifndef EXAMPLE_H

#define EXAMPLE_H

… /* body of example.h file */

#endif /* EXAMPLE_H */

  • 多个源文件引用的说明放入头文件中。
  • 说明函数或外部变量的头文件应在定义该函数或变量的文件中引用。
  • 引用头文件不要使用绝对路径。使用<filename.h>引用系统头文件;使用“filename.h””引用用户头文件。

四、    数据变量说明

  1. 常量的命名规范:

    常量名由全大写字母组成,单词间通过下划线来界定

  • 成员变量的命名规范:

    m+_+[变量类型]+变量名

    m后带上明确表达变量意义的英文名词而不要用难以表达意义的缩写。且m后的变量名首字母必须大写。如:

    class CMyGame

    {

        private :

           CPoint m_Point;<―――普通类型

           CGame* m_pGame;<―――指针类型

           Int m_nGameID;<―――整数类型

    }

  • 函数参数的命名规范:

采用波浪法来定义函数参数变量。同样的,也必须使用可以明确表达变量意义的英文名词,而不仅仅是缩写。

[变量类型]+变量名

如定义一个读取文件的函数,并且用参数传入一个文件名

public boolean readFile(String strFileName)

{

…

       m_sFileName = strFileName;

}

  • 局部变量的命名规范:

采用全部小写的方式定义局部变量名。而且尽量用有意义的名词作为变量名。

局部变量不需要在前面增加变量类型标识。

public boolean readFile()

{

              String filename = “e.ext”;

}

  • 局部循环变量的命名规范:

用小写的i、j、k依次作为循环变量

       如:

       for (int i = 0 ; i < 10 ; i ++ )

{

       for (int j = 0 ; j <10 ; j ++ )

       {

}

}

  • 临时变量的命名规范:

一般情况下尽量使用有意义的变量名,如果是某变量的临时变量,可采用前面增加tmp前缀的方式。如果实在没办法,可采用tmp、temp等作为临时变量名,但不可以过多定义诸如tmp1、tmp2等变量,如果出现此情况,则必定可以采用有意义的名词代替。

       int tmpserialno = mSerialNo++;

       tmpserialno %= 10;

       mSerialNo = tmpserialno;

  • 枚举常量

采用波浪法加E前缀来定义枚举常量。同样的,也必须使用可以明确表达变量意义的英文名词,而不仅仅是缩写。且E后首字母必须大写

正确写法:

enum ECHARTYPE
{
    CHARTYPE_SPACE = _ISspace,
    CHARTYPE_PRINT = _ISprint,
    CHARTYPE_CNTRL = _IScntrl,
};

错误写法:

enum ECHARTYPE{ SPACE = _ISspace, PRINT = _ISprint, CNTRL = _IScntrl };

  • 变量定义范围建议:

尽量在变量的有效范围内定义之,如果一个变量仅仅在某个函数内使用到,则把其定义为一个成员变量就是不适合的。在如某些变量只在循环内用到,则应该在循环体内定义之,而不要随意括大其定义范围。

  • 变量类型:

基本类型(保留类型)

char c cMyChar;
bool b bMyBool;
int/short/long n nMyInt;
float/double f fMyFloat;
Long64 l lMyLong;
String/char*(当明确知道是用作字符串的情况下) str strMyString
map map mapPlayers
vector vec vecPlayers
list lst lstPlayers
multimap mmap mmapState

特殊类型

Handle h hFile;
  1. 指针类型:

在变量类前增加p标识,作为标识此变量为指针类型,如:

       int *pKey = NULL;

       CDateTime* pDateTime = new CDateTime(0);

  1. 数组变量命名规范:

对于数组类型的变量,需要采用复数s以标识此为数组变量。如:

int m_nKeys[100];

double dValues[200];

CMyClass Strings[200];

特例:对于char buf[200]这种定义,由于其使用习惯原因,不需要采用数组前缀。

       对于数组指针变量,同样在类型前增加p标识。在删除的时候,必须用delete[]的方式删除动态数组,以保证数组内的实例被调用析构函数。

       CDateTime* pBirthdays = new CDateTime[20];

    ….

       delete[] pBirthdays;

       int* m_pnKeys = new int[20];

五、    类说明

  1. 类名命名规范

       根据各种类的类型和用途,采用不同前缀+名词的命名方式。名词采用波浪法,必须使用可以明确表达变量意义的英文名词。

  • 前缀
  • 普通类(C)

       一般类,采用C+名词的方式命名

例如:

Class CPerson

{

Protected :

String m_strName;

String m_strNickName;
};

  • 接口类(I)

    对于无任何实现的纯虚类,称为接口类,这些类的特点都是无任何成员变量,存在需要其他实现类实现的纯虚函数。

       接口类必须采用I+名词的方式命名。

例如:

class IDataInput

{

       Public :

              virtual ~IDataInput() {};

              virtual void read() = 0;

}

  • 结构体(T)

       Struct,结构体,必须以T+名词的方式命名。

例如:

       typedef struct _t_mystruct

       {

              Unsigned int number;

              Unsigned int value;

              Char name[255];

       }TMyStruct,* TMyStructPtr;

  • 模板类

       模板类,必须以全小写命名。

例如:

template<class T,allocator A>

class screen : public map<T,A>

{
}

  • 类成员的初始化(Member initialization lists)

成员的初始化必须在构造函数名的下一行开始

正确写法:

gribble::gribble()
:m_private_data(0), m_more_stuff(0), m_helper(0)
{
}

错误写法:

gribble::gribble():m_private_data(0),m_more_stuff(0), m_helper(0)
{
}

  • 类成员变量必须采用private的定义,不允许使用public定义,并置于类定义的最后,另外用getter和setter的函数访问和修改之(在需要考虑程序大小的时候可以忽略此规则)

    class CTest

    {

           public : 

    int getTopicID()      //获取话题ID

    { 

    return m_nTopicID;
    }

    void setTopicID(int nTopicID) //设置话题id

           {

                  m_nTopicID = nTopicID;

           }

           private:

      TInt m_nTopicID;

      }

  • 一个方法只完成一个任务,不要把多个任务放在一个方法中,即使那些任务非常小
  • 功能类的方法的大小尽可能不要超过100行

六、    函数说明

  1. 每个函数前加入注释块,描述函数功能、输入参数和返回值,必要时应说明其功能、用法、重要设计决策与副作用。

/**

    * @description : PrintOneMsg

    * @input param : nUserID     — 用户ID

    * @output param:  nMoney– 玩家体力

    * @return: 0  — success

               other — false

   * @exception CException reason

 */

int PrintOneMsg((int nUserID,int & nMoney)

{

function body;

return 0;

}

  • 函数名称原则上采用动词名词的组合形式,函数名称采用波浪法,第一个单词首字母采用小写,后面的单词的首字母采用大写

如:int getTopicID()

  • 函数的参数个数尽可能不要超过5个。
  • 函数体的开、闭花括号写在第一列,分别占一行。函数体的局部变量说明和代码缩进4格。
  • 业务逻辑函数的大小尽可能不要超过200行

七、    代码注释规范

为了能更好的体现代码即详细设计文档这个意图,在对代码注释的时候,需遵守下列的规范。

  1. 用“注释块”描述数据结构、算法等,放在被注释的程序段前:

/*

 *  Here is a block comment.

 *  The opening slash-star and closing star-slash are alone on a line.

 *  …

     */

  • “单行注释”放在被注释的程序段前,并与该程序段对齐:

if (argc > 1)

{

    // Get input file frmm command line

if (freopen(argv[1], “r”, stdin) == NULL)

{

        perror(argv[1]);

    }

}

  • 放在代码行尾的“短注释”与被注释的代码分开至少一个空格:

if (a == EXCEPTION)

{

b = TRUE;           // special case

    BODY

}

else

{

b = isprime(a);     //works only for odd a

BODY

}

  • 函数抛出异常注释规范

对于可能抛出异常的类方法、函数,在注释中说明所抛出异常的类名和产生异常的原因;

注释中采用如下语法

/**

* @exception fully-qualified-class-name description

*/

fully-qualified-class-name:方法声明的异常名

description:产生异常的原因

例如:

  /**

   * 连接数据库

   * @ exception CSQLException 数据库连接失败,具体原因请根据sqlcode查阅数据库错误代码说明

   */

virtual bool connect()=0;

八、    构造与析构

  1. 类构造函数,做非资源变量的初始化动作,原则上不进行任何可能出现错误的操作,如分配内存,调用资源等。
  2. delete 与new ,free与malloc,delete[] 与new[]必须成对使用,否则不保证会不会出现问题。

九、    异常处理

  1. 所有的异常抛出都必须以对象形式,而不是能以new 的指针形式。而捕获的时候就可以统一用引用的方式进行捕获。这样在性能和开销方面不会加大的同时,也无需关心指针的删除问题。

       try

       {

              throw CDateTimeException(“datetime format error”);

       }

       catch (CDateTimeException& e)

       {

              cout<<e.what()<<end;

       }

十、    其他良好的编程习惯

  1. 缩进采用tab而不是用space;tab的缩进显示距离建议为4个空格
  2. 用一个空行来分开代码和逻辑的分组;
  3. 花括号“{”、“}”需独立一行,而不像if for等可以和括号同一行,而且必须与if等缩进相同的空间

如:if ( test == 1 )

              {

       }

  • 在每个运算符和括号的前后都空一格。
  • 无warning编译
  • 在switch语句中出现的fall-through应加以注释:

switch (expr)

{

case ABC:  //注释

{

statement

break;

}

case DEF: //注释

{

statement

break;

}

     default: XYZ:

     {

       statement;

break;

}

}

作者 east
技术架构 2月 11,2021

视频直播服务器设计原则

1. 设计原则

1.1    KISS

简单就是美,用最简单的方式解决问题

1.2    客户/服务端带宽是最珍贵的

最珍贵的是客户端与服务器端的带宽,其次是客户端的CPU,再次是服务器的间的带宽,最后才是服务器的CPU。流畅是第一优先事项。

1.3    避免单点,分布式部署

避免单点进程的出现,如果必须出现,也需要保证其是所有进程中故障率最低的。系统必须支持分布式异地部署,支持平滑扩容,达到系统的高可用。

1.4    不要过早优化

做任何的优化,都必须以事实数据为前提,不要在设计阶段做一些想象中的优化。先保证业务的正常使用,即先扛住,再来优化。

1.5    层次化分布设计

每一层都应该有相应的预处理,不要把所有的处理放在最后一层。

如:客户端应处理的逻辑,应该由客户端处理完毕后再由服务器做后续的处理,不要仅仅把原始数据给到服务器。

每一层都应该有相应的安全防范,不要把所有的防范集中在某一层。

    如:服务端应永远假设客户端发送来的消息包都可能是非法的;客户端应永远假设电脑的输入有恶意性的。

1.6    大系统小做

将功能复杂较大的系统,化大为小,减少模块耦合,降低相关联性,用多个独立的模块来实现整体系统的功能。

总的来说,大系统小做采用的是化繁为简、分而治之,便于开发和迅速实现;同时当某个模块出了问题时,因为相互独立,能将影响降到最低,不至于扩大影响范围。

1.7    有损服务原则

    随着系统功能越来也多,系统的复杂度也越来越大,系统越来越臃肿。这是系统出错的概率就会逐渐增大。当故障异常,一定要保证系统重点功能的正常使用,防止系统零服务的现象发生,这就是有损服务理念。有损服务设计理念如下:

1:问题时,优先保证关键功能

2:非关键功能不可以影响关键功能

3:在条件允许的情况下,损失越少越好

1.8    轻重分离原则

保持接入和业务处理的分离,接入尽量轻量化,使得系统具有很好的吞吐量,处理尽量异步化,使得可以平滑扩展。

作者 east

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.