
编程与应用
文章平均质量分 58
编程语言及应用开发
maray
Snowflake 高级研发工程师,前蚂蚁集团 OceanBase 内核研发高级专家,产品负责人,本科毕业于华中科技大学,研究生毕业于中科院计算所。主要兴趣领域:互联网应用,大规模数据处理。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何优化遍历向量元素的循环?
在这个基础上,我们还可以进一步定制 forEach,比如添加循环展开的模板参数,指导 forEach 做编译期循环展开,可以进一步提升循环遍历性能。isConstantArray 这个条件,是在 Vector 初始化阶段就定好了的,但它又不是一个模板参数,所以很难用模板特化的方式解决。循环里有大量的分支跳转,流水线早就被打得四分五裂了,forEach 已经带来不了什么好处,更不用提应用循环展开。但这个需要一定的设计来配合,比如,在 OceanBase 中,就不太容易应用这个技术。原创 2025-07-15 01:40:38 · 373 阅读 · 0 评论 -
std::vector 自定义分配器
在 std::vector<T, Alloc> 的实现中,会通过 allocator_traits<Alloc>::rebind_alloc<U>(或直接用 Alloc::rebind<U>::other)来为不同用途分配内存。在 C++17 及以前需要自定义,但从 C++20 起 allocator_traits 会使用 std::allocator_traits::construct,你可以省略这两个方法,让 allocator_traits 使用完美转发到 ::new。原创 2025-04-22 23:22:32 · 759 阅读 · 0 评论 -
向量执行优化之手工 unrolling
如果只有一个元素,静态unroll 了多个元素,那就会越界访问了。如果编译器知道 bound.end() 和 bound.start() 之间有1024 个元素,那么它就敢大胆 unroll 了。理论上是可以,如果元素多,就走 unroll 分支,元素少就不走 unroll 分支。但是,要知道,编译器并不知道我们这是一个向量化的计算,它怎么会轻易做这样的优化呢?在数据库实现中,我们有一个认知误区:当我们把数据结构组织成向量后,只要写好 for 循环,编译器就会自动帮我们做好 SIMD 优化。原创 2024-10-23 23:35:56 · 342 阅读 · 0 评论 -
给 git 添加扩展命令
公司里的 git 代码分支既没有和 issue 关联,也没有和 review 关联,每次找起来太费劲。于是,写个脚本吧!没想到 git 添加扩展命令这么方便,早知道这么简单,我的好多工具都做成 git 插件好了!原创 2024-09-25 23:04:14 · 652 阅读 · 0 评论 -
Dance with Compiler - EP3 ARM64 汇编传参约定以及 restrict 汇编分析
v0 - v7: 对于浮点数和 SIMD(单指令多数据)参数,这 8 个寄存器用于传递前 8 个浮点数参数(每个寄存器可以存储一个 64 位的浮点数,或者一组 128 位的 SIMD 数据)。x0 - x7: 这 8 个寄存器用于传递函数的前 8 个参数(对于整数类型的参数)。如果函数有更多的参数,这些额外的参数会通过栈传递。v0: 用于返回浮点数或 SIMD 类型的结果(例如,float、double、__m128 等)。x0: 用于返回整数类型的结果(例如,int、long、pointer 等)。原创 2024-09-09 09:53:09 · 531 阅读 · 0 评论 -
Dance with Compiler - EP2
今天来熟悉汇编指令。原创 2024-09-07 05:45:19 · 921 阅读 · 0 评论 -
Dance with compiler - EP1
此时,我个人理解是:编译器先假设 a 总是可以信任寄存器中的值,当 b 写着块内存时,a 可以读不到最新的修改,当 b 读这块内存时,a 也不需要做任何写回操作使得 b 能读到最新数据。不过,在我们的例子里,我们通过 restrict 关键字欺骗了编译器,实际上 x 和 y 指向了同一片内存,这也导致了最终的结果错误。也是非常考验人的,需要深刻地认识到调整分支概率后编译器可能的行为是什么,才能有的放矢,不然,编译器认为,y 是以指针的形式传入函数体内,说明外部也有指针引用了 y,并且,原创 2024-09-07 02:58:54 · 687 阅读 · 0 评论 -
有趣的 Streamlit
Streamlit 是什么?去年过年前好好研究学习了一番,的确是个很有意思的面向数据开发者的工具,让不懂前端,只懂一点 Python 的数据应用者能够非常快速地搭建数据应用程序。它牺牲了一定的界面灵活性,获得了前后端代码逻辑的统一,开发者只需要写一份代码,就可以同时定义前端和后端逻辑。Streamlit 可以应用在大数据领域、AI 领域,作为连接用户和数据的利器。原创 2024-02-20 14:46:44 · 504 阅读 · 0 评论 -
Alfred 中如何做自定义搜索?
假设我实现了一个搜索引擎,那么我可以用脚本调用搜索引擎获得结果,最后在 Alfred 中对接一个 Open URL 的工作流即可。原创 2024-01-08 14:19:27 · 797 阅读 · 0 评论 -
OceanBase并行执行中 DTL消息接收处理的逻辑
OceanBase 并行执行的消息处理框架是很有意思的,里面用到了不少面向对象编程思想,值得分析。本文介绍 DTL 消息处理。原创 2023-05-31 11:45:44 · 793 阅读 · 0 评论 -
Linux timeout 命令
整个程序不长,但是要完全看明白每一行代码是做什么的,需要对 Linux 里的基本概念要了熟于心,对 Linux 信号处理理解非常到位,对 Linux 编程非常熟悉。原创 2023-03-13 14:49:54 · 1710 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(六)?
今天轮到讨论安全问题了。python 代码中包含有害内容该怎么办?常用技术是沙箱(Sandboxing)。本文从一些基础设施讲起。原创 2023-03-07 11:51:59 · 471 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(五)?
本节研究如何对 import 做白名单。原创 2023-03-02 21:24:59 · 702 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(四)?
本节记录一下多线程、多进程中调用 Python 解析器。原创 2023-03-02 11:43:27 · 272 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(三)?
和 python 交互,最繁琐的部分应该就是参数处理,本文演示了基础数据结构的输入输出。原创 2023-03-01 16:30:40 · 663 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(二)?
本文测试在 C++ 中调用 Pandas 库来执行 Python 程序。原创 2023-03-01 15:48:44 · 404 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(一)?
实现 Python UDF 中的一步就是学习如何在 C++ 语言中调用 python 解析器。本文做一个记录和讨论。原创 2023-03-01 14:30:49 · 802 阅读 · 1 评论 -
学习点 C++ 11 的特性
C++ 要常学习原创 2023-02-27 18:04:43 · 343 阅读 · 0 评论 -
OAuth基本原理
准备用JSON+API的方式来做游味,以减少前后端的耦合。这个思路受启发于douban的API。douban API中讲到了OAuth,于是顺便研究了下,看是不是有必要也支持。 OAuth的产生背景如果校内希望去提取用户的MSN好友列表,有一种方法是(的确曾经用过,还记得吗?):要求用户在校内的一个导入页面输入用户名密码,然后以用户的角色去访问MSN,获得列表。该方法存在很原创 2010-04-13 18:06:00 · 3007 阅读 · 2 评论 -
CSS布局效果
与原计划稍微有一点出入,我们先完成BlogDigger的原型级产品:OnlineRssReader!前台后台数据库都动起来了。我在学习CSS+DIV+AJAX。下面是一个CSS的成果:-)html>head>meta http-equiv=Content-Type content="text/html; charset=gb2312">style>...body{...}原创 2007-05-10 13:56:00 · 1239 阅读 · 0 评论 -
fopen为什么慢之后继---用tcpdump抓包看看慢在哪里
本文背景:外国友人用Wireshark监听数据包的方式分析出来了为什么fopen打开部分url的时候很慢的原因。于是我也动手学习了一遍,有收获。抓包命令:tcpdump -i eth1 host 101.227.160.54 and port 80 -Ap -v -s10000命令解释参考:http://www.tcpdump.org/tcpdump_man.h原创 2015-10-24 21:53:47 · 2679 阅读 · 0 评论 -
关于建立专家Twitter社区的一种想法
阅读Linux源码过程中发现很多细微末节的函数都没有注释,在作者看来可能微不足道,但是从源码阅读者看来却是个坎。 网上有那种网站,把linux很多API都做了详细的解释,但是做得还不够:那些解释定位于面向驱动开发者,只提供了数量有限的API的解释。对于那些细微末节的函数,确只字未提。 为什么不能建立一个这样的社区呢:专门用于解释Linux函数。 社区具有Web2.0特色:原创 2010-04-20 12:05:00 · 1395 阅读 · 0 评论 -
什么是存储过程
类似与我们编程时的函数,将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令,跟函数调用差不多! 存储过程的优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据转载 2007-08-23 20:18:00 · 1296 阅读 · 0 评论 -
Linux UDP协议栈中的片段分析 - udp_recvmsg
udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len, int noblock, int flags, int *addr_len)调用了:err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->原创 2008-09-19 13:15:00 · 3815 阅读 · 0 评论 -
iOS开发历险记
如果我是个有钱人,也许这一切都不是问题,问题是,我没钱。如果没钱,那就没办法买Mac Pro,也没办法买99$的Apple的Developer Program执照,也没办法买最新的Mountain Lion OS X。还好,有一件事,不算是悲哀透顶,我有一个白色的iPad。这大概是唯一的慰藉了吧。故事,从iPad开始。我想让iPad上运行我自己写的程序,但是它上面运原创 2012-03-01 01:16:52 · 2348 阅读 · 2 评论 -
设计准则 之 思考
设计准则 创建设计的时候,必须记住几个基本的设计准则.它们可以帮助你创建一个不但可工作,而且充沛且优美的设计. 首先是"思考,然后写代码."太多的人,一拿到一个作业,就急不可待地开始写代码.但是好的程序员在开始写代码前会花一些时间理解问题,研究问题的各个方面.毕竟,如果你正从圣地亚哥驾车去芝加哥,你是跳上车就向东北方向开(希望你能到达那儿),还是拿出一张地图计划你的路线 如果你在做原创 2007-05-30 01:05:00 · 1204 阅读 · 1 评论 -
DNS欺骗技术原理与安全防范技术
DNS欺骗技术原理与安全防范技术 概述:什么是DNS欺骗?DNS欺骗是一门改变DNS原始指向IP的艺术。为了更好的理解,让我们先来看一个例子。如果你想用浏览器去google搜索一些信息,毫无疑问的你会在地址栏里输入www.google.com的网址然后回车。那么在这背后又有什么事情正在进行着呢?一般而言,你的浏览器将会向DNS服务器发送一个请求,从而要求得到与www.google.转载 2008-09-16 17:52:00 · 3460 阅读 · 0 评论 -
NAP穿透原理
问题:两台计算机,各自都处于一个LAN中,他们如何建立p2p通信呢?有了服务器的帮助就能顺利完成通信吗?有何门道? 现在我们再来分析一下我们最关心的两个NAPT后面的内网计算机如何实现直接通讯呢? 两者都无法主动发出连接请求,谁也不知道对方的NAPT的公网IP地址和NAPT上面映射的端口号。所以我们要靠一个公网IP地址的服务器帮助两者来建立连接。当两个NAPT后面的内网计算机分别连接了转载 2009-12-06 17:09:00 · 1752 阅读 · 0 评论 -
英山的计算机网络安全报告
你好,我是华中科技大学计算机大三的一名学生,英山石正人。 近几年来,英山的计算机网络发展的十分迅速,软硬件设施都十分到位。 但是,在一次网络安全测试中发现:不到1分钟,就扫描出十几个存在漏洞的电脑!其后果就是,这些存在漏洞的电脑可以被黑客(甚至是稍微懂得一点黑客工具使用方法的人)轻易入侵。虽然英山的电脑普遍都安装了“咔吧司机”+“360安全卫士”,但是咔吧存在一个致命原创 2007-03-25 21:30:00 · 1655 阅读 · 1 评论 -
机房的带外管理---远程管理你的开发测试机
昨天一台测试机卡死了,ssh连不上去,于是网上提单子让重启,结果直到今天还没搞定。后来才知道,是因为这台机器的“带外”是坏的,无法远程重启,必须去机房重启。什么是带外?还能有这么大影响。于是学习了下,很简单...原创 2013-08-22 11:56:33 · 3057 阅读 · 0 评论 -
浅谈会话劫持原理及实践
《监视你的一举一动》 ---浅谈会话劫持原理及实践 前言 通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意;其实,真正的入侵是占领整个内部网络。针对内部网络的攻击方法比较多,但比较有效的方法非ARP欺骗、DNS欺骗莫属了。但是,不管使用什么技术,无非都是抓取目标的数据包,然后分析出敏感数据。如果目标内部采用的是共享式转载 2008-09-16 18:07:00 · 5266 阅读 · 1 评论 -
Web负载均衡 -- 《构建高性能Web站点》读书笔记
昨晚发兴读了一下《构建高性能Web站点》Web负载均衡一节,好记性不如烂键盘,笔记梳理一遍。最简单的负载均衡模式:HTTP重定向对外入口服务器只有一台,请求到达后根据请求URL内容将该请求重定向到特定服务器。这种负载均衡方法的特点是(1)一个请求实际会产生两次http ping pong(2)最大带宽取决于入口服务器带宽,由于入口服务器只需要处理路由信息,所以可以处理的请求数量可以原创 2013-08-17 00:40:01 · 3008 阅读 · 0 评论 -
搭建私有的git服务平台
为了实现公司开发平台、个人电脑Windows平台、个人电脑Linux平台、国外买的云服务器、即将咬购买的阿里云的云服务器之间的代码同步和快速部署,进行了一些简单的技术选型,首先考虑的是rsync,发现安装非常麻烦,然后考虑了一个商业软件,安装亦不顺,最终决定还是走最成熟的代码仓库平台,svn和git都是不错的选择,但是考虑到两点,抛弃了svn:svn在每个目录下都有.svn文件夹,内容原创 2013-02-23 23:41:31 · 9290 阅读 · 0 评论 -
浏览器的改进
JQuery使得网页对象的操作变得十分直观,同时实现了描述语言(HTML)和动态控制语言(Javascript)的分离,二者之间的联系通过标签名建立。 (1)不知道有没有这样一个JQuery插件--menu.js:用户在任意一个对象上点右键,脚本会根据对象特点弹出不同的菜单,这样用户操作将变得更加简单直观。基本实现思路也不难:on_$object_rightclick(){原创 2009-02-27 13:20:00 · 928 阅读 · 0 评论 -
轮询法在混合消息通信中的缺陷
消息通信过程可以采取轮询或者中断两种方式,本文尝试对轮询法的一个缺陷做出分析。 一般轮询法的框架: bool have_msg = false;msg_struct msg;while(1){ have_msg = poll_msg(&msg); if(have_msg) { switch(msg.type)原创 2009-11-20 10:51:00 · 1380 阅读 · 0 评论 -
理解XML的概念
XML是Extensible Markup Language的简写,一种扩展性标识语言。 在书写XML文档时,你必须遵循一些规则。不过这些规则通常很简单,易于理解。下面我们就将描述这些规则。XML文档版本XML文档的第一行用来定义该文档使用的XML的版本,下面代码中的标签后面的属性值定义了该XML文档使用的版本为1.0。xml version=1.0?>Sections>ado>c转载 2007-04-08 19:24:00 · 2045 阅读 · 1 评论 -
MIME邮件面面观
P.bhw98{ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 5px; LINE-HEIGHT: normal; PADDING-TOP: 0px; FONT转载 2007-05-29 00:02:00 · 1465 阅读 · 0 评论 -
由当前工作牵引出的topic
无聊,做一个名为Quick Projector的小项目,目的是能够在无线局域网内共享一台连接有投影仪的计算机,实现远程播放幻灯片。该项目的重点在于需要传输高质量的图像,并且低延迟(0.2~0.5sec)。 通过Google发现:1、重点部分实质是牵涉到了"视频会议(VideoConference)”中要解决的议题之一。2、Windows Remote Desktop Protoco原创 2009-03-03 21:24:00 · 806 阅读 · 0 评论 -
一个木马下载脚本
帮一个朋友在阿里云Linux服务器上装软件,发现出奇的卡,终端上敲几个字就卡几十秒。ps -ef一看,发现两个可疑物:/etc/tows/etc/towgets.sh原创 2016-04-29 20:33:04 · 3074 阅读 · 0 评论 -
安装 Theos
安装方式见:http://www.jianshu.com/p/3c1d71c880ca我遇到的问题: 按照网上某个教程,执行了一把SDKVERSION=7.1。结果make时死活告诉我 iPhoneSDK7.1 找不到。 解决办法: 1. 要么执行export SDKVERSION=10.0 2. 要么最开始就不要执行 SDKVERSION=7.1, theos会自动找SDK原创 2016-11-13 15:26:37 · 1030 阅读 · 0 评论