阿里技术嘉年华2013年PPT下载

总有一个适合你的 :)

阿里技术嘉年华2013年

1. 阿里分布式数据库服务原理与实践
2. 实时计算服务化实践
3. 构建一个跨机房的Hadoop集群
4. Android设备体验优化
5. 无线互联网-产品质量保证
6. 探求计算性能极限-探求计算密集应用优化的天花板
7. 基于Hadoop_HBase的一淘搜索离线系统
8. 深度学习:机器学习的新浪潮
9. 阿里分布式数据库服务原理与实践
10. 百度媒体云技术及架构
11. 后端-大型网站SEO优化实践
12. 去哪儿酒店实时搜索技术分享
13. 淘宝消息中间件技术演变
14. AB测试和灰度发布平台架构设计和实践
15. 淘宝网CRM平台架构for ADC
16. HouseMD介绍
17. Inside TAE
18. Nashorn与JDK8——动态语言在JVM上的高性能实现
19. Scala中的函数式特征与并发
20. TMS模块化页面搭建平台
21. Web页面分层交叉实验
22. 北冥神功- 新一代数据查询中间层
23. 互联网系统的稳定性保证:微博的实践
24. 基于OpenStack构建网易云主机服务
25. 架构模式与实践漫谈
26. 容量规划与授权限流降级
27. 淘宝文本中的语义分析以及技术展望
28. 天猫个性化推荐架构
29. 新一代前端代码开发与部属方案——独角兽系统功能简介
30. 让店铺飞起来
31. 商品详情页静态异步化
32. 架起前端和开发的桥梁
33. 淘宝网商品详情页静态异步化
34. 不一样的装修
35. 跨终端的文件加载及缓存
36. 开放JS在淘宝的应用
37. 你所不知道的TAE SDK
38. DBFree-阿里数据库自动化运维平台
39. CAP 理论与实践
40. iDB-阿里集团数据库服务平台
41. MySQL at NetEase
42. OceanBase0.4:从API到SQL
43. 阿里巴巴离线大数据处理平台概述
44. 阿里“去IOE”实践
45. 阿里数据同步前世今生
46. 大数据时代的月光宝盒
47. 分布式数据分析算法
48. 构建一个跨机房的Hadoop集群
49. 大众点评网高可用数据架构
50. 如何打造360 MySQL服务
51. 实时计算服务化实践
52. 实时计算平台及相关业务实践
53. 探索阿里数据藏宝图——数据地图管理实践
54. 腾讯广点通的数据挖掘
55. 小公司的服务管理和监控成长之路
56. 页面资源位监测和价值分析
57. Cascadb/TokuDB性能与适用场景分享
58. Mysql高并发热点更新性能优化
59. 开源软件的商业价值
60. CM–集群管理与负载均衡系统
61. 垂直抓取系统——EtaoSpider介绍
62. 个性化搜索技术和应用
63. 关系搜索和推荐
64. 海量商品的聚合技术及其在搜索中的应用
65. 机器学习在搜索排序中的应用
66. 基于Hadoop_HBase的一淘搜索离线系统
67. 搜索引擎和淘宝搜索不得不说的故事
68. 实时个性化系统和应用
69. 文本挖掘在电子商务场景中的应用
70. 一站式搜索服务平台-Tsearcher
71. Android动态部署与插件化的原理与实践——ATLAS
72. Android设备体验优化
73. 百度云推送介绍和架构分享
74. 无线客户端数据实战
75. 一个移动互联网技术创业的故事
76. 移动设备客户端安全
77. 移动系统中的Java虚拟机
78. 如何有效控制Andoid应用的耗电量
79. Lua wax在ios上的应用
80. Hybrid组建实践-WindVane项目简述
81. Android自动化测试
82. ios客户端稳定性
83. android app性能优化之list篇
84. iOS客户端应用测试实践
85. Fault injection实现原理与应用
86. iOS WEB自动化测试方案的探索与实践
87. 更好更快的Android自动化测试
88. 建设持续交付组织
89. 数据质量中心的设计与实现
90. 无线互联网-产品质量保证
91. 无线质量全过程保障实践
92. 不写代码实现UI自动化测试
93. 多浏览器兼容性测试平台xbrowser剖析
94. 前端无痛质量方案探索
95. 淘宝电子商务云应用安全
96. 淘宝网应用性能管理的原理和实践
97. 性能持续集成的探索和实践
98. TCPFLOW业务网络服务质量分析
99. 高性能网关产品的设计与实践
100. 海量未知木马机器分析
101. 深入理解CPU的读写及优化
102. 探求计算性能极限-探求计算密集应用优化的天花板
103. 自动化运维和数据化运维-从硬盘开始
104. 跨平台体验融合
105. 设计之外 我们还追求什么样的设计
106. 逸境人机
107. 数据可视化设计
108. Golden Age Of RTB
109. Tanx业务发展及系统架构
110. 阿里广告中的机器学习平台
111. 个性化推荐技术在广告中的应用
112. 淘宝联盟前端引擎技术发展
113. 深度学习:机器学习的新浪潮
114. 时间-兴趣耦合的IPTV用户收视模型
115. 搜索广告触发的挑战和应用
116. 淘宝DMP平台
117. 实时定向广告技术-DSP框架及算法
118. 广告中的Match新架构和CVR预估
119. 逸境人机
120. 广告引擎的索引设计实现和性能优化
121. canal产品介绍
122. Druid数据库连接池介绍
123. Dubbo开源
124. Fastjson介绍
125. Introduction to KISSY
126. MySQL复制
127. OceanBase介绍
128. tengine介绍
129. Tsar介绍
130. OpenStack Summit Intel Efforts
131. 纠错码技术在hadoop分布式文件系统的应用
132. 利用固态硬盘解决存储瓶颈

