简单面试题

104 阅读10分钟

1.多态是面向对象程序设计的一个重要特征,即同一引用在不同情况下的多种状态;可以理解成多态是一个接口,使用不同实例会执行不同的操作

2.我知道的集合有以下几种:

List,set和map; list元素是一个一个添加的,有序,可重复(linkedlist,arraylist) set集合中元素是一个一个添加的,无序,不重复(hashset,treeset) map中的元素是一个一个的键值对,key不可以重复,value可以重复(hashmap,treemap) ArrayList和List是一个实现与被实现的关系。list是ArrayList的接口,ArrayList是list的一个实现类

3.接口和抽象类类的异同

两者都不可以实例化对象

两者的实现类或子类中都必须重写接口或抽象类中的抽象方法;

都为大型项目提供约束

多态的实现提供基础

不同之处:

抽象类的子类需要用extends继承抽象类,实现类需要用implements实现接口;

抽象类的子类中只需重写抽象类的抽象方法,接口中的实现类必须重写接口的所有方法

子类与抽象类是继承关系,实现类与接口是实现关系;

抽象类是单继承的,接口间可以实现多继承

修饰符

抽象类有构造方法,接口没有;

4.单例模式:通过单例模式创建的类在当前进程中只有一个实例

5.数组的排序函数:

sort()数组中的元素由低到高排序 rsort(),

asort()索引,arsort(),

ksort()键名,krsort()

6.public和private修饰词的区别

public表示任何类的任何方法都可以访问 private表示只有本类可以访问 默认表示可以被同包下的类访问 protected表示被同包下的类和不同包下的子类访问

1.基本数据类型:int long short string double float char byte

2.值传递和引用传递:(值函数)在调用函数时,将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,不会影响到实际参数 (引用函数)是指在调用函数时将实际参数的地址传递到函数中,如果在函数中对参数进行修改,就会影响到实际参数

3.遍历都有那些方法:普通for循环,加强for循环遍历,迭代器遍历

4.迭代器遍历过程不能增改删查,否则抛异常

5.equals和hash的区别 equals()相等的两个对象hashocde一定相等 hashcode相等的两个对象,他们的eqauls()也就是hashcode不一定是可靠的

6.string,stringbuffer、stringbuilder的区别 string类是final类不能被继承,是一个字符串常量,每次字符串的变化,都相当于创建一个对象,浪费内存

stringbuffer是字符串变量,字符串变化,不需要创建对象,线程安全

stringbuilder是字符串变量,字符串变化,不需要创建对象对象,线程不安全

7.多线程有2种实现方式:一种是实现runable接口,一种是extends Threads类

实现Runnable接口比继承Thread类所具有的优势:

1.适合多个相同的程序代码的线程去共享同一个资源。

  1. 可以避免java中的单继承的局限性。

    1. 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。

      1. 线程池只能放入实现Runable或Callable类的线程,不能直接放入继承Thread的类的线程。

开启线程的唯一方法就是通过Thread的start()方法,run只是一个方法体

坦克大战,多个坦克同时发射炮弹

8.java的反射作用:

在运行时判断任意一个对象所属的类。

  • 在运行时构造任意一个类的对象。

  • 在运行时判断任意一个类所具有的成员变量和方法。

  • 在运行时调用任意一个对象的方法。

9.sleep和wait区别? sleep是线程方法,wait是object方法

sleep不释放锁,wait释放锁

sleep不依赖同步方法,wait依赖

sleep不需要被唤醒,wait需要

10.注解作用 用来充当注释 用作代码的验证(@override) 携带信息

11.http和https的区别 http是超文本传输协议,信息是明文传输, https则具安全性的ssl/tls加密传输协议。

12.内存溢出,内存泄漏: 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存泄露。

内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间。

13.jsp和servlet

jsp经编译后就变成了Servlet.

jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

14.静态导入和动态导入 <%--静态导入 include指令 --%> <%@include file="head.jsp"%>

动态导入 <jsp: include file="head.jsp">

		<%--动态导入
			它会单独将导入的jsp文件:单独进行翻译和编译
			比较占用内存空间
		--%>
		<%--<jsp:include page=""--%>

15.jsp四大作用域:appplication,session,request,page

16.请求转发和重定向:

√转发在服务器端完成的;重定向是在客户端完成的

转发的速度快;重定向速度慢

√转发的是同一次请求;重定向是两次不同请求

转发不会执行转发后的代码;重定向会执行重定向之后的代码

√转发地址栏没有变化;重定向地址栏有变化

转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

