Java面试基础知识汇总-01

  1. Java 8大基本数据类型

  byte  int   short  long  char  boolean  float  double    

 

  1. Jsp  9大内置对象
  1. request
  2. response
  3. session
  4. application  同 request.getServletContext
  5. page
  6. pageContent
  7. exception
  8. config   同 Servelt 的 init 方法里的 ServletConfig 参数
  9. out  response.getWriter()
  1. Spring  5种通知方式
  1. around(环绕通知):目标方法执行前执行后都调用 
    2.before(
    前置通知):目标方法调用前被调用 
    3.after(
    后通知):目标方法调用后调用 
    4.throws(
    抛出异常通知):目标方法抛出异常调用 
    5.afterReturning
    表示返回后通知。在目标方法正常执行完后,执行该方法。如果有异常,则不执行
  1. Servlet的生命周期:

   加载和实例化(new A())、初始化(init)、处理请求(service)以及服务结束(destroy)

  1. forward 与 redirect 的区别
  1. 是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。 
    2.关于request: 由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用

简答:是服务端行为,客户端看到的url不变,服务端可传递参数

   redirect(重定向):

1.是客户端的重定向,是完全的跳转。即服务器返回的一个url给客户端浏览器,然后客户端浏览器会重新发送一次请求,到新的url里面,因此浏览器中显示的url网址会发生变化。 
2.
因为这种方式比forward多了一次网络请求,因此效率会低于forward

6. JSP 中动态 include 与静态 include 的区别

   动态 include 用 jsp:include 动作实现:<jsp:include page="test.jsjp" flush="true"/>,它总是检查所包含文件中的变化,适用于包含动态页面,并且可以带参数;

  单独编译,会编译成两个文件,互不影响

静态 include 用 include 伪代码实现,它不会检查所含文件的变化,适用于包含静态页面:<%@ include file="test.html" %>,先合并后,整体编译

  1. Jsp 三大指令: page,  include,   taglib

   <%@ page language="java" pageEncoding="utf-8 contentType="text/html;charset=utf-8" %>

<%@ include file="test.html" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>

8.  jsp 7个动作指令

  1. jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
  2. jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
  3. jsp:include: 用于动态引入一个 JSP 页面。
  4. jsp:p1ugin: 用于下载 JavaBean 或 Applet 到客户端执行。
  5. jsp:useBean: 使用 JavaBean。
  6. jsp:setProperty: 修改 JavaBean 实例的属性值。
  7. jsp:getProperty: 获取 JavaBean 实例的属性值

9. GET 与 POST 的区别

   form 中的 get 和 post 方法,在数据传输过程中分别对应了 http 协议中的  GET 与 POST 方法。

GET 是用来从服务器上获取数据,而 POST 是用来向服务器上传数据

GET 将表单中数据按 variable=value 的形式,添加到 action 所指向的 URL 后面,两者使用“?”连接,而多个变量之间使用“&”连接;POST 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向的 URL

GET 是不安全的,因为在传输过程,数据被放在请求的 URL 中;POST 的所有操作对用户来说是不可见的

GET传输的数据量小,这主要是因为受 URL 长度限制;POST 可以传输大量的数据,所以上传文件只能使用 POST

GET 限制 form 表单的数据集必须为 ASCII 字符,而 POST 支持整个 ISO10646 字符集

GET 是 form 的默认方法

10. JSP 和 Servlet 有哪些相同点和不同点,它们之间的联系是什么

      Servlet----发展---àJsp(jsp是在servlet的基础上发展的,jsp编译后,会编译成Servlet类)

Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为 .jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑

11. jsp四种数据共享范围:

    pageContext:本页面; session:一个web会话; Application:整个web应用; Request:web请求中

12. 12、对 MVC 的理解,MVC 有什么优缺点,结合Struts,说明在一个 Web 应用中如何去使用

基于 Java 的 Web 应用系统采用 MVC 架构模式,即 model(模型)、view(视图)、control(控制器)分离设计;这是目前 Web 应用服务系统的主流设计方向

MVC 设计模式:应用观察者模式的框架模式

model:处理业务逻辑的模块,每一种处理一个模块(模型,操作数据的业务处理层,并独立于表现层)

view:负责页面显示,显示 model 处理结果给用户,主要实现数据到页面转换过程(视图,通过客户端数据类型显示数据,并回显模型层的执行结果)

control:负责请求分发,把 form 数据传递给 model 处理,把处理结果的数据传递给 view 显示(控制器,视图层和模型层的桥梁,控制数据的流向,接受视图发出的事件,并重绘视图)

JSP + Servlet + JavaBean,以控制器为核心,JSP 只负责显示和收集数据,Servlet,连接视图和模型,将视图层数据发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体承载数据,基本上大多数的项目都是使用这种 MVC 的实现模式

13. J2EE 是技术还是平台还是框架

  J2EE 本身是一个标准,一个为企业分布式应用开发提供的标准平台

  J2EE 也是一个框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技术

14. 如何输出某种编码的字符串 String str = new String("testABC".getBytes("iso-8859-1"), "utf-8");

