作者归档:desmond

sort 导致进程崩溃

转载自沙子泥巴刘的博客

前言

最近被一个在sort自定义排序导致的崩溃问题, 弄得焦头烂额. 后在网上看了这篇文章, 才解决问题, 转载一次.

正文

近期我们开发的一个工具在调用c++ sort函数对数组进行排序时居然会导致进程崩溃,此问题细节我觉得对于类似我这种不常用stl的同学可能不容易觉察,这里简单总结下。

出错代码

因为代码太复杂不好展示,我这里就用下面这个简单的示例来描述。

#include <algorithm>

bool comp(int d1, int d2)
{
    return d1 >= d2;
}

const int N = 50;

int main()
{
    int d[N];
    for(int i = 0; i < N; ++i)
    {
        d[i] = 20;
    }

    std::sort(d, d + N, comp);
    return 0;
}

不知你是否直觉上也会觉得这段代码没什么问题,但是这段代码运行后会core dump。查看core文件可以看到内存里的栈被写坏了,这说明sort调用导致了内存越界访问,在这么少的代码行下,不难判定应该是comp函数实现可能不符合c++标准库的某种规则(C++ STL是基于concept的设计和实现)。
继续阅读

合格的程序员

一个掉队的伙伴

前几天开除一个下属, 称他为A吧, 理由是负责的项目发生太多线上事故, 工作将近一年,产出太少. 做出这个决定是艰难的,意味着一年对他的培养付诸流水. 不仅是对A的一种伤害, 对公司, 直属负责人, 都是不小的损失. A有太多的毛病, 其中最严重的就是懒. 懒所以不学习, 不学习就不会进步, 思虑不周, 导致线上问题频发. 因为懒所以进度慢, 进而没有产出. 所以,怎样才是一个合格的程序员呢?

做一个勤奋的人

这是个很泛的概念, 怎样才能称得上勤奋? 是加班到12点? 熬夜赶项目? 这个没有定论. 个人觉得勤奋是一种思想, 一种体现在行动上的思想.
继续阅读

经历了一些杂事

引入新技术TIDB

手上有个项目,数据量异常庞大, 然后又需要关系型数据库的支持, 在一轮的选择之后, 最后选定tidb。 tidb是个很新的项目, 各个方面都不是很稳定, 一堆的bug, 一堆的坑. 但是对大数据的处理方式实在诱人. 在去年年底的时候, 在测试环境搭建起来, 今年上正式环境, 遇到的一堆的问题, 主要是tidb对服务的IO性能要求非常高, 阿里云的ESC就是渣, 然后是新的运维接手部署, 遇到挺多问题, 后面再tidb的开发帮助下, 解决了问题. 后面邀请了TIDB的人到我们公司做讲座, 效果挺好. 后面我们会将一些比较重要的东西, 迁移到tidb, 估计是一件有趣的事情.
继续阅读

转向技术管理

开始转向技术管理

去年下半年作为技术项目经理负责了一个项目, 项目非常的成功, 作为一个工作三年半的老员工, 又有拿的出手的成绩, 威望开始有所提升, 加上去年年中就成为web组的组长, 自然开始转向技术管理层。
继续阅读

TiDB 部署

ansible 部署

参考
https://pingcap.com/docs-cn/op-guide/ansible-deployment/

binary部署

参考
https://pingcap.com/docs-cn/op-guide/binary-deployment/

跨公网部署(NAT)环境

跨公网部署NAT要注意,对外发布ip, 和机器实际绑定ip, 官方提供的ansible脚本没有参数设置对外ip和绑定ip, 只能用二进制安装, 不过可以ansible部署完成之后, 直接改动部署后的脚本, 这样就可以继续使用ansible. 这里说一下这种部署的时候的一些坑.

pd-server

  • –advertise-client-urls
  • –advertise-peer-urls
  • –client-urls
  • –initial-cluster
  • –peer-urls
    继续阅读

安装mongodb cxx

安装环境centos7

安装libmongoc

sudo yum install pkg-config openssl-devel cyrus-sasl-devel
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.8.0/mongo-c-driver-1.8.0.tar.gz
tar xzf mongo-c-driver-1.8.0.tar.gz
cd mongo-c-driver-1.8.0
./configure
make
sudo make install

安装mongocxx

wget https://github.com/mongodb/mongo-cxx-driver/archive/r3.0.1.tar.gz
tar xzf r3.0.1.tar.gz
cd mongo-cxx-driver-r3.0.1/build
#需要先安装好git,yum -y install git,不然会报错
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ ..
sudo make EP_mnmlstc_core
sudo make -j4
sudo make install

写一个合适的监控运维系统-05-一年的优化打磨

杂谈

监控运维系统已经运行一年有余, 已经是开发和运维人员不可或缺的工具了, 几乎所有人上班的第一件事就是打开监控系统, 查看服务器状态. 即使出门在外, 也用可以用手机访问. 经过大量使用之后, 很多问题暴漏出来了, 该改的改, 改优化的优化, 这里说一下这一年的优化动作.

微信报警优化

如果服务器发生状况, 发送微信到用户, 可是如果处理不好, 就会产生微信轰炸, 所以后面定义了几个规则, 保证不产生信息轰炸.

  • 分组订阅, 每个人只关心负责的服务器分组
  • 单机报警限制, 如果一个服务, 在2.5分钟之内发生连续报警, 只触发第一次微信报警
  • 单用户报警限制, 单个用户2.5分钟之内, 同一组服务器, 只接受一次报警

这样可以有效的避免微信轰炸.
继续阅读

familia小白使用

familia到底是什么

Familia百度开源的文档主题推断工具、语义匹配计算工具。

主题模型在工业界的应用范式可以抽象为两大类: 语义表示和语义匹配。

  • 语义表示 (Semantic Representation)

    对文档进行主题降维,获得文档的语义表示,这些语义表示可以应用于文本分类、文本内容分析、CTR预估等下游应用。

  • 语义匹配 (Semantic Matching)

    计算文本间的语义匹配度,我们提供两种文本类型的相似度计算方式:

    • 短文本-长文本相似度计算,使用场景包括文档关键词抽取、计算搜索引擎查询和网页的相似度等等。
    • 长文本-长文本相似度计算,使用场景包括计算两篇文档的相似度、计算用户画像和新闻的相似度等等。
      继续阅读

composer 私有项目

接触composer

composer 是php的包管理工具, 有了composer我们可以轻易的从网上获取需要的组件, 构建我们的项目. 最近在写一个软件项目, 需要从C++行情服务器获取一些数据, 准备写一个模块专门用来对接C++接口. 考虑到公司大量的php项目需要获取行情数据, 如果把此模块做成composer包, 将会有很大的帮助.
继续阅读