2013年3 月月 发布的文章

jsp页面编译后的java文件的位置

开发的时候碰到了个bug,从下面的异常情况来看是说空指针异常,而且空指针的位置是发生在-org.apache.jsp.show_jsp:966
这个文件应该是jsp编译后生成的java代码的966行。那么这个java代码在哪里能找到呢?答案是:apache-tomcat-6.0.18workCatalinalocalhost_orgapachejspshow_jsp.java(这是tomcat缓存下的路径)找到966行,发现
Listlist = (List)getServletContext().getAttribute(“indexPDFList”);
for(int i=0; i可能是list为空造成的。

jsp页面编译后的java文件的位置

jsp页面编译后的java文件的位置

严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
	at org.apache.jsp.show_jsp._jspService(org.apache.jsp.show_jsp:966)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:157)
	at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
	at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

Linux操作系统目录的作用

了解linux下操作系统目录的作用对学习linux操作系统会有很大帮助。
Linux各个目录其实就是文件,
以下是根目录低下的个个目录的作用总结:
1. 根文件系统(/ )
根文件系统中包含了几乎所有的文件目录。相当于中央系统。进入的最简单方法是:cd /
2. /usr文件系统
/usr文件系统中包含了命令库文件和在通常操作中不会修改的文件。安装程序默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行/usr/bin下的程序。
3. /var文件系统
/var文件系统中包含一些经常改变的文件。例如假脱机(spool)目录文件日志目录?锁文件?临时文件和格式化后的手册文件。
4. /home文件系统
/home文件系统中保存了用户文件(用户自己的配置文件,定制文件,文档,数据等),root用户除外。
5. /proc文件系统
/proc文件系统中包含了全部虚拟文件。它们并不保存在磁盘中,也不占据磁盘空间(尽管命令ls -c会显示它们的大小)。当您查看它们时,您实际上看到的是内存里的信息,这些文件有助于我们了解系统内部信息。
根文件系统中主要包括以下目录:
/bin:普通用户可以使用的命令文件。
/sbin:一般为非普通用户使用的命令。有时普通用户也可能会用到。
/etc:系统的配置文件。
/root:系统管理员(root或超级用户)的主目录。
/dev:设备文件。在Linux中设备以文件形式出现,从而可以按照写文件的方式简便地对设备进行写操作。
/mnt:文件系统安装点。一般用于安装移动介质?其它文件系统(如DOS)的分区、网络共享文件系统或任何可安装文件系统。
/lib:根目录下的所有程序的共享库。
/boot:LILO使用的文件。Linux内核一般放在该目录下。当然您也可以设置LILO的配置文件,向LILO指明加载内核的其它路径。
/opt:可选择安装的大型应用程序。
/tmp:临时文件,该目录中的文件被系统自动清空。
/lost+found:在系统修复过程中恢复的文件,一般为空。
/usr文件系统中主要包括以下目录:
/usr/x11R6:X Window系统。
/usr/X11:等同于/usr/X11R6 (是到/usr/X11R6的符号链接)。
/usr/X11R6/bin:保存有大量的X Window小程序,或者是指向一些大应用程序的符号链接。
/usr/bin和/usr/sbin:相当于根文件系统下的对应目录,但在基本的系统自举过程中是不需要的(例如在紧急维护中)。
/usr/local:安装本地用户应用程序,例如,Netscape(每一个用户在一个单独的目录中)。
/usr/local/bin:可能是一些小的用户应用程序,也可能是一些指向/usr/local子目录中大应用程序的符号链接。

分布式缓存系统

