JAVA技术面试题(持续更新)

JAVA技术面试题(持续更新),第1张

自我总结面试题
  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理解:
  • 最直观的表达就是,IOC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的。
  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?
  • 通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大 多数Spring Boot应用程序需要最少的Spring配置。
  1. 为什么要用SpringBoot?
  • 快速开发,快速整合,配置简化、内嵌服务容器
  1. SpringBoot和SpringCloud的区别
  • SpringBoot是快速开发的Spring框架,SpringCloud是完整的微服务框架,SpringCloud依赖于 SpringBoot。
    – 1、SpringBoot只是一个快速开发框架,使用注解简化了xml配置,内置了Servlet容器,以Java应用程序进行执行。
    2、SpringCloud是一系列框架的集合,可以包含SpringBoot。
  1. SpringBoot的优点
  • 1.容易上手,提升开发效率,为 Spring 开发提供一个更快、更简单的开发框架。
    2.开箱即用,远离繁琐的配置。
    3.提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监 控、运行状况检查和外部化配置等。
    4.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. 做activiti(进主义分子,行动主义者)
  2. 什么是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. 什么是Ioc?
  • 控制反转即IoC(Incersion of Control),从字面上理解就是控制反转,将对在自身对象中的一个内置对象的控制权反转。所谓的反转,即把内置对象的控制权反转给一个容器,而应用程序只需要提供对象的类型即可。
    这是一种解耦的设计思想,并不是什么具体的技术。基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。实现IOC的技术手段:DI(依赖注入)和 DL(依赖查找),Spring中的核心机制就是DI(依赖注入)。通俗来说就是ServiceImpl类中,有Dao 对象,那就是ServiceImpl依赖了Dao。
  1. 什么是dl依赖注入?
  • 意思是自身对象中的内置对象是通过注入的方式进行创建。依赖注入有两种实现方式:Setter方式(传值方式)和构造器方式(引用方式)。
  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. 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.视图负责将结果显示到浏览器(客户端)。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/924696.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存