第十九章 项目收尾管理

项目验收

  • 项目验收时项目收尾管理中的首要环节,只有完成项目验收工作后,才能进入后续的项目总结、系统维护以及项目后面的评价等工作阶段。
  • 项目的正式验收包括验收项目产品、文档及已经完成的交付成果。对系统集成项目进行验收时需要根据项目前期所签署的合同内容以及对应的 技术工作内容,如果在项目执行过程中发生了合同变更,还因将变更内容也作为验收的评价依据。

阅读全文

Java线程中断interrupt

首先一个线程的终止不应该由其他线程来强制中断或停止。而是应该由线程自己自行停止。所以线程的stop,suspend,resume 都已经被抛弃了。而线程interrupt的作用也不是
中断线程,而是通知线程应该中断了。具体到底中断还是继续运行,应该有被通知的线程自己处理。

阅读全文

JDK常用性能分析命令行工具

jps

jps(JVM Process Status Too)可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。虽然功能比较单一,但它是使用频率最高的JDK命令行工具,因为其他的JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID与操作系统的进程ID(Process Identifier,PID)是一致的,使用Windows的任务管理器或者UNIX的ps命令也可以查询到虚拟机进程的LVMID,但如果同时启动了多个虚拟机进程,无法根据进程名称定位时,那就只能依赖jps命令显示主类的功能才能区分了。

阅读全文

Java中的IO技术:BIO,NIO,AIO

同步异步、阻塞非阻塞概念

同步和异步是针对应用程序和内核的交互而言的,阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。

阅读全文

Epoll

首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。
不管是文件,还是套接字,还是管道,我们都可以把他们看作流。
之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来),这时候该怎么办?

阅读全文

Java动态编程

动态编程指的是在运行时动态修改代码逻辑。

java运行原理

java的运行机制是开发工程师编写java源代码通过javac(java编译器)生产class文件,然后在通过java类加载器装载到jvm(java虚拟机)中,解析Class文件内的信息,生产对应的Class对象。
class字节码文件是根据jvm虚拟机规范中规定的字节码组织规则生产。

阅读全文

开发管理的一些建议

随着互联网的高速发展,对我们的软件要求越来越高。高性能、高并发、高可用、可维护这些字眼刷爆了我们的眼球,好像不谈这些词语就不是一个互联网开发者。确实相比传统软件一个互联网的项目有着更高的要求。而高性能、高并发、高可用、可维护直接反映了互联网项目的特点。
如何满足这些要求我想从开发的角度出发展开以下四点的讨论其一编码规范、其二前台组件化、其三后台服务化、其四部署一键化。

阅读全文

Android反编译与混淆技术完全解析

反编译

我们都知道,Android程序打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个部分,一个是对代码的反编译,一个是对资源的反编译,我们马上来逐个学习一下。
在开始学习之前,首先我们需要准备一个APK文件,为了尊重所有开发者,我就不拿任何一个市面上的软件来演示了,而是自己写一个Demo用来测试。

阅读全文

漫谈工程师的三观

工程师要有技术观,产品观和数据观。

技术观

什么是正确的技术观?

我觉得首先是对各种技术不排斥,兼容并蓄。初入行的工程师往往会陷入对某种技术的深深的迷恋而不能自拔,以至于一旦有不同的声音出现,就会使出吃奶的智商为自己的真爱辩解。这种单纯和幼稚几乎是每个工程师成长的必经之路,就像情窦初开的少年看上了隔壁班的小芳,就以为世上西子只此一人一样;等到见识到了更大的世界,读了更多的书籍,即便还深爱着小芳,也能欣赏环肥燕瘦了。

兼容并蓄意味着博采众家之长,用不同的工具解决不同的问题。

阅读全文

Web应用组件化的权衡

基本概念

什么是Web应用?

所谓Web应用,指的是那些虽然用Web技术构建,但是展现形式却跟桌面程序或者移动端原生应用类似的产品。这类产品的特点是逻辑较重,交互复杂,通常也是单页式的。
主要包括:
交互占比较高的页面体系
以各种Hybrid技术构建的应用,其中的Web部分

阅读全文

JavaScript面向对象编程

this

javascript中的this和java一样都是表示当前对象,它用在对象的方法中。关键字 this 总是指向调用该方法的对象,但需要注意的是同一个函数调用的方式不一样this指向的对象也不一样如下:

1
2
3
4
5
6
7
function Test(){
alert(this);
}
//此时的this,是window弹出[object Window]
Test();
//此时的this,是当前对象的的object 弹出[object Object]
var t = new Test();

阅读全文

System.setOut

        今天一同事问我System.out.println()输出的内容为什么没有输出到日志文件中。他告诉我的是他使用的weblogic中间件。说起这个真的平时没太注意。因为我之前一直使用的是jboss,查看日志也是看的jboss日志文件,通过System.out.println输出的内容也显示在了日志文件中。带着好奇心去看了下自己系统下的日志文件果然没有。于是打开jboss的log4j.xml 与自己系统下的log4j.xml进行了一下对比发现并无不同。于是打开jboss代码看了下发现jboss org.jboss.logging.Log4jService installSystemAdapters方法中对System.setOut 有设置。
        表示对于System.setOut不懂到网上百度了下,官方说明是通过System.setOut方法允许程序员自行定义System.out输出流, 我们可以将我们改造好的PrintStream替换java原来的System.out对象。于是他这个问题就很好解决了。

阅读全文