《Java程序员面试宝典》——(第二章节)

《Java程序员面试宝典》——(第二章节)当前因为经济大环境不好 大厂裁员 就业情况差 企业要求变高 各行各业越来越卷 尤其是程序员 处于这个阶段 感觉特别明显 对于程序员这个群体来说 java 程序员的占比就非常之高 就业市场等于说是千

大家好,欢迎来到IT知识分享网。

当前因为经济大环境不好,大厂裁员,就业情况差,企业要求变高了,各行各业越来越卷,尤其是程序员,处于这个阶段,感觉特别明显!

对于程序员这个群体来说,java程序员的占比就非常之高,就业市场等于说是千军万马过独木桥,简直可以说是太难了!在这里想说的是,大环境已经这样了,我们已经也无法左右这个市场,根本没有选择的余地,所以,努力的提升自己技术能力最重要。

1、final、finally、finalize 有什么区别?

final:修饰类时表示不能被继承;修饰方法时表示不能被重载;修饰变量时表示不能被修改。

finally:在异常处理时提供finally代码块来执行异常处理。

finalize:是方法名,java允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。

Public:公共,能被项目中的任何一个Class、Method、Field访问。

Protected:受保护,能被同类或子类访问,不能从外部访问。

Default:默认,只能被同一个包的Class、Method、Field访问。

Private:私有,只能被本类访问。

1)把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2)如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

3)包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

for循环用于执行指定重复次数的语句,当程序员明确知道循环次数可以使用for循环。

2)While循环

当语句满足条件时开始进行重复执行,直到语句不再满足条件退出循环。While循环中在执行语句之前先检查是否满足条件。

3)do while循环

Do while 和while循环基本类似,唯一不同的是do while是先执行语句再检查条件,也就是说do while循环至少会执行一次语句。

7、Java内部类和子类之间有什么区别?

内部类是指在一个外部类的内部再定义一个类,内部类对外部类有访问权限,可以访问类中定义的所有变量和方法。

子类是从父类(superclass)中继承的类,子类可以访问父类所有public和protected的字段和方法。

– throw关键字用于在代码中手动抛出异常。它通常用于在程序中检测到错误或异常情况时,主动抛出一个异常对象。

– throw关键字后面跟着一个异常对象,可以是Java内置的异常类,也可以是自定义的异常类。

– 一旦throw语句执行,程序将立即停止执行当前方法,并且异常将被传递给调用该方法的地方进行处理。

2) throws关键字:

– throws关键字用于在方法声明中指定该方法可能抛出的异常类型。它告诉调用者该方法可能会抛出某些异常,需要进行相应的异常处理。

– throws关键字后面跟着一个异常类型列表,多个异常类型之间用逗号分隔。

– 当一个方法使用throws关键字声明了异常类型时,调用该方法的地方必须进行异常处理,要么使用try-catch语句捕获异常,要么继续使用throws关键字将异常传递给上层调用者。

– throw关键字用于手动抛出异常,throws关键字用于声明方法可能抛出的异常类型。

– throw关键字后面跟着一个异常对象,throws关键字后面跟着一个异常类型列表。

– throw关键字用于方法内部,throws关键字用于方法声明中。

– throw关键字会立即停止当前方法的执行,将异常传递给调用者,而throws关键字只是声明可能抛出异常,不会中断方法的执行。

校验参数的数据格式是否合法

对进入数据库的特殊字符进行转义处理,或编码转换

预编译SQL,参数化查询方式,避免SQL拼接

10、spring mvc 和 struts 的区别是什么?

拦截机制不同

Struts2是类级别的拦截,每次请求就会创建一个Action

SpringMVC是方法级别的拦截,一个方法对应一个Request上下文。

底层框架不同

Struts2采用Filter实现,SpringMVC采用Servlet实现

性能不同

Struts2需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截。

所以,SpringMVC开发效率和性能高于Struts2

配置方面

SpringMVC 和 Spring 是无缝的,从这个项目的管理和安全上也比Struts2高。

11、讲一下 session 的工作原理?

客户端登录完成之后,服务器会创建相应的session,session创建完成之后,会把session的id发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着sessionid,服务器拿到sessionid之后,在内存找到与之对应的session就可以正常工作了。

12、如果客户端禁止 cookie,session 还能用吗?

如果浏览器禁用了cookie,那么客户端访问服务端时无法携带sessionid,服务端无法识别用户身份,便无法进行会话控制,session就会失效,但是可以通过其他办法实现:

通过URL重写,把sessionid作为参数追加的原URL中,后续的浏览器与服务器交互中携带session

