文档章节

Hadoop面试葵花宝典

超人学院
 超人学院
发布于 2015/01/27 10:40
字数 20354
阅读 777
收藏 14

超人学院hadoop面试葵花宝典(V1.1)

为了让大家更有针对性的学习和复习,对hadoop面试题有个大概的了解,超人学院特将学员面试过程中遇到的面试题汇集成篇。在此,非常感谢大家对超人学院工作的鼎力支持与配合,本次共收集了将近500道hadoop相关的面试题。随着面试人数的增加,我们将不定期更新面试题库,欢迎大家持续关注超人学院的官网,确保第一时间获取免费的公开课信息和其他学习资料。

 

 

第一题:1.创建hadoop帐户。

2.setup.改IP。

3.安装java,并修改/etc/profile文件,配置java的环境变量。

4.修改Host文件域名。

5.安装SSH,配置无密钥通信。

6.解压hadoop。

7.配置conf文件下hadoop-env.sh、core-site.sh、mapre-site.sh、hdfs-site.sh。

8.配置hadoop的环境变量。

9.Hadoop namenode -format

10.Start-all.sh

第二题:namenode:管理集群,并记录datanode文件信息。

Secondname:可以做冷备,对一定范围内数据做快照性备份。

Datanode:存储数据

Jobtracker :管理任务,并将任务分配给tasktracker。

Tasktracker:任务执行方。

第三题:可能的原因:1.hdfs没有启动成功,通过查看jps确认下。

2.确认文件是否存在。

第四题:hadoop job -list  拿到job-id  ,hadoop job -kill job-id

Hadoop fs -rmr /tmp/aaa

加新节点时:

Hadoop-daemon.sh start datanode

Hadoop-daemon.sh start tasktracker

删除时:

Hadoop mradmin -refreshnodes

Hadoop dfsadmin -refreshnodes

第五题:

Fifo schedular :默认,先进先出的原则

Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。

Fair schedular:公平调度,所有的job具有相同的资源。

第六题:java、python、hive

第七题:wordcount。。。

第八题:就用过java和hiveQL。

Java写mapreduce可以实现复杂的逻辑,如果需求简单,则显得繁琐。

HiveQL基本都是针对hive中的表数据进行编写,但对复杂的逻辑很难进行实现。写起来简单。

第九题:三种:内存数据库derby,挺小,不常用 。

本地mysql。。常用

远程端mysql。。不常用

上网上找了下专业名称:single user mode..multi user mode...remote user mode

第十题:在源码中有个例子。。不过我没看。。。

第十一题:貌似好几种来着,像mapjoin ..reducejon..还有其它的来着吧。。可以去网上查一下,我常用的就是mapjoin,可以将小表的数据加载到内存中使用,然后匹配的大表的数据,加快效率。

第十二题:用java。。我的第一思路就是排序后从中间查询呗,for循环的事。。

第十三题:

combiner :实现的功能跟reduce差不多,接收map的值,经过计算后给reduce,它的key,value类型要跟reduce完全一样,当reduce业务复杂时可以用,不过它貌似只是操作本机的数据。。

Partition:将输出的结果分别保存在不同的文件中。。

15、Hive内部表和外部表的区别?

16、Hbase的rowkey怎么创建比较好?列族怎么创建比较好?

17、用mapreduce怎么处理数据倾斜问题?

18、hadoop框架中怎么来优化?

19、Hbase内部是什么机制?

20、我们在开发分布式计算job的,是否可以去掉reduce()阶段?

21、hdfs的数据压缩算法

22、mapreduce的调度模式

23、hive底层与数据库交互原理

24、hbase过滤器实现原则

25、reduce后输出的数据量有多大?

26、现场出问题测试mapreduce掌握情况和HIve的Hql语句掌握情况?

27、datanode 在什么情况下不会备份?

28、combine出现在那个过程?

29、hdfs得体系结构?

30、flush的过程?

31、什么是队列?

32、List与Set的区别?

33、数据库的三大范式?

34、三个datanode,当有一个datanode出现错误会怎样?

35、sqoop在导入数据到mysql中,如何让数据不重复导入?如果存在数据问题sqoop如何处理?

36使用Hive或者自定义MR实现如下逻辑:

product_no   lac_id moment start_time                user_id county_id staytime city_id

13429100031  22554  8  2013-03-11 08:55:19.151754088   571     571    282    571

13429100082  22540  8  2013-03-11 08:58:20.152622488   571     571    270    571

13429100082  22691  8  2013-03-11 08:56:37.149593624   571     571    103    571

13429100087  22705  8  2013-03-11 08:56:51.139539816  571     571     220     571

13429100087  22540  8  2013-03-11 08:55:45.150276800  571     571     66      571

13429100082  22540  8  2013-03-11 08:55:38.140225200  571     571     133     571

13429100140  26642  9  2013-03-11 09:02:19.151754088  571     571     18      571

13429100082  22691  8  2013-03-11 08:57:32.151754088  571     571     287     571

13429100189  22558  8  2013-03-11 08:56:24.139539816  571    571      48      571

13429100349  22503  8  2013-03-11 08:54:30.152622440  571     571     211     571

字段解释:

product_no:用户手机号;

lac_id:用户所在基站;

start_time:用户在此基站的开始时间;

staytime:用户在此基站的逗留时间。

需求描述:

根据lac_id和start_time知道用户当时的位置,根据staytime知道用户各个基站的逗留时长。根据轨迹合并连续基站的staytime。

最终得到每一个用户按时间排序在每一个基站驻留时长

期望输出举例:

13429100082   22540   8  2013-03-11 08:58:20.152622488  571    571    270     571

13429100082   22691   8  2013-03-11 08:56:37.149593624  571    571    390     571

13429100082   22540   8  2013-03-11 08:55:38.140225200  571    571    133     571

13429100087   22705   8  2013-03-11 08:56:51.139539816  571    571    220     571

13429100087   22540   8  2013-03-11 08:55:45.150276800  571    571    66      571

Linux脚本能力考察:

37、请随意使用各种类型的脚本语言实现:批量将指定目录下的所有文件中的$HADOOP_HOME$替换成/home/ocetl/app/hadoop

38、假设有10台主机,H1到H10,在开启SSH互信的情况下,编写一个或多个脚本实现在所有的远程主机上执行脚本的功能

例如:runRemoteCmd.sh "ls -l"

期望结果:

H1:

XXXXXXXX

XXXXXXXX

XXXXXXXX

H2:

XXXXXXXX

XXXXXXXX

XXXXXXXX

H3:

...

Hadoop基础知识与问题分析的能力:

39、描述一下hadoop中,有哪些地方使用了缓存机制,作用分别是什么

40、请描述https://issues.apache.org/jira/browse/HDFS-2379说的是什么问题,最终解决的思路是什么?

41、MapReduce开发能力

请参照wordcount实现一个自己的map reduce,需求为:

    a 输入文件格式:

       xxx,xxx,xxx,xxx,xxx,xxx,xxx

    b 输出文件格式:

       xxx,20

       xxx,30

       xxx.40

    c 功能:根据命令行参数统计输入文件中指定关键字出现的次数,并展示出来

       例如:hadoop jar xxxxx.jar keywordcount xxx,xxx,xxx,xxx(四个关键字)

42、MapReduce优化

请根据第五题中的程序, 提出如何优化MR程序运行速度的思路

43、Linux操作系统知识考察

请列举曾经修改过的/etc下的配置文件,并说明修改要解决的问题?

44、Java开发能力

45、 写代码实现1G大小的文本文件,行分隔符为\x01\x02,统计一下该文件中的总行数,要求注意边界情况的处理

46、 请描述一下在开发中如何对上面的程序进行性能分析,对性能进行优化的过程。

47、设计一套系统,使之能够从不断增加的不同的数据源中,提取指定格式的数据。

要求: 

1)、运行结果要能大致得知提取效果,并可据此持续改进提取方法;

