锁定老帖子 主题:北京亚马逊 java职位笔试题 分析
精华帖 (1) :: 良好帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-07
最后修改:2010-07-09
上午去亚马逊北京的公司去面试了,本来以为英文面试有点问题,结果跟老外交流一点问题都没有。
综合了各位的意见,在jdk1.5下,实现了该算法,大家帮看看是否符合要求:
public class LogRecord { //日记记录 private String trip1 = ""; private String trip2 = ""; private String trip3 = ""; public String getTrip1() { public void setTrip1(String trip1) { public String getTrip2() { public void setTrip2(String trip2) { public String getTrip3() { public void setTrip3(String trip3) { @Override final LogRecord other = (LogRecord) obj; if (trip1.equals(other.trip1) && trip2.equals(other.trip2) @Override public LogRecord(String trip1, String trip2, String trip3) { @Override } }
主体类:
import java.util.ArrayList; public class Amason { private static HashMap<String, ArrayList> map = new HashMap<String, ArrayList>(); public static void Inital() { //初始化数据 public static void putPages(String userid, String page) {//把原始数据放到hashmap中 } public static void putRecord(LogRecord record) { //对每个用户的路径进行分析 public static void putUserTrack() { for (String usrid : map.keySet()) { int size = list.size(); public static void getCommonTrack() { //简单打印出结果 public static void main(String[] args) {
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-07
最后修改:2010-07-07
第一个HashMap<userID,page_type_id>,因为日志是顺序添加的,比如:
userID page_type_id 123 home 1 456 production 2 123 home 3 那么第一个HashMap保存['123','home'],同理,第三行标示用户‘123‘在相同页面刷新,那么可以跳过(等同于HashMap保存了这个值的话),如果没有遇到相同的话, 比如: userID page_type_id 123 home 4 123 production 5 这样路径就变成了home-production,Map=['123','home,production'],如果在第N行,用户123的路径,没有在home-production的话,比如: userID page_type_id 123 detail N 那么,这个时候第一个HashMap=['123','home,production,detail'],第二HashMap保存[‘home,production,detail‘,1](count=1). 接下来,又遇到了用户“123”的话,把第一个HashMap['123','home,production,detail']的值替换掉,重复前面的做法,当路径符合三节的时候,把用户123在一个HashMap上面的值取出来,跟第二个HashMap[‘home,production,detail‘,1]的键(‘home,production,detail‘)比较,如果有的话,+1,如果没有的话,添加新的key给第二个HashMap。 不知道楼主明白了吗? |
|
返回顶楼 | |
发表时间:2010-07-07
最后修改:2010-07-07
mercyblitz 写道
第一个HashMap<userID,page_type_id>,因为日志是顺序添加的,比如:
userID page_type_id 123 home 1 456 production 2 123 home 3 那么第一个HashMap保存['123','home'],同理,第三行标示用户‘123‘在相同页面刷新,那么可以跳过(等同于HashMap保存了这个值的话),如果没有遇到相同的话, 比如: userID page_type_id 123 home 4 123 production 5 这样路径就变成了home-production,Map=['123','home,production'],如果在第N行,用户123的路径,没有在home-production的话,比如: userID page_type_id 123 detail N 那么,这个时候第一个HashMap=['123','home,production,detail'],第二HashMap保存[‘home,production,detail‘,1](count=1). 接下来,又遇到了用户“123”的话,把第一个HashMap['123','home,production,detail']的值替换掉,重复前面的做法,当路径符合三节的时候,把用户123在一个HashMap上面的值取出来,跟第二个HashMap[‘home,production,detail‘,1]的键(‘home,production,detail‘)比较,如果有的话,+1,如果没有的话,添加新的key给第二个HashMap。 不知道楼主明白了吗? 感谢mercyblitz的回复,大概看明白你的思路了,不过有一点需要讨论,你说找到一个三节路径的用户后,新增加该用户的记录把原来的替换,重新开始。我的理解是三节路径是前后包含的关系的。比如用户123 的 访问路径是 home,production,detail,support,download.那么可能的三节路径是home,production,detail;production,detail,support;detail,support,download;所以我认为需要先遍历一遍日志文件,得到所有不同的用户的路径。然后按前后包含的方法来遍历所有的用户的路径。最后才加入第二HashMap。不知道对不对,希望高手继续讨论,谢谢!
|
|
返回顶楼 | |
发表时间:2010-07-08
没人顶吗?发表一下意见吧
|
|
返回顶楼 | |
发表时间:2010-07-08
最后修改:2010-07-08
访问路径,从一个链接到另一个链接不是很像链表么
Map map = new HashMap(); function putPage(userid,page){ if(map.get(userid)==null){ List list = new ArrayList(); list.add(page); map.put(userid,list); }else{ List list=map.get(userid); list.add(page); } } function getTrack(userid,startpage,limit){ List list=map.get(userid); var tracks=[]; for( var i in list ) { if(i==startpage){ var track=[]; for(var j=0;j<limit;j++){ track.push(list.get(i+j)) } tracks.push(track); } } return tracks } 混合了java和JavaScript的伪代码 |
|
返回顶楼 | |
发表时间:2010-07-08
aws回答的很好,用链表来存储访问路径最好了。大家发表意见!
|
|
返回顶楼 | |
发表时间:2010-07-08
dasheng 写道 aws回答的很好,用链表来存储访问路径最好了。大家发表意见!
貌似不好吧??链表的话内存要占太多 |
|
返回顶楼 | |
发表时间:2010-07-08
请原谅我连题目都兴趣没看
|
|
返回顶楼 | |
发表时间:2010-07-08
结合mercyblitz所说,我的理解是:第一个HashMap<userid,List<page>>就是用来记录每个用户访问记录的,但List的长度应该限制在3,即当用户123查看的页面为顺序为home,product,detain,support, download时,HashMap的值依次为
<123,<home>>, <123,<home,product>>, <123,<home,product,detail>>, <123,<product,detail,support>>, <123,<detail,support,download>> 即第一个 HashMap只存放用户最新的三条访问记录, 当用户的最近的三条访问记录发生更新时,就更新第二个HashMap. |
|
返回顶楼 | |
发表时间:2010-07-08
lyw985 写道 请原谅我连题目都兴趣没看
貌似很牛逼,这么说话是阿里系的吧? |
|
返回顶楼 | |