概述
在数据驱动的Web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。
种类
比较流行的有Memcached、Ehcache、OSCache,还有JSC、Jmemcached、Tcache等。
Memcached
1、定义:是高性能的分布式的内存对象缓存系统。
2、原理:通过在内存里维护一个统一的巨大的Hash表来存储各种格式的数据,包括图像、视频、文件以及数据库检索的数据等。
3、特点:是一种分布式的缓存系统,可以允许不同主机上的不同用户同时访问这个系统,从而解决了共享内存只能是单机的弊端,同时也减轻了数据库检索的压力。
4、优点:提高了访问获取数据的速度,也可用于加速Web应用。
5、缺点:没有特殊的安全机制,需要自己控制安全。
6、适用场景:缓存对性能影响较大的数据、缓存变动不是很频繁的数据。
7、语言:支持多重语言开发,包括:Perl/PHP/JAVA/C/Python/Ruby/C#。
8、延伸:也可以使用到分布式数据库、分布式计算等领域。
参考网址:http://phpe.net/2010/09/getting-started-with-memcached-distributed-memory-caching/
Ehcache
1、定义:是一个纯 Java 的进程内缓存框架。
2、应用举例:是 Hibernate 中默认的CacheProvide。
3、特点:快速;简单;多种缓存策略;多级缓存;数据缓存会在虚拟机重启的过程中写入缓存;通过RMI、可插入API等方式进行分布式缓存;
具有缓存和缓存管理器的侦听接口;支持多缓存管理器实例,以及一个实例的多缓存区域;提供Hibernate的缓存实现。
4、缺点:由于是进程中的缓存,在集群环境中,每个节点各自维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新数据无法在别的节点中共享,
从而会降低节点的运行效率,还会导致数据不同步情况的发生。所以需要使用集群解决方案。
5、集群解决方案:从V1.7开始,支持5种集群解决方案,分别是:Terracotta、RMI、JMS、JGroups、Ehcache Server,常用的是RMI、JGroups以及EhCache Server。
6、语言:EhCache Server集群方式基于HTTP协议,支持多语言开发;RMI、JGroups应该仅支持Java。
参考网址:http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/index.html
OSCache
1、定义:是一个被广泛应用的J2EE缓存框架,还能应用于任何Java应用程序的普通的缓存解决方案。
2、特点:能缓存任何对象;拥有全面的API;永久缓存;支持集群;可以控制缓存过期时间。
3、适用场景:适用于对象缓存、Filter缓存、JSP或部分JSP缓存。
4、缺点:并发量较高时,会出现线程阻塞和数据错误(内部缺陷导致)。
参考网址:http://baike.baidu.com/view/1835163.html?fromTaglist
指标参数
缓存数据类型、分布式(集群)支持、API及使用、缓存过期控制、开发语言支持、缓存策略、伸缩性、缓存监控管理、数据一致性、稳定性
其他
各种缓存框架的简单比较:http://news.newhua.com/news1/program_language/2010/326/10326142152I7GCJ98DFI81BDHJ08J94FB386GJHHH5IJ2I28ECJ9K67.html
http://jackyrong.iteye.com/blog/239206

hadoop职位要求

