自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 Sneaker工作方式简析 # W19

Sneaker是基于Ruby的高性能RabbitMQ消费者,可以便捷地嵌入Rails应用,以常驻进程的方式处理RabbitMQ消息,运行模式类似Sidekiq。 本文简单介绍下Sneaker背后的工作方式,内容大概包含以下几个方面:Sneaker的工作模型Bunny如何接收、分发消息Sneaker的工作方式Sneaker借助ServerEngine实现进程模型搭建,可以有多进程、多线程...

2018-10-17 08:26:24 1142

原创 善于解决问题-离我还很远 # M05

本文算是一份日记,记录今天发生的事情,和我的一些感想。前几日放假的放纵,导致这两天精神有些迷离,早上竟然想睡觉。 迷离中,在一声带有强烈情绪的喊声中,我被“惊醒”了, 虽然没有在睡觉,但是就像睡着时被突然弄醒了一般。 于是,发现了问题: 线上有一个紧急的问题,给我发了消息,但是我迟迟没有回应,此问题还是反复出现过。我一下子明白了,平时笑嘻嘻和稀泥的领导,今天突然一下子变脸了,想想原因有:问题...

2018-09-26 22:38:21 183

原创 深入理解数据库事务 # W18

Transaction作为关系型数据库的核心组成,在数据安全方面有着非常重要的作用,本文会一步步解析事务的核心特性,以获得对事务更深的理解。什么是事务数据库几乎是所有系统的核心模块,它将数据有条理地保存在储存介质(磁盘)中, 并在逻辑上,将数据以结构化的形态呈现给用户。支持数据的增、删、改、查,并在过程中保障数据的正确且可靠。要做到这点并非易事,常见的例子就是银行转账,A...

2018-09-12 21:29:30 329

原创 Rails的includes实现原理及困境 #W17

美妙的开端includes等方法在ActiveRecord中有广泛的使用,是解决N+1问题的神器,使用非常方便:@users = User.where(id: [1,2,3,4,5,6]).includes(:area)这样可以仅通过两条SQL,将用户及其所在地区的数据提取出来,避免了通过User逐条查询对应的地区数据,减少了与数据库的交互次数。在IO密集型的Web领域,这是最基本...

2018-08-02 21:55:45 701

原创 走过的路 # M04

1992年生于四川省西充县2008年考入西充中学2011年考入西华大学电气工程与自动化专业2015本科毕业,获优秀毕业生荣誉2015年7月开始在博众精工科技有限公司任职软件工程师,从事自动化生产线的开发。参与搭建Iphone的自动化生产线,开始由浅入深地理解中国制造业的状态。工作几月后,慢慢认识到当前的工作和自己的追求与目标相差甚远,谋生去意。开始边工作边自学Ruby。2016年春节...

2018-07-29 16:36:36 147

原创 从 ActiveRecord 看乐观锁 # W16

内容概要:Rails中乐观锁的使用Rails中乐观锁实现原理乐观锁定义乐观锁的实现有悲观锁参与用分层的思维理解乐观锁全文地址: https://ruby-china.org/topics/37161...

2018-07-17 21:22:34 223

原创 Ruby GC 简史 # W15

首发在这里众所周知,Ruby(MRI)中有三大神秘区域: - GC - GIL - 编译/执行我就是CRuby的GC,虽然大多数人不了解我,或者了解了也没什么卵用。但我还是得向你介绍一下我自己。我在这几年改变了很多。我是谁程序员在构建应用程序的时候,或多或少都需要使用内存,在C/C++中,绝大部分使用的内存都需要自己调用API去申请,用完了之后还要一点不剩地归还。这是一...

2018-07-08 22:48:07 289

翻译 Malloc 会加倍 Ruby 多线程应用的内存消耗 # W14

总结: 内存碎片是一个难以测量和诊断的问题,但是解决这个问题有时也很容易。让我们看看在CRuby程序中,导致内存碎片的一个根源: 每个线程的内存动态分配(malloc’s per-thread memory arenas)不是每次一个简单的配置修改就能彻底解决一个问题。我曾有一个客户端,它的Sidekiq进程使用了非常多的内存,大概每个进程都占用了1G。它们刚开始启动时,大概每个只...

