Java初级面试模拟1

1.简单介绍一下你的项目,说一下项目有什么模块

 

2.说说常见的集合有哪些吧

答:Map接口和Collection接口是所有集合框架的父接口:

Collection接口的子接口包括:Set接口和List接口
Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

3.HashMap是怎么实现key是唯一的?

在HashMap的put方法实现中首先利用了hash()生成key的hashCode,生成一个hash值h1,如果这个h1在HashMap中不存在,那么直接将<key,value>添加
到HashMap中;如果这个值已经存在,那就会找出来HashMap中所有hash值为h1的key,然后分别调用key的equals()方法判断当前谈价的key值是否与
已经存在的key值相同,如果equals()方法返回true,HashMap会使用新的value值来覆盖掉旧的value值,如果equals()方法返回false,说明新增加的key
在HashMap中不存在,因此会在HashMap中创建新的映射关系
哈希冲突:不同的key值有相同的hash值

4.简单说说nio是什么,是哪个版本开始有的?

Java NIO(New IO) 是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。
NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同, NIO支持面向缓冲区的、基于通道的IO操作。为所有的原始类型提供(Buffer)缓存支持
增加通道(Channel)对象,作为新的原始 I/O 抽象
支持锁

5.aio是什么?了解过吗?是哪个版本开始有的?与nio的区别知道吗?


AIO即Asynchronous I/O(异步 I/O), 这是Java 1.7引入的NIO 2.0中用到的.
整个过程中, 用户线程发起一个系统调用之后无须等待, 可以处理别的事情. 由操作系统等待接收内容, 接收后把数据拷贝到用户进程中,
最后通知用户程序已经可以使用数据了, 两个阶段都是非阻塞的

与nio的区别为:
NIO是同步非阻塞的
AIO是异步非阻塞的

6.我看你用过RESTful,你能简单说说RESTful有什么特点吗?使用RESTful的好处是什么?RESTful有什么缺点吗?

REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构
它主要有四个特点:
1.基于资源,("资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层",常用的Representation是json(推荐)或者xml(不推荐)等),资源通过URL来指定和操作。
2.统一接口,对资源的操作包括获取、创建、修改和删除,正好对应HTTP协议的GET,POST,PUT和DELETE方法。
3.连接是无状态性的。(如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,
只要前置操作不成功,后续操作就无法执行;
如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,)
4.能够利用Cache机制来提高性能

优点:接口简单,自解释,让人一看就明白是什么意思, 充分利用了HTTP协议,服务端只需要定义get/post/put/delete的实现,
缺点:规定URL中全是名词,因为一个URL代表的是资源的地址,对于复杂的关系和操作会变得困难

 

7.简单说一下你是怎么理解AOP,方法拦截和AOP有什么区别?xxxx功能是否能用AOP实现

AOP是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态地修改模型以满足新的需求,如增加日志记录、安全验证或事务处理和异常处理

方法拦截对action负责,一般作用于controller层,
SpringAop 主要是拦截对Spirng管理的bean的访问,一般作用于service层

拦截器是链式的处理方式,每次请求都要在这个链的上下跑一遍
AOP有多种切入方式,可以更灵活的配置要监听处理的Bean

8.索引是怎么提高查询的性能的?具体来说说索引


DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。
如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度

索引是用于提高我们查询的效率,但不是任何时候都应该加索引,有几种情况是可以无需加索引的:
1.每次都需要所有表记录,这样的情况下加索引也没有意义
2.对于非唯一的字段,例如“性别”这样大量重复值的字段
3.对于在查询中很少使用的列不应该创建索引,因为增加索引会降低系统维护速度和占据物理空间
3.对于记录比较少的列或者表,增加索引不会带来速度的优化反而浪费了存储空间
4.当修改性能远远大于检索性能时,不应该创建索引。这是因为修改性能和检索性能是互相矛盾的

9.既然说String是不可变的,那么String s = "aaa",为什么同样可以执行a = "bbb"


String s="aaa" 声明了一个可以指向String类型对象的引用,这个引用的名字为s,它指向了一个字符串常量"aaa",(也就是说,s只是一个引用,它指向了一个具体的对象)
a="bbb"这句代码运行后,s指向了另外一个String类型的对象,该对象的内容为"bbb",原来的那个对象还存在内存中,并没有被改变

10.String是怎么做到不可变的?


String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容

11.了解String常量池吗?String s = "aaa";和String b = "aaa";相比,它俩会相等吗?


例如:String s=new String("Hello"),编译期时在String常量池会创建1个对象,运行时在堆中创建一个对象
相等
因为对于==,如果作用于基本数据类型的变量(byte,short,char,int,long,float,double,boolean ),则直接比较其存储的"值"是否相等;
如果作用于引用类型的变量(String),则比较的是所指向的对象的地址(即是否指向同一个对象)。
引申:equals()方法是Object类提供的方法之一,在没有重写equals()方法时,与"=="运算符一样,比较的是引用
而String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。
其他的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。

12.现在有这么一个需求:一个用户可以填写多张调查问卷。调查问卷的数据是不确定的,可以是性别啊,工作年薪呀,等等等。现在你数据库怎么设计呢?


表格:用户表—选用网站用户表
问卷表—包含调查问卷自动编号、标题、前言、开启时间、结束时间、创建时间 、用户ID
问题表—包含问题编号、问题标题、相应的问卷编号、问题类型(单选、多选) 、问卷ID
选项表—包含选项编号、选项对应的问题、问题类型、问卷ID、问题ID
答案表—用户ID、问卷ID、问题ID、答案内容、问题类型

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


1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

14.get和post有什么区别?


(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据

15.说说http的状态码有哪些


200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
400 - Bad Request 客户端请求的语法错误,服务器无法理解
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 - 请求的资源(网页等)不存在
405 Method Not Allowed 客户端请求中的方法被禁止
500 - 内部服务器错误

posted @ 2019-05-29 16:59  梧桐树master  阅读(458)  评论(0编辑  收藏  举报