2020年近期面试总结

	这是本人近期面试初中级的岗位的时候遇到的面试题,其中的答案可能不是最标准的作为参考即可(预祝大家找到好工作)

1.什么是JVM
答:JVM实际上是java的虚拟机运行内存环境,java的跨平台必须由jvm的支持。
JVM在运行的过程中实际上用到那个类才会去加载那个类,并不会因为开始运行时加载所有的类。
JVM实际上分为三个系统模块:类加载器子系统、执行引擎子系统、垃圾收集子系统。
JVM的内存或者空间的话:class文件存储区(方法区)、对象存储区(堆区)、线程执行数据区(栈区)。
具体的架构图:

2.什么是堆,什么是栈
栈(stack)是为执行线程留出的内存空间。
当函数(类里边的方法)被调用的时候,栈顶为局部变量和一些 bookkeeping 数据预留块。当函数执行完毕,块就没有用了,可能在下次的函数调用的时候再被使用。特点:后进先出。
堆(heap)是为动态分配预留的内存空间。
堆(heap)是为动态分配预留的内存空间。和栈不一样,从堆上分配和重新分配块没有固定模式;你可以在任何时候分配和释放它。

3.ssm的注解有哪些
@Component(value=“id标识”)
@Controller(value=“id标识”) web层
@Service(value=“id标识”) service层
@Repository(value=“id标识”) dao层
@Autowired
说明:默认按照类型(接口)从容器中查找对象并注入 也可以以属性名作为唯一标识从容器中查找对象并注入
@Configuration:声明配置类
@ComponentScan: 开启包扫描
@Import:引入其它的配置类
@RequestBody 配置到方法参数上,表明将json字符串转化为java对象
@ResponseBody 配置到方法返回值,表明将对象转化为json字符串
@RequestBody 配置到方法参数,表明将json字符串转化为对象
@SessionAttributes(value = {“username”}) //代表当前类中的所有方法 只要是model对象操作了指定的参数 都会向session域中存一份
@ModelAttribute(“aaa”) 向Model中添加元素
@Bean : 配置到方法上,表明此方法的返回值交给spring容器管理
@RequestMapping("/user") 做浏览的访问路径和当前方法的映射
@Qualifier(value=“id标识”) Value属性可以按照id唯一标识注

@Value
说明:注入基本数据类型数据 也可以注入被spring容器管理的properties文件中的内容
@Scope
说明:对象的作用 Value属性(singleton|prototype)
@PostConstruct
说明:配置到方法上 用来配置初始化方法
@PreDestory
说明:配置到方法上 用来配置销毁方法
@PropertySource:将properties配置文件交给spring容器管理
@RequestHeader 获取到请求头的信息
@CookieValue 获取到cookie的jsessionID

4.requestMapping的注解的衍生有哪几种
答:@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
答:@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。

5.什么是IOC(控制反转),DI(依赖注入)
答:是一种设计思想,在Java开发中,将你设计好的对象交给容器控制,而不是显示地用代码进行对象的创建。
把创建和查找依赖对象的控制权交给 IoC 容器,由 IoC 容器进行注入、组合对象。这样对象与对象之间是松耦合、便于测试、功能可复用(减少对象的创建和内存消耗),使得程序的整个体系结构可维护性、灵活性、扩展性变高。
DI(Dependency Injection)依赖注入,是 IoC 容器装配、注入对象的一种方式。
通过依赖注入机制,简单的配置即可注入需要的资源,完成自身的业务逻辑,不需要关心资源的出处和具体实现。

6.什么是AOP
答:举个例子,你想给你的网站加上鉴权,对某些url,你认为不需要鉴权就可以访问,对于某些url,你认为需要有特定权限的用户才能访问,这时候你需要去对访问的url进行相对的过滤,这样就可以采用AOP的方式,把和主业务无关的事情,放到代码外边去做。AOP和oop(面向对象编程)一样也是一种的编程规范。

7.echarts的版本
答:引用的是echarts.min.js

8.spring什么时候创建对象的
答:在容器启动时,通过注解声明的对象就会被创建出来。直到项目关闭才结束。

9.mybatis的如何进行模糊查询
答:在语句的后边拼接对应的where条件以及if条件,在条件中使用%以及like关键字
案例如下:

