对于新的技术如何做到从入门到放弃

从毕业一直从事IT行业,几年来主要专注于WEB技术领域,闲暇时间也看些项目管理与产品设计的杂书。不管对于“小白”还是“老司机”,不管是项目还是产品,学习新的技术是十分必要的。当然从职业生涯的角度来看,保持对新事物的敏感度与持续的学习能力是必不可少的基本素质。

说到技术,不仅仅是工程学科中的技能。从更广泛的范围来看,技术是战略层面下战术层面的具体技能,战术要服务于战略。这也就解释了在比较正规的IT公司,“技术服务于需求”的现象。一旦技术主导了产品,难免会出现因盲目追求新技术而造成产品无市场,或者因过度保守不思进取而引起产品滞后被淘汰的两个极端。

当然,有点扯远了。下面主要结合博主的工作经验,介绍一个尚不完全成型的学习模型。此学习模型类同与软件开发的敏捷模型,通过快速迭代更新不断完善行业知识体系并深入本职工作技能的理解。

第一级、学会发问

“闷骚”可能是技术男的通病。遇到问题不喜欢问,一味自己憋着。——可能与情商偏低有很大关系。这里说的问,不仅仅是问同事,还有更多的途径。

“内事不决问百度,外事不决问谷歌”。搜索引擎就是最常见的途径,也是最容易被人接受的方式。——至少不用与人打交道……

“先问自己,自己想问什么”。听起来有点像玄学,其实很简单:问别人问题前,先经过一番资料搜集,并初步形成自己对问题的初步看法;然后,明确哪些是困扰自己的核心问题,有目的的去寻找答案。之前在别人博客里,总是看到“会提问也是一种学问”的观点,的确:实现明确自己的问题,是对别人时间与精力的尊重。除非必要,不要指望别人一起来个头脑风暴。

“带着自己的初步看法,有礼貌地去请教他人”。这个他人可以是公司同事、本地同行、论坛成员、技术群的群友等。这些都是是真真正正的人,所以,请像对待人一样去对待他们,不管自己多牛,不管自己在公司地位多高。这也是很看一个人“为人处世”之道的。

第二级、查看官方文档

通过搜索或者请教,获取不少知识,对问题有了一定的理解。不过比较认真的人,难免有点心虚,感觉那是“野路子”。

可以登陆相关技术的官方网站(可能有一半会是英文网站),阅读下他们自己的介绍与看法,开放接口的文档,以及提供的官方DEMO

从技术的表面去了解这个新技术。就像做黑盒测试一样。

第三级、阅读源代码与专业理论 继续阅读对于新的技术如何做到从入门到放弃

java开发,maven多模块项目管理的喜与恼

谈到java开发的多模块组织,我不禁乐道于maven的强大与高效,以至于在上一年进行前端规范化工作时,还时不时地拿gulpmaven进行对比。

谈到maven就不能不谈ant,早些年代的java库管理多是ant方式,项目需要什么jar包,就往项目的lib文件夹下塞,包出现了冲突解决起来比较费劲。Maven的方式叫做反应池,在项目中只需要一个pom.xml文件就可以管理包的依赖关系,而且可以通过视图能清晰地看到层次依赖关系,便于包冲突的分析与解决。而依赖的jar包文件放在当前用户的.m2文件夹下,打包时,又自动把依赖包组织起来。

Maven除了优秀的库依赖管理与插件依赖管理(这里暂时不多介绍),还有一个优秀的特性——项目模块依赖管理——这使得一个大的项目可以任意拆分成多个相对独立的原子功能(可以是业务功能点也可以是工具类库)。在实际工作中,我通常把工具类库打包成jar,把组织级别的业务功能点打包成war作为微服务。

Maven-module多模块组织固然有如此大的优势,但刚开始过度的原子化分割,是的项目后期维护出现了一定的难度:

一、前期技术储备不足,在eclipse中使用时,每次更新jar模块后,都要maven install下,把jar模块安装到本地库里。但这个问题是,随着项目模块的增加,没修改几行代码就要执行次这个命令,很耗费时间。当然,后期找到了正规的解决方法,但偶尔出现的问题,还是使得团队成员退回install方式。

二、后期维护成本较大。模块过多而且依赖复杂的后果就是,牵一发而动全身。有的功能,管理后台依赖了,会员也依赖了,一次改动,如果测试补充分,很容易添加新的bug.

三、新的团队成员上手难。复杂的项目结构,无疑为新成员设定了很高的门槛,光分析一个业务逻辑就好跨越好几个jar

根据以上几点,我把全公司的项目模块归类为两大类。一个是组织级别的框架模块,一个是项目级别的项目模块。框架模块可以成为项目前期技术选型的素材,优秀的项目模块又可以完善框架模块。两者相辅相成,当然两个都是通过maven-module的形式进行管理。

