初级java面试题 2021-11

以下为本人最近面试遇到的一些java面试题,21届应届生小菜鸟一枚,理解较浅如有错误,欢迎指正!!

1.基本数据类型和引用数据类型的区别

①基本数据类型(primitive type):数据直接存储在栈上。(byte,short,int,long,float,double,char,boolean)
②引用数据类型(reference type):数据存储在堆上,栈上只存储引用地址。(String)

2."equals()“和”=="的区别

①基本数据类型:
" ==“比较值是否相同;比较基本类型只能用”==",不能用"equals"。
equals方法不能作用于基本数据类型的变量,所以equals方法可以比较两个字符串内容是否相等。
②引用数据类型:
" =="比较内存地址是否相同。
Objec类比较的是地址值,但是继承他的类大都重写了equals方法比较成员变量的值是否相同,即比较的是是否是同一个对象。
③总结:
==比较的是两个字符串的内存地址是否相同;
equals比较的是两个字符串内容是否相等。

3.Arraylist和Linkedlist的区别

①二者实现结构不同,ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构;他们的特性也是由其数据结构决定的。(LinkedList是双向链表,有next也有previous)
②对于随机遍历访问get和set,ArrayList的性能要高于LinkedList,因为LinkedList要移动指针。
③对于新增和删除操作add和remove,LinedList的性能要高于ArrayList,因为ArrayList要移动数据。
④ArrayList的初始化时默认10的容量,而LinedList默认初始化为空。

4.String、StringBuffer和StringBuilder的区别

①String:字符串常量,如果要操作少量的数据用。
②StringBuffer:字符串变量(线程安全),多线程操作字符串缓存区下操作大量数据。(StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程安全的。)
③StringBuilder:字符串变量(非线程安全),单线程操作字符串缓存区下操作大量数据。(StringBuilder是JDK1.5新增的,与StringBuffer基本类似,构造器和内部方法也基本相同,但StringBuilder是非线程安全的,性能略快。)

5.String 类的常用方法

① indexOf():返回指定字符的索引。
② charAt():返回指定索引处的字符。
③ replace():字符串替换。
④ trim():去除字符串两端空白。
⑤ split():分割字符串,返回一个分割后的字符串数组。
⑥ getBytes():返回字符串的 byte 类型数组。
⑦ length():返回字符串长度。
⑧ toLowerCase():将字符串转成小写字母。
⑨ toUpperCase():将字符串转成大写字符。
⑩ substring():截取字符串。

6.Cookie 与 Session 的作用及区别

① Cookie 和 Session 都是会话技术, Cookie 是运行在客户端, Session 是运行在服务器端。
② Cookie 有大小限制以及浏览器在存 cookie 的个数也有限制, Session 是没有大小限制和服务器的内存大小有关。
③ Cookie 有安全隐患,通过拦截或本地文件找得到你的 cookie 后可以进行攻击。
④ Session 是保存在服务器端上会存在一段时间才会消失,如果 session 过多会增加服务器的压力。
⑤ 浏览器第一次访问服务器时会创建一个 session 对象并返回一个 JSESSIONID = ID 的值,创建一个 Cookie 对象 key 为 JSSIONID , value 为 ID 的值,将这个 Cookie 写回浏览器。

7.GET和POST的区别

① get 一般用来请求获取服务器的资源;post 一般用来向服务器发送数据。
② get 使用 urI 请求传递数据,数据以 key = value 的形式追加在 url 后,用户可以看到; post 传输数据通过 Http 的 post 机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的。
③ get 传输的数据大小受 url 长度的限制;post 可以可以传输大量数据。
④ get 是不安全的,因为它对用户是可见的;post 较 get 安全性较高。
⑤ get 和 post 的乱码处理方式不同, post 可以正确传递中文字符, get 则必须手动处理传递的中文参数。

8.重载( Overload )与重写( Override )的区别

① 重载:一个类,多个方法的方法名相同但是参数不同。(与返回类型,修饰符无关)
② 重写:两个类(子类与父类),子类的返回类型、方法名、参数、修饰符都与父类的方法一致。
③ 重写是需要在继承下才能使用的。
④ 而重载是可以在任何环境下都可以使用。
⑤ 重写是子类重写父类的行为。(函数)
⑥ 重载是在一个类中存在多个同名函数,而参数类型和参数的个数以及参数类型的顺序不同,进行的函数重载。

9.SQL调优的方法

① 创建索引提高查询效率。
② 尽量不使用子查询。
③ 使用 where 代替 having
④ 多表查询使用别名标注列。
⑤ 用 exists 代替 in ,not exists 代替 not in
⑥ sql 语句尽量大写。
⑦ 索引列上尽量不使用 not
⑧ 使用 union 替换 or
⑨ 用 in 替换 or
⑩ 左右模糊查询改为左侧模糊查询。

10.sql的left join 、right join 、inner join之间的区别

① left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 ,没有显示null;
② right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录,没有显示null;
③ inner join(等值连接) 只返回两个表中联结字段相等的行。

11.sql关键字的书写顺序及执行顺序

① 书写顺序为 select–from–where–group by–having–order by
② 执行顺序为 from–where–group by–having–select–order by

12.@Autowire和@Resource的区别