2018-07-01 21:28:38 717

原创 远离贫瘠的土壤 # M03

周末搬了新家,早就想在离公司更近的地方住,可以节省大量的通勤时间,一个人住也能更加惬意专注地做自己的事情。不过促使我立即行动的直接原因,还是因为我对贫瘠的环境,和贫瘠的人的畏惧。 在他们身边我感受到无比的压抑,消耗着我宝贵的意志力。第一次知道螃蟹朋友这个词,是在上学时,读到台湾作家的一本关于职业规划的书。那个时候,在我的知识体系中,这个词是无比的新鲜,也引起了我极大的兴趣,如果是在老家的话...

2018-06-17 21:40:01 208

原创 Unicorn 进程如何保证平滑更替? #W13

周末花时间通读了Working with Unix Processes 这本书的中文版, 再回头看之前没怎么看懂的unicorn-unix-magic-tricks文章,收获颇丰。本文结合一点源码,来梳理一下Unicorn进程是如何进行平滑更替的。根据Unicorn的信号机制,当需要hot-reload时,可以给Unicorn的Master进程一个USR2信号:$ kill -s USR2...

2018-06-12 12:56:03 527

原创 数据结构之HashMap # W12

平时在工作中,会使用大量的Hash,这种美妙的数据结构,在开发中给予了我们极大的帮助,非常值得深入学习。 我想通过本文,来梳理一下,到目前为止我在HashMap上粗浅的知识积淀。 文章的内容大致会有以下几个部分:哈希的实现原理哈希的冲突解决哈希映射的应用用哈希实现快速存取一个爬虫系统在互联网上按照链接(url)爬取数据,每爬取完一个链接,就将该链接保存在某个地方,标记为...

2018-06-03 00:57:24 230

原创 你能提供什么? #D04

年轻人,不要整天想国家为你提供什么,首先想想自己能为国家提供什么。 年轻人,不要整天想公司为你提供什么,首先想想自己能为公司提供什么。年轻人,不要整天想年收入翻番,首先想想自己的价值有没有在增加。年轻人,不要整天想和谁谁谁结交,首先想想你是否有可与Ta进行交换的价值?年轻人,不要整天想和某个美女帅哥一起共度良宵,首先想想你是否“配”得上Ta?年轻人,不要整天想过上幸福快乐的生活,首先想想你是否能给...

2018-06-02 15:06:44 203

原创 五问Sidekiq # W11

Sidekiq 是Ruby社区最受欢迎的异步任务框架之一,几乎是Rails项目标配。本文,我将从实际使用者的角度来提出疑问,通过一一解答这些问题来剖析Sidekiq是如何工作的。(代码基于Sidekiq-5.1.3)在Web请求中,有很多任务是可以放到后台执行的,比如用户购买商品付款成功后,就可以直接向用户购买成功,相应的短信发送,物流通知等等就可以放到后台任务去做,不用在用户购买的同时立即执行,...

2018-05-23 23:59:07 766

原创 我是谁 -- 概述 #M01

前言终于开始了本系列的内容,在这上面写文章的初衷是想写技术文档,一方面通过输出式学习来夯实自己的知识结构,另一方面,这也可以作为职业生涯中求职的沟通界面,技术人员的标配。要在茫茫人海中被人看见,必须得给出一个入口,在我目前所处的阶段,这是最好的选择。初衷但我却在这里写起了我自己,暂时放弃了之前写自己的私密空间,转到这里。Why?想法之初,我是有些犹豫的,因为一旦自己知道,这些文章会...

2018-05-16 23:18:11 306

原创 ElasticSearch如何增删改查/CURD数据? #W10

