Java后端面试题-生活举例理解篇 2021-03-31已更新

前言

随着时间的发展,大多数毕业生陆陆续续毕业,Java的人员也越来越多,面试筛选成为一个网络热题和话题,这里有比较多的同仁私聊我,看看能不能整一份初级面试的梳理专栏,这里花两个钟大概总结一下,总结不好的地方,评论区交流,多多给出建议,共同成长

1.Java基础最容易面试的几个点:

1.1:面向对象

首先要弄清楚三个名词:OOP(面向对象编程)、OOD(面向对象的设计)、OOA(面向对象的分析),这里可能说的就有点含糊,有点过于的专业,其实这个东西了解即可,那么举个例子,生活中的面向对象的例子:今天小王想吃可乐鸡翅,要准备可乐,鸡翅,葱,盐,等等食材,起锅烧油,做熟了,就可以吃了,这个例子就是面向过程,小李今天就想吃可乐鸡翅,那么直接去餐厅点了一份可乐鸡翅,小李只需要去餐厅,点菜,吃,即可,这个叫做面向对象

1.2:面向对象的好处是什么呢?

假如,小王此时不想吃可乐鸡翅了,想吃小鸡炖蘑菇,此时还要去菜市场买鸡,买配料,买八角,桂皮,蘑菇等等辅材,然后回来起锅烧油,烹饪,才能吃,但是小李只用给餐厅老板说一句:老板,我不想吃可乐鸡翅了,给我换成小鸡炖蘑菇,就可以了

1.3:大白话分析下上面的故事

1.3.1:想必到这里,还是有些模糊的,那么这里简单解释一下:面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

1.3.2: 面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法,迎合上面说白了就是,你想吃什么直接给我说就好了,不用管我这是怎么做的,好不好吃;

1.3.3:其实说白了面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了

2.面向对象的几大特征:

这个基本上面试会必带一嘴的,网上百度也是一百度就是一大堆结果出来,但是这里我就啰啰嗦嗦叨叨两句,背题不是目的,理解消化才能变成自己的,回答起来才不会吃力,而且可以多场景举例;

几大特征几乎现在无人不知:【抽象、封装、继承、多态】
以下问的具体的可能面试官不会问,有兴趣的可以看看,没兴趣的可以跳过,做个简单的举例和解释,更方便于理解记忆;

2.1:什么叫做抽象?

抽象还不简单吗?抽象就是买个动物园的票,找头大象,用鞋子抽它,这就叫“抽象”,没错,在我看来,这就叫抽象,但是这里的抽象是什么呢?你凭啥不去家里找大象?不去购物中心找大象?那么这里的动物园就是一个比较大的抽象,只是没有这么细,再细化可以分为抽象的动物抽象类,人类,这不就是一个抽象的特征吗?

2.2:什么是封装呢?

封装这个更简单,封装就是我把我的手机,钱包,卫生纸,充电器,飞机钥匙,玛莎拉蒂车钥匙,这个就是我的兜兜类(出行必备的类),装在我的兜兜里面,而不是卫生纸放在A,充电器放在B,飞机钥匙放在C,下次要取的时候,要开飞机的时候,我直接从兜兜里面拿不就好了吗?解决了什么问题?这里需要自己领悟下?再想想,我的兜兜是不是我做主,我的兜兜是能给你轻易的去“摸”的吗?你得是我的wife,是我的基友,才行,这不就是相当于定义了一个规则,为什么工作中,说你封装这个接口,只能携带两个参数,参数一定要是什么类型的才能调用?模块化,独立化,规则化,修改起来也是hang当的方便。

2.3:那么什么是继承呢?

简单,字面意思,继承父亲母亲的资产,你有200万,继承了父母的1000万,你就有1200万,那你是不是比较diao一点,那和Java工作上有什么关系?回味一下,变成自己的才是最重要,想想工作上你用到的继承,为啥要使用继承,写代码的时候为啥要写“伊克师疼死”;

2.4:什么是多态?

所有的猴子,蛇,鸟,动物类的对象调用相同方法可以表现出不同的行为。比如动物实现了run()方法,猴子、色,鸟等动物重写了run()方法来表现不同的跑的特征,猴子跳,蛇爬,鸟飞;

