Web核心,如何一路通关

1

Web编程核心

做了那么多年Web编程,仔细想想, 其实本质上就那点事儿, 你抓住了几个重点问题, 学起来一点都不难。

1. 理解浏览器/服务器结构 (B/S)

B/S 是从 90年代的客户端/服务器端发展而来, 共同点都是由一个(或一组)服务器来服务多个客户端。

差别在于:首先,C/S结构的客户端可能是由不同语言编写的,例如VB,Delphi, PowerBuilder等, B/S结构中浏览器成为了一个通用的客户端, 程序以Web的方式呈现,不需要安装,服务器端的升级就意味着所有客户端的升级,这和C/S相比是个翻天覆地的变化。

其次B/S的访问协议也标准化为HTTP(s) ,而不是原来各种各样的私有协议。

最后B/S结构中的服务器面向全球用户访问,而不像C/S那样仅仅是局域网, 所以压力更大, 挑战更大。

2. Web页面是怎么组成的?

简单来说就是HTML + CSS + Javascript , 我们看到的Web界面就是由这三者组成。

HTML负责结构, CSS负责展现, 而Javascript负责行为。

我们说的前端开发也主要是做这一块, 对于前端工程师,需要能理解DOM 模型,以及如何通过javascript(例如JQuery等框架)来操作DOM模型。

3. 浏览器和服务器是怎么打交道的?

当然是HTTP ! HTTP说穿了就是浏览器和服务器聊天是的一种约定, 这个约定确保双方互相理解。

完整的HTTP是非常复杂的,《HTTP权威指南》一书厚达700多页。

其实我们最常用, 也是最重要的也就那么几点:

(1) GET 和 POST 。 GET从服务器端获取数据, POST 向服务器端发送数据(由此引出图片上传问题)

(2) HTTP是个没有状态的协议,需要通过额外的机制来维持状态(例如登录状态), 常用的方法就是cookie。

(3) 理解HTTP 状态码

(4) 理解 同步 vs 异步(由此引出AJAX,以及JQuery等框架)

4. URL 和 代码的映射

这样的规则是在哪里定义的? 用代码、注解还是配置文件?

后端的业务代码该如何组织? 相信现在不会有人把业务逻辑都写到Servlet当中了, 所以需要很多MVC 框架像Struts , SpringMVC 来组织代码,让系统清晰易懂。

5. 数据的验证、转换和绑定

如何保证浏览器发过来的数据是符合要求的?

例如不能为空、不超过8个字符、两个密码必须相等.... , 出错了得给出错误提示。

浏览器发过来的数据都是形如username=jingzhun&password=123456这样简单的文本, 但是后台程序却有着丰富的数据类型,什么String, Date ,Integer等等。 所以需要把文本变成指定语言的类型。

类型转换以后, 后端的业务代码怎么才能有效的使用呢?

最简单的就是弄一个key : value 这个样的Map 出来, 业务代码直接用map.get(key) 即可。

高级一点的可以把页面发来的数据直接绑定到对象的属性上, 并且支持数组,嵌套等复杂的结构。

例如user.name=jingzhun&user.password=123456 可以绑定到一个叫User的对象, 其中有两个属性userName和password。

6. Web安全

如何防止黑客利用SQL 注入,跨站脚本攻击, 跨站请求伪造等手段来攻击系统?

7. 数据库访问

这一块是比较麻烦的, 毕竟面向对象(OO)世界和关系(Relational)数据库之间存在着天然的鸿沟。

对于简单的应用, 直接写点JDBC就够用了,只需要掌握Connection, Statement , Resultset这三个基础。

复杂点的需要用O/R Mapping 框架来搞定,例如 Hibernate, MyBatis ,还有RoR的ActiveRecord。

这其中比较棘手的就是表之间的关联, 就是所谓的一对多, 一对一, 多对多这样的关系, 如何在面向对象的世界里描述。

扩展开去,还需要处理连接池, 事务,锁 等各种烦人问题。

8. 用什么技术来生成Web页面?

这里说的Web页面就是第2点中的页面,包括HTML, CSS, Javascript。

能不能直接用Servlet的PrintWriter 直接输出HTML ? 当然可以,只是以后就没有人看懂了。

现在用来创建Web页面的技术多如牛毛:例如 JSP, Velocity, Freemaker, Groovy 等等, 他们都有一个共同点: 模板技术。

说白了就是有一个HTML的模板, 里边可以嵌入代码, 这个模板在运行时(例如在Tomcat当中)就可以根据输入的不同而生成不同内容的Web界面了。

无论哪种模板,都需要面对一个重要问题:如何展示从业务逻辑层发送来的数据? 这一步骤其实和第5步中的数据绑定有密切关系。因为这一步需要确定诸如user.name , user.password这样的字段名称。