Hadoop的职位一般有:
1、hadoop运维工程师(负责维护hadoop平台,确保平台平稳运行,作业正常提交)
2、基于hadoop平台,在此基础上进行开发新功能。(多数是写些MapReduce程序)
3、Hadoop解决方案架构(Hadoop相关产品技术架构设计、实现、应用)
大家可以参考现有的hadoop职位要求,选择自己的技术路线。hadoop其实离我们并不远!
下面是几个典型的职位要求:
1、hadoop高级运维工程师(暴风影音)
岗位职责
负责Hadoop平台运维和优化工作;
保证Hadoop平台各核心服务运行的稳定、高效;
对Hadoop平台运维不断优化,提升数据产品的质量和响应速度;
开发各种Hadoop大数据自动化运维与监控工具。/
岗位要求
本科3年以上Linux系统管理工作经验;
1年以上Hadoop平台管理经验;
熟悉Apache Hadoop部署、性能调优,熟悉jetty,thrift;
精通Shell/Python/Java/Php语言的一种或多种;
熟悉nagios,cacti,ganglia,zabbix,zenoss优先;
对大数据和自动化运维开发有浓厚兴趣,熟悉hadoop、hbase、hive、scribe、flume、storm等分布式相关技术优先。
2、hadoop研发工程师(优酷土豆)
职责:
1.基于hadoop的海量数据分析系统研发
2.基于hadoop集群的MapReduce程序的开发、测试及优化
要求:
1.对Linux操作系统熟练掌握,熟悉shell等脚本编程
2.扎实的java基础,两年以上java实际开发经验
3.熟悉hadoop集群的搭建、管理及优化
4.熟悉hadoop及hive,有MapReduce分布式编程经验
5.熟练掌握MySQL数据库,熟练使用SQL
6.对海量数据的分析、挖掘有浓厚兴趣,有海量数据处理经验
7.对技术有激情,喜欢钻研,能快速接受和掌握新技术,有较强的独立、主动的学习能力
8.理解能力强,有较强的逻辑思维分析能力
9.有强烈的责任心及良好的团队合作精神
其他:
1.两年以上工作经验,本科以上学历
2.有过移动数据统计系统开发经验者优先
3、Hadoop解决方案架构师(北京云基地企业管理有限公司)
工作职责:
1.产品技术架构设计、实现、应用
2.Hadoop及大数据相关技术研究
3.客户需求分析及沟通
4.向客户提供Hadoop咨询和培训
职位要求:
1.计算机相关专业毕业,3年以上工作经验,至少1年MapReduce开发经验
2.熟悉Linux操作系统,熟悉Java语言和开发环境
3.熟悉Hadoop生态系统相关项目的功能、架构、实现
4.对计算机体系结构和分布式系统有深入了解
5.优秀的表达和沟通能力

童小军_HD录制的Hadoop视频下载

EasyHadoop创始人@童小军_HD 辛苦录制的Hadoop实战视频被无良卖家放到淘宝网上牟取私利,经和作者沟通,小军愿意无偿将全部视频资料分享给各位爱好者学习使用,因文件太大,需要服务器和带宽,求接受方慷慨相助,也算为行业贡献一己之力 @张栋_机器学习 @邓侃 @梁斌penny @vinWHadoop
视频已经上传到百度网盘,同时视频下载地址已经更新到 EasyHadoop技术大学 页面。希望大家怀着感恩、分享的心去学习,正如作者说的:去帮助别人就如同帮助过去的你
PS:好像原作者已经删除了部分视频,百度网盘已经无法分享这些视频了,我发现在“钱”面前,说的总比做的好听!如果需要可以在这个页面给我留下邮箱,我发给你们下载地址,仅供学习参考。
欢迎订阅博客:http://feed.feedsky.com/Hadoop_java  以后还会分享些有用的内容!
也可以加入Hadoop云计算群:300165122
PPS:大家不要把邮箱留在评论内容里,这样会被收集邮箱地址的发垃圾邮件软件抓取的,在填写内容的时候,会让你填邮件,我能看到的。我正在把这部分资源放到Dropbox上,没收到链接到同学请耐心等待。
下面是地址:http://university.easyhadoop.com/university.html

hadoop视频下载链接

hadoop视频下载链接


百度网盘下载地址:http://pan.baidu.com/share/link?shareid=492484&uk=1124363056#dir/path=%2FEasyHadoop%E6%8A%80%E6%9C%AF%E5%A4%A7%E5%AD%A6%20%E5%9F%B9%E8%AE%AD%E8%A7%86%E9%A2%91
童小军_HD微博:http://weibo.com/tongxiaojun
童小军_HD微博

童小军_HD微博

IT人不要一辈子靠技术生存

