java重要知识点总结

主要详细知识点

常用算法考察

冒泡排序

快速排序

插入排序

希尔排序

归并排序

堆排序

桶排序

动态规划

最长公共子串

最长回文子串

数组的最大k个值

数字的最大连续子数组之和

左旋转字符串

字符串匹配算法:KMP算法

二分查找

 

链表

单链表逆序

两个有序单链表合并

两个单链表是否相交

相交处的节点

单链表倒数第K个数

单链表排序

 

栈和队列

设计包含min函数的栈

两个队列实现栈

两个栈实现队列

一个数组实现栈和队列

 

前序、中序、后续遍历

求二叉树的深度

按层次遍历二叉树

判断二叉树是否为完全二叉树

判断二叉树是否镜面对称

判断两颗树是否相等

 

卡特兰数

出栈顺序

n个节点构成的二叉树个数

括号化

凸多边形三角划分

 

设计模式

Java源码中有哪些设计模式

http://www.iteye.com/news/18725

常见的设计模式类图

http://blog.sina.com.cn/s/blog_8cc6ff5c0101d4cp.html

常见的设计模式的示例:

http://www.jb51.net/article/27973.htm

 

数据库

数据库的crud语句的书写

数据库优化策略、如何优化

海量数据优化

事务

事务中锁分类

事务特性

数据库表锁

行列锁

临时表

索引

存储空间

视图

 

Linux常用命令(最好实战)

http://www.php100.com/html/webkaifa/Linux/2009/1106/3485.html

 

linux上搭建服务器

http://www.cnblogs.com/dudu/archive/2012/12/09/linux-apache-git.html

 

常用的网络端口

http://www.360doc.com/content/11/1202/09/8209768_169068538.shtml

 

Nosqlredis等的熟悉、了解

http://www.yiibai.com/redis/redis_quick_guide.html

 

海量数据的处理

Bit-map、分而治之、hash映射、分布式处理(Hadoop)、Trie树、双层桶排序等

 

Java基础

HashMap的存储机制(很重要,必看)

Set、map区别

Set、list区别

Arraylist、LinkedList区别

String、Stringbufer、StringBuilder区别

HashSet、LinkedHashSet区别

HashMap、TreeMap、LinkedHashMap

熟悉Java集合类的框架图

HashMap、ArrayList、StringBuffer、String等源码的熟悉

线程和进程

线程的特性

线程的状态

多线程并发的实现

线程的创建方式

线程池的使用

Java作用域

final、static、native、等特殊关键字的使用

Java按值传递的过程

重构和重载

抽象类和接口

内部类的使用:匿名内部类、静态内部类等

Java多线程并发、生产者消费者的实现

Java连接数据库的过程

 

JVM内存管理和存储机制

http://blog.csdn.net/lengyuhong/article/details/5953544

 

JVM垃圾回收机制,垃圾回收算法

http://jbutton.iteye.com/blog/1569746

 

JVM加载类过程

 http://www.cnblogs.com/sunada2005/p/3577799.html

 

JVM内存调优

http://www.cnblogs.com/jackyrong/archive/2010/01/21/1653163.html

http://blog.csdn.net/cutesource/article/details/5907418

 

框架相关

对框架的熟悉:SSH (面试过程中问的很少,像jsp、servlet基本不问)

Spring框架组成、AOP、IOC 、用到的设计模式

Hibernate运行机制、缓存的使用、最好看看源码

熟悉和了解JavaScript和jQuery

 

javaIONIO

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

 

IO流包括字节流和字符流:

字节流:对应抽象类为InputStream(输入流)和 OutputStream(输出流)。 FileInputStream、FileOutputStream

字符流:对应抽象类为Reader(输入流)和Writer(输出流)。BufferedReader、InputStreamReader、 StringReader

 

java中异常的分类及结构

Java中的异常类,包括内置的异常类以及自定义的异常类,都直接或者间接地继承至java.lang.Throwable类。在java.lang包中,Throwable类有两个直接子类:Error类和Exception类,Error类及其子类描述了java运行时系统的内部错误和资源耗尽错误。出现这样的错误的,除了通知用户,并接尽力使程序安全地终止之外,没有更好的办法。Exception类的层次结构又分为两个分支:一个分支由RuntimeException派生,另外一个分支包含除RuntimeException类之外的异常类。

 

运行时异常、非运行时异常

运行时异常:RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException、classCastException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

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

 

动态代理机制

