Java综合知识点总结——基础篇

时间:2023-02-16 20:02:40

基础篇

一、JDK常用的包

java.lang 这个是系统的基础类,比如StringMathIntegerSystemThread提供常用功能。

java.io: 这里面是所有输入输出有关的类,比如文件操作等

java.net: 这里面是与网络有关的类,比如URL,URLConnection等。

java.util : 这个是系统辅助类,特别是集合类Collection,List,Map等。

java.sql: 这个是数据库操作的类,Connection, StatememtResultSet

 

二、GetPost的区别

1.get是从服务器上获取数据,post是向服务器传送数据

2.get传送的数据量较小,不能大于2KBpost传送的数据量较大,一般被默认为不受限制。

3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

4.在进行文件上传时只能使用post而不能是get

 

三、Java多态的具体体现 

面向对象编程有四个特征:抽象,封装,继承,多态。

多态有四种体现形式:

1. 接口和接口的继承

2. 类和类的继承。

3. 重载。

4. 重写。

其中重载和重写为核心。

重载:重载发生在同一个类中,在该类中如果存在多个同名方

法,但是方法的参数类型和个数不一样,那么说明该方法被重

载了。

 

重写:重写发生在子类继承父类的关系中,父类中的方法被子

类继承,方法名,返回值类型,参数完全一样,但是方法体不

一样,那么说明父类中的该方法被子类重写了。

 

 

 

 

四、StringBuffer StringBuilder String 区别

String       字符串常量   不可变  使用字符串拼接时是不同的2个空间

StringBuffer  字符串变量   可变   线程安全  字符串拼接直接在字符串后追加

StringBuilder 字符串变量   可变   非线程安全  字符串拼接直接在字符串后追加

 

1.StringBuilder执行效率高于StringBuffer高于String.

2.String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象, StringBufferStringBuilder都是可变的,当进行字符串拼接时采用append法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer  线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于 StringBuffer.

3.对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder.

 

 

五、HashtableHashMap的区别

     HashMap不是线程安全的,HashTable是线程安全。

     HashMap允许空(null)的键和值(key),HashTable则不允许。

     HashMap性能优于Hashtable

 

Map

1.Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMapHashTable.

2.HashMap是线程非安全的,HashTable是线程安全的,所以HashMap的效率高于HashTable.

3.HashMap允许键或值为空,而HashTable不允许键或值为空.

 

六、九大隐式对象

输入/输出对象:  request   response   out

作用域通信对象: session  application  pageContext

Servlet 对象:   page   config

错误对象:      exception

 

七、Forword(请求转发)Redirect(重定向)

1、从数据共享上

      Forword是一个请求的延续,可以共享request的数据

      Redirect开启一个新的请求,不可以共享request的数据

2、从地址栏

      Forword转发地址栏不发生变化

      Redirect转发地址栏发生变化

 

 

八、JQurey总结  

 jquery是一个轻量级的js框架,具有跨浏览器的特性,兼容性好,

 并且封装了很多工具,方便使用。

 常用的有:  选择器 ,dom操作 ,ajax(ajax不能跨域),特效,工具类 

九、XMLJson的特点

 Xml特点:

1、有且只有一个根节点;

2、数据传输的载体

3、所有的标签都需要自定义

4、是纯文本文件

JsonJavaScript Object Notation)特点:

json分为两种格式:

 

json对象(就是在{}中存储键值对,键和值之间用冒号分隔,

对之间用逗号分隔);

 

json数组(就是[]中存储多个json对象,json对象之间用逗号分隔)

(两者间可以进行相互嵌套)数据传输的载体之一

 

区别:

  传输同样格式的数据,xml需要使用更多的字符进行描述,

    流行的是基于json的数据传输。

    xml的层次结构比json更清晰。

 

共同点:

    xmljson都是数据传输的载体,并且具有跨平台跨语言的特性。

十、request.getSession()reqeust.getSession(false)     request.getSession(true)

getSession()/getSession(true):当session存在时返回该session,否则新建一个     session并返回该对象

getSession(false):当session存在时返回该session,否则返回null

 

 

十一、PagePageContext的区别

    Pageservlet对象;使用this关键字,它的作用范围是在同一页面。

    PageContext是作用域通信对象;通常使用setAttribute()getAttribute()来设置和获取存放对象的值。

 

十二、Ajax总结

 AJAX 全称: 异步JavaScriptXMLAsynchronous JavaScript And XML

Ajax的核心是JavaScript对象XmlHttpRequest(XHR)

 

Ajax的优点:

    提高用户体验度(UE)

    提高应用程序的性能

    进行局部刷新

 AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web应用程序的技术。