9. 如何把对象变成XML或者JSON字符串?

由于AJAX以及手机端的存在,对于一个URL的请求, 他们要求的返回值通常不是HTML页面, 而是XML或者JSON数据, 此时需要有框架把对象转化成相应的字符串。

搞定了Web这些基础的东西,在公司里做一个Web程序员应该不在话下了, 接下来需要学习的就是像高并发,缓存,搜索,分布式等高级的内容了。

2

如何做到一路通关

大家做求职选择时,还是以自己的兴趣和技能为主要判断标准。无论选择哪条职业发展路径,只要掌握关键“诀窍”,都能做到“好风凭借力,送我上青云”。

接下来我们就把这些诀窍一一分解。

首先问一个主要问题:科技公司给员工升职,最看重什么因素?

即你做出了什么事情,给公司带来了什么影响。

以管理者的眼光:动力(Motivation)和努力(hard working)。

这个答案看起来“意料之中”?然而我们要强调的是,即使最前沿的科技公司,做的事情也不要求你有超级高智商。只要进入公司,大家就可以看淡曾经的傲人学历背景;高智商也不是成功的最重要因素。相反,工作特别有动力的人,特别努力的人,才更容易获得重视和成功。

这里,两位老师提供几个实践方式,以有效保持你的动力和努力。

首先,大家不要只盯着自己手头的任务,可以选择自愿帮助其它的项目组或者部门,或者直接申请更多的职责——这是为了提高你在整个组织内的价值。这样做,除了能展示你的兴趣和渴望,也让大家的目光注意到你原本做的事情上。

第二点,多看多学,吸收新的知识和技能。

举个最容易操作却有效果的例子。你拿到一个任务,很多人就盯着自己的这点代码改一下,做个test,就完事了。但实际上,你可以把你这个任务周围的代码浏览一遍。这样做不仅可以让你更好的理解这个任务的上下文背景(context),提升自己code和review的质量。而且,通过逐渐积累,几个月后,你对代码的理解和编程能力会有明显的进步。

此外,要对行业内的新闻动态保持关注,比如 follow 一些该领域的大牛们个人博客。技术更新如此迅速,大家若能跟上脚步,点出最新技能点,除了是晋升的一大利器,也让你在市场上“始终很值钱”。

如果把打拼事业比喻为建造高楼大厦,那么保持动力和努力就是其“基石”,而你做事的方式,就像你的建筑设备和材料,决定了你的建造速度。

在美国公司,做事的方式是评价的重要指标,而最关键的两点是保持透明(Transparency)和合作分享(Collaboration)。这恰恰是很多华人工程师所缺乏的。

对此唯一的“药方”,就是以做到“透明”和“合作分享”为目的,推着自己多多交流表达。保持透明,是指从项目或产品的需求分析与设计开始,完成任务的整个过程要透明,随时和主管、同事以及合作方更新最新的情况,不要自己闷头苦干。有时候“做得好不如唱得好”。而合作分享,需要大家有个想法为前提,就是把自己当做公司的一员——为公司创造价值,而不是为自己做事。

这里提供了几个有用的实践“锦囊”,帮助你更快做到在职场上的如鱼得水。

首先,大家可以在公司里,找一位职位级别更高的人,当做自己的“导师”。很多公司是有正式的导师项目的;如果没有,大家可以自己发展一段。导师会根据自己的经验,为你提供很多宝贵的信息和指导,并且可能在你的升职决策上做出有力的影响。

其次,大部分公司都会有定期的“考评”,比如每半年每个员工要找6位同事为自己写review。请认真对待,找有力的同事去帮你背书。

说到review了,我们就强调一下大家要如何对待自己的工作结果。我们开头说到,决定你升职与否和速度的,归根结底取决于你对公司的 impact,这其实就是“结果论”。

但是你做的每一件事情,不是都被别人知道或者清楚了解其价值与意义的。所以,老师们针对这个提出两点建议。

第一,将结果量化成一个可以衡量的数字,体现在你的考评(review)中。这可能包括:让你搭建的平台用户量增加;提供更好的用户体验;带来更多的流量;或者赚更多的钱。直观的量化结果,让人有直接的感受。

第二,对自己做过的所有工作进行记录,就像你写简历时,会把自己做的项目予以列出那样。这能把你的工作成果“置于灯光下”,帮别人(尤其是决定你是否升职的人)有意识地回忆到它们;同时,也能展示你为公司所做的努力和付出(commitment)。

最后,再次提醒大家:从入职起,大家就应该做好自己长期的事业规划,而不要满足于眼前的成绩和利益。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180114G09T1R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券