2)、由于数据来源的差异性,请给出可弹性配置的程序框架;

3)、数据来源可能有Mysql,sqlserver等;

4)、该系统具备持续挖掘的能力,即,可重复提取更多信息

48. 经典的一道题:

现有1亿个整数均匀分布,如果要得到前1K个最大的数,求最优的算法。

(先不考虑内存的限制,也不考虑读写外存,时间复杂度最少的算法即为最优算法)

我先说下我的想法:分块,比如分1W块,每块1W个,然后分别找出每块最大值,从这最大的1W个值中找最大1K个,

那么其他的9K个最大值所在的块即可扔掉,从剩下的最大的1K个值所在的块中找前1K个即可。那么原问题的规模就缩小到了1/10。

问题:

(1)这种分块方法的最优时间复杂度。

(2)如何分块达到最优。比如也可分10W块,每块1000个数。则问题规模可降到原来1/100。但事实上复杂度并没降低。

 (3)还有没更好更优的方法解决这个问题。

49、 MapReduce大致流程?

50、 combiner, partition作用?

51、用mapreduce实现sql语句 select count(x) from a group by b?

52、用mapreduce如何实现两张表连接,有哪些方法?

53、知道MapReduce大致流程,map, shuffle, reduce

54、知道combiner, partition作用,设置compression

55、搭建hadoop集群,master/slave 都运行那些服务

56、HDFS,replica如何定位

57、版本0.20.2->0.20.203->0.20.205, 0.21, 0.23, 1.0. 1新旧API有什么不同?

58、Hadoop 参数调优,cluster level: JVM, map/reduce slots, job level: reducer #,memory, use combiner? use compression?

59、pig latin, Hive 语法有什么不同

60、描述HBase, zookeeper 搭建过程

61、hadoop运行的原理?

62、mapreduce的原理?

63、HDFS存储的机制?

64、举一个简单的例子说明mapreduce是怎么来运行的 ?

65、使用mapreduce来实现下面实例

      实例:现在有10个文件夹,每个文件夹都有1000000个url.现在让你找出top1000000url。

66、hadoop中Combiner的作用?

67、如何确认Hadoop集群的健康状况。

68、使用的hadoop版本都是什么?

69、mapreduce原理是什么?

70、mapreduce作业,不使用reduce来输出,用什么能代替reduce的功能

71、hive如何调优?

72、hive如何权限控制?

74、hbase写数据的原理是什么?

74、hive能像关系数据库那样,建多个库吗?

75、hbase宕机如何处理?

76、假设公司要建一个数据中心,你会如何规划?

77、 下面哪个程序负责 HDFS 数据存储。(单选)

a)NameNode  b)Jobtracker  c)Datanode d)secondaryNameNode e)tasktracker

78、HDfS 中的 block 默认保存几份?

a)3 份 b)2 份c)1 份d)不确定

79、下列哪个程序通常与 NameNode 在一个节点启动?

a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker

80、Hadoop 作者

a)Martin Fowler b)Kent Beck c)Doug cutting

81、HDFS 默认 Block Size

a)32MB  b)64MB c)128MB

82、下列哪项通常是集群的最主要瓶颈

a)CPU   b)网络 c)磁盘  d)内存

83、 关于 SecondaryNameNode 哪项是正确的?

a)它是 NameNode 的热备     b)它对内存没有要求

c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间

d)SecondaryNameNode 应与 NameNode 部署到一个节点

多选题:

84、下列哪项可以作为集群的管理工具

a)Puppet  b)Pdsh  c)Cloudera Manager  d)Zookeeper

85、配置机架感知的下面哪项正确

a)如果一个机架出问题,不会影响数据读写

b)写入数据的时候会写到不同机架的 DataNode 中

c)MapReduce 会根据机架获取离自己比较近的网络数据

86、 Client 端上传文件的时候下列哪项正确

a)数据经过 NameNode 传递给 DataNode

b)Client 端将文件切分为 Block,依次上传

c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作

87、下列哪个是 Hadoop 运行的模式

a)单机版 b)伪分布式 c)分布式

88、Cloudera 提供哪几种安装 CDH 的方法

a)Cloudera manager b)Tar ball c)Yum d)Rpm

 

判断题:

89、Ganglia 不仅可以进行监控,也可以进行告警。( )

90、Block Size 是不可以修改的。( )

91、Nagios 不可以监控 Hadoop 集群,因为它不提供 Hadoop 支持。( )

92、如果 NameNode 意外终止,SecondaryNameNode 会接替它使集群继续工作。( )

93、Cloudera CDH 是需要付费使用的。( )

94、Hadoop 是 Java 开发的,所以 MapReduce 只支持 Java 语言编写。()

95、Hadoop 支持数据的随机读写。( )

96、NameNode 负责管理 metadata,client 端每次读写请求,它都会从磁盘中读取或则会写入 metadata 信息并反馈 client 端。( )

97、NameNode 本地磁盘保存了 Block 的位置信息。( )

98、DataNode 通过长连接与 NameNode 保持通信。( )

99、Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。()

100、 Slave 节点要存储数据,所以它的磁盘越大越好。()

101、hadoop dfsadmin –report 命令用于检测 HDFS 损坏块。( )

102、Hadoop 默认调度器策略为 FIFO( )

103、集群内每个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。()

104、因为 HDFS 有多个副本,所以 NameNode 是不存在单点问题的。( )

105、每个 map 槽就是一个线程。( )

106、Mapreduce 的 input split 就是一个 block。( )

107、NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( )

108、Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是 200 GB。( )

109、DataNode 首次加入 cluster 的时候,如果 log 中报告不兼容文件版本,那需要 NameNode执行“Hadoop namenode -format”操作格式化磁盘。()

110、hive实现统计的查询语句是什么?

111、生产环境中为什么建议使用外部表?

112、hadoop mapreduce创建类DataWritable的作用是什么?

113、为什么创建类DataWritable?

114、如何实现统计手机流量?

115、对比hive与mapreduce统计手机流量的区别?

用Hadoop分析海量日志文件,每行日志记录了如下数据:

TableName(表名),Time(时间),User(用户),TimeSpan(时间开销)。

要求:

116、编写MapReduce程序算出高峰时间段(如上午10点)哪张表被访问的最频繁,以及这段时间访问这张表最多的用户,以及这个用户的总时间开销。

117、hadoop运转的原理?

118、mapreduce的原理?

119、HDFS存储的机制?

120、举一个简略的比方阐明mapreduce是怎么来运转的 ?

121、面试的人给你出一些疑问,让你用mapreduce来完成?

      比方:如今有10个文件夹,每个文件夹都有1000000个url.如今让你找出top1000000url。

122、hadoop中Combiner的效果?

117.hadoop即是mapreduce的进程,服务器上的一个目录节点加上多个数据节点,将程序传递到各个节点,再节点上进行计算。

118.mapreduce即是将数据存储到不一样的节点上,用map方法对应办理,在各个节点上进行计算,最后由reduce进行合并。

119.java程序和namenode合作,把数据存放在不一样的数据节点上

120.怎么运转用图来表明最好了。图无法画。谷歌下

121.不思考歪斜,功能,运用2个job,第一个job直接用filesystem读取10个文件夹作为map输入,url做key,reduce计算个url的sum,

下一个job map顶用url作key,运用-sum作二次排序,reduce中取top10000000

第二种方法,建hive表 A,挂分区channel,每个文件夹是一个分区.

select x.url,x.c from(select url,count(1) as c from A  where channel ='' group by url)x order by x.c desc limie 1000000;

122. combiner也是一个reduce,它可以削减map到reudce的数据传输,进步shuff速度。牢记平均值不要用。需求输入=map的输出,输出=reduce的输入。

一、笔试

123、java基础类:

1)继承:写的一段代码,让写出结果;

2)引用对象和值对象;

 Java基础类记不太清了,有很多都是基础。

124、linux基础:

1)find用法

2)给出一个文本:比如 http://aaa.com

http://bbb.com