2.  通过 AJAX,我们的JavaScript 可使用JavaScriptXMLHttpRequest对象来直接与服务器进行通信。通过这个对象,我们的JavaScript 可在不重载页面的情况与Web服务器交换数据,即可局部刷新。

3.  AJAX 在浏览器与 Web服务器之间使用异步数据传输(HTTP请求),这样就可使网页从服务器请求少量的信息,而不是整个页面,减轻服务器的负担,提升站点的性能。

 AJAX 可使因特网应用程序更小、更快,更友好,用户体验(UE)好。

5.  Ajax是基于标准化并被广泛支持的技术,并且不需要插件和下载小程序

 

十三、JSP9大隐视对象中四个作用域的大小与作用范围

 四个作用域从大到小:appliaction>session>request>page

application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。

sssion:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。

request:请求作用域,就是客户端的一次请求。

page:一个JSP页面。

以上作用范围使越来越小, requestpage的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page(includeforward)

 

 

十四、List,Set,Collection,Collections

1.ListSet都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。

 

2.List接口实现类有ArrayList,LinkedList,VectorArrayListVector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候

 

3.速度较快。又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。

 

十五、java的基本数据类型

数据类型 大小

byte(字节) 1(8)

shot(短整型)2(16)

int(整型) 4(32)

long(长整型)8(32)

float(浮点型) 4(32)

double(双精度) 8(64)

boolean(布尔型) 1

char(字符型) 2(16)

 

附加:

 String是基本数据类型吗?(String不是基本数据类型)

 String的长

度是多少,有限制?(长度受内存大小的影响)

十六、冒泡排序

public class Sort {

public static void sort() {

Scanner input = new Scanner(System.in);

int sort[] = new int[10];

int temp;

System.out.println("请输入10个排序的数据:");

for (int i = 0; i < sort.length; i++) {

sort[i] = input.nextInt();

}

for (int i = 0; i < sort.length - 1; i++) {

for (int j = 0; j < sort.length - i - 1; j++) {

if (sort[j] < sort[j + 1]) {

temp = sort[j];

sort[j] = sort[j + 1];

sort[j + 1] = temp;

}

}

}

System.out.println("排列后的顺序为:");

for(int i=0;i<sort.length;i++){

System.out.print(sort[i]+"   ");

}

}

public static void main(String[] args) {

sort();

}

}

十七、时间类型转换

public class DateFormat {

public static void fun() {

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

String newDate;

try {

newDate = sdf.format(new SimpleDateFormat("yyyyMMdd")

.parse("20121115"));

System.out.println(newDate);

} catch (ParseException e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

fun();

}

}

十八、阶乘

public class Multiply {

public static int multiply(int num) {

if (num < 0) {

System.out.println("请输入大于0的数!");

return -1;

} else if (num == 0 || num == 1) {

return 1;

} else {

return multiply(num - 1) * num;

}

}

public static void main(String[] args) {

System.out.println(multiply(10));

}

}

 

十九、UEUI的区别

UE 是用户体验度

UI 界面原型(用户界面)(相当于买房时用的模型)

 

设计UI的作用:

1、帮助程序员工作(界面已由美工设计完成)

2、提前让用户对项目有个宏观的了解,知道效果是什么样子。

 

二十osi七层模型

第一层:物理层

第二层:数据链路层

第三层:网络层

第四层:传输层

第五层:会话层

第六层:表示层

第七层:应用层


二十一、线程和进程的区别

1.线程(Thread)与进程(Process

进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。

 

2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程

3.实现线程的两种方式:继承Thread类,实现Runable接口

二十二、jvm的内存结构

java虚拟机的内存结构分为(heap)和栈(stack),堆里面存放是对象实例也就new出来的对象。栈里面存放的是基本数据类型以及引用数据类型的地址。

 

对于所谓的常量是存储在方法区的常量池里面。

 

二十三、内存泄露和内存溢出

内存泄露 (memory leak),是指应用程序在申请内存后,

无法释放已经申请的内存空间.一次内存泄露危害可以忽略,

但如果任其发展最终会导致内存溢出(out of memory).

如读取文件后流要进行及时的关闭以及对数据库连接的释放。

 

内存溢出(out of memory)是指应用程序在申请内存时,

没有足够的内存空间供其使用。

如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。

二十四、单例

单例就是该类只能返回一个实例。

单例所具备的特点:

1.私有化的构造函数

2.私有的静态的全局变量

3.公有的静态的方法

单例分为懒汉式、饿汉式和双层锁式

饿汉式:

public class Singleton1 {

      private Singleton1() {};

      private static Singleton1 single = new Singleton1();

      public static Singleton1 getInstance() {

          return single;

     }

 }

 

懒汉式:

public class Singleton2 {

      private Singleton2() {}

      private static Singleton2 single=null;

      public tatic Singleton2 getInstance() {

           if (single == null) {  

              single = new Singleton2();

          }  

         return single;

     }

 }

线程安全

public class Singleton3 {

  private Singleton3() {}

  private static Singleton3 single ;

  public static Singleton3 getInstance() {

if(null == single){

synchronized(single ){

if(null == single){

single = new Singleton3();

}

}

}

return single;

  }

}

 

参考:

 

通过双重判断来保证单列设计模式在多线程中的安全性,

并且它在性能方面提高了很多。

synchronized在方法上加锁 (同步锁)

synchronized在代码块内部加锁 (同步代码块)

synchronized(同步锁)

使用synchronized如何解决线程安全的问题?

1.synchronized在方法上加锁

2.synchronized在代码块内部加锁

 

1.懒汉  2.饿汉  3.双重判断

二十五、解析xml文件的几种技术

1、 解析xml的几种技术

        1.dom4j

        2.sax

        3.jaxb

        4.jdom

        5.dom

1.dom4j        

   dom4j是一个JavaXML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件

 2.sax

        SAXsimple API for XML)是一种XML解析的替代方法。相比于DOMSAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOMSAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。

