Amazon面经

最近又在面试了= =b同事建议分享一下面经,我就贴这儿吧。

面试时间:10/30/2014
面试职位:AWS – Kinesis – SDE II

面试流程:
去年面过同一个老板,因为visa原因没有offer,今年又找了同一个老板。所以skip了phone scree,直接onsite。

一共5轮面试,其中包含一轮lunch interview。其中3轮偏技术面试,2轮偏soft skill面试。

第一轮:先是介绍之前做了什么事情,重点介绍一个你觉得非常重要的项目。然后介绍最近在做的事情,详细介绍之前在的公司的后端架构。之后是一个设计题,要你设计一个在线广告展示系统,需要考虑能够给不同的用户投放不同的广告内容。具体会问到接口怎么定义,整个架构如何,如何设计最热门的广告排行榜,如何实现广告效果跟踪,如何避免重复跟踪。

第二轮:首先是自我介绍,然后面试官问你之前碰到过的比较困难解决的技术问题,详细解释如何发现、如何解决、如何以后避免同样问题。这种问题相对简单,只需要说一个之前工作的技术细节,面试官不会深究。之后就是算法面试。在一个BST中找两个节点使得他们的和是T。

第三轮:纯soft skill面试,考官是这边的Dev Manager和PM。问你每天上班的动力是什么,你觉得你加入公司后最大的挑战是什么,如何看待软件测试,你是如何做软件测试的,如何解决工作中的不可避免的冲突,如何和客户打交道。都需要具体举例说明。

第四轮:午饭,考官是hiring manager。因为去年和他聊过,所以基本就是在和他聊天,聊项目,聊这一年做的事情,然后就问他些问题。

第五轮:soft skill + 技术面。先是自我介绍,然后描述你之前做的比较成功的事情和不怎么成功的事情,当你和别人有分歧的时候,你是怎么说服别人的,你为团队带来了什么样的贡献。然后就是算法题,先是一道比较简单的题目,在一个数组A中,找到两个数A[i]和A[j],使得A[i] == A[j]并且|j – i| <= K。然后是这个题目的升级版本,在数组A中,找到两个数,A[i]和A[j],使得|A[i] – A[j]| < L,并且|j – i| <= K。

希望对大家有帮助咯^_^

Java - Runtime获得Generic Type的Type Argument

Java的Type Erasure是一个我个人非常不喜欢的“特性”。在Runtime无法获得Generic type的Generic Type Argument会使很多代码看上去非常冗余。我们举个例子。
假设要实现如下的功能:class Factory<T>有一个方法createInstance,其parameterized type需要能通过这个方法创建type T对应的实例。比如new Factory<String>().createInstance()需要返回一个String instance.

Java
class Factory<t> {
    public Object createInstance() {
        // create an instance of T
    }
    // other stuffs ...
}</t>

看上去很简单的需求在Java里却几乎没办法实现。因为Java的Type Erasure使你无法在createInstance这个方法中在运行时获取type parameter T的class object。所以一般我们只能按照下面这样去实现这个方法:

Java
class Factory<t> {
    // 传入class object
    public Object createInstance(Class clazz) {
        clazz.newInstnace();
    }
    // other stuffs ...
}
 
new Factory<integer>().createInstance(Integer.class);</integer></t>

这里Integer.class这个参数看着非常不舒服,因为明明这个factory对象已经从Generic Type Argument中获得了String这个名字,但我们不得不重复一遍。另外,Java的ArrayList的toArray()方法就是一个实际的例子,你必须要这样去用它:

Java
List<integer> aList = new ArrayList</integer><integer>();
aList.toArray(new Integer[0]);</integer>

最近习得了一个trick能够利用Java类型继承获取Generic Parameter Type,记录一下也正好可以分享给碰到同样问题的朋友。

»Read More

使用 AMD、CommonJS 及 ES Harmony 编写模块化的 JavaScript

[译] Internet Explorer 的创新

译者按

IE 曾是 web 创新的先驱,但最近几年因为对 web 标准的支持落后于其他浏览器以及低版本 IE 的各种 bug 而被人诟病。雅虎的 Nicholas C. Zakas 带我们回顾了 IE 在 web 发展过程中扮演的辉煌角色,让我们能以一个更客观的眼光来看待 IE。看完这篇文章,也许大家都会对 IE 浏览器有一定的改观,这也是我翻译这篇文章的目的。

译文

在 Internet Explorer 成为大家都恨之入骨的浏览器的很久以前,它曾是整个互联网的创新驱动力。有时候我们很难记得那些在 IE 6 成为全世界 web 开发者的灾难之前 IE 所作的贡献。不管你信不信,正因为有了 IE 4—6,才会有我们现在所知的 web 开发。IE 的一些独特的功能过去就曾是事实标准,后来成为了官方标准最终进入了 HTML5 规范。人们也许很难相信,对于我们现在认为理所应当的功能中有很大一部分都应该要归功于 IE,但快速地回顾一下历史可以让我们知道的确如此。

DOM

如果 IE 是一个人人都痛恨的浏览器,那么「文档对象模型」(DOM)就是人人都痛恨的 API 了。你可以说 DOM 过于繁琐、不适合 JavaScript 甚至是有些荒谬,而且这些也都没错。然而,DOM 还是给了开发者通过 JavaScript 来访问网页的每个部分的途径。曾经你一度只能通过 JavaScript 访问页面中某些特定的元素。IE 3 和 Netscape 3 只允许程序访问表单元素、图片以及链接。Netscape 4 改进了这一点,把程序可访问的范围通过 document.layers 扩展到了它特有的 layer 元素。IE 4 作了进一步改进,把这个范围通过 document.all 扩展到了页面的所有元素。

»Read More

Semantic HTML

再分享一份 slides,在公司的分享会上刚讲的与 HTML 语义相关的内容。

Semantic HTML (请在 Firefox / Chrome / Safari 下观看)

主要是关于 HTML 的语义的意义,以及 HTML5 规范中部分元素、属性、属性值的含义,没有包括表单元素和交互元素。里面有不少应用场景的例子,多数是来自 HTML5 草案,也有一部分是自己写的。描述的文字与规范内容不一定完全一致,有些是自己的理解。

经过近期的研究,以后用 HTML 写文章、文档的时候也有了更加清晰的认识,对一些使用场景也可以少一些纠结了。

欢迎大家拍砖。