1. 关系数据库(Relational Databases)

关系数据库因为在大规模Web服务上缺乏可扩充性而颇受微词,然而,关系数据库仍然是近20年来计算机技术中最伟大的成就。关系数据库对处理订单,公司数据方面有着出色的表现。JSP软件工程师不能不了解关系数据库。

关系数据库的核心是以记录表示数据,记录存放在数据库表,数据库使用查询语言(SQL)对数据进行搜索与查询,同时,数据库对各个数据表进行关联。

数据库的标准化技术(normalization)讲的是使用正确的方式对数据进行分存以降低冗余,并加快存取速度。

2. 安全(Security)

随着黑客的崛起与数据敏感性的上升,安全变得非常重要。安全是个广义的概念,涉及验证,授权与信息传输。

验证是对用户的身份进行检查,如要求用户输入密码。验证通常需要结合SSL(secure socket layer)进行;授权在公司业务系统中非常重要,尤其是一些工作流系统。最近开发的OAuth协议可以帮助Web服务将相应信息向相应用户开放。 Flickr便使用这种方式管理私人照片和数据的访问权限。

另外一个安全领域是网络设防,这关系到操作系统,配置与监控。不仅网络危险重重,任何软件都是。Firefox被称为最安全的浏览器,仍然需要频频发布安全补丁。要为你的系统编写安全代码就需要明白各种潜在的问题。

3. 云计算(Cloud Computing)

RWW最近的关于云计算的文章Reaching For The Sky Through Compute Clouds讲到了云计算如何改变大规模Web应用的发布。大规模的并行,低成本,与快速投入市场。

并行算法发明以来,首先迎来的是网格计算,网格计算是借助空闲的桌面计算机资源进行并行计算。最著名的例子是Berkley大学的 SETI@home计划,该计划使用空闲的CPU资源分析太空数据。金融机构也大规模实施网格计算进行风险分析。空闲的资源,加上J2EE平台的崛起,迎 来了云计算的概念:应用服务虚拟化。就是应用按需运行,并可以随着时间和用户规模而实时改变。

云计算最生动的例子是Amazon的Web服务,一组可以通过 API 进行调用的应用,如云服务(EC2),一个用来存储大型媒体文件的数据库(S3),索引服务(SimpleDB),序列服务(SQS)。

4. 并发(Concurrency)

并发是JSP软件工程师最容易犯错的地方,这可以理解,因为我们一直遵从线形思维,然而并发在现代系统中非常重要。

并发是程序中的并行处理,多数现代编程语言包含内置的并发能力,在Java,指的是线程。关于并发,最经典的例子是“生产/消费”模式,生产方生产数据和 任务,并放入工作线程消费或执行。并发的复杂性在于,线程需要经常访问共同数据,每个线程都有自己的执行顺序,但需要访问共同数据。 Doug Lea曾写过一个最复杂的并发类,现在是core Java的一部分。

5. 缓存(Caching)

缓存对现代Web程序不可或缺,缓存是从数据库取回,并存放在内存中的数据。因为数据库直接存取的代价非常高,将数据从数据库取回并放在缓存中访问就变得 十分必要。比如,你有一个网站,要显示上周的畅销书,你可以从数据库将畅销书榜一次性取回放在缓存中,而不必在每次访问时都去数据库读数据。

缓存需要代价,只有最常用的内容才可以放入缓存。很多现代程序,包括Facebook,依靠一种叫做Memcached的分布式缓存系统,该系统是 Brad Firzpatrick在工作于LiveJournal项目时开发的,Memcached使用网络中空闲的内存资源建立缓存机制,Memcached类库 在很多流行编程语言,包括Java和PHP中都有。

6. 散列法(Hashing)

Hashing的目的是加速访问速度。如果数据是序列存储的,从中查询一个项的时间取决于数据列的大小。而散列法对每一个项计算一个数字作为索引,在一个好的Hashing算法下,数据查找的速度是一样的。

除了存储数据,散列法对分布式系统也很重要。统一散列法(uniform hash)用来在云数据库环境下,在不同计算机之间分存数据。Google的索引服务就是这种方法的体现,每一个URL都被散列分布到特定计算机。

散列函数非常复杂,但现代类库中都有现成的类,重要的是,如何对散列法进行细调以获得最好的性能。

7. 算法的复杂性(Algorithmic Complexity)

关于算法的复杂性,JSP软件工程师需要理解这样几件事。第一,大O标记法(big O notation);第二,你永远都不应该使用嵌套式循环(循环里面套循环),你应该使用Hash表,数组或单一循环;第三,如今优秀类库比比皆是,我们 不必过分纠缠于这些库的效能的差别,我们以后还有机会进行细调;最后,不要忽视算法的优雅及性能,编写紧凑的,可读的代码可以让你的算法更简单,更干净。

8. 分层(Layering)

用分层来讨论软件架构是最容易的。John Lakos曾出版过一本关于大型C++系统的书。Lakos认为软件包含了层,书中介绍了层的概念,方法是,对每个软件组件,数一下它所依赖的组件数目就可以知道它的复杂程度。

Lakos认为,一个好的软件拥有金字塔结构,就是说,软件组件拥有层层积累的复杂度,但每个组件本身必须简单,一个优秀的软件包含很多小的,可重复使用 的模块,每个模块有自己的职责。一个好的系统中,组件之间的依赖性不可交叉,整个系统是各种各样的组件堆积起来,形成一个金字塔。

Lakos在软件工程的很多方面都是先驱,最著名的是 Refactoring(代码重构)。代码重构指的是,在编程过程中需要不断地对代码进行改造以保证其结构的健壮与灵活。

9. 惯例与模板(Conventions and Templates)

