java工程师面试题链接

java初级开发工程师面试题链接
https://blog.csdn.net/bushanyantanzhe/article/details/79858961

个人记忆
1、java跨平台原理
关键字java平台 .class字节码文件 JVM 虚拟机 不同机器不同jvm版本 机器码
java平台编译.java文件成为字节码文件.class文件,在通过jvm虚拟机将.class字节码文件编译成机器码,供机器运行java程序。
只是java跨平台,而不是jvm,因为jvm翻译字节码文件为机器码,不能跨平台,不同平台需要安装不同版本的jvm

2、java中 int占几个字节
byte 1字节
short 2字节
int 4字节
long 8字节

float 4字节
double 8字节

3、java面向对象的特征
关键字:封装、抽象、继承、多态
封装:将现实生活当中的一个实体的属性和行为封装定义成类(比如人)
抽象:将一类实体的共同特征抽取出来,形成一个抽象类
继承:现实当中的父子关系一样,子类继承父类的一些特征。
多态:父类调用不同子类,表现的行为不同。就像一个父亲有两对子女,但是有一些行为相同,一些行为不同。

4、装箱和拆箱
关键词:基本数据类型,包装器类型。
由于基本数据类型不具备对象特质,装箱:将基本数据类型转换成包装器类型。
拆箱:将包装器类型转换成基本数据类型
包装器类型是对象而基本类型只是数据

int i = Integer.valueOf(12);//装箱
int b = i.intValue();//拆箱

5、= =和equals区别
关键词:基本数据类型 比较 复合数据类型 内存存放地 覆写
= =:基本数据类型,八大数据类型,byte、short、char、int、long、float、double、boolean使用可以比较他们之间的值
用 = =去判断复合数据类型,如String、接口、class类,会比较他们内存的存放地
euqals:是复用数据类型,给开发者覆写的,让开发者自己去定义什么条件的object满足两个object相同

6、String、StringBulider、StringBuffer的区别
关键字:
运行速度-String<StringBuffer<StringBulider, 常量字符串,变量字符串,创建,回收
线程安全-方法含有synchronized关键字
使用场景:字符串缓冲区使用,单线程,多线程

运行速度:String<StringBuffer<StringBulider
String是常量字符串,java程序需要进行创建和回收操作,所以String字符串最慢。StringBuffer和StringBulider是变量字符串,进行更改只需要直接更改,不需要创建和回收

线程安全:因为StringBuffer大量方法有synchronized关键字使用同步锁,是的线程安全。在StringBuilder中没有synchronized关键字,所以线程不安全

使用场景:
String:少量字符串操作的时候。
StringBuffer:多线程对字符串缓冲区进行大量操作的时候
StringBuilder:单线程对字符串缓冲区进行大量操作的时候。

7、JAVA中的集合
关键字:value(collection) ,key-value(map)
数据存储形式为value(collection),key-value(map)
其中collection分成list 和 set
list是有序的,可重复的
set是无序的不可重复的

map有HashMap,HashTable,CurrentHashMap

8、ArrayList、Verctor、LinkedList
关键词:数组,链表及特性,线程同步,扩充倍数
ArrayList和Verctor以数组形式存储,LinkedList以链表形式存储
Verctor线程同步,ArrayList和LinkedList线程不同步
ArrayList和Vector进行插入和删除的时候速度较慢,进行查询的时候速度较快。LinkedList在进行查询的速度较慢,进行插入和删除的速度较快。
Verctor扩充倍数为2倍,ArrayList扩充倍数1.5倍。

9、HashMap和HashTable区别
关键词:
相同-存储形式
不同-基类不同,线程安全,遍历不同,null不同
ConcurrentMap
相同:存储形式都是key-value形式
不同:
基类不同:HashMap是基于AbstractMap的,HashTable是根据Dictionary的,Dictionary将任何键映射到相应值的类的抽象类,AbstractMap基于Map骨干实现,以最大限度减少实现此接口所需的工作。
线程安全:HashMap单线程安全,HashTable多线程安全
遍历不同:HashMap只能Iterator遍历器遍历,HashTable可以Iterator和Enumeration遍历
null不同:HashMap可以有一个key为null,和多个value为null。而HashTable的key和value都不能为空
线程安全和效率同时实现使用ConcurrentMap

10、实现一个拷贝文件的工具类使用字节流还是字符串
关键词:不确定是否是字符,图片之类的字节
使用字节流,因为不确定上传文件是否全部都是字符,可能上传的文件包含图片的字节,这个时候就需要字节流。

11、线程的实现方式?怎么启动线程?怎样区分线程?
关键字:实现方式-Thread,Runnable,java.util.concurrent中的Callable
现成的实现方式有
1、继承Thread不推荐
2、实现Runnable接口
3、实现,java.util.concurrent中的callable接口
怎么启动线程
使用start()方法将线程为可运行状态,执行main中的run方法
怎样区分线程
给线程设置命名