http://bbb.com

http://bbb.com

http://ccc.com

http://ccc.com

         让写shell统计,最后输出结果:aaa 1

                           Ccc 2

                           Bbb 3

         要求结果还要排序

     还有别的,也是比较基础的

125、数据库类:oracle查询语句

二、面试

讲项目经验:问的很细,给纸,笔,让画公司hadoop的项目架构,最后还让自己说几条业务数据,然后经过平台后,出来成什么样子。

java方面:io输入输出流里有哪些常用的类,还有webService,线程相关的知识

linux:问到jps命令,kill命令,问awk,sed是干什么用的、还有hadoop的一些常用命令

hadoop:讲hadoop1中map,shuffle,reduce的过程,其中问到了map端和reduce端溢写的细节(幸好我之前有研究过)

项目部署:问了项目是怎么部署,代码怎么管理

Hive也问了一些,外部表,还有就是hive的物理模型跟传统数据库的不同

   问到分析人行为的算法:我当时想到我们做的反洗钱项目中,有用到。我就给举例:我们是怎么筛选出可疑的洗钱行为的。

 

126、hadoop集群搭建过程,写出步骤。

127、hadoop集群运行过程中启动那些线程,各自的作用是什么?

128、/tmp/hadoop-root/dfs/name    the path is not exists or is not accessable.

    NameNode main中报错,该怎么解决。(大意这样 一个什么异常)

129、工作中编写mapreduce用到的语言,编写一个mapreduce程序。

130、hadoop命令

   1)杀死一个job任务   (杀死50030端口的进程即可)

   2)删除/tmp/aaa文件目录

   3)hadoop集群添加或删除节点时,刷新集群状态的命令

131、日志的固定格式:

    a,b,c,d

    a,a,f,e

    b,b,d,f

   使用一种语言编写mapreduce任务,统计每一列最后字母的个数。

132、hadoop的调度器有哪些,工作原理。

133、mapreduce的join方法有哪些?

134、Hive元数据保存的方法有哪些,各有什么特点?

135、java实现非递归二分法算法。

136、mapreduce中Combiner和Partition的作用。

137、用linux实现下列要求:

  ip             username

  a.txt

  210.121.123.12 zhangsan

  34.23.56.78    lisi

  11.56.56.72    wanger

  .....

  b.txt

  58.23.53.132   liuqi

  34.23.56.78    liba

  .....

  a.txt,b.txt中至少100万行。

  1)a.txt,b.txt中各自的ip个数,ip的总个数。

  2)a.txt中存在的ip而b.txt中不存在的ip。

  3)每个username出现的总个数,每个username对应的ip个数。

138、大意是 hadoop中java、streaming、pipe处理数据各有特点。

139、如何实现mapreduce的二次排序。

大数遇到的面试题:

140、面试官上来就问hadoop的调度机制;

141、机架感知;

142、MR数据倾斜原因和解决方案;

143、集群HA。

@找自己 提供的面试题:

144、如果让你设计,你觉得一个分布式文件系统应该如何设计,考虑哪方面内容;

每天百亿数据入hbase,如何保证数据的存储正确和在规定的时间里全部录入完毕,

不残留数据。

145、对于hive,你写过哪些UDF函数,作用是什么

146、hdfs的数据压缩算法

147、mapreduce的调度模式

148、hive底层与数据库交互原理

149、hbase过滤器实现原则

150、对于mahout,如何进行推荐、分类、聚类的代码二次开发分别实现那些借口

151、请问下,直接将时间戳作为行健,在写入单个region时候会发生热点问题,为什么呢?

152、hdfs原理,以及各个模块的职责?

153、mapreduce的工作原理?

154、map方法是如何调用reduce方法的?

155、shell如何判断文件是否存在,如果不存在该如何处理?

156、fsimage和edits的区别?

157、hadoop1和hadoop2的区别?

笔试:

158、hdfs中的block默认报错几份?

159、哪个程序通常与namenode在一个节点启动?并做分析

160、列举几个配置文件优化?

161、写出你对zookeeper的理解

162、datanode首次加入cluster的时候,如果log报告不兼容文件版本,那需要namenode执行格式化操作,这样处理的原因是?

163、谈谈数据倾斜,如何发生的,并给出优化方案

164、介绍一下hbase过滤器

165、mapreduce基本执行过程

166、谈谈hadoop1和hadoop2的区别

167、hbase集群安装注意事项

168、记录包含值域F和值域G,要分别统计相同G值的记录中不同的F值的数目,简单编写过程。

169、算法题:有2个桶,容量分别为3升和5升,如何得到4升的水,假设水无限使用,写出步骤。

170、java笔试题:忘记拍照了,很多很基础的se知识。后面还有很多sql相关的题,常用的查询sql编写,答题时间一个小时。

171、Oracle数据库中有一个表字段name,name varchar2(10),如何在不改变表数据的情况下将此字段长度改为varchar2(2)?

第一部分:十道海量数据处理面试题

172、海量日志数据,提取出某日访问百度次数最多的那个IP。

首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法, 比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大 的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。

算法思想:分而治之+Hash

(1).IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;

(2).可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;

(3).对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;

(4).可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;

 

173、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。

    假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

典型的Top K算法,还是在这篇文章里头有所阐述,详情请参见:十一、从头到尾彻底解析Hash表算法。

文中,给出的最终算法是:

第一步、先对这批海量数据预处理,在O(N)的时间内用Hash表完成统计(之前写成了排序,特此订正。July、2011.04.27);

第二步、借助堆这个数据结构,找出Top K,时间复杂度为N‘logK。

即,借助堆结构,我们可以在log量级的时间内查找和调整/移动。因此,维护一个K(该题目中是10)大小的小根堆,然后遍历300万的Query,分别 和根元素进行对比所以,我们最终的时间复杂度是:O(N) + N’*O(logK),(N为1000万,N’为300万)。

或者:采用trie树,关键字域存该查询串出现的次数,没有出现为0。最后用10个元素的最小推来对出现频率进行排序。

 

174、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

方案:顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件(记为x0,x1,…x4999)中。这样每个文件大概是200k左右。

如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。

对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结 点的最小堆),并把100个词及相应的频率存入文件,这样又得到了5000个文件。下一步就是把这5000个文件进行归并(类似与归并排序)的过程了。

 

175、有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

还是典型的TOP K算法,解决方案如下:

方案1:

顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。

找一台内存在2G左右的机器,依次对用hash_map(query, query_count)来统计每个query出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的 query_cout输出到文件中。这样得到了10个排好序的文件(记为)。

对这10个文件进行归并排序(内排序与外排序相结合)。

方案2:

一般query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。这样,我们就可以采用trie树/hash_map等直接来统计每个query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。

方案3:

与方案1类似,但在做完hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如MapReduce),最后再进行合并。

 

176、 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

方案1:可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。

遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1,…,a999)中。这样每个小文件的大约为300M。

遍历文件b,采取和a相同的方式将url分别存储到1000小文件(记为b0,b1,…,b999)。这样处理后,所有可能相同的url都在对应的小 文件(a0vsb0,a1vsb1,…,a999vsb999)中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的 url即可。

求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。

方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。

Bloom filter日后会在本BLOG内详细阐述。

 

177、在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。

方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看 bitmap,把对应位是01的整数输出即可。

方案2:也可采用与第1题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。

 

178、腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

与上第6题类似,我的第一反应时快速排序+二分查找。以下是其它更好的方法:

方案1:oo,申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

方案2:这个问题在《编程珠玑》里有很好的描述,大家可以参考下面的思路,探讨一下:

又因为2^32为40亿多,所以给定一个数可能在,也可能不在其中;

这里我们把40亿个数中的每一个用32位的二进制来表示

假设这40亿个数开始放在一个文件中。

然后将这40亿个数分成两类:

1.最高位为0

2.最高位为1

并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20亿,而另一个>=20亿(这相当于折半了);

与要查找的数的最高位比较并接着进入相应的文件再查找

