1.hashmap的数据结构是什么?
答:在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
2.说一说java如何实现的跨平台
答:java针对不同的开发系统 开发了不同的JVM虚拟机,并提供了统一的接口(java API),对于我们开发者而言,只需要编写一次代码就可以在不同的系统中执行java代码。
3.如何搭建一个java开发环境(可笔试,可上机)
答:下载对应系统的jdk文件,并配置环境变量。
4.讲一下java中int占用几个字节。
答:int 占4个字节,32位。
扩展问题 :java中的基本数据类型
(整型:int byte long short )
(浮点型:float double)
(字符型:char)
(布尔类型:boolean)
5.面向对象的特征有哪些方面
答:封装,继承,多态(父类引用指向子类实例,在运行时进行绑定),抽象(可算)
6.有了基本的数据类型 为什么还需要包装类型。
基本数据类型转为包装类型时,进行装箱。反之拆箱。
答:java是面向对象的语言,而基本数据类型不具备面向对象的基本特征。
7.说一下 “”和equals的区别。
答:“”用来判断两个变量的值是否相等,变量可以分为基本数据类型和引用数据类型。
基本数据类型时,直接比较值,引用数据类型时,比较对应引用的内存的首地址值。
equals比较的时,比较的是特征。需要注意一些重写了equals方法的类,一般来讲我们都举例为string类。
8.讲一下string,stringBuilder,stringBuffer的区别。
答:java中提供类这三个类来表示和操作字符串。
String是内容不可变的字符(底层使用的是final修饰的字符数组 final char[])
StringBuilder和StringBuffer是内容可以改变的字符串。(没有使用final修饰的char[])
其中StringBuilder是线程不安全的效率较高(append方法上没有在sync关键字),StringBuffer是线程安全的(加了sync关键字),效率较低。
9.讲一下java中的集合。
答:conllection(存value的)和Map(存key-value的)
conllection的实现分别有 list和set.
list和set的区别:list是有序的,可以重复的。
set是无序的,不可以重复的。(一个对象要想存储在set中必须重写equals和hashcode方法)
10.ArrayList和LinkedList的区别和使用场景。
答:ArrayList底层实现为数组,LinkedList底层为链表。
数组的特征为 具有索引,查询效率非常快,而插入和删除较慢(数组为一串连续的内存空间,新增或删除一个后面的元素都需要进行内存的移动)。
链表结构的特征为 元素会记录上一个或者下一个元素的地址,在查询时,从头部开始查询,而删除和新增元素时,只需要改变引用地址,所以新增和删除效率较高而查询效率较低。
ArrayList适用于:查询较多,但新增和删除较少的场景。
LinkedList适用于:新增和删除较多,但查询较少的场景。
11.HashMap和HashTable的区别。
答:相同点:都可以存储Key-value
不同点:1.HashMap可以将null存在在key或者value中,而HashTable不可以。
2.HashMap是线程不安全的,HashTable是线程安全的。
我又想效率高,又想安全。怎么办:有办法 JDK1.5以后提供了一个叫做ConcurrentHashMap的类,这个类的实现方式类似于HashTable,但是这个类的实现方式为将HashTable又分为几部分,我再来分别加锁,在第一部分加锁时,我可以操作其他部分的,效率就提高了。
12.实现一个拷贝文件的工具类是使用字节流还是字符流。
答:考虑到拷贝文件的不确定性,有可能是声音或者图片等,我们应该使用字节流。字符流是操作字符的。
13.讲一下线程的几种实现方式。
答:继承Thread类实现一个线程(继承的扩展性不强,java只支持单继承)
重写Runnable接口实现一个线程。
怎么启动 thread.start
可以调用setName方法 设置名称。
14.有没有使用过线程并发库。
简单了解过:
java的Executors类提供了四个静态方法来创建线程池。
线程池的作用:
(1)、可以指定线程的个数,不会因为线程太多而导致系统运行缓慢或者崩溃。
(2)、线程池不需要每次都去创建或者销毁线程,节约了资源。
(3)、线程池不需要每次都出创建,响应时间更快。
15.你所了解的设计模式有哪些?
答:单例模式、工厂方法、包装模式、
16.讲一下get请求和post请求的区别。
答:相同点:首先都是http的请求方式。
不同点:get请求会在地址栏中显示出来,而post不会。
get请求的数据传输很小,post大很多。
get比post安全性低很多。
17.说一下servlet的理解,或者说servlet是什么?
答:servlet是java编写的服务器端程序。servlet都是实现了servlet这个类的。
其主要功能是交互式的浏览和修改数据,生成动态的web内容。
18.简单说一下servlet的声明周期。
答:servlet具有良好的生命周期定义,包括加载,实例化,初始化,处理请求,以及服务结束,这些方法有servlet接口init,service,destory方法表达。
加载servlet的类---->实例化servlet----->调用servlet的init方法进行初始化----->响应请求(servlet的service方法) ---->容器关闭时(servlet.destory方法 完成销毁)
19.servlet容器中的forward()和redirect()方法区别。
答:前者是转发,后者为重定向,转发的效率更加高效,有些情况下必须要跳转至其他服务器上的的资源时,则必须使用redirect().
20.servlet和jsp的异同点。
答:jsp是servlet的扩展,所有的jsp文件都会被翻译为一个集成了httpServlet的类 ,也就是说jsp也是一个servlet。
servlet和jsp的不同点在于,servlet的应用逻辑在java文件中,并且完全从表示层的html中分离出来。
jsp侧重点为视图,而servlet侧重为逻辑控制。