① 注解来源:@Autowire是Spring注解;@Resource是JDK注解。
② 装配方式:@Autowire优先按类型装配;@Resource优先按名称装配。
③ 属性:@Autowire的属性设置为required;@Resource的属性设置为name,type
④ 作用范围:@Autowire的作用范围是字段、setter方法、构造器;@Resource的作用范围是字段、setter方法。

13.jdk1.8新特性

① Lambda 表达式;
② 函数式接口;
③ 方法引用和构造器调用;
④ Stream API
⑤ 接口中的默认方法和静态方法;
⑥ 新时间日期 AP

14.Bean 的作用域

在 spring 框架中支持五种作用域:
① Singleton 在 Spring IOC 容器仅存在一个 Bean 实例, Bean 以单例方式存在,这个是默认值。
② prototype 每次从容器调用 bean 时,都会返回一个新的实例,也就是每次调用getBean (时都会实例化一个新的 bean 。
③ request 每次 HTTP 请求都会创建一个新的 Bean ,该作用于仅适用于 web 环境。
④ session 每个 HTTP Session 共享一个 Bean ,不同的 Session 使用不同的 Bean ,同样只适用于 web 环境。
⑤ Global Session 一般作用于 Portlet 应用环境,只作用于 Web 环境。
注:五种作用域中,其中 request 、 session 、 global session 三种作用域仅适用于 web 环境。

15.面向对象的三大特性

面向对象的三大特性------封装、继承、多态
① 封装:将同一类事物的特征和功能包装在一起,只对外暴露需要调用的接口而已。比如接口中我们没有任何功能的实现,只是定义了一系列抽象的方法声明,在Java中接口是体现封装最常用的方法。
② 继承:Java中面向对象最显著的一个特征,继承是从已有的类中派生出新的类,新的类可以吸收已有的属性、行为,并扩展新的能力。在Java中不支持多继承,单继承使Java的继承关系很简单,一个类只能有一个父类,这样易于我们的管理,同时父类也是子类的抽象化,而子类反过来就是父类的具体化。
③ 多态:多态是同一个行为具有多个不同表现形式或形态的能力;也是最重要的特性,前面的封装和继承都是为多态来服务的。

16.SpringMVC的工作流程

① 客户端向服务器发送请求被前端控制器 DispatcherServlet 捕获;
② 前端控制器解析 url 请求 HandlerMapping 查找对应的 Handler ;
③ HandlerMapping 返回一个 HandlerExecutionChain 给DispatcherServlet ;
④ DispatcherServlet 根据 Handler 选择一个合适的适配器处理;
⑤ 处理器适配器执行对应的 Handler 并返回 ModelAndView 对象给 DispatcherServlet ;
⑥ DispatcherServlet 请求视图解析器解析ModelAndView ,将逻辑视图转换为真正的视图 View;
⑦ DispatcherServlet 通过 model 解析出ModelAndView 中的参数,最终展现出完整的 view 并响应给客户端。

17.@Controller 和 @RestController的区别

① @RestController注释将返回值变成了实际值,不再经过视图解析器;
② @RestController注解相当于@Controller + @ResponseBody合在一起的作用。所以如果只是使用@RestController注解Controller,这个controller中的所有方法都会返回数据,不再跳转页面。

18.final、finally与finalize三者的区别

① final这个关键字在Java中代表不可改变的,可用来修饰类,方法,变量;表示类不能被继承,方法不能被重写,变量在声明时赋值,且不能再改变。
② finally关键字用在异常处理中,用于处理异常后的清理工作,实际中一般用于关闭文件流,释放资源等操作。(try catch 中最后肯定会执行的操作)
③ finalize方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,它是在 Object 类中定义的,因此所有的类都继承了它,子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

19.Servlet生命周期

① 创建Servlet实例;
② Web容器调用Servlet的init()方法,对Servlet进行初始化;
③ 执行Servlet中的service()方法;
④ 最后调用Servlet中的destroy()方法进行销毁
总结:加载并实例化–>初始化–>应用(运行)–>销毁

20.对正向代理与反向代理的理解

① 正向代理:容户端非常明确要站问的服务器地址,服务器只清楚
请求来自哪个代理服务器,而不清楚来自哪个具体的客户端,正向代理模式屏蔽或者隐藏了了真实的客户端信息。客户端必须要设置正向代理服务器(服务器不知道是谁请求的)
作用:访问原来无法访问的资源,如Google;可以做缓存,加速坊问资源;对客户端访问授权,上网进行认证;代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。

② 反向代理:多个客户端给服务器发送的请求,Nginx服务器接收之后,按照—定的规则分发给了后端的业务处理服务器进行处理。此时请求的资源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确,Nginx扮演的就是—个反向代理角色(客户端不知道请求的是谁)
作用:保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网;负载均衡,通过反向代理服务器来优化网站的负载。

还有一些其他的面试问点,我就只写题目不写答案了,我怕我的理解会误人子弟,毕竟实战经验不多
1.redis支持的数据类型及常见操作
2.分布式、集群、微服务的区别及关系
3.springboot,springcloud 的区别及联系
4.springcloud的组件
5.spring与springboot的关系
6.对消息中间件的考察很多(吃大亏了我),尤其是kafuka
7.多线程、高并发怎么解决(很可惜我之前都没做过)

面试问的最多的其实是项目中的问题,所以各位同学好好写简历,尤其是项目经验要写详细;技术能力是基础,公司更加注重的是与人沟通的能力,所以面试不要紧张哦!
希望如您所愿,尽早找到适合自己的工作!!加油!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值