自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

doctorq

路漫漫其修远兮

原创 Dynamics 365 WEB API认证过程

MSAL

2020-06-10 17:16:34 160

原创 python脱机安装依赖包

背景部署到线上的服务不能提供外网权限,不能通过访问公共pypi来拉取依赖包,那就只能去部署一个私有的python仓库,搭建不麻烦,维护却麻烦,所以作为业务开发人员,要是有个方法,能把在开发阶段开发机上的依赖包,打包上线到线上机器,然后本地安装到线上机器,也是一个不错的方法生成依赖配置因为我们是pipenv工具管理依赖,而pipenv支持生成requirements.txt文件pipenv ...

2019-07-16 23:15:24 391

原创 pyinstaller打包机器学习库若干坑

参考文档Recipe MultiprocessingPyinstaller exe keeps opening itself背景之前调研的pyinstaller打包bin的方案进入落地阶段,之前调研文章见利用pyinstaller打包python项目发布到线上。之前实验的对象是个很简单的web服务,没有过多的依赖其他包,这次落地的项目里面使用了很多的机器学习库,所以落地过程中还是稍显麻烦...

2019-07-16 16:27:17 4233

原创 定位python内存泄漏问题

记一次 Python 内存泄漏的排查背景上周使用我的python web框架开发的第二个项目上线了,但是没运行几天机器内存就报警了,8G内存使用了7G,怀疑有内存泄漏,这个项目提供的功能就是一堆机器学习模型,对历史数据进行训练,挑选出最优的5个模型,用作未来数据的预测,所以整个项目由着数据量大,运行时间长的特点,就是把策略的离线工作搬到了线上。定位内存泄漏第一步:确定是否有内存泄漏上...

2019-07-10 22:57:02 3572

原创 利用pyinstaller打包python项目发布到线上

问题抛出点3月份搭建的python web框架,在一个项目中落地后,在部署的时候还是稍显麻烦,虽然用了pipenv的方式管理依赖,但是在线上的时候还得要求线上环境可以连外网,但是一般线上环境会有一些隔离,而且上线前也会有一些python依赖要去安装,这其实还不够极致。所以需要一种能把python项目打成bin文件的方式,所有依赖的包都集成在这个bin文件中,直接上线bin文件就可以了。如果这个能...

2019-05-08 19:32:19 1441

原创 C++ Invalid read

问题描述

2019-03-29 19:09:22 291 1

原创 五年的博客之旅

2014.3.22今天无意中翻了下自己之前写的文章,发现自己写下第一篇文章是2014年3月22日,马上就5年整了。回想当时的自己,刚刚毕业半年多,刚刚换了家新公司,从上海去天津,什么都不懂,想用博客的方式记录自己的成长。现在来看,目标达成了。变化五年来,从天津到北京,经历了3家公司,从测试开发到转服务端研发,一步步走的还算扎实稳健。不知不觉也工作快6年了,脱出了稚气,披上了老练。出书之前...

2019-03-15 11:18:59 453 2

原创 基于sanic打造python web框架

0x00 Why为何做这件事,在去年的一个项目中,算法同学要使用在线模型训练,不得不是用python的tf框架,这样我们不得不是python web框架,当时因为团队里面没人懂python相关的知识,只是简单的用tornado搭建的一个。但是在后期使用过程中,压测发现了tornado在低耗时的接口不够稳定,波动比较大。我们的接口一般20ms,但是经常波动到40ms,并发其实也不大。所以经历了通过...

2019-03-06 17:24:11 2262

原创 go-sql-driver/mysql 串数据的问题