再然后把这个文件为又分成两类:

1.次最高位为0

2.次最高位为1

并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10亿,而另一个>=10亿(这相当于折半了);

与要查找的数的次最高位比较并接着进入相应的文件再查找。

…….

以此类推,就可以找到了,而且时间复杂度为O(logn),方案2完。

附:这里,再简单介绍下,位图方法:

使用位图法判断整形数组是否存在重复

判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。

位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上 1,如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。

欢迎,有更好的思路,或方法,共同交流。

 

179、怎么在海量数据中找出重复次数最多的一个?

方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)。

 

180、上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。

方案1:上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前N个出现次数最多的数据了,可以用第2题提到的堆机制完成。

 

181、一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。

方案1:这题是考虑时间效率。用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表示单词的平准长度)。然后是找出出现最频繁的前10 个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较大的哪一个。

 

附、100w个数中找出最大的100个数。

方案1:在前面的题中,我们已经提到了,用一个含100个元素的最小堆完成。复杂度为O(100w*lg100)。

方案2:采用快速排序的思想,每次分割之后只考虑比轴大的一部分,知道比轴大的一部分在比100多的时候,采用传统排序算法排序,取前100个。复杂度为O(100w*100)。

方案3:采用局部淘汰法。选取前100个元素,并排序,记为序列L。然后一次扫描剩余的元素x,与排好序的100个元素中最小的元素比,如果比这个最小的要大,那么把这个最小的元素删除,并把x利用插入排序的思想,插入到序列L中。依次循环,知道扫描了所有的元素。复杂度为O(100w*100)。

 

一、Bloom filter

适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集

基本原理及要点:

对于原理来说很简单,位数组+k个独立hash函数。将 hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不 支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。

还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数 个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集 合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。

举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。

注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。

扩展:

Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。

问题实例:给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?

根据这个问题我们来计算下内存的占用,4G=2^32大概是40亿*8大概是340 亿,n=50亿,如果按出错率0.01算需要的大概是650亿个bit。现在可用的是340亿,相差并不多,这样可能会使出错率上升些。另外如果这些 urlip是一一对应的,就可以转换成ip,则大大简单了。

 

二、Hashing

适用范围:快速查找,删除的基本数据结构,通常需要总数据量可以放入内存

基本原理及要点:

hash函数选择,针对字符串,整数,排列,具体相应的hash方法。

碰撞处理,一种是open hashing,也称为拉链法;另一种就是closed hashing,也称开地址法,opened addressing。

扩展:

d-left hashing中的d是多个的意思,我们先简化这个问题,看一看2-left hashing。2-left hashing指的是将一个哈希表分成长度相等的两半,分别叫做T1和T2,给T1和T2分别配备一个哈希函数,h1和h2。在存储一个新的key时,同 时用两个哈希函数进行计算,得出两个地址h1[key]和h2[key]。这时需要检查T1中的h1[key]位置和T2中的h2[key]位置,哪一个 位置已经存储的(有碰撞的)key比较多,然后将新key存储在负载少的位置。如果两边一样多,比如两个位置都为空或者都存储了一个key,就把新key  存储在左边的T1子表中,2-left也由此而来。在查找一个key时,必须进行两次hash,同时查找两个位置。

 

问题实例:

1).海量日志数据,提取出某日访问百度次数最多的那个IP。

IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。

 

三、bit-map

适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下

基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码

扩展:bloom filter可以看做是对bit-map的扩展

问题实例:

1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。

2)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

将bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map。

四、堆

适用范围:海量数据前n大,并且n比较小,堆可以放入内存

基本原理及要点:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前 元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较 小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。

扩展:双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。

问题实例:

1)100w个数中找最大的前100个数。

用一个100个元素大小的最小堆即可。

 

五、双层桶划分—-其实本质上就是【分而治之】的思想,重在“分”的技巧上!

适用范围:第k大,中位数,不重复或重复的数字

基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。可以通过多次缩小,双层只是一个例子。

扩展:

问题实例:

1).2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。也就是说只要有足够的磁盘空间,就可以很方便的解决。

2).5亿个int找它们的中位数。

这个例子比上面那个更明显。首先我们 将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数。然后第二次扫描我们只统计落在这个区域中的那些数就可以了。

实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受 的程度。即可以先将int64分成2^24个区域,然后确定区域的第几大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里的数的个数只有2^20,就可以直接利用direct addr table进行统计了。

 

六、数据库索引

适用范围:大数据量的增删改查

基本原理及要点:利用数据的设计实现方法,对海量数据的增删改查进行处理。

 

七、倒排索引(Inverted index)

适用范围:搜索引擎,关键字查询

基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。

以英文为例,下面是要被索引的文本:

T0 = “it is what it is”

T1 = “what is it”

T2 = “it is a banana”

我们就能得到下面的反向文件索引:

“a”:      {2}

“banana”: {2}

“is”:     {0, 1, 2}

“it”:     {0, 1, 2}

“what”:   {0, 1}

检索的条件”what”,”is”和”it”将对应集合的交集。

正向索引开发出来用来存储每个文档的单词的列表。正向索引的查询往往满足每个文档有序 频繁的全文查询和每个单词在校验文档中的验证这样的查询。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。也就是说文档指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很容易看到这个反向的关系。

扩展:

问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。

 

八、外排序

适用范围:大数据的排序,去重

基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树

扩展:

问题实例:

1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词。

这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1m做hash有些不够,所以可以用来排序。内存可以当输入缓冲区使用。

 

九、trie树

适用范围:数据量大,重复多,但是数据种类小可以放入内存

基本原理及要点:实现方式,节点孩子的表示方式

扩展:压缩实现。

问题实例:

1).有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序。

2).1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。请问怎么设计和实现?

3).寻找热门查询:查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个,每个不超过255字节。

 

十、分布式处理 mapreduce

适用范围:数据量大,但是数据种类小可以放入内存

基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。

扩展:

问题实例:

1).The canonical example application of MapReduce is a process to count the appearances of

each different word in a set of documents:

2).海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。

3).一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到N^2个数的中数(median)?

经典问题分析

上千万or亿数据(有重复),统计其中出现次数最多的前N个数据,分两种情况:可一次读入内存,不可一次读入。

 

可用思路:trie树+堆,数据库索引,划分子集分别统计,hash,分布式计算,近似统计,外排序

    所谓的是否能一次读入内存,实际上应该指去除重复后的数据量。如果去重后数据可以放入内存,我们可以为数据建立字典,比如通过 map,hashmap,trie,然后直接进行统计即可。当然在更新每条数据的出现次数的时候,我们可以利用一个堆来维护出现次数最多的前N个数据,当 然这样导致维护次数增加,不如完全统计后在求前N大效率高。

 

    如果数据无法放入内存。一方面我们可以考虑上面的字典方法能否被改进以适应这种情形,可以做的改变就是将字典存放到硬盘上,而不是内存,这可以参考数据库的存储方法。

 

    当然还有更好的方法,就是可以采用分布式计算,基本上就是map-reduce过程, 首先可以根据数据值或者把数据hash(md5)后的值,将数据按照范围划分到不同的机子,最好可以让数据划分后可以一次读入内存,这样不同的机子负责处理各种的数值范围,实际上就是map。得到结果后,各个机子只需拿出各自的出现次数最多的前N个数据,然后汇总,选出所有的数据中出现次数最多的前N个数 据,这实际上就是reduce过程。

 

    实际上可能想直接将数据均分到不同的机子上进行处理,这样是无法得到正确的解的。因为一个数据可能被均分到不同的机子上,而另一个则可能完全聚集到一个机子上,同时还可能存在具有相同数目的数据。比如我们要找出现次数最多的前100个,我 们将1000万的数据分布到10台机器上,找到每台出现次数最多的前 100个,归并之后这样不能保证找到真正的第100个,因为比如出现次数最多的第100个可能有1万个,但是它被分到了10台机子,这样在每台上只有1千 个,假设这些机子排名在1000个之前的那些都是单独分布在一台机子上的,比如有1001个,这样本来具有1万个的这个就会被淘汰,即使我们让每台机子选 出出现次数最多的1000个再归并,仍然会出错,因为可能存在大量个数为1001个的发生聚集。因此不能将数据随便均分到不同机子上,而是要根据hash 后的值将它们映射到不同的机子上处理,让不同的机器处理一个数值范围。

 

    而外排序的方法会消耗大量的IO,效率不会很高。而上面的分布式方法,也可以用于单机版本,也就是将总的数据根据值的范围,划分成多个不同的子文件,然后逐个处理。处理完毕之后再对这些单词的及其出现频率进行一个归并。实际上就可以利用一个外排序的归并过程。

