Java面试题知识点(一)

Java面试题知识点(一):时间在慢慢流逝,我们在这流失的时间中学习,发现学的越多,不会的还有很多,学完后面的前面的又忘了,所以要常常复习,在此,我总结了一点知识点,哪些地方写的不好的,望大家多多关照,和大家一起进步!01.面试的整体流程自我介绍以及项目简短的介绍,用到的技能等。02.java的垮平台原理java通过不同的系统,不同版本,不同位数的java虚拟机jvm,来屏蔽不同的系...
摘要由CSDN通过智能技术生成

Java面试题知识点(一):

时间在慢慢流逝,我们在这流失的时间中学习,发现学的越多,不会的还有很多,学完后面的前面的又忘了,所以要常常复习,在此,我总结了一点知识点,哪些地方写的不好的,望大家多多关照,和大家一起进步!

01.面试的整体流程
自我介绍以及项目简短的介绍,用到的技能等。

02.java的垮平台原理
java通过不同的系统,不同版本,不同位数的java虚拟机jvm,来屏蔽不同的系统指令集差异,而提供外体统一的接口javaAPI,对于我们普通的java开发者而言,只需要按照接口开发即可,如果我们的系统需要部署到不同的环境时,只需要在系统上面安装对应版本虚拟机即可。

03.搭建一个java的开发环境需要什么?
1.适用于我们的开发环境的JDK;
2.对应的开发环境eclipse;
3.web服务器tomcat
所以我们要:
1.下载对应的组件;
2.安装jdk,eclipse,tomcat集成到eclipse中;
注意:jdk安装要配置 JAVA_HOME 及path的bin路径;
eclipse要设置workspace的默认编码等

04.java中int占几个字节?
java的8种基本数据类型及包装类型,int占4个字节,32位;

05.java面向对象的特征?
封装:把高度自治的数据操作包围起来,形成一个整体,以getset方法实现;
继承:子类继承父类,比如遗产继承
多态:多种形态,也就是父类变量引用子类对象,内加载
抽象:把共有的,共性的东西抽取出来

06.装箱和拆箱?
java提供了8中原始基本数据类型及他们的包装类
装箱:就是把基本数据类型转化成 包装类型【int-integer】
eg:Integer i=1;编译时会调用integer.valueof;
拆箱:就是把 包装类型 拆成 基本数据类型 【integer-int】
eg: integer i = 1; int j =i,编译时会调用 i.intValue;

07.==和equals的区别?
==用来判断两个变量之间的值是否相等;
变量分为基本数据类型,引用数据类型;
== 是基本数据类型时,判断值是否相等;是引用数据类型时,看地址值是否相同;
equals判断两个对象是否一致,比如两个人长得是否相同,实际上就是用对象的equals方法;

08.String的面试题(具体请看我的csdn)
String是final型的,不可继承,每创建一个String都会生成一个新的对象,为了避免这种空间的浪费,出现了StringBuffer和Stringbuilder。
String是内容不可变的字符串,适用于少量的字符数据;

private final char value[];

StringBuffer是内容可以改变的字符串,是线程安全的,适用于在多线程的大量缓冲区;
StringBuilder是内容可以改变的字符串,是线程不安全的,效率较高,适用于单线程的大量缓冲区;
char[] value;
运行效率:StringBuilder >StringBuffer> String;
eg:拼接字符串

String c="a"+"b";  
StringBuffer和StringBuilder:
StringBuilder sb = new StringBuilder(); 
sb.apend("a").apend("b");

09.讲一下java中的集合?
java中的集合分为值(Conllection) 和 key-value(map)两种;
存值的collection下有list和 set
list: arraylist vector linkedlist
set: hashset treeset
List:是有序的,可以重复的
Set:无序的,不可以重复的,根据equals和hashcode判断,如果一个对象要存储在set中,必须重写equals和hashcode方法;
map: hashMap TreeMap hashTable

10.ArrayList 和LinkedList的区别?
ArrayList 使用在查询上较多和LinkedList 插入和删除比较多,都属于 list,他们的区别:
1.arraylist 和 LinkedList 都是线程不安全的,不是同步的,
2.arraylist 的底层是数组,查询快,插入,删除,修改慢(数组在内存中是一块连续的内存,如果要插入或者删除数据需要移动内存);
3.LinkedList 的底层是 双向链表结构,插入,删除,修改 快,查询慢,不要求内存连续,在当前元素中存放下一个或上一个元素的地址,查询需要从头部开始,一个一个的找,所以查询慢;插入时不需要移动内存,只需要改变引用指向;
4.LinkedList提供了一些方法,可以当做堆栈和队列来使用;

