两道大众点评网技术部的笔试题
来源:互联网 发布:数据挖掘是做什么的 编辑:程序博客网 时间:2024/05/01 22:40
技术部全职-研发工程师问题测试(答题时间45分钟)
共两道题目,为必答题
问题:
如何快速比较这两个字符串是否相等?两个字符串相等的条件如下,字符串中的每个字母出现的次数都相等。例如:abbcd和acdbb是相等的,因为a都出现1次,b都出现2次,c都出现3次,d都出现4次。请先给出解题的思路,然后用你熟悉的语言进行具体的代码实现。(可在答案中注明解题思路)
回答:
// 比较两个字符串字符计数相等 (要越快越好)bool compare(const char* str1, const char* str2){int len1 = strlen(str1);int len2 = strlen(str2);if( len1 != len2 )return false;int len = len1;int counts[256];memset(counts, 0, sizeof(counts));for(int i=0; i<len; i++){counts[str1[i]]++;counts[str2[i]]--;}for(int i=0; i<256; i++){if(counts[i] != 0){return false;}}return true;}
问题:
点评有很多用户,每个用户发表点评或者添加商户都会有一定的积分,积分可能会在使用过程中随时更新。如何在这个千万级别的用户中,找出积分最高的10个用户。(开放性题目)
回答:
通过在服务器内存中存放10个结构体{user_id, credits}
这样用户在所有消耗积分和获得积分的地方添加一个filter,在filter当中完成如下操作:
遍历10个结构体,对比自己的积分是否超过10个结构体当中的积分,如果超过,则取代之,并滚动淘汰末尾
可能请求过多导致内存频繁读取,解决方案:
使用N台镜像服务器,如每个1小时从中心服务器同步一次数据,并计算前10名的最后一名 top[9].credits * 80%作为下界阈值,如果用户的积分超过这个值,则进入一个队列当中排队,待1小时同步数据后进行对比和更正最新数据。这样就可以解决并发量过大造成的冲突影响了,中心服务器的内存操作需要加锁,确保原子性。
以上,如有更好的答案,请指正,欢迎探讨,呵呵^_^*
- 两道大众点评网技术部的笔试题
- 大众点评的技术部第一个实习生
- 大众点评笔试题
- 2013年大众点评网的一道程序笔试题
- 2012大众点评网笔试题
- 大众点评笔试题最后两题题解
- 大众点评的技术部的第一个实习生
- 大众点评2013技术部实习一道算法题
- 大众点评网笔试总结
- 2013大众点评笔试题
- 2016大众点评笔试题
- 2012-9-29 大众点评网笔试题
- 大众点评笔试题编程题
- 大众点评 在线笔试题 2014
- 大众点评笔试题:十六进制序列
- 大众点评2015笔试题(答案)
- 大众点评笔试总结
- 大众点评—笔试
- 与文克玲教授商榷:基础研究、应用研究和技术开发
- 谁的青春不迷茫?我该说点什么呢
- poj 1273 网络流
- java中类的覆盖和隐藏的区别
- Android开发:canvas.drawTextOnPath()无效----Android4.03的又一个bug!!!!(关于Canvas绘制的方方面面) .
- 两道大众点评网技术部的笔试题
- linux系统错误码集合
- 2013微软实习笔试题错题总结
- [Android] 异常崩溃自重启
- JAVA的Random类
- Java数据结构(队列篇)
- ZOJ 3593 One Person Game
- Eclipse用法和技巧三:自动生成Main方法2
- hdu 1114 (完全背包)