- 博客(597)
- 资源 (26)
- 收藏
- 关注
原创 架构师日常-技术or业务
背景最近在思考一个问题,就是在业务团队是以业务为主,还是以技术为主?什么情况下要做技术优化呢?其实这个问题应该对很多人来说不难回答,占比较高的应该是以业务为主,技术就点到为止就行了,但是有的时候也需要技术介入解决问题,那什么时候需要技术介入呢。有一些技术范的人,会说技术为主,但是如果做技术优化影响了业务,该如何抉择呢?今天就跟大家来探讨下这个问题...
2022-03-07 21:04:59 3414
原创 架构师日常-团队管理
日常工作集锦关于团队管理范畴的事情,我简单总结为下面几个方向团队组建人员培养氛围建设日常沟通团队组建招人去年年初团队调整较大,离职人员较多,业务却发展迅速,所以人员的缺口很大,补人的任务很重。首先针对之前我们人员的大量离职情况做了分析,其中的一些分析结果作为我们招人的一些指导信息,例如抗压能力、新招人员职级与工作年限不匹配、团队梯队不健康等。要求HR筛选简历要求工作年限在3-5年要求各个面试官提升面试难度,招一些能力强的人,面试过程中必须考察抗压能力,宁缺毋滥要求面试官要用面试
2022-02-17 21:22:07 2109
原创 架构师日常-开年篇
前言长路漫漫,继续远征,过往归零,重新出发今年目标今年会把架构师日常这个专题多丰富丰富,还欠一个总问-管理工作,接下来就是一个一个小细节开始阐述,争取把我的心得都记录下来...
2022-02-08 11:48:07 840
原创 架构师日常-架构设计
01 阶段0-1的架构设计1-N的架构优化0-1的架构设计,这种场景很少碰到,这种是没有历史包袱的,这种是很考验架构师的专业能力,需求理解能力,还要做好产出收益比的衡量。1-N的应该经常遇到的,目前的互联网氛围,在业务开始阶段都是求快,不会考虑架构合理不合理的逻辑,所以一旦业务起来后,架构优化就随之而来变得迫切。在现在的公司,我做过2次0-1的架构优化,3次1-N的架构优化。目前就在当前业务线做架构优化02 优化点...
2021-12-27 17:10:00 1569
原创 python脱机安装依赖包
背景部署到线上的服务不能提供外网权限,不能通过访问公共pypi来拉取依赖包,那就只能去部署一个私有的python仓库,搭建不麻烦,维护却麻烦,所以作为业务开发人员,要是有个方法,能把在开发阶段开发机上的依赖包,打包上线到线上机器,然后本地安装到线上机器,也是一个不错的方法生成依赖配置因为我们是pipenv工具管理依赖,而pipenv支持生成requirements.txt文件pipenv ...
2019-07-16 23:15:24 1288
原创 pyinstaller打包机器学习库若干坑
参考文档Recipe MultiprocessingPyinstaller exe keeps opening itself背景之前调研的pyinstaller打包bin的方案进入落地阶段,之前调研文章见利用pyinstaller打包python项目发布到线上。之前实验的对象是个很简单的web服务,没有过多的依赖其他包,这次落地的项目里面使用了很多的机器学习库,所以落地过程中还是稍显麻烦...
2019-07-16 16:27:17 6914 1
原创 定位python内存泄漏问题
记一次 Python 内存泄漏的排查背景上周使用我的python web框架开发的第二个项目上线了,但是没运行几天机器内存就报警了,8G内存使用了7G,怀疑有内存泄漏,这个项目提供的功能就是一堆机器学习模型,对历史数据进行训练,挑选出最优的5个模型,用作未来数据的预测,所以整个项目由着数据量大,运行时间长的特点,就是把策略的离线工作搬到了线上。定位内存泄漏第一步:确定是否有内存泄漏上...
2019-07-10 22:57:02 17731 3
原创 利用pyinstaller打包python项目发布到线上
问题抛出点3月份搭建的python web框架,在一个项目中落地后,在部署的时候还是稍显麻烦,虽然用了pipenv的方式管理依赖,但是在线上的时候还得要求线上环境可以连外网,但是一般线上环境会有一些隔离,而且上线前也会有一些python依赖要去安装,这其实还不够极致。所以需要一种能把python项目打成bin文件的方式,所有依赖的包都集成在这个bin文件中,直接上线bin文件就可以了。如果这个能...
2019-05-08 19:32:19 2968
原创 五年的博客之旅
2014.3.22今天无意中翻了下自己之前写的文章,发现自己写下第一篇文章是2014年3月22日,马上就5年整了。回想当时的自己,刚刚毕业半年多,刚刚换了家新公司,从上海去天津,什么都不懂,想用博客的方式记录自己的成长。现在来看,目标达成了。变化五年来,从天津到北京,经历了3家公司,从测试开发到转服务端研发,一步步走的还算扎实稳健。不知不觉也工作快6年了,脱出了稚气,披上了老练。出书之前...
2019-03-15 11:18:59 966 2
原创 基于sanic打造python web框架
0x00 Why为何做这件事,在去年的一个项目中,算法同学要使用在线模型训练,不得不是用python的tf框架,这样我们不得不是python web框架,当时因为团队里面没人懂python相关的知识,只是简单的用tornado搭建的一个。但是在后期使用过程中,压测发现了tornado在低耗时的接口不够稳定,波动比较大。我们的接口一般20ms,但是经常波动到40ms,并发其实也不大。所以经历了通过...
2019-03-06 17:24:11 5296
原创 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 1670 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 1715
原创 database/sql query 超时设置
参考文章:Query问题描述接上文,mysql的同步访问问题解决后,继续压测,发现访问mysql的耗时逐渐增大,影响模型整体能力。我设置了readTimeout,没有任何反应,请求耗时还是会超过readTimeout所设置的值。因为:readTimeout只能限制连接数据读取时间,如果程序发生在获取连接前等待时间过长,无法通过这个参数设置,且readTimeout*3才是真正...
2018-09-04 16:02:30 4226
原创 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 1859
原创 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 26609 5
原创 C++操作mysql,串DB的问题追查
问题描述kfc项目大联调时发现,原本访问loc_order库的操作,最后操作到了loc库中了,但是是偶尔操作到loc库,这个时候回报错,偶尔操作成功。最后发现一个配置出错,就是loc_order这个库在我们服务器中并不存在,但是我们的客户端应该在这种情况下是能够收到服务器的通知,表示db错误,但是实际上却没有。复现问题我们在本地测试机上复现下这个问题。复现过程如下:然后我把...
2018-05-09 16:38:56 737
原创 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 649
原创 c++内存泄漏实战
开始开发C++项目也有2个月了,从一开始写代码就绕不开内存泄漏这个点。找了个时间专门搞了个专项活动,从开始的几十个内存泄漏点到现在慢慢了有了点经验,现总结下。检测工具内存泄漏点实践0x010x020x03检测工具我一般会用以下命令启动程序,然后把各个接口触发一遍,让代码覆盖的全一点,然后ctrl+c结束程序,打开leak.log文件查看内存泄漏情况。
2018-01-11 10:31:56 2018
原创 c++项目中引入xgboost静态库
参考文章 Using XGBOOST in c++ c++项目引入xgboost动态库问题背景xgboost项目官方没有提供c_api方式的编译以及引入教程,所以刚开始我们是用直接把项目源码引入到我们的项目中,非常麻烦。刚开始我们以源码的方式导入到项目中,调用源代码的方法中,代码写的非常冗余,而且一些api不能为我们所用。所以总想着如何直接引入xgboost的静态
2018-01-08 16:27:45 8372
原创 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 1771
原创 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 1065
原创 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 1862 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 930
原创 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 784
原创 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 769
原创 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 963
原创 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 2236 1
原创 Spark成长之路(5)-消息队列
参考文章:Spark分布式消息发送流程 监听器模式 volatile因为之前被这个消息队列坑过(stage夯住原因分析),所以现在研究源码,先从它下手,解答一下我这么久的疑惑。继承关系ListenerBus->SparkListenerBus->LiveListenerBus。原始基类为ListenerBus。运用的设计模式为监听器模式。ListenerBusspark包中私有特质,继
2017-07-07 11:16:02 2037
原创 Scala练习-分块查找
原理 分块查找前言前几天研究Spark分区器的时候,Range分区器的原理中边界划定时就用到了分块查找算法,当时不知道这个名词,今天学习的时候,发现原理就是分块查找啊。多学习肯定没错的,一下子加速我的理解。代码package day15import day14.Utils/** * Created by doctorq on 2017/6/30. * 分块查找:适用于表结构动态变化的
2017-07-07 00:05:42 900
原创 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 727
原创 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 763
原创 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 2732
原创 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 1858
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人