  3.jaxb

         JAXBJava Architecture for XML Binding)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

 

2dom4jsax之间的对比:【注:必须掌握!】

     dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,

  sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml

  也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性

  所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j

 

二十六、项目的生命周期

    1.需求分析

2.概要设计

3.详细设计(用例图,流程图,类图)

4.数据库设计(powerdesigner)

5.代码开发(编写)

6.单元测试(junit白盒测试)(开发人员)

svn版本管理工具(提交,更新代码,文档)

7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试)

8.上线试运行 (用户自己体验)

9.压力测试(loadrunner

10.正式上线

11.维护

二十七、OSCache的判断

Object obj = CacheManager.getInstance().getObj("oaBrandList");

//从缓存中取数据

if (null == obj)  {

obj = brandDao.getBrandList();

//如果为空再从数据库获取数据

 //获取之后放入缓存中

CacheManager.getInstance().putObj("oaBrandList", obj);

}

return (List<OaBrand>)obj;

二十八、java Exception体系结构

java 异常是程序运行过程中出现的错误。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中定义了许多异常类,分为两大类,错误Error和异常Exception。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常(runtimeException),也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

 

1ErrorException

Error是程序无法处理的错误,比如OutOfMemoryErrorThreadDeath等。

这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。

 

2、运行时异常和非运行时异常      

运行时异常: 都是RuntimeException类及其子类异常:     IndexOutOfBoundsException索引越界异常

ArithmeticException:数学计算异常

NullPointerException:空指针异常

ArrayOutOfBoundsException:数组索引越界异常

ClassNotFoundException:类文件未找到异常

ClassCastException:造型异常(类型转换异常)

这些异常是不检查异常(Unchecked Exception),程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。

非运行时异常:RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如:

IOException、文件读写异常

FileNotFoundException:文件未找到异常

  EOFException:读写文件尾异常

MalformedURLExceptionURL格式错误异常

SocketExceptionSocket异常

SQLExceptionSQL数据库异常

 

二十九、sessioncookie的区别

session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是,存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过会话cookiesessionid获取的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是session过期(默认时间是30分钟),再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用getsession()来创建,这就是sessioncookie的区别.

访问HTML页面是不会创建session,但是访问index.JSP时会创建session(JSP实际上是一个Servlet, Servlet中有getSession方法)

三十、字节流与字符流的区别

stream结尾都是字节流,readerwriter结尾都是字符流

两者的区别就是读写的时候一个是按字节读写,一个是按字符。

实际使用通常差不多。

在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。

只是读写文件,和文件内容无关的,一般选择字节流。

 

三十一、final,finally,finalize 三者区别

Final是一个修饰符:

final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值

final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变量的时候给它赋值

final修饰方法时,该方法不能被重写

final修饰类时,该类不能被继承

Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽 象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方法时,这个抽象类也就没有了它存在的必要)

Final不能修饰接口,因为接口中有需要其实现类来实现的方法

Finally

Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行,并且会在returncontinuebreak关键字之前执行

finalize

Finalize是一个方法,属于java.lang.Objectfinalize()方法是GCgarbage collector垃圾回收)运行机制的一部分finalize()方法是在 GC清理它所从属的对象时被调用的


三十二、Io流的层次结构

 

从流的方向

输入流   输出流

 

从流的类型上

字符流    字节流

 

inputstreamoutputstream都是抽象类

 

它们下面的实现包括

 

FileInputStream,BufferedInputStream

 

FileOutputStream,BufferedOutputStream

 

reader writer

 

FileReader,BufferedReader,StringReader

FileWriter,BufferedWriter,StringWriter,PrintWriter

Java综合知识点总结——基础篇

