新技术记录

Oauth

一种授权协议。第三方用户可以获得用户的授权,这些“权限”是可控的,而且第三方用户并不需要接触到用户的登录名及密码等敏感信息。

SASL(Simple Authentication and Security Layer)

是一种用来扩充C/S模式验证能力的机制,SASL提供了一个通用的方法为基于连接的协议增加验证支持

SSL(Secure Socket Layer)

为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

TLS(Transport Layer Security)

安全传输层协议。SSL协议的继任者。用于在两个通信应用程序之间提供保密性和数据完整性。

单点登录

用户只需要登录一次就可以访问所有相互信任的应用系统。因为这些系统之间共享登录凭证

目录服务(Directory Service)

为用户提供各种目录查询的服务形式,例如:AD,DNS等

DAP

目录访问协议,目录服务的访问协议

LDAP

轻量级目录访问协议(一种目录服务的访问协议),支持TCP/IP

X.500

是一种目录服务系统的标准。目录系统包括:目录服务,目录访问协议等

TDD(Test-Driven Development)

测试驱动开发。是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。

BDD(Behavior Driven Development)

行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。

ATDD(Acceptance Test Driven Development)

验收测试驱动开发

Cucumber

描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写。

Hamcrest

一个测试的框架,它提供了一套通用的匹配符Matcher,灵活使用这些匹配符定义的规则,程序员可以更加精确的表达自己的测试思想,指定所想设定的测试条件。支持的语言:Java,Python,Ruby,Objective-C,PHP,Erlang,Swift

ActiveMQ

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。

HotSpot

一种JVM产品,SUN开发

SOA

面向服务的体系结构

LVS(Linux Virtual Server)

一个虚拟的服务器集群系统,1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

AOM联合格式(Atom Syndication Format)

它是 一种基于XML的超媒体格式。它提供了灵活可扩展的互操作的格式,并且因为基于XML的特点,所以它为跨平台的应用间传递数据提供了很好的支持。

DSL(domain-specific languages)

领域特定语言

Lambda表达式

一种数学表达式

thoughtworks

一家全球软件设计与定制领袖企业。主要通过咨询帮助改善企业的IT组织,改进软件开发方法,以软件带动企业业务发展。

RFID(Radio Frequency Identification)

射频识别技术又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。

comet

“服务器推”模型,是一种新的 Web 应用架构

模式识别

一门学科,通过计算机用数学技术方法来研究模式的自动处理和判读。

finalize


CPU超线程

对偶原则

模式识别

聚类分析

主成分分析

隐马尔可夫模型

标识管理体系

DOM,SAX,STAX

IT行业的技术类型总结

1.协议

描述:

一系列用于多个对象之间信息交换的规则

例子:

HTTP,TCP

2.编程语言

描述:

一系列语法规则的集合

例子:

C语言,Java

3.架构

描述:

多个子模块之间形成的逻辑接口,其中模块本身是点,模块与模块之间的联系(即存在信息交换)构成线

例子:

分布式架构,MVC[springMVC],SOA[dubbo]

父类中存在子类成员的问题

public class ClassLoop {
    public static void main(String[] args) {
        try {
            Parent p = new Parent(); 
            p.fun(); 
        } catch (Exception e) {
            System.out.println(e); 
        }
    } 
}

class Parent {
    private Parent s = new Sub();
    public void fun() {
        s.fun();
    }
}
class Sub extends Parent {
    public void fun() {
        System.out.println("Hello");
    }
}

运行结果:
抛出栈溢出的异常: java.lang.StackOverflowError

笔记

在软件外包行业,对技术人员(主要是程序员)而言,熟悉业务领域的重要性不亚于掌握编程技术。简言之,业务重于技术。对身在此中的人而言,除了提升技术之外,熟悉“主要业务领域”,拓展“周边延伸领域”,预期“未来可能的重要领域”,这三件事情也必须要提升到职业发展的战略位置。

 

拿外汇金融行业来说,与外汇交易相关的参与者,规则,交易系统等就是“主要业务领域”,这些知识必须要足够熟悉;而大宗商品,股票,期货等应该归为“周边延伸领域”,公司目前的业务可能就多少与之有关联;而那些随着公司业务发展,将来极可能严重依赖的领域则可归为“未来可能的重要领域”。

IncompatibleClassChangeError