啰啰嗦嗦的大概聊了下面向对象,有些说的不好的,解释有误的,大家多多包含理解。

3.&和&&的区别?

这个题目笔试和面试的时候都比较容易遇到,但是也比较简单, &是一个位运算符,至于位运算符,这个用的不多,简单了解百度一下也可以,&&是一个逻辑运算符,就是并且的意思,其实&也可以作为同样的用法,不同的是&会将这个运算进行完,但是&&不会,&&只要前者判断失败,整个就直接判断失败了,就不会走了&&后面的这个判断逻辑,这也叫短路性质,&可以用来位运算,也可以用来取址;

4.Java中有几种类型的流?

字节流和字符流,总共有四种(:InputStream,OutputStream,Reader,Writer),这个大家基本上都用过,并不陌生,简单阐述一下:字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;文本使用字符流,mp3等等其他乱七八糟的,使用字节流,理论的讲字节流是万能流。

5.如何通过反射创建对象?

1.使用Class 类的newInstance()方法实现通过调用某个类的Class 对象的newInstance()方法,可以获得与Class 对象对应类的实例,要求Class对象对应类必须提供没有入口参数的构造方法,否则不能使用这种方法创建对象;
2.使用Constructor 类实现java.lang.reflect.Constructor 类提供一个参数可变的newInstance(Object obj)方法,通过Constructor 类的实例调用该方法,可以根据类的指定构造方法创建对象。使用第二种方法创建对象时,应首先获得类的Class 对象,然后再通过Class 对象的方法获得Constructor 类的实例,并通过Constructor 类的实例,调用newInstance(Object…obj)方法完成对象的创建。

6.String s = new String(“aaa”);创建了几个字符串对象?

这个问题面试也比较喜欢问,根本是想了解你的常量池对jvm的了解过程,其实也比较简单:在String的工作原理中,new
一个String对象,是需要先在字符串常量中查找相同值或创建一个字符串常量,然后再在内存中创建一个String对象,所以 String str = new String(“aaa”); 会创建两个对象。

7.抽象类(abstract class)和接口(interface)有什么不同?

接口特征:

1.接口中不能定义构造方法,认真回顾一下学习或工作代码;
2.接口中使用的都是abstract方法
3.接口中使用的变量都是常量
4.一个类可以试想多个接口,例如implement a,b
5.接口中不能有静态static关键字修饰的静态方法
6.接口中的成员全都是 public 的

抽象特征:

1.抽象类中可以定义构造器(接口中就不行);
2.可以有抽象方法和具体方法,可以有静态方法;(接口中不行)
3.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法;
4.一个类只能继承一个抽象类(接口可以实现多个)

相同点:

接口和抽象类都不能实例化,一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类;用了我的东西,就要做我要求的事情,不然你也要变成abstract;–拿人手短,吃人手软–

7.Error和Exception有什么区别?

error错误,exception异常,error是一定的错误,而exception是有可能会发生的错误,那么try catch就是来处理和捕捉异常,做异常后的处理的,例如现在一段业务逻辑可能会发生异常,那么我在catch中抛出异常的时候使用第三方短信的API给自己发个短信,就能快速定位问题,或者是打印日志信息,排查,而error就是代码不严谨或者是内存溢出等等的硬核错误,需要根据不同的情况排查代码和业务逻辑;

8.列出一些你常见的运行时异常?

  • ClassCastException (类转换异常)==常见,integer不能装换为String等等
  • IllegalArgumentException (非法参数异常)==参数传递不合理
  • IndexOutOfBoundsException (下标越界异常)==一个数组的长度为10,你非要取下标为10的,下标示0开始的,根本就没有10下标的数据,咋去?
  • NullPointerException (空指针异常)==对象没有被赋值,一个空的对象,或者是赋值不成功,这个debug好好走一遍,空指针也很简单排查;
  • SecurityException (安全异常)==springSecurity安全验证框架等等出现安全问题抛出

9.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

屁股想想,这里就不贴代码了,finally是一定会被执行的,不管有没有try中的代码是不是已经成功了,从上往下执行顺序,这里拿JDBC的连接来举例,难道正常创建连接,拿到连接了,我在finally中写的close();方法就不执行了?答案是一定会执行的,那么在return前还是后,return执行,不会立马返回,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让函数马上返回,而是 return 语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回,这里还有两种情况,如果finally中有return,那么try中的return是不会执行的,如果finally中没有return,try中的return是会执行的,