总结一下在ES中,CURD分别是什么情况。假设,有这样的一个集群(图片来源):三个节点,一个索引A, A有两个主分片, 每个主分片有两个副本分片(灰色),A包含一个type B。基于这个集群,我们来从宏观脉络上梳理一下,数据的增删改查。在ES中数据其实是不可被修改的,只能进行替换,或者标记(删除),也就是说,用户进行的CURD其实就只有“读“和”写”这两个操作,下面来分别梳理。如何进行读?ES中数...

2018-05-13 11:49:50 330

原创 如何熟悉业务? # W09

前面计划了“熟悉业务”的整体安排,现在来从技术上讨论一下,应该如何有条理、有节奏地熟悉业务,并在部分方面深入代码细节,掌握核心实现。同时将这些形成技术文档,供团队查阅。困境是什么?CRM类型的业务在细节上非常复杂,由于没有实现文档,很多时候一头扎进代码,会被高度抽象没有注释的代码搞的一头雾水,由于产品本身的复杂性很高,代码的实现本身就是细节魔鬼。 所以,从数据模型上去梳理出核心脉络不是好的选择。同...

2018-05-12 17:59:57 1128

原创 一个屌丝的生活状态 #M02

屌丝模型小D是一个年轻人,每天挤公交车上班,有时会挤下地铁,从出门到公司会消耗一个小时左右。早上七点多出门,晚上回来接近十点了,很多时候都会觉得,一晃又是周末了,时间过得好快,可小D心里也觉得自己一周好像也没有做什么事情,似乎没什么收获,时间却过得很快。Ta在心理还是有些焦虑,总是在想这种状态是不对的,Ta也有自己的计划。Ta是一个算是上进的人,想要在平时能有所提升,在未来的某一天自己也能“出人头...

2018-05-12 12:15:55 545 4

原创 找到林子里的路 # D03

进入一个新的“林子”有一个多月了。林子里面有很多鸟,也有很多小林子,阡陌交错。宏观上看,这片林子也是隶属于浩瀚森林中的一小块,会是我数十年职场森林穿越途中一个很小的区域,它也许不起眼,因为我终将离开。 当我身处这片林子时,它对于我而言依然广袤,我需要去寻找林子中最丰盛的果实,携带着果实,沿着路途,走出林子,迈向新的天空。 如何找到果实? 如何找到那条路? 如何在最短的时间内走出这片林子,迈向更加广...

2018-05-05 17:28:07 129

原创 乐观锁与悲观锁 # W08

锁存在的意义在并发环境中,如果有多个线程对某项资源同时进行“写”操作,那么就可能会出现常说的“并发问题”,数据的一致性会被破坏。这时候,需要锁,来防止这种情况发生。锁本质上是限制了多个线程对同一资源在同一时间进行写操作。要实现这个限制,常规的有两种级别: 乐观并发控制和悲观并发控制。悲观锁与乐观锁”悲观“是假设: 我在修改数据的时候,一定会有其他人也来改,这样必会导致数据不一致。为了防止别人在我改...

2018-05-01 16:07:47 139

原创 ElasticSearch中如何分布式存储数据 #W07

本篇文章,我们来总结一下,在宏观上,ES中的数据是如何分布的,为什么能便捷地进行扩容。宏观结构1 集群cluster集群这个概念从业务层面来看,是聚合了某方面功能的节点的组合,一般由单个或多个节点组成。在ES中,具有相同的cluster.name的节点就为同一个集群, 一个集群就是由一个或多个拥有相同cluster.name的节点组成。集群也是ES中最顶层的对象,在同一个集群中,ES会将数据均匀地...

2018-04-19 19:19:49 3070

原创 面向对象设计之Ruby #W06

这篇文章是我读 《面向对象设计实践指南 Ruby语言描述》的笔记。 面向对象面向对象思想认为世界是多个对象之间的一系列消息传递构成。它将行为封装在对象内部,通过在对象之间进行消息传递来实现系统的运作。(好抽象,期待后面能更加深入理解其本质)单一职责1.为什么要单一职责?单一职责的目的是主要有以下几点:让代码易于重用。当某个方法处理多个职责的时,若其中部分职责有重用需求时,无法简单的重用该方法。职责...

