旧文一篇-我的2015之跳槽

2015年年底我从HSBC跳槽出来后,在我原来的博客写下了这篇文章,当时被黑客派收录,但后来我的VPS被黑了后,博客也挂了,也没有存档,所以 我也早就忘了我还写过这篇文章。 后来我进爱立信广研的时候,这篇文章不知道被哪位同事在黑客派看到然后发到广研的微信大群里面,结果让我好生尴尬。 时光荏苒,岁月如梭,光阴似箭,白驹过隙,斗转星移,潜龙勿用,亢龙有悔,How time flies..... 又逢岁末,自然不能免俗地想来做个年终总结,今天又恰好是我在爱立信广州研发中心工作了整整一个月,就应景总结一下这次的跳槽历程。 其实我想离开 »

Read More

Spring Boot源码剖析系列(1) - 启动

写好一个启动类,Application,然后通过Spring Boot将它启动: 顺流而下, SpringApplication.run(): 从上面的run方法看到,启动类将会作为SpringApplication的构造函数的参数,而main方法的参数将会作为run方法的参数。 我们再来看SpringApplication的构造函数: initialize方法,一看名字就知道不一般,我们来仔细分析一下初始化了么。它首先是把启动类加到sources里, 接着判断是否是为web environment,调用了deduceWebEnvironment方法: 它是到classpath里面是否有javax.servlet.Servlet和org.springframework.web.context.ConfigurableWebApplicationContext这两个类,只有这两个类都存在, »

Read More

Spring Boot学习笔记(1)

1.如果想用Maven来build一个executable的基于SpringBoot的jar包,可以用Spring Boot Maven Plugin。只需要将以下配置加到pom.xml的plugins里面: 这个配置将会把在Maven package时创建的jar或者war重新打包,在target目录下,你会发现除了有两个jar包,其中一个带着original后缀,这个是由maven package创建的,而没带original后缀的就是由Spring Boot Maven Plugin重新打包的: $ mvn package $ ls target/*.jar target/myproject-1. »

Read More

Jetty源码剖析系列(2)-web.xml的解析与执行

当用Jetty来启动一个web项目的时候, Jetty会去读取war包的WEB-INFO目录里面的web.xml文件,然后解析这个web.xml。那这一步是什么时候进行和整个过程是怎样的?我们一起来分析一下。 以用Jetty Runner来启动一个war包为例, 在org.eclipse.jetty.runner.Runner类的configure方法里,我们看到它先构建出一个WebAppContext: 上面的代码中我们要注意webapp.setConfigurationClasses(_plusConfigurationClasses)这一句,我们先来看看_plusConfigurationClasses是什么东西: 我们可以看到就是一个String数组,里面包含了各种Configuration类的类名,这里我们要注意的是WebXmlConfiguration这个类,一看名字就知道是跟web.xml有关的: »

Read More

Jetty源码剖析系列(1)

Jetty是Eclipse Foundation出的一个轻量级Web服务器和Servlet容器。Spark使用了Jetty作为它的内嵌服务器。我一直都对Web服务器有着迷之兴趣,前前后后去读过好几个Web服务器的源码,有代码量太大设计模式复杂而半途而废的,如Tomcat,有因为代码量小而简单而读完的,如NanoHTTPD。相比之下,Jetty大小适中,而且也够成熟,之前在工作中写的一个项目就是用了Jetty Runner来实现了一个RESTful Service。这段时间重新去学习了一遍Java NIO,所以这次就趁机把Jetty的源码好好撸一遍。 Jetty Version: 9.4.5 Let's hit on »

Read More

给博客添加了留言评论功能

Ghost没有built in的留言评论功能,但它支持通过第三方平台来留言评论。它的官方指南里提供了几个第三方平台。我选了Disqus。方法很简单,就是先在Disqus上注册一个账号,设置你的博客地址,然后将Disqus生成的一段JavaScript的脚本放到你的Ghost的theme里面的post.hbs文件里面,重启Ghost就可以了。效果如下图: 感觉还不错哦。 只是不知道有没有什么安全隐患。先适用一段时间再看看。或许我可以自己实现一个留言评论功能。 Update: 原来Disqus被天朝屏蔽掉了,所以如果不翻墙的话,是无法给本博客留言评论的,也看不到。。。。。 »

Read More

NanoHTTPD源码剖析

NanoHttpd是一个用Java写的HTTP服务器,堪称蝇级,但麻雀虽小,五脏俱全,在GitHub上有着两千多个Star,甚为可观。 我之前有读过好几个Java的HTTP Server的源码,有Tomcat,Jetty,Spark(一个内嵌了Jetty的RESTful Framework),Undertow(JBoss出的一个轻量级Web Server),Vert.x等等,但它们的代码量都不小,同时还糅合了各种设计模式,很容易就迷失在里面各种细节当中。 这个NanoHttpd相比之下就简单得多,正如它的名字所说的,纳米级的HTTP Daemon,只需要对Java »

Read More

Java URL类源码剖析

前几天重新把URL厘清了一下(这里), 趁热打铁,把JDK的URL类源码也仔细读了,务求把URL的方方面面都了然于胸。 注:在此用的JDK8的版本。 首先,URL在java.net这个包,类签名如下: public final class URL implements java.io.Serializable 可见URL是一个final类,即URL类无法被继承,并实现了Serializable接口,即URL对象可被序列化。 再看URL主要的实例属性: private String »

Read More

博客升级了

这个博客用的是Ghost,之前用的是0.7.8的版本,用了差不多一年,讲真,这个版本很烂,但Ghost胜在简洁,各种操作都比较直观。今晚闲来无事,就把它升级到最新的版本,顺便换了theme。 换theme这个过程,发挥了我处女座的特性,前后从网上下载了几十个theme,挨个地试,但发现总能找出一个不满意的点,最后用的是GhostNow, 将就着用吧,谁叫我是个前端渣呢? »

Read More

深入理解URL

我们几乎每天都要接触URL,但如果让你清楚地解释一下URL,我想很多人都只能支支吾吾,模棱两可,觉得差不多就行了,但我无法接受这样子。我从网上找了很多文章,想厘清URL的方方面面,但很多文章都是东拼西凑,缺乏权威性。所以我决定从最权威的两份文档入手来理解URL,一份当然是RFC1738,另一份是Wikipedia URL条目。下文其实是我对Wikipedia URL中的简单翻译。 URL,Uniform Resource Locator,统一资源定位符,俗称的网络地址(colloquially termed a web »

Read More