另外,还可以考虑近似计算,也就是我们可以通过结合自然语言属性,只将那些真正实际中出现最多的那些词作为一个字典,使得这个规模可以放入内存。

 

182.说说值对象与引用对象的区别?

183.谈谈你对反射机制的理解及其用途?

184.ArrayList、Vector、LinkedList的区别及其优缺点?HashMap、HashTable的区别及其优缺点?

185.列出线程的实现方式?如何实现同步?

186.sql题,是一个图表,具体忘了

187、列出至少五种设计模式?用代码或UML类图描述其中两种设计模式的原理?

188、谈谈你最近正在研究的技术,谈谈你最近项目中用到的技术难点及其解决思路。

189

用户手机号  出现的地点  出现的时间                 逗留的时间

111111111     2          2014-02-18 19:03:56.123445   133

222222222     1          2013-03-14 03:18:45.263536    241

333333333     3          2014-10-23 17:14:23.176345    68

222222222     1          2013-03-14 03:20:47.123445    145   

333333333     3          2014-09-15 15:24:56.222222    345

222222222     2          2011-08-30 18:13:58.111111    145

222222222     2          2011-08-30 18:18:24.222222    130  

按时间排序 

期望结果是:

222222222     2           2011-08-30 18:13:58.111111    145

222222222     2          2011-08-30 18:18:24.222222     130

222222222     1           2013-03-14 03:18:45.263536    24

111111111   ~~~~~~~~

333333333  ~~~~~~~

 

二、面试题(7道):

190、文件大小默认为64M,改为128M有啥影响?

191、RPC原理?

192、NameNode与SecondaryNameNode的区别与联系?

193、介绍MadpReduce整个过程,比如把WordCount的例子的细节将清楚(重点讲解Shuffle)?

194、对Hadoop有没有调优经验,没有什么使用心得?(调优从参数调优讲起)

195、MapReduce出现单点负载多大,怎么负载平衡?(可以用Partitioner)

196、MapReduce怎么实现Top10?

三、面试题(13道):

197、你胜任该职位有什么优势

198、java优势及原因(至少3个)

199、jvm优化

200、写一个冒泡程序

201、hadoop底层存储设计

202、说说你最近2~3年的职业规划

一.数据库

203、第一范式,第二范式和第三范式

204、给出两张数据表,优化表(具体字段不记得了,是关于商品定单和供应商方面的)

205、以你的实际经验,说下怎样预防全表扫描

二、网络七层协议

206、多线程

207、集合 HashTable和HashMap区别

208、操作系统碎片

209、zookeeper优点,用在什么场合

310、Hbase中的metastore用来做什么的?

二十、面试题(18道):

311、在线安装ssh的命令以及文件解压的命令?

312、把公钥都追加到授权文件的命令?该命令是否在root用户下执行?

313、HadoopHA集群中,各个服务的启动和关闭的顺序?

314、HDFS中的block块默认保存几份?默认大小多少?

315、NameNode中的meta数据是存放在NameNode自身,还是DataNode等其他节点?DatNOde节点自身是否有Meta数据存在?

316、下列那个程序通常与NameNode在一个节点启动?

317、下面那个程序负责HDFS数据存储?

318、 在HadoopHA集群中,简述Zookeeper的主要作用,以及启动和查看状态的命令?

319、HBase在进行模型设计时重点在什么地方?一张表中国定义多少个Column Family最合适?为什么?

320、如何提高HBase客户端的读写性能?请举例说明。

321、基于HadoopHA集群进行MapReduce开发时,Configuration如何设置hbase.zookeeper,quorum属性的值?

322、 在hadoop开发过程中使用过哪些算法?其应用场景是什么?

323、MapReduce程序如何发布?如果MapReduce中涉及到了第三方的jar包,该如何处理?

324、在实际工作中使用过哪些集群的运维工具,请分别阐述其作用。

325、hadoop中combiner的作用?

326、IO的原理,IO模型有几种?

327、Windows用什么样的模型,Linux用什么样的模型?

328、一台机器如何应对那么多的请求访问,高并发到底怎么实现,一个请求怎么产生的,

在服务端怎么处理的,最后怎么返回给用户的,整个的环节操作系统是怎么控制的?

329、hdfs的client端,复制到第三个副本时宕机,hdfs怎么恢复保证下次写第三副本?block块信息是先写dataNode还是先写nameNode?

330、快排现场写程序实现?

331、jvm的内存是怎么分配原理?

332、毒酒问题---1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒?

333、用栈实现队列?

334、链表倒序实现?

335、多线程模型怎样(生产,消费者)?平时并发多线程都用哪些实现方式?

336、synchonized是同步悲观锁吗?互斥?怎么写同步提高效率?

337、4亿个数字,找出哪些重复的,要用最小的比较次数,写程序实现。

338、java是传值还是传址?

339、 java处理多线程,另一线程一直等待?

340、一个网络商城1天大概产生多少G的日志?

341、大概有多少条日志记录(在不清洗的情况下)?

342、日访问量大概有多少个?

343、注册数大概多少?

344、我们的日志是不是除了apache的访问日志是不是还有其他的日志?

345、假设我们有其他的日志是不是可以对这个日志有其他的业务分析?这些业务分析都有什么?

346、问:你们的服务器有多少台?

347、问:你们服务器的内存多大?

348、问:你们的服务器怎么分布的?(这里说地理位置分布,最好也从机架方面也谈谈)

349、问:你平常在公司都干些什么(一些建议)

350、hbase怎么预分区?

351、hbase怎么给web前台提供接口来访问(HTABLE可以提供对HTABLE的访问,但是怎么查询同一条记录的多个版本数据)?

352、.htable API有没有线程安全问题,在程序中是单例还是多例?

353、我们的hbase大概在公司业务中(主要是网上商城)大概都几个表,几个表簇,大概都存什么样的数据?

354、hbase的并发问题?

Storm问题:

355、metaq消息队列 zookeeper集群 storm集群(包括zeromq,jzmq,和storm本身)就可以完成对商城推荐系统功能吗?还有没有其他的中间件?

356、storm怎么完成对单词的计数?(个人看完storm一直都认为他是流处理,好像没有积攒数据的能力,都是处理完之后直接分发给下一个组件)

357、storm其他的一些面试经常问的问题?

二十三、面试题(18道):

358、你们的集群规模?

开发集群:10台(8台可用)8核cpu

359、你们的数据是用什么导入到数据库的?导入到什么数据库?

处理之前的导入:通过hadoop命令导入到hdfs文件系统

处理完成之后的导出:利用hive处理完成之后的数据,通过sqoop导出到mysql数据库中,以供报表层使用。

360、你们业务数据量多大?有多少行数据?(面试了三家,都问这个问题)

开发时使用的是部分数据,不是全量数据,有将近一亿行(8、9千万,具体不详,一般开发中也没人会特别关心这个问题)

361、你们处理数据是直接读数据库的数据还是读文本数据?

将日志数据导入到hdfs之后进行处理

362、你们写hive的hql语句,大概有多少条?

不清楚,我自己写的时候也没有做过统计

363、你们提交的job任务大概有多少个?这些job执行完大概用多少时间?(面试了三家,都问这个问题)

