后端工程师进阶之路

之前在美团工作过差不多3年,本文来自美团wiki

================================

 

 

  • 基础(项目必备)

  • 成为一个系统/服务/模块的owner

  • 其他/进阶

 

基础(项目必备)

扎实   掌握   了解

 

  知识点 要求 学习方法/相关连接/书籍推荐 进阶
开发工具

IDE

扎实

  • 熟练使用IDEA进行开发;

  • 熟练使用快捷键;

  • 会本地和远程Debug

Intellij IDEA 使用教程  

Git

扎实

  • 理解git的分布式

  • 理解git的暂存区、对象

  • 熟练使用push、fetch、rebase、reset等命令

  • 会使用一种Git可视化工具:SourceTree、GitUp、ToriseGit等

Git教程

 

  • Git权威指南

Maven

扎实

  • 熟练配置及使用;

  • 理解Maven依赖机制,会解决jar冲突问题;

  • 掌握mvn clean、compile、test、install、depoly等命令

Maven教程 maven in action
CS基础

操作系统/

Linux

掌握

  • 对Linux/OS的基本认知:中断/异常、地址空间、系统调用、进程调度、文件系统等

  • Linux系统管理:文件、权限、vim使用、shell脚本、启动流程、crtontab、syslog等

  • 常用命令:less、grep、cut、sed等;top、netstat、tcpdump、vmstat、iostat等

  • 更多对Linux使用、原理的掌握,多多益善

  • Linux入门基础

  • 每天一个Linux命令

  • 鸟哥的linux私房菜

  • 深入理解Linux内核

  • UNIX环境高级编程

  • 深入理解计算机系统 

网络

掌握

  • TCP/IP基础:IP、子网、路由、TCP

  • HTTP、HTTPS等协议的基本原理

  • 熟练掌握cookie、session原理及跨域等问题的由来及处理方法;

  • 了解前端页面加载过程及常用网络优化技术;

  • 会使用常用抓包工具 charles等;

  • 熟练使用点评、美团APP抓包及Mock工具:Spider使用  mock工具使用说明

  • TCP/IP详解(卷一)

  • HTTP权威指南

  • TCP/IP详解(卷二)

  • TCP/IP详解(卷三)

数据库

扎实

  • 了解Mysql;

  • 基本操作:sql、数据导出/入、备份/恢复;

  • 掌握常用的mysql存储引擎及索引方式;

  • 会查看sql执行计划,掌握常用sql调优方法;

  • 功能基本原理:复制、文件、日志、事务、锁;

  • 至少了解一种NoSql的原理及使用(mongo). 掌握

  • MySQL技术内幕:SQL编程

  • 数据模型资源手册(卷1)(修订版) 

高性能MySQL

Java相关

 

 

 

 

 

 

Java基础(要扎实)     

扎实

基本语法:继承、异常、引用、泛型等
  • JAVA核心技术(卷1)

  • Java编程思想

 Effective java 中文版(第2版) 
类库:集合、序列化等

Jdk源码:

  • String、 Integer、Long 、Enum、BigDecimal

  • ArrayList、java.util.LinkedList、

  • HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap

  • HashSet、LinkedHashSet、TreeSet

  • AtomicInteger、ThreadLocal

 

 IO(网络IO、文件IO)、NIO 掌握

《Java网路编程》 Java Network Programming  Netty/Mina/grizzly
 多线程、并发  Java并发实践(Java Concurrency in Practice)  
  • JVM: class code、反射、ClassLoader、GC;

  • 常用java监控命令:jstack、jmap、jstat等;

  • 常用java启动参数:gc相关;常用环境变量;

  •  深入理解Java虚拟机

  • JVM内存管理与调优

 

 深入Java虚拟机(Inside the Java Virtual Machine) 
 Java安全  Java Security  
反射、动态代理、jmx、jms    

 Java Web

掌握

  • Servlet/JSP

  • Struts2/Spring MVC

  • Spring

  • MyBatis

  • MyBatis-Spring

  • Jetty

  • UnitTest

  • JDBC\Mybatis\C3p0

  • HttpClient

  • Servlet规范原文

  • Spring官方文档

  • MyBatis 官方文档

  • MyBatis-Spring 官方文档

  • spring in action

  • Spring技术内幕:深入解析Spring架构与设计原理;

  • struts2技术内幕;

  • 源码

第三方类库

掌握

  • apach commons.*

  • fastjson、jackson、gson

  • guava

  • 源码;

  • Guava Wiki

 

系统部署

了解

  • 负载均衡:F5、SLB、LVS、Nginx

  • 反向代理:Nginx、Tengine

  • Web容器:Tomcat、Jetty

  • 容灾:数据库冷/热备、异地多活、服务降级

   

工程素质

 

 掌握

api接口设计 Restful/MVC RESTful Web Services  
编码 OO; 业务建模:如何把产品需求转换成合理的软件模型
  • 大话设计模式 

  • Head First设计模式

  • Effective java 中文版(第2版) 

  • 重构:改善既有代码的设计 

  • 实现模式 Implementation Patterns

 
开发规范
  • 编码规范

  • 数据库规范

  • 日志规范

  • 美团(Java)编码规范-初版_v1

  • DP JAVA代码开发规范_v0

  • google java编码风格

  • 数据库开发规范

  • Log4j问题及使用

 
