ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java面试题

2021-05-12 11:29:35  阅读:137  来源: 互联网

标签:面试题 缓存 Java 数据库 二级缓存 SqlSession 拦截器 线程


1、面向过程、面向对象?

  • 面向过程:性能高
  • 面向对象:性能低,易维护、易复用、易扩展(低耦合,封装、继承、多态特性)

2、String、StringBuffer、StringBuilder?

  • String:对象不可变,每次操作都会生成新的string对象,操作少量数据用
  • StringBuffer:对象可变,有加同步锁,线程安全,多线程操作字符串
  • StringBuilder:对象可变,线程不安全,单线程操作字符串,效率更高

3、&、&&?

  • 作用都一样就是两边都为true结果才为true
  • &&具有短路的功能,当左边为false就不再执行右边,而&是两边都会执行

4、==、equals()?

  • ==比较的是内存地址,equals比较的是值
  • 对于基本数据类型,只有==没有equals
  • 对于string或object这些引用数据类型,equals如果没被重写和==一样比较的是内存地址,如果被重写比较的是对象是否相同

5、重写(override)、重载(overload)?

  • 重写是父类与子类之间多态性的表现,在运行时起作用(对父类函数进行重新定义)
  • 重载是一个类中多态性的表现,在编译时起作用(如不同参数个数或类型的同名函数)

6、arraylist、linkedlist、vector?

  • arraylist:数组,查询快
  • linkedlist:链表,有指针,增删改快
  • vector:有加同步锁,线程安全,性能差

7、hashmap、linkedhashmap、concurrenthashmap、hashtable?

  • hashmap:线程不安全时推荐使用
  • linkedhashmap:保存了记录插入的顺序
  • concurrenthashmap:有加分段锁,考虑线程安全推荐使用
  • hashtable:全局只有一把锁,线程安全,性能差

8、hashmap线程不安全?

  • 1.7:并发执行扩容操作时会发生环形链表和数据丢失的情况
  • 1.8:并发执行put操作时会发生数据覆盖的情况

9、缓存穿透、缓存击穿、缓存雪崩?

  • 缓存穿透:请求缓存和数据库都不存在的数据,请求校验拦截或缓存空数据
  • 缓存击穿:并发请求某条缓存过期数据造成数据库压力瞬间多大,加互斥锁或设置热点数据永不过期
  • 缓存雪崩:并发请求大量缓存过期数据造成数据库压力过大甚至宕机,过期时间设置随机或设置热点数据永不过期或分布式部署

10、拦截器(interceptor)、过滤器(filter)?

  • 拦截器是基于java反射机制的,而过滤器是基于函数回调
  • 拦截器不依赖于servlet容器,而过滤器依赖于servlet容器
  • 拦截器只对action请求起作用,而过滤器几乎对所有请求起作用
  • 拦截器可以访问action上下文、值栈里的对象,而过滤器不能
  • 在action生命周期里,拦截器可以多次被调用,而过滤器只在容器初始化时被调用一次
  • 拦截器可以获取ioc容器中的各个bean,而过滤器不行,所以在拦截器里可以注入service来调用业务逻辑
    (从内到外:controller、interceptor、servlet、filter、tomcat)

11、抽象类、接口?

  • 抽象类中可以有构造方法,接口中不能有
  • 抽象类中可以有普通成员变量,接口中没有
  • 抽象类中可以包含非抽象的普通方法,接口中方法必须都是抽象的
  • 抽象类中可以包含静态方法,接口中不能
  • 一个类可以实现多个接口,但只能继承一个抽象类

12、java8新特性?

  • lambda表达式:最简单的lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:Arrays.asList( “a”, “b”, “d” ).forEach( e -> System.out.println( e ) )
  • 方法引用:Class::new、Class::method
  • 可以使用重复注解
  • 等等…

13、多线程创建方式?

  • 继承thread类
  • 实现runnable接口
  • 实现callable接口
  • 使用线程池,用executor框架

14、线程状态?

  • 新建
  • 就绪
  • 运行
  • 阻塞
  • 死亡

15、Synchronized、Lock?

  • synchronized是Java关键字,lock是一个类
  • synchronized异常会释放锁,lock不会(需要手动,可能会发生死锁)
  • synchronized不能响应中断,lock可以
  • lock可以知道是否获取到锁,synchronized不能

16、Spring作用域?

  • singleton(单例)
  • prototype(原型)
  • request
  • session
  • global session

17、集群、负载均衡?

  • 集群(Eureka、Zookeeper):将同一个系统部署在多台服务器上
  • 负载均衡(Nginx、Ribbon):将多个请求平均分摊到每台服务器上(按照轮询、权重、最小连接数等方式)
  • 负载均衡的前提是集群

18、Eureka、Zookeeper?

  • C(一致性)、A(可用性)、P(分区容错性)
  • Zookeeper:保证CP,分主从节点,主节点出现问题时剩余节点会重新选举,选举期间服务瘫痪
  • Eureka:保证AP,节点平等,自动切换到正常的节点,查到的信息可能不是最新的

19、乐观锁、悲观锁?

  • 乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。一般会使用版本号机制或CAS操作实现,适用于读多写少。
  • 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改所以会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。比如说像加synchronized,只允许单个线程占用资源,造成其他线程阻塞。效率可能较低,适用于写多读少。