12、线程并发库和线程池的作用
关键词
并发库Java.util.concurrent,线程生命周期
线程池:创建newCacheThreadPool可缓存线程池,非固定数量,主动回收,创建
newFiexdThreadPool-固定数量,最大并发量,超出等待
newScheduledThreadPool-定时线程,周期性任务
newSigleThreadExector单线程吃,顺序执行
线程池作用:限制数量,节省资源,响应速度快

jdk1.5后添加java.util.concurrent并发库,优化线程的管理,该包主要包括,对线程的创建,对线程的生命周期进行管理。
线程池的创建:
1、newCacheThreadPool:可缓存线程池,该线程此是非固定苏良,可以自主回收的线程池,一旦没有回收的线程,就会新建线程。
newFiexdThreadPool:固定数量线程池。底层误解,可以控制并发数,超出的线程会在队列中等待
newSchduledThreadPOOL:定时线程池,支持周期性和定时的任务
newSigleThreadExector单程化线程池,只是用唯一的工作线程执行任务,按照顺序执行小人物

线程池的作用
1、限制线程的个数,不会因为线程过多导致系统缓慢或者崩溃
2、线程池每次都不需要创建和销毁节省资源
3、不需要创建和销毁,响应速度加快。

13.设计模式和常用的设计模式(选择自己熟悉的说,最好能手写)(不熟悉)

设计过程中可以反复使用的、可以解决特定问题的通用模板.

创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

14、HTTP GET POST的区别
关键词:GET暴露地址栏,POST不会
GET-附加URL 编码格式ASCROLL
POST-请求包的包体当中
传输大小-不限制,浏览器或服务器限制
安全性-POST比GET高 请求体
1、GET请求附加到URL当中用?分割和传输数据,&是多参数传递的时候使用,默认Ascroll编码形式,所以传递参数的时候编码为Ascroll编码之后再传递
POST请求放在请求体当中,音痴GET暴露地址栏POST不会
2、传输大小:HTTP龟蛋对GET和POST请求都没有做出现实,但是GET请求再特定的浏览器和服务器终会被限制长度。二POST请求会在Apache等服务器被限制长度
3、安全性
POST请求比GET请求安全,因为POST再请求体中,GET请求可能被获取浏览器缓存获取到或者再地址栏上显示。

15、说说你对servlet的理解
关键词:在WEB服务器中运行的一个java程序 实现servlet 部署
servlet就是一个部署在WEB服务器上面的小程序,接受客户端的请求和响应请求,通常是用HTTP协议
使用1、编写一个JAVA类,实现Servlet接口。
2、吧开发好的Java,部署到WEB服务器当中
通常我们也吧实现了servlet接口的java程序成为servlet

servlet 接口 —— GenericServlet通用servlet —— Httpservlet

继承HttpServlet重写Get和Post

16、sergvlet的生命周期
关键词:第一次访问 servlet init 后续访问 新县城访问service() 根据请求调用doXXX 移除,destory销毁
用户第一次访问servlet的时候,服务器创建一个servlet实力,该实例调用init()方法,任何一个请求访问服务器,会创建一个新的线程访问servlet的service()方法,该方法根据请求的类型调用doGet或者doPost请求,当servlet从服务其中一处或者关闭的时候调用destory方法。

17、servlet中forward和redirect的区别
关键词:redirect重定向 两次请求 地址改变 信息丢失 web资源以外网址
forward转发 一次请求 地址不变 信息存在 web资源以内请求
重定向:redirect是两次的request请求,第一次客户端发送请求,服务端response响应第二次转发路径,过程当中信息丢失,地址改变,可以访问web资源以外网址
转发(forward)是一次请求,第一次请求进入服务器之后,重定向到web咨议员以内网页,传输数据不会丢失

18、jsp和servlet的相同点和不同点
关键词:相同 编译后是类servlet 不同:servlet HTML表现层分离 jspJava和html结合
相同:jsp是servlet技术的扩展,本质上就是平时servlet的建议方式,更强调应用外表的表达。
jsp编译后会变成类servlet
不同点:
servlet是java和html文件分离,注重应用逻辑,在html页面上面需要用write去书写
但sp是java和html结合,编写界面更加迅速快捷,但是嵌入复杂,更注重表示层。

19、jsp内置对象和四大作用域和页面传值
在这里插入图片描述

20、session和cookie的区别
关键词:数据存储,安全,服务器性能,保存数据
session和cookie都是绘画跟中技术,其中session数据存储在服务端,cookie数据存储在客户端,但是session需要借助cookie存储JESESSIONID(session唯一标识,需要存在客户端)
区别
1、session数据存储在客户端,cookie数据存储在客户端
2、cookie在客户端很用以被客户通过分析本地cookie进行浏览器的欺骗,考虑安全用session
3、session一定时间内在服务器增多,访问量多会影响服务器性能
4、单个cookie不能超过4K,浏览器最多一个cookie

使用场景
想用户登录信息等数据用session,想其他购物车之类的信息用cookie(防止客户端禁用cookie用cookie+数据库读取的形式)。

猜你喜欢

转载自blog.csdn.net/qq_32754539/article/details/94389319