大数据一些知识体系

编程套路

	关注的点:
		1.技术的起源
		2.技术的设计思路
		
		JDBC程序的编写复杂么?
			1、注册驱动类
				Class.forName("com.jdbc.mysql.Driver")
			2、获取连接
				Connection conn = DriverManager.getConnection()
			3、获取Statement
				Statement stat = conn.createStatement()
			4、执行SQL语句
				stat.executeQuery(sql)
			5、解析结果

		MyBatis程序的编写套路:
			1、加载配置文件sqlMapConfig.xml
			2、创建一个SessionFactory
			3、通过SessionFactory获取一个SQLSession
			4、通过SQLSession执行增删改查
			5、处理结果

		mapreduce的编写套路:

			1、编写mapper
				public void map(T key, S value, Context context){
					//业务逻辑实现
				}
			2、编写reducer
				public void reduce(T key, Iterale<S> values, Context context){
					// 聚合逻辑
				} 
			3、编写Driver
				job

				job.setXXX
				job.setXXx

				job.waitForCompetition()
				job.submit()
			4、打包提交到集群运行
				hadoop jar xx.jar com.aura.wc.WordCount /input/ /output/


学习新知识的套路:进入官网	1.get started  /  quick start  快速开始 
	            	    2.查看详细文档

1、布隆过滤器

2、Hash散列

3、BitMap: 降低内存的使用量。 操作复杂度有所上升的。

位图
找出100G的数据中,出现次数为2次的元素  并且给定的内存有限
要求出出现次数为3次的  怎么做?

简化:
有一批数据,是从1-10000, 请给我找出不存在的元素  并且给定的内存有限

排序: 计数排序

存在不存在用1位
		0
		1
1次 2次用2位
		00
		01
		10
		11
3次 4次 5次 6次 用3位
		000
		001
		010
		011
		100
		101
		110
		111

4、堆

HDFS
hbase   布隆过滤器
es
kafka

mysql  的索引: B+树

5、双层桶划分

桶

hive的分区:手动建立, 数据不一定是完美的分区的
hive的分桶:经过算法严格校验

6、数据库索引

索引:提高查询效率的

B+树    二分查找

7、倒排索引

瓷器	2394832479	https://baijiahao.baidu.com/s?id=1576691292237237771&wfr=spider&for=pc
瓷器	20340238        https://www.douban.com/group/topic/116057022/?type=like

根据ID 找文档 很容易

根据身份证编号找人  容易
根据姓名找人        身份证里面  

现在有10本书
	请找出编号为3的书
	1	hadoop权威指南
	2	算法导论
	3	编程珠玑
	.....

	请找出书中有讨论hadoop的书
	实现的复杂度很高

	hadoop权威指南	hadoop(233) spark(44)  flink(5)
	算法导论	HDFS mapreduce hadoop(66)
	编程珠玑	java hdfs

	html1		key1  key2  key3 ...
	html2		key2	key4	kye7
	......
	key1   html1
	key2	html1  html2

	HDFS		编程珠玑	算法导论
	hadoop		hadoop权威指南(233)	算法导论(66)	abc(20)
	spark		hadoop权威指南
	flink		hadoop权威指南
	mapreduce	算法导论
	java		编程珠玑
	PageRank算法

大数据   从谷歌来的   hadoop  三篇论文

nutch
lucene
es
hbase
hdfs
mapreduce

提高计算和存储效率

	storm
	mahout
	ambari
	sqoop
	....

8、外排序
重点 排序掌握:timsort
归并排序

	两个效果:

	1、合并
	2、排序

本质原理:

	把两个有序数组 合并一个

	把两个有序文件合并成一个文件

9、Trie树

字典树

10、分布式解决方案:MapReduce或者Spark

通用解决方案


求TopN
求交集
判断元素存在不存在
求元素出现不出现
求元素出现几次
.....

程序:
数据结构 + 算法
分布式场景中,最复杂的就是优化

十个题目:
题目1: 怎么实现hive不支持的a.id > b.id ?