没统计过,加上测试的,会与很多

364、hive跟hbase的区别是?

365、你在项目中主要的工作任务是?

利用hive分析数据

366、你在项目中遇到了哪些难题,是怎么解决的?

某些任务执行时间过长,且失败率过高,检查日志后发现没有执行完就失败,原因出在hadoop的job的timeout过短(相对于集群的能力来说),设置长一点即可

367、你自己写过udf函数么?写了哪些?

这个我没有写过

368、你的项目提交到job的时候数据量有多大?(面试了三家,都问这个问题)

不清楚是要问什么

369、reduce后输出的数据量有多大?

370、一个网络商城1天大概产生多少G的日志? 4tb

371、大概有多少条日志记录(在不清洗的情况下)? 7-8百万条

372、日访问量大概有多少个?百万

373、注册数大概多少?不清楚  几十万吧

374、我们的日志是不是除了apache的访问日志是不是还有其他的日志?关注信息

375、假设我们有其他的日志是不是可以对这个日志有其他的业务分析?这些业务分析都有什么?

二十四、面试题(1)

376、有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。

请用5分钟时间,找出重复出现最多的前10条。

分析:

常规方法是先排序,在遍历一次,找出重复最多的前10条。但是排序的算法复杂度最低为nlgn。

可以设计一个hash_table, hash_map<string, int>,依次读取一千万条短信,加载到hash_table表中,并且统计重复的次数,与此同时维护一张最多10条的短信表。

这样遍历一次就能找出最多的前10条,算法复杂度为O(n)。

二十五、面试题(5道):

377、job的运行流程(提交一个job的流程)?

378、Hadoop生态圈中各种框架的运用场景?

379、hive中的压缩格式RCFile、TextFile、SequenceFile各有什么区别? 

以上3种格式一样大的文件哪个占用空间大小.还有Hadoop中的一个HA压缩。

380、假如:Flume收集到的数据很多个小文件,我需要写MR处理时将这些文件合并

(是在MR中进行优化,不让一个小文件一个MapReduce)

他们公司主要做的是中国电信的流量计费为主,专门写MR。

二十六、面试题(2道):

 

以下题目不必都做完,挑最擅长的即可。

 

381:RTB广告DSP算法大赛

请按照大赛的要求进行相应的建模和分析,并详细记录整个分析处理过程及各步骤成果物。

382:cookieID识别

我们有M个用户N天的的上网日志:详见58.sample

字段结构如下:

ip                  

string

客户端IP

ad_id              

string

宽带ADSL账号

time_stamp         

string

上网开始时间

url                

string

URL

ref                

string

referer

ua                 

string

User Agent

dest_ip            

string

目标IP

cookie              

string

cookie

day_id             

string

日期

 

58.com 的cookie值如:

bangbigtip2=1; bdshare_firstime=1374654651270; CNZZDATA30017898=cnzz_eid%3D2077433986-1374654656-http%253A%252F%252Fsh.58.com%26ntime%3D1400928250%26cnzz_a%3D0%26ltime%3D1400928244483%26rtime%3D63; Hm_lvt_f5127c6793d40d199f68042b8a63e725=1395547468,1395547513,1395758399,1395759468; id58=05dvZ1HvkL0TNy7GBv7gAg==; Hm_lvt_3bb04d7a4ca3846dcc66a99c3e861511=1385294705; __utma=253535702.2042339925.1400424865.1400424865.1400928244.2; __utmz=253535702.1400424865.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); city=sh; pup_bubble=1; __ag_cm_=1400424864286; myfeet_tooltip=end; ipcity=sh%7C%u4E0A%u6D77

其中有一个属性能标识一个用户,我们称之为cookieID。

请根据样例数据分析出58.com的cookieID。

要求详细描述分析过程。

 

二十七、面试题(7道):

 

383、解释“hadoop”和“hadoop生态系统”两个概念。

384、说明Hadoop 2.0的基本构成。

385、相比于HDFS1.0, HDFS 2.0最主要的改进在哪几方面?

386、试使用“步骤1,步骤2,步骤3…..”说明YARN中运行应用程序的基本流程。

387、“MapReduce 2.0”与“YARN”是否等同,尝试解释说明。

388、MapReduce 2.0中,MRAppMaster主要作用是什么,MRAppMaster如何实现任务容错的?

389、为什么会产生yarn,它解决了什么问题,有什么优势?

 

二十八、面试题(6道):

 

390、集群多少台,数据量多大,吞吐量是多大,每天处理多少G的数据?

391、自动化运维了解过吗,你们是否是自动化运维管理?

392、数据备份,你们是多少份,如果数据超过存储容量,你们怎么处理?

393、怎么提升多个JOB同时执行带来的压力,如何优化,说说思路?

394、你们用HBASE存储什么数据?

395、你们的hive处理数据能达到的指标是多少?

二十九、面试题:

396、请说说hadoop1的HA如何实现?

三十、面试总结

397、Hadoop体系结构(HDFS与MapReduce的体系结构)、Hadoop相比传统数据存储方式(比如mysql)的优势?

398、Hadoop集群的搭建步骤、Hadoop集群搭建过程中碰到了哪些常见问题(比如datanode没有起来)、Hadoop集群管理(如何动态增加和卸载节点、safe mode是什么、常用的命令kill等)?

399、HDFS的namenode与secondarynamenode的工作原理(重点是日志拉取和合并过程)、hadoop 1.x的HDFS的HA方案(namenode挂掉的情况如何处理、datanode挂掉的情况如何处理)?

400、HDFS的常用shell命令有哪些?分别对应哪些Client Java API?:显示文件列表、创建目录、文件上传与下载、文件内容查看、删除文件

401、HDFS的文件上传与下载底层工作原理(或HDFS部分源码分析):FileSystem的create()和open()方法源码分析?

402、MapReduce计算模型、MapReduce基础知识点(MapReduce新旧API的使用、在linux命令行运行MapReduce程序、自定义Hadoop数据类型)?

403、MapReduce执行流程:“天龙八步”,计数器、自定义分区、自定义排序、自定义分组、如何对value进行排序:次排序+自定义分组、归约?

404、MapReduce的shuffle工作原理、MapReduce工作原理(MapReduce源码、InputStream源码、waitForCompletion()源码)、jobtracker如何创建map任务和reduce任务是面试的重点。

405、MapReduce进阶知识:Hadoop的几种文件格式、常见输入输出格式化类、多输入多输出机制、MapReduce的常见算法(各种join原理和优缺点、次排序和总排序)?

406、MapReduce性能优化(shuffle调优、压缩算法、更换调度器、设置InputSplit大小减少map任务数量、map和reduce的slot如何设置、数据倾斜原理和如何解决)?

407、HBase的体系结构和搭建步骤、shell命令与Java API、HBase作为MapReduce的输入输出源、高级Java API、工作原理(重点是combine和split原理)、行键设计原则、性能优化?

408、Hive的工作原理、两种元数据存放方式、几种表之间的区别、数据导入的几种方式、几种文件格式、UDF函数、性能调优(重点是join的时候如何放置大小表)?

409、Zookeeper、Flume、Pig、Sqoop的基本概念和使用方式,ZooKeeper被问到过其如何维护高可用(如果某个节点挂掉了它的处理机制)?

410、Hadoop2:体系结构、HDFS HA、YARN?

三十一、面试题

411、关系型数据库和非关系型数据库的区别?

提示:

关系型数据库通过外键关联来建立表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。

对数据库高并发读写、高可扩展性和高可用性的需求,对海量数据的高效率存储和访问的需求,存储的结构不一样,非关系数据库是列式存储,在存储结构上更加自由。

412、hive的两张表关联,使用mapreduce是怎么写的?

提示:打标记笛卡尔乘积

413、hive相对于Oracle来说有那些优点?

提示:

hive是数据仓库,oracle是数据库,hive能够存储海量数据,hive还有更重要的作用就是数据分析,最主要的是免费。