20、IOC、AOP?

  • IOC控制反转:将类的对象的控制权交给spring容器(一个bean标签就相当于创建了一个类的对象)
  • AOP面向切面:将复杂的业务分解不同的切面,然后公共功能集中解决(拦截方法,定义前置后置增强类去做增强处理)

21、FactoryBean、BeanFactory?

  • FactoryBean是一个Bean,由IOC容器管理
  • BeanFactory是一个Factory,就是IOC容器

22、Collection、Collections?

  • Collection是集合类的上层接口
  • Collections是一个集合框架的帮助类

23、throw、throws?

  • throw写在方法体里面,throws放在方法头上面
  • throw就是直接抛出一个异常,而throws表示这个方法可能会抛出一个异常

24、Java中final的作用?

  • 可以作为修饰符来修饰变量、方法和类;
  • 被final修饰的变量必须在初始化时给定初值,以后在使用时只能被引用不能被修改;
  • 被final修饰的方法不能在子类中被重写;
  • 被final修饰的类不能被继承。

25、事务失效场景?

  • 在非public修饰的方法上使用
  • 在事务方法中使用try-catch
  • 没加事务的方法调用加了事务的方法
  • 属性配置问题

26、bigdecimal、double、float?

  • 银行里的金额为保证计算精确,使用bigdecimal而不用double或float
  • 因为有效长度足够长可存储小数位数

27、Cookie、Session、Token?

  • Cookie数据存放在客户浏览器上,Session数据存放在服务器上
  • Cookie不安全适合存大量信息(单4K),考虑安全应使用Session存用户等重要信息
  • Token传参验证登陆

28、Linux:

  • 查看当前目录:pwd
  • 查看当前目录所有文件(夹):ls
  • 切换到指定目录:cd
  • 目录创建、删除:mkdir、rmdir
  • 文件创建、删除、移动:touch、rm、mv
  • 文件查看:vi、vim、cat、more、less、head、tail
  • 上传下载:rz、sz
  • 搜索:find、locate、grep
  • 解压缩:zip、gzip、unzip、gunzip、tar
  • 查看、终止进城:ps、kill

29、Dubbo:分布式框架

  • interface:model、service
  • provider:mapper(java、xml)、serviceImpl
  • consumer:controller

30、SpringCloud:微服务框架

  • eureka server、eureka client(provider、consumer)
  • 客户端注册(连接)到服务端并维持心跳连接,通过接口地址完成服务间的调用
  • resttemplate.get(post)for entity(object、location)
  • ribbon:(客户端的)负载均衡(有多个provider)consumer(按照轮询、权重、最小连接数等算法)切换调用provider
  • hystrix:服务熔断:当消费者调用提供者没有响应时直接返回一个错误响应,避免故障在分布式系统间蔓延
  • feign:声明式服务消费(ribbon+hystrix),类似controller调用service
  • zuul:api网关,类似添加上下文路径(路由),然后可以自定义请求过滤、异常处理

31、Redis:

  • string、list、set、hash、zset
  • redisTemplate.opsForValue().set(get)

32、Mybatis的一级缓存和二级缓存?

  • 一级缓存的作用域是SqlSession范围的。
  • 当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。
    需要注意的是,如果SqlSession执行了DML操作(增删改),并且提交到数据库,MyBatis则会清空SqlSession中的一级缓存,这样做的目的是为了保证缓存中存储的是最新的信息,避免出现脏读现象。
  • 当一个SqlSession结束后该SqlSession中的一级缓存也就不存在了。关闭一级缓存后,再次访问,需要再次获取一级缓存,然后才能查找数据,否则会抛出异常。
  • 二级缓存是mapper级别的缓存。
  • 使用二级缓存时,多个SqlSession使用同一个Mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMap进行数据存储。
    相比一级缓存SqlSession,二级缓存的范围更大,多个Sqlsession可以共用二级缓存,二级缓存是跨SqlSession的。
  • 二级缓存的作用域是mapper的同一个namespace,不同的sqlSession两次执行相同的namespace下的sql语句,且向sql中传递的参数也相同,即最终执行相同的sql语句,则第一次执行完毕会将数据库中查询的数据写到缓存,第二次查询会从缓存中获取数据,不再去底层数据库查询,从而提高效率。

常用命令:

  • idea/terminal:jps、taskkill /f -pid 3248
  • cmd(命令)
  • notepad(记事本)
  • mstsc(远程)
  • snippingtool(截图)
  • mspaint(画图)

面试常问知识点:

  1. 非关系型数据库 redis 常用数据结构,电商场景的用法,分布式锁的使用
  2. 数据库 mysql 包含基本语法、innodb 底层结构、索引的使用、sql 优化、sql注意事项、事务的使用、注意事项
  3. 队列 rocketMq、rabbitMq 对比一系列mq 的优劣、特点
  4. Java 基础,hashmap、jvm、springboot 至少了解生命周期
  5. 微服务,基础的几个主件,各自的优劣,适用场景

一些常问关键词:

  • Spring、SpringMVC、Mybatis、SpringBoot、
  • Dubbo、SpringCloud、分布式、微服务
  • RocketMQ、RabbitMQ、Kafka
  • SQL优化、MySQL、Oracle、Redis、MongoDB
  • 内存溢出、JVM、HashMap
  • Maven、Nginx、Linux

标签:面试题,缓存,Java,数据库,二级缓存,SqlSession,拦截器,线程
来源: https://blog.csdn.net/qq_40139458/article/details/115479943

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有