在业务系统中,在单体模式(这个项目就是一个war)与之前过度分割的原子模式之间进行折中。把整个项目定义为一个pom项目(maven项目有三种类型pom/jar/war),进行项目依赖库与插件的版本控制;每个业务端(比如,管理后台、商家后台、会员中心等)作为war模块,每个war模块相对独立,如果出现业务交集,通过前端调用不同war的接口进行整合,每个war模块所依赖的库或者插件都从父级的pom项目中选定。

业务系统中引来的工具类,在项目阶段审核后提交到框架模块的工具包里统一管理。业务系统中可重用的服务(如:登陆、鉴权、工作流等),则在框架模块中进一步抽象成为微服务。

一个项目的完成,不仅仅是交活收钱,对于公司来说,更大的财产是组织过程资产的积淀。

java实现html转pdf-基于PhantomJS

一、前言

PhantomJS是一个无界面浏览器,可以在服务端通过命令行的方式使用。旨在用于页面自动化(page automation,网络监控(network monitoring, 页面截屏(screen capture,与无界面测试(headless testing)。

本文将介绍使用PhantomJS官方实现将网络页面与本地html文件渲染为pdf文件。

二、安装

去官网(http://phantomjs.org/download.html)下载合适的软件包——本文使用windows的软件包为例子。

下载软件包后,解压到指定位置(本文解压并改名为phantomjs——D:\dev\phantomjs)。

三、使用

PhantomJS官方提供很多优秀的例子(http://phantomjs.org/examples/),本文就是直接使用了其中一个例子(rasterize.js)。 继续阅读java实现html转pdf-基于PhantomJS

apache+tomcat配置负载均衡,实现http与websocket接口分压

一、应用场景

在生产环境中,应用服务器(此文以tomcat为例)不免面临高访问量的压力,相比而言web服务器(此文以apache为例)能够承担更大的并发量。Apache本身带有一些模块,可以完成对应用服务器访问流量分流分压的功能。这里就以apache+tomcat配置负载均衡的方式,实现httpwebsocket接口分压的效果。

二、系统环境

服务器:阿里云ECS服务器;

操作系统:ubuntu 14

应用服务器:tomcat 8.5+;

Web服务器:apache 2.4+;

三、Tomcat配置

tomcat官网下载压缩包,解压为两个tomcat实例(分别为tomcat-8080tomcat-8082)。

a) 修改tomcat-8080的配置文件(conf/server.xml

 <Connector port=”8080″ protocol=”HTTP/1.1″

               connectionTimeout=”20000″

               redirectPort=”8443″ URIEncoding=”UTF-8″ />

 <Connector port=”8010″ protocol=”AJP/1.3″

redirectPort=”8443″ URIEncoding=”UTF-8″ />

 <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”jvm8080″>

四、修改tomcat-8082的配置文件(conf/server.xml

 <Connector port=”8082″ protocol=”HTTP/1.1″

               connectionTimeout=”20000″

               redirectPort=”8443″ URIEncoding=”UTF-8″ />

 <Connector port=”8012″ protocol=”AJP/1.3″

redirectPort=”8443″ URIEncoding=”UTF-8″ />

 <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”jvm8082″> 继续阅读apache+tomcat配置负载均衡,实现http与websocket接口分压

2017遇见更好的自己

IT技术

(一)前端技术

推广并监督gulp在前端项目开发过程中的应用。

抽象并组织前端UI模块,并初步实现UI模块的复用性。

初步了解reactangular前端框架的使用场景与使用规范。

(二)后端技术

完善代码生成工具(codecoder)的易用性。

深入了解UMLRUP,并进行应用。

培养源于优秀源代码的习惯。

进一步了解并应用设计模式。

进一步了解jvm实现原理。

(三)自动化运维技术

初步了解自动化运维工具。

(四)互联网运营技术

了解提高流量转化率的方法。

(五)大数据处理技术

夯实大数据相关的数据基础。

了解马尔可夫算法、贝利叶算法与人工神经网络算法。

项目管理

(六)范围管理

初步掌握做需求分析的能力,能够根据需求进文档化与uml建模。

(七)时间管理

能够尽量准确的评估任务时间,并控制任务进度。

(八)质量管理

规范项目基本文档:需求分析文档、系统架构文档、系统部署文档、接口文档、工作分解结构。

规范java编程与前端编程的基本准则。

(九)人力资源管理

建设学习型知识分享型团队。

(十)沟通管理

交流做到“不卑不亢”。

能够与客户进行有效交流,了解到客户的真实需求。

团队内部做到平等无障碍的沟通。

个人能力

(十一)自我情绪调节能力

能够比较好的进行自我情绪调节。能够排解、转移不良情绪的影响。

(十二)自学能力

能够维持高效的自学能力,能静心学习并掌握理论基础知识。

(十三)沟通能力

能做到有效沟通、积极沟通、理智沟通。

(十四)写作能力

对工作与学习所掌握的知识,通过写作的形式进行归纳总结,并养成一定的写作风格。