我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT。NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞同但看在我真心的份上别扔砖头啊).
一。 在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事 市场开发,跑腿的人,没有前途。
不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功能而心怀忐忑,有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友,进行封闭开发,你平时除了编码之外就是吃饭和睡觉(有钱的公司甚至请个保姆为你做饭,以让你节省出更多的时间来投入到工作中,让你一直在那种累了就休息,不累就立即工作的状态)
更可怕的是,会让你接触的人际关系非常单一,除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人,你的朋友圈子小且单一,甚至破坏你原有的爱情(想象一下,你在外地做现场开发2个月以上,却从没跟女友见过一面的话,你的女友是不是会对你呲牙裂嘴)。
也许你拿到了所谓的白领的工资,但你却从此失去享受生活的自由,如果你想做技术人员尤其是开发人员,我想你很快就会理解,你多么想在一个地方长期待一段时间,认识一些朋友,多一些生活时间的愿望。
比之于我们的生活和人际关系及工作,那些从事售前和市场开发的朋友,却有比我们多的多的工作之外的时间,甚至他们工作的时间有的时候是和生活的时间是可以兼顾的,他们可以通过市场开发,认识各个行业的人士,可以认识各种各样的朋友,他们比我们坦率说更有发财和发展的机会,只要他们跟我们一样勤奋。(有一种勤奋的普通人,如果给他换个地方,他马上会成为一个勤奋且出众的人。)
二。在学习技术的时候千万不要认为如果做到技术最强,就可以成为100%受尊重的人。
有一次一个人在面试项目经理的时候说了这么一段话:我只用最听话的人,按照我的要求做只要是听话就要,如果不听话不管他技术再好也不要。随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者。
朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间象别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能。你需要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要。(如果你没有做过1年以上的真正意义上的开发不要反驳我)。
如果你幸运的能够听到市场人员的谈话,或是领导们的谈话,你会隐约觉得他们都在把技术人员当作编码的机器来看,你的价值并没有你想象的那么重要。而在你所在的团队内部,你可能正在为一个技术问题的讨论再跟同事搞内耗,因为他不服你,你也不服他,你们都认为自己的对,其实你们两个都对,而争论的目的就是为了在关键场合证明一下自己比对方技术好,比对方强。(在一个项目开发中,没有人愿意长期听别人的,总想换个位置领导别人。)
三。你更不要认为,如果我技术够好,我就自己创业,自己有创业的资本,因为自己是搞技术的。
如果你那样认为,真的是大错特错了,你可以做个调查在非技术人群中,没有几个人知道C#与JAVA的,更谈不上来欣赏你的技术是好还是不好。一句话,技术仅仅是一个工具,善于运用这个工具为别人干活的人,却往往不太擅长用这个工具来为自己创业,因为这是两个概念,训练的技能也是完全不同的。
创业最开始的时候,你的人际关系,你处理人际关系的能力,你对社会潜规则的认识,还有你明白不明白别人的心,你会不会说让人喜欢的话,还有你对自己所提供的服务的策划和推销等等,也许有一万,一百万个值得我们重视的问题,但你会发现技术却很少有可能包含在这一万或一百万之内,如果你创业到了一个快成功的阶段,你会这样告诉自己:我干吗要亲自做技术,我聘一个人不就行了,这时候你才真正会理解技术的作用,和你以前做技术人员的作用。
[小结]
基于上面的讨论,我奉劝那些学习技术的朋友,千万不要拿科举考试样的心态去学习技术,对技术的学习几近的痴迷,想掌握所有所有的技术,以让自己成为技术领域的权威和专家,以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈。
技术仅仅是一个工具,是你在人生一个阶段生存的工具,你可以一辈子喜欢他,但最好不要一辈子靠它生存。
掌握技术的唯一目的就是拿它找工作(如果你不想把技术当作你第二生命的话),就是干活。所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法,最大数算法了,什么叫干活?
就是做一个东西让别人用,别人用了,可以提高他们的工作效率,想象吧,你做1万道技术习题有什么用?只会让人觉得酸腐,还是在学习的时候,多培养些自己务实的态度吧,比如研究一下当地市场目前有哪些软件公司用人,自己离他们的要求到底有多远,自己具体应该怎么做才可以达到他们的要求。等你分析完这些,你就会发现,找工作成功,技术的贡献率其实并没有你原来想象的那么高。
不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。(如果你不理解,一种可能是你目前仅仅从事过技术工作,你的朋友圈子里技术类的朋友占了大多数,一种可能是你还没有工作,但喜欢读比尔。盖茨的传记)。