414、现在我们要对Oracle和HBase中的某些表进行更新,你是怎么操作?

提示:

disable '表名'

     alter '表明', NAME => '列名', VERSIONS =>3

    enable '表名'

415、HBase接收数据,如果短时间导入数量过多的话就会被锁,该怎么办? 集群数16台 ,高可用性的环境。

参考:

通过调用HTable.setAutoFlush(false)方法可以将HTable写客户端的自动flush关闭,这样可以批量写入数据到HBase,而不是有一条put就执行一次更新,只有当put填满客户端写缓存时,才实际向HBase服务端发起写请求。默认情况下auto flush是开启的。

416、说说你们做的hadoop项目流程?

417、你们公司的服务器架构是怎么样的(分别说下web跟hadoop)?

418、假如有1000W用户同时访问同一个页面,怎么处理?

提示:优化代码、静态化页面、增加缓存机制、数据库集群、库表散列。。。

419、怎样将mysql的数据导入到hbase中? 不能使用sqoop,速度太慢了

提示:

A、一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。

B、hbase里面有这样一个hfileoutputformat类,他的实现可以将数据转换成hfile格式,通过new 一个这个类,进行相关配置,这样会在hdfs下面产生一个文件,这个时候利用hbase提供的jruby的loadtable.rb脚本就可以进行批量导入。

420、在hadoop组中你主要负责那部分?

     提示:负责编写mapreduce程序,各个部分都要参加

421、怎么知道hbase表里哪些做索引?哪些没做索引?

  提示:

有且仅有一个:rowkey,所以hbase的快速查找建立在rowkey的基础的,而不能像一般的关系型数据库那样建立多个索引来达到多条件查找的效果。

422、hdfs的原理以及各个模块的职责

423、mapreduce的工作原理

424、map方法是如何调用reduce方法的

425、fsimage和edit的区别?

   提示:fsimage:是存储元数据的镜像文件,而edit只是保存的操作日志。

426、hadoop1和hadoop2的区别?

提示:

(1) hdfs的namenode和mapreduce的jobtracker都是单点。

(2) namenode所在的服务器的内存不够用时,那么集群就不能工作了。

(3)mapreduce集群的资源利用率比较低。

    单NN的架构使得HDFS在集群扩展性和性能上都有潜在的问题,在集群规模变大后,NN成为了性能的瓶颈。Hadoop 2.0里的HDFS Federation就是为了解决这两个问题而开发的。扩大NN容量,共享DN数据,且方便客户端访问。

427、hdfs中的block默认报错几份?

提示:3份

428、哪个程序通常与nn在一个节点启动?并做分析

提示:jobtrack,将两者放在一起,减少网络访问,IO访问的时间,提高了效率。

429、列举几个配置文件优化?

430、写出你对zookeeper的理解

提示:大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)。目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器。

ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用。

431、datanode首次加入cluster的时候,如果log报告不兼容文件版本,那需要namenode执行格式化操作,这样处理的原因是?

提示:

这样处理是不合理的,因为那么namenode格式化操作,是对文件系统进行格式化,namenode格式化时清空dfs/name下空两个目录下的所有文件,之后,会在目录dfs.name.dir下创建文件。

        文本不兼容,有可能时namenode 与 datanode 的 数据里的namespaceID、clusterID不一致,找到两个ID位置,修改为一样即可解决。

432、谈谈数据倾斜,如何发生的,并给出优化方案。

原因:

(1)key分布不均匀

(2)业务数据本身的特性

(3)建表时考虑不周

(4)某些SQL语句本身就有数据倾斜

map处理数据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀的分配到各个reduce中,就是解决数据倾斜的根本所在。

优化:参数调节;

433、介绍一下HBase过滤器

434、mapreduce基本执行过程

435、谈谈hadoop1和hadoop2的区别

436、谈谈HBase集群安装注意事项?

提示:

需要注意的地方是 ZooKeeper的配置。这与 hbase-env.sh 文件相关,文件中 HBASE_MANAGES_ZK 环境变量用来设置是使用hbase默认自带的 Zookeeper还是使用独立的ZooKeeper。HBASE_MANAGES_ZK=false时使用独立的,为true时使用默认自带的。

某个节点的HRegionServer启动失败,这是由于这3个节点的系统时间不一致相差超过集群的检查时间30s。

判断题:

437、Ganglia不仅可以进行监控,也可以进行告警。(  )

438、Nagios不可以监控Hadoop集群,因为它不提供Hadoop支持。(  )

439、 如果NameNode意外终止,SecondaryNameNode会接替它使集群继续工作。(  )

440、 Cloudera CDH是需要付费使用的。(  )

441、 Hadoop是Java开发的,所以MapReduce只支持Java语言编写。(  )

442、 Hadoop支持数据的随机写。(  )

443、NameNode负责管理metadata,client端每次读写请求,它都会从磁盘中读取或则会写入metadata信息并反馈client端。(  )

444、NameNode本地磁盘保存了Block的位置信息。(  )

445、Slave节点要存储数据,所以它的磁盘越大越好。(  )

446、Hadoop默认调度器策略为FIFO,并支持多个Pool提交Job。(  )

447、集群内每个节点都应该配RAID,这样避免单磁盘损坏,影响整个节点运行。(  )

448、因为HDFS有多个副本,所以NameNode是不存在单点问题的。(  )

449、每个map槽就是一个线程。(  )

450、Mapreduce的input split就是一个block。(  )

451、Hadoop环境变量中的HADOOP_HEAPSIZE用于设置所有Hadoop守护线程的内存。它默认是200MB。(  )

452、DataNode首次加入cluster的时候,如果log中报告不兼容文件版本,那需要NameNode执行“hadoop namenode -format”操作格式化磁盘。(  )

453、Hadoop1.0和2.0都具备完善的HDFS HA策略。()

454、GZIP压缩算法比LZO更快。()

455、PIG是脚本语言,它与mapreduce无关。()

456、例举hadoop中定义的最常用的InputFormats,哪个是默认的?

   提示:DBInputFormat、FileInputFormat(KeyValueTextInputFormat、NlineInputFormat、TextInputFormat)

   默认:TextInputFormat

457、TextInputFormat 和KeyValueInputFormat类之间的不同之处在于哪里?

   提示:TextInputFormat中的key表示行的偏移量,value是行文本内容

   KeyValueInputFormat的key value 是通过第一个制表符进行划分的

458、hadoop中的InputSplit是什么?

  提示:每一个map任务单独处理的数据单位,可以决定单个mapper任务处理的大小。默认大小与block一样大

459、hadoop框架中文件拆分时如何被触发的?(block是怎么触发)

  提示:客户端上传文件时为从namenode申请的ID和位置

460、hadoop中RecordReader的目的是什么?

  提示:将InputSplit的数据解析成键值对

461、如果hadoop中没有定义定制分区,那么如何在输出到reducer前执行数据分区?

462、什么是Combiner?举个例子,什么时候使用combiner,什么时候不使用?

463、什么是jobtracker?jobtracker有哪些特别的函数

    提示:jobtracker负责接收用户提交的作业,负责启动、跟踪任务执行。是一个rpc服务端

    jobtracker有哪些特别的函数:JobSubmitProtocol

464、什么是tasktracker?

    提示:mr的客户端,接收jobtracker的发出的指令,用来执行任务的

465、hadoop中job和task之间是什么关系?

   提示:执行一次mr程序就是一个job,job再执行时会划分maptask,reducetask。task是job运行作业的一个重要组成部分。

