各大公司面试题详解

文章目录

1.什么是深拷贝和浅拷贝

简单来说就是复制,克隆;
Person p = new Person(“张三”);
浅拷贝就是对象中的数据成员进行简单复制,如果存在动态成员或者指针就会报错。
深拷贝就是对象中存在动态成员或者指针重新开辟内存空间

2.return,break和continue的区别和作用

return:并不是专门用于跳出循环的,return的功能时结束一个方法,返回到调用该方法处,
break:用于循环语句当中,完全结束一个循环,跳出循环体。
continue:功能和break类似,区别时continue只是终止本次循环,接着开始下一次循环。

3.switch语句能否作用在byte,long,String上?

byte:可以(byte可以隐士转换为int类型,类型可以是byte,shior,char)
long:不可以
String:可以(jdk1.7以后可以)

4.final,finally,finalize的区别

final修饰的类不可被继承,修饰的方法不可被覆盖,修饰的属性不可被更改
finally:作用在异常语句当中,表示总被执行
finalize:是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法

5.run()和start()的区别

run():只是调用普通的run方法
start():启动了线程,又jvm调用run方法

6.ArrayList和Vector的区别

ArrayList:线程不安全,效率高,容量增长是本身的0.5倍,
Vector:线程安全,效率低,容量增长是本身的1.5倍
当有一个线程访问集合时推荐使用ArrayList,相反使用Vector

7.jsp和Servlet有哪些相同点不同点,联系是什么?

jsp本质上就是Servlet,jsp负责视图的展示,Servlet负责控制逻辑,
Servlet逻辑在java代码中,而jsp可以是html和java代码的集合。jsp
编译后是Servlet类

8.jsp三大指令

page,include,taglib

9.MVC指的是什么

m:模型(用于控制逻辑),v视图(用于和用户交互,通常使用jsp实现),c:控制层(model和view连接的桥梁),
指的是三层开发

10.静态变量和实例变量的区别?

静态变量通过static关键字修饰,在类加载的时候,系统就是给它分配空间
,静态变量就可以被使用了,不属于某个对象,而是属于类,可以通过类直接调用该属性。
实例变量必须通过类的实例化创建对象才可以使用,属于某个对象的属性。

11.什么是存储过程,存储过程有什么优点?

存储过程是一组为了完成特定功能的sql语句集,经编译后存储在数据库中,
用户通过指定存储过程的名字给出参数来执行它,存储过程是数据库中的
一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
优点:1.只要创建一次过程,以后在程序中就可以调用改过程任意次。
2.允许更快的执行,存储过程比sql语句执行更快。
3.减少网络流量。
4.更好的安全机制

12.如何提高mysql的安全性?

1.使用ssh隧道来加密该链接的通信
2.设置用户密码
3.使用grant和revoke语句进行访问控制的工作
4.不要使用明文密码,而是使用md5和sha1()等单向的哈希函数设置密码
5.使用防火墙可以去掉50%的外部危险

13.Oracle中是如何进行分页查询的?

Oracle中使用rownum来进行分页,这个是效率最好的分页方法。

14.springmvc中如何开启注解处理器和适配器?

我们在项目中一般会在springmvc.xml中通过开启mvc:annotation-driven
来实现注解处理器和适配器的开启

15.springmvc中如何解决get和post乱码问题?

解决post请求乱码,我们可以在web.xml里面配置一个CharacterEncodingFilter过滤器,设置为utf-8
解决get请求乱码,修改tomcat配置文件添加编码与工程编码一致,或者对参数重新编码。
String userName = new String(Request.getParameter(“userName”).getByte(“ISO8859-1”),“utf-8”);

16.谈谈你对Spring框架的理解

Spring是一个开源的框架,为了简化企业级应用开发而生,Spring可以使简单的javaBean实现以前只有EJB才能实现的功能、
Spring是一个IOC和AOP容器的框架
IOC:控制反转(将创建和管理javaBean的任务交给Spring容器来管理)
AOP:面向切面(在面向对象(oop)的编程思想中我们将事务纵向抽成一个一个对象,而在面向切面编程中,我们
将一个个对象某些类似的方面横向抽成一个个切面,对这个切面进行一些如权限控制,事务管理,记录日志等公共操作
等就是面向切面的编程思想,AOP底层是动态代理)

17.简单介绍下Spring WEB模块

