<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ff00yo的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/ff00yo</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ff00yo]]></copyright><item><title><![CDATA[使用linux的lsof和pmap解决fd和内存泄漏]]></title><link>https://blog.csdn.net/ff00yo/article/details/89439635</link><guid>https://blog.csdn.net/ff00yo/article/details/89439635</guid><author>ff00yo</author><pubDate>Sun, 21 Apr 2019 21:10:33 +0800</pubDate><description><![CDATA[最近dfs开发到了最后的调试阶段，进过了艰苦卓越的斗争，终于还是解决了几个fd泄漏 和内存泄漏的问题。这里把一些经验记录下来，以备后患。
   那么先介绍一下dfs，dfs分为两部分，tracker和storage。 tracker只负责负载均衡和调度。storage负责数据 的存储和同步,基本的信息就是这样。

现象
dfs的storage在单机运行的时候没有问题，不管是upload，dele...]]></description><category></category></item><item><title><![CDATA[如何优雅地使用Redis之位图操作]]></title><link>https://blog.csdn.net/ff00yo/article/details/89439601</link><guid>https://blog.csdn.net/ff00yo/article/details/89439601</guid><author>ff00yo</author><pubDate>Sun, 21 Apr 2019 21:09:00 +0800</pubDate><description><![CDATA[前言
在进入今天的主题前，先简单地解释下Redis中的位图到底是什么。Redis官方文档对于位图的介绍如下：
位图不是一个真实的数据类型，而是定义在字符串类型上的面向位的操作的集合。由于字符串类型是二进制安全的二进制大对象，并且最大长度是 512MB，适合于设置 2^32个不同的位。
位操作分为两组：常量时间单个位的操作，像设置一个位为 1 或者 0，或者获取该位的值。对一组位的操作，例如计算指...]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap 的 size 方法原理分析]]></title><link>https://blog.csdn.net/ff00yo/article/details/89439512</link><guid>https://blog.csdn.net/ff00yo/article/details/89439512</guid><author>ff00yo</author><pubDate>Sun, 21 Apr 2019 21:05:21 +0800</pubDate><description><![CDATA[前言
JAVA 语言提供了大量丰富的集合, 比如 List, Set, Map 等。其中 Map 是一个常用的一个数据结构，HashMap 是基于 Hash 算法实现 Map 接口而被广泛使用的集类。HashMap 里面是一个数组，然后数组中每个元素是一个单向链表。但是 HashMap 并不是线程安全的, 在多线程场景下使用存在并发和死循环问题。HashMap 结构如图所示：
线程安全的解决方案...]]></description><category></category></item><item><title><![CDATA[【开发原则】软件开发中的原则]]></title><link>https://blog.csdn.net/ff00yo/article/details/89439481</link><guid>https://blog.csdn.net/ff00yo/article/details/89439481</guid><author>ff00yo</author><pubDate>Sun, 21 Apr 2019 21:03:53 +0800</pubDate><description><![CDATA[作者：@pdai
本文为作者原创，转载请注明出处：https://www.cnblogs.com/pengdai/p/9151800.html
内容目录
参考文章
开发原则
S单一职责SRP
O开放封闭原则OCP
L里氏替换原则LSP
I接口隔离法则
D依赖倒置原则DIP
合成/聚合复用原则
迪米特法则
Q&amp;A
在软件开发中，前人对软件系统的设计和开发总结了一些原则和模式， 不管用什么语...]]></description><category></category></item><item><title><![CDATA[[译] 开始设计动画的九个步骤：为作品赋予生命力]]></title><link>https://blog.csdn.net/ff00yo/article/details/89439429</link><guid>https://blog.csdn.net/ff00yo/article/details/89439429</guid><author>ff00yo</author><pubDate>Sun, 21 Apr 2019 21:01:29 +0800</pubDate><description><![CDATA[动画创造生命
动画意味着充沛的活力与激情，它给静止的事物以生命。在软件应用中，动画不仅是为了取悦人们，而更是为了解决问题。
作为人类，我们习惯于世界围绕着我们运转；如果软件的每一部分也都能有着连贯的动画，那就会让人感到自然而又充满活力。
科技行业领导者不断推动其产品朝着更为自然的方向发展，诸如动画设计、动画用户体验、用户体验编排等复杂的概念日趋流行。
请记住：动画就像布局、间距、排印和颜色一样，...]]></description><category></category></item><item><title><![CDATA[支付平台架构评审]]></title><link>https://blog.csdn.net/ff00yo/article/details/89403350</link><guid>https://blog.csdn.net/ff00yo/article/details/89403350</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:39:13 +0800</pubDate><description><![CDATA[作者：李艳鹏，蚂蚁金服技术专家，曾在花旗银行、甲骨文、路透社、新浪微博等大型IT互联网公司担任技术负责人和架构师，现专注于大规模高并发的线上和线下支付平台的应用架构和技术架构的规划与落地，FastPay项目发起人！
互联网平台架构日益成为互联网发展的基石，对于 Java 开发者和架构师而言，只有在了解架构背后的原理后，才能写出更高质量的代码，才能设计出更好的方案，才能在错综复杂平台架构下产出价值...]]></description><category></category></item><item><title><![CDATA[《叶问》第1期]]></title><link>https://blog.csdn.net/ff00yo/article/details/89403288</link><guid>https://blog.csdn.net/ff00yo/article/details/89403288</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:37:10 +0800</pubDate><description><![CDATA[关 于 叶 问
《叶问》是知数堂新设计的互动栏目，不定期给大家提供技术知识小贴士，形式不限，或提问、或讨论均可，并在当天发布答案，让大家轻轻松松利用碎片时间就可以学到最实用的知识点。
2018年6月10日，周日
MySQL主从复制什么原因会造成不一致，如何预防及解决？
一、导致主从不一致的原因主要有：
人为原因导致从库与主库数据不一致（从库写入）
主从复制过程中，主库异常宕机
设置了ignore...]]></description><category></category></item><item><title><![CDATA[Linux服务器性能查看分析调优v]]></title><link>https://blog.csdn.net/ff00yo/article/details/89403244</link><guid>https://blog.csdn.net/ff00yo/article/details/89403244</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:35:33 +0800</pubDate><description><![CDATA[一 linux服务器性能查看
1.1 cpu性能查看
1、查看物理cpu个数：
cat /proc/cpuinfo |grep “physical id”|sort|uniq|wc -l
2、查看每个物理cpu中的core个数：
cat /proc/cpuinfo |grep “cpu cores”|wc -l
3、逻辑cpu的个数：
cat /proc/cpuinfo |grep “proce...]]></description><category></category></item><item><title><![CDATA[如何通过编程发现Java死锁]]></title><link>https://blog.csdn.net/ff00yo/article/details/89403182</link><guid>https://blog.csdn.net/ff00yo/article/details/89403182</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:33:34 +0800</pubDate><description><![CDATA[本文由 ImportNew - rookie_sam 翻译自 Dzone。欢迎加入翻译小组。转载请见文末要求。
死锁是指，两个或多个动作一直在等待其他动作完成而使得所有动作都始终处在阻塞的状态。想要在开发阶段检测到死锁是非常困难的，而想要解除死锁往往需要重新启动程序。更糟的是，死锁通常发生在负载最重的生产过程中，而想要在测试中发现它，十分不易。之所以这么说，是因为测试线程之间所有可能的交叉是不现...]]></description><category></category></item><item><title><![CDATA[电商系统中的商品模型的分析与设计—续]]></title><link>https://blog.csdn.net/ff00yo/article/details/89403000</link><guid>https://blog.csdn.net/ff00yo/article/details/89403000</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:28:23 +0800</pubDate><description><![CDATA[前言
在《电商系统中的商品模型的分析与设计》中，对电商系统商品模型有一个粗浅的描述，后来有博友对货品和商品的区别以及属性有一些疑问。我也对此做一些研究，再次简单的对商品模型做一个介绍。