466、假设hadoop一个job产生100个task,并且其中的一个task失败了,hadoop会怎样处理?

    提示:hadoop容错机制,当一个任务执行失败,jobTracker 发送命令重新执行,如果重新执行四次也不行,任务执行失败

  (mapred-site.xml配置文件里<name>mapred.max.attemp<name>

                              <value>4</value>

467、hadoop推测执行时如何实现的?

468、Linux中使用命令行,如和查看hadoop集群中所有运行的任务?或是kill掉任务?

   提示:hadoop job -list

         hadoop job -kiil 进程名

469、什么hadoop streaming?

提示:指的是用其它语言处理

三十二、面试题:

470、谈谈整个hadoop的生态圈

471、Hadoop集群的优化

472、Hive优化

473、Hadoop1与hadoop2有何异同点

474、有关项目细节,产生的日志量多大,集群规模,处理数据要用多久

475、Hive的sort by和order by的区别

476Hive里面用什么代替in查询

提示:Hive中的left semi join替换sql中的in操作

477简述HBase的瓶颈

提示:HBase的瓶颈就是硬盘传输速度。HBase的操作,它可以往数据里面insert,也可以update一些数据,但update的实际上也是insert,只是插入一个新的时间戳的一行。Delete数据,也是insert,只是insert一行带有delete标记的一行。Hbase的所有操作都是追加插入操作。Hbase是一种日志集数据库。它的存储方式,像是日志文件一样。它是批量大量的往硬盘中写,通常都是以文件形式的读写。这个读写速度,就取决于硬盘与机器之间的传输有多快。而Oracle的瓶颈是硬盘寻道时间。它经常的操作时随机读写。要update一个数据,先要在硬盘中找到这个block,然后把它读入内存,在内存中的缓存中修改,过段时间再回写回去。由于你寻找的block不同,这就存在一个随机的读。硬盘的寻道时间主要由转速来决定的。而寻道时间,技术基本没有改变,这就形成了寻道时间瓶颈。

478、Jvm的4个引用

提示:强引用就是不会被GC回收  软引用在jvm报告内存不足时候才会被回收 弱引用于软引用相似 虚引用是跟踪对象被GC回收的状态。

479、    mapreduce的一些配置参数优化

480ArrayList、Vector、LinkedList的区别及其优缺点?HashMap、HashTable的区别及优缺点?

提示:

ArrayList 和Vector是采用数组方式存储数据的,是根据索引来访问元素的,都可以根据需要自动扩展内部数据长度,以便增加和插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以索引数据快插入数据慢,他们最大的区别就是synchronized同步的使用。

LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList

HashMap、HashTable的区别及其优缺点:

HashTable 中的方法是同步的 HashMap的方法在缺省情况下是非同步的 因此在多线程环境下需要做额外的同步机制。
HashTable不允许有null值 key和value都不允许,而HashMap允许有null值 key和value都允许 因此HashMap 使用containKey()来判断是否存在某个键。
HashTable 使用Enumeration ,而HashMap使用iterator。
Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类。

481MapReduce中排序发生在哪几个阶段?这些排序是否可以避免?为什么?

提示:

一个MapReduce作业由Map阶段和Reduce阶段两部分组成,这两阶段会对数据排序,从这个意义上说,MapReduce框架本质就是一个Distributed Sort。在Map阶段,在Map阶段,Map Task会在本地磁盘输出一个按照key排序(采用的是快速排序)的文件(中间可能产生多个文件,但最终会合并成一个),在Reduce阶段,每个Reduce Task会对收到的数据排序,这样,数据便按照Key分成了若干组,之后以组为单位交给reduce()处理。很多人的误解在Map阶段,如果不使用Combiner便不会排序,这是错误的,不管你用不用Combiner,Map Task均会对产生的数据排序(如果没有Reduce Task,则不会排序, 实际上Map阶段的排序就是为了减轻Reduce端排序负载)。由于这些排序是MapReduce自动完成的,用户无法控制,因此,在hadoop 1.x中无法避免,也不可以关闭,但hadoop2.x是可以关闭的。

482编写MapReduce作业时,如何做到在Reduce阶段,先对Key排序,再对Value排序?

提示:

该问题通常称为”二次排序“,最常用的方法是将Value放到Key中,实现一个组合Key,然后自定义Key排序规则(为Key实现一个WritableComparable)。

483、如何使用MapReduce实现两个表join,可以考虑一下几种情况:(1)一个表大,一个表小(可放到内存中);(2)两个表都是大表?

提示:

第一种情况比较简单,只需将小表放到DistributedCache中即可;第二种情况常用的方法有:map-side join(要求输入数据有序,通常用户Hbase中的数据表连接),reduce-side join,semi join(半连接),具体资料可网上查询。

 

  484、讲一下垃圾回收算法

  485、大数据建模和清洗

  486、聚类算法

  487、ssh锁涉及到权限

  488、hive如何优化

  489、linux如何合并文件

  490、两个文件,每一个都是几百个亿条数据,都有订单字段,这两个表,如何关联,效率最高?

  491、HBase如果只向一个RegionServer写入数据,有什么优点?

 492、java如何实现高并发?

 493、HashMap、TreeMap区别,以及TreeMap原理

 494、HBase一行数据如何存储?

 495、Spring用过哪些组件?

 496、如果有几百亿条数据,如果在表中存放?

 497、mapreduce全排序原理。

© 著作权归作者所有

共有 人打赏支持
超人学院
粉丝 107
博文 335
码字总数 388917
作品 0
昌平
CTO(技术副总裁)
[CSS]打败 IE 的葵花宝典:CSS Bug Table

打败 IE 的葵花宝典:CSS Bug Table标签:css, haslayout, IEFeatured, 资源共享 原文发表于:Alipay UED Blog – 打败 IE 的葵花宝典:CSS Bug Table 作为一名前端,我们通常要做的就是让页面...

xcntime
2010/08/11
0
0
这里有几个高手常用的信息渠道

2017已经远去,也许,在忙碌中劳累了自己;也许,在追逐中迷失了自己;也许,在无聊中,打发了自己。但是,这一切都不要在意,2018年接着给力! 人和人之间的差距,往往来源于信息和认知。关...

imbrl71u7pt5x29rleu7
01/04
0
0
java中Redis5大基本类型的用法

redis存储格式 基本用法 Jedis工具类 redis配置文件 String测试 Hash测试 List测试 Set测试 SortedSet 测试 本文转载自【JAVA葵花宝典】 公众号内回复“1”带你进粉丝群...

程序员之家_
09/07
0
0
教你面试,当心别把简历写成了提纲

前言 这是这篇专栏的第一篇文章,所以让我们从基础开始讲起。不论需要面试什么岗位, 需要做什么准备, 有一样是一定绕不开的,那就是简历。 如何写一封优秀的简历是一个困难的事情,也不是你...

天师小白
08/18
0
0
程序员的江湖:从黑木崖到回龙观

本文来自:腾云阁 大学的男生宿舍楼叫黑木崖,黑木崖里并没有圣女,圣女都在对面的女生宿舍楼---移花宫。黑木崖里每天关灯夜谈,除了讨论对面的女孩,就是讨论金庸小说中哪种武功最厉害。 东...

风铃无声江舟听雨
2017/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash脚本输入参数的使用

Bash脚本输入参数的使用 Bash脚本传入的参数,在脚本中以位置的形式进行访问,即 $n 。例如,$1 为执行脚本的第一个参数,$2 为执行脚本的第二个参数。另外Bash中还提供了一些其它的便捷操作...

小陶小陶
15分钟前
1
0
多线程场景下,触发OOM的线程是否会影响其他线程的工作

public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { int i = 0;......

麦馍
19分钟前
2
0
模拟Dubbo的zookeeper一致性Hash发现

接之前一篇<手写zookeeper来模拟dubbo的注册/发现>,使用一致性Hash来进行查找需要寻找的服务. Hash处理接口 public interface HashFunc { public Long hash(Object key);} 一致性Has...

算法之名
31分钟前
13
0
#mysql50# not Exist

data 目录有中文名称,可能是复制的"复件...."

少年不搬砖老大徒伤悲
44分钟前
1
0
在yii2中,让你action参数支持POST数据的小方法

我们先来看一段代码 class RaController extends Controller { public $enableCsrfValidation = false; public function actionSay($username = '',$city = ''){ echo "{$......

阿北2017
53分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部