三十三、JAVA:

Java是面向对象的,跨平台的,它通过java虚拟机来进行跨平台操作,它可以进行自动垃圾回收的【c语言是通过人工进行垃圾回收】,java还会进行自动分配内存。【c语言是通过指定进行分配内存的】,只需要new一个对象,这个对象占用了多少空间,不需要我们来管,java虚拟机负责管这些,用完之后也不需要我们来释放,java虚拟机会自动释放

 

三十四、JavaSE JavaEE JavaME区别是什么:

Java SE=Java Standard Edition=j2se = java 标准版

Java EE=Java Enterprise Edition=j2ee= java 企业版

Java ME=Java Mobile Edition=j2me = java移动版

特点:

SE主要用于桌面程序(swing),控制台开发(main程序)。

EE企业级开发(JSP,EJB,Spring MVC,Struts,hibernate,ibatis等),

用于企业级软件开发,网络开发,web开发。

ME嵌入式开发(手机,小家电,PDA)。[苹果的ios,黑莓]

三者之间的关系:

Java SE(Java Platform, Standard Edition,Java标准版)就是基于JDK和JRE的。

Java SE为Java EE提供了基础。

Java EE除了基于我们这个所谓的Java SE外,还新加了企业应用所需的类库

三十五、JDK  JRE  JVM的区别:

JdkJava Development ToolKit】就是java开发工具箱, JDK是整个JAVA的核心里边包含了jre,它除了包含jre之外还包含了一些javac的工具类,把java源文件编译成class文件,java文件是用来运行这个程序的,除此之外,里边还包含了java源生的API,java.lang.integer在rt的jar包里边【可以在项目中看到】,通过rt这个jar包来调用我们的这些io流写入写出等

JDK有以下三种版本:

 

J2SE,standard edition,标准版,是我们通常用的一个版本

J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序

J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序

JreJava  Runtime  Enviromental】是java运行时环境,那么所谓的java运行时环境,就是为了保证java程序能够运行时,所必备的一基础环境,也就是它只是保证java程序运行的,不能用来开发,而jdk才是用来开发的,所有的Java程序都要在JRE下才能运行。

包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。

 

Jre里边包含jvm

Jvm:【Java Virtual Mechinal】因为jre是java运行时环境,java运行靠什么运行,而底层就是依赖于jvm,即java虚拟机,java虚拟机用来加载类文件,java中之所以有跨平台的作用,就是因为我们的jvm

 

关系:

 J2se是基于jdk和jre,

 JDK是整个JAVA的核心里边包含了jre,

 Jre里边包含jvm

三十六、报错的状态码:

 301 永久重定向

 302 临时重定向

 304 服务端 未改变

 403 访问无权限

 200 正常

 404 路径

 500 内部错误

三十七、协议以及默认的端口号

ftp   21    文件传输协议

Pop3 110  它是因特网 <http://baike.baidu.com/view/1706.htm>电子邮件<http://baike.baidu.com/view/1524.htm>的第一个离线 <http://baike.baidu.com/view/113466.htm>协议标准

Smtp  25   简单邮件传输协议

http   80   超文本传输协议

oracle 默认端口号1521

mysql默认端口号 3306

三十八、抽象类与接口的区别

 

1.一个类只能进行单继承,但可以实现多个接口

 

2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法;

  接口里面所有的方法的默认修饰符为public abstract,接口里的成员变量默认的修饰符为  pulbic static final

 

       关系

接口和接口      继承

接口和抽象类    抽象类实现接口

类和抽象类      类继承抽象类

类和类          继承

三十九、修饰符的作用

修饰符的作用范围:

 

private  default  protected public

同一个类中      可以 可以  可以  可以

同一个包的类中可以      可以  可以

不同包的子类中      可以      可以

不同包的类中      可以

四十、onready和onload的区别

1.onready比onload先执行

2.onready是在页面解析完成之后执行,而onload是在页面所有元素加载后执行

3.onload只执行最后一个而onready可以执行多个。

四十一、switch默认接受几种数据类型

Short, int, byte, char

四十二、request 跟session的区别

1.他们的生命周期不同,

request对应的是一次请求,

session对应的是一次会话

2.request占用资源比较少,相对来说缺乏持续性,

session资源消耗比较大,所以通常使用request来保存信息

四十七、找到解决svn冲突方法

对于svn冲突,可以采用手工处理将冲突的部分进行整合,

之后备份最新整合后的文件,采用覆盖更新的方式处理完

冲突之后,再把最新整合后的文件进行提交。

 

四十三、反射的描述

      通过字符串可以动态创建java对象,并且可以动态访问方法,属性等。

      我们在项目中的时候封装过数据库jdbc的持久层,其中就利用反射这项 技术来达到通用和灵活的目的。