命名惯例和基础模板在编程模式中常被忽视,然而它可能是最强大的方法。命名惯例使软件自动化成为可能,如:Java Beans框架在getter和setter 方法中,使用简单的命名惯例。del.icio.us网站的URL命名也使用统一的格式,如http://del.icio.us/tag/software 会将用户带到所有标签为 software 的页。

很多社会网络均使用简单命名,如:你的名字是 johnsmith,那你的头像可能命名为johnsmith.jpg,而你的rss聚合文件的命名很可能是johnsmith.xml。 养成良好的命名习惯是JSP软件工程师的必修课。

命名惯例还用于单元测试,如:JUnit单元测试工具会辨认所有以test开头的类。

我们这里说的模板(templates)指的并不是C++或Java语言中的constructs,我们说的是一些包含变量的模板文件,用户可以替换变量并输出最终结果。

Cold Fusion是最先使用模板的程序之一,后来,Java使用JSP实现模板功能。Apache近来为Java开发了非常好用的通用模板,Velocity。PHP 本身就是基于模板的,因为它支持eval函数。

10. 界面(Interfaces)

软件工程中最重要的概念是界面。任何软件都是一个真实系统的模型。如何使用简单的用户界面进行模型化至关重要。很多软件系统走这样的极端,缺乏抽象的冗长代码,或者过分设计而导致无谓的复杂。

在众多软件工程书籍中,Robert Martin写的《敏捷编程》值得一读。

关于模型化,以下方法对你会有帮助。首先,去掉那些只有在将来才可能用得着的方法,代码越精练越好。第二,不要总认为以前的东西是对的,要善于改变。第三,要有耐心并享受过程。

SP软件工程师不可不知的10个概念相关推荐

  1. 软件工程师不可不知的10个概念 收藏

    软件工程师不可不知的10个概念 收藏 出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求.除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模 ...

  2. 软件工程师不可不知的10个概念

    出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求.除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模式,软件工程师应当从更广的范围内明白这 ...

  3. 译稿:软件工程师不可不知的10个概念

    出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求.除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模式,软件工程师应当从更广的范围内明白这 ...

  4. 北美前景最好25种职业 软件工程师独占鳌头

    北美前景最好25种职业 软件工程师独占鳌头 2005.11.10  来自:多伦多信息港 薪资一览:北美前景最好的25种职业 我们生活在一个科技时代,未来的职业趋向可以充分说明这一点.美国劳动局最近的调 ...

  5. 我们需要什么样的软件工程师(上)[转载]

    近期,IT行业中最令人关注的职位当属"软件工程师"了,其需求量在IT人才市场中总是名列第一,成为IT人求职的热点.软件工程师的未来是什么?有哪些出路?你是否已做好物质上及心理上的准 ...

  6. 新华网:软件工程师职业前景、薪水报酬及地位分析

    软件工程师一般指从事软件开发职业的人.相关资料显示,北京的软件销售额2004年大概在500亿左右,而能够进 行软件整体开发设计的软件设计人员比较稀缺,软件行业从业人员的薪水一路看涨,职位的争夺也异常激 ...

  7. 打破10倍速软件工程师神话

    作者 | Ari-Pekka Koponen 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 领导们常常为高效的员工而感到自豪.实际上,从长远来看,软件组织中拥有"10 倍速工 ...

  8. 成功的软件工程师共有的10个习惯和技能

    又看到一篇关于方法论的文章,观点还是不错的.翻译出来,分享给大家.如果有一项启发了你,那恭喜你.以下为正文内容: 就像没有两片相同的雪花一样,程序员也各有不同.每一片雪花都是由不同原子以独特的结构构成 ...

  9. 风舞烟ASP.NET软件工程师IT高端培训(BF-TECH3.0)-10年IT从业经验结晶

    风舞烟ASP.NET软件工程师IT高端培训(BF-TECH3.0)-10年IT从业经验结晶 亲爱的朋友们,你们好,我这里有套教学视频想和大家分享,<asp.net软件工程师> 这套课程是北 ...

最新文章

  1. Java for LeetCode 067 Add Binary
  2. 如何借助高考热点,微信公众号两天疯狂引流2万+
  3. Oracle 跨库 查询 复制表数据
  4. windows time 服务无法启动 错误1058 解决方法
  5. python绘制随机数直方图-python plotly绘制直方图实例详解
  6. C++函数模板(二)引用
  7. requests保存图片
  8. 字符串hash(一)
  9. ecos代码分析(1)
  10. linux自动输入sudo密码_用大写字母输入 Linux 命令,实现以 sudo 用户权限运行
  11. 实例解析:MySQL性能瓶颈排查定位,实现毫秒级完成180秒的任务
  12. php 嵌入手机百度地图,C# 程序中嵌入百度地图
  13. Commons IO -- IOUtils
  14. 01-C语言之父:丹尼斯·里奇
  15. 灵感之源之十多年技术人生的经验与心得
  16. 免费直播系统源码,可控的跑马灯,无需焦点
  17. python判断一个数是否为质数(素数)
  18. 克罗内克积kron() 知识点
  19. 直方图python_Python数据可视化的例子——直方图和核密度曲线
  20. 护眼软件Linux,四个 Linux 下的“护眼”软件解析

热门文章

  1. 如何使用appletviewer
  2. 线性代数几何意义大杂烩
  3. 常见的限流算法与实现
  4. (zt)Flash破解与加密综合
  5. python键盘记录255是哪个按键_Keylogger: Python写的键盘敲击记录器
  6. 知名软件ADSafe暗藏恶意代码 从众多网站劫持流量
  7. SSL证书安装配置指南(SM2证书)
  8. 基于内容的电影推荐:物品画像
  9. O365用户发送邮件收到退信,故障码是:550 5.7.1 解决办法
  10. Nginx配置图片服务器(Nginx极简配置说明)