Spring的WEB模块是构建在application context模块基础之上,提供一个适合web应用的上下文,这个模块
也包括支持多种面向web的任务,如透明的处理多个文件上传请求和程序级请求参数的绑定到你的业务对象。

18.BeanFactory和ApplicationContext的区别

BeanFactory:基础的IOC容器,提供完成的IOC服务支持,如果没有特殊指定,默认采用延迟初始化策略
相对来说,容器启动初期速度较快,所需资源有限。
ApplicationContext:实在BeanFactory基础上构建的,是相对比较高级的容器实现,处理BeanFactory的所有支持外,
ApplicationContext还提供了事件发布,国际化支持等功能,ApplicationContext管理的对象,在容器启动后默认全部
初始化并且绑定完成

19.Spring支持的几种bean作用域

Spring框架支持一下五种bean的作用域。
1.singleton:bean在每个Spring ioc容器中只有一个实例
2.prototype:一个bean的定义可以有多个实例
3.request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效
4.session:在一个HTTP Session中,一个bean定义对应一个实例,该作用域仅在web的Spring ApplicationContext情形下有效
5.global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例,该作用域仅在web的Spring ApplicationContext情形下有效

20.Spring的通知有什么?有哪几种类型?

通知是在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP框架触发的代码段。
Spring切面可以应用五种类型的通知:
1.before:前置通知,在一个方法执行前被调用
2.after:在方法执行之后调用的通知,无论方法执行是否成功
3.after-returning:仅当方法成功完成后执行的通知
4.after-throwing:在方法抛出异常退出时执行的通知
5.around:在方法执行之前和之后调用的通知

21.什么时三次握手和四次挥手?

一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认
二次握手:服务器接收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k)时服务器进入SYN_RECV状态
三次握手:客户端收到服务器的SYN_ACK包,向服务器发送确认包ACK(完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手)。完成三次握手,客户端与服务器开始传送数据
**四次挥手:**TCP连接的释放就是俗称的四次挥手,他和三次握手是正反面的应用,一个拿来开始,一个用于结束,假设Client端发送中断连接请求,也就是发送FIN报文,Server端接收到FIN报文后,,意思是说我Client端没有数据要发给你了,但是如果你还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据,所以先发送ACK,告诉Client端,你的请求我收到了,但是我还没有准备好,请你继续等待我的消息,这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文,当服务器端确认数据已经发送完成,则向Client端发送FIN报文,告诉Client端,好了,我这边数据发完了,准备好关闭连接了。
Client端接收到FIN报文后,就知道可以关闭连接了,但是它还是不相信网络,怕服务器端不知道要关闭了,所以发送ACK后进入TIME_WAIT状态,如果服务器端没有收到ACK则可以重传,服务器收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明服务器端已经正常关闭,那好,我Client端也可以关闭连接了,OK,TCP连接就这样关闭了。

22.TCP和UDP的区别?

TCP在传输数据之前要先建立连接,数据传输安全,数据传输后要释放连接。
UDP在传输数据之前不需要建立连接,数据传输不安全。

23.Conection和Conections区别?

Conection是集合类的上级接口,继承它的接口主要有List,Set。

Conections是集合工具算法类,它提供了一系列的静态方法实现对各种集合的搜索,排序,线程安全化等操作。

24.什么是跨平台?

可以理解为在不同操作系统windows,linux,unix,不同版本型号32,64位都能正常运行

25.说下Servlet生命周期。

实列化,初始化,业务处理,销毁

26.说下类的加载过程。

加载——连接(验证,准备,解析)——初始化——卸载

27.HTTP中,get和post请求的区别?

get:参数url可见,通过拼接url进行传递参数,可以缓存,不安全,在页面后退时,不产生影响。
post:url参数不可见,通过body体传输参数,不可以缓存,安全,在页面后退时,会重新提交请求。

28.拷贝文件时字符流还是字节流?

拷贝文件一般使用字节流,因为一般不清楚文件中是否包含音乐媒体等类型文件,所以同意使用字节流

29.字节流,字符流分别是什么?

字节流:字节流由字节组成的,主要用来处理字节(二进制)数据
字符流:字符流是由字符组成的,主要用来处理字符(文字)数据

**

30.线程创建的常用方式?

**
继承Thread类创建
通过Runnable接口创建线程类

