渣硕面筋release v1.0(Google已跪)

作者: 6b440373157d | 来源:发表于2018-02-11 06:46 被阅读216次

    注:凡是题目需要保密的,都没有写在这里,如有同样要求请通知我修改

    校招结束,我选头条

    正值十一长假,赶在了小论文截稿前一天投出去了。正好国内的互联网公司校招基本上也在十一之前结束了,我也来发一波面筋。

    计算机专业,北交本科,北航渣硕,沾大神的光混过个ACM金奖。

    全部投的是Java研发岗

    目录

    本来做了个可以跳转的目录,可是牛客的markdown不支持,sad

    offer

    有道

    美团

    头条

    猿题库

    悲剧

    阿里巴巴

    京东

    滴滴

    Hulu

    WAP(面试题目保密)

    Microsoft

    Thoughtworks

    Google(面试题目保密)

    Airbnb(没通知面试,感觉应该是gg了)

    感想

    网易有道

    有道是投的第一家公司。对比了网易的业务后,感觉有道不错,通过同学内推。

    笔试

    有道的笔试分为3个部分,笔试难度:★★★

    第一部分是性格测试和智力测试。会问一些类似于公务员考试的题目,略。

    第二部分是基础知识选择题。涵盖的内容很广,基本上本科计算机必修课程都会涉及到,包括二叉树遍历,数据库索引,操作系统调度算法之类的,感觉也没什么好的办法复习。

    第三部分是编程题。好像不同岗位题目不一样。一共3道题目,具体题目记不清了,当天正是works applications写文档的最后一天(后面会讲这一段痛苦的回忆),状态很差,做出1.5个(按照ACM规则算的话,只能过一个签到题)。第一题很简单,属于送分题。第二题其实也很简单,就是一串数字往一个Dqueue里面放,第一次放在头部,第二次放在尾部,交替进行,最后输出这个Dqueue。我居然超出了内存限制,至今不知道为啥。第三题只记得不会,忘了是什么题。

    笔试的神奇之处在于,我只做了1.5个题,居然通过了笔试。有的同学3题全做出来,结果没拿到面试资格,只能用玄学解释。

    面试

    面试一共3轮,在西二旗的网易大楼里,面试难度:★★★

    第一轮面试

    首先是自我介绍,然后根据简历上的项目问了一些Spring相关的东西。还有Java的volatile之类的问题。然后就是常规写代码。大约40分钟。

    问了2个题目,第一个是给一个只包含RGB三个字符的字符串排序。第二个是求编辑距离,之前没有做过这个题目,想了一会觉得和最长公共子序列很像,DP搞定,有兴趣的同学可以去查一下,应该有原题。

    第二轮面试

    是个小姐姐,居然是北交的校友。也是自我介绍,问项目,问Hashmap,Hashtable之类的常规JDK数据结构。然后就是常规写代码。大约40分钟。

    问了2个题目,第一个是二分查找变种,找符合要求的最左边的一个元素,答案我就不说了,稍微修改一下就行了。第二题是要求把字符串中所有的0移动到最前面,其他的顺序不变。

    第三轮面试不是HR面

    自我介绍,简单地聊了聊实习经历,个人做的项目,就结束了,我也不记得问啥了,好像是啥也没问。一共15分钟。

    体验

    面试舒适度:★★★

    先说面试体验不够好的地方:

    等候区座椅太少了,全程我基本属于蹲着等的状态,蓝瘦。

    面试节奏太慢了。前两轮面试用了一下午,两轮之间间隔了1小时。第三轮面试和前两轮面试之间间隔了十几天,然后又过了二十天才通知结果。

    再说说优点:

    面试的房间还挺安静,没有乱七八糟的人。

    提供矿泉水。

    中秋节还给寄月饼了,点赞。

    美团点评

    美团是微信群里一个前辈内推的,其实并不认识,记得好像没有笔试,直接去面试了。(做了太多笔试,实在记不清做没做了)

    面试

    美团面试是3轮技术+1轮HR。面试难度:★★★

    第一轮面试

    是一个广东强调的小哥,说实话有一点点听不懂他在说什么。。。问了很多基础的东西,比如各种http状态码的含义,断点续传的下载实现,Spring的Session相关,hashmap等,都很常规。

    最后写了一个题目,自己实现一个优先队列。

    第二轮面试

    依然是常规问题。后面聊了很多项目中遇到的问题,比如你如何解决遇到的问题,遇到的最难的问题等,我详细聊了一下自己做第三方登录过程中遇到的问题,也就是Spring Security的问题。

    写了两个题目。

    第一个是全排列,但是要输出当前字符串的字典序下一个排序。做完后我还提到可以用线段树优化一下,把一个O(n)的操作优化成O(logn)。

    第二题他描述要实现Android上面图标移动的效果,可以移动若干个图标插入到前面某个图标之前,该怎么设计。我们讨论了很久我没有明白他的意思。最后面试结束面试官送我出去的时候我才搞明白,就是一个数组某相邻两段交换位置,各自翻转,然后整体翻转就可以了。

    第三轮面试

    没有手动写代码的问题了,看起来是个leader,主要聊自己的项目。还问了一些最近看的书啊,最近刷的比较难的题目有哪些之类的。

    前三轮面试大概都是40分钟。

    HR面

    问了问老家是哪的,对自己面试表现感怎么样,都面了哪些公司,期望薪资等,就结束了。

    体验

    面试舒适度:★★

    缺点

    不光等候区座椅少人多,而且也没有水,中午也没有吃的

    面试环境很乱,旁边有人在讨论工作,没有单独的会议室来面试

    优点:

    面试节奏快,一天就全搞定了

    今日头条

    准备的比较晚。有一天晚上同学们都收到了头条内推的笔试通知,我才想起来投了校招,所以没有和他们一起做笔试,但是看了内推的笔试题目,挺难的。

    笔试

    前面有没有选择题我忘了,只记得3道编程题,难度★★★★

    第一题

    比较简单,具体记不清了,就是那种没什么算法,按照题意写就能得到结果的题目。

    第二题

    有些难度。给一个数组,然后会有一些查询,比如查询3,6,4,表示数组从第3个元素到第6个元素中,4出现了多少次。题目保证查询的区间直接没有包含关系。直接查询时O(n^2),需要优化一下。因为题目说了区间没有包含关系,所以我们把查询排个序,然后用离线的算法,依次把数组的元素加入到一个map中,记录它出现了几次,当达到一个查询的右边界时,输出map和查询数字对应的值。然后从查询的左边界扫到下一个查询的左边界,从map里面取出这些元素。这样做扫一遍就得到答案了。复杂度是排序的O(nlogn)。

    第三题

    不会做,我记得我用了个深度游戏搜索,跑出20%的数据后超时了。

    其他题目

    还记得我错过那场的一个题目。给一个数组,区间[l,r]的最小值乘以区间之和,问最大值是多少。首先求任意区间的和很容易,求前r项和减去前l项和,就是l到r的和。解题的思路是以任意一个数为最小值,向两边扩展,一直扩展到第一个比它小的值,那么答案就是这个区间和乘以这个值。这样做是O(n^2),还是不行,怎么找到一个值左边第一个比它小的值呢?需要预处理一下,用一个上升的栈,扫一遍。右边同理。最后的复杂度是O(n)。

    面试

    一共3轮面试,面试题目范围很广,面试难度★★★★

    第一轮

    Docker的用处是什么,为什么需要它。

    数据库分表如何做,有什么原则(数据库不熟,不会,只提到按hash分,按日期分,好像面试官不是很满意)

    写一个sql语句,查询一张表中,发表批评最多的人

    写单例模式(两种方式)

    一个二叉树,从左边看,能看到的第一个节点,输出。也就是每一层的最左边的元素

    第二轮

    进程线程的区别(这个问得比较细,不只是简单的内存共享之类的,还包括操作系统的进程描述,写时复制,操作系统启动等问题,推荐《深入理解计算机系统》)

    epoll,IO多路复用,聊到nginx的原理,和Apache的区别

    常见的网络攻击方法,比如跨站脚本,sql注入之类的

    Https,非对称加密等

    一个秒杀系统的架构,包括CDN,反向代理,session共享,由于分布式数据库我不熟,所以数据一致性那部分没有解决。

    Hashmap的实现原理,优化方法(其实JDK 8已经用二叉树替换链表了,思路差不多就是这个)

    脑筋急转弯,1000桶牛奶,1桶有毒,用10只小白鼠试出来。其实就是二进制,网上有答案,提示:2^10 = 1024.

    第三轮

    做一个游戏,一套扑克牌,从上面拿一张放在桌上,再拿一张放在扑克牌最后,循环这个过程,最后得到一个序列。给定结果,要求把这个序列还原。我的做法是正向模拟这个过程,最后得到映射关系,反着填回去就好了。

    问了个C语言的问题,strcpy有什么问题,怎么解决。我不太熟悉C,感觉可能存在src和dest有交集的时候会有覆盖问题,然后判断了一下是不是有交叉,如果是的话,src和dest谁在前谁在后,交叉的长度是多少,反着就是注意一下顺序问题(不熟C,不知道是不是这个问题)

    点击一个网站后发生的所有事情,HTTP,DNS,CDN,TCP之类的东西全啰嗦一遍

    HR

    常规聊天,薪资啊,规划啊,兴趣啊之类的,没什么特别

    体验

    面试舒适度★★★★

    缺点:

    在食堂面试,人很多

    优点:

    在食堂面试,有座位,有饮料,有午饭

    面试时间可以自己选择,很灵活,这一点很棒。很多公司面试时间是定死的,有时候会和自己的事情冲突。

    面试效率超级高,现场出结果。此前我一度以为,有道会是我的第一个offer,没想到等了一个月后,用一个上午就通过了头条,午饭吃得惊心动魄。

    猿题库

    猿题库没有笔试,直接面试。

    这家公司比较低调,开始都没听说过,后来去知乎看到说猿题库出手很阔绰,并且个人感觉教育行业挺有前途,就去投了。

    面试

    一共两轮,没有HR面,感觉面试挺简单的,面试难度★★

    第一轮

    常规的自我介绍,聊了聊项目

    问了一些Spring,自己的项目

    写了一个括号匹配的题

    给一个m*n的格子,总左上角走到右下角有多少种走法。简单的dp题目。此外,如果m==n的时候,是卡特兰数,但是当时不记得卡特兰数的公式了。

    第二轮

    聊项目,项目中遇到的问题,如何改进等

    写一个循环队列

    面试官简单介绍了公司的业务

    体验

    面试舒适度 ★★★★★

    优点

    有好多零食,旺仔牛奶,有座椅

    不用前台前到,贴标签,直接到会议室等待,面试环境很好

    HR小姐姐很漂亮

    缺点

    阿里巴巴

    笔试难度 ★★★★★★★★★★

    内推的时候,通知我有杭州的岗位。由于个人原因,我只打算在北京工作,所以没有面试。

    校招的时候,笔试真的太难了。给定10个物品的长宽高,和箱子的规格,问最少需要多少箱子能装进去。至今不知道谁做出来这个题目。

    京东

    忘记了是不是有笔试

    面试

    面试难度 ★

    一共三轮面试

    第一轮

    大约15分钟,自我介绍,简单聊Spring,就结束了

    第二轮

    40分钟,聊了Java异常处理,Kotlin的一些感想,好像也没聊啥

    HR

    对京东的看法,个人的倾向,对面试的评价,大约十几分钟

    体验

    面试舒适度 ★

    感觉面试全程谈笑风生,然后就悲剧了,不知道问题在哪,玄学。

    缺点

    三场面试分三天,效率低

    每一场面试都没有按时进行,最短等了十几分钟,最长的等了半个多小时

    全程没有写程序,总感觉这套路不太对

    优点

    貌似不同学校的面试地点不一样,我的面试地点就在北航附近,这一点还挺人性化

    滴滴

    内推笔试,感觉挺简单,但是挂了

    校招笔试,感觉挺简单,但是挂了

    Hulu

    免笔试,电话一面跪

    设计一个短网址,在线写一个n进制转换函数

    当时那段代码确实写得很烂,挂掉没什么遗憾

    WAP

    这家公司是我面过的比较另类的公司,我需要简单介绍一下。

    这是一家ERP公司,总部在日本,中国的办公地点是在上海。

    其他公司的工资一般都是保密的,这家公司待遇是公开的,固定600w日元,大约34-36w人民币。可以说是应届生里面比较高的了。

    不同于其他公司的面试,这家的面试是为期一周的短期实习。

    笔试

    笔试2道题目,笔试难度★★★★

    这个题首先能想到是个DP问题,dp[i][2],i表示前i个人,2表示当前是否已经有越狱情况。转移方程也很简单,dp[i-1][0]表示前面i-1个人都没越狱,那么第i个人越狱只能是第i个人和前一个人属于同一个省,只有这一种情况。dp[i][1]表示前面i-1个人已经越狱了,所以第i个人可以有m中情况,随意哪个省都可以。同理,dp[i][0]也是类似的。

    得到转移方程后,需要再考虑一个问题,看到数据范围是10^9,转移n次显然会超时。即使不考虑时间,光看内存也不够(其实内存可以使用滚动数组)。这是观察可以发现每次转移的方程是一样的。我们把状态i看作一个矩阵[dp[i][0],dp[i][1]],转移方程就是乘以[[m-1,1],[0,m]]。每次都乘以一样的矩阵,就可以使用快速幂计算,复杂度log(n),结合10^9的数据,完美解决。

    作为一个笔试题目,这题还是挺难的。

    附代码

    第二题

    题意忘了,是一个裸的线段树,单点更新,区间查询。

    这个题目出得,感觉没什么意义。纯考现场想,肯定想不出来,而做过竞赛训练的人有觉得太基础了。

    面试

    在线面试,还是做题。

    第一题

    zigzag原题,去leetcode找

    第二题

    求最长回文子序列,直接反过来求最长公共子序列就好了

    面试要求保密不能发

    体验

    面试舒适度★★

    实验室的学弟拿到了offer,请问你们知道被学弟吊打是怎样一种体验吗?

    Google

    笔试

    笔试难度:★★★★★

    Google的流程和其他公司不一样。别的公司是先投简历,再做笔试。Google是先去做在线笔试,通过笔试的再投简历。

    笔试地址在这里,每年校招前有5场比赛,参加任意一场即可,至于通过不通过,没有具体的标准,只能等Google通知。

    一共有3个题目,3个小时的时间。每个题目包括small和large两组测试数据,每个题目有自己的分数。比赛按照分数的用时排名。我做的是E轮排153名。

    第一题

    在这里。大概意思是你有3中操作可以做:

    在键盘上敲一个字符

    复制一段现有字符串

    粘贴剪切板上的字符到最后

    请问,最少需要多少次操作才能生成一给定的字符串,字符串长度是100。这是个DP问题,最朴素的想法是dp[i][j][k]表示已经得到前i个字符,剪贴板上的内容是第j到第k个字符需要的最少操作数,然后状态转移也很简单,就是对应前面3种操作。

    复杂度n^3,其实已经可以通过了。不过考虑到第j到第k对应的子串可能有重复,比如我们要得到aaaaaaaaaaa,那么dp[10][1][2],dp[10][2][3],dp[10][4][5]...dp[10][9][10]都是一样的。我把三维dp改为了二维,dp[i][s],表示处理到第i位,剪贴板上的内容是字符串s,然后用一个hashmap把s映射到一个数字上。具体代码可以在这里看到所有人的代码。

    第二题和第三题我不会,只能用暴力把两个small的数据通过了,large的不知道怎么做,有兴趣的同学可以去看官方题解。

    此外,我在做这个比赛之前去看了一些前一轮的题目,D轮的第一题也是一个DP问题。大概意思是你需要从城市1出发,依次路过城市,2,3,4...N,每个城市。每个城市i到城市i+1都有公交车,题目会给出每个城市公交车的发车时间,发车间隔,路程需要的时间。每个城市你可以选择游玩或者不游玩,如果游玩的话需要消耗给定的时间。问题是求出能够在给定时间内到达城市N情况下,能够游玩的最多城市数量。

    很典型的DP问题,dp[i][j]表示到达第i个城市,已经游玩了j个城市需要的总时间。题目比较麻烦的地方是状态转移的时候,需要计算公交的发车时间,频率和路程,整体思路没什么难的。

    面试内容要求保密不能发

    体验

    舒适度★★★★★

    Google的题目还是挺难的,我觉得就笔试来讲,这个难度正好适合我。时间刚好把我会做的题目做出来,不会做的题目再给我一天也做不出来。今后想要尝试Google笔试的同学,需要去多刷点DP问题。

    其实我并没有期待能拿到Google的offer,最初的想法是能够体验一下Google的面试就好,现在看来已经实现了。如果能有幸体验一下Google的食堂就更好了。

    此外做这个笔试可能需要科学上网技巧。

    update:

    今天去面了大Google。由于题目不能发,我只能说,也没有想象中那么难,面试官很nice。由于本来就没奢望能通过面试,所以心态很放松,早餐喝了杯咖啡就驾驶摩拜单车去了。这家404公司里面和其他公司也没什么不同,一点也不神秘。中午面试,但是也没吃到食堂,很遗憾,看到了一墙的零食,也没什么胃口,只喝了瓶水。

    现在我有一种面试能过的错觉(手动笑哭)

    优点:

    面试时间可以协调

    笔试有很多场可以选择

    情怀加1分

    缺点:

    Google让你去面试你还敢提缺点?

    被告知已经GG了,感觉已经发挥了99%的能量,会的都做出来了,不会的确实是实力不够,没有遗憾。

    Microsoft

    笔试

    4道题,难度★

    一个一维的世界,给出父亲的坐标,然后父亲以n个格子为间隔,朝右边走了k步。给定儿子的坐标,儿子在父亲左边,儿子第一步一定要落到父亲的脚印上,问儿子以多大的步长走,能得到和父亲最多重合的脚印。

    一个n*m的图,上面0代表空地,1代表树。相连的树组成一组。问,要留下k组树,最少要砍掉多少棵。

    一个数组,查询最大值,第二大值,最小值,第二小值,还有个什么更新不记得了。用两个堆解决。

    忘了

    面试

    难度★★

    第一轮 啥也没说,直接出题写代码。字符串匹配,*表示任意个任意字符,?表示任意1个字符。二维动态规划。 第二题把一个ip地址转成32位的int,简单位运算。

    第二轮 面试官拿着我的简历感觉什么内容都没有,也不知道该问啥,就让写了快排,之后写链表的快排。

    感觉题目都不难,但是个人确实没什么实习经验,也没有项目经验,然后就GG了。

    体验

    面试舒适度★★★★

    优点:

    有午餐,有饮料,很舒服

    认识了个小姐姐

    老东家,加一分情怀分

    缺点:

    悲剧了,减一分情怀分

    Airbnb

    笔试两道题,难度★★

    字符串a和b,求a的一个最短的子串,这个子串要包含b中的左右字符。

    最基本的迪杰斯特拉算法

    Thoughtworks

    网上有人说Thoughtworks的面试难度直指Google,我体验了一下的结论是,别听别人瞎哔哔,没那么夸张。

    笔试

    内推没有笔试,有一个小作业。设计一个体育馆租用场地的系统。输入是一些固定格式的命令,比某某某人预定某个时间段的某个场地,或者打印当前的账单等。感觉主要是考察代码风格和基本的系统设计吧。

    面试

    HR面

    第一轮是HR面。首先要求做一个英文的自我介绍。然后问了一些价值观之类的问题。你遇到的最困难的事情是什么啊,你在平时是如何规划自己的目标之类。

    提示,和HR聊天千万别瞎BB,我觉得我应该是挂了。

    技术面

    面试现场修改自己的程序,增加一个折扣功能。因为我的系统每个订单是一个class,在getPrice里面判断一下这个订单能不能打折,计算价格就好了。我觉得主要是考察代码的可扩展性吧。

    其他的还问了一些Spring中bean的初始化,如何注入之类的问题。

    体验

    面试舒适度★★★★

    优点

    终面有事错过了,HR后面又补充安排了一次

    人都很nice,有谁有WiFi,面试最后还送了个水杯。可能是杯具的意思吧。

    感想

    找工作这事情,随缘。

    有的公司谈笑风生,然后悲剧

    有的公司瑟瑟发抖,然后录用

    整体来讲,公司考察的都差不多

    基础数据结构(map,stack...)

    动态规划和常见算法

    Spring相关+设计模式

    操作系统知识+数据库(关系,非关系)

    个人努力固然重要,但也要考虑到历史的进程,和一些运气与缘分。

    作者:lixiaocong.com

    本文来源于牛客网

    ——————————

    牛客网(www.nowcoder.com)

    - 互联网名企笔试真题

    - 校招求职笔经&面经

    - 程序员求职实习信息

    - 程序员学习交流社区

    相关文章

      网友评论

        本文标题:渣硕面筋release v1.0(Google已跪)

        本文链接:https://www.haomeiwen.com/subject/pokctftx.html