最近又要做实验又要准备面试,有点乱,所以做个计划。
一共三条线:坦克线,辅助线,法师线。
坦克线——基础
- 数据结构
- 算法
- 面向对象
- JVM
- 并行编程
- 其他
《程序员面试金典》
数据结构 | 算法 | 概念 |
---|---|---|
链表 | 广度优先搜索 | 位操作 |
二叉树 | 深度优先搜索 | 单例设计模式 |
单词查找树 | 二分查找 | 工厂设计模式 |
栈 | 归并排序 | 内存(栈和堆) |
队列 | 快速排序 | 递归 |
向量/数组/列表 | 树的插入/查找等 | O时间 |
散列表 | KMP算法 |
掌握具体实现(数据结构和算法)、用法、应用场景、空间和时间复杂度
辅助线——云计算方向
毕竟企业级的架构跟学校象牙塔里的不一样。加上面试一般一面求广度,二面求深度,最后打塔之前,总要打小兵练到四级以上才能携小兵队伍攻占第一个塔。
In General
企业里面根据业务会分成不同的部门,但是数据资源是共享的(真的吗?但愿吧),于是就会调用各种接口来完成各部门的业务。
Specific Example 1:阿里云梯分布式计算平台整体架构
宝宝虽然主攻云梯1,但是它周围的模块:调度系统,输入:Gateway Servers, 输出:各种业务,也都是要熟悉的。ps. 这只是某电商平台的架构,注重的还是业务,运营分析之类,下面介绍某搜索引擎,面对大量的计算任务,有更优的解决方案。
Specific Example 2:百度分布式计算平台
百度很厉害的是还提出 DAG计算引擎 和 流式shuffle
参考文献:
《从BAT看企业构建大数据体系的六层级》
岗位要求
今日头条:
1、能快速理解业务遇到的实际问题
2、对大规模分布式系统感兴趣
3、有一定的系统设计&编码能力,追求优雅的设计和优秀的代码质量,高标准,快速行动
4、对存储、计算、消息队列、集群管理中的一项或多项有理解、认识或经验者优先
百度云计算事业部
-计算机或相关专业本科以上学历,三年以上Java语言为主的大中型软件开发经验
-数据结构和算法基础扎实,了解常用设计模式,熟悉J2EE相关编程和框架,如Spring Boot/Cloud,mybatis等
-对OOA\OOD\OOP等思想有深入的理解以及很强的应用能力,有较强业务需求建模能力和业务架构设计能力,熟悉UML设计
-熟悉MySQL数据库设计和优化,有NoSQL 数据库使用经验者优先
-熟悉微服务架构并进行过微服务改造的优先
-熟悉**Linux操作系统和Shell脚本,**Python编程优先
-有过前端开发经验,熟悉Bootstrap,ReactJS的优先
-熟悉Hadoop, Spark, Kafka, Flume, Scala等相关技术的优先
-有代码洁癖,熟悉持续集成,敏捷过程的优先
-良好的沟通能力和团队协作精神,严谨的工作态度与高质量意识,良好的抗压能力
ps“熟悉”,哦,呵呵。自己差得很远。
基础知识
系统设计
http://blog.csdn.net/gugemichael/article/details/36688043
Linux
常用命令
- sed
- awk
- grep
Shell脚本
Kafka
官网链接
可以把它想象成一个布告栏,当有很多很多数据要发布的时候,就先push到布告栏(对磁盘的写入,非内存,commit操作将从内存写入转到磁盘)里,然后学生们consumer根据自己感兴趣的Topic,来拉取pull消息。
1. 架构
1.1 producer
1.2 布告栏broker——分布式存储, broker的老大叫controller, partitions的老大叫leader.
哪里有变化,controller就去哪里注册watcher, 然后更新state
1.3 consumer
1.4 传输
-producer delivery guarantee: at lease once
-consumer delivery guarantee: 取决于先commit还是先处理数据再commit.
两阶段提交
2. zookeeper
Hadoop
计算框架
- Mapreduce
- Spark
- DAG计算框架
资源管理
- YARN
- Mesos
存储
综述
1. Hive
2. HDFS
3. Hbase
4. 数据库基础知识
SparkCL
- GPU并行编程
- Aparapi & Opencl
- SparkCL
法师线——计算机视觉与机器学习
- 图像处理
- 参与过的项目
未完待续