1、select a.id,a.name, b.id, b.age from a join b on a.id = b.id;
MR去实现:  ReduceJoin  MapJoin

2、select a.id,a.name, b.id, b.age from a join b on a.id > b.id;
当前这个SQL语句不能执行。!    hive不支持非等值链接。!!
hive不支持这种语法。!!!   hive -e "select a.id,a.name, b.id, b.age from a join b on a.id > b.id"
怎么做?

1、in exists  0.8以前不支持。   semi join 
select a.* from a where a.id in(select b.id from b);

2、on a.id > b.id;   理论 和 宏观上  MR了!!!  怎么实现?

3、笛卡尔积


student
id,name,sex,age,department

select age,count(*) as total from student group by age;
select department, max(age) as maxage from student group by department;

	mapper阶段:
		
		key: department
		value: age

		把一条记录编程(department,age)的一个key-value

			map   ======映射=====>    record ---> key-value

	reducer阶段:

		每一组就是一个部门
		求出这个部门中的所有年龄中的最大值
		context.write(department, maxage);

	max
	min
	avg
	sum
	count
	distinct

	WordCount :  sum count

in/exists

select department, count(*) as total from student where id in (17,18,19,20) group by department;

	mapper阶段:

		key: department 
		value: 1或者0

		if(id in(17,18,19,20)){
			context.write(department, 1)
		}else{
			// 不做输出,没有也可
		}

join

	a(id, name)  b(id, age)
	select a.*, b.* from a join b on a.id = b.id;

	reducejoin
		是一种通用的join实现方式,最大的缺点就是有可能会有数据倾斜
	mapjoin
		最大的优势,就是用来避免数据倾斜.
		但是只能适用大小表关联


	select a.*, b.* from a join b on a.id > b.id;
	hive不支持这种语法!!!!!

	但是如果非要实现类似的业务逻辑效果,请问如何适用maprecuce去实现?

	a(100000000, 1)    b(10000000, 1)
	请思考如何去做?

题目2: 网银支付的原理!!

网银支付
	本地安装数字证书
	拿到银行给你的网银盾
	输入这个网银盾生成的随机密码
	再输入密码
	支付成功
微信 + 支付宝
分期 + 白条

SSH 配置免密登陆的原理

一种加密算法
	RSA: 非对称加密算法

这种算法会生成一堆秘钥:公钥和私钥

		id_rsa		私钥
		id_rsa.pub	公钥(网银支付中的数字证书)

	如果使用这一对功秘钥中的任意一个加密一个字符串
	只有另外一个秘钥能够解密,其他都不能

	String miwen = id_rsa(mingwen)
	String mingwen = id_rsa.pub(miwen)

	密文 明文
	root
	root	84321832-4812358oj2u34pu10329841324j
	明文	密文

	种子  身份校验
	其实网银盾: 按照某种套路,生成一个固定长度的随机数值
		     银行内部也有相同的计算逻辑

题目3: 秒杀的实现思路

秒杀:
	点杀  秒杀    瞬间干死

	假如现在有1000个镶砖石的iphone纪念版手机
	2020-11-11 2:00:00 准时开发购买

	准备在这个时刻,服务器会接收暴涨的流量(请求)

	1000W人在抢1000部手机
	
你如何设计?

层层过滤
	
	1、点击购买(js就把你拒绝了, 相当于你的请求压根就没发送)
		可以过滤绝大部分请求。
		余下来的可以发送给服务器
	
	2、服务器接收到的请求是不是应该刚好是1000个呢?
		因为有些请求的处理会失败
		任务队列,把每个请求放置在任务队列中
		处理的时候每次从任务队列中取出一个请求
		进行处理
		处理成功
		1000 - 1

	在js把你过滤掉和服务器把你过滤掉。 有区别么?

	对用户来说没区别
	但是对于服务器来说
	区别可大了

LOL   IG   思聪: 从转发他的微薄用户中抽取113位用户。每人发红包10000

	爆出了 微博抽奖的 逻辑

	他的规则:
		微博用户的活跃度
		原生/原创微博的量
		用户的购买消费行为等等都有关系  蓝V  大V

	抽奖的权重
		
		100
		10

	113位:  112位是女生  1位是男生

	合理之处:只要是水军,绝对不会中奖

