摘要:
面试的时候发现99%的童鞋不理解为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的?还有non-blocking IO, event loop等概念很不清楚。来深入分析一下: 首先看下面的代码: function foo() { console.log( 'first' ); setTimeout( ( functio... 阅读全文
摘要:
OSGi模块化框架是很早就出来的一个插件化框架,最早Eclipse用它而出名,但这些年也没有大热虽然OSGi已经发布了版本1到版本5。现在用的最多的,也是本文讲述基于的是Equinox的OSGi实现,同时也是Eclipse核心,Spring Dynamic Module也是基于Equinox。OSGi框架为java系统提供了一个通用的容器,该系统中的 bundle,无需停止系统,即可实现 bund... 阅读全文
摘要:
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态的锁虽然避免了这些问题,但是其实它们只是在没有真实的竞争时才有效。Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪 阅读全文
摘要:
单链表的Java实现首先参考wiki上的单链表说明,单链表每个节点包含数据和指向链表中下一个节点的指针或引用。然后看代码import java.lang.*;public class SinglyLinkeList{ Node start; public SinnglyLinkedList() { this.start=null; } public void addFront(Object newData) { Node cache = this.start; //store a reference to the current st... 阅读全文
摘要:
如果我们想对外发布RESTful API,可以基于ASP.NET来构建Restful APIs,但需要部署IIS吗?答案是不必。你可以把它托管到一个Windows Service。具体如何把WEB API自托管到Windows Service可以参考这一文章:Self-Host a Web API (HttpSelfHostServer) (C#). 基本上照着一步步做就行了。例子里是基于Windows Console Application,同样可以Self-Host到Windows Service.问题在于如何把Controllers从Windows Service分离?可以使用autoF 阅读全文
摘要:
今天有空,小结一下Twitter Bootstrap 3的使用。首先不得不说,Bootstrap是迄今(2014)比较好的WEB设计框架(当然,其它的优秀WEB Framework还有:Foundation/Gumby/Yahoo pure css/Ink/),可以在很短的时间内构建出非常专业的WEB界面;配合各种模板,可以做出风格完全不同的网站;例如:谁能看的出TheNextWeb.com是基于Bootstrap框架做的呢?最近做了一下项目是使用Bootstrap 3和HTML5来构造响应式用户界面(Responsive Web),能够自适应PC、Tablet PC平板电脑(7,10寸)、P 阅读全文
摘要:
最近设计和实现了一个JAVA的RESTful API的后台业务系统架构,主要基于Java平台。设计要求是: 性能:平均响应时间(RESTful API)小于2s(平均负载的情况下),并发访问200个以上。 可用性:99%,87.6小时每年宕机时间 伸缩性:允许负载均衡集群水平扩展web server和application server。保留半年的历史数据。可以扩展。 ... 阅读全文
摘要:
先说下异步(Asynchronous)和多线程(Multi-threading)的区别:异步是相对与同步来说的,一般来说意味着非阻塞;异步在具体实现上是用多线程来实现的,但好处是你不用操心和管理多线程,它给你封装了一个干净的接口来调用。当然,在linux和javascript环境下,你要理解异步一般要理解事件驱动机制/Event loop: 《理解Event loop》。这里讲的主要是.NET。同步函数异步化有很多好处,但异步化是有开销的:《Understanding the Costs of Async and Await》。具体来说,下列场合适合用异步化:耗时的I/O操作,例如:读文件I/ 阅读全文
摘要:
今天有空,总结一下.NET 4.5并行库(TaskParallelLibrary)用法。也许C和C++的程序员刚刚开始写C#还习惯于new Thread来新建一个线程,但新建线程需要内存和CPU上下文切换的开销,200,000个周期,销毁线程也需要100,000个周期;所以还需要实现一个线程池Threadpool。自从有了并行库(TaskParallelLibrary),这些都不需要了。使用Task.Factory.StartNew(() => DoSomething(item));可以创建一个线程并自动由线程池管理。写法非常简单,但其实里面误区很多:1. Task.Factory.St 阅读全文
摘要:
今天有空,小结一下RestSharp的用法。RestSharp内置了XML和JSON的反序列化(deserializers )。application/json – JsonDeserializerapplication/xml – XmlDeserializertext/json – JsonDeserializertext/xml – XmlDeserializer* – XmlDeserializer (all other content types not specified)比如下面的实体类:Public class Employee { Public string Emplo... 阅读全文