Java 8 新功能
我们已经急不可待想知道Java 8可用的新功能,其中大部分是以前为Java 7设计的新功能,但不得不推迟。现在,甲骨文承诺,他们在“革命”,而不是“进化”新版本。未来Java语言有什么呢?
马克·雷纳德,甲骨文的Java的总设计师,在2011年JavaOne大会上,给观众提到了Java 8预计会有什么,并谈到即将到来的Java 9一点点计划。这是不幸的,本来将会在Java 7实现的五个重要改进,有两个由于Java构建发布日期而不得不作罢。马克承认,Java 7的更新是非常重要的,但他暗示,Java 8的发布会改变语言基本水平的上运作方式。从即将到来的功能列表来看,非常有可能是真的。
在Java 8发布包含两个主要项目:Lambda和Jigsaw。Lambda项目使Java有能力,更有效地工作于多核心处理系统,多核是Java运行最常见的硬件,这对在这些系统上获得更好的的处理性能非常有意义。 LAMBDA项目还包括另外一个新的处理系统,可使代码像数据一样建模的编程模式。这个新系统将允许方便地使用Lambda表达式,因为这是处理多核处理器最好的方式。这些新功能包括:
- 使用Lambda表达式
- 扩展目标类型
- 方法和构造方法引用
- 缺省的方法
如果你是想知道Lambda项目的更多信息,去这里:http://openjdk.java.net/projects/lambda/
Java 8 第二个令人兴奋还有 Jigsaw 项目。 Jigsaw项目的目标是创建在JDK设计和实施模块系统有用的方式,然后应用该系统到JDK本身。这一点使处理大块代码更易于管理,并促进跨应用程序的代码复用和更好的维护。 Jigsaw项目将带来许多新的功能涉及封装,重构,版本和模块集成。
Jigsaw项目的进一步细节,可在这里:http://openjdk.java.net/projects/jigsaw/
此外,除了这两个项目,将有一些其他的语言功能的补充,如核心Java库的升级,更容易快速的进行并行计算,并虚拟扩展方法允许加入方法指定引用到缺省实现的接口,将为代码部署选项增加一个新的日期/时间API。
JavaOne会上甲骨文展望了未来,讨论了Java 9候选发展的关键领域。他们正在寻找加入一个自我调整的JVM,改善本地集成和大规模多核的可扩展性。他们还着眼于通过添加新的元对象协议实现跨语言支持和云应用资源管理。Java正成为编程世界上最常用的编程语言,要让每个人对新功能都高兴变成一个问题。
来源: http://www.learncomputer.com/java-8-new-features/ 中文编译:IT瘾 转载请保留原文链接
Java新闻:Oracle布局Java 9,10 路线图
引述Gavin Clarke的“Java won't curl up and die like Cobol, insists Oracle”:
甲骨文周三表示,Java9和10将着手加入大数据,多语言的互操作性,云和移动,并在2015年和2017年分别发布。
对于Java开发工具包(JDK)10或之后,正在讨论一些根本上的改变:使Java语言面向对象。这可能会看到一个统一的类型系统,将一切变成对象,意味着没有更多的基本类型(no more primitives)。
明年JDK 8的特点:
更快的JavaScript引擎“Nashorn”将取代现行的“Rhino”。
模块系统“Jigsaw”,使安装程序更小,因为它只安装了系统实际应用需要的那些部分。它启用了一种几乎无风险的方式,来摆脱旧的和过时的Java API部分。
移动设备的支持。引述:
JDK 8 将看到建立在桌面上的 Java 标准版(Java SE),升级运行于目前正在运行Java移动版(Java ME)的各种移动设备。甲骨文认为,多核心和百兆内存可用的智能手机意味着,Java SE可以运行在这样的智能手机上而不仅仅是桌面上。
请注意Android,已经是一个基于Java的移动平台。但甲骨文的桌面 API(包括Java FX)可以使跨平台的开发更容易。
如何回答两个常见的开发求职面试问题
Two most common job interview questions and how to tackle them
1、问:你为什么离开你现在的工作?对你目前的工作你喜欢什么和不喜欢什么?
答:首先,永远不要否定你目前或以前的工作。另外,不要把薪金带入讨论中。
喜欢:
喜欢和同事一起工作。
喜欢解决技术和业务问题。
喜欢指出的业务需求和技术设计方面的差距,让他们协作纠正。
喜欢积极主动地识别和修正有关非功能性需求,如性能,安全性,并发性和内存泄漏的问题。这些问题正常的情况下不会表现出来,是非常具有挑战性和成就感的。
喜欢写单元测试,并启动其他代码质量的检测,如通过sonar之类的工具自动代码审查和同行评审,并持续构建和集成工具。
不喜欢:(为你的不喜欢说明引导向正面影响)
离开的主要原因是,我觉得我目前的工作没有足够挑战。公司为2-3年经验的人提供了一个很好的机会,感谢我获得那里的技能,但现在我已经准备好面对更多的挑战,并努力到达我的职业生涯一个新的水平。
我要在我的下一个工作寻找更多的增长潜力。
我也在寻找一个机会,在我的下一个工作的更多地参与亲手设计决策。
2、问:你目前的工作或事业里最大的成就和失败是什么?
答:反映你的事业成就,并提供量化的答案。
成就:
成功地完成了优化Java / JavaEE的网上交易系统处理100个以上并发用户,并与其他4个系统集成。
设计和开发了一个基于Java非阻塞与240+零售网点的通信,并与其他6个内部系统集成的服务器。
率先开展了“速赢”的程序,在3个月内提高网站在用户体验,性能和可靠性方面的排名从24至9,。
故障:(对自己的错误或失败引导向正面影响)
我们都是在我们的错误或失败中学会比在成功或成就中更多。当你提到你的错误或失败,谈一点你从他们身上学到的。你可以列举那些经典的错误而不是失败。
团队曾经在开发环境使用切割下来的数据库,我提供的技术解决方案在低数据量下工作得很好,但是当被转移到生产,数据引起了一些性能问题。从中学到了宝贵的一课,应该尽早地在SDLC(软件开发生命周期)用更多生产的数据验证解决方案。我后来在一个星期内修复了解决方案,并得到用户的大拇指。
曾写了一些JUnit的集成测试,由于数据波动有点脆弱,测试用例失败了并导致构建失败。通过更稳定的数据,在初始化设置阶段通过DBUnit填充稳定数据集,在测试完成结束阶段将数据删除,进行集成测试解决了这个问题。此外,引入了其他策略做集成测试,如像HSQL内存数据库的使用,而不是实际的数据库。
jPlayer - 一个HTML5音频/视频媒体库
jPlayer是 用JavaScript编写并完全免费和开放源码( GPL/MIT )的媒体库,一个jQuery插件,jPlayer让您迅速编写跨平台的音频和视频到您的网页。 jPlayer广泛的API允许您创建创新的媒体解决方案,而且jPlayer的活跃和成长社区提供了支持和鼓励。
jPlayer简介
- 容易上手,在几分钟内部署
- 完全定制和可使用HTML和CSS换肤
- 轻便 - 缩小和gzip压缩后只有8KB
- 自由和开放源码,没有许可限制
- 活跃和不断成长的社区提供支持
- 免费的插件,可用于流行的平台
- 广泛的平台支持 - 多编解码器,跨浏览器和跨平台
- 全面的文档和入门指南
- 在所有浏览器一致的API和接口,HTML5或Adobe Flash的
- 可扩展的架构
- $(document).ready(function(){
- $("#jquery_jplayer_1").jPlayer({
- ready: function () {
- $(this).jPlayer("setMedia", {
- m4a: "/media/mysound.mp4",
- oga: "/media/mysound.ogg"
- });
- },
- swfPath: "/js",
- supplied: "m4a, oga"
- });
- });
- <div id="jquery_jplayer_1"></div>
- <div id="jp_interface_1">
- <a href="#" class="jp-play">Play</a>
- <a href="#" class="jp-pause">Pause</a>
- </div>
16个有用的快速启动项目样板
16 Useful Boilerplates to Start Your Project Quickly
样板是可以重用在许多地方的一套代码文件,只需很少或根本不需修改。然而,这里我们正在谈论的boilerplates通常可以作为您项目的坚实基础。另外,这也是学习编码技巧和窍门的好地方!
样板是非常有用的,因为它通常包括最佳编码实践,也包含很多的技巧和窍门,否则将需要几年的时间学习。要是没有HTML电子邮件样板作为例子,建立一个EDM(Email Direct Marketing,即电子邮件营销)是不容易的,它需要你回到HTML1.0,没有更多的div,span或高级的CSS设置,如浮,位置等,你需要用表格做布局,内联CSS做简单的样式。使构建EDM更糟的是,电子邮件客户端有严格的限制,它们不具有相同的行为,如果你在多个老浏览器的工作,它都呈现不同的页面!有了电子邮件的样板,它包含CSS设置的HTML结构,甚至一些技巧和窍门,可以帮助和指导你如何避免展现不一致的问题。
没有做更多,我只是为不同的web技术平台收集16 样板 - HTML,CSS jQuery,WordPress等等,他们执行最佳实践并不断更新,我敢肯定它能为您的项目打下一个非常良好的基础。
HTML & Miscelaneous
HTML5 Boilerplate