java.lang.IncompatibleClassChangeError:这种错误主要用于表示“不兼容性的类的变化错误”。这种问题往往发生在比较大的java项目中,由于jar包的版本变化,导致两种相互依赖的jar包不再兼容。网上有不少人说是jar包重复导致,但是这种说法不是很准确。通俗来讲,这种错误就是一个类的变化差异太大,现在正在执行的代码(正在使用这个类的代码)已经无法正常运行。最常见的情况是父类或接口的变化,导致子类出现错误(导致子类必须重构,即重新编译)。这种错误一般是在父类或接口与子类分开编译的前提下才会出现。往往是父类或接口已经改动而且重新编译过了,但是没有重新编译子类,导致子类(.class文件)与重新编译之后的父类或者接口(.class文件)不匹配引起的。

下面列举一些常见的具体情境:

(1)java.lang.IncompatibleClassChangeError: Expected non-static field ChildClass.name

父类中的某个成员变量改变为static类型的类变量,而子类中却还是以对象变量来访问这个域。比如:

public class BaseClass{

public String name=”BaseClass”;

}

public class ChildClass extends BaseClass{

public static void main(String[] agrs){

BaseClass obj = new ChildClass();

System.out.println(this.name);

}

}

BaseClass修改之后重编译:

public class BaseClass{

public static String name=”BaseClass”;

}

(2)java.lang.IncompatibleClassChangeError: Expected static field BaseClass.name

父类中的类变量改变为对象变量

public class BaseClass{
public static String name=”BaseClass”;
}

public class ChildClass extends BaseClass{
public static void main(String[] agrs){
System.out.println(BaseClass.name);
}
}

BaseClass修改之后重编译:

public class BaseClass{
public String name=”BaseClass”;
}

(3)java.lang.IncompatibleClassChangeError: Implementing class

字面意思就是“实现了类”,父接口的类型变成类,导致子类错误:

public interface BaseInterface{

}

public class ChildClass implements BaseInterface{

public static void main(String[] agrs){

}

}

BaseInterface修改之后重编译:

public class BaseInterface{

}

(4)java.lang.IncompatibleClassChangeError: class ChildClass has interface BaseClass as super class

父类改变成接口导致:

public class BaseClass{
}

public class ChildClass extends BaseClass{

public static void main(String[] agrs){
System.out.println(“Hello World”);
}
}

BaseClass修改之后重编译:

public interface BaseClass{
}

 

参考文章:

[1]http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-incompatibleclasschangeerror-how-to-resolve-incompatible-class-change-error/

知识的树形拓扑结构

知识与知识之间是存在依赖关系的,这种依赖关系可以用树形拓扑结构来描述。计算机最原始最基本的树形拓扑图如下所示:

计算机的所有知识都是建立在物理学(尤其是电学)和数学的基础之上的。物理学支撑了计算机的硬件方面,而数学则支持了计算机的软件方面。

再比如计算机中的HTTP的知识拓扑结构:

技术攻坚的“点线原则”

点:选准一个点,发力,重点突破。可以围绕这个点在相关的其他地方做适当的尝试,除非形成突破,否则就不要再继续花费过多的时间了,需要尽快回到点上来或继续在别的地方尝试。这个过程必须保证只有一个重点。我们经常犯的错误就是在这个地方挖一下,又在别的地方动几下锄头。这就有点想挖井的策略,既不能太死较劲,万一这个地方真的一点谁也没有,你就算挖一辈子也挖不出井来;但是也不能一点劲也不用,否则就算地下有水,你挖的太浅了,也不可能出水来的。

线:在攻坚的过程中不能中途停止,要一鼓作气,形成突破。保持连续性,以避免二次攻坚时在精力和状态恢复过程的时间浪费。

论技术学习路线

学习一个技术有以下两条基本线路:

(1)从具体的应用(实践)入手;

(2)从理论规范出发;

所谓从具体应用入手,就是先自己搭建一个DEMO,然后在这个DEMO之上归纳出与之对应的理论,这是一个归纳法的实践;而从理论规范出发,同样也要搭建一个DEMO,然后把理论在DEMO上面演绎出来,对应的这种思路就是演绎法的体现了。不管哪种思路,最后都必须要对每个技术在理论和体验(实践)两方面把握。

其实任何一种技术的掌握都离不开这两方面。理论是灵魂,体验(实践)是血肉。缺一不可。少了任何一个方面,你都不能宣称自己掌握了这个技术。

总体来说,前者学习体验更具体形象,但是稍微片面,而且碎片化。而后者较抽象复杂,好处是非常全面,严谨。