`
shoppingbill
  • 浏览: 59824 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

鹅厂Tencent面试题

阅读更多

今天面试被虐。。。好久没写MapRedue 忘记了。额额。。。

 

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * 
 *
 *  File Name: PageVisitAge_Avg.java
 *
 *  General Description: Copyright and file header.
 *
 *  Revision History:
 *                           Modification
 *   Author                Date(MM/DD/YYYY)   JiraID           Description of Changes
 *   ---------------------   ------------    ----------     -----------------------------
 *   @author Bill Zhang       2017年9月6日
 *
 */
public class PageVisitAge_Avg extends Configured implements Tool{
	
	static class PageVisitMapper extends Mapper<LongWritable,Text,Text,Text>{
		
		@Override
		protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context)
				throws IOException, InterruptedException {
			
			String line = value.toString();
			String url = line.split(",")[1];
			
			context.write(new Text(url), value);
		}
		
	}
	
	static class PageVisitReducer extends Reducer<Text, Text, Text, Text>{
		
		private ConcurrentHashMap<String, String> dictTable = new ConcurrentHashMap<String, String>();
		
		@Override
		protected void setup(Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {
			 URI[] path_arr = context.getCacheFiles();
			 if (path_arr.length == 0) {
	                throw new FileNotFoundException("Distributed cache file not found.");
	         }
			 
			 URI dict_uri = path_arr[0];
			 FileSystem fs = FileSystem.get(context.getConfiguration());
			 FSDataInputStream in = fs.open(new Path(dict_uri));
			 BufferedReader br = new BufferedReader(new InputStreamReader(in));
             String user_dict = null;
             while ((user_dict = br.readLine()) != null) {
                String[] records = user_dict.split(",");
                //加载字典表
                dictTable.put(records[0], user_dict);
             }
		}
		
		@Override
		protected void reduce(Text arg0, Iterable<Text> arg1, Reducer<Text, Text, Text, Text>.Context context)
				throws IOException, InterruptedException {
			
			 
		 
			SummaryStatistics statistics = new SummaryStatistics ();
			//计算访问访问page的平均年龄
			for(Text value : arg1){
				String id = value.toString().split(",")[0];
				String userInfo = dictTable.get(id);
				String age = userInfo.split(",")[2];
				statistics.addValue(Double.valueOf(age));
				System.out.println(value);
			}
			
			double avg = statistics.getMean();
			context.write(arg0, new Text(avg+""));
		}


		
	}
	
	@Override
	public int run(String[] args) throws Exception {
		
        Configuration conf =getConf();
        conf.set("mapreduce.input.fileinputformat.input.dir.recursive", "true");
        
        Job job =  Job.getInstance(conf,PageVisitAge_Avg.class.getSimpleName());                
        job.setJarByClass(getClass());
        
        /**
         * 用户访问的网页历史
         * 例如:
         * 		1,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
         * 		2,http://docs.oracle.com/javase/8/
         *		3,http://docs.oracle.com/javase/8/docs/api/index.html
         */
        FileInputFormat.addInputPath(job,new Path(args[0]));
        
        /**
         * 用户字典
         * 例如:
         * 	1,zhangsan,20,male
		 *	2,zhangsi,23,female
		 *	3,susan,30,male
         * 
         */
        job.addCacheFile(new URI(args[1])); 
        
        FileOutputFormat.setOutputPath(job,new Path(args[2])); 
        job.setMapOutputKeyClass(Text.class);
        job.setOutputFormatClass(TextOutputFormat.class);
     	   
        job.setMapperClass(PageVisitMapper.class);
        job.setReducerClass(PageVisitReducer.class);
        
        job.setNumReduceTasks(10);

        return job.waitForCompletion(true)?0:1;  
	}
	
	/**
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String [] args ) throws Exception{
		int ec = ToolRunner.run(new Configuration(), new PageVisitAge_Avg(), args);
        System.exit(ec);
	}

	
}

 

分享到:
评论

相关推荐

    Google, Baidu, Tencent 面试题总结

    ### Google、Baidu、Tencent 面试题总结——海量数据处理方法 #### Bloom Filter **适用范围**:Bloom Filter是一种空间效率极高的概率型数据结构,主要用于判断一个元素是否在一个集合中。它适用于数据字典的实现...

    tencent.zip_tencent_试题_面试

    【tencent.doc】可能是面试题目的详细文档,可能包含编程题、算法题、系统设计题、产品分析题、项目管理题以及公司文化、业务理解等相关问题。编程题可能涉及到C++、Java、Python等语言的基础与高级用法,算法题则...

    2019最新BAT python面试题

    【标题】"2019最新BAT python面试题"揭示了这个压缩包文件的主要内容,即一份关于2019年百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)这三大中国互联网巨头对Python编程语言的面试题目集合。这些企业通常对...

    2021最新BAT大厂面试题合集.zip

    在IT行业中,面试是每个求职者必经的关卡,特别是对于希望进入知名大厂,如百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent,简称BAT)的求职者来说,准备充分的面试题至关重要。这份"2021最新BAT大厂面试题合集...

    2019最新BAT大数据面试题

    以下是对2019年BAT大数据面试题的一些关键知识点的详细解析,这些知识点主要与Java编程语言相关: 1. **Java基础**:面试通常从Java的基础知识开始,如类、对象、封装、继承、多态等面向对象特性。面试官可能会询问...

    2018年最新BAT面试题(前端,java,Python)

    以下是对2018年最新BAT面试题中涉及的前端、Java和Python知识点的详细解析: **前端部分** 前端开发是构建Web应用的重要组成部分,主要关注用户交互和视觉呈现。2018年的面试题可能包括以下知识点: 1. **...

    前端大厂最新面试题-tencent.docx

    腾讯面试题总结 本资源摘要信息涵盖了腾讯面试的一些重要知识点,涵盖了前端开发、JavaScript、Web 安全、性能优化、状态管理等方面的内容。 一、前端开发 1. Web 安全:CSRF 是什么?如何防范? 2. 前端性能优化...

    BAT经典面试题

    【BAT经典面试题】是IT行业内,特别是中国互联网巨头百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)在招聘过程中常采用的一系列面试问题。这些问题涵盖多个技术领域,旨在评估候选人的综合能力。以下是一些...

    tencent腾讯笔试题汇总

    这份名为"tencent腾讯笔试题汇总"的压缩包文件显然集合了多套腾讯公司的历年笔试题目,涵盖了最近两年各地的试题,这对于准备应聘腾讯职位的求职者来说是一份宝贵的参考资料。 腾讯笔试通常包括但不限于编程能力、...

    BAT互联网公司校招面试题.rar

    【标签解析】:“AT”标签可能是指阿里巴巴(Alibaba)和腾讯(Tencent)这两家公司在互联网行业的影响力,也可能代表面试题中重点关注的公司或技术方向。 【压缩包子文件的文件名称列表】:“vuehr”可能是压缩包...

    BAT面试题汇总及详解(进大厂必看)

    【描述】:“BAT面试题”通常指的是中国互联网巨头百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)在招聘过程中常问的技术和非技术类面试问题。这些公司是中国乃至全球互联网行业的领头羊,因此他们的面试标准...

    Tencent笔试题收集

    15. 数字游戏:这个问题是经典的逻辑推理题,两个数分别为3和7,因为A通过和得知不是14,B通过积得知不是21,然后A通过排除法知道是3和7,B也立即明白。 大题解析: 1. 字符串转小写:`toLower`函数需要检查源字符...

    2020最新BAT面试题.zip

    这份"2020最新BAT面试题.zip"压缩包中,显然包含了针对大型互联网公司如百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent,合称BAT)面试的热门技术点。以下将详细解析这些关键知识点: 1. 微服务:微服务架构是...

    各IT公司互联网BAT谷歌微软等笔试面试真题复习资料

    在IT行业的求职过程中,尤其是针对顶级的互联网公司如阿里巴巴(Alibaba)、腾讯(Tencent)、百度(Baidu)、360、网易(NetEase),以及国际巨头如谷歌(Google)和微软(Microsoft),笔试和面试环节是至关重要的...

    百度腾讯阿里笔试面试题汇总

    这些公司的笔试和面试题通常涵盖了广泛的计算机科学和技术知识,旨在评估候选人的专业技能和解决问题的能力。以下是对"百度腾讯阿里笔试面试题汇总"这个资源中可能包含的知识点的详细说明: 1. **算法与数据结构**...

    2020最新BAT java经典必考面试题.pdf.zip

    这份"2020最新BAT java经典必考面试题.pdf"涵盖了Java语言的基础到高级,包括但不限于语法、数据结构、算法、多线程、并发编程、JVM内存模型、设计模式等关键领域。 1. **Java基础**:面试通常从基础开始,包括变量...

    百度腾讯等公司面试题

    在IT行业中,尤其是对于互联网巨头如百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent,合称BAT)来说,面试题目往往涵盖了广泛的领域,包括但不限于编程语言、操作系统、数据结构、算法、网络、数据库以及软件...

    2023最新BAT java经典必考面试题.zip

    本压缩包“2023最新BAT java经典必考面试题.zip”包含了最新的面试题目,可以帮助求职者准备面试。 面试题目可能涵盖以下几个关键领域: 1. **基础知识**: - Java语法:包括类、对象、接口、继承、多态等基础...

    com.tencent.ig.zip

    “com.tencent.ig.zip”这一文件名揭示了它与腾讯(Tencent)公司的一款名为“IG”的产品有关。在IT行业中,IG常常指的是Interactive Game,即互动游戏,通常指的是在线游戏或者移动游戏。腾讯作为全球知名的游戏...

    leetcode答案-leetcode-tencent:leetcode面试-腾讯专题做题记录

    leetcode面试-腾讯专题做题记录 LeetCode腾讯专题地址, 小目标 每天至少一道算法题 每天更新README学习markdown写法(不会真的有人不会markdown吧,不会吧,不会吧) 先这样,有什么想到的再说 1月20日 正式开始,...

Global site tag (gtag.js) - Google Analytics