首页 > 代码库 > JavaWeb高性能开发(一)

JavaWeb高性能开发(一)

今日要闻:

淘宝删差评产业链

在你给出“差评”“中评”后不久,有人会偷偷登录你的淘宝账户,把你之前给过的评价删除或改成“好评”。而这种人就是“职业修改差评师”

 案发前,李骏杰在杭州市滨江区一家科技公司上班。5 人当中,他主要负责通过 QQ 在网上联系需要修改“中评”和“差评”的淘宝卖家,改一个评价收费 260 元。

  李骏杰把这些信息传给他的下线,即在广东打工的黄福权、王凤昭,黄、王二人再把信息反馈给在江西某市公安系统工作的胡榕,由他利用自己的职务便利查明买家的身份证信息,之后把信息以每条 15 元至 25 元不等的价格卖给黄、王二人。

  收到胡榕给的买家身份证信息后,黄、王二人以每条 15 元的价格让河北石家庄人董伟“PS”出身份证复印件,再把复印件以每件 45 元的价格转卖给李骏杰。有了买家的身份证复印件,李骏杰就可以利用技术手段,冒充淘宝买家身份骗取该买家的淘宝账号并重置密码,最后非法登录淘宝评价系统删除或修改“中评”“差评”。

   “追求‘好评’固然好,但 100% 的‘好评’大多是不符合事实的。”一位“资深”淘宝用户对记者说,“即便是买家出于个人意愿给出‘差评’,卖家也会要求对方改成‘好评’,或以返利来诱惑,或用谩骂、威胁等卑劣手段。说到底,是淘宝卖家对买家‘差评’的过度在意催生了‘职业修改差评师’和‘恶意差评师’的存在。”这位淘宝用户总结分析说。

 

今日英文:

http://docs.oracle.com/cd/E11882_01/java.112/e16548/apxref.htm#JJDBC28913

Oracle jdbc 转义语法(SQL92):

关闭转义可以提高性能  stmt.setEscapeProcessing(false);

日期字面量  {d ‘1995-10-22‘} 会自动转为数据库类型

时间字面量  {t ‘05:10:45‘} 或 {t ‘14:20:50‘} 自动转24小时制

或  {ts ‘1982-01-23 12:00:00‘}

一般来说 Oracle类型oracle.sql.DATE会自动映射为java.sql.Timestamp 这是正确的,不要修改

    设置mapDateToTimestamp=true 可以映射为java.sql.Date 但会有精度下降

    特殊的,如果这个Date列恰好有个索引,要用特殊的setObject,无论setDate还是setTimestamp结果都不正确(略)

对’_’和’%’转义:

  WHERE ename LIKE ‘&_%‘ {ESCAPE ‘&‘}  表示以下划线开头的任意字串
  WHERE ename LIKE ‘\\_%‘ {escape ‘\\‘} 同上