31.Servlet API中forward()方法和redirect()方法的区别?

转发(forward):a:地址栏不发成变化,显示的时上一个页面的地址,
b:一次请求
c:请求域中数据不会丢失
d:服务器形为
重定向(redirect)🅰️地址栏发生变化,
b:两次请求
c:请求域中的数据会丢失,因为时两次请求
d:客户端形为

32.JDBC访问数据库基本步骤是什么?

1.加载驱动
2.获取连接
3.编写sql
4.设置占位符
5.处理结果集
6.关闭资源

**

33.什么是事务,JDBC中处理事务的步骤

事务:是作为单个逻辑工作单元执行的一系列操作
步骤:设置提交方式为手动提交conn.setAutoCommit(false)
提交事务conn.commit()
出现异常、回滚事务conn.rollback()

34.说说AJAX的优点。

1.页面无刷新,用户体验好。
2.减轻服务器的压力
3.更快的响应能力
4.不需要下载插件,基于标准并被广泛支持的技术

35.AJAX实现流程?

1.创建XMLHttpRequest对象
2.创建新的http请求
3.设置响应http请求变化的函数
4.发送http请求
5.获取异步调用返回的对象
6.使用js、dom实现局部刷新

36.什么是xml?

xml是一种可扩展性的标记语言,支持自定义标签

37.什么是数据库连接池?

数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对连接池的连接进行申请,使用,释放。

38.HTTP的长连接和短连接

在HTTP/1.0中,默认使用的是短链接,即浏览器和服务器每进行一次HTTP操作就会建立一次连接,任务结束就会断开连接。
在HTTP/1.1起,默认使用长连接,用以保持连接特性,(长连接通常会在响应头中添加Connection:keep-alive )。使用长连接情况下,当某个网页打开完毕后,客户端和服务器之间的TCP连接不会关闭,如果客户端再次访问该服务器上的网页,会使用上一次已经建立的连接,长连接不是永久保持连接,他有一个保持时间,实现长连接的前提是客户端和服务器端都需要支持长连接

39.Spring中如何注入一个java集合?

Spring提供了以下几种集合的配置元素:
类型用于注入一列值,允许有相同的值
类型用于注入一组值,不允许有相同的值
类型用于注入一组键值对,键和值都可以为任意类型
类型用于注入一组键值对,键和值只能为String类型

40.什么是连接点?

连接点是应用在执行过程中能够插入切面的一个点。Spring只支持方法类型的连接点。

41.什么是切点?

一个切面并不需要通知应用的所有连接点,切点有助于缩小切面所通知的连接点范围,如果说通知定义了切面的“什么”和“何时”的话,那么切点就定义了“何处”。因此,切点其实就是定义了需要执行哪些连接点上执行通知。

42.什么是织入?什么是织入应用的不同点?

织入是将切面和到其他应用类型或对象连接或创建一个被通知对象的过程。织入可以在编译时,加载时,运行时完成。

43.Mybatis中的一级缓存和二级缓存?

一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,该Session中的所有Cache就将清空。
二级缓存:二级缓存和一级缓存其机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(Namespace),并且可自定义存储源,如:Ehcache。作用域为namespance是指对该namespance对应的配置文件中所有的select操作结果都缓存,这样线程之间就可以共享二级缓存。

44.Session的清理和清空有什么区别?

Session清理缓存是指按照缓存中的对象的状态的变化来同步更新数据库。
清空是Session关闭。

45.谈谈你对restful的理解

restful是一种软件架构风格,设计风格,而不是标准,只是提供了一组原则和约束条件。它主要用于客户端和服务器交互的软件。REST是指一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是restful。它结构清晰,符合标准,易于理解,扩展方便,所以得到了越来越多的网站采用。

46.什么是java序列化,如何实现java序列化?

序列化就是一种用来处理对象流的机制,所谓对象流也是就将对象的内容进行流化。可以对流化的对象进行读写操作,也可将流化的对象传输与网络之间。序列化就是为了解决在对对象进行读写操作引发的问题。
**序列化的实现:**将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法。

47.List三个子类的特点?

**ArrayList:**底层是数组结构,查询快,增删改慢。
**LinkedList:**底层是链表式结构,增删改快,查询慢。
**Voctor:**底层是数组结构,线程安全,增删慢,查询慢。

48.什么是多线程?