HTML5 Boilerplate是一个专业和著名的基于HTML / CSS/ JS的快速、稳健和未来安全的网站模板。

这个网站及其代码示例创建了各种各样的模板,设计或布局的展现,这有助于你避免一些最常见的电子邮件客户端的渲染问题 - Outlook,Gmail,雅虎邮件等,这是一个好东西,我把它用在我的工作,它包含了很多的技巧和窍门来节省您大量解决问题的时间。

HTML5 Mobile Boilerplate,是你值得信赖的模板,用于创建定制丰富和高性能的移动网络应用程序。你能获得A级智能手机之间跨浏览器的的一致性,和传统的黑莓,Symbian,以及移动的后援支持。

简单,灵活的HTML,CSS,JavaScript框架,用于流行的用户界面组件和交互。它不是一个真正的样板,但它有很多快速原型和开发可重用的组件。

Zend框架(ZF)的样板,是一个基于Zend框架企业级PHP应用开发的所有功能于一身的平台。
CSS
GetSkeleton

GetSkeleton是一套CSS和JS文件,可以帮助你快速开发外观漂亮不同规模大小网站,用于17“笔记本电脑的屏幕或iPhone。GetSkeleton建立在三个核心原则:Responsive Grid Down to Mobile,快速启动和风格无关。