这里简单上个草图示意下:

Java后端面试题-生活举例理解篇 2021-03-31已更新_第1张图片

10.阐述JDBC操作数据库的步骤。

这里简单阐述一下:

1.注册驱动 Class.forName(“com.mysql.jdbc.Driver”);
2.创建连接 con = DriverManager.getConnection(“数据源”);
3.创建语句 ps = con.prepareStatement(“select *******”);
4.执行语句 ResultSet rs = ps.executeQuery();
5.处理结果 while(rs.next()){sout(“xxx”)};
6.关闭资源(这里的close()方法不就是在finally中的吗?)

11.数据库连接池有什么作用?

这里看怎么回答,这个题可以回答很多东西,也可以让面试官看到你的很多优势,这里简单说一下作用;说白了就是一次性筷子和非一次性筷子的区别,一次性筷子,用完丢掉,连接池就是消毒柜,多用性筷子,用完放入消毒柜,有人需要的时候再次利用,这样回答初级基本上差不多了,例如MySQL数据库最大连接数量100,要多想想,如果现在只有10双筷子,第11个人要用,是不是要等10双中的某双筷子用完了,才能用,不会浪费连接也就是筷子的资源;

Java和MySQL是如何创建连接的,这里上个图,有兴趣可以深入了解一下(如果想更深刻的留下印象,自己主动将MySQL的知识可以给面试官来一波分享(wulishanghai)):
Java后端面试题-生活举例理解篇 2021-03-31已更新_第2张图片

12.事务的ACID是指什么?

看着高级点,弄清楚这个东西,也比较简单,首先得知道啥是事务,当然,基本上懂一点Java的,都知道事务,事务大白话,就是要把某一大件事,或者是某几小件事全部做完并且全部成功,才叫一个完整的事务,中途可以使用“rollback”这种机制回滚,也可以做一些其他的处理,例如回滚到成功的某个点,这里就不多的做事务过多介绍了;

ACID简单介绍:

原子性(Atomicity) 任何一项操作的失败都会导致整个事务的失败;
一致性(Consistency) 事务结束后系统状态是一致的;
隔离性(Isolation) 并发执行的事务彼此无法看到对方的中间状态;这里思考下,同时并发来了两个相同的update操作,咋办?
持久性(Durability) 事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。

2021-03-31更新前言:

由于现在正在更新RocketMQ消息中间件的专题,偶尔也会更新redis的专题,由于还有工作要忙,所以现在尽量的保持每周三更新多几个面试梳理点,共同进步,RocketMQ大概会总共更新20篇左右,从一个订单系统引发到解决,中途涉及Linux os内核,JVM,消息中间件内部调优等等,等待rocketmq更完了,预计6月份左右开始从零开始更新MySQL,MySQL的基础,表连接查询,索引,分库分表,数据结构,MySQL的InnoDB存储引擎等等,所以希望大家能理解下更新的进度。
本周更新知识点:1.简单聊聊数据库事务的4个隔离级别,2.nginx的正向代理和反向代理,3.有博友提出servlet的生命周期,和servlet是什么?4.spring中的ioc和aop的举例说明,动态代理模式的举例大白话,5.简述springmvc草图,6.同步和异步是什么?

1.数据库的事务隔离级别

01:Read uncommitted(读未提交):最低级别,任何情况都会发生。一个事务在执行过程中,既可以访问其他事务未提交的新插入的数据,又可以访问未提交的修改数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可防止丢失更新。【脏读----->上小鸡图】
Java后端面试题-生活举例理解篇 2021-03-31已更新_第3张图片

02:Read Committed(读已提交):可避免脏读的发生。 一句话:一个事务对同一行数据重复读取两次,但是却得到了不同的结果;【解决脏读,出现不可重复读----上小鸡图】
Java后端面试题-生活举例理解篇 2021-03-31已更新_第4张图片

03:Repeatable read(可重复读):可避免脏读、不可重复读的发生。
指一个事务执行两次查询,但第二次查询的结果包含了第一次查询中未出现的数据。
04:Serializable(串行化):避免脏读、不可重复读,幻读的发生。
提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可有效防止脏读、不可重复读和幻读。但这个级别可能导致大量的超时现象和锁竞争,在实际应用中很少使用。
MySQL数据库的隔离级别是3档起步,oracle数据库是2档起步的