17.Cookie与session的区别? 存储的位置不同:cookie数据保存在客户端,session数据保存在服务器端。

存储的数据类型不同(key-string,key-object)

存储的数据大小限制不同(4k 内存)

生命周期的控制(生命周期累计,生命周期间隔)

18.进行表单提交,后台如何获取表单提交的value值呢?

<name标签>request.getParameters("name值")

form文件上传注意事项? 1、method一定要是post 2、enctype默认是传不了文件的,要把它改成form-data,才能传文件

19.如何避免表单重复提交

20.spring

spring是一种轻量级j2EE框架,提供一种新的机制管理业务对象及依赖关系,是一种容器框架用来管理bean,维护bean的关系 轻量级,非侵入式,容器

IOC,动态注入,使用反射原理,不再new对象,和xml配置文件动态创建对象和调用方法 Aop,面向切面编程,可以对某一个类进行监督和控制,从而达到对一个模块的功能扩充,比如日志的记录,权限的检查等

21.拦截器和过滤器

拦截器和过滤器其实都是AOP编程思想的实现

都可以体现例如权限的检查,日志的记录等功能

但是有不同之处: 1、使用范围不同 拦截器既可以用在web层又可以用在Application:和Swing程序中 而filter是Servlet规定的只能用于web程序中

2、规范不同 拦截器是在Spring容器中,是Spring框架支持的 而filter是Servlet规范规定的,是Servlet容器支持的

22.Get和post区别。

√本质区别:GET是从服务器上获得数据;POST是向服务器传递数据

1.url可见性(参数可见 参数不可见)

2.数据传输(拼接url传参,body体传参)

3.缓存性(get支持 post不支持)

4.后退页面反应(get不影响 post重新提交)

5.传输数据大小(get传输大小不超过2-4k,post传输数据可以无限大)

6.数据包(get产生一个tcp包,post产生2个tcp包)

7.安全性:原则上post肯定要比get安全,毕竟传输参数时url不可见

xml解析方式:xml解析方式有四种:DOM解析、SAX解析、DOM4J解析、JDOM解析。

24.数据库事务和隔离级别

原子性,(事务包含的所有操作要么全部成功,要么全部回滚),

一致性,(事务执行前后都必须处于一个一致性状态)

隔离性,(并发事务之间要相互隔离)

持久性;(事务一旦提交,数据库数据永久改变) 脏读,不可重复读,幻读

25.jdbc连接数据库 1、加载jdbc驱动程序;2、创建数据库的连接;3、创建preparedStatement;4、执行SQL语句;5、遍历结果集;6、处理异常,关闭JDBC对象资源。

26.数据库如何处理多对多多表关联

1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。

2.通过表的关系,来帮助我们怎样建表,建几张表。

27.简单的sql语句说出一个 select * from users where name=“zhang”

28.索引作用,优缺点 索引就是一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中的目录,不需要查询整本书内容就可以找到想要的内容。索引可以是唯一的,创建索引允许指定单个列或者多个列。但是它减慢了数据录入的速度。同事也增加了数据库的尺寸大小。

29.数据库的存储过程? 存储过程是一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。

30.ajax跨域请求

代理实现最麻烦,但使用最广泛,任何支持AJAX的浏览器都可以使用这种方式。 JSONP相对简单,但只支持GET方式调用。 XHR2最简单,但只支持HTML5,如果你是移动端开发,可以选择使用XHR2。

31.分页查询怎么实现? limit pageNum-1,pageSize

32.linux常见命令 cd mkdir rm -rf -ls pwd ip addr

33.CSS与JS选择器有哪些?

css5种:类选择器,元素选择器,id选择器,属性选择器,派生选择器

js6种:getElementById()、getElementsByName()、getElementsByTagName()、getElementsByClassName()、querySelector()、querySelectorAll()

34.如何用js判断一个字符串? if (typeof myVar =="string") { alert("I'm a string!"); }

35.Redis属于No-sql数据库类似于MongoDB,是一个完全开源免费的一个高性能的key-value数据库。它是基于内存的数据库,是一种非关系型数据库,不同于mysql,sqlserver,Oracle他们都是存放在硬盘的,读写速度快

36.junit实操 ①将Unit的jar包导入到项目中

② 编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法。 ③ 在测试方法上使用**@Test注解:标注该方法是一个测试方法 ④ 在测试方法中完成被测试方法的预期正确性测试**。(断言)

⑤ 选中测试方法,选择“jUnit运行”,如果测试良好则是绿色;如果测试失败,则是红色

37.maven作用? 导jar包,热部署热编译,寻找依赖并下载