决战客户端技术

  最近经常有小伙伴问我要做一个客户端, 该怎么弄. 这个问题问得很粗犷, 但是实际上客户端的选型是一个很细的问题. 从大学到现在, 也弄了不少的客户端, 从公司主营炒股专业客户端, 到内部项目使用的OA客户端, 还有大学的时候为了毕业而弄的QT, 各式各样, 这里就给大家讲解一下, 我所了解的几种客户端的选型(这里主要针对windows,也会提及一些跨平台技术).

  windows下的客户端都是基于win32, 在这基础上, 我们可以细分为, 原生win32, MFC, C#(语言封装), 高级win32-duilib, QT, CEF, electron(nwjs) 大体就这几种了, 其中很多是重合的, 下面我们就每个都讲一讲优劣.
继续阅读

线程池的自我修养

  最近重构行情服务端的框架,其中有一部分就是重写mysql线程池,线程池是一个很独立的东西,今天就拿出来给大家分享, 怎样设计一个线程池, 以及我是怎么做的.

为什么要使用线程池

  常见的线程池使用场景分为两种

  1. 大量计算, 充分利用多核

  这个很好理解, 当程序需要大量计算, 单核CPU跑到100%, 这个时候可以将计算任务分解, 分多个线程计算, 如果我们有4核, 那这个时候我们可以跑到400%, 理想情况下, 可以节省3倍的时间. 当然这个不是绝对的, 具体情况要具体分析. 总而言之, 是为了让程序充分打满CPU.

  1. 同步阻塞,转异步回调

  如果这个是web程序, 异步绝对是提高并发的神器. 在我们的C++服务器中, 也会有大量的阻塞任务, 可能是读取mysql, 可能是读取mongodb, 或者任意需要同步等待完成的事情, 那么在等待的时候, 我们的工作线程是完全没法做别的工作的, 这个时候我们就把等待的过程, 变成一个任务, 让线程池去做, 主线程继续处理别的工作, 等线程池完成之后, 再接管任务, 继续往下面执行.
继续阅读

雀观代码

  写博客已经有很长一段时间了, 虽然大部分都是记着流水账, 但是也有不少篇幅的积累. 以前写博文有个习惯, 不想暴露太多私人信息, 所以写起来大多畏畏缩缩, 更多的是针对一些细节的反复描述. 近来发现时机已经成熟, 想创造自己的技术力影响圈, 所以开了<雀观代码>的公众号, 欢迎大家订阅.

  不是所有的人都在BAT. 中国现在程序员群体大约在200万左右, 正真在大公司的可能占20%, 也就是说绝大多数的还是在普通的中小型企业, 我就是其中一个. 在企业的5年里面, 有幸见证了技术部从20号人, 慢慢扩展到现在的170人左右, 人员走走留留, 大浪淘沙. 这5年了积累了很多的经验, 也悟出了独有的方法. 不是所有BAT的技术都适合中小企业, 我将从中小企业的角度, 向大家阐述中小企业技术人员的生存之道, 欢迎订阅<雀观代码>.

  下面我将从技术, 资源, 晋升, 视野等角度, 讲述在中小企业的状况.

继续阅读

值得纪念的一年

拿到股权

从大学毕业至今已有4年半载, 在这个社会大学毕业之际, 拿到公司的股权是对我过去四年的肯定, 内心非常高兴. 也许是自考上大学之后的第二个转折点.

这一年干了什么

工作上主要负责了C++行情服务器的开发, 价值猎手项目主题猎手项目, 以及各类杂七杂八的项目, 虽然算不上非常成功, 但是也都是井井有条.
继续阅读

CLion 远程编译调试

eclipse cdt 使用rse

尝试和很久使用eclipse cdt的rse实现远程编译, 最后终于放弃了, 个人觉得自己的折腾能力还是很强的, 我花了两天的时间研究, 最后还是失败了, 大家还是不要尝试了.

为什么要使用远程编译

普通的PC机器, 性能太渣, 随随便便编译一下就卡死了, 特别是调试程序的时候, 我们的程序动不动就30多个G的内存, 普通的PC机器根本扛不起来, 公司的高配机器有很好的性能, 放一台在内网做公共的开发机器, 能极大的提高效率.
继续阅读

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
    继续阅读