JAVA开发面试总结(一)JAVA基础、JVM、Spring、MyBatis、计算机网络、项目相关

最后更新于2021年2月22日10:29:05

JAVA

1.封装、继承、多态
面向对象三大特性-----封装、继承、多态
“把一个或多个项目封闭在一个物理的或者逻辑的包中”。只公开某些对外接口,隐藏具体实现细节。
在现有类(基类、父类)上建立新类(派生类、子类)的处理过程称为继承。
多态指在程序设计中存在同名不同方法的存在,主要通过子类对父类的覆盖来实现多态,设计原则之一就是要依赖于抽象,而不依赖于具体,增加灵活性。多态就是为了体现这一原则。

2.final 、finally、finalize
当用final修饰的时,表明该类不能被其他类所继承。当我们需要让一个类永远不被继承,此时就可以用final修饰,但要注意:final类中所有的成员方法都会隐式的定义为final方法。
final修饰成员变量表示常量,只能被赋值一次,赋值后其值不再改变。

finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。所以前面一句话不太彳亍

finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用,一般是不需要程序员去实现finalize的。

3.注解是怎么实现的

@Target({
    
    ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    
    
    String value();
}
这是一个自定义的简单的注解

注解本质上是一个继承了Annotation接口的接口。注解底层是通过反射实现的。

4.反射

一句话总结:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。

获取类对象有3种方式

  1. Class.forName
  2. Hero.class
  3. new Hero().getClass()

与传统的通过new 来获取对象的方式不同
反射机制,会先拿到Hero的“类对象”,然后通过类对象获取“构造器对象”
再通过构造器对象创建一个对象

package reflection;
import java.lang.reflect.Constructor;
import charactor.Hero;
public class TestReflection {
    
    
  
    public static void main(String[] args) {
    
    
        //传统的使用new的方式创建对象
        Hero h1 =new Hero();
        h1.name = "teemo";
        System.out.println(h1);
          
        try {
    
    
            //使用反射的方式创建对象
            String className = "charactor.Hero";
            //类对象
            Class pClass=Class.forName(className);
            //构造器
            Constructor c= pClass.getConstructor();
            //通过构造器实例化
            Hero h2= (Hero) c.newInstance();
            h2.name="gareen";
            System.out.println(h2);
        } catch (Exception e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

5.在这里插入图片描述
通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!
集群环境下并发控制的手段:volatile,synchronized,Lock和atomic。

6.异常
运行时异常和普通异常有什么区别
一个面试必问的知识点:java中的异常这个有点不太好,列举了常见的异常。
Java 提供了两种错误的异常类,分别为 Error 和 Exception,且它们拥有共同的父类——Throwable。
Error:运行期间的错误,JVM层面的、非常严重的、程序跑不起来的那种错误。

7.序列化接口 Serializable

8. java基础之Object类解析(一)
getClass(); hashCode(); equals(); clone(); toString();
notify(); notifyAll(); wait();
finalize(); registerNatives().
9.一文搞定Java内部类

JVM

学习JVM是如何从入门到放弃的?JVM概述
class文件是通过类的加载器装载到jvm中的!
各个加载器的工作责任:
1)Bootstrap ClassLoader:负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
2)Extension ClassLoader:负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
3)App ClassLoader:负责记载classpath中指定的jar包及目录中class

1.JVM总结(一):概述–JVM运行时数据区
在这里插入图片描述
在JDK7.0版本,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区的内存空间太小了。
2.常量池
字符串常量池位于堆中,运行时常量池在元空间中。

3.JVM的垃圾回收及其相关算法
JVM的垃圾回收机制 总结

堆区和方法区要进行回收。
判断对象是否死去有两种算法:引用计数算法和可达性算法。
引用计数算法:引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。很快很快很快很快。问题是:无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0。

可达性算法:可达性算法、Java引用 详解这个说的老清楚了,还说了强软弱虚四种引用。

进行垃圾收集有四种算法:

  1. 标记-清除算法
  2. 复制算法
  3. 标记-整理算法:在标记-清除算法基础上实现的算法,进行了对象的移动。
  4. 分代收集算法:将堆区划分为老年代和新生代

新生代和老年代的区别:

所谓的新生代和老年代是针对于分代收集算法来定义的,新生代又分为Eden和Survivor两个区。加上老年代就这三个区。数据会首先分配到Eden区 当中(当然也有特殊情况,如果是大对象那么会直接放入到老年代(大对象是指需要大量连续内存空间的java对象)。),当Eden没有足够空间的时候就会 触发jvm发起一次Minor GC。如果对象经过一次Minor GC还存活,并且又能被Survivor空间接受,那么将被移动到Survivor空 间当中。并将其年龄设为1,对象在Survivor每熬过一次Minor GC,年龄就加1,当年龄达到一定的程度(默认为15)时,就会被晋升到老年代 中了,当然晋升老年代的年龄是可以设置的。如果老年代满了就执行:Full GC 因为不经常执行,因此采用了 Mark-Compact算法清理

Spring

为了忽悠大厂面试官,熬夜总结了这些Spring面试题!

第一部分

1.Spring Bean的分类
Spring 中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean 即 FactoryBean。FactoryBean跟普通Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。创建出来的对象是否属于单例由isSingleton中的返回决定。

1.Spring Bean的生命周期
实例化(Instantiation)
属性赋值(Populate)
初始化(Initialization)
销毁(Destruction)

3.Spring Bean的初始化
首先@PostConstruct 会被最先调用
其次 InitializingBean.afterPropertiesSet()方法将会被调用
最后调用通过 XML 配置的 init-method 方法或通过设置 @Bean 注解 设置 initMethod 属性的方法

4.Spring Bean的销毁
首先 @PreDestroy 会被调用
其次 DisposableBean.destroy() 会被调用
最后调用通过 XML 配置的 destroy-method 方法或通过设置 @Bean 注解 设置 destroyMethod 属性的方法

5.Spring IOC 容器是什么
Spring 容器创建、连接、配置对象,并管理他们的整个生命周期。
一个Spring容器就是某个实现了ApplicationContext接口或者BeanFactory接口的类的实例实例实例
BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身,耦合度较高,除非做底层框架否则不该使用;ApplicationContext 面向使用 Spring 框架的开发者。

一般称 BeanFactory 为 IoC 容器,而称 ApplicationContext 为应用上下文。但有时为了行文方便,也将 ApplicationContext 称为 Spring 容器。

杂文(5):FactoryBean 和 BeanFactory 的区别

第二部分

1.IOC
控制反转。通俗地讲,就是把原本需要程序员自己创建和维护的一大堆bean统统交由Spring管理,使用工厂托管bean。
目的是为了解耦。
使用DI(依赖注入)的方式实现IOC(控制反转)。
2.Spring的三种依赖注入方式
Set方法注入
构造函数注入
自动装配与注解注入(配置XML文件注入和@Autowired注入)
3.AOP
面向切面编程Aspect Oriented Programming。 为了解决非核心功能(如日志记录)重复太多次的问题。
动态代理其实就是在运行时动态的生成目标对象的代理对象,在代理对象中对目标对象的方法进行增强。
通过通知和目标方法的执行顺序我们可以把通知分为五种:
前置通知(before):在目标方法执行之前执行。
后置通知(after):在目标方法执行之后执行。
后置返回通知(after returning):在目标方法返回之后执行,先执行后置通知再执行后置返回通知。
异常通知(after throwing):在目标方法抛出异常时执行。
环绕通知(around):在目标函数执行中执行。

MyBatis

1.聊聊MyBatis缓存机制
2.Mapper层和XML是怎么对应起来的:
MyBatis动态代理了Mapper层,解析XML的SQL语句来实现CURD。

数据库

本来也是写在这里的,因为太重要了以及被恶心到了所以另开了一篇文章。
数据库笔记

计算机网络

一个HTTP打趴80%面试者
99%网工都会遇到的10道经典面试问题
TCP的可靠性传输是如何保证的:checksum、序列号、超时重传、最大消息长度、滑动窗口控制、拥塞控制。
**http:**超文本传输协议,明文传输,信息不安全。用的是80端口
**https:**安全套接字超文本传输协议,有ssl/tsl证书,信息安全。用的443端口

项目相关

1.你做的这项目难点是什么
2.用到了哪些库?(迷茫)
3.为什么使用mqtt而不是其他的物联网协议
杂文(8):MQTT

复习流程

1.线程进程——多线程——锁 (非常重要)
会涉及: Java中各种关键(volatile等很多)、基础知识(Java中有哪些数据类型、hashmap底层用什么实现)各种锁,概念/场景/ java中有哪些锁/还包括 数据库的锁线程池相关
2. jvm内存模型 (重要)会涉及:(垃圾回收、变量的存储位置、堆栈等)
3. 手撕代码(重要)会涉及:不会有场景的,纯算法(比如 二叉树后序遍历/ 单例模式的双重检验)
4. 设计模式(重要)
5. 知道那些框架 (ssh mvc)(重要)
6. 你的项目(非常重要)从应用场景——架构设计——关键的点——用到的基础——storm相关——kafka的原理——redis原理
7. Linux的常用命令、git的简单命令(了解)
8. 多看他人的面经,总结(重要)

我的心得 2021年1月14日 初级开发

JAVA基础知识能问的东西简直太多了。
算法的话大部分都是笔试阶段就完成了,面试阶段问的比较少。
Spring方面不但问的少而且就算问也是一些奇奇怪怪的比如spring事务、mybatis的缓存机制,感觉都是面试官想到了啥就问啥,那我学到哪年是个头嘛。IOCAOP都不问的。
数据库方面问的也比较多,需要加强。
设计模式不用看,我反正没见人问过。
Linux命令也没见人问过。
最重要的是总结完知识一定要回头多看看自己写的博客,复习一下,要不真到面试场合全忘了。

2020 秋招面试经历整理
金三银四-2020阿里巴巴腾讯头条一线大厂最全Java笔试面试汇总
有赞

猜你喜欢

转载自blog.csdn.net/weixin_44445507/article/details/114368302