2018-04-15 17:56:06 182

原创 简单慢sql处理思路 #W05

解决问题的秘诀在于思路,这也是需要训练的最重要的能力之一。下面通过复盘一次慢sql解决的过程,争取提炼出某一维度的思路。SELECT DISTINCT `customers`.* FROM customers as customers WHERE ((customers.user_id in (SELECT `users`.`id` FROM `users` WHERE `users`.`stat...

2018-04-14 16:56:56 446

原创 ElasticSearch初探 #W04

ES是什么?来自官方文档的解释:基于Luence的开源搜索引擎,有以下特性一个分布式的实时文档存储,每个字段 可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据可以看到ES是一个搜索引擎,能提供高性能的搜索分析功能。和平时使用最多的MySQL这种关系型数据库有着概念级别的区别。解决什么问题存放在关系型数据库中的数据也经常被检索,但是有着...

2018-04-09 17:20:37 153

原创 多条件查询报表统计业务#W03

废话入职第二天,接到了一个任务,优化报表业务....业务需求生成各种报表数据。 挑出其中之一来进行讨论,有一张跟进记录表,里面可以记录某人在某个时间以某种方式跟进了某个商业对象。例如,“张三”,2018.4.10,通过电话,落实了某个合同。 其中跟进方式,有电话,登门拜访等等多种方式,并支持自定义跟进方式,跟进对象也分为数种,例如某个商机,线索,合同等等。现在需要实现,对于任意跟进者(可多个),在...

2018-04-07 17:03:54 260

原创 聊聊MySQL的group by分组 #W02

最近接触了报表业务,里面有各种分组、求和操作。整理大脑中对分组的知识碎片,并查阅相关资料,在这里对group 做一个知识的梳理。什么是分组?假设有一张表articles, 有 id(主键)、author_id(作者)、type_id(类型)、created_at等字段。select author_id, count(id) from articles group by author_id;上面就是...

2018-04-07 00:10:17 811

原创 蜗牛计划-2018 #D02

蜗牛计划这个词是我最近想出来的,取名蜗牛的原因是:希望自己能有蜗牛般的耐力一直坚持在`自我提升`这条路上一直走下去。同时,经过这几年的工作经历,我也深深明白,成长的积淀是需要一步步慢慢来的,毕竟自己的起点不高,一步一个脚印,戒骄戒躁。这个计划我想会贯穿自己的一生。对于2018年,只剩下一部分时间了,我会将本年度的计划聚焦到两个点上:技术能力。提升专业水平,通过代码开源+写技术文章的方式来夯实自己的...

2018-03-25 00:02:45 495

原创 浮点数计算精度丢失问题#W01

前几日电话面试,被问到一个问题: “浮点数计算精度丢失的原因是什么?”啊,啥? 我一脸懵逼,“就是在irb中,0.2+0.4不等于0.6,为什么?“,面试官又补了一句。我没有真正get到问题是什么,胡说了一通。显然,这是问到了我的知识盲区了,我从来没有遇到过这个问题。于是我打开python命令行,执行了一下:>>> 0.4 + 0.20.6000000000000001&gt...

2018-03-23 21:15:20 4544 2

原创 午夜的觉醒 #D01

来到了一个新的城市一个星期之前, 我来到了上海,一个几乎陌生的地方,寄宿在朋友家,准备在这里开启下一段职业生涯,也是新的一段生活。当傍晚飞机抵达上海上空时,我看到了璀璨的夜景,面对一个前沿充满活力的大都市,我情绪激动,满是憧憬。我想象着自己在这里披星戴月地工作,满心喜悦的高速成长,那是一种美妙的情绪体验。准备踏上求职之路来到上海的第二天,好友要去参加电子展览,出于好奇和接触一下新的环境,我在到达的...

2018-03-21 15:35:51 270

2.4寸TFT彩屏GUI函数&9352驱动C语言源代码

TFT彩屏GUI函数源代码,包涵各种GUI函数,可在彩屏上进行各种描点绘图连线等实际操作,适合进行TFT开发

2014-07-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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