动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。动态代理主要包含以下角色:动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定的接口列表的类,该类具有下面描述的行为。代理接口 是代理类实现的一个接口。代理实例 是代理类的一个实例。每个代理实例都有一个关联的调用处理程序 对象,它可以实现接口 InvocationHandler。通过其中一个代理接口的代理实例上的方法调用将被指派到实例的调用处理程序的 Invoke 方法,并传递代理实例、识别调用方法的java.lang.reflect.Method 对象以及包含参数的 Object 类型的数组。调用处理程序以适当的方式处理编码的方法调用,并且它返回的结果将作为代理实例上方法调用的结果返回。

 

try catch finally的使用

1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。
2. 即使try中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。

3. 当try中与finally里,同时出现return , 则只会返回 finally 中的return 结果。
4. finally中的值不能影响try中 即将返回的结果值。
注意: 若finally中没有return在try或catch中有return,那么在执行return跟着语句之后,会把语句的结果新开辟一内存空间,直接把结果的存放此内存空间中。所以,finally中的值不能影响try或catch中即将return的结果。

 

静态成员、非静态成员

(1)类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

(2)在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错

 

抽象类遵循的原则:

(1)abstract关键字只能修饰类和方法,不能修饰字段。

(2)抽象类不能被实例化(无法使用new关键字创建对象实例),只能被继承。

(3)抽象类可以包含属性,方法,构造方法,初始化块,内部类,枚举类,和普通类一样,普通方法一定要实现,变量可以初始化、不初始化但不能初始化后在抽象类中重新赋值或操作该变量(只能在子类中改变该变量)。

(4)抽象类中的抽象方法(加了abstract关键字的方法)不能实现。

(5)含有抽象方法的类必须定义成抽象类。

扩展:抽象类和接口的区别:

