zoukankan      html  css  js  c++  java
  • java知识库

     

    1、加载配置文件

    classpath:spring/springmvc.xml

    classpath*:spring/springmvc.xml

    两者的区别在于前者只加载本项目下的配置文件,而后者还会加载“添加的jar包”中的配置文件。

     

    2、动态代理

    备注:参考项目ProxyTanSuo

    2.1  JDK动态代理   

    代理类要实现InvocationHandler接口,实现它的invoke()方法,利用形参Method对象的回调方法--invoke()方法来实现代理。

    2.2  Cglib动态代理   

     JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢?,这就需要CGLib了。CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。JDK动态代理与CGLib动态代理均是实现Spring AOP的基础。

    性能分析:CGLib创建的动态代理对象性能比JDK创建的动态代理对象的性能高不少,但是CGLib在创建代理对象时所花费的时间却比JDK多得多,所以对于单例的对象,因为无需频繁创建对象,用CGLib合适,反之,使用JDK方式要更为合适一些。同时,由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理。

    注意:要导入两个jar包--cglib.jar和asm.jar;由于很多java字节码操作和分析的第三方类库都引用了asm.jar文件,所以需要导入它;

    缺少asm.jar会导致以下异常:java.lang.NoClassDefFoundError:org/objectweb/asm/Type

     

    3、注解

    备注:参考项目Annotation&Enum_TanSuo

     

    3.1  常用注解

    @Target(value={ElementType.TYPE,ElementType.METHOD}),此注解用于指定注解可以支持的范围,例如ElementType.TYPE--类,ElementType.METHOD--方法;

     

    @Retention(value=RetentionPolicy.RUNTIME),此注解用于指定注解存在的范围。只有设置成RUNTIME,注解才可以在运行时被获取到。默认是CLASS;

     

     

    @Documented(未弄清楚)

    被@Documented修饰的注解会生成到javadoc中

    @Inherited

    此注解用于指定被修饰的注解能否被继承

     

    3.2  自定义注解

     

     

     

    4、枚举类型

    备注:参考项目Annotation&Enum_TanSuo

    枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。 在JDK1.5之前,我们定义常量都是:public static fianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

    总结:枚举的本质是类,在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用public static final定义变量必须指定类型。枚举是用来构建常量数据结构的模板,这个模板可扩展。枚举的使用增强了程序的健壮性,比如在引用一个不存在的枚举值的时候,编译器会报错。枚举的更多用法还需要在开发中去研究创造。

    注意:枚举类中没有方法和属性,只有项,一般都是大写。定义的项的值就是其本身。

    如果需要为项指定属性,那么就需要指定构造方法和getter、setter方法。

     

     

    5、load-on-startup属性

    相关概念:

    1、load-on-startup元素标记容器是否在服务器启动的时候就加载这个servlet(实例化并调用其init()方法)。

    2、它的值必须是一个整数,表示servlet应该被载入的顺序。当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

    3、当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

    4、正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

    5、当值相同时,容器就会自己选择顺序来加载。

    实例:

     

     

    6、web.xml中的文件路径如果不加classpath,那么系统默认会去哪里找?

     

    通过以上异常可以发现,系统会去ServletContext(Servlet上下文)找指定的文件,而ServletContext其实就是WebRoot,所以我们应该把文件放到WebRoot下面,系统回到这里寻找。当我们输出上下文的路径时,系统会输出项目的名称;

     

    7、高内聚

     

     

    8、扇入与扇出

     

     

    9、decimal(18,2)

    相关概念:

    18代表精度(其实就是数字的个数,除了小数点),2代表小数位数;

    decimal(a,b)

    -->a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。

    b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。

    a与b的差值最小为3,比如decimal(4,1)可以,但是decimal(4,2)却不行;

    10、运算符优先级别

    相关概念:

    关系运算符:小于、大于、等于、大于等于、小于等于、不等于;

    赋值运算符:基本的是“=”,它的优先级别低于其它的运算符,所以它往往是最后被读取;

    算术运算符:+  -   *  /  %  ^  !  |x|;

    -->其优先级别:3级(/  *  %),4级(+  -);

    逻辑运算符:NOT、AND、OR;

     

    实例:

    由高向低:()、!、算术运算符、关系运算符、逻辑运算符、赋值运算符;

     

    11、"=="与"equals"的区别(*

    java中,"=="比较存储位置,而"equals"其实也是比较存储位置。equals方法有Object类定义,有很多类如Integer和String都重写了方法,所以两者的equals方法的功能就不同了。Integer的equals方法是比较两者数值是否相等:

     

    String的equals方法是比较两者字面上是否完全一样:

     

    需要注意的实例:

    example1:String a="abc";  String b="abc";

    那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象;

     

    example2:String a=new String("abc"); String b=new String("abc");

    那么a==b将返回false,此时a和b指向不同的对象。

     

    String a="abc",是存在String pool里;

    String a=new String("abc");是存在对象pool里;

    这两者有区别,前者是简单类型,后者是对象类型。

     

    12、String、StringBuffer、StringBuilder三者的区别

    http://blog.csdn.net/qq_36128330/article/details/59123553

    注意:

    String是不可变类,所以是线程安全的;

    所有不可变类都是线程安全的,线程安全的类不一定是不

    可变类,如StringBuffer是可变类,它靠锁实现线程安全;

     

     

     

    特别注意(自己总结的概念、小细节):

    1、别名定义,如果两个包中有相同的类-->系统会抛出异常;

    2、如果html中的两个表单名称及其中的元素名称都相同,当对同名的元素进行js调用时,系统会出错;

    3、html中的img标签不能使用绝对路径;

    4、在网页中调节图片大小的宽度时,图片高度也会随之改变;不过可以同时指定宽度和高度;

    5、如果一个方法、属性或类上面写着许多不同的注解,那么这些注解都会被引用,注解之间也许会相互制约;如@Ignore和@Test注解同时出现,那么程序会使用Ignore注解;

    6、spring框架中的global session为整个HTTP请求中,在作用域方面就是application;

    7、hibernate映射文件中不能写schema="dbo";

    8、id在苹果电脑上作为一个关键字,所以数据库中的字段别定义为id;

    9、mybatis中驼峰命名规则不会自动映射;

    10、八大基本数据类型有一个是boolean,不包含String;

    11、final 类,无法被继承

    final方法,无法被覆盖,重写

    final变量,无法被修改

    12、反射是什么:

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    13、反射的作用:

    1)在运行时判断任意一个对象所属的类。

    2)在运行时判断任意一个类所具有的成员变量和方法。

    3)在运行时任意调用一个对象的方法

    4)在运行时构造任意一个类的对象

    可以通过配置文件来动态配置和加载类,以实现软件工程理论里所提及的类与类,模块与模块之间的解耦。反射最经典的应用是spring框架。

    14、泛型是什么:

    泛型是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类,泛型一般是用来解决代码复用的问题。

    15、泛型的作用:

    保证类型安全;

    消除类型转换,增强代码可读性,减少出错机会;

    提升性能,无需装箱和拆箱;

    实现了代码复用;

    16、AOP是什么:

    简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

    使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”

    17、AOP的应用场景:

    性能监测,访问控制,事务管理、缓存、对象池管理以及日志记录。

    18、Ajax的格式:

    $.ajax({

    type:"get",

    url:"test01.action",

    data:$("#myform").serialize(),

    async:true,

    success:function(){

    alert("dd");

     

    }

    });

    19、java四大常用连接池:

    c3p0、BoneCP、Proxool、DBCP

    20、java中获取的毫秒数是当前时间与"1970-01-1 8:0:0"的时间差;

    21、mysql数据库导出的SQL文件不能有任何改动,否则就导入时会出错;

    但是你可以将字段名和表名的单引号去掉,这样就可以了。

    22、分工的时候一定得按模块来分的,绝对不能把一个模块分给几个人一起开发,因为那样公共的代码接口不好写。就比如我和邓泽军一起写广告模块,有些功能我这边其实一起完成,但那是他的模块,我又不好写,有点小顾忌;而且我这边改动会影响他,导致开发效率降低。

    23、做事之前一定要考虑是否有更简单的方式去实现要求,否则耗费的时间会很多。

     

     

     

     

     

     

     

     

  • 相关阅读:
    Android开发学习之路-使用Handler和Message更新UI
    Android开发学习之路-Service和Activity的通信
    Android开发学习之路-自定义ListView(继承BaseAdapter)
    URI、URL、URN
    理解 node.js 的事件循环
    创建hexo风格的markdown页面
    heroku
    js通过沿着作用域链还是原型链查找变量
    浏览器中实现3D全景浏览
    数据可视化图表ECharts
  • 原文地址:https://www.cnblogs.com/syjp/p/11082321.html
Copyright © 2011-2022 走看看