2.nginx的正向代理和反向代理

nginx有很多作用,初中级面试中比较常见的就是nginx的反向代理和正向代理,这里举个很简单的例子思考说明下,秒懂,然后顺带把负载均衡带过一嘴,此片文章主要是针对面试可能会遇到的问题,nginx的作用和性能还是十分强大的,可以用于做类似zuul网关,模板缓存等等技术;
举例说明:
比如,你是格力空调的深圳代理商,客户去买东西直接找你买就行了,然后你找格力去进货,格力可能在广州有仓库,在惠州有仓库,你可以选择去哪个仓库拿货,客户不用知道,这是不是隐藏了格力的地址,这就是反向代理,你选择去哪个仓库拿货是不是可以叫负载均衡。有个空调厂家主动找到你推销空调,说把空调放在你这里卖,这时候厂家是不知道客户是谁的,他的目的是通过你把空调卖出去,不管你卖给谁,这个叫正向代理正向代理和反向代理的区别在于,代理的对象是服务器还是客户端,被代理对象是服务器则是反向代理,被代理对象是客户端则是正向代理;
【上个图】
Java后端面试题-生活举例理解篇 2021-03-31已更新_第5张图片

3.servlet是什么?servlet的生命周期?

3.1:servlet的生命周期和执行流程?
这个题目比较容易在笔试中见到,简单了解一下,能写出来这个流程基本上问题就不大了;
【Servlet 加载—>实例化(init()方法)—>服务—(Service()方法)>销毁(destroy))】其中init方法只会初始化一次,destroy方法也只会执行一次,service是servlet的核心,主要负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
3.2:servlet是什么?
这个面试题回答上来并且能举例说说的,是小型加分项。 简单:servlet就是一个接口,接口正好上面又有分享,那么接口就是一种规范,简单举例说明下:
servlet是一个接口,接口就是规范,规范的作用就是规定实现者一定要这么写,为什么要一定这么写呢?因为不这么写Tomcat web服务器不知道将客户端请求交给你的什么代码处理,这次调你的a方法,下次调你的b方法吗,那显然是不可能的,比如说规定你把处理逻辑写到service方法中,web容器每次调你的service方法就行了。简单理解就是web容器和程序员之间定义的规范,程序员按照这周规范写代码了,web容器就将请求按照规定的方式交给你的某一段代码处理。

4.spring中的ioc和aop经典面试题(欢迎留言互动)

IOC (控制反转) AOP (面向切面编程)
这个是面试中最经典,也是会经常问道的东西,这个貌似已经不分初中高级了,上面至少知道这个是啥玩意,网上也是一搜就是一大把有讲故事的,有专业讲解的,这个原理是每个程序猿必须要知道的,动不动就是核心思想,省下500个字互动一下。
springioc和aop博友遇到的多吗?都问了什么问题呢?欢迎留言

由于时间的关系,暂时梳理到这里,希望看到文章的小伙伴们把一些面试中的问题或者是梳理的知识点中没有解释的很清楚或者是错误的观点留言在评论区一起回顾梳理,改造,谢谢支持;

后续更新的面试知识点梳理:

  • 同步调用执行和异步调用执行
  • 当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B
  • Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别
  • Collection和Collections的区别
  • ArrayList、Vector、LinkedList的存储性能和特性。
  • List、Set、Map是否继承自Collection接口
  • 阐述final、finally、finalize的区别
  • String和StringBuilder、StringBuffer的区别
  • 重写和重载的区别
  • 重载的方法能否根据返回类型进行区分
  • 访问修饰符public,private,protected,以及不写(默认)时的区别 是否可以继承String类
  • jsp的九大内置对象
  • nosql数据库,例如redis以及redis为啥快
  • redis的aof和rdb持久化文件机制
  • 数据结构
  • servlet接口
  • socket长连接
  • Spring 依赖注入
  • Springmvc执行流程图
  • Spring设计模式
  • Spring boot的核心自动装载机制
  • Spring cloud的核心组件

希望文章小伙伴们互动填充知识点

你可能感兴趣的:(Java后端面试知识梳理,面试,java,mysql,redis,集合)