《Web全栈工程师的自我修养》
1. 什么是全栈工程师
Full-Stack Engineer
Facaebook只招全栈工程师?
Web开发流程
产品经理-->交互设计-->视觉设计-->开发(前端、后端)-->测试-->发布
流水线的优势
“各司其职”的弊端
- 工程师职责不清导致效率低
- 工程师缺乏主人感导致产品质量差
- 工程师缺乏全局的视野影响个人成长
- 更多角色导致项目效率低下
全栈工程师登上舞台
技术的发展
MEAN(MongoDB-Express-AngularJs-Node.js)
提供PaaS服务的平台越来越多
全栈工程师的发展背景
一专多长
解决问题,而不是醉心技术
2. 如何成为全栈工程师
先精后广,一专多长
围绕商业目标
关注用户体验
每一个糟糕的体验背后都蕴含着商机
用户是谁
大巧若拙
做自己会用的产品
3. 从学生到工程师
校园招聘
获得面试机会
实习
4. 野生程序员的故事
遭遇“野生程序员”
- 压缩源码和图片
- 选择合适的图片格式
- 合并静态资源
- 开启服务器端的Gzip压缩
- 使用CDN
- 延长静态资源缓存时间
- 把CSS放在页面头部,把JavaScript放在页面底部
Web性能优化分为服务器端和浏览器端两个方面 - 页面加载速度(Page Speed)的优化 - 页面渲染性能(Page Performance)的优化。
什么是“野生程序员”
所谓“野生程序员”,就是没有计算机基础知识和相关教育经历,靠着对计算机开发的兴趣进入这个行业,虽然知识面比较广,但是各方面都一知半解的开发者。
小公司有很多野生程序员
大公司还是创业公司
大公司能给您的
- 较小的风险
- 技术最佳实践
- 垂直专精的技能
- 服务海量用户的经验
- 软技能
- 人脉
- 心态
5. 工程师事业指南
- 技术 *成长* 声望
那个什么都懂的家伙
积累作品集
重视作品集
工程师的作品集
突出重点
6. 全栈工程师眼中的HTTP
HTTP简介
超文本传输协议( HyperText Transfer Protocol, HTTP) - OSI模型(7层) - 应用层(最上层):HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3
关于HTTP版本
- HTTP/1.1 1999年
- HTTP/2 2015年
例子
前端视角
尽量减少同一域下的HTTP请求数
尽量减少每一个资源的体积
后台视角
提高服务器的请求处理能力
DDoS攻击
Distributed Denial of Service:分布式拒绝服务
BigPipe
7. 高性能的网站的关键:缓存
什么是缓存
服务器缓存
基本的数据库查询缓存
扩展数据库缓存:memcached
再加一层文件缓存
静态化
浏览器缓存
第一种:Expires
Expires: Thu, 15 Apr 2020 20:00:00 GMT
第二种:Last-Modified
- Last-Modified: Tue, 01 Mar 2015 03:42:36 GMT
- If-Modified-Since: Tue, 01 Mar 2015 03:42:36 GMT
Restful Web API
表征性状态传输( Representational State Transfer, REST)
HTTP 1.1加入的Cache-Control
- 下面是推荐的浏览器缓存设置最佳实践
- 对于动态生成的HTML页面使用HTTPS头: Cache-Control: nocache
- 对于静态HTML页面使用HTTPS头: Last-Modified
- 其他所有的文件类型都设置Expires头, 并且在文件内容有所修改的时候修改Query String
浏览器缓存的现实世界
结论
- QQ空间静态资源在浏览器端使用的缓存策略
- 对于动态生成的HTML页面使用HTTPS头: Cache-Control: nocache
- 对于静态HTML页面使用HTTPS头: Last-Modified
- 其他所有的文件类型都设置Cache-Control头,并且在文件内容有所修改的时候修改文件名
8. 大前端
前端工程师
知识体系
易于上手,难于精通
框架vs库
岗位细分
UI工程师 vs 前端工程师
App UI工程师
9. 向移动端转型
为什么向移动端转型
一个转型故事
行动重于计划
一定要是自己的产品的用户
世界上成功的软件都不是完美的软件,而是在合适的时间发布的、刚刚够用的产品。如果它能活下来,在后面的版本中,它才有机会越来越好。
客户需求只有在实际使用中才能辨明,再多的前期调研也只能发现客户认为他们想要什么,而不是客户实际上想要什么。因此在不了解客户真实需求的情况下,只会多做多错。 --《精益创业》
有哪些方向
混合模式App5
WebView与原生代码通信
混合模式App开发框架
持续集成
Continuous integration,CI
版本控制
Version Control System,VCS
SVN
Apache Subversion(SVN)
Git
使用Git部署代码
版本控制最佳实践
- 鼓励频繁地提交
- 确定分支流程
- 定义主干原则,并且坚守它
- 不要把逻辑的修改和代码格式化操作混在一起
- 不相干的代码分开提交
- 保持工作代码库的“干净”
GitHub工作流
包管理
一个程序只做一件事,并做好
Node.js
- npm:npm is not an acronym
Bower
其他软件包管理器
- Node:npm
- PHP:Compose
- Ruby:gem
- Pbjective-C:CocoaPods
关于版本号
根据semver的规范,版本号用小数点分隔为三个数字。比如v3.2.1中3是主要版本号,2是次要版本号,1是补丁。 - 主要版本号:有API变更导致不兼容旧版本的时候使用。 - 次要版本号:新增功能,但是向前兼容的情况下使用。 - 补丁:修复向前兼容的bug时使用。
构建工具
首先需要良好架构
- 有合适的分离粒度
- 最小知识原则
- DRY(Don't Repeat Yourself),不要重复您自己
- 最小化预先设计,只设计必需的内容
- 通过良好的层级,让文件易于找到
- 在代码层面,有一致且可执行的命名规则
Make
依赖关系
Grunt和Gulp
Grunt - 配置项过多。每一个插件的使用都需要配置输入项和输出项,使用比较繁琐。 - 子任务间的协作基于文件。基于文件的坏处是,后一个子任务必须等前一个子任务的过程完全结束,才能开始它的流程,这样比较慢。而且磁盘读写速度远远慢于内存读写。
虽然Grunt有先发优势,但是由于它有几个痛点没有很好地解决,所以又诞生了Gulp。
11. 理解编程语言
编程语言是什么
故事接龙
语言的进化
首选语言之争
JavaScript并不总是次优语言
语言的性能
语言的设计理念
全栈工程师最佳实践
通用用途语言 vs 特定领域语言
框架和库拓展了语言
脚本语言的优势
脚本语言不需要编译
脚本语言常常不用关心清理内存
脚本语言常常会针对特定领域优化
脚本语言常常是动态类型语言
脚本语言的抽象层常常更高
脚本语言常常有包管理器
12. 全栈游乐场
VPS
虚拟专用服务器(Virtual Private Server,VPS)
实体主机、VPS、虚拟主机
对于网站的全貌有所了解
- 初始化。Linode提供一键安装操作系统,等待几分钟操作系统就安装完成了。
- 安装最新的Apache(或者其他服务器)。启用Apache的rewrite等模块,WordPress的URL重写会用到。
- 安装MySQL数据库,配置WordPress的数据连接。
- 配置域名和路由(包括访问路由配置、日志配置、网站域名和别名等)、启动服务器、查看资源利用,等等。
- 当然,也不要忘了安全防护和设置自动备份。
时间就是金钱
部署自己的环境
学习Linux
理解HTTP
实践
VPS选择
关注服务器安全
- 新建一个普通用户,以后都不要用root登录了。
- 使用SSH的名值对的登录方法,禁用用户名和密码的登录方法。
- 禁用root账户通过SSH登录。
- 安装一个防火墙。
- 安装Fail2Ban,杜绝字典攻击。
操作系统选择
CentOs、Debian、Ubuntu、Fedora
域名解析
云服务器
13. 软件设计方法
设计模式
关注点 - 高效编写代码 - 高可复用性 - 抽象带来的可读性
创建型模式
创建型模式,就是用来创建对象的模式,它对实例化的过程进行了抽象。创建型模式帮助一个系统独立于如何创建、组合和表示它的那些对象。也可以理解为,创建型模式将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。
结构型模式
结构型模式主要解决类、对象、模块之间的耦合关系。
行为型模式
行为型模式为设计模式的最后一种类型,用来识别对象之间的常用交 流模式并加以实现。如此,可在进行这些交流活动时增强弹性。
架构模式
关注点 - 多个职位(比如后台开发和前端开发)可以平行工作同时进行。 - 构建一个软件系统的多种技术。
MVC模式
架构模式之王
设计原则
DRY
三次法则(rule of three)是代码重构的一条经验法则。
惯例优于设置
KISS原则
KISS(Keep it simple,stupid):软件设计当中应该注重简约的原则。
优点
- 较简单的系统更容易构造、运行和维护。
- 较简单的解决方法总是更具弹性、柔性。
- 较简单的系统更便宜。
- 较简单的系统更容易实现、更快地获得回报。
- 较简单的方法更讨用户的欢心。
- 较简单的系统更容易分阶段地执行。
- 较简单的系统更容易被理解。
最少知道原则
松耦合原则
14. 高效工程师
为什么需要高效
一个人的效能会影响整个团队的效能,所以每个人的高效都很重要。
提速100倍
1.阅读英文资料
- 英文的技术资料更多
- StackOverflow有完善的鼓励机制
- Google的搜索能力非常强
英语世界的语言风格比较严谨
2.时间管理四象限
一:既紧急又重要(立即执行)
- 二:紧急不重要(请他人代劳)
- 三:重要不紧急(制定计划)
- 四:不紧急不重要(对他说不)
3.消除重复工作
4.给自己留出不被打扰的时间
5.番茄工作法
6.跨界思考
7.纸上头脑风暴
8.使用版本控制和构建系统
9.加班是一种文化?
15. 学习设计
科学家和工程师
细分不是最好的解决方案
设计基础
- 亲密:关系亲密的元素要放在一起,关系疏远的元素则要分开。位置的亲密性直接表现出意义的相关性。
- 对齐:左对齐、右对齐、上对齐、下对齐。斜线对齐比较简单,居中对齐很难处理,新手不要尝试。
- 重复:视觉上使用重复的图形和元素、线条和颜色等。比如QQ空间重复使用的黄色跟黑色、微信的绿色、京东的红色等。
- 对比:如果两个元素(的大小或者颜色)不一样,就让它完全不一样,产生视觉冲击力。
设计工具
Axure、Sketch、Quartz Composer、代码
Facebook的品牌设计故事
16. 全栈思维
有兴趣就够了吗
您有没有想着把您的产品和您的名字联系起来
学一点管理
- 没有在最开始做出合理的时间评估
- 没有根据人员的强项来安排任务
- 没有唤起他们对项目成功的渴望
- 缺乏沟通
好的管理者能让平凡的员工做不平凡的事
《卓有成效的管理者》5个核心思维习惯 - 有效的管理者知道他们的时间用在什么地方。 - 有效的管理者重视对外界的贡献。 - 有效的管理者善于利用长处,包括自己的长处、上司的长处、同事的长处和下属的长处。 - 有效的管理者集中精力于少数重要的领域,在这少数重要的领域中,如果能有优秀的绩效就可以产生卓越的成果。 - 最后,有效的管理者必须善于做有效的决策。
根据员工特质来授权
沟通:被忽视的竞争力
沟通是软技能
针对目标听众
有方法
表达自己的想法
示例:谈谈PPT
- 不要有太多文字
- 设定进度
- 对待错误:放松
- 有条件的话,录像并对比提高
内向性格的竞争力
转载于:https://www.cnblogs.com/Doduo/p/8066427.html
《Web全栈工程师的自我修养》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- golang错误处理
- 3、编写一个prod()函数,可以接受一个list并利用reduce()求积
- 社区发现SLPA算法
- 基于区块链的政务平台设计探索
- 蔚来汽车股票一日成交额达274亿美元 居美股榜首
- 语音识别是什么意思_语音识别的翻译_音标_读音_用法_例句_爱词霸在线词典
- 数组、字符串长度的计算(转)
- 2.4 sklearn中的metrics.roc_auc_score评价指标
- Vegas导入PSD格式文件(素材)的方法
- 对丰田暴冲事故的软件调查报告——嵌入式软件工程师必看
- 支持android11的画质修改器,pubgtool画质修改器
- Mysql-explain-Impossible WHERE noticed after reading const tables
- Openvino 模型文件部署推理
- 服务器固态硬盘当作系统盘,只当系统盘太屈才,这些地方都能用上固态硬盘!...
- Windows批处理(cmd/bat)常用命令教程
- 液压管路渗漏图像识别检测方法研究
- linux系统32和64的区别,32位和64位的Linux系统区别
- vue报错:the template root disallows ‘v-for‘ directives解决办法
- mysql.data.dll 位置_MySql.Data.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
- 工业蒸汽量预测-特征工程
热门文章
- mysql create database to_MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)
- 使用Maven搭建一个Web项目
- python asyncio tcp转发_aiohttp + asyncio 异步网络请求基本操作
- unityui等比例缩放_Unity 4.6-如何针对每种分辨率将GUI元素缩放到合适的大小
- golang func 入参为func_Golang函数常见用法
- php在什么方面使用使用队列,你知道在什么情况下使用队列吗?
- 【个人网盘-updog】使用updog建立个人网盘,so easy
- 【Tensorflow】tf.map_fn() 使用过程中遇到【inf, NaN】报错问题
- ATL 和 MFC 字符转换宏
- CSS :before :after 伪类选择器