11.HashMap和HashTable的区别?
hashMap 和HashTable 都属于map 集合中的,它们的区别是:
1.历史性:
hashTable 他是旧的dictionnary类的,hashMap是java在1.2以后引进的map接口的实现
2.同步性:hashTable是线程安全的,同步的,hashmap不是同步的;
3.差异性:HashMap他可以让你将一个空值作为一个表的条目的ket或value;
4.改:hashmap把hashTable的contains方法去掉了,改成了containskey和containsvalue;
注意:我想线程安全又想效率高?
可以用ConcurrentHashMap 和 hashTable,把整个map分为N个(类似于hashTable),线程安全,效率提升N倍,默认16倍;

12.实现一个拷贝文件的工具类要使用字节流还是字符串?
拷贝的文件不确定是只包含字符流,有可能有字节流(图片、声音、图像等),为考虑通用性,要使用字节流;

13.线程的的实现方式?怎么启动线程?怎么区分线程?
线程的实现方式有两种:继承Thred类和实现runnable接口
继承扩展性不强,java总支持单继承,如果一个类继承了Thread就不能继承其他类了;
用start方法启动线程,启动了以后执行的是run方法;

eg: Thread thread = new Thread(继承Thread的对象or实现runnable的对象);
      thread.start();

怎样区分线程?在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个进程打印怎么办?
这是一种规范,在线程创建完成后,都要设置名称;
thread.setName(“设置一个线程名称”);

14.线程并发库和线程池的作用?
线程并发库是在java1.5中引进了一个util.current包,提供了对线程优化,管理的各项操作。
java如何创建线程池?
java通过Executors提供了4个静态方法创建4种线程池:
newCanchedThreadPool 可以缓存的线程池
newFixedThreadPool 固定大小的线程池,可控制线程最大并发数,超 出的线程会在队列中等待
newScheduledThreadPool 定长线程池 支持定时及周期性任务执行
newSingleThreadPool 单线程的线程池
线程池的作用:
限定线程的个数,不会导致由于线程过多导致系统运行缓慢或者崩溃;
线程池不需要每次都去创建或销毁,节约了资源;
线程池不需要每次都去创建,响应时间更快;

15.设计模式和常用的设计模式?
设计模式是经过前人无数次的实践总结出来的,是可以反复套用的模板的设计方法。
常见的设计模式:
单例 :饿汉式和懒汉式
具体步骤:
1.构造方法私有化,让除了自己类中能创建外其他地方都不能创建;
2.在自己的类中创建一个单实例(懒汉式是一出现就创建单实例/饿汉式是需要的时候才创建);
3.提供一个方法获取该实例对象(创建时需要进行方法同步 synchronize)
工厂模式 :SpringIOC就是使用的工厂模式;
代理模式 :Springaop就是使用的动态代理模式;
观察者模式和包装模式等。

16.http的get post请求的区别?
相同点:
get和post请求都是http的请求方式,用户通过不同的http请求方式完成对资源url的操作,get/post/put/delete对应的是资源的查改增删,具体来说,get一般用于获取/查询资源信息,而post一般用于更新资源信息;
不同点:
get:请求提交的数据会在地址栏上显示出来,传输数据的大小,浏览器对地址长度有限制,有安全问题,可以在历史记录中查找信息,eg:密码
post:地址栏上不显示,请求浏览器的时候没有长度限制,安全性高;

17.说说你对Servlet的理解?
Servlet(servlet applet),全称是java servlet,使用java编写的服务器端程序,而这些servlet都要事先servlet这个接口,主要功能是用于交互式浏览和修改数据,生成动态web内容。
HttpServlet 重写doget和doPost方法或者你可以重写service方法完成对get和post请求的响应;

18.Servlet的生命周期?
servlet有良好的生命周期,包括加载和实例化,初始化,服务(处理请求),销毁;
这个生命周期由javax.servlet.servlet接口的init,service,destroy方法表示。
加载servlet.class—>实例化Servlet---->调用Servlet的init完成初始化—>响应请求(servlet的Service方法)—>Servlet的容器关闭时(Select的destroy方法)。

19.Servlet中forward和redirect的区别?
forward是服务器端的跳转,redirect是客户端的转向;
forward浏览器的地址不会发生改变,redirect会发生改变;
forward是一次请求中完成,而redirect是重新发起请求;
forward是在服务器端完成,不用客户端重新发起请求,效率较高,

20.jsp和Servlet的相同点和不同点?
相同点:
jsp是Servlet的扩展,所有的jsp文件都会被翻译为一个继承HttpServlet的类,也就是jsp最终也是一个Servlet,这个Servlet对外提供服务。
不同点:
jsp侧重于视图,Servlet主要用于控制逻辑;
Servlet如果要实现HTML的功能,必须使用Writer输出对应的HTML,比较麻烦,而jsp的情况 是java和HTML组合成的一个扩展名为.jsp的文件,做页面展示比较方便而嵌入逻辑比较复杂。

21.内置对象和四大作用域和页面传值?
九大内置对象:
C

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值