CSS Media Queries快查片段。
Boilerplate for Responsive Mobile

YAMP是一套小工具和最佳实践,可让网页设计师更快地建立响应式网站。
jQuery
jQuery Boilerplate
该项目将不寻求每一个可能的模式提供了一个完美的解决方案,但将尝试覆盖了简单的模板,适合初学者及以上。
Stefan Gabos jQuery Plugin Boilerplate

快速上手的jQuery插件开发样板。
Essential jQuery Plugin Patterns

一个jQuery插件开发的JavaScript模式。除了大家都知道的JavaScript模式有用外,开发的另一个侧面可以受益于它自己的一套设计模式:jQuery插件。官方jQuery插件创作指南,提供了一个很好的起点,编写插件和widget入门,但我们更进一步。
WordPress
WordPress Widget Boilerplate
一个组织良好的构建WordPress部件的维护样板。
Root Theme

Root是基于HTML5 Boilerplate 和来自Twitter的Bootstrap上的一个WordPress主题。

Bones是一个WordPress主题开发样板。它包含经典(fixed grid)和响应布局可选择。

Starkers是一个极简单的WordPress的主题,可创建充当为主题设计师的基础。

Java用JDBC批处理插入
让我们看看如何使用JDBC API在Java中执行批量插入。虽然你可能已经知道,但我会尽力解释基础到复杂的场景。
Simple Batch - 简单批处理
我把它叫做简单批处理。要求很简单,执行批量插入列表,而不是为每个INSERT语句每次提交数据库,我们将使用JDBC批处理操作和优化性能。
Bad Code
String [] queries = {
"insert into employee (name, city, phone) values ('A', 'X', '123')",
"insert into employee (name, city, phone) values ('B', 'Y', '234')",
"insert into employee (name, city, phone) values ('C', 'Z', '345')",
};
Connection connection = new getConnection();
Statement statemenet = connection.createStatement();
for (String query : queries) {
statemenet.execute(query);
}
statemenet.close();
connection.close();
这是糟糕的代码。它单独执行每个查询,每个INSERT语句的都提交一次数据库。考虑一下,如果你要插入1000条记录呢?这是不是一个好主意。
下面是执行批量插入的基本代码。来看看:
Good Code
Connection connection = new getConnection();
Statement statemenet = connection.createStatement();
for (String query : queries) {
statemenet.addBatch(query);
}
statemenet.executeBatch();
statemenet.close();
connection.close();
请注意我们如何使用addBatch()方法,而不是直接执行查询。然后,加入所有的查询,我们使用statement.executeBatch()方法一次执行他们。没有什么花哨,只是一个简单的批量插入。
请注意,我们已经从一个String数组构建了查询。现在,你可能会想,使其动态化。例如:
import java.sql.Connection;
import java.sql.Statement;
//...
Connection connection = new getConnection();
Statement statemenet = connection.createStatement();
for (Employee employee: employees) {
String query = "insert into employee (name, city) values('"
+ employee.getName() + "','" + employee.getCity + "')";
statemenet.addBatch(query);
}
statemenet.executeBatch();
statemenet.close();
connection.close();
请注意我们是如何从Employee对象中的数据动态创建查询并在批处理中添加,插入一气呵成。完美!是不是?
等等......你必须思考什么关于SQL注入?这样动态创建的查询SQL注入是很容易的。并且每个插入查询每次都被编译。
为什么不使用PreparedStatement而不是简单的声明。是的,这是个解决方案。下面是SQL注入安全批处理。
SQL Injection Safe Batch - SQL注入安全批处理
思考一下下面代码:
import java.sql.Connection;
import java.sql.PreparedStatement;
//...
String sql = "insert into employee (name, city, phone) values (?, ?, ?)";
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
for (Employee employee: employees) {
ps.setString(1, employee.getName()); ps.setString(2, employee.getCity()); ps.setString(3, employee.getPhone()); ps.addBatch(); } ps.executeBatch(); ps.close(); connection.close();
看看上面的代码。漂亮。我们使用的java.sql.PreparedStatement和在批处理中添加INSERT查询。这是你必须实现批量插入逻辑的解决方案,而不是上述Statement那个。
这一解决方案仍然存在一个问题。考虑这样一个场景,在您想要插入到数据库使用批处理半万条记录。嗯,可能产生的OutOfMemoryError:
java.lang.OutOfMemoryError: Java heap space
com.mysql.jdbc.ServerPreparedStatement$BatchedBindValues.<init>(ServerPreparedStatement.java:72)
com.mysql.jdbc.ServerPreparedStatement.addBatch(ServerPreparedStatement.java:330)
org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:171)
这是因为你试图在一个批次添加所有语句,并一次插入。最好的办法是将执行分批次。看看下面的解决方案
Smart Insert: Batch within Batch - 智能插入:将整批分批
这是一个简单的解决方案。考虑批量大小为1000,每1000个查询语句为一批插入提交。
String sql = "insert into employee (name, city, phone) values (?, ?, ?)";
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
final int batchSize = 1000;
int count = 0;
for (Employee employee: employees) {
ps.setString(1, employee.getName());
ps.setString(2, employee.getCity());
ps.setString(3, employee.getPhone()); ps.addBatch(); if(++count % batchSize == 0) { ps.executeBatch(); } } ps.executeBatch(); // insert remaining records ps.close(); connection.close();
这才是理想的解决方案,它避免了SQL注入和内存不足的问题。看看我们如何递增计数器计数,一旦BATCHSIZE 达到 1000,我们调用executeBatch()提交。
希望对你有帮助。
使Android开发方便快捷的8个好工具
Android是第二个最流行的用于 智能手机和平板电脑 的操作系统。这里有8个最好的 Android工具以许多不同的方式 帮助开发人员 ,例如 - SDK和AVD管理器,android ADT,android DDMS等等,每个工具表现其独特和不同的质量,使它非常有用于开发。如今,Android的开发一天一天地增长,在新的移动开发中变得越来越流行。