问题描述压测过程中,发现数据库中某个字段(json字符串)在解析的过程中提示,json字符串不符合json格式要求,增加日志打印后,发现json打印如下:47^A0^MTCKSGroup177315409841321540984232^D6000^F749279^K52057485773^A1^K188888817731540984137^A1ü4^B{"complete_code": ...

2018-12-04 15:07:37 808 1

原创 利用 group by 的 Loose Index Scan 优化 sql

参考文章:MySQL优化GROUP BY-松散索引扫描与紧凑索引扫描背景最近压测的时候发现有一条sql语句在查询到几w条数据的时候,查询耗时达到了1s左右,达到了我们线上设置的timeout,需要优化一下。sql作用该sql是为了从订单表(Order)查询哪些店铺、商圈有待指派的订单,where条件中有5个字段来过滤A 订单状态,用A=a1来判断是否是新订单。B 调度类型,分商圈...

2018-10-18 10:34:02 536

原创 database/sql query 超时设置

参考文章:Query问题描述接上文,mysql的同步访问问题解决后,继续压测,发现访问mysql的耗时逐渐增大,影响模型整体能力。我设置了readTimeout,没有任何反应,请求耗时还是会超过readTimeout所设置的值。因为:readTimeout只能限制连接数据读取时间,如果程序发生在获取连接前等待时间过长,无法通过这个参数设置,且readTimeout*3才是真正...

2018-09-04 16:02:30 1626

原创 database/sql: rows.Next panic from concurrent map writes

问题描述我们最近用golang重构了以前c++的系统,在最后上线前的压测环节,我负责的模块偶现如下错误:[mysql] 2018/09/02 23:17:35 packets.go:72: read tcp xx:39151->xx:3306: i/o timeout [mysql] 2018/09/02 23:17:35 packets.go:408: busy buffer...

2018-09-03 14:41:38 862

原创 grpc提供http访问方式

0x00最近系统在从c++迁移到go,之前使用brpc,也需要转移到grpc,但是grpc提供的接口服务原生无法被http访问到,这对我们调试来说也很麻烦,所以需要让grpc跟brpc一样,http也能访问rpc接口0x01grpc-gateway项目:该项目是在grpc外面加一层反向代理,由代理服务器转发json格式,转变成protobuf格式来访问grpc服务,官方解释图如下:...

2018-05-30 11:56:28 15071 3

原创 C++操作mysql,串DB的问题追查

问题描述kfc项目大联调时发现,原本访问loc_order库的操作,最后操作到了loc库中了,但是是偶尔操作到loc库,这个时候回报错,偶尔操作成功。最后发现一个配置出错,就是loc_order这个库在我们服务器中并不存在,但是我们的客户端应该在这种情况下是能够收到服务器的通知,表示db错误,但是实际上却没有。复现问题我们在本地测试机上复现下这个问题。复现过程如下:然后我把...

2018-05-09 16:38:56 316

原创 Go语言开发环境搭建

由于准备将项目由c++切到go,这几天学习了go相关的知识。搭建了下开发环境0x00安装go后,验证go安装成功标志$ go versiongo version go1.10.2 darwin/amd64记得设置下GOPATH$ echo $GOPATH/Users/doctorq/go0x01go常用命令,go的安装包里面自带了构建工具,我们可...

2018-05-04 16:13:25 441

原创 c++内存泄漏实战

开始开发C++项目也有2个月了,从一开始写代码就绕不开内存泄漏这个点。找了个时间专门搞了个专项活动,从开始的几十个内存泄漏点到现在慢慢了有了点经验,现总结下。检测工具内存泄漏点实践0x010x020x03检测工具我一般会用以下命令启动程序,然后把各个接口触发一遍,让代码覆盖的全一点,然后ctrl+c结束程序,打开leak.log文件查看内存泄漏情况。

2018-01-11 10:31:56 1229

原创 c++项目中引入xgboost静态库

参考文章 Using XGBOOST in c++ c++项目引入xgboost动态库问题背景xgboost项目官方没有提供c_api方式的编译以及引入教程,所以刚开始我们是用直接把项目源码引入到我们的项目中,非常麻烦。刚开始我们以源码的方式导入到项目中,调用源代码的方法中,代码写的非常冗余,而且一些api不能为我们所用。所以总想着如何直接引入xgboost的静态

2018-01-08 16:27:45 5273

原创 Valgrind进行内存泄漏检测

valgrind背景初次涉猎c++编码,被指针折腾的不行,所有为了防止代码写的不好,造成内存泄漏,上线前一定要检测下是否存在内存泄漏,这不用Valgrind试试。环境gcc编译环境搭建完成安装wget ftp://sourceware.org/pub/valgrind/valgrind-3.13.0.tar.bz2tar xvf valgrind-3.13.0.tar.bz2cd valg

2017-11-23 12:32:34 1092

原创 Spark成长之路(13)-DataSet与DataFrame

Datasets and DataFrames前言源码DataFrameDataset创建dataset读取json串RDD转换为Dataset总结DataFrame前言spark1.6中引入了DataSet和DataFrame的概念,然后Spark SQL的API也是基于这两个概念的,到2.2推出的稳定版本的Structured Streaming也是依靠Spark SQL的AP

2017-08-25 13:45:02 801

原创 Spark成长之路(12)-Gradient Descent

机器学习理论之一

2017-08-02 11:39:11 627

原创 Spark成长之路(11)-ngram

ngram简介N-gram代码object NGramExample extends SparkObject { def main(args: Array[String]): Unit = { val wordDataFrame = spark.createDataFrame(Seq( (0, Array("Hi", "I", "heard", "about", "Spark

2017-07-25 17:24:19 1495 1

原创 Spark成长之路(10)-CountVectorizer

CountVectorizer简介用文档中单个单词出现的次数组成一个向量。代码object CountVectorizerExample { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().getOrCreate() val df = spark.createDataFrame

2017-07-25 16:06:08 718

原创 Spark成长之路(9)-Word2Vec

word2vec简介将文本映射到K维空间的向量值。代码object Word2VecExample { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().getOrCreate() spark.sparkContext.setLogLevel("WARN") // Inpu

2017-07-25 15:56:15 610

原创 Spark成长之路(8)-TFIDF

TDIDF简介源码输出简介文本特征提取算法,给某个文章归档某个类别时特别有用。源码object TfIdfExample { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().getOrCreate() spark.sparkContext.setLogLevel("WARN"

2017-07-25 15:26:23 606

原创 Spark成长之路(7)-Hypothesis testing

Hypothesis testing样例import org.apache.spark.ml.linalg.{Vector, Vectors}import org.apache.spark.ml.stat.ChiSquareTestimport org.apache.spark.sql.SparkSessionobject HypothesisTestingExample { def mai

2017-07-21 11:55:28 752

原创 Spark成长之路(6)-Correlation

spark mlspark准备彻底支持DataFrame特性,所以重新了ml的api,原先的以RDD为基础的api都放在了mllib中,但是都是维护阶段,推荐使用ml下的api。相关性有2种相关性,皮尔森积矩相关系数和斯皮尔曼等级相关,具体原理请自行搜索,主要是判断两个向量的关联性。样例import org.apache.spark.ml.linalg.{Matrix, Vectors}impo

2017-07-21 11:36:59 1413

原创 Spark成长之路(5)-消息队列

参考文章:Spark分布式消息发送流程 监听器模式 volatile因为之前被这个消息队列坑过(stage夯住原因分析),所以现在研究源码,先从它下手,解答一下我这么久的疑惑。继承关系ListenerBus->SparkListenerBus->LiveListenerBus。原始基类为ListenerBus。运用的设计模式为监听器模式。ListenerBusspark包中私有特质,继

2017-07-07 11:16:02 1242

原创 Scala练习-分块查找

原理 分块查找前言前几天研究Spark分区器的时候,Range分区器的原理中边界划定时就用到了分块查找算法,当时不知道这个名词,今天学习的时候,发现原理就是分块查找啊。多学习肯定没错的,一下子加速我的理解。代码package day15import day14.Utils/** * Created by doctorq on 2017/6/30. * 分块查找:适用于表结构动态变化的

2017-07-07 00:05:42 688

原创 Scala练习-斐波那契查找

斐波那契数列 原理

2017-07-06 11:05:48 1069

原创 Scala练习-插值查找

原理 源码package day15import day14.Utilsimport day15.BinarySearch.printlnArrayimport scala.collection.mutable.ArrayBuffer/** * Created by doctorq on 2017/6/30. * 插值查找:改进二分查找的算法,在数值范围比较大,分布比较均匀时可以

2017-07-05 23:08:35 588

原创 Scala练习-哈希查找

原理

2017-07-05 21:28:41 487

原创 Scala练习-顺序查找

顺序查找又名线性查找object SortSearch extends App { def search(array: Array[Int], find: Int): Unit = { if (array.size == 0) return println(s"I want to find ${find}: ") val findArray = for (i <- 0 u

2017-07-05 21:24:52 515

原创 Scala练习-二分查找

源码package day15import day14.Utilsimport scala.collection.mutable.ArrayBuffer/** * Created by doctorq on 2017/6/19. * 二分查找 */object BinarySearch extends Utils with App { def search(unSorted: A

2017-07-05 11:21:41 2217

原创 Scala练习-二叉树查找

源码package day15/** * Created by doctorq on 2017/6/30. * http://blog.csdn.net/chinabhlt/article/details/47420391 * 二叉树查找 */object BinaryTreeSearch extends App { //先序,根节点->左子树->右子树 def perOr

2017-07-05 11:19:20 1521

原创 Spark成长之路(4)-分区器系统

Spark分区器HashPartitioner和RangePartitioner代码详解总览图

2017-07-04 13:00:44 649

原创 Spark成长之路(3)-再谈RDD的Transformations

参考文章 coalesce()方法和repartition()方法 TransformationsrepartitionAndSortWithinPartitions解释返回源码coalesce和repartition解释返回源码pipe解释返回源码cartesian解释返回源码cogroup解释源码join解释返回源码sortByKey

2017-06-30 16:54:07 736

原创 Scala练习-桶排序

源码package day14/** * Created by doctorq on 2017/6/29. * 桶排序,一直数据范围,比如满分10分考试分数排序 */object BucketSort extends Utils with App { def sort(unSortArray: Array[Int]): Array[Int] = { if (unSortArr

2017-06-30 09:23:37 669

原创 Scala练习-排序算法总结

之前用Scala实现了9个排序算法,后续有时间凑个10大。源码已经全部上传到github冒泡快排归并桶基数插入选择希尔堆其时间复杂度对比如下图(盗图)

2017-06-30 09:17:54 915

原创 Scala练习-基数排序

基数排序 源码package day14import scala.collection.mutable.ArrayBuffer/** * Created by doctorq on 2017/6/29. * 基数排序 */object RadixSort extends Utils with App { /* 获取数组中最大值 */ def max(unSo

2017-06-29 23:39:35 591

原创 Scala练习-选择排序

package day14import day14.StraightInsertionSort.{printlnArray, sortN2}/** * Created by doctorq on 2017/6/28. * 选择排序 */object SelectionSort extends Utils with App { def sort(unSorted: Array[Int

2017-06-29 12:31:34 1165

提示
确定要删除当前文章?
取消 删除