(1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

(2)abstractclass 在Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

(3)在abstractclass 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。

(4)abstractclass和interface所反映出的设计理念不同。其实abstractclass表示的是”is-a”关系,interface表示的是”has-a”关系。

(5)实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。抽象类中可以有非抽象方法。接口中则不能有实现方法。

(6)接口中定义的变量默认是publicstatic final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是friendly 型,其值可以在子类中重新定义,也可以在子类中重新赋值。






面试重要知识点复习大纲

一、Java基础部分 (搞定所有技术之后才考虑复习的技术点)

1.数组中的排序问题(笔试或者机试,前者可能性更大)

2.面向对象的理解

3.集合相关的问题,比如hashmap跟hashtable的区别。搞清楚每个集合对象的特性就欧了。

4.多线程启动方式,以及产生死锁的原因和解决办法【多线程问题不是很常问,有精力就复习这块内容】

5.IO流,了解常见的几个流对象以及基本的流操作即可,被机试的可能性比较小。

二、Web基础 (1年工作经验者需要重点复习的技术点)

1.http协议(定义、常见的请求头以及响应头<功能>、状态码)

2.tomcat(目录结构<存放的内容以及配置文件里面能做哪些工作>、常见配置;有能力者可以了解一下tomcat的原理<启动加载问题>)

3.jdbc(编程步骤、与hibernate以及mybatis的区别)

4.servlet(概念的理解;生命周期、线程安全问题、接口相关类型、体系结构<区别>、request以及response的用途、servletContext对象的功能、编码以及路径问题)

5.filter(生命周期、常见应用、dofilter里面的参数、应用场景)

6.jsp(隐式对象、常见标签<指令、动作>、EL以及JSTL)

7.cookie/session(概念的理解;生命周期,session创建的时期,相关方法的使用)

三、五大框架 (1年以上工作经验者需要重点复习的技术点)

1.struts2(action相关的问题<书写方式[区别]、接受请求参数的方式、相关配置、访问servletAPI的方式>;值栈相关问题<定义、内部结构、如何获取值栈对象、EL为什么能访问值栈中的数据>;struts2与springMVC的区别;拦截器与过滤器的区别;struts2工作原理<执行流程>)

2.hibernate(核心思想要了解;开发流程<加载文件的过程>;查询方式;如何优化;sql与hql的区别;update与 saveOrUpdate的区别;get和load的区别;Java对象三种状态的特征以及转换、核心API、一级缓存和二级缓存、延迟加载)

3.spring(springIOC和DI;生命周期;Bean注入属性的方式;aop极其相关名词解释;核心类;applicationContext与beanFactory的区别;bean实例化有哪些方式)

4.springMVC(工作流程;与struts2的区别;乱码问题如何处理;各组件的扩展类型)

5.mybatis(与jdbc/hibernate的区别;)

四、脚本 (此项与第五项均是需要掌握的内容、笔试题居多)

1.JavaScript核心对象


2.浏览器BOM对象

3.文档对象模型DOM

4.常见事件

5.Ajax编程(web交互2种方式的对比)

6.传统Ajax编程的步骤以及从服务器端返回的数据格式(之间的差别)

7.JSON数据格式的转换操作

8.jQuery选择器

9.jQuery的Ajax编程(常见方法)

10.其余的问题都是一些笔试题,让你直接写javascript代码实现某一功能

五、数据库

数据库这一块几乎都是一些概念性的问答题(存储过程、函数、事务、索引、触发器、视图、游标以及一些优化操作),笔试100%会出现,一般考察的都是多表联合查询

六、人事相关 (答案内容比较长,未做文字说明,建议给学员讲解,避免那些不会说的学员出去面试碰壁)

1.自我介绍(注重的是你之前在公司里面工作内容,特别是最近在公司里面做的项目<回答思路参考项目相关问题一>)

2.简单的介绍一下上一家公司的情况/评价

3.你为什么来北京工作,怎样看待跳槽?

4.你对我们公司了解吗?

5.你如果有幸进入我们公司,有什么规划吗?

6.你上一家公司的薪资大概是多少?有哪些组成部分?

7.你有没有投其它公司?如果其它公司也给了offer,你会如何抉择?

8.你有对象吗?打算什么时候结婚生孩子?

9.你对薪资待遇有什么要求?能再低一点吗?

10.你还有什么问题要问我吗?

七、项目相关 (重点讲解问题:商品管理、订单、购物车、单点登录等实现思路问题,其余问题参考文档即可)

1.请介绍一下你最近做的这一个项目吧【思路:项目给谁做的、项目涉及的领域、系统的架构(功能&技术)、系统的用途、系统的部署、使用了哪些比较新颖的技术】

2.谈谈你对电商行业的了解【思路:电商行业的发展、行业技术特点、行业的一些概念】

3.你这个项目大概有哪些功能,你负责了哪些核心功能?【拥有的功能尽可能说多一点,建议10个左右,自己负责的3个大(如商品管理、订单、购物车),其余的都是其他组员开发的任务】

4.谈谈xx(具体的,比如商品管理、订单、购物车)模块/功能的实现思路?实现的过程中涉及到了哪些技术,这些技术能介绍下吗?【可参考“02_电商项目面试问题”里面的答案】

5.你们公司有多少人?有测试吗?有美工吗?整个项目组人员配置是怎么样的?项目开发的流程大概是什么样子的?【检验是否有工作经验的一个问题】


6.这个项目使用了什么构建工具没有?有的话,多模块之间是如何划分的?为什么要这么划分?

7.在这个项目中是如何设计商品规格的?

8.这个系统中你是如何实现跨系统调用的?

9.在这个项目中,CMS系统是如何设计的,简单的说一下设计思路 10.在这个项目中,你们主要使用什么样的数据格式来进行数据的传输的? 11.单点系统的设计思想你了解吗?他在系统架构中的作用是什么?位置如何? 12.你们这个项目中订单ID是怎么生成的?我们公司最近打算做一个电商项目,如果让你设计这块,你会考虑哪些问题?

13.各个服务器的时间不统一怎么办?

14.你们线上部署时什么样的,能画一下吗?

15.你们生产环境的服务器有多少台?

16.你们使用什么做支付的?如果使用易宝做支付,请求超时了怎么处理? 17.你刚才不是说付款成功后易宝会有数据返回吗?如果付款后易宝没有返回,或者返回超时了,但是钱又已经扣了,你怎么办? 18.你们怎么做退款功能的,要多长时间才能把钱退回给用户?

19.你购物车存cookie里边可以实现不登录就可以使用购物车,那么我现在没有登录把商品存购物车了,然后登录了, 然后我换台电脑并且登录了还能不能看见我购物车的信息?如果看不到怎么做到cookie同步,就是在另外一台电脑上可以看到购物车信息 20.如果用户一直向购物车添加商品怎么办?并且他添加一次你查询一次数据库?互联网上用户那么多,这样会对数据库造成很大压力你怎么办?

21.购物车的设计细节问题

八、其他技术问题 (根据自己的精力和实际能力进行选取,主要是为了证明自己的技术能力强、经验足,提升薪资用的)

1.权限控制(一般情况,在公司必须有一定工作经验的开发者才会被分配该功能模块的开发,这意味着学员在刚开始参加工作的那个项目里面绝对不能写的内容。) 这里一般都会提及shiro技术,在这块需要掌握shiro相关的几个组件以及他们的调用关系,然后就是权限设计的几张数据库表(表之间的关系以及每张表里面的重要字段)

2.搜索系统(普通的查询会让面试官问及效率问题,那么势必要提到全文检索技术,由于刚学不是很熟,根据自己掌握的情况进行选择)

3.浏览器跨域问题(前台系统调用可以使用jsonp来实现浏览器跨域问题,去年有学员花几个小时学习这个,仅凭此技术入职8K。)

4.webservice(该技术已有替代技术,如果不会,可以不用花时间去复习)

5.Linux(水太深,只谈自己在项目中就部署的时候用了一下即可)

6.redis(根据自己的能力看是否需要提及次技术,毕竟购物车的实现方式比较多。)


面试重点知识





一、集合:

1 、Collection(是java.util下的接口) 和 Collections(是java.util下的类)。

2 、List, Set,是否继承自Collection接口,Map不是。

3 、ArrayList(线程不安全)和Vector(线程安全)。

4 、HashMap(是线程安全的)和Hashtable(是线程不安全的)。值:只有HashMap可以让你将空值作为一个表的条目的key或value

ListMapSet三个接口,存取元素时,各有什么特点?

List特点:元素有放入顺序,元素可重复 
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 
Map特点:元素按键值对存储,无放入顺序 (应该知道什么是键值对吧!)
List接口有三个实现类:LinkedList,ArrayList,Vector 
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) 
Query接口有一个实现类:LinkList 
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 
  HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 
