![](https://img-blog.csdnimg.cn/20f4fb61e8924dbdb46138b492e0eb30.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
高性能计算
文章平均质量分 80
本专栏主要介绍架构相关知识,性能优化等
秃顶的码农
杜宝坤,隐私计算行业从业者,从0到1带领团队构建了京东的联邦学习解决方案9N-FL,同时主导了联邦学习框架与联邦开门红业务。框架层面:实现了电商营销领域支持超大规模的工业化联邦学习解决方案,支持超大规模样本PSI隐私对齐、安全的树模型与神经网络模型等众多模型支持。业务层面:实现了业务侧的开门红业务落地,开创了新的业务增长点,产生了显著的业务经济效益。
个人比较喜欢学习新东西,乐于钻研技术。基于从全链路思考与决策技术规划的考量,研究的领域比较多,从工程架构、大数据到机器学习算法与算法框架均有涉及。欢迎喜欢技术的同学和我交流。
同名公众号:秃顶的码农
展开
-
历史上悬疑未解的题目答案大揭秘
历史上有不少精彩的智力题,其中有一些一直悬而未解,多少人纵然冥思苦想,也无法求解。于是有人开始求教生肖迷宫工作室。其实我也没经过深思熟虑,我的答案也不见得一定对,大家可以共同探讨。色盲问题假设:有一个人,他有一种奇怪的色盲症。他看到的两种颜色和别人不一样,他把蓝色看成绿色,把绿色看成蓝色。 但是他自己并不知道他跟别人不一样,别人看到的天空是蓝色的,他看到的是绿色的,但是他和别人的叫法都一样...原创 2019-01-30 14:43:13 · 1467 阅读 · 0 评论 -
变态而有趣的微软面试题及答案
变态而有趣的微软面试题及答案变态而有趣的微软面试题及答案文章目录变态而有趣的微软面试题及答案第一组第二组第三组第四组第五组第六组答案最近和一些朋友讨论面试题比较多,呵呵,这里收藏一个比较经典的面试题目。有点搞笑,但也比较锻炼脑子。第一组烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?你有一桶果冻,其中有黄...原创 2019-01-30 14:33:56 · 3180 阅读 · 0 评论 -
c/c++内存对齐
内存对齐文章目录内存对齐什么是内存对齐为何要进行内存对齐测试不对齐访问与对齐访问的差异内存对齐规则什么是内存对齐首先,举个例子,大家看看如下的程序中的结构体应该占用多大的内存。#include <iostream>using namespace std;#pragma pack(1)typedef struct{ char a ; int b;...原创 2019-02-22 11:45:38 · 165 阅读 · 0 评论 -
Boost智能指针——shared_ptr
Boost智能指针——shared_ptr文章目录Boost智能指针——shared_ptr引言内存管理机制引言boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#includ...原创 2019-02-12 17:09:21 · 10429 阅读 · 0 评论 -
laxical_cast使用
lexical_cast 使用文章目录lexical_cast 使用引言代码引言使用条件:适合下面的1.2种。其他的情况会抛异常。字符串 到 数值类型的转换数值 到 字符串的转换异常处理情况代码#include <exception>#include <iostream>#include <boost/lexical_cast.hpp>...原创 2019-02-12 17:17:47 · 187 阅读 · 0 评论 -
linux下so编写 - 动态库-类
linux下so编写 - 动态库-类文章目录linux下so编写 - 动态库-类引言代码引言加载类有点困难,因为我们需要类的一个实例,而不仅仅是一个函数指针。我们无法通过new来创建类的实例,因为类是在动态库中定义的而不是在可执行程序中定义的,况且有时候我们连动态库中具体的类的名字都不知道。解决方案是:利用多态性!我们在可执行文件中定义一个带虚成员函数的接口基类,而在模块中定义派生实现...原创 2019-02-13 18:01:13 · 2192 阅读 · 0 评论 -
二叉树的最大宽度
二叉树的最大宽度文章目录二叉树的最大宽度代码代码// the max depth for the binary tree// use the recursion to deal it // use the circulation to deal it // sometime the recurtion idea is not a good idea#ifndef _BIN_TREE...原创 2019-02-15 17:23:07 · 2425 阅读 · 0 评论 -
std::tr1::function and std::tr1::bind
std::tr1::function and std::tr1::bind每日一话一本正经的胡说八道引言在C++的TR1中(Technology Report)中包含一个function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类的非静态成员函数时。可以参考Scott Meyers. <<Effective C+...转载 2019-03-08 11:04:46 · 355 阅读 · 0 评论 -
git rebase解决方案
git checkout devgit rebase master # 将dev上的c2、c5在master分支上做一次衍合处理git提示出现了代码冲突,此处为之前埋下的冲突点,处理完毕后git add readme # 添加冲突处理后的文件git rebase --continue # 加上–continue参数让rebase继续处理...原创 2019-03-04 19:51:58 · 504 阅读 · 0 评论 -
std stable_sort
std stable_sort转载:https://www.jianshu.com/p/bbabf83b13ea上周,刚上线的项目中,发现推荐结果排序不稳定,如果用stable_sort()性能会比降低,然后我就修改了比较函数,如果评分相等,比较上架时间auto cmp = [](const GidScore& a, const GidScore& b) { if (...转载 2019-03-13 16:38:21 · 533 阅读 · 0 评论 -
不可重入函数
不可重入函数文章目录不可重入函数举例保证函数的可重入性的方法:实时系统举例malloc维护内部的链表, 而且这个过程不是原子的。譬如, 应用正在执行一个函数, 该函数刚好调用malloc. 此时应用catch到某个signal, signal如果调用这个函数, 就会导致再一次malloc, 而此刻, malloc就可能出大问题。主要用于多任务环境中,一个可重入的函数简单来说就是可以被...原创 2019-02-25 11:59:27 · 1581 阅读 · 1 评论 -
git显示分支名称
在shell中显示git分支名称文章目录在shell中显示git分支名称引言解决办法引言在开发的时候,新申请了一个开飞机,但是这个机器在git切换分支的时候,不显示分支,每次都需要输入git branch命令,非常不方便。解决办法在shell的配置文件中,添加function git-branch-name { git symbolic-ref HEAD 2&gt;/dev/...原创 2019-02-26 14:07:28 · 5938 阅读 · 0 评论 -
git简单教程
git简明教程文章目录git简明教程1 准备工作2 建立分支3 切换分支4 分支合并1 准备工作首先建立一个新目录,并在里面建立一个空数据库。这里我们创建一个名为tutorial的目录。[dubaokun@localhost test]$ mkdir git_test[dubaokun@localhost test]$ cd git_test/[dubaokun@localhost g...原创 2019-02-25 14:31:59 · 102 阅读 · 0 评论 -
使用git pull文件时和本地文件冲突怎么办?
[使用git pull文件时和本地文件冲突怎么办?]文章目录[使用git pull文件时和本地文件冲突怎么办?]同事在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息:error: Your local changes to 'c/environ.c' would be overwritten by merge. Aborting.Please, commit your ...原创 2019-02-26 14:34:23 · 1645 阅读 · 0 评论 -
为啥要用位运算代替取模
为啥要用位运算代替取模文章目录为啥要用位运算代替取模引言引言在hash中查找key的时候,经常会发现用&取代%,先看两段代码吧,JDK6中的HashMap中的indexFor方法:/** * Returns index for hash code h. */ static int indexFor(int h, int length) { return h...原创 2019-03-04 17:00:41 · 1311 阅读 · 0 评论 -
Explicit Constructors(显式构造函数,不允许隐式转换)
隐式转换按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String { String (const char* p ); // 用C风格的字符串p作为初始化值 //…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”); 但是有的...原创 2019-01-23 21:59:02 · 581 阅读 · 0 评论 -
c/c++笔试题(包含语言、数据结构与算法、智力题)
static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;...原创 2019-01-26 22:10:57 · 1632 阅读 · 0 评论 -
深度学习超大模型的分布式训练的探索系列(一)
深度学习超大模型的分布式训练的探索(一)1 背景 数据是算法的石油,伴随着近年来大数据的广泛兴起与机器算力的巨大提升,深度学习大行其道,已经深入到了人们生活的方方面面。在搜索、推荐、购物、广告、短视频以及金融风控等领域,深度的影响着亿万大众。 这些行业每天都在产生大量的数据,超大规模的数据量促进深度学习技术的发展,同时模型变大后也需要更多数据来训练,以前的单机训练逐渐变成了集群训练,成为一个循环,数据规模越来越大,同时模型规模也越来越大,从最初的几M到T级别。同时众所周知,最近几年的算法基本是在吃原创 2021-05-24 15:53:57 · 1549 阅读 · 7 评论 -
GRPC源码编译
一 GRPCGRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。 gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。项目中需要使用GRPC,所以决定使用源码形式cmake进行安装,本来以为是挺简单的事情,结果忙活了半天,所以记录下相关的安装过程,防止以后再次编译的时候踩坑。二、GRPC源码和相关子模块首先,我们从github下载GRPC的源代原创 2022-01-05 21:24:26 · 2356 阅读 · 0 评论 -
cpu 性能 load
CPU的性能指标说到CPU的性能指标,大家都会熟练的使用top命令,观察每个进程的cpu、内存等指标,但是对于头部的指标,部分同学还不是十分清晰,所以本文讲述一下。CPU load average.首先输入top命令,可以看到load average指标:3个值,分别记录了1min,5min,15min的系统平均负载。CPU load这个值在多少的时候,表示机器出问题了呢,记...原创 2019-03-12 10:35:50 · 739 阅读 · 0 评论 -
进程、线程与协程的区别
进程、线程与协程的区别文章目录进程、线程与协程的区别一、概念二、区别:三、进程和线程、协程在python中的使用现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。一、概念1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次...原创 2019-02-25 09:27:03 · 293 阅读 · 0 评论 -
死锁、活锁、饥饿
死锁、活锁、饥饿文章目录死锁、活锁、饥饿一 什么是死锁二 什么是活锁三 什么是饥饿一 什么是死锁死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁发生的条件互斥条件:线程对资源的访问是排他性的,如果一个线程对占用了某资源,...原创 2019-02-25 09:40:31 · 12670 阅读 · 8 评论 -
操作系统中锁的实现原理
在多线程编程中,为了保证数据操作的一致性,操作系统引入了锁机制,用于保证临界区代码的安全。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。所谓的锁,说白了就是内存中的一个整型数,拥有两种状态:空闲状态和上锁状态。加锁时,判断锁是否空闲,如果空闲,修改为上锁状态,返回成功;如果已经上锁,则返回失败。解锁时,则把锁状态修改为空...转载 2019-03-19 15:39:54 · 7008 阅读 · 0 评论 -
原子操作的实现原理及CAS分析
原子操作的实现原理及CAS分析目录 原子操作的实现原理及CAS分析1.原子操作意为“不可被中断的一个或一系列操作”。再多处理器上实现原子操作就变的有点复杂。2.处理器如何实现原子操作? 首先处理器能自动保证基本的内存操作是原子性的。表示当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。但是对于复杂的内存操作处理器是不能自动保证其原子性的,比如跨总线宽度、跨多个缓存行和跨...原创 2019-03-19 11:08:58 · 618 阅读 · 0 评论 -
无锁编程基础
目录文章目录目录背景锁的分类死锁、活锁饥饿、饿死(starvation):优先级反转(Priority inversion)护航现象(Lock Convoys)自旋锁无锁为什么要无锁?(界定问题)如何无锁?(界定问题)CAS等原子操作无锁队列的链表实现ABA问题解决ABA的问题用数组实现无锁队列小结背景我们处在技术快速发展的时代,竞争变得前所未有的激烈,不仅要十八般武艺俱全,还得选对正确的...原创 2019-01-29 17:16:46 · 2512 阅读 · 0 评论 -
高并发服务中的TCP异常排查
tcp解析-tcp的半连接与完全连接队列tcp解析-tcp的半连接与完全连接队列简介tcp队列与socket的关系tcp的三次握手与四次挥手过程server端的半连接队列syn队列server端的完全连接队列accpet队列accept队列满的处理总结简介 我们在开发的时候,有时候会发现,客户端的请求较慢,但是这个时候从服务的角度看每个请求的处理时间原创 2018-01-21 19:02:23 · 2009 阅读 · 0 评论 -
epoll例子
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <errno.h> #include <sys/socket.h>原创 2019-01-29 17:19:39 · 1891 阅读 · 0 评论 -
内存分配
进程分配内存的两种方式–brk() 和mmap()文章目录进程分配内存的两种方式--brk() 和mmap()1. 如何查看进程发生缺页中断的次数?2. 内存分配的原理3.下面以一个例子来说明内存分配的原理:3.1 情况一3.2 情况二4 现象4.1 初步分析4.2 分析代码4.3 真相大白4.4 解决办法1. 如何查看进程发生缺页中断的次数?用ps -o majflt,minflt -C ...转载 2018-12-28 10:57:57 · 447 阅读 · 0 评论 -
使用objdump分析core堆栈
使用objdump分析core堆栈文章目录使用objdump分析core堆栈普通程序的core分析使用c++编程的同学,经常会遇到诸如内存越界、重复释放等内存问题,大家比较习惯的追查这类问题的方式是,打开core文件的limit,生成core文件,用gdb进行分析;但是,在实际的生产环境中。由于程序本省占用内存非常大,比如搜索的索引服务,进行core的dump不太现实,所以一般采用,在程序...原创 2019-01-25 22:13:12 · 3071 阅读 · 0 评论 -
程序编译、优化、调试大杂烩
目录 日常学习1 编译、链接、汇编、调试1.1 议题1.2 CPU cache1.2.1 为什么要有CPU Cache1.2.2 为什么要有多级CPU Cache1.2.3 什么是Cache Line1.2.4 CPU Cache 是如何存放数据的1.2.4.1 你会怎么设计Cache的存放规则1.2.4.2 为什么Cache不能做成Fully Associative1.2.4.3 什么是N-Wa...原创 2018-12-26 09:28:27 · 800 阅读 · 0 评论 -
gdb使用技巧
gdb调试技巧gdb调试技巧文章目录gdb调试技巧多线程调试源文件显示条件断点设置变量x命令多线程调试在工程中,经常需要写多线程的程序,如果这些多线程的程序出现了问题,需要gdb的时候,我们需要用哪些命令呢?info thread 查看当前进程的线程信息,显示ID;thread ID 切换调试的线程为指定ID的线程;break test.cpp:55 thread all 在te...原创 2019-01-29 16:53:04 · 229 阅读 · 0 评论 -
Linux 建立 TCP 连接的超时时间分析
Linux 建立 TCP 连接的超时时间分析Linux 建立 TCP 连接的超时时间分析概述超时分析超时验证如何改进概述Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝试。socket 是 Linux原创 2018-01-28 20:22:27 · 16843 阅读 · 0 评论 -
查看进程的启动时间
shell脚本相关文章目录shell脚本相关1 查看进程的启动时间1 查看进程的启动时间 在Linux下, 如果需要查看进程的启动时间, 常用ps aux命令,但是ps aux命令的缺陷在于只能显示时间到年、日期、或者时间, 无法具体到年月日时分秒。 如果需要查看某个进程的具体启动时间, 使用 ps -p PID -o lstart, 其中,PID为某个进程的进程ID号。如下所示,...原创 2019-02-01 10:18:37 · 6718 阅读 · 0 评论 -
LruCache的代码实现,以及分析
LruCache的代码实现以及分析文章目录LruCache的代码实现以及分析简介原理源代码优化点总结简介作为存储数据、获取数据的服务,LruCache被大量的广泛使用。例如,我们在redis、mongodb种存储海量的数据,应用服务通过api通过网络进行存取,但是由于二八原则,我们大多数情况下,获取的都是相同的一批数据,所以这个时候可以在服务内存创建LruCache将数据进行缓存。原理...原创 2019-01-28 10:43:35 · 542 阅读 · 0 评论 -
redis之压缩列表
redis之压缩列表文章目录redis之压缩列表压缩列表**2.2.2** 节点的构成pre_entry_lengthencoding 和 lengthcontent**2.2.4** 将节点添加到末端**2.2.5** 将节点添加到某个**/**某些节点的前面**2.2.6** 删除节点**2.2.7** 遍历**2.2.8** 查找元素、根据值定位节点**2.2.9*...翻译 2019-04-08 10:42:08 · 626 阅读 · 0 评论 -
LevelDB的sstable解读
LevelDB分析文章目录1. 分析点1.1 静态分析点1.2 动态分析点2. leveldb中的SSTable2.1 引言2.2 SSTable的layout2.2 Data Block2.2.1 技术点2.2.2 技术简介2.2.3 Data block的物理结构2.2.4 Data block的记录的格式2.3 Index Block2.3.1 技术点2.3.2 技术简介2.3.3 ind...转载 2019-01-04 09:40:51 · 1407 阅读 · 0 评论 -
精通C++之函数重载、隐藏与覆盖重写
1 函数重载、隐藏与覆盖重写对于C++函数而言,多个函数如果同名会有很多有意思的事情,从声明的作用域来看,在横向上同一个可访问作用域里面的同名函数可以进行重载;而纵向上作用域对于父子继承的派生类来说,同样的函数名称可以实现隐藏与覆盖。(如果基类成员函数是虚函数,可以基于虚函数实现多态,进行动态联编)下面就详细介绍下函数的重载、隐藏与覆盖重写。1 函数重载定义:C++规定在同一作用域中,例如一个类的成员函数之间,多个函数的名称相同,但是各个函数的形式参数(指参数的个数、类型或者顺序)不同时,构成.原创 2022-01-23 17:31:09 · 561 阅读 · 0 评论 -
linux下C/C++ 头文件以及库文件的搜索路径
linux下C/C++ 头文件以及库文件的搜索路径文章目录linux下C/C++ 头文件以及库文件的搜索路径基础知识gcc搜索头文件顺序linux 库文件的搜索顺序基础知识使用 #include&lt;&gt; :直接到系统指定的某些目录中去找某些头文件。使用 #include"":先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件。使用 -I 参数指定的头文件路径仅...原创 2019-01-28 11:58:27 · 1766 阅读 · 0 评论 -
大数据面试题
大数据面试题目文章目录给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。有10个文件,每个文件1G, 每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的10...原创 2019-01-30 14:54:37 · 294 阅读 · 0 评论 -
bloomfilter详解(布隆过滤器)
目录目录描述算法描述误判率计算和证明总结参考文章描述 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloo原创 2018-01-12 16:21:39 · 3485 阅读 · 0 评论