安全规范 遵循关于XSS、CSRF、SQL注入等常见安全问题的相关规范
  • 常见网站攻击方式和防御

  • XSS反射攻击原理及规避修复措施

  • XSS:http://yw.dp/docs/view/143

 
测试
  • 一些基本概念:黑盒/白盒、冒烟、回归、单元测试、集成测试、性能测试

  • 测试工作在项目中的实践:单元测试(JUnit、JMockit)、集成测试(测试环境+checklist?)

  • Junit,http://junit.org/

  • Jmockit,https://code.google.com/p/jmockit/

  • djUnit,http://works.dgic.co.jp/djunit/

 
SOA架构

RPC

了解

  • 了解rpc框架的基本原理及使用;

  • 了解rpc框架的核心模块:服务注册与发现、序列化、网络通信、服务治理等

  • 服务框架 Pigeon

  • MTthrift 设计实现

 
 

缓存

掌握

  • 了解本地缓存ehcache与guava cache的区别;

  • 了解本地缓存与分布式缓存的区别及使用场景;

  • 了解分布式缓存memcache与redis的区别;

  • 了解Redis基本原理及常用操作

   
 

消息队列

了解

  • activemq、rabbitmq、kafka、zeromq

  • swallow、mafka

  • 官网

  • 源码

 
 

配置工具ZK

了解

  • 理解分布式的一致性问题

  • paxos算法

  • zk使用

  • zk实现原理,多多益善

   
 

搜索引擎

了解

lucene

solr

Elasticsearch

Elasticsearch权威指南  

 

 

成为一个系统/服务/模块的owner

  • 技术基础:理解计算机工作原理;算法/数据结构;各种应用技术:Java、Mysql等;有专攻、有覆盖;

  • 沟通:态度、理解、表达

  • 工程能力:

 

 

内容

实现

理解原始需求;判断可行性、代价;

业务建模:完整、准确的把产品需求转换成合理的软件模型

系统设计、快速实现

自身管理:多分支开发、进度控制、代码/资源/对外输出文档管理

质量

功能:

  • 单元测试

  • 集成测试:checklist

性能:

  • 单点响应时间

  • 容量可扩展

健壮性

  • 外部依赖容错,常见问题:连接池(连接数、超时等)

  • 程序回滚、数据恢复能力

功能的可维护、可扩展

  • 设计文档 

  • 高质量的代码、注释

  • 合理的设计

运维

监控/报警/排查、解决问题

  • 监控、展示各种业务、技术数据;关键数据一定要有报警机制

  • 注重日志,查问题的关键

  • 监控数据、日志、使用各种命令/工具在线检查状态,这3点基本就能发现绝大部分问题原因

 

注重降低运维成本:对等节点配置一致;发布部署方式统一

一些琐事:机器申请、磁盘日志清理、自动重启等

 

 

其他/进阶

 

 

 

书籍推荐/相关连接

思维、个人管理 合理的方法,提升你的效率
  • 学会提问

  • 金字塔原理

  • 用图表说话

  • 番茄工作法图解

  • 高效能人士的七个习惯

  • 提问的智慧

  • Get things done (无压工作的艺术)

  • 思考-快与慢

计算机基础 计算机如何工作的基本概念
  • 深入理解计算机系统(Computer Systems A Programmer's Perspective)

  • Unix环境高级编程(Advanced Programming in the Unix Environment)

算法/数据结构基础

算法时间复杂度、空间复杂度的基本认知

熟悉常用数据结构:链表、队列、散列表、树等;

递归、分治、动态规划等基本思想;常用算法应用:排序、查找、比较等

算法导论 
其他语言 python node.js erlang scala go  
软件工程/软件配置管理

git=代码版本、jenkins=集成工具、发布工具、wiki=文档平台、jira=任务/问题跟踪

scrum=敏捷开发过程

  • 持续集成

  • 持续交付

架构设计  
  • 《恰如其分的软件架构 - 风险驱动的设计方法》

  • 《软件系统架构:使用视点和视角与利益相关者合作 第2版》

  • 《程序员必读之软件架构 - Software Architecture for Developers》

  • 《大型网站技术架构:核心原理与案例分析》

  • 《大规模分布式存储系统》

  • 《大数据日知录》

安全  
  • 信息安全

  • 技术部内部其他和安全相关的页面

  • Web应用安全思维导图

搜索、推荐

核心问题是排序

(待续)

《信息检索导论》、lucene源码

GIS    
SOA

soa很多方法论、理念太过于抽象,关于在于把service坐实、落地

  • wiki搜索soa

  • SOA知识图谱

虚拟化/云计算
  • docker

  • paas saas iaas

 
大数据
  • hadppo、hbase、hive

  • 流式计算: storm、spark、samza

 
运维

puppet

机房、网络架设

  • SysTeam

  • Linux_Performance_Monitoring.chm

  • 鸟哥的linux私房菜–服务器架设篇

android    
iOS    
html5/JS    
数据挖掘    
数据存储 flume、hdfs、hive、hbase;etl  
技术新闻  
  • http://news.dbanotes.net/news

  • https://news.ycombinator.com/

  • stackoverflow.com

  • github.com

  • google.com

 

你可能感兴趣的:(面试)