SortedMap有一个实现类:TreeMap 
其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对 
set 一般无序不重复.map kv 结构 list 有序 

2,集合与数组:数组也是用来存储操作对象,但,数组长度固定,不可变;数组只能存储基本数据类型,例如int,String等;集合长度可变,且一个集合可存储不同类型的对象(个人觉得这点很厉害);
3,集合分类:根据每种容器(集合)对数据的存储方式(数据结构)不同。collection—(List,Set),
List—-(ArrayList(底层是数组数据结构),linkedList(底层是链表数据结构),Vector(底层数据结构是数组))
Set—-(HashSet(底层数据结构是哈希表),TreeSet(底层数据结构是二叉树));

4,List:元素有序(可索引,所以有很多和索引有关的方法),元素可重复;Set:元素无序(存入和取出的顺序不一定一致)且不允许重复;其中,HashSet能保证元素唯一性(利用HashCode方法和equals方法);TreeSet可以对集合中元素进行排序(自然顺序)
5,Map相当于和Collection一个级别的;Map<K,V>该集合存储键值对,且要求保持键的唯一性;
Map—-(HashMap,Hashtable,TreeMap)。

其中,HashMap:底层是哈希表数据结构,不可以存null键、null值,且线程同步
TreeMap:底层是数据机构是二叉树,可以用于给map中的键排序,且线程不同步。

二、数据库:增删改查方法实现



三、框架:SpringMVC的5大组件:

         DispatcherServlet:前端控制器,用于请求到达前端控制器,由它调用其他组件处理用户的请求。

     HandlerMapping:处理器映射器,负责根据用户请求找到Handler(处理器),springmvc提供了不同的映射器实现方式。

       Handler:处理器,对具体的用户请求进行处理。

       HandlerAdapter:处理器适配器,通过HandlerAdapter对处理器进行执行。

       View Resolver:视图解析器,负责将处理结果生成view视图。View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。

四、JSP内置对象:

1.输出输入对象:request对象、response对象、out对象

2.通信控制对象:pageContext对象、session对象、application对象

3. Servlet对象:page对象、config对象

4.错误处理对象:exception对象

五、Java基本类型

基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。

六、说出作用域public,private,protected,以及不写时的区别

 



主要详细知识点

常用算法考察

冒泡排序

快速排序

插入排序

希尔排序

归并排序

堆排序

桶排序

动态规划

最长公共子串

最长回文子串

数组的最大k个值

数字的最大连续子数组之和

左旋转字符串

字符串匹配算法:KMP算法

二分查找

 

链表

单链表逆序

两个有序单链表合并

两个单链表是否相交

相交处的节点

单链表倒数第K个数

单链表排序

 

栈和队列

设计包含min函数的栈

两个队列实现栈

两个栈实现队列

一个数组实现栈和队列

 

前序、中序、后续遍历

求二叉树的深度

按层次遍历二叉树