struts1.2和struts2区别

struts1.2和struts2区别
struts1.2和struts2最大的不同是,struts2集成了Webwork。
区别相当大,2.0改进很多,整合webwork,去掉了一些不常用得标签,
struts2.x是在webwork2的基础上构建的,集成了大量的东西,像什么拦截器,校验框架等,相当复杂,struts1.x相对来说就显得小得多了,东西就那么几个。
特性
Struts 1。2
Struts 2 .0
Action类
Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。
Struts 2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类来实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts 2的Action对象来使用。
线程模型
Struts 1 Action类是单例类,因为只有一个示例来控制所有的请求。单例类策略造成了一定的限制幷且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。
Struts 2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器产生许多丢弃的对象对于每一个请求,多于一个的对象并不影响垃圾收集)
Servlet 依赖
Struts 1的Action类依赖于servlet API以为HttpServletRequest和HttpServletResponse作为参数传给execute方法当Action被调用时。
Struts 2的Action不和容器有关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts 2的Action可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素减少或者排除直接访问HttpServletRequest或者HttpServletResponse的需要。
易测性
测试Struts 1的主要障碍是execute方法暴露了Servlet API。第三方的扩展,Struts测试用例,提供Struts 1的集合对象。
Struts 2的Action可以通过实例化Action来测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。
接受输入
Struts 1使用ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类来捕获输入。DynaBeans可以被用来作为替代ActionForm的类来创建。但是开发者可以重新描述已经存在的JavaBean。
Struts 2 Action属性作为输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action的属性可以通过标签库来访问。Struts 2也支持ActionForm形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象来使用。糢型驱动特性简化标签对POJO输入对象的引用。
表达式语言
Struts 1整和JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。
Struts 2使用JSTL,但是框架也支持更强大和更灵活的表达式,叫做“对象图形符号语言”(OGNL)。
将值绑定要视图上
Struts 1使用标準JSP机製来绑定对象到页面上下文。
Struts 2使用“ValueStack”技术为了标签库可以不用链接你的视图到对象的表现类型来访问值。ValueStack策略允许重用视图。
类型转换
Struts 1的ActionForm属性经常都是String的。Struts 1使用Commons-Beanutils来类型转换。转换每一个类,幷不是为每一个实例配置。
Struts 2使用OGNL来类型转换。框架包含转换器来为基本的和共同的对象类型和原始类型。
验证
Struts 1支持手动验证凭借ActionForm的validate方法,或者通过扩展的公用验证器。类可以有不同的验证上下文来未相同的类,但是不能不能包括验证子对象。
Struts 2支持手动验证凭藉validate方法和XWork验证框架。Xwork验证框架支持一连串的验证子属性使用的验证为了属性类的类型和严正上下文而定义。
Action执行的控制
Struts 1支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。
Struts 2支持在每一个Action基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建幷且使用不同的所需 的Action。

编程-学校不会教你的课程-Code.org宣传片

编程,学校不会教你的课程——Code.org 宣传片(中文版)
视频的明星有:Bill Gates(微软公司创始人,前世界首富)、 Mark Zuckberg(Facebook创始人,最年轻的亿万富翁之一)、 Chris Bosh(NBA全明星球员,曾效力多伦多猛龙队,目前迈阿密热火队的主力大前锋), I.Am.Will(超级R&B说唱乐队”黒眼豆豆”的创始人和主唱)。
其实,学编程并不仅仅是为了生存!

情人节html5玫瑰花源码