<sql id="brand_columns">
         id, name, firstChar,brandName
</sql>
<select id="selectBrand" parameterType="com.lf.Brand" resultType="com.lf.Brand">
    select <include refid="brand_columns"/> from tb_brand
    <where>
        <!-- 直接使用 % 拼接字符串 -->
        <!-- 错误写法 "%#{name}%",正确写法: "%"#{name}"%",即#{name}能够正确解析出来,前后再拼上%即可-->
        <if test="name != null">
            name like "%"#{name}"%"
        </if>
        <!concat(str1,str2)函数将两个参数连接 -->
        <if test="firstChar != null">
            and first_char like concat(concat("%",#{firstChar}),"%")
        </if>
        <! bind 标签,对字符串进行绑定,对绑定后的字符串使用 like 关键字进行模糊查询 -->
        <if test="brandName != null">
            <bind name="likeBrandName" value="'%'+brandName+'%'"/>
            and brand_name like #{brandName}
        </if>
    </where>
</select>

10.mybatis传递的批量参数是什么,在xml中的对应的标签是什么
答:使用

11.什么是数据库连接池
答:连接池的原理就是:我事先创建好几个数据库连接放着,当我的系统需要操作数据库时就从连接池里直接拿连接,并将这个连接标记为忙 ;用完后在放会池中,标记为 空闲;当连接池里的连接都在被使用,如果此时还要连接,连接池就会在创建连接放到池里,,这些连接的数量,都是在配置文件里由你控制的。

12.什么是反射
答:JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。个人理解:我们可以通过一个新建一个java类,并且已经知道java类中有什么方法并且去调用为正方向,反射于此相反。我并不知道
该类中存在那些方法通过直接xx.class去获取他的方法。

13.什么是动态代理
答:动态代理是设计模式中的一种代理模式,为其他对象提供一种控制对这个对象的访问控制;在某些情况下,客户在不想或 者不能直接应用某一个对象的情况下直接应用另一个对象,这个时候代理对象可以在中间起到客户端与目标对象之间起到中介的作用。
所谓动态代理是可以在java运行过程中动态的创建一个类去实现一个或多个接口,可以在不修改原有类代码的基础上动态的添加功能和方法。正是因为这个特性使动态代理被java的许多框架中被广泛的使用。
衍生:静态代理
答:对应的静态代理是已经生成的第三方的工具生成,在进行编译。在程序运行之前,代理类的.class文件已经存在。

14.zookeeper是怎么理解的

15.简单介绍一下Springboot以及SpringCloud
答:Spring框架
1、基于POJO的轻量级和最小侵入性编程;
2、通过依赖注入(DI)和面向接口实现松耦合;
3、基于切面(AOP)和惯例进行声明式编程;
4、通过切面和模版减少样式代码;
SpringBoot框架
1.介绍:Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适)。
2.四个主要特性
(1)SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;
(2)自动配置:SpringBoot的自动配置特性利用了Spring4对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;
(3)命令行接口:(Command-line-interface, CLI):SpringBoot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Spring应用的开发;
(4)Actuatir:它为SpringBoot应用的所有特性构建一个小型的应用程序。但首先,我们快速了解每项特性,更好的体验他们如何简化Spring编程模型。

16.简单介绍一下你的工作经历
答:吹就好了
17.你们使用的版本控制工具是什么
答:git,svn

18.els是怎么使用的
答:ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统
ES解决了这些问题
1、自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行
2、自动维护数据的冗余副本,保证了一旦机器宕机,不会丢失数据
3、封装了更多高级的功能,例如聚合分析的功能,基于地理位置的搜索

19.activemq是做什么的

答:ActiveMQ是一种开源的基于
JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。

20.kafak是做什么的
答:一个分布式流平台。应具有的三个功能
发布和订阅记录的流,类似于消息队列或者企业级消息系统。
以容错的、持久的方式存储记录流
当发生时处理记录流。

21.你是如何理解微服务的

简介:
微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过HTTP协议进行通信(也可以采用消息队列来通信,如RoocketMQ,Kafaka等),可以采用不同的编程语言,使用不同的存储技术,自动化部署(如Jenkins)减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。例如Eureka,Zookeeper等都是比较常见的服务集中化管理框架。
优势:
1)将复杂的业务拆分成多个小的业务,每个业务拆分成一个服务,将复杂的问题简单化。利于分工,降低新人的学习成本。
2)微服务系统是分布式系统,业务与业务之间完全解耦,随着业务的增加可以根据业务再拆分,具有极强的横向扩展能力。面对搞并发的场景可以将服务集群化部署,加强系统负载能力。
3)服务间采用HTTP协议通信,服务与服务之间完全独立。每个服务可以根据业务场景选取合适的编程语言和数据库。
4)微服务每个服务都是独立部署的,每个服务的修改和部署对其他服务没有影响。
缺点:
个人感觉维护起来不容易