判断二叉树是否为完全二叉树

判断二叉树是否镜面对称

判断两颗树是否相等

 

卡特兰数

出栈顺序

n个节点构成的二叉树个数

括号化

凸多边形三角划分

 

设计模式

Java源码中有哪些设计模式

http://www.iteye.com/news/18725

常见的设计模式类图

http://blog.sina.com.cn/s/blog_8cc6ff5c0101d4cp.html

常见的设计模式的示例:

http://www.jb51.net/article/27973.htm

 

数据库

数据库的crud语句的书写

数据库优化策略、如何优化

海量数据优化

事务

事务中锁分类

事务特性

数据库表锁

行列锁

临时表

索引

存储空间

视图

 

Linux常用命令(最好实战)

http://www.php100.com/html/webkaifa/Linux/2009/1106/3485.html

 

linux上搭建服务器

http://www.cnblogs.com/dudu/archive/2012/12/09/linux-apache-git.html

 

常用的网络端口

http://www.360doc.com/content/11/1202/09/8209768_169068538.shtml

 

Nosqlredis等的熟悉、了解

http://www.yiibai.com/redis/redis_quick_guide.html

 

海量数据的处理

Bit-map、分而治之、hash映射、分布式处理(Hadoop)、Trie树、双层桶排序等

 

Java基础

HashMap的存储机制(很重要,必看)

Set、map区别

Set、list区别

Arraylist、LinkedList区别

String、Stringbufer、StringBuilder区别

HashSet、LinkedHashSet区别

HashMap、TreeMap、LinkedHashMap

熟悉Java集合类的框架图

HashMap、ArrayList、StringBuffer、String等源码的熟悉

线程和进程

线程的特性

线程的状态

多线程并发的实现

线程的创建方式

线程池的使用

Java作用域

final、static、native、等特殊关键字的使用

Java按值传递的过程

重构和重载

抽象类和接口

内部类的使用:匿名内部类、静态内部类等

Java多线程并发、生产者消费者的实现

Java连接数据库的过程

 

JVM内存管理和存储机制

http://blog.csdn.net/lengyuhong/article/details/5953544

 

JVM垃圾回收机制,垃圾回收算法

http://jbutton.iteye.com/blog/1569746

 

JVM加载类过程

 http://www.cnblogs.com/sunada2005/p/3577799.html

 

JVM内存调优

http://www.cnblogs.com/jackyrong/archive/2010/01/21/1653163.html

http://blog.csdn.net/cutesource/article/details/5907418

 

框架相关

对框架的熟悉:SSH (面试过程中问的很少,像jsp、servlet基本不问)

Spring框架组成、AOP、IOC 、用到的设计模式

Hibernate运行机制、缓存的使用、最好看看源码

熟悉和了解JavaScript和jQuery

 

javaIONIO

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

 

IO流包括字节流和字符流:

字节流:对应抽象类为InputStream(输入流)和 OutputStream(输出流)。 FileInputStream、FileOutputStream

字符流:对应抽象类为Reader(输入流)和Writer(输出流)。BufferedReader、InputStreamReader、 StringReader

 

java中异常的分类及结构

Java中的异常类,包括内置的异常类以及自定义的异常类,都直接或者间接地继承至java.lang.Throwable类。在java.lang包中,Throwable类有两个直接子类:Error类和Exception类,Error类及其子类描述了java运行时系统的内部错误和资源耗尽错误。出现这样的错误的,除了通知用户,并接尽力使程序安全地终止之外,没有更好的办法。Exception类的层次结构又分为两个分支:一个分支由RuntimeException派生,另外一个分支包含除RuntimeException类之外的异常类。

 

运行时异常、非运行时异常

运行时异常:RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException、classCastException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

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

 

动态代理机制

动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。动态代理主要包含以下角色:动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定的接口列表的类,该类具有下面描述的行为。代理接口 是代理类实现的一个接口。代理实例 是代理类的一个实例。每个代理实例都有一个关联的调用处理程序 对象,它可以实现接口 InvocationHandler。通过其中一个代理接口的代理实例上的方法调用将被指派到实例的调用处理程序的 Invoke 方法,并传递代理实例、识别调用方法的java.lang.reflect.Method 对象以及包含参数的 Object 类型的数组。调用处理程序以适当的方式处理编码的方法调用,并且它返回的结果将作为代理实例上方法调用的结果返回。

 

try catch finally的使用

1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。
2. 即使try中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。