服务器的返回数据中包含sessionid,浏览器发送请求时,携带sessionid参数

session:在当前会话中有效;

request:在当前请求中有效;

page:在当前页面有效

response:网页传回用户端的响应

pageContext:管理网页的属性

session:与请求有关的会话期

application servlet正在执行的内容

out:用来传送回应的输出

config: servlet的架构部件

page :网页本身

exception:针对错误网页,未捕捉的例外

16、 jsp 和 servlet 有什么区别?

Jsp:Java Server Page,是一种动态页面技术,其根本是一个简化的Servlet设计,用来封装产生动态网页的逻辑处理。

Servlet:服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求与服务器响应的中间层。

相同点:jsp经编译后就变成了Servlet,jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java类。

get请求通过URL直接请求数据,数据信息可以在URL中看到;post请求是放在请求头中的,用户看不到;

get传送的数据量小,有限制,不能大于2kb,post传送的数据可以没有限制

get安全性比较低,post相对较安全

18、 forward 和 redirect 的区别?

redirect是客户端发起的请求;forward是服务端发起的请求

redirect浏览器显示被请求的URL;forward浏览器地址不显示被请求的URL

redirect重新开始一个request,原页面的request生命周期结束;

forward另一个连接的时候,request变量是在其生命周期内的。

redirect实质上是两次HTTP请求;forward是一次请求

19、 简述 tcp 和 udp的区别?

TCP是面向连接的,TCP提供可靠的服务,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达。

UDP是无连接的,不可靠,但是速度快,操作简单,要求系统资源较少,可以实现广播发送。

TCP是面向字节流的,UDP是面向报文的;TCP是全双工的可靠信道,UDP是不可靠信道

21、try-catch-finally 中哪个部分可以省略?

catch 和 finally可以被省略其中一个,finally代码块是无论是否捕捉到异常,都会执行finally代码块的逻辑。

22、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

捕获到异常后,不会直接返回,会先执行完finally代码块的语句然后继续执行catch代码块中的return。

24、mybatis 中 #{}和 ${}的区别是什么?

#{}是预编译处理,${}是字符串替换

使用#{}可以预防SQL注入

25、mybatis 有几种分页方式?

数组分页

SQL分页

拦截器分页

26、mybatis 逻辑分页和物理分页的区别是什么?

逻辑分页是一次性查询很多数据,然后再在结果中检索分页的数据,这样做的弊端是需要消耗大量的内存,有内存溢出的风险,对数据库压力较大。

物理分页是从数据库查询指定条数的数据,弥补了一次性查出所有数据的缺点。

27、mybatis 是否支持延迟加载?延迟加载的原理是什么?

支持。设置lazyLoadingEnable=true即可

延迟加载的原理是调用的时候触发加载,而不是在初始化的时候就加载信息。

28、mybatis 和 hibernate 的区别有哪些?

Mybatis入门比较简单,使用门槛也更低

SQL直接优化上,Mybatis要比Hibernate方便

Hibernate数据库移植性远大于Mybatis

缓存机制上,hibernate要比mybatis更好一些

29、mybatis 分页插件的实现原理是什么?

分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

mybatis系统当中默认定义了两级缓存:一级缓存和二级缓存

一级缓存:默认情况之下,只有一级缓存开启(sqlSession级别的缓存)

二级缓存:需要手动开启配置,需要局域namespace级别的缓存。

一级缓存是sqlsession级别的缓存,也叫本机缓存,因为每一个用户来执行查询的时候都需要sqlsession来执行。为了避免每次都去查询数据库。mybatis把缓存的数据存到sqlsession的本地缓存里面,如果sqlsession里面有的可以直接从本地缓存去读取查询的数据。要是想实现跨sqlsession这个级别的话,需要用到二级缓存。就是当多个用户去查询数据的时候,只要有任何一个sqlsession拿到了数据,就会放入到二级缓存里面,其它的sqlsession可以直接从二级缓存里面查询数据。

需要注意的是,如果SqlSession执行了DML操作(增删改),并且提交到数据库,MyBatis则会清空SqlSession中的一级缓存,这样做的目的是为了保证缓存中存储的是最新的信息,避免出现脏读现象。

31、什么是 ORM 框架?

ORM(Object Relation Mapping)对象关系映射

通过类与数据库表的映射关系,将对象持久化到数据库中

常见的ORM框架有Hibernate、Mybatis

32、MyBatis 动态 sql 有什么用?执行原理?有哪些动态 sql?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128644.html

(0)
上一篇 2025-08-30 13:15
下一篇 2025-08-30 13:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信