<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[houwanfeimark的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/houwanfeimark</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; houwanfeimark]]></copyright><item><title><![CDATA[研发效能工程实践-利用Superset快速打造大数据BI平台]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/127540195</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/127540195</guid><author>houwanfeimark</author><pubDate>Sun, 04 Dec 2022 21:41:27 +0800</pubDate><description><![CDATA[随着互联网发展，现在随便哪个公司都手握大量数据。如何利用这些数据为公司商业带来价值，促使各个公司投入大量人力财力去做商业智能。如何快速打造一个BI平台呢？如果公司研发实力不是很雄厚，开源工具也是一个不错的解决方案。本篇文章主要介绍如何利用superset来打造一个BI平台，以及其中遇到的坑和一些经验分享]]></description><category></category></item><item><title><![CDATA[研发效能工程实践-精益需求管理]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/127540168</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/127540168</guid><author>houwanfeimark</author><pubDate>Mon, 07 Nov 2022 08:45:00 +0800</pubDate><description><![CDATA[传统的需求管理方式越来越跟不上当今快速变化的互联网环境，敏捷管理越来越受到各个公司的欢迎。本文就团队如何实施精益需求管理提出一种方法以及如何制定效能度量指标改进研发流程提供了一些思路，希望可以抛砖引玉]]></description><category></category></item><item><title><![CDATA[研发效能工程实践-代码评审]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/127539564</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/127539564</guid><author>houwanfeimark</author><pubDate>Thu, 03 Nov 2022 22:09:01 +0800</pubDate><description><![CDATA[CR是日常开发过程中很重要的一环，他在开发中起到了很多正向的作用，本篇属于研发效能工程实践系列的CR篇，教你如何在平时开发过程中利用CR来提升团队代码质量和团队技术水平]]></description><category></category></item><item><title><![CDATA[日常随笔-loading shared libraries: XXXXX cannot open shared object file: No such file or directory]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/127604591</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/127604591</guid><author>houwanfeimark</author><pubDate>Sun, 30 Oct 2022 21:36:09 +0800</pubDate><description><![CDATA[当出现error while loading shared libraries: XXXXX: cannot open shared object file: No such file or directory错误时，不一定是你的库不存在，只是它新安装没有被加入动态库缓存中]]></description><category></category></item><item><title><![CDATA[研发效能工程实践-单元测试]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/127176947</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/127176947</guid><author>houwanfeimark</author><pubDate>Wed, 26 Oct 2022 09:15:00 +0800</pubDate><description><![CDATA[单元测试在我们日常开发中，可以帮助我们发现早期程序错误；也可以帮助我们大胆的重构代码，对于团队提升研发效能有很好的促进作用？接下来就介绍如何开始在项目中使用单测以及单测用例的一些设计原则]]></description><category></category></item><item><title><![CDATA[研发效能工程实践开篇]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/127167614</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/127167614</guid><author>houwanfeimark</author><pubDate>Sun, 23 Oct 2022 20:23:59 +0800</pubDate><description><![CDATA[研发效能是目前很多公司都会关注的问题，特别是当下各个公司都在我只是想把自己经历的经验分享给大家，希望能给到大家帮助，打造一个敏捷团队，解放生产力，提升团队交付能力。]]></description><category></category></item><item><title><![CDATA[Java：这个对象还活着吗]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/125498649</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/125498649</guid><author>houwanfeimark</author><pubDate>Wed, 29 Jun 2022 21:42:29 +0800</pubDate><description><![CDATA[我们知道，程序运行时会不断创建对象，对象的存储是需要消耗内存。C/C++它们每次都需要手动释放内存，但是很多人用了很久的Java可能会好奇，为什么Java不需要手动释放内存呢？
究其原因就是C/C++的手动释放内存的方式一定程度上很考验开发者的水平和细心，如果哪里忘记了释放内存，可能造成灾难影响。火狐浏览器换Rust也是因为这个原因，在之前发现的大部分漏洞都是因为内存问题。
Java设计者在设计之初就避免了这个问题，将内存管理交给JVM管理，开发者不需要再显式释放内存。我们把这个叫垃圾回收，顾名思义只有垃圾]]></description><category></category></item><item><title><![CDATA[日常随笔-4-万字面经教你如何拿大厂offer(非科班)]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/111999444</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/111999444</guid><author>houwanfeimark</author><pubDate>Wed, 30 Dec 2020 22:37:52 +0800</pubDate><description><![CDATA[工作经历
最近换工作，先说结果吧，拿到最高的是的年薪40+，权衡之后选择了腾讯offer，其中也有要23k觉得要多了的，主要是上一家base太低了，有时候自己都不敢要太高，现在想通了，我来面试，通过了凭什么要拿上一家的base来压我，说出来不怕笑话在上一家年薪21+，哎，一言难尽。
回想起从毕业到现在也4年了，当初毕业的时候不是Java开发也不是计科出身，也没参加过培训班(我个人非常反感培训班)，只因偶然的实习走上Java开发这一条路。大学没有好好学习，参加工作以来，也是走过一些艰辛的道路，回想大学刚毕业那]]></description><category></category></item><item><title><![CDATA[日常随笔-3-谈查找算法]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/109909601</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/109909601</guid><author>houwanfeimark</author><pubDate>Sat, 21 Nov 2020 22:04:25 +0800</pubDate><description><![CDATA[引言
计算机处理数据无外乎是两种方式，一种是查询，第二种是修改。本文主要讨论的是查询这一操作，在查询数据时，我们最容易想到的方式那就是顺序查找，就遍历一遍呗，直到找到匹配的数据，那么时间复杂度是O(n)O(n)O(n)，当数据规模不大时，这么查找也没啥问题，但是一旦数据规模较大时，那么查询的时间就会变得很慢。这时候就有一些高效算法出来了，比如hash、内存中二分查找、存储引擎中的B+Tree，本文就详细介绍一下这些算法

查找算法
Hash表


定义：hash表又叫散列表，通过一个hash函数把任意长度的]]></description><category></category></item><item><title><![CDATA[日常随笔-2-谈缓存]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/109697476</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/109697476</guid><author>houwanfeimark</author><pubDate>Sat, 14 Nov 2020 22:07:20 +0800</pubDate><description><![CDATA[引言
最近忙着找工作，都没时间更新，今天忽然有点想法，想写一篇关于缓存的文章，仅仅是自己的一点看法。
如果说到缓存，大家可能会想到CPU的高速缓存、Redis、MemCached，还有自己实现的单机本地缓存，它们的作用其实都是一个，那就是方便我们的应用可以更快的获得我们需要的数据。
在远古计算机时代，计算机CPU的速度很慢，存储设备的速度也很慢，所以这个时候我们可能都用不上缓存，因为没必要嘛，CPU速度和存储设备的速度一致。
随着技术的发展，CPU由晶体管发展成超大规模集成电路使得cpu的发展发生了质变，c]]></description><category></category></item><item><title><![CDATA[分布式系统-4-同步网络一致性算法]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/108784024</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/108784024</guid><author>houwanfeimark</author><pubDate>Thu, 24 Sep 2020 21:37:32 +0800</pubDate><description><![CDATA[引言
上一篇文章讲了分布式同步网络算法中的BFS、最短路径、MST和MIS算法，这一篇文章将会将分布式系统中一个非常重要的问题-一致性。在单节点的环境中，一致性问题是比较容易解决的，像单节点的数据库，因为只有一个节点，也就不存在数据不一致的说法。
因为机器总会有概率出故障，如果仅仅是单节点应用，一旦机器发生故障，那么服务将不可用。为了提供高可用的应用，多节点部署应用成为一种解决方案，但是多节点部署应用也引发了一些问题，比如节点故障依然存在；并且因为多节点，导致节点间需要通信，因此系统存在通信故障，如果机器不]]></description><category></category></item><item><title><![CDATA[分布式系统-3-同步网络算法]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/108568819</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/108568819</guid><author>houwanfeimark</author><pubDate>Sun, 13 Sep 2020 21:55:45 +0800</pubDate><description><![CDATA[引言
上一篇文章讲了同步网络中的leader选举算法。考虑一个问题，当网络中有消息需要广播时，如果在网络中以最快的速度完成广播？或者如何计算图的直径？接下来就会一步一步解决这些问题
将在这篇文章中讲述分布式同步网络中广度优先搜索、最短路径和最小生成数算法。
广度优先搜索
利用广度优先搜索来构造方便用于广播通信的树，BFS树最小化最大通信时间
SynchBFS算法


前提假设

假设进程有uid
不知道网络大小和直径
给定初始root i0i_0i0​



进程维护状态

parentparentpare]]></description><category></category></item><item><title><![CDATA[分布式系统-2-同步网络Leader选举算法]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/108561116</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/108561116</guid><author>houwanfeimark</author><pubDate>Sun, 13 Sep 2020 12:37:28 +0800</pubDate><description><![CDATA[引言
在前一篇文章概述中，提到了分布式系统模型大致分类为同步网络模型、异步共享存储器模型、异步网络模型和部分同步模型。今天开始，将慢慢介绍同步网络模型的一些算法，因为同步网络模型有一些严格的环境假设，所以同步网络模型算法比较简单，但是同步网络模型是一个理想化模型，现实生活中这种模型是非常少的，但是学习它们也有助于我们理解后边的异步模型算法和部分同步模型，在接下来的几篇文章中，将分别介绍分布式领域中比较热门的话题包括Leader选举、一致性（包括著名的Byzantine故障下的一致性）、最小生成树和最短路径等]]></description><category></category></item><item><title><![CDATA[分布式系统-1-概述]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/108523702</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/108523702</guid><author>houwanfeimark</author><pubDate>Thu, 10 Sep 2020 22:01:38 +0800</pubDate><description><![CDATA[引言
随着互联网的发展和业务的复杂度提升，越来越多的应用开始使用微服务架构，因此对于学习分布式基础知识非常有必要。因为我们平时做开发可以熟练的使用工具，但是有时候不知道其背后的原理会让人很不爽。
提到分布式系统，可能很多人就会觉得那是很多机器，当然这个没错，但是我们不应该以机器的数量来分辨是不是分布式系统，当然多机器肯定是分布式，但是单机就一定不是分布式系统吗？答案肯定是不一定，在NancyA.Lynch的《分布式算法》一书中，都是用抽象为”进程”理解的，如果我们用机器来理解，假设公司分配的机器是8核16G]]></description><category></category></item><item><title><![CDATA[一个外包系统的重构过程]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/107623502</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/107623502</guid><author>houwanfeimark</author><pubDate>Mon, 27 Jul 2020 22:47:24 +0800</pubDate><description><![CDATA[背景
2017年正直互联网金融崛起之时，由于那时候监管不规范，互联网金融公司如雨后春笋般崛起，我也是这时入职了一家互联网金融创业公司（一个大集团的全资子公司）。入职之前可能因为公司没有技术团队来开发一套完整的贷款系统，因此外包了系统给一个外包公司（这里就不说是哪家了），整个项目软件技术偏老，JDK当时还是用的1.7，外包系统可能大家都懂的，它们为了批量生产，基本都是有一个自有框架，然后在其框架上做开发。维护过外包系统的人可能都知道，那是一个非常痛苦的，就拿我接手的这个项目来说吧，我主要列几点。

数据库表冗]]></description><category></category></item><item><title><![CDATA[操作系统-11-死锁原理]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/107601561</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/107601561</guid><author>houwanfeimark</author><pubDate>Sun, 26 Jul 2020 22:57:23 +0800</pubDate><description><![CDATA[引言
计算机的某些资源同一时间只能一个进程或线程使用，比如打印机，如果两个进程同时使用打印机便会出问题。所以需要使用锁来控制进程并发的使用某些资源，但是不恰当的使用锁会造成一个严重的问题。举个例子，进程A申请扫描仪，A获得扫描仪；进程B申请刻录仪，B获得刻录仪，此时进程A需要申请刻录仪，而进程B要申请扫描仪，因为进程A、B都需要有扫描仪和刻录仪才能完成工作，因此这个过程将一直等待下去，这就叫做死锁。
死锁可以发生在各种各样的场景，比如数据库，接下来学习死锁的发生和死锁的检查以及死锁的避免和解决
资源
大部分]]></description><category></category></item><item><title><![CDATA[操作系统-10-I/O-基本原理]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/107547348</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/107547348</guid><author>houwanfeimark</author><pubDate>Thu, 23 Jul 2020 20:47:29 +0800</pubDate><description><![CDATA[引言
上一篇学习了文件系统的原理，我们知道了操作系统是如何管理文件的，但是却没有学习磁盘是如何处理操作系统发出的读写操作，这一篇我们要学习操作系统是如果实现I/O和管理I/O的。
什么是I/O
I/O包含两部分，I/O设备和I/O接口以及如何管理I/O设备，I/O设备就是我们常见的磁盘、网卡、鼠标键盘、打印机和显示器等。
接下来的文章就要学习I/O设备、I/O模型和I/O、中断处理和错误处理。
I/O硬件原理
IO设备

块设备：存储信息在固定大小的块，每一个块都自己的地址，所有的传输单元都是一个或者多个块]]></description><category></category></item><item><title><![CDATA[操作系统-番外-基于NAND存储设备文件系统F2FS]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/107426854</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/107426854</guid><author>houwanfeimark</author><pubDate>Sat, 18 Jul 2020 12:00:39 +0800</pubDate><description><![CDATA[背景
由于磁盘的机械特征，导致要想提升它的读写速度是非常困难的。因此SSD应运而生，它的读写速度，因为没有磁头，导致其寻道时间几乎为0。
SSD的分类

基于闪存类：采用FLASH芯片作为存储介质，擦写次数有限制
基于DRAM的固态硬盘：采用DRAM作为存储介质,它是一种高性能的存储器，而且使用寿命很长，美中不足的是需要独立电源来保护数据安全

针对闪存ssd的特性，虽然其速度快，我们知道大部分的I/O操作都是随机写，如果不仔细的处理，会严重增加I/O的延迟和缩短SSD的寿命。虽然LFS和BTRFS有效的降]]></description><category></category></item><item><title><![CDATA[操作系统-番外-老牌Linux文件系统ext]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/107239801</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/107239801</guid><author>houwanfeimark</author><pubDate>Thu, 09 Jul 2020 23:06:56 +0800</pubDate><description><![CDATA[引言
和标题一样，ext文件系统是一个老牌的Linux的文件系统，是Linux的第一个文件系统。虽然业界将Ext文件系统看成是一个过度用的文件系统，但是现在的Ext4依然有很强的生命力。从ext2-ext3-ext4，文件系统的磁盘布局没有发生太大的变化，从ext2到ext3，主要是增强了可用性、数据完整性、速度、易于迁移等功能；ext3到ext4就不仅仅是功能增强，它修改了某一些重要的数据结构，并且在对大文件的支持上做了更多的优化改进
Ext文件系统磁盘布局
Ext2文件系统磁盘布局
ext文件系统从ex]]></description><category></category></item><item><title><![CDATA[操作系统-番外-日志结构文件系统LFS]]></title><link>https://blog.youkuaiyun.com/houwanfeimark/article/details/107030053</link><guid>https://blog.youkuaiyun.com/houwanfeimark/article/details/107030053</guid><author>houwanfeimark</author><pubDate>Mon, 29 Jun 2020 22:38:44 +0800</pubDate><description><![CDATA[引言
过去几十年CPU速度的增长是巨大的，但是磁盘的访问速度却增长较慢。内存近些年发展也很快，可以提供较大的空间存储程序的工作集，因此磁盘传输主要是被写操作支配。因此如何提升写效率是有效利用磁盘的关键。
日志结构文件系统是用顺序写，因为省去了绝大部分seek操作，因此大大提升了写的性能。还有一个好处就是系统崩溃恢复，日志结构文件系统只需要检查最近的部分日志
日志结构文件系统实现
基本假设

大部分的读请求都从缓存中读取
大部分磁盘访问都是写请求

段概念


段定义：虽然磁盘顺序写效率高，考虑一下，如果有一]]></description><category></category></item></channel></rss>