Oracle不支持转义Outer Join写法,
  如 FROM {OJ dept LEFT OUTER JOIN emp ON dept.deptno = emp.deptno
  应写为 FROM emp b, dept a WHERE a.deptno = b.deptno(+)

调用存储过程  { call procedure_name (argument1, argument2,...) }

调用函数  { ? = call procedure_name (argument1, argument2,...) }

driver.processSqlEscapes("{ts ‘1998-10-22 16:22:34‘}")
  将输出 TO_TIMESTAMP (‘1998-10-22 16:22:34‘, ‘YYYY-MM-DD HH24:MI:SS.FF‘)

Oracle存储过程不支持Boolean类型的参数和返回值,通常要自己转为int或其他来判断

Oracle不支持java.sql.SQLWarning,应该用java.sql.SQLException

DDL语句应该用Statement执行,如果用preSta或callSta则只会在首次执行

SELECT name FROM emp WHERE id = :EmpId  命名参数可以用setXXXAtName
 

技术区:

JavaWeb高性能开发(一)

事实证明,与其消耗大量时间在服务器端,在前端进行的优化更易获得用户的肯定。

前端的高性能部分,主要是指减少请求数、减少传输的数据以及提高用户体验,在这个部分,图片的优化显得至关重要。

1.减少图片的大小,可以明显的提高性能,而对于已有图片,要想减少图片的大小,只能改变图片的格式,这里推荐的是 PNG8 的格式

2.CSS Sprites 是一个吸引人的技术,它其实就是把网页中一些背景图片整合到一张图片文件中,再利用 CSS 的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position 可以用数字能精确的定位出背景图片的位置。

很好地减少网页的 HTTP 请求,从而大大的提高了页面的性能

由于图像合并后基本信息不用重复,那么多张图片合并成 1 张图片的字节往往总是小于这些图片的字节总和。

只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名,从而提高了网页的制作效率

只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变

图片的请求数就被缩减到 1 个。其他的请求都可以用到本地缓存

3.有时候,图片数据太多,一些公司的解决方法是将图片数据分到多个域名的服务器上

一方面是将服务器的请求压力分到多个硬件服务器上

另一方面,是利用了浏览器的特性。一般来说,浏览器对于相同域名的图片,最多用 2-4 个线程并行下载。不同浏览器的并发下载数,都是不同的

多域名的下载固然很好,但是太多域名并不太好,一般在 2-3 个域名下载就差不多

4.要是图片的下载不用向服务器发出请求,而可以随着 HTML 的下载同时下载到本地那就太好了

而目前,浏览器已经支持了该特性,我们可以将图片数据编码成 BASE64 的字符串,使用该字符串代替图像地址

从现实我们接触的角度看,如一些在线 HTML 编辑器,里面的小图标,如笑脸等,都使用到了 BASE64 编码,因为它们非常小,数量多,BASE64 可以帮助网页减少图标的请求数,提高效率

5.压缩是一个不错的选择,而 HTTP 协议支持 GZIP 的压缩格式,服务器响应的报头包含 Content-Encoding: gzip

<Connector  port ="80"  maxHttpHeaderSize ="8192"  maxThreads ="150"  minSpareThreads ="25"  maxSpareThreads ="75"  enableLookups ="false"  redirectPort ="8443"  acceptCount ="100"  connectionTimeout ="20000"  disableUploadTimeout ="true"  URIEncoding ="utf-8"    compression="on"  compressionMinSize="2048"  noCompressionUserAgents="gozilla, traviata"  compressableMimeType="text/html,text/xml" />

在高并发的情况,多个 Tomcat 服务器之前,需要采用反向代理的技术,提高并发度,而目前比较火的反向代理是 Nginx

gzip  on;  gzip_min_length  1000;  gzip_buffers     4 8k;  gzip_types       text/plain application/x-javascript text/css text/html application/xml;

6.预加载原理是在用户查看一张图片时,就将下一张图片先下载到本地

而懒加载则是在用户需要的时候再加载。当一个网页中可能同时有上百张图片,而大部分情况下,用户只看其中的一部分

Lazy Load Plugin for jQuery 是基于 JQuery 的懒加载组件

 

非技术:

如何把技术讲得通俗易懂:

1.先做市场分析。想明白以下问题:

  • 你的受众是谁?
  • 他们具备怎样的知识储备?
  • 你要兜售的技术解决了他们的什么问题?(向老板解释技术问题也算一种兜售)
  • 有没有现成的技术方案解决类似的问题?
  • 如果没有现成的同类方案,为什么没有?是因为你对问题定义不清晰,还是不存在这种需求?
  • 如果有现成的同类方案,那你兜售的技术和已有解决方案相比较,优缺点如何?

2.包装你的「产品」。可选的方法有很多,

比如假设你文学造诣不错,且你对受众的心理有相对精准的把握,大可以讲个漂亮的故事

文字功底一般,其实也不要紧,那咱就不讲故事,讲道理。把核心的概念按照合适的方式组织起来,用通俗易懂的语言去描述

3.分清主次。判断哪些部分是重要的,应当着重讲;哪些部分是次要的,时间有限或者为了减少复杂度可以忽略不讲

4.条理清晰、层次分明。能否从错综复杂的关系和概念网络中划清边界取决于你自己的抽象能力

就好像写程序一样,有的人写一个方法/函数四五屏都不够用,而大牛的写法常常是分解为若干不相关的子方法/函数。

5.还得根据实际情况时不时抖个机灵、讲个笑话,把出窍的灵魂给捉回来

6.多用简单短句,少用复杂长句

7.多用比喻。我觉得,无论是否技术,这都能得到不错的效果。

JavaWeb高性能开发(一)