如果在一个进程中同时运行多个线程,用来完成不同的工作,则称为多线程。多个线程交替占用cpu资源,而不是真正的并发执行。

49.为什么函数不能根据返回值类型来区分重载?

为啥为什么不能用返回值类型来判断方法是否重载呢?
就比如
int f(){} 和 void f(){}
在main方法中调用时
f();
你能判断用哪个方法吗?你都不清楚的话,那系统就更不清楚了。
函数的返回值只是作为函数运行之后的一个状态,它是保持方法调用者与被调用者通信的关键,并不能作为某个方法的表示。

50.抽象类和接口的区别?

不同点:
抽象类可以定义构造器
可以有抽象方法和不同方法
接口中的成员全部是public
抽象类可以定义成员变量
有抽象方法的类必须是抽象类,抽象类里面未必有抽象方法
抽象类中可以包含静态方法
一个类只能继承一个抽象类
接口不能定义构造器
接口里面全部是抽象方法
接口可以被多实现
相同点:
都不能被实例化
都能包含抽象方法
如果一个类继承了抽象类或者实现了某个接口,必须要实现里面的抽象方法,否则自己也要定义为抽象类

51.==和equals的区别?

==和equals本质上没有区别,==用于比较基本数据类型的比较,如果比较引用数据类型的话,则比较的是对象的地址值是否相同。equals用于引用类型的比较,比较对象的内容是否相等。如何没有重新equals方法时,比较的是引用类型变量所指向的对象的地址。

52.error和exception的区别?

Error类Exception类的父类都是Throwable类。在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
Error类一般指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等,对于这类错误的导致程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建以让程序终止。
Exception类表示程序可以处理的异常,可以捕捉且可以恢复。遇到这类异常,应该尽可能处理异常,使程序恢复。
Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exption),运行时异常,编译能通过,但是一运行程序就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查异常,要么用try。。。catch捕捉,要么用throws抛出异常,交给它的父类处理,负责编译不会通过。

53.throw和throws的区别?

throw:用在方法体内,表示抛出异常,由方法体的语句处理。是具体向外抛出的动作,所以它抛出的是一个异常实列,执行throw一定是抛出了某种异常。
throws:用在方法声明后面,表示如果抛出了异常,由该方法的调用者来处理异常。主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕捉的异常类型。它只是表示出现异常是一种可能性,并不一定会发生这种异常。

54.String,StringBuilder,StringBuffer的区别?

**String:**是只读字符串,也就意味着String引用的字符串内容是不能被改变的。
StringBuffer,StringBuilder表示字符串对象可以直接进行修改。
StringBuilder是java5中引入的,它和StringBuffer的方法完全相同,区别在于它是单线程环境下使用,因为它的所有方法都没有被synchronized修饰,是线程不安全的。因此它的效率比StringBuffer要高。

55.java中的反射机制.

是指在运行状态中,对于任意一个类,都可以获取这个类的所有属性和方法,对于任意一个对象,能够调用它的任意方法和属性,这种动态获取信息以及动态调用方法的功能称为java语言的反射机制。

56.int和Integer有什么区别?

java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,java为每一个基本数据类型都引入了对应的包装类,Integer就是int的包装类。java5以后开始引入了自动装箱和拆箱机制,使得二者可以相互转换。

57.Mybatis中#和$的区别?

**#:**表示底层采用PreparedStatement执行对象实现占位符参数绑定,较为安全,防sql注入。
**$:**采用字符串拼接参数形式,不太安全,当传入的参数为字段名,表名,排序方式等固定常量,可以使用。

58.Cookie和Session的区别?

**Cookie:**是服务器发送的一块信息,浏览器会在本地一个文件中给每个web服务器存储cookie。以后浏览器再给特定的web服务器发送请求时,同时会发送所有为服务器存储的cookie。
**Session:**是存储在服务器的一块信息,session对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的web页之间跳转时,存储在Session对象中的变量不会丢失,而是在整个用户会话中一直存在下去。
无论客户端做怎样的设置,session都能够正常的工作,当客户端禁用cookie时将无法使用cookie。

59.获得一个类的对象有那些方式?

类型.class
对象.getClass()
Class.forName()

60.动静代理的区别。什么场景使用?

静态代理只代理一个类,动态代理是代理一个接口下的多个是实现类。
静态代理实现要知道代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值