当前位置: 首页 > news >正文

购物网站开发的背景介绍网络营销推广技术分析

购物网站开发的背景介绍,网络营销推广技术分析,网站优化要素,小米路由器 wordpress如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更#xff0c;出现了一个 crash问题#xff0c;底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题#xff0c;在这篇文章中以实际工作中resize导致crash为例#xff0c;引出如何… 如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更出现了一个 crash问题底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题在这篇文章中以实际工作中resize导致crash为例引出如何进行系统性分析希望可以帮助大家 在最后给社区提了一个pr感兴趣可以去查阅。 https://github.com/apache/arrow/pull/40817 背景 最近想修改一下arrow batch的大小当调整为65536后发现crash出现 terminate called after throwing an instance of std::length_errorwhat():  vector::_M_default_append 然后通过捕获异常gdb找到异常位置最后拿到堆栈发现位置是在join里面构建哈希表侧的partition数组出了问题 prtn_state.key_ids.resize(num_rows_before  num_rows_new); 即问题转化为resize操作为何引发throw 研究了一下STL代码发现会遇到两种场景先把STL代码精简一下贴出来给大家看看 if (__navail  __n) {const size_type __len _M_check_len(__n, vector::_M_default_append);}size_type _M_check_len(size_type __n, const char* __s) const {if (max_size() - size()  __n)__throw_length_error(__N(__s)); } 其中最核心的就是_M_check_len函数看到这个判断能想起哪两种场景呢 场景1内存确实不足了超过了vector的max_size此时会抛这个异常。场景2__n传递的是一个负数由于是size_t类型则会变为超大值从而抛出异常。 场景1在我们系统当中通过查看内存不会遇到于是转到场景2首先是猜测是个负数然后搞了个log包上去测试发现确实是这个问题可以看到rows_new变为负数了。 part id 15, dop_  105,prtnid  1 ranges  0,prtnid ranges  61434, part size:0, rows_new: -61434, cap: 0 既然这里知道原因了那么下一步就得继续分析为何会产生负数 num_rows_new是有分区的range决定的下面有个公式计算产生了负数 int num_rows_new locals.batch_prtn_ranges[prtn_id  1] - locals.batch_prtn_ranges[prtn_id]; 继续跟进找到PartitionSort的Eval里面有几处非常需要注意 ARROW_DCHECK(num_rows  0  num_rows  (1  15)); 首先第一个是这个断言我明明传递的是65536明显大于这里的32768为何没有断言成功事后发现这里是release包只会报warning不会fatal。 随后继续往下看看到了一个比较明显的类型uint16_t这个玩意就是在计算sum而要让num_rows_new为负数只有两种可能 场景1: locals.batch_prtn_ranges[prtn_id 1] locals.batch_prtn_ranges[prtn_id]场景2:  locals.batch_prtn_ranges[prtn_id 1] 是负数且locals.batch_prtn_ranges[prtn_id]是负数或者locals.batch_prtn_ranges[prtn_id 1] 是负数且locals.batch_prtn_ranges[prtn_id]也是负数并且大于前者。 uint16_t sum  0; for (int i  0; i  num_prtns; i) {uint16_t sum_next  sum  prtn_ranges[i  1];prtn_ranges[i  1]  sum;sum  sum_next; } 看了这段代码可以知道场景1排除了因为是自增的最差情况是相等那么就只能场景2变为负数就不用说了又碰到了溢出问题所以可以推测uint16_t溢出了这个值我们知道是65535而65536刚好超过它所以有问题 至此这一轮的debug调试与分析到此结束 往期干货 热度更新手把手实现工业级线程池 快速拿下面试算法
http://www.hkea.cn/news/14266621/

相关文章:

  • 大连模板网建站做网站要固定电话
  • 网站开发要考什么证公益网站设计
  • 浏阳市网站建设如何开发一款游戏
  • 江苏弘盛建设工程集团有限公司网站jsp网站开发环境搭建
  • 寻找郑州网站优化公司建设个人博客网站
  • 咸阳公司做网站学ui设计难不难
  • 溧阳手机网站设计国内永久免费crm不实名认证
  • 宣传海报在什么网站做脑叶公司手机版下载
  • 做网站一般用什么配置的电脑长沙3合1网站建设公司
  • 怎样在手机上制作网站钉钉网站建设服务协议
  • 怎么在网站上做签到安徽合肥中国建设银行网站首页
  • 移动应用开发公司网站模板网站域名和备案公司可以不一样么
  • 淄博微信网站建设wordpress修改侧边栏
  • 四站合一网站建设wordpress添加主题设置功能
  • 企业门户网站模板环保网站建设说明
  • 内网怎么做网站服务器做网站框架可用jpg图吗
  • 广东专业网站优化公司报价免费企业宣传片制作软件
  • 北京网站排行德阳公司网站建设
  • 网站建设需要在网络上如何实现北京软件开发公司企云云
  • 网站架构搭建广告网站模板下载不了
  • 免费做漫画网站选thinkphp还是wordpress
  • 湘潭响塘乡建设局网站thinkphp5来做网站吗
  • 网站开发配置状态报告wordpress phonegap
  • 网页 网 址网站区别上海殷行建设网站
  • 网络营销导向网站建设的基础小型外包公司在哪找项目
  • 开发网站代码量南京网站排名提升
  • 营销型网站建设要多少钱说几个手机可以看的网站
  • 河南企起网站建设网络科技网站有哪些方面
  • 怎么在网站上建设投票统计河南新乡做网站公司
  • 手机客户端网站建设搜索关键词