最新 | 最热门 | 最高评价

+0  RequireJS最简实现

Kevin Lynx 发于 2017年02月05日 00:00 | 点击: 390 | 展开摘要
网上有不少解析RequireJS源码的文章,我觉得意义不大。阅读源代码的目的不是为了熟悉代码,而是为了学习核心实现原理。相对RequireJS的源码,kitty.js的实现更简单,更容易理解。本文正是抄了kitty.js的实现,是一个更精简的RequireJS,用于理解RequireJS的实现原理。

github dummy-requirejs。这个实现仅支持核心feature:

1
2

require(deps, callback) // deps 是依赖数组
def

查看全文: http://www.udpwork.com/item/16088.html

+0  ReactJS项目中基于webpack实现页面插件

Kevin Lynx 发于 2017年01月08日 00:00 | 点击: 370 | 展开摘要
整个Web页面是基于ReactJS的,js打包用的webpack,现在想在Web页面端实现一种插件机制,可以动态载入第三方写的js插件。这个插件有一个约定的入口,插件被载入后调用该入口函数,插件内部实现渲染逻辑。插件的实现也使用了ReactJS,当然理论上也可以不使用。预期的交互关系是这样的:

1
2
3
4
5
6
7
8
9
10

// 主页面
load('/plugin/my-plugin.js', function (plugin) {
plugin.in

查看全文: http://www.udpwork.com/item/16055.html

+0  一次逆向网页内容加密

Kevin Lynx 发于 2016年08月16日 00:00 | 点击: 698 | 展开摘要
最近写一个爬虫要从这个网页爬取内容。以往爬取网页内容复杂点的,一般就是处理下页面内容动态载入,动态载入的内容可能会要求复杂奇怪的参数,或者找到这个动态载入的HTTP接口在哪里麻烦点。但是这个网页不同。类似:

1

<td><span name="record_yijiaof:feiyongzldm" title="pos||"><span id="5d299905633d4aa288b65f5bf74e414c" class="nlkfqirn

查看全文: http://www.udpwork.com/item/15744.html

+0  记一次线程局部存储与动态库引起的core

Kevin Lynx 发于 2016年05月08日 00:00 | 点击: 445 | 展开摘要
线上的服务退出时coredump,显示堆栈为:

google一下发现有人遇到过,产生这个core的条件为:

使用TLS时注册了destructor (pthread_key_create),这个回调函数会在线程退出时被调用

这个destructor符号位于.so中

在线程退出时,这个.so已经被dlclose

我们的程序模型中,类似于一个Web App server,有一个线程池包装了IO处理,将请求派发给应用插件,处理完后回应给客户端。应用插件是一个.so,被动态

查看全文: http://www.udpwork.com/item/15471.html

+0  Java中隔离容器的实现

Kevin Lynx 发于 2015年09月05日 00:00 | 点击: 688 | 展开摘要
Java中隔离容器用于隔离各个依赖库环境,解决Jar包冲突问题。

问题

应用App依赖库LibA和LibB,而LibA和LibB又同时依赖LibBase,而LibA和LibB都是其他团队开发的,其中LibA发布了一个重要的修复版本,但是依赖LibBase v2.0,而LibB还没有升级版本,LibBase还不是兼容的,那么此时升级就会面临困难。在生产环境中这种情况往往更恶劣,可能是好几层的间接依赖关系。

隔离容器用于解决这种问题。它把LibA和LibB的环境完全隔离开来

查看全文: http://www.udpwork.com/item/14576.html

+0  Java GC总结

Kevin Lynx 发于 2015年08月10日 00:00 | 点击: 643 | 展开摘要
Java GC相关的文章有很多,本文只做概要性总结,主要内容来源于<深入理解Java虚拟机>。

对象存活性判定

对象存活性判定用于确定一个对象是死是活,死掉的对象则需要被垃圾回收。主要包括的方法:

引用计数

可达性分析

可达性分析的基本思想是:

通过一系列的称为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链项链时,则证明此对象是不可用的。

在Jav

查看全文: http://www.udpwork.com/item/14497.html

+0  写了一个分布式名字服务JCM

Kevin Lynx 发于 2015年07月04日 00:00 | 点击: 622 | 展开摘要
之前在公司里维护了一个名字服务,这个名字服务日常管理了近4000台机器,有4000个左右的客户端连接上来获取机器信息,由于其基本是一个单点服务,所以某些模块接近瓶颈。后来倒是有重构计划,详细设计做了,代码都写了一部分,结果由于某些原因重构就被终止了。

JCM是我业余时间用Java重写的一个版本,功能上目前只实现了基础功能。由于它是个完全分布式的架构,所以理论上可以横向扩展,大大增强系统的服务能力。

名字服务

在分布式系统中,某个服务为了提升整体服务能力,通常部署了很多实

查看全文: http://www.udpwork.com/item/14354.html

+0  基于servlet实现一个web框架

Kevin Lynx 发于 2015年06月07日 00:00 | 点击: 788 | 展开摘要
servlet作为一个web规范,其本身就算做一个web开发框架,但是其web action (响应某个URI的实现)的实现都是基于类的,不是很方便,并且3.0之前的版本还必须通过web.xml配置来增加新的action。servlet中有一个filter的功能,可以配置所有URI的功能都经过filter。我们可以基于filter的功能来实现一个简单的web框架。在这个框架中,主要改进URI action的映射,就像play framework中route的配置:

GET

查看全文: http://www.udpwork.com/item/14287.html

+0  Java中的反射及Bean容器的实现

Kevin Lynx 发于 2015年05月31日 00:00 | 点击: 583 | 展开摘要
编程语言中的反射(Refection)指的是可以在程序运行期动态加载一个类。与之相关的是自省(Introspection),这个指的是程序自己可以获取一个类型的描述信息,例如获取一个类的所有接口定义、一个接口的所有形参。当编程语言有了这些语言特性之后,可以在很大程度上解决代码耦合问题,所以在Java的世界里,可以看到很多库/框架使用了反射技术。

类似Spring的Bean容器实现就是大量运用了反射机制。Bean容器维护了一些Bean对象,简单来说就是一些普通对象。Bean容

查看全文: http://www.udpwork.com/item/14253.html

+0  Drill中实现HTTP storage plugin

Kevin Lynx 发于 2015年05月30日 00:00 | 点击: 627 | 展开摘要
Apache Drill可用于大数据的实时分析,引用一段介绍:

受到Google Dremel启发,Apache的Drill项目是对大数据集进行交互式分析的分布式系统。Drill并不会试图取代已有的大数据批处理框架(Big Data batch processing framework),如Hadoop MapReduce或流处理框架(stream processing framework),如S4和Storm。相反,它是要填充现有空白的——对大数据集的实时交互式处理



查看全文: http://www.udpwork.com/item/14248.html

+0  无锁有序链表的实现

Kevin Lynx 发于 2015年05月05日 00:00 | 点击: 621 | 展开摘要
无锁有序链表可以保证元素的唯一性,使其可用于哈希表的桶,甚至直接作为一个效率不那么高的map。普通链表的无锁实现相对简单点,因为插入元素可以在表头插,而有序链表的插入则是任意位置。

本文主要基于论文High Performance Dynamic Lock-Free Hash Tables实现。

主要问题

链表的主要操作包含insert和remove,先简单实现一个版本,就会看到问题所在,以下代码只用作示例:

struct node_t {
key_t

查看全文: http://www.udpwork.com/item/14181.html

+0  并行编程中的内存回收Hazard Pointer

Kevin Lynx 发于 2015年05月03日 00:00 | 点击: 644 | 展开摘要
接上篇使用RCU技术实现读写线程无锁,在没有GC机制的语言中,要实现Lock free的算法,就免不了要自己处理内存回收的问题。

Hazard Pointer是另一种处理这个问题的算法,而且相比起来不但简单,功能也很强大。锁无关的数据结构与Hazard指针中讲得很好,Wikipedia Hazard pointer也描述得比较清楚,所以我这里就不讲那么细了。

一个简单的实现可以参考我的github haz_ptr.c

原理

基本原理无非也是读线程对指针进行标识,指针(

查看全文: http://www.udpwork.com/item/14174.html
|<<<1234567>>>| 一共13页, 149条记录