Hadoop MapReduce学习笔记1

Hadoop MapReduce是比较经典的Master/Slave架构设计,系统主要包括两大模块:

  • JobTracker : 也就是我们所说的Master, 包括资源管理功能和作业调用功能;
  • TaskTracker : Slave模块,或者称为Worker,任务执行的节点;

JobTracker中资源管理

  1. Hadoop以slot(槽位)代表计算资源,包括一定的内存和cpu核,具体细分为Map Slot和Reduce Slot,一个Task可占用多个slots;一个TaskTracker可划分多个slots(可配置), slots间的资源隔离目前hadoop做的不是太好;
  2. TaskTracker作为具体的执行单元,采用pull的的方式拉取任务,TaskTracker会定期的向JobTracker发送心跳,心跳的信息包括:我还活着,TaskTracker中运行的task的状态,如果有空闲的slots的话,向JobTracker表明我有空闲资源,JobTracker以心跳应答的方式向TaskTracker分配新的Task;
  3. JobTracker不会主动的和TaskTracker联系,只会接收心跳,然后再应答中向TaskTracker发送指令,如启动Task, 杀死Task;如果长时间未收到TaskTracker的心跳,表明TaskTracker可能已宕机,则会重启TaskTracker上已经分配的任务到其他的TaskTracker中;
  4. 任务的调度策略:默认简单任务调度策略FIFO,可用户自定义任务的调度策略;

JobTracker中的作业控制

  1. Hadoop将作业分为三个层次:
    • 作业: 用户提交的作业,使用JobInProgress控制作业的运行状态,包含多个Tasks
    • Tasks: 包括Map Task 和 Reduce Task: 使用TaskInProgress控制任务的运行状态,可能包含多个Task Attempt.
    • Task Attempt : 某个Task的运行一次尝试,这里采用的类似two-phase commit的协议,因为jobtracker可能会针对同一Task启动两个Attempt(谁先执行完,使用谁的计算结果,并把另外一个杀掉),然后才会提交task attempt的结作为Task的计算结果,在TaskTracker中执行.
  2. JobTracker会从TaskTracker的心跳汇聚TaskAttempt的运行状态,然后调度未完成的task,分配给TaskTracker.
clipboard

c++中const变量问题的简单分析

今天同事问了关于const 值被更改的问题,这个问题在面试中也会经常被问到,所以专门写篇博客总结下。

代码如下

输出结果:a:10 p:20

简单分析:

其实针对该问题,原因比较简单,在printf调用中,由于a是常量,编译器做了优化,将a的值直接替换为10,所以在后续对a的内存位置进行更改为20时,并未对printf的a参数影响。当然,同事并未相信我的分析,我只能调用汇编后的代码进行分析。

深度分析:

1. 生成汇编代码:

g++ -S test.cpp   # 输出的汇编代码位于test.s中

2. 汇编代码如下:


根据第26行,验证了我上述的分析,此时同事想让我讲下整个汇编代码的逻辑(我心里暗喜,刚好最近在上@林士鼎 的课程,顺便复习下)
3. 函数调用的知识
理解函数调用栈,有几个概念需要事先明确:
a. 栈的增长方式由高到低(大学课本里早就会背了,但是要真正理解)
b. 参数传递方式:寄存器 + 栈
c. %rsp : 栈头指针 , push pop会更改对应的指针值
d. %rbp : 帧指针, 这个概念非常重要,当前函数的栈的起始位置,
使用%rbp + offset访问局部变量及传递的参数,下面这张图是@林士鼎 老师的课件中某个图

4. 汇编分析:

main:
.LFB2:
pushq %rbp    # 将原来的帧指针保存
.LCFI0:
movq %rsp, %rbp   # 将当前%rsp 保存至%rbp, 当前帧
.LCFI1:
subq $32, %rsp   # 将栈下移32Bytes, 这32字节保存了main的参数和main中局部变量
.LCFI2:
movl %edi, -4(%rbp)   # 取 argc的值
movq %rsi, -16(%rbp)    # 取argv的值, 为何会占12Bytes呢? 后续分析
movl $10, -20(%rbp)    # 将10赋值给a
leaq -20(%rbp), %rax   #取a的地址到%rax
movq %rax, -32(%rbp)     #将a的地址赋值给p(int *), 32的偏移有待分析
movq -32(%rbp), %rax    # 去p的值到%rax
movl $20, (%rax)     # 对*p赋值
movq -32(%rbp), %rax
movl (%rax), %edx   #这两步相当于*p,同时将其赋值到寄存器作为printf的参数
movl $10, %esi     #传递10参数(其实是a)
movl $.LC0, %edi    # "a:%d p:%d\n"
movl $0, %eax   #这个作用稍后分析
call printf
movl $0, %eax  #main函数的返回值
leave
ret

变量在栈的位置分布情况:


5. 其他问题分析:

a. 为何argv 和 p在栈的位置偏移异常,这里主要是因为argc 和a 的大小为4Bytes,  而系统是64Bits, 所以存在8Bytes对齐,
这里可以验证,在a后面单独声明一个b变量,发现其在栈的空间刚好为间隙的位置

b.  movl $0, %eax   这句话的作用:当对于变参的参数传递时,%eax标示的使用vector register的数目(可以向printf传递float类型参数进行验证)

参考资料:

1. http://stackoverflow.com/questions/6212665/why-is-eax-zeroed-before-a-call-to-printf

2. http://yaronspace.cn/blog/archives/1347