22.微服务是怎么部署的
答:1.Docker Compose编排工具
2.k8s
3.Jenkins
具体详细的自己了解一下,不过基本没人问

23.docker是做什么的
答:
1.简介:
Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。
2.核心:
docker有3大核心:镜像、容器、仓库。
3.解决问题
解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况。
限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。

24.sql语句是如何优化的
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0

26.存储过程会不会写,(建议了解一下游标)

27.什么是垃圾回收机制
GC触发的条件有两种:
(1)程序调用System.gc时可以触发;
(2)系统自身来决定GC触发的时机。

28.ssm框架的流程
自己理解一下吧。。。。。不在叙述了。。。。。

29.什么是高内聚、低耦合
1.高内聚。特点:最充分的利用模块中每一个元素的功能,达到功能实现最大化,内聚性越强越好,用最小的资源干最大的事情。
2.低耦合。特点:项目中的各个模块之间的关联要尽可能的小,耦合性(相互间的联系)越低越好,减小“牵一发而动全身”的可能性!

30.面向对象和面向过程之间的区别
1.面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现
2.面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

31.LInux中查询磁盘剩余空间命令
1.df -h

32.查询LInux中的cpu大小
1.# cat /proc/cpuinfo

33.ConcurrentHashMap与HashTable之间线程安全的区别
ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。

34.设计模式:面向对象设计的六大原则 (绝对详细)
单一职责原则
开闭原则
里氏替换原则
依赖倒置原则
接口隔离原则
迪米特原则

35.什么是重载、什么是重写
1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
2、覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。

36.dubbo提供服务的注解是那个
service

37.activemq是什么场景下可以使用,如果数据信息泄露的话如何去处理
用途就是用来处理消息队列的主要作用是消除高并发访问高峰,加快网站的响应速度。
在不使用消息队列的情况下,用户的请求数据直接写入数据库,高发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧,但使用队列后,用户的请求发给队列后立即返回。

38.SpringMVC与SpringBoot之间的区别是什么
我实在是不知道有什么可对比性,只好把基本概念给弄下来了
Spring MVC的功能
Spring MVC提供了一种轻度耦合的方式来开发web应用。
Spring MVC是Spring的一个模块,式一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。
Spring Boot的功能在上边有描述
Spring 的功能
Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。

39.linux下边可以查看端口的命令是那些
netstat -anp |grep 端口号

40.微服务之间的调用实际上是服务和服务之间的调用,这样的话很容易出现问题为什么我们还是需要去做微服务
在项目结构比较大的情况下,我们如果将所有的模块都部署在一个容器中的话可能会导致项目卡死,因此将他们查分开来,还有
如果在A项目B项目中都使用了A项目中的一个公共模块,这样在构建B项目的情况下需要重新构建公共模块,在分布式的情况下实际上
是可以共享着一个模块减少的代码重复量(非标准答案仅供参考)

41.mybatis下边有一个动态代理是那个
Mybatis的使用需要用到Mapper映射文件,一个是映射接口,另一个是映射XML文件(此处不详谈映射文件XML),在应用中我们可以感觉到,映射接口似乎对接着XML文件中的实现命令,可是我们在运行程序是时候调用的往往是Mapper接口,而不是一个包含逻辑的实现类。很显然Mapper产生了代理类。

42.mybatis中的foreach标签如何使用

SELECT COUNT(*) FROM users
WHERE user_id IN

#{item.userId}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值