情人节html5玫瑰花源码:将代码复制成为html文件,用支持html5的浏览器(火狐)访问该页面就可以看到效果

</pre>
<iframe src="javascript:'<br /> <!doctype html>n<html>nt<head>ntt<title>JS1k, 1k demo submission [1022]</title>ntt<meta charset=&quot;utf-8&quot; />nt</head>nt<body>ntt<canvas id=&quot;c&quot;></canvas>ntt<script>ntttvar b =
document.body;ntttvar c = document.getElementsByTagName('canvas')[0];ntttvar a = c.getContext
('2d');ntttdocument.body.clientWidth; // fix bug in webkit: http://qfox.nl/weblog/218
ntt</script>ntt<script>n// start of submission //nwith(m=Math)
C=cos,S=sin,P=pow,R=random;c.width=c.height=f=500;h=-250;function p(a,b,c){if(c>60)return[S(a*7)*(13+5/(.2+P
(b*4,4)))-S(b)*50,b*f+50,625+C(a*7)*(13+5/(.2+P(b*4,4)))+b*400,a*1-b/2,a];A=a*2-1;B=b*2-1;if(A*A+B*B<1){if(c>37){n=
(j=c&1)%3F6:4;o=.5/(a+.01)+C(b*125)*3-a*300;w=b*h;return[o*C(n)+w*S(n)+j*610-390,o*S(n)-w*C(n)+550-j*350,1180+C
(B+A)*99-j*300,.4-a*.1+P(1-B*B,-h*6)*.15-a*b*.4+C(a+b)/5+P(C((o*(a+1)+(B>0%3Fw:-w))/25),30)*.1*(1-B*B),o/1e3+.7-
o*w*3e-6]}if(c>32){c=c*1.16-.15;o=a*45-20;w=b*b*h;z=o*S(c)+w*C(c)+620;return[o*C(c)-w*S(c),28+C(B*.5)*99-b*b*b*60-
z/2-h,z,(b*b*.3+P((1-(A*A)),7)*.15+.3)*b,b*.7]}o=A*(2-b)*(80-c*2);w=99-C(A)*120-C(b)*(-h-c*4.9)+C(P(1-b,7))
*50+c*2;z=o*S(c)+w*C(c)+700;return[o*C(c)-w*S(c),B*99-C(P(b, 7))*50-c/3-z/1.35+450,z,(1-b/1.2)*.9+a*.1, P((1-
b),20)/4+.05]}}setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%2546/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z- h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillStyle=&quot;rgb(&quot;+~(s[3]*h)+&quot;,&quot;+~(s[4]*h)+&quot;,&quot;+~(s[3]
*s[3]*-80)+&quot;)&quot;,a.fillRect(x,y,1,1)}',0)n// end of submission //
ntt</script>nt</body>n</html>'" frameborder="0" scrolling="no" width="1200px" height="820px"></iframe>
<pre>

HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 技术。HTML 5有两大特点:首先,强化了 Web 网页的表现性能。其次,追加了本地数据库等 Web 应用的功能。广义论及HTML5时,实际指的是包括HTML、CSS和JavaScript在内的一套技术组合。它希望能够减少浏览器对于需要插件的丰富性网络应用服务(plug-in-based rich internet application,RIA),如Adobe Flash、Microsoft Silverlight,与Oracle JavaFX的需求,并且提供更多能有效增强网络应用的标准集。
请使用火狐、谷歌等支持html5的浏览器,点击查看效果:http://tianhailong.com/rose.html

阿里云搜索