从SPU、SKU开始
首先我们需要澄清上篇中的这两个概念，在上篇文章中“货品”是指一种概念物品，这种物品并不是一个具体的实物，当它具备具体的属性、价格时，才是一种实物，也就是商品。“商品”就是库存中一个具体的实...]]></description><category></category></item><item><title><![CDATA[Java线程池ThreadPoolExecutor源码分析]]></title><link>https://blog.csdn.net/ff00yo/article/details/89402918</link><guid>https://blog.csdn.net/ff00yo/article/details/89402918</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:25:15 +0800</pubDate><description><![CDATA[ThreadPoolExecutor是jdk内置线程池的一个实现，基本上大部分情况都会使用这个线程池完成各项操作。
本文分析ThreadPoolExecutor的实现原理。
ThreadPoolExecutor的状态和属性
ThreadPoolExecutor的属性在之前的一篇java内置的线程池笔记文章中解释过了，本文不再解释。
ThreadPoolExecutor线程池有5个状态，分别是：
...]]></description><category></category></item><item><title><![CDATA[百亿级日志系统架构设计及优化]]></title><link>https://blog.csdn.net/ff00yo/article/details/89402855</link><guid>https://blog.csdn.net/ff00yo/article/details/89402855</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:22:59 +0800</pubDate><description><![CDATA[日志数据是最常见的一种海量数据，以拥有大量用户群体的电商平台为例，双 11 大促活动期间，它们可能每小时的日志数量达到百亿规模，海量的日志数据暴增，随之给技术团队带来严峻的挑战。
本文将从海量日志系统在优化、部署、监控方向如何更适应业务的需求入手，重点从多种日志系统的架构设计对比；后续调优过程：横向扩展与纵向扩展，分集群，数据分治，重写数据链路等实际现象与问题展开。
日志系统架构基准
有过项目开...]]></description><category></category></item><item><title><![CDATA[控制圈复杂度的9种重构技术]]></title><link>https://blog.csdn.net/ff00yo/article/details/89402783</link><guid>https://blog.csdn.net/ff00yo/article/details/89402783</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:20:30 +0800</pubDate><description><![CDATA[一个软件总是为解决某种特定的需求而产生，时代在发展，客户的业务也在发生变化。有的需求相对稳定一些，有的需求变化的比较剧烈，还有的需求已经消失了，或者转化成了别的需求。在这种情况下，软件必须相应的改变。
考虑到成本和时间等因素，当然不是所有的需求变化都要在软件系统中实现。但是总的说来，软件要适应需求的变化，以保持自己的生命力。
这就产生了一种糟糕的现象：软件产品最初制造出来，是经过精心的设计，具有...]]></description><category></category></item><item><title><![CDATA[统计SDK这些事（四）订单归因怎么算？]]></title><link>https://blog.csdn.net/ff00yo/article/details/89402576</link><guid>https://blog.csdn.net/ff00yo/article/details/89402576</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:13:40 +0800</pubDate><description><![CDATA[在电商领域中，用户完成订单支付才能算一次完整的产品体验，这样的用户也才是产品的目标用户。而衡量订单的来源是优化市场外部渠道投放、内部策略优化的重要点。 外部来源指在应用外部的广告来源、搜索引擎来源、app的下载渠道等，主要是市场与渠道部门关心的核心维度；内部来源指在应用内部的运营活动、搜索、推荐等不同产品模块，主要是产品与运营关心的核心维度。
所以，任何一个订单的来源可以分为外部来源和内部来源，...]]></description><category></category></item><item><title><![CDATA[Kafka解惑之时间轮（TimingWheel）]]></title><link>https://blog.csdn.net/ff00yo/article/details/89402478</link><guid>https://blog.csdn.net/ff00yo/article/details/89402478</guid><author>ff00yo</author><pubDate>Fri, 19 Apr 2019 16:10:15 +0800</pubDate><description><![CDATA[Kafka中存在大量的延迟操作，比如延迟生产、延迟拉取以及延迟删除等。Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能，而是基于时间轮自定义了一个用于实现延迟功能的定时器（SystemTimer）。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n))，并不能满足Kafka的高性能要求，而基于时间轮可以将插入和删除操作的时间...]]></description><category></category></item><item><title><![CDATA[微服务架构实践（API Gateway）]]></title><link>https://blog.csdn.net/ff00yo/article/details/89383873</link><guid>https://blog.csdn.net/ff00yo/article/details/89383873</guid><author>ff00yo</author><pubDate>Thu, 18 Apr 2019 17:32:01 +0800</pubDate><description><![CDATA[在微服务架构风格中，一个大应用通常会被拆分成为了多个小的服务系统提供出来，这些小的系统他们可以自成体系，也就是说这些小系统可以拥有自己的数据库，框架甚至语言等，这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用。
我们通常需要在一个界面上展示很多数据，这些数据可能来自于不同的微服务中，比如在一个电商系统中，查看一个商品详情页，这个商品...]]></description><category></category></item><item><title><![CDATA[聊聊 隐式转换]]></title><link>https://blog.csdn.net/ff00yo/article/details/89383777</link><guid>https://blog.csdn.net/ff00yo/article/details/89383777</guid><author>ff00yo</author><pubDate>Thu, 18 Apr 2019 17:28:30 +0800</pubDate><description><![CDATA[工作过程中会遇到比较多关于隐式转换的案例，隐式转换除了会导致慢查询，还会导致数据不准。本文通过几个生产中遇到的案例来。
基础知识
关于比较运算的原则,MySQL官方文档的描述: https://dev.mysql.com/doc/refman/5.6/en/type-conversion.html
如果 判断符号左右两边有一个为NULL,结果就是null，除非使用安全的等值判断 &lt;=&gt...]]></description><category></category></item><item><title><![CDATA[UX专家如何做设计评审？来看这份深度总结！]]></title><link>https://blog.csdn.net/ff00yo/article/details/89383734</link><guid>https://blog.csdn.net/ff00yo/article/details/89383734</guid><author>ff00yo</author><pubDate>Thu, 18 Apr 2019 17:27:15 +0800</pubDate><description><![CDATA[一、什么是「设计评审」？
定义：设计评审是一种可用性测查工具，通常由一个评审员审查设计方案中的可用性问题。
「设计评审」一词颇为广义，涉及数种可用性测查方法，且每一种的运用因人（评审员）而异、因评审目的而异。常见的设计评审方法有：
启发式评估（Heuristic Evaluation）。启发式评估的标准是设计方案需遵循一套设计原则，比如尼尔森十大可用性原则。
独立设计准则（Standalone ...]]></description><category></category></item><item><title><![CDATA[聊一聊顺序消息]]></title><link>https://blog.csdn.net/ff00yo/article/details/89383677</link><guid>https://blog.csdn.net/ff00yo/article/details/89383677</guid><author>ff00yo</author><pubDate>Thu, 18 Apr 2019 17:25:06 +0800</pubDate><description><![CDATA[当我们说顺序时，我们在说什么？
日常思维中，顺序大部分情况会和时间关联起来，即时间的先后表示事件的顺序关系。
比如事件A发生在下午3点一刻，而事件B发生在下午4点，那么我们认为事件A发生在事件B之前，他们的顺序关系为先A后B。
上面的例子之所以成立是因为他们有相同的参考系，即他们的时间是对应的同一个物理时钟的时间。如果A发生的时间是北京时间，而B依赖的时间是东京时间，那么先A后B的顺序关系还成立...]]></description><category></category></item><item><title><![CDATA[浅谈web网站架构演变过程]]></title><link>https://blog.csdn.net/ff00yo/article/details/89383444</link><guid>https://blog.csdn.net/ff00yo/article/details/89383444</guid><author>ff00yo</author><pubDate>Thu, 18 Apr 2019 17:17:31 +0800</pubDate><description><![CDATA[前言
　　
　　我们以javaweb为例，来搭建一个简单的电商系统，看看这个系统可以如何一步步演变。
该系统具备的功能：
用户模块：用户注册和管理
商品模块：商品展示和管理
交易模块：创建交易和管理
阶段一、单机构建网站
　　网站的初期，我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器，如tomcat、jetty、jboos，然后直接使用JSP/servlet技术，或者使用一些开源...]]></description><category></category></item></channel></rss>