15. 什么是 ORM

   对象关系映射(Object-Relational Mapping)是一种为了解决面向对象与面向关系数据库存在的互不匹配的技术,简单说,ORM 是通过使用描述对象和数据库之间映射的元数据,将 Java 程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另一种形式

16.如何实现jsp页面的的单线程模式

   <%@ page isThreadSafe=”false”%>,即实现SingleThreadModel这个接口

17.java内部类

/**

     * A.class 中可以增加一个静态内部类,如果是静态内部类,可以增加静态方法和非静态方法

     * A.class中可以增加一个非静态内部类,非静态内部类中,不能有非静态方法

     * method中只能增加一个非静态内部类

     */

18. short s1 =1 ;s1 =s1 + 1; 有什么错吗?

  答案: 基本类型在做加的时候,会自动提升表达式的类型;

    会将short,byte,char int 的类型自动提升为int类型

    ,所以会报can not convert from int to short

Short s1=1; s1+=1; 会报错吗?

不会,+=java语言规定的运算符,java编译器会对它进行特殊处理,因为可以正确编译。

JDK8之前,switch的范围:byte,int , char, enum,String ;

float,double,long均不允许

       

 

19.java&&&; &两边都执行;&&第一个为false时,则不执行;

20.java中有没有gotojava中的保留字,没有在java中使用,何为保留字?Java 保留字列表: Java保留字是指现有Java版本尚未使用 但以后版本可能会作为关键字使用,你不能使用保留关键字来命名类、方法或变量

 

21.注意test7test8的写法,test7会报异常,而test8不会

 

22.Overload(重载)和Override(重写)

23.抽象类可以有构造函数吗?

抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。

24.抽象类和接口的区别?

答案:1.抽象类可以有构造函数,接口中不能有构造函数

  1. 抽象类中可以有普通的成员变量,接口中没有普通成员变量
  2. 抽象类中可以包含非抽象的普通方法,接口中所有的方法必须都是抽象的
  3. 一个类可以实现多个接口,但只能继承一个抽象类

25.String, StringBuffer,StringBuilder

   

String

线程安全

 

JDK1.0

最慢

StringBuffer

线程安全

多线程

JDK1.0

中间

StringBuilder

线程不安全

单线程

JDK1.5

最快

26 异常:(运行时异常,受检查异常)

 

 

Throw,thows,try catch finally

throws关键字通常被应用在声明方法时,用来指定可能抛出的异常

throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行

27.

 

返回结果0;编译器会先在catch中,把d缓存,等执行完finally之后,接着再返回缓存中的d的值

28.final,finally,finalize

   Final修饰类,表示此类不可继承,修饰方法表示不可覆盖,修改属性表示不可变;

 Finally 是异常处理语句结构的一部分,总是执行

Finalize:Object的一个方法,用来回收资源

29. ArrayListVector的区别?

 

扩容

ArrayList为原来的0.5

Vector为原来的1

 

 

30.

 

 

   

如果是TreeSet的话,则需要实现Compareble接口

如何回答List与Map区别?

 一个是存贮单列数据的集合,另一个是存贮键和值这样的双列数据的集合,list中存贮的数据是有序的,并且允许重复;Map中存贮的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的

 

treeSet是一个包含有序的且没有重复元素的集合,通过TreeMap实现的

  • HashSet:是最常用的,查询速度最快,因为 内部以HashMap来实现,所以插入元素不能保持插入次序
  • TreeSet:基于TreeMap,生成一个总是处于排序状态的set,它实现了SortedSet接口,内部以 TreeMap来实现
  • TreeMap:键以某种排序规则排序,内部以red-black(红-黑)树数据结构实现,实现了SortedMap接口,具体可参
  • List:保证以某种特定插入顺序来维护元素顺序,即保持插入的顺序,另外元素可以重复。元素可以使用Collectin.sort(list) 进行排序
  • Set:维持它自己的内部排序,随机访问不具有意义。另外元素不可重复treeset排序不需要调用Collection.Sort进行排序
  • HashSet:是最常用的,查询速度最快,因为 内部以HashMap来实现,所以插入元素不能保持插入次序

    在使用Collections.sort(list)或者Arrays.Sort(list)时候,一定要实现Comparable接口

    

    Collections.sort(listA, new Comparator<Person>() {

            public int compare(Person arg0, Person arg1) {

                return arg0.getOrder().compareTo(arg1.getOrder());

            }

        });

   这种也行

   

  • HashMap: 以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的,其内部定义了一个hash表数组(Entry[] table),元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引,如果有冲突,则使用散列链表的形式将所有相同哈希地址的元素串起来,可能通过查看HashMap.Entry的源码它是一个单链表结构。
  • Hashtable:也是以哈希表数据结构实现的,解决冲突时与HashMap也一样也是采用了散列链表的形式,不过性能比HashMap要低。
  • LinkedHashMap:继承HashMap,内部实体LinkedHashMap.Entry继承自HashMap.EntryLinkedHashMap.EntryHashMap.Entry的基础上新增了两个实体引用(Entry before, after),这样实体可以相互串链起来形成链,并且在LinkedHashMap中就定义了一个头节点(Entry header)用来指向循环双向链的第一个元素(通过after指向)与最后一个元素(通过before指向)。在添加一个元素时,先会通过父类HashMap将元素加入到hash表数组里,然后再会在链尾(header.before指向位置)添加(当然这一过程只是调整LinkedHashMap.Entry对象内部的before, after而已,而不是真真创建一个什么新的链表结构向里加那样);删除先从hash表数组中删除,再将被删除的元素彻底的从双向链中断开。其实在链中添加与删除操作与LinkedList是一样的,可以参考《Java集合框架之LinkedListListIterator实现源码分析  

