| Marshall's profileMarshall'sPhotosBlogLists | Help |
|
Marshall's10/19/2009 创新工场笔经+面经昨天李开复来南大做宣传,下午的交流会我去笔试了摩根,没去。后来听说有创新工场的笔试,于是决定过去打打酱油。 本来以为考场会爆满,找找到了蒙民伟楼109,发现居然还没看门。直到考试开始,109也没坐满,还是隔着坐的。 笔试比较简单,三道题60分钟。第一题要求做一个句子的reverse,但保持单词内部的顺序不变。我用了java的split方法,有点作弊了。一般的方法就是全部reverse,然后一个单词一个单词的reverse。第二题类似打印螺旋矩阵,但是是输入x,y,输出值,程序员面试宝典上看过的题目。第三题是生成二叉搜索树,也不难。 下午的面试比较悲剧了。先谈了谈项目,聊了聊技术难点,似乎面试官觉得这个没什么。然后是数据结构题。要求写一个Stack,使得push, pop, minimum三个方法的时间复杂度是O(1)。minimum即返回栈中最小的值。我想了半天没搞定,一出门一拍脑袋就出来了。只要在push的时候,如果碰到比当前min更小的数字,就把当前这个数字链接到之前最小的数字,以便这个值被pop的时候恢复min。 面试肯定是挂了,没有引起对方的兴趣,题目也没做出来。算是继续积累经验吧,至少比支付宝的面试有提高了。 小结:面试时如果要谈项目,最好是能让对方感兴趣的项目。我提了apis,因为我觉得我比较熟悉。事实上应该提VeryFTP,这个有更多技术的东西可以讨论。比如资源的匹配算法。第二,做程序题不要着急,理清思路再下手,当然这个是需要积累大量的面试经验后才能练出来的。 10/12/2009 支付宝面试总结(2009.10.12)10号晚上的宣讲+笔试,笔试笔得一般,程序题做错了,没想到用递归,还有记得做错的是一道网络题,问会话层(Session)是OSI里的第几层,我忘了展示层(Presentation),于是选了第六层光荣的错了。 11号一早通知9点面试,我起床洗漱吃早饭,然后又接到一个电话说是12号早上9点,于是只好上床继续睡觉。 面试前打印了几份简历,进去咖啡馆之后填了表格就开始面了。中间省略过程数百字。。。直接开始总结几个答的不好的问题,因为一面就挂了。 Spring的事务有几种方式? 题目到现在也不是很明白,我觉得大概的解答应该是声明式事务处理的几种方式(1.0时代的parentTemplate、2.0时代的AOP代理和@Transational),另外加上编程式事务处理,直接上TransactionTemplate和PlatformTransactionManager。 Spring Bean加载有几种方式? 我回答了启动时加载,现在看来有点答非所问。加载bean默认为即时加载,另外也可以设置延迟加载。加载可以为单例、每次一个实例、request、session、global-session。 Spring Bean有几个设置属性? 我只想起来scope,应该想起来auto-wire, init-method, destroy-method一时都忘了。另外还有lazy-init, factory-bean, factory-method。 Collections.sort()对参数的要求? 这个是最不应该答错的题目。我只想起来sort的集合必须实现List接口,却忘了最重要的sort的对象必须实现Comparable接口。 描述一个LRU的HashMap。 这题一开始楞没听明白,老想着HashMap不是链式连接冲突的entry的么,怎么会size不够。磨叽了半天,搞了一个堆出来计数,面试官也不满意。 后来想想其实用个链表把Entry链接起来就可以了,正好在网上搜到了使用LinkedHashMap实现LRU Cache的做法,在这里描述一下内部实现:
项目里使用的设计模式。 我拿了资源安排里,封装两种安排算法到两个实现同一个接口的类的例子,说这是策略模式,面试官有些不认同。后来回头想想,项目里还有其他的模式:
大概就想起来这些问题。一开始的自我介绍忘记介绍做过的项目了,这可能是悲剧的来源吧。 9/30/2009 使用正则表达式过滤不包含某子字符串的单词Original URL: http://www.onlymarshall.com/2009/09/30/filter-substring-in-a-word-using-regular-expression/ 昨天在学院版上看到有人发帖问,标题里的内容就是帖子里问题的核心。举个例子来说,就是给一堆单词,匹配所有不包含某字符串的单词。比如要求剔除aa,那么对于单词aab, abc, abca, abaac,就匹配abc, abca。 问题似乎很简单,但我从来没用过逆向匹配。有限状态自动机很容易就可以画出来,但怎么转化成正则表达式倒是忘得一干二净。最后google了半天,发现一个博客给出了正确答案(目前能想到的都验证通过):\b((?!aa)\w)+\b 这个表达式挺不好理解的。(?! pattern)是负向预查(negative look ahead),放在\w前面显然不是和\w进行组合。需要把表达式拆开来看,比如\b(?!aa)\w(?!aa)\w(?!aa)\w\b,这么来看就比较好理解了。首先不可以以aa开头,然后每个单个字符后都不能跟aa,直到结尾。这么就基本把aa给堵死了。 另外,如果支持negative look behind的话(Javascript不支持),应该也可以写作\b(\w(?<!aa))+\b。 9/23/2009 远程opensusue无法使用home, end用了opensusue当服务器两个月,碰到一个小麻烦的问题就是使用putty SSH登录上后,BASH里无法使用HOME和END进行行首和行尾的定位。原本以为是putty的问题(以前用的都是Secure Shell),今天正好想到这个问题google了一把,发现是opensusue的问题,参见这里。 我用的是opensusue10,配置文件都是/etc/inputrc,但行数有些不同,我的是90-91行,把下面的代码注掉就OK了:
9/16/2009 Tomcat启动地址解析错误贴log: SEVERE: Protocol handler pause failed java.net.UnknownHostException: NEOSTA: NEOSTA at java.net.InetAddress.getLocalHost(InetAddress.java:1474) at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:484) at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:283) at org.apache.jk.server.JkMain.pause(JkMain.java:681) at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153) at org.apache.catalina.connector.Connector.pause(Connector.java:1073) at org.apache.catalina.core.StandardService.stop(StandardService.java:563) at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744) at org.apache.catalina.startup.Catalina.stop(Catalina.java:628) at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalina.java:671) 关键词:UnknownHostException, JK 原因在google的第一个,虽然上面说的是AIX,但也适用于普通Linux:RHEL5原装的GCJ太山寨了,记得在启动tomcat前要指定JAVA_HOME。 |
|||
|
|