多场面试总结的JAVA技术面试题

请添加图片描述

自我总结面试题

  1. 什么是Spring?
  • Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。
  1. Spring主要由以下几个模块组成?
模块主要用于做什么
Spring Core核心类库,提供IOC服务
Spring Context提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等)
Spring AOPAOP服务
Spring DAO对JDBC的抽象,简化了数据访问异常的处理
Spring ORM对现有的ORM框架的支持
Spring Web提供了基本的面向Web的综合特性,例如多方文件上传
Spring Web MVC提供面向Web应用的Model-View-Controller实现
  1. Spring的AOP理解:
  • AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。
    AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。
  1. Spring的IoC理解以及DI的理解:
  • 控制反转即IoC(Incersion of Control),从字面上理解就是控制反转,将对在自身对象中的一个内置对象的控制权反转。所谓的反转,即把内置对象的控制权反转给一个容器,而应用程序只需要提供对象的类型即可。
  • 依赖注入即DI意思是自身对象中的内置对象是通过注入的方式进行创建。依赖注入有两种实现方式:Setter方式(传值方式)和构造器方式(引用方式)。
  1. 什么是Spring MVC?简单介绍下你对Spring MVC的理解?
  • Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
  1. Spring MVC的优点
  • (1)可以支持各种视图技术,而不仅仅局限于JSP;
    (2)与Spring框架集成(如IoC容器、AOP等);
    (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
    (4) 支持各种请求资源的映射策略。
  1. 什么是SpringBoot?
  • 基于Java的开源框架,用于创建微服务;快速开发,快速整合,配置简化、内嵌服务容器
  1. 什么是YAML?
  • YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。
  1. 什么是 CSRF 攻击?
  • CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
  1. SpringBoot和SpringCloud的区别
  • SpringBoot只是一个快速开发框架,使用注解简化了xml配置,内置了Servlet容器,以Java应用程序进行执行。
  • SpringCloud是一系列框架的集合,可以包含SpringBoot。
  1. 什么是 SpringSecurity
  • SpringSecurity,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权。
  1. 什么是Shiro?
  • Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。
  1. 什么是MyBatis-Plus?
  • MyBatis-Plus是一个Mybatis的增强工具,在MyBatis的基础上只做增强不做改变,为简易开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等操作。
  1. mysql和redis的区别?
  • 从类型上来说,MySQL是关系型数据库,Redis是非关系缓存数据库.
  • MySQL用于持久化的存储数据到硬盘,功能强大,但是速度较慢
    Redis用于存储使用较为频繁的数据到缓存中,读取速度快
  • 数据存放位置:MySQL:数据放在磁盘,Redis:数据放在内存
  1. 什么是maven?
  • 1.Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
    2.Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
    3.Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
  1. 什么是Redis
  • Redis(Remote Dictionary Server)译为“远程字典服务”,它是一款基于内存实现的键值型 NoSQL 数据库, 通常也被称为数据结构服务器,这是因为它可以存储多种数据类型,比如 string(字符串),hash(哈希散列),list(列表),set(集合)和 sorted set(有序集合)等。非关系型数据库
  1. NoSql
  • 为了克服上述的问题,Java Web项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。
    Redis和MongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。
  1. 什么是GIT?
  • Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
    Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
    Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
  1. 什么是MySql?
  • MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
  1. 是什么MongoDB?
  • MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  1. 什么是PostgreSQL?
  • PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL
  1. 什么是Linux?
  • Linux 是一种自由和开放源码的类 UNIX 操作系统。
    Linux 英文解释为 Linux is not Unix。
    Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。
  1. Linux的常用命令有哪些?
  • ls(英文全拼:list files): 列出目录及文件名
    cd(英文全拼:change directory):切换目录
    pwd(英文全拼:print work directory):显示目前的目录
    mkdir(英文全拼:make directory):创建一个新的目录
    rmdir(英文全拼:remove directory):删除一个空的目录
    cp(英文全拼:copy file): 复制文件或目录
    rm(英文全拼:remove): 删除文件或目录
    mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
  1. Docker容器技术介绍
  • 容器技术、虚拟化技术已经成为一种被大家广泛认可的服务器资源共享方式,容器技术可以在按需构建操作系统实例的过程当中为系统管理员提供极大的灵活性。由于hypervisor虚拟化技术仍然存在一些性能和资源使用效率方面的问题,因此容器技术(Container)结合虚拟化技术的解决方案正在我们的业务使用中高频使用。
  • 容器的集装箱概念是参照了航运中的集装箱概念,在航运中不关心你运输的是汽车还是棉花,它都通过集装箱将运输的流程规范成了标准化的操作,这里容器的使命也是一样,容器具备自包含的能力,将自身程序所依赖的程序全部包含在了容器中,通过Docker将底层环境打平,用户可以将一个容器镜像运行在任何操作系统的宿主机上,也就是Docker所说的“Build once, Run anywhere”。
  1. 什么是SpringCloud?
  • Spring Cloud 是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建。

  • Spring Cloud 被称为构建分布式微服务系统的“全家桶”,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。

  • Spring Cloud 中包含了 spring-cloud-config、spring-cloud-bus 等近 20 个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。

  • Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,共有两代实现。
    Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
    Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。

  1. 接口与继承各自适用于什么场合?
  • 代码重合率达到百分之80的时候用继承,重合率达到百分之50的时候用接口
  1. 什么是sql注入?怎么防止sql注入?
  • sql注入: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
  • 防止sql注入:1、采用PreparedStatement来避免sql注入,会自动对用户填写的数据进行验证(简单有效)
    sql注入只对sql语句的准备(编译)过程有破坏作用
    而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,
    而不再对sql语句进行解析,准备,因此也就避免了sql注入问题.
    2、使用正则表达式过滤传入的参数(典型的SQL 注入攻击的正则表达式 )
    3、字符串过滤,敏感词过滤
  1. 多线程有什么用?
  • 发挥多核CPU的优势
  • 防止阻塞
  • 便于建模
  1. 线程和进程的区别是什么?
  • 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
  1. java实现线程有哪几种方式?
  • 继承Thread类实现多线程
  • 实现Runnable接口方式实现多线程
  • 使用 ExecutorService、Callable、Future 实现有返回结果的多线程
  1. 启动线程方法和start()和run()有什么区别?
  • 只有调用了 start()方法,才会表现出多线程的特性,不同线程的 run()方法里面的代码交替执行。如果只是调用 run()方法,那么代码还是同步执行的,必须等待一个线程的 run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其 run()方法里面的代码。
  1. 多线程同步有哪几种方法?
  • Synchronized 关键字,Lock 锁实现,分布式锁等。
  1. 什么是死锁?如何避免死锁?
  • 死锁就是两个线程相互等待对方释放对象锁
  • 避免:占有资源的进程若要申请新资源,必须主动释放已占有资源,若需要此资源,应该向系统重新申请。
  1. 多线程之间如何进行通信?
  • wait/notify
  1. 什么是线程同步锁?
  • 线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏。 2、 线程同步方法是通过锁来实现,每个对象都有切仅有一个锁 ,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他同步方法。
  1. 什么是线程乐观锁?
  • 乐观锁 ,在拿到数据后,不会立即进行数据锁定,只有等到数据需要更新时,才会判断数据是否和那到时一致
  1. 什么是线程悲观锁?
  • 悲观锁,为了防止自己拿到数据后别人会来修改,你就把数据加上锁,直到自己处理完,才会把数据释放给别人。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。
  1. 静态函数一般用于什么场合?
  • 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
  • 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
  1. 请使用while编写从1加到100的函数,并在控制台输出:1+…+100=5050
int i=2;
String str="1";
int sum=1;
while(i<=100){
sum+=i;
str=str+"+"+i;
i++;
}
System.out.print(str+"="+sum);
  1. 请写出常用的类型转换函数名,如数字转字符串,5个以上,10个即可
  • parseByte(),toString,parseShort(),parseInt(),paserLong(),parseDouble()
  1. 请以JavaScript编写一个加到100的函数,只编写函数即可
<script>
       function add(start,end){
        var sum=0;
       for(i=start;i<=end;i++){
  sum=sum+i
  }
  return sum;
 }
 document.write(add(1,100));
</script>

42.请编写出一个标准的html5文档

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>

    </body>
</html>
  1. 在电脑上,em默认等于多少px?rem与em有什么不同?
  • em默认是等于16px;
    rem是相对于根元素进行计算,而em是相对于当前元素或父元素的字体大小
  1. 以知数据表part:代码(code),名称(name),数量(num),请编写如下sql指令:
1.增加一条记录,值为:code='001',name='商品',num=10
解:insert into part (code,name,num) values('001','商品',10);

2.删除所有的num值为0的记录
解:delete from part where num=0

3.对num大于10的记录,将其全部减1
解:update part set num=num-1 where num>10

  1. SpringBoot怎么自动装配?
  • springboot 自动装配其实就是通过扫描配置,将所需要的Bean对象以JavaConfig的方式注入到Spring容器中,是通过SpringFactoriesLoader来加载META-INF/spring.factoires文件里所有配置的EnableAutoConfgruation,最终通过过滤和移除确定哪些是需要被装载的类,从而交给spring容器装配。
  1. SpringBoot的常用注解
注解注释
@SpringBootApplication启动
@SpringBootConfiguration主要用于加载配置文件
@SpringBootConfiguration主要用于加载配置文件
@EnableAutoConfiguration开启自动配置功能
@ComponentScan主要用于组件扫描和自动装配
@RestController控制器,处理http请求
@RequestBody通过HttpMessageConverter读取Request Body并反序列化为Object(泛指)对象
@RequestMapping。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上
@GetMapping用于将HTTP get请求映射到特定处理程序的方法注解
@PostMapping用于将HTTP post请求映射到特定处理程序的方法注解
  1. SpringMVC的执行流程
  • 1.用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);
    2.由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
    3.DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
    4.HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);
    5.Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
    6.HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
    7.DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
    8.ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
    9.DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
    10.视图负责将结果显示到浏览器(客户端)。
  1. 什么是云原生?
  • 云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。
  1. 什么是微服务?
  • 微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。
    在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。
    简单来说,就是将一个系统按业务划分成多个子系统,每个子系统都是完整的,可独立运行的,子系统间的交互可通过HTTP协议进行通信(也可以采用消息队列来通信,如RoocketMQ,Kafaka等)
  1. 云原生和微服务有什么区别?
  • 微服务是应用程序的软件架构,可以是单体式和微服务式。微服务是基于分布式计算的。 你的应用程序即使不采用微服务架构也可以是云原生的,例如分布式的,但效果没有微服务好。 如果是单体式的,云原生就基本发挥不出什么优势。.另外微服务的程序也可以不是云原生的。它们虽然是两个不同的东西,但云原生和微服务是天生良配,相得益彰,相辅相成。. 而且很多云原生的工具都是针对微服务架构设计的。 你可以说现代应用程序的趋势就是"微服务+云原生"
  1. RBAC是什么?
  • RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
  1. 怎么项目部署到Tomcat?
  • 下载Tomcat服务器,启动部署Tomcat服务器,Tomcat的目录结构
  • 部署项目的一种方法(项目直接放入webapps目录中);
  • 部署项目的第二种方法(修改conf/server.xml文件);
  • 部署项目的第三种方法(apache-tomcat-7.0.52\conf\Catalina\localhost)
  1. 怎么把项目部署到linux上?
  • IDE中package项目,将SpringBoot项目打包成jar包,上传jar包至linux,在linux中运行程序,命令:java -jar 文件名
  1. javaScript 是什么?
  • javaScript 是一种轻量级的编程语言;是可插入 HTML 页面的编程代码;插入 HTML 页面后,可由所有的现代浏览器执行。
  1. jQuery是什么?
  • jQuery是一个 javaScript 库;极大简化了 javaScript 编程;
  1. Vue.js简单介绍
  • Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
  • Vue 只关注视图层, 采用自底向上增量开发的设计。
  • Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
  1. 什么是Element-ui?
  • 是基于vue实现的一套不依赖业务的UI组件库,提供了丰富的PC端组件,减少用户对常用组件的封装,降低了开发的难易程度。
  1. 如何强制对象的垃圾收集?
  • 用 System.gc (); 和 System.runFinalization ();来收集
  1. 解释Boolean和boolean的异同
  • boolean 是基本数据类型; Boolean 是它的封装类,和其他类一样,有属性有方法,可以new,也可以直接赋值
  1. 解释 SpringBoot 中的application.yml 和 bootstrap.yml 的异同
  • Bootstrap.yml(bootstrap.properties)在application.yml(application.properties)之前加载,就像application.yml一样,但是用于应用程序上下文的引导阶段。
  • Bootstrap.yml(bootstrap.properties)在application.yml(application.properties)之前加载,就像application.yml一样,但是用于应用程序上下文的引导阶段。
  1. 解释什么是深拷贝和浅拷贝?JavaScript 对象如何进行深拷贝
  • 浅拷贝: 拷贝的只是引用类型的原始对象的属性值,如果该原始对象的属性仍然是引用类型,那么只会拷贝内存地址,因此如果拷贝的对象的引用类型属性值发生改变,是会影响另一个对象的;
  • 深拷贝: 深拷贝相比浅拷贝,即使原始对象的属性是引用类型,那么也会重新创建一个新的内存空间来拷贝原始属性值,即修改拷贝对象的引用类型属性值也不会影响到另外一个对象的;

请添加图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终将站在顶峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值