点击蓝字关注我们!
1.int 和 Integer 有什么区别?
答: Java 是一个近乎纯洁的面向对象编程语言, 但是为了编程的方便还是引入了基本数据类型, 但是为了能够将这些基本数据类型当成对象操作, Java 为每一个基本数据类型都引入了对应的包装类型. int 的包装类就是 Integer, 从 Java 5 开始引入了自动装箱 / 拆箱机制, 使得二者可以相互转换. Java 为每个原始类型提供了包装类型:
- 原始类型: boolean,char,byte,short,int,long,float,double
- 包装类型: Boolean,Character,Byte,Short,Integer,Long,Float,Double
2. 解释内存中的栈 (stack), 堆(heap) 和静态区 (static area) 的用法.
答: 通常我们定义一个基本数据类型的变量, 一个对象的引用, 还有就是函数调用的现场保存都使用内存中的栈空间; 而通过 new 关键字和构造器创建的对象放在堆空间; 程序中的字面量 (literal) 如直接书写的 100,"hello" 和常量都是放在静态区中. 栈空间操作起来最快但是栈很小, 通常大量的对象都是放在堆空间, 理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用.
3. 重载 (Overload) 和重写 (Override) 的区别. 重载的方法能否根据返回类型进行区分?
答: 方法的重载和重写都是实现多态的方式, 区别在于前者实现的是编译时的多态性, 而后者实现的是运行时的多态性. 重载发生在一个类中, 同名的方法如果有不同的参数列表 (参数类型不同, 参数个数不同或者二者都不同) 则视为重载; 重写发生在子类与父类之间, 重写要求子类被重写方法与父类被重写方法有相同的返回类型, 比父类被重写方法更好访问, 不能比父类被重写方法声明更多的异常(里氏代换原则). 重载对返回类型没有特殊的要求.
4.servlet 执行流程
答: 客户端发出 http 请求, web 服务器将请求转发到 servlet 容器, servlet 容器解析 url 并根据 web.xml 找到相对应的 servlet, 并将 request,response 对象传递给找到的 servlet,servlet 根据 request 就可以知道是谁发出的请求, 请求信息及其他信息, 当 servlet 处理完业务逻辑后会将信息放入到 response 并响应到客户端.
5.springMVC 的执行流程
答: springMVC 是由 dispatchservlet 为核心的分层控制框架. 首先客户端发出一个请求 web 服务器解析请求 url 并去匹配 dispatchservlet 的映射 url, 如果匹配上就将这个请求放入到 dispatchservlet,dispatchservlet 根据 mapping 映射配置去寻找相对应的 handel, 然后把处理权交给找到的 handel,handel 封装了处理业务逻辑的代码, 当 handel 处理完后会返回一个逻辑视图 modelandview 给 dispatchservlet, 此时的 modelandview 是一个逻辑视图不是一个正式视图, 所以 dispatchservlet 会通过 viewresource 视图资源去解析 modelandview, 然后将解析后的参数放到 view 中返回到客户端并展现.
6.Tomcat 服务器优化(内存, 并发连接数, 缓存)
答: a) 内存优化: 主要是对 Tomcat 启动参数进行优化, 我们可以在 Tomcat 启动脚本中修改它的最大内存数等等.
b) 线程数优化: Tomcat 的并发连接参数, 主要在 Tomcat 配置文件中 server.xml 中配置, 比如修改最小空闲连接线程数, 用于提高系统处理性能等等.
c) 优化缓存: 打开压缩功能, 修改参数, 比如压缩的输出内容大小默认为 2KB, 可以适当的修改.
7. 类加载的过程
答: 遇到一个新的类时, 首先会到方法区去找 class 文件, 如果没有找到就会去硬盘中找 class 文件, 找到后会返回, 将 class 文件加载到方法区中, 在类加载的时候, 静态成员变量会被分配到方法区的静态区域, 非静态成员变量分配到非静态区域, 然后开始给静态成员变量初始化, 赋默认值, 赋完默认值后, 会根据静态成员变量书写的位置赋显示值, 然后执行静态代码. 当所有的静态代码执行完, 类加载才算完成.
8,Java 有没有 goto?
答: goto 是 Java 中的保留字, 在目前版本的 Java 中没有使用.(根据 James Gosling(Java 之父)编写的The Java Programming Language一书的附录中给出了一个 Java 关键字列表, 其中有 goto 和 const, 但是这两个是目前无法使用的关键字, 因此有些地方将其称之为保留字, 其实保留字这个词应该有更广泛的意义, 因为熟悉 C 语言的程序员都知道, 在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字).
9. 在 Java 中, 如何跳出当前的多重嵌套循环?
答: 在最外层循环前加一个标记如 A, 然后用 break A; 可以跳出多重循环.(Java 中支持带标签的 break 和 continue 语句, 作用有点类似于 C 和 C++ 中的 goto 语句, 但是就像要避免使用 goto 一样, 应该避免使用带标签的 break 和 continue, 因为它不会让你的程序变得更优雅, 很多时候甚至有相反的作用, 所以这种语法其实不知道更好).
来源: http://mp.weixin.qq.com/s/fJwtAxTOUk1-gxuPdDW_YQ