阿里云在去年就推出了搜索服务,但是由于一直没有推广,很多人到现在才知道,这其中就包括这个项目最早的负责人、现唱吧创始人陈华 。
陈华告诉腾讯科技,阿里云搜索是一个通用搜索,其功能和百度、搜狗、360搜索一样。他自己2009年4月加入阿里巴巴就是去做搜索,并且从零开始组建了阿里巴巴云搜索的团队,2011年离开阿里后创立了现在的唱吧。“但阿里云搜索是一个比较艰难的产物。”陈华说。
做搜索为防御 附带额外责任
陈华表示,当时阿里做搜索的想法更多是从防御的角度,觉得必须要有一个这样的产品。另外,由于阿里要做云计算,而搜索是云计算最典型的应用,要用到海量数据,所以“顺便”做一个搜索,可以用来测试云计算的可靠性。
一开始阿里云搜索和阿里云计算都属于阿里集团研究院,这两个项目几乎同时启动,可能阿里云云计算项目稍微早一两个月。由于阿里想做的是基于云计算的搜索,搜索需要建立在云计算的基础上,因此阿里云搜索进展比较缓慢。
另外,陈华表示阿里云搜索有额外的责任。因为阿里云搜索的基础引擎会同时被阿里的其他搜索产品使用,比如淘宝搜索和一淘搜索。这就给阿里云搜索增加了很多负担。不过陈华表示,自己不清楚现在这一点是否有变化。
由于阿里集团业务已经非常多,一些部门也有涉及到搜索相关的业务,这就导致阿里做搜索的部门划分很混乱,比如做分词的团队根本不在搜索部门。这些相关团队到后期才逐渐合并到阿里云搜索部门。“直到我离开阿里,搜索部门才基本成型。”陈华说。
云搜索成就云计算
虽然阿里云搜索一直做的很艰难,但是阿里云计算却取得了不错的成绩。陈华现在的唱吧就使用了部分阿里云计算的服务。“我们当时也是一起做的,虽然知道阿里云计算有很多问题,但还是相信它基本的可靠性。”
对于云计算而言,可靠性是最基本也是最重要的指标。但是如果没有用户,云计算的可靠性也无从测算。所以很多时候是阿里云搜索承担了测试阿里云计算可靠性的工作。
在阿里云成立初期,由于可靠性低,即便是阿里集团的一些部门也不愿意使用阿里云的服务。但是阿里云搜索需要基于云计算,所以云计算可靠性问题对阿里云搜索有直接的影响。很多时候陈华所带的搜索团队会去帮云计算的团队修改 bug。
这种云计算和搜索“绑定”的方式,让阿里云计算有了一个最可靠的“合作伙伴”。阿里云搜索的测试也让阿里云计算在可靠性方面不断加强,帮助其在今后获得更多客户。
阿里云搜索可与搜狗匹敌 挑战百度难
阿里云搜索是一个通用搜索,但是很国内主流搜索引擎相比,阿里云搜索目前并没有什么优势。陈华认为,凭借阿里集团的资源,阿里云搜索可以做到和搜狗的市场份额相当,但是要挑战百度就会很困难。
不过,要做好阿里云搜索的前提是,阿里集团要有决心,要对阿里云搜索做出创新,并且还要有一个适合的负责人。
最初做阿里云搜索的时候,阿里集团投入的更多是人力和硬件资源,在市场推广方面并没有给于太多支持。但是现在做搜索引擎,渠道和市场推广已经是重中之重。因此如果要进入搜索市场分一杯羹,阿里云搜索就必须要有投入资源的决心。
在创新方面,阿里云搜索只是有了搜索引擎的基本框架,目前还没有看到什么特殊的优势。搜索质量上两年前接近搜狗,现在搜索质量上仍然有很多改进空间。而搜索功能的创新上有更大的机会,还需要不断尝试。
陈华认为,这里面最重要的是“要找到一个合适的人,比如像搜狗的王小川这样,能为自己去争取资源,并且把这种资源都整合起来,可以直面进攻百度、360、搜狗的人”
目前阿里其实已经有了很多和搜索相关的业务,比如浏览器、输入法和地图。阿里手里也有万网和phpwind,可以快速把搜索框推广出去。如果能将这些资源和产品整合利用,并且投入资源进行推广,阿里在搜索市场完全还可以有所作为的。