楼主年后入职一家中型创业公司,上周某一天突然找我们项目组的人一个个谈话,说由于资金问题这个项目被砍掉了,团队当天解散。。。
于是才有了楼主今天下午到一家做 app 的创业公司面试的故事,上来就是一道算法题,楼主不出意料的不会做(不过后来我问过算法比较牛逼的哥们,说这题不难)。嗯,就这样,技术总监根本懒得见我,人事打发了我几句就走了。
肯定有人会说,你个搞开发的连个简单的算法题都不会,不见你也是应该的。完全同意,只是说下楼主的背景:
楼主热爱编程,也认同算法的重要性,只是觉得心里不爽,不会算法就意味着:我只要还在干这一行一天,就必须面面对今天这种人,随时可能拿算法甩我一脸,我心里好气,但又无可奈何。
请问算法如何学起,楼主文科生,数学不好,阶乘的概念都是最近才知道的,找了几本算法书,涉及大量数学公式,许多符号我都看不懂,有种无从下手的感觉,看哪本书好呢?需要复习下高中数学吗?我想过先看 可汗学院的视频,但是又不知道看哪些最有用,唉
|  |      101Growingio      2016-06-08 14:25:54 +08:00 默默推荐一下左老师的《程序员代码面试指南》>w< | 
|      102inmyfree      2016-06-08 14:28:44 +08:00 @murmur  我还真的认为 VR 能炒出点什么来,如更新中国传统课本教育为虚拟现实,游戏由平面体验改为沉浸式体验,和几年前功能机转为智能机的跨越都差不多 | 
|  |      104allce231      2016-06-08 14:47:24 +08:00 我想知道你们解散公司有钱补吗? | 
|      105IAmAnonymous      2016-06-08 14:55:48 +08:00 其实看楼主面试的职位的定位。 初级:算法不用面。 中级:基本查找排序。 高级:我不行。。。 | 
|  |      106UnitTest      2016-06-08 15:08:37 +08:00 如果该公司没有保密协议 , 楼主最好把题目说出来 , 大家来看看是否是属于刁难面试者 , 还是测试基础知识的. 中级和初级职位要求较低 , 面试人数较多 , 出个简单的算法题 , 对于筛选还是有用的 . 高级的就另当别论. | 
|  |      107qianleilei      2016-06-08 15:11:31 +08:00 不就是没 offer 么,生无可恋?有这么夸张? | 
|      108KgM4gLtF0shViDH3      2016-06-08 15:15:38 +08:00 @menc 确定这不是后台做的嘛。。。 | 
|  |      109menc      2016-06-08 15:31:42 +08:00 @bestkayle  这个就厉害了,这个简单的功能也要推锅。 instant search 变得太快,是不适合联网的。 你一个请求 300ms ,这 300ms 用户的输入都不一定变了多少次了 所以都是缓存过来,在自己这里做 instant search | 
|  |      110Wangxf      2016-06-08 15:42:19 +08:00 基本的几个频率较高的比较简单的要信手拈来,比如排序算法,去重算法,其他的多刷刷 leetcode 就好了,算法导论可以看,但是我认为你还没到那一步 | 
|  |      111Wangxf      2016-06-08 15:48:20 +08:00 其实你可以看看这个网站 http://www.jisuanke.com/course | 
|  |      112Cloudee      2016-06-08 16:19:47 +08:00 via iPhone @menc 哈哈这个我印象深刻,我在我之前公司 im 产品的 webclient 上实现过,搜索通讯录的 | 
|  |      113SmiteChow      2016-06-08 17:35:54 +08:00 不是这样的,算法讲的是思维。 | 
|  |      115qwlhappy      2016-06-08 18:09:42 +08:00 我觉得算法训练很多时候都锻炼了把自己的想法转换为代码的能力。其实很多算法看一遍就懂了,但是写还是有困难。 | 
|      116youxiachai      2016-06-08 18:45:42 +08:00 面试的算法.. 看 july 那本面试算法..基本能够横扫了吧.. | 
|  |      117crabRunning      2016-06-08 18:56:53 +08:00 我想说我是海洋工程的,算法一点都不懂咧,好忧桑。 | 
|      118KgM4gLtF0shViDH3      2016-06-08 19:03:49 +08:00 via iPhone @menc 所以百度的匹配是前台的? | 
|  |      119wjfz      2016-06-08 19:13:17 +08:00 LZ 和我是一家公司嘛? | 
|  |      121yxzblue      2016-06-08 21:44:01 +08:00 不就是技术总监没见你么,你和他有一腿?生无可恋都来了 | 
|      122raincious      2016-06-08 21:53:05 +08:00 @Cloudee  感觉不是一回事,通讯录这种东西始终是有限的集合,数据内容是可以控制的,比如至多 500 人吧,这样哪怕一个个 Levenshtein 算好速度也不赖。更何况你可以把数据下回来用多个 Trie 树来索引,之后每个树就是 O(n)搜索。 但是 Instant Search 是不一样的,我猜测应该是用户输入前几个字符的时候,后端先返回一个大批量的数据(比如 50 个),然后前端先显示几个(比如 5 个),之后用户再进行输入的时候前端根据用户的输入过滤和排序(比如用 Levenshtein 算),当前端的可用数据不足的时候(比如少于 15 个),前端再提交数据请求给后端下载另一批数据。 后端那边需要再用户输入的时候就转换好,先将中文转换成拼音,然后拆分了存进数据库,比如 北京 => bei,jing 储存的数据 Key 是:[北, 京, 北京, bj, b, be, bei, beij, beiji, beijing, j, ji, jin, jing] 值是:[北京, beijing] 用户搜索 `bejng` 的时候,数据库(比如 Redis )从 `b` 开始匹配,如果发现匹配到 `be` 之后就没有结果了(可能得有个权重阈值,过滤到一些不常用的结果),然后根据 `be`,得到[bei, beij, beiji, beijing](这个结果应该是用关键字权重来排序的,热门关键词优先),之后用 Levenshtein 得到最相似的关键字`beijing`,最后得到结果:[北京, beijing]。 当然,如果用户搜索 `bjing`,程序应该从尾部开始搜索,比如[g, ng, ing, jing, bjing],这样也可以通过`bjing`这个关键词得到`beijing`。 当然,我上面的猜测只能在用户输入了足够多正确样本的情况下才可用,面对`bjng`这样的关键词应该还是无效的。 | 
|  |      123Stupitch      2016-06-08 22:16:36 +08:00 @murmur 互联网有阶段性,移动互联网这个阶段开始往尾巴走了,除了大公司外,很难成功了(除了一些小型的个人开发者,不过也只能红极一时而已) | 
|  |      124zhuangzhuang1988      2016-06-09 00:24:05 +08:00 @woshinidie 认同你的观点, 蛤.. | 
|  |      125laravel      2016-06-09 09:05:08 +08:00 我是材料化学专业,同样存在这个困扰,都推荐《大话数据结构》、《大话设计模式》,数学的相关知识可以查 wikipedia | 
|      126x9498      2016-06-09 11:15:04 +08:00 真的差好多,你以为科班四年是白过的? | 
|      127Jerry5850022      2016-06-09 13:01:16 +08:00 文科生自然在技术上有些劣势,但是你会做口译这个就是优势啊。 可以做对外的一些项目协作,没必要去做开发啊。 | 
|  |      1293A93EifxUzhBjhu6      2016-06-10 09:30:17 +08:00 via Android 推荐一本书,计算机科学的基础。直接图灵下载,免费的书。自己愿意留打印出来。此书中文版无纸质书 | 
|      130H4cK      2016-06-10 12:35:41 +08:00 够文艺的话建议转下产品经理。 |