3. 当try中与finally里,同时出现return , 则只会返回 finally 中的return 结果。
4. finally中的值不能影响try中 即将返回的结果值。
注意: 若finally中没有return在try或catch中有return,那么在执行return跟着语句之后,会把语句的结果新开辟一内存空间,直接把结果的存放此内存空间中。所以,finally中的值不能影响try或catch中即将return的结果。

 

静态成员、非静态成员

(1)类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

(2)在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错

 

抽象类遵循的原则:

(1)abstract关键字只能修饰类和方法,不能修饰字段。

(2)抽象类不能被实例化(无法使用new关键字创建对象实例),只能被继承。

(3)抽象类可以包含属性,方法,构造方法,初始化块,内部类,枚举类,和普通类一样,普通方法一定要实现,变量可以初始化、不初始化但不能初始化后在抽象类中重新赋值或操作该变量(只能在子类中改变该变量)。

(4)抽象类中的抽象方法(加了abstract关键字的方法)不能实现。

(5)含有抽象方法的类必须定义成抽象类。

扩展:抽象类和接口的区别:

(1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

(2)abstractclass 在Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

(3)在abstractclass 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。

(4)abstractclass和interface所反映出的设计理念不同。其实abstractclass表示的是”is-a”关系,interface表示的是”has-a”关系。

(5)实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。抽象类中可以有非抽象方法。接口中则不能有实现方法。

(6)接口中定义的变量默认是publicstatic final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是friendly 型,其值可以在子类中重新定义,也可以在子类中重新赋值。






一、集合:

1 、Collection(是java.util下的接口) 和 Collections(是java.util下的类)。

2 、List, Set,是否继承自Collection接口,Map不是。

3 、ArrayList(线程不安全)和Vector(线程安全)。

4 、HashMap(是线程安全的)和Hashtable(是线程不安全的)。值:只有HashMap可以让你将空值作为一个表的条目的key或value

ListMapSet三个接口,存取元素时,各有什么特点?

List特点:元素有放入顺序,元素可重复 
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 
Map特点:元素按键值对存储,无放入顺序 (应该知道什么是键值对吧!)
List接口有三个实现类:LinkedList,ArrayList,Vector 
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) 
Query接口有一个实现类:LinkList 
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 
  HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 
SortedMap有一个实现类:TreeMap 
其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对 
set 一般无序不重复.map kv 结构 list 有序 

2,集合与数组:数组也是用来存储操作对象,但,数组长度固定,不可变;数组只能存储基本数据类型,例如int,String等;集合长度可变,且一个集合可存储不同类型的对象(个人觉得这点很厉害);
3,集合分类:根据每种容器(集合)对数据的存储方式(数据结构)不同。collection—(List,Set),
List—-(ArrayList(底层是数组数据结构),linkedList(底层是链表数据结构),Vector(底层数据结构是数组))
Set—-(HashSet(底层数据结构是哈希表),TreeSet(底层数据结构是二叉树));

4,List:元素有序(可索引,所以有很多和索引有关的方法),元素可重复;Set:元素无序(存入和取出的顺序不一定一致)且不允许重复;其中,HashSet能保证元素唯一性(利用HashCode方法和equals方法);TreeSet可以对集合中元素进行排序(自然顺序)
5,Map相当于和Collection一个级别的;Map<K,V>该集合存储键值对,且要求保持键的唯一性;
Map—-(HashMap,Hashtable,TreeMap)。

其中,HashMap:底层是哈希表数据结构,不可以存null键、null值,且线程同步
TreeMap:底层是数据机构是二叉树,可以用于给map中的键排序,且线程不同步。

二、数据库:增删改查方法实现



三、框架:SpringMVC的5大组件:

         DispatcherServlet:前端控制器,用于请求到达前端控制器,由它调用其他组件处理用户的请求。

     HandlerMapping:处理器映射器,负责根据用户请求找到Handler(处理器),springmvc提供了不同的映射器实现方式。

       Handler:处理器,对具体的用户请求进行处理。

       HandlerAdapter:处理器适配器,通过HandlerAdapter对处理器进行执行。

       View Resolver:视图解析器,负责将处理结果生成view视图。View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。

四、JSP内置对象:

1.输出输入对象:request对象、response对象、out对象

2.通信控制对象:pageContext对象、session对象、application对象

3. Servlet对象:page对象、config对象

4.错误处理对象:exception对象

五、Java基本类型

基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。

六、说出作用域public,private,protected,以及不写时的区别

 


猜你喜欢

转载自blog.csdn.net/qq_38977097/article/details/80821086