从事产品设计应订阅的13个团队博客
各大互联网公司几乎都有自己的产品设计博客,他们在分享产品设计、用户体验和交互设计的一些经验。产品设计,就是确定产品的外观,包括用户界面设计(UI,User Interface)和用户交互设计(User Interaction),是产品的门面,是决定用户去留的关键要素。如今,大多数的应用已经不存在技术难题,在这个企业不缺系统,互联网不缺产品而用户不懂技术的时刻,你靠什么赢得用户?所以好的产品设计才是软件产品和互联网产品竞争力的关键。产品设计包含产品需求设计,运营式研发,交互设计与视觉设计,确定产品的外观,包括用户界面设计(UI,User Interface)和用户交互设计(User Interaction),包含所有的用户体验部分
下面介绍各大互联网公司的产品设计团队博客:
1,淘宝UED http://ued.taobao.com/blog
淘宝网用户体验团队博客,有关用户体验设计和研究的经验分享。UED的本意是用户体验设计,是英文User Experience Design的缩写。通常的理解,他们做的一切都是为了呈现在您眼前的页面。他们关心用户的操作,关心用户的感受。为了用户更好的购物体验,为了用户每月达成更多的交易,为了用户的满意
2,新浪UED http://ued.sina.com
一个关注用户体验、关注工作流、关注作品质量的有爱团队。关注交互设计、前端开发、团队活动、用户研究、网页重构、视觉设计等与用户体验和界面设计有关的研究。
3,阿里巴巴UED http://www.aliued.cn/
阿里巴巴(中国站)用户体验设计部博客,讨论研究关于交互设计、视觉设计、前端开发、用户研究等方面
4,UCD大社区 http://ucdchina.com/
“UCD大社区”是用户体验和产品设计行业的综合社区,他们从一个粗糙的群体博客开始,慢慢走向开放、更开放! 一切内容均经过审核,主题围绕“以用户为中心的设计”。为方便快速访问其他行业网站和资源,他们编辑了一些国内外优秀的设计网址,合成“网址导航”(http://ucdchina.com/123)。此外,他们还在为一些企业提供“以用户为中心的产品设计培训”,及“互联网产品设计咨询和顾问”等商业服务。
5,支付宝UED:
交互设计:http://ped.alipay.com/ PED(Product Experience Design)产品设计团队,专注于产品设计、交互设计、体验设计领域的不断实践和创新。
视觉设计:http://upd.alipay.com/ UPD 讨论视觉设计领域(1)字体设计(2)标志设计 (3)插图设计 (4)编排设计 (5)广告设计(6)包装设计(7)展示设计
用户研究:http://ued.alipay.com UED 用户研究的目的是帮助企业定义产品的目标用户群、明确、细化产品概念,并通过对用户的任务操作特性、知觉特征、认知心理特征的研究,使用户的实际需求成为产品设计的导向,使您的产品更符合用户的习惯、经验和期待
6,百度MUX http://mux.baidu.com/
百度无线MUX(Baidu Mobile User Experience Department),坚持以用户为中心的设计,以提升产品的体验为终极使命,追求“简单极致”的设计理念,负责着所有无线产品的视觉,交互,用户研究方面的工作,并致力于做行业内最优秀,体验最好的无线产品
7,腾讯CDC http://cdc.tencent.com/
腾讯CDC(Customer Research & User Experience Design Center用户研究与体验设计中心)作为腾讯的核心部门之一,向着“做世界一流的互联网设计团队,为用户创造优质‘在线生活’体验”这一愿景努力,致力于不断提升腾讯全线产品的用户体验
8,携程UED http://ued.ctrip.com/blog/
做人性的网站,让在线预订过程成为一种享受,一种愉悦的经验;讨论界面设计和前端开发等话题
9,百度泛用户体验 http://www.baiduux.com/
关于泛用户体验的360度全方位讨论和分享——无论是视觉设计、交互体验、还是前端开发、用户研究。是以‘用户体验’为核心的跨专业分享平台,以用户为核心,将提升产品体验做为终极目标,完成百度WEB产品的视觉、交互设计、前端开发,用户研究、内容优化等工作
10,腾讯WSD http://wsd.tencent.com/
腾讯WSD是腾讯无线业务系统一个致力于提升移动设备上用户体验的专业设计团队。工作领域覆盖移动设备上的网站、软件、游戏等产品的用户研究、交互设计、视觉设计和网页重构。
11,微博UDC http://udc.weibo.com/
微博用户研究与体验设计中心(User Research & Experience Design Center) ,致力于SNS用户体验设计,为微博产品提供专业解决方案
12,网易UEDC http://uedc.163.com/
网易用户体验设计中心(User Experience Design Center),设计中心服务的产品包括网易门户、邮箱、博客、无线、交友、基础产品等,有关于交互设计、用户研究、视觉设计等方面讨论
13,CUED-迅雷用户体验设计中心 http://cued.xunlei.com/
迅雷用户体验设计中心,关注交互设计、网页重构、视觉设计
看到这些著名互联网公司都有自己的用户体验部门并且建设了自己的博客,这不但总结分享了产品设计的经验,而且也是对公司和产品的形象的宣传,更是促进了行业良性发展。他们不仅仅可以给互联网行业学习参考,同样也适用于企业应用软件开发,甚至,企业应用开发者更加要学习互联网的产品设计经验,因为企业应用其实已经落后于互联网行业产品了。