5 集合中键值是否允许null小结

  • List:可以有多个null,可以有重复值
  • HashSet:能插入一个null(因为内部是以 HashMap实现 ),忽略不插入重复元素。
  • TreeSet:不能插入null (因为内部是以 TreeMap 实现  ,元素不能重复,如果待插入的元素存在,则忽略不插入,对元素进行排序。
  • HashMap:允许一个null键与多个null值,若重复键,则覆盖以前值
  • TreeMap:不允许null(实际上可以插入一个null键,如果这个Map里只有一个元素是不会报错的,因为一个元素时没有进行排序操作,也就不会报空指针异常,但如果插入第二个时就会立即报错),但允许多个null值,覆盖已有键值。
  • HashTable不允许null键与null(否则运行进报空指针异常)。也会覆盖以重复值。基于线程同步。

31. java三大版本

JAVAEE企业版)网站开发,servlet,jdbc, jndi,ejb,jsp

标准版(J2SE)类似于C++,主要做桌面软件,包括swing 等

JAVAME(微缩版)手机或者嵌入式软件,不是android,是以前那种机的java应用。

32. private只能本类,protected本包,非包的子类本身,默认本包

 

 

33. comparable与Comparetor区别,String实现了comparable接口,要想实现TreeSet或者TreeMap必须实现compareble接口;

 

集合总结:List: ArrayList,Vector,linkedlist

Set:HashSet,TreeSet

Map:HashMap,HashTable,TreeMap,WeakedHashMap,IdentityHashMap(key1==key2),EnumMap等

        判断key是否重复,先判断hashcode,再判断equals

33. java  IO (字节流InputStream,OutPutStream,字符流InputStreamReader,OutPutStreamReader)

    1. OutputStreamWrite

2. InputStreamReader

3. BufferReader

4. BufferWrite

5. BufferInputStream(同FileInputStream)

6. BufferOutputStream(同FileOutputStream)

7. ByteArrayInputStream

8. ByteArrayOutputStream

9. (OutputStream的子类)System.out,System.err

10(InputStream的子类)System.in

11. FileWriter ,FileReader

13. FileOutputStream ,FileInputStream

34.java序列化,实现Serializable接口DataOutputStream  DataInputStream

35. java中的heap(堆)和stack(栈,即new 对象)的区别

36.局部变量前不能有privae,public,protected修饰符,final可以修饰

 

37.什么叫注解Annotation:在JDK1.5之后,增加的一个新特性,这种特性被称为元数据特性,注解其实就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相对应的处理

   @RetentionSourceRunTimeClass

  @Inherited是否被继承

  @Target:

 

38.form表单的三种提交方式

     1.application/x-www-form-urlencoded 窗体数据被编码为名称/值对

      2. multipart/form-data(文件上传,被编码成一条信息,以流发送过去)

      3.text/plain

      application/octet-stream 后台接收参数只能有一个

39. 类的三种加载方式 1. Class.forName;2. Object.class;  3.object.getClass();

40JavaClassLoader。像rt.jar就是java.langjar

     

 

 

 

 

ClassLoader cl = Test.class.getClassLoader();

System.out.println("ClassLoader is:"+cl.toString());

ClassLoader is:sun.misc.Launcher$AppClassLoader@73d16e93

 

ClassLoader c2 = Test.class.getClassLoader().getClassLoader();

System.out.println("ClassLoader2 is:"+c2.toString());

ClassLoader2 is:sun.misc.Launcher$ExtClassLoader@87aac27

 

System.out.println("ClassLoader is:"+ int.class.getClassLoader());

ClassLoader is:sun.misc.Launcher$AppClassLoader@73d16e93

Exception in thread "main" java.lang.NullPointerException

    at ClassLoaderTest.main(ClassLoaderTest.java:15)

 

HashMap、Hashtable、ConccurentHashMap三者的区别

HashMap线程不安全,数组+链表+红黑树
Hashtable线程安全,锁住整个对象,数组+链表
ConccurentHashMap线程安全,CAS+同步锁,数组+链表+红黑树
HashMap的key,value均可为null,其他两个不行

        IO 阻塞同步通信模式,客户端与服务端三次握手,简单,吞吐量小。关键词:Socket和ServerSocket;

        NIO,非阻塞同步通信模式,客户端与服务端通过Channel连接,采用多路复用器轮询注册的Channel。关键词:SocketChannel和ServerSocketChannel;

        AIO,非阻塞异步通信模式,基于事件和回调机制,采用异步通道实现异步通信

 

    

   

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值