题目4: 百度网盘 都下了 原因是什么?

	百度网盘  迅雷  飞秋
	原因?

	有时候你下一部电影:10m/s
	                    1m/s

	A同学的硬盘中存储了一步电影:txwz.avi
	B同学和A同学在一个局域网中
	B同学要去下载一步电影:天下无贼.avi

	B同学下载电影从哪里下载会使用户体验比较友好呢?

		1、从服务器下载
		2、从A同学下载

题目5: MD5的破解

把用户名和密码存储在数据库的表中:

	id	username	password
	1	root		root

	xxxxxx

	id	username	password
	1	root		md5("root")

一个算法可以破解,都是因为找到了逆向运行算法

y = f(x) = 3x + 5

	x = 5 , y = 20

y1 = f(x) = (x - 5) / 3

	x = 20,  y = 5

md5压根就没有逆向运行算法,但是还是可以破解。

原理呢?
	
	md5("root") = jldsfjlajdsfa209384013241j341l4
	md5("root") = jldsfjlajdsfa209384013241j341l4

	幂等性

	f(x, y) = x * y

全部都算一遍,然后存起来

	字典表!!!!!
	jldsfjlajdsfa209384013241j341l4  root
	2038409234sdfsdajp32u4123080834  123456

	现在编写一个程序,所有各种能作为密码字符的所有字符放在一起,
	生成长度小于10的所有的密码

	生成这些密码的所有的密文作为key, 对应的密码作为value存储起来

	以后只要拿到了密文,直接从数据库中进行匹配即可

	密码的复杂度:
		尽量包含大小写字母
		必须包含一个特殊字符
		长度尽量长一些
		
		尽量不要使用常用的密码

		root
		123456
		99999

拉杆箱

	机械锁:	3    4

	3 : 1000
	4: 10000

题目6: 红包算法

微信的红包算法

完全随机算法 
	
	1、发一个红包100块钱 10个红包

		第一个抢的人从:100中产生一个随机数45,发给他45,剩下55
		第二个抢的人从:55中产生一个随机数20发给他,剩下35
		....

	
	2、直接一口气生成10个随机数,刚好总和是100
	
		有一定的合理性,但是不是完全合理

3、概率论

	正态分布

	人类的身高就是一个正态分布
	松树的高度就是一个正太分布
	人类的寿命也是一个正态分布
		
	所有的值,基本都集中在某个范围内,越往两边走,数量越少

	165   175 

捷豹
	当着全公司所有员工的面,CTO直接就在台上进行codereivew

题目7: 网络秒传功能 怎么实现?

百度网盘:秒传功能

信息摘要生成算法
	
	txwz.avi	1.54G
	天下无贼.avi	1.54G

	使用一个信息摘要生成算法:
		hash
		md5

	md5(txwz.avi) = 32位长度的一个字符串a
	md5(天下无贼.avi) = 32位长度的一个字符串b

	如果这两个电影的内容一模一样,那么a和b的结果就是一样的。

题目8: SVN的实现原理? 论文查重!!

Git/SVN    论文是如何实现查重的?

abcdefghijklmnaaaabbbbb
abcdeoofghioojklmnaaaabbbbb

计算两个字符串的重合度

出两个题目:

1、计算两个字符串的最长公共子串
abcdefghijklmnaaaabbbbb
abcdeoofghioojklmnaaaabbbbb

2、计算两个字符串的最长公共子序列
abcdefghijklmn(a ab abc bc  ac  .... ca)
abccdeffghaijkzlmnnnnnn

3、数据压缩算法
aaaaabbbccddddddee
a5b3c2d6e2

abcdefghijknmllq3uoaljdf

大数据场景中: snappy

题目9: http://www.ip.cn/ 这个网站的 手机归属地查询 IP查询等等是怎么实现的?
是这个站点自己做的?还是怎么做的?
天气怎么实现的?

服务包装
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值