Java面试过程中遇到的问题
介绍工作经验+项目
介绍项目
为什么选用这个技术
报表服务怎么实现的
java框架
1、spring clound特性,组件有那些以及作用
springCloud是一套微服务组件, 常用的Eureka,Ribbon,Hystrix,Feign,Gateway,Config,Bus(消息总线)等等。
2、SpringBoot特性
创建独立的Spring项目
内置Tomcat和Jetty容器
提供一个starter POMs来简化Maven配置
完全没有代码生成和xml配置文件 使用注解
提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
3、springmvc
4、redis数据类型,常用场景
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及sorted set (有序集合)
redis穿透、击穿 、雪崩概念,怎么预防?
Redis击穿、穿透和雪崩是指在高并发条件下,Redis服务出现的性能问题。
1、穿透:指缓存穿透,是指某个不存在的Key被大量并发请求,导致请求穿透缓存直接打到数据库,造成数据库压力剧增。
预防方法:使用布隆过滤器或者缓存空值来避免不存在的Key请求穿透到数据库。
2、击穿:指缓存击穿,是指一个Key非常热点,在某一时刻缓存正好失效,导致大量请求直接打到数据库上,造成数据库压力剧增。
预防方法:设置合理的缓存过期时间,并对热点数据做永不过期或者随机过期来避免全部失效。
3、雪崩:指缓存雪崩,是指缓存服务器宕机或网络问题导致,所有缓存失效,引起大量请求打到数据库上。
预防方法:实现缓存高可用,如使用Redis集群;使用缓存数据预热;设置缓存的过期时间分散开,避免同一时刻大量缓存失效。
具体实现可能需要结合业务场景和技术栈选择合适的解决方案。
5、mq:系统解耦,异步调用,流量削峰。
6、并发控制
7、内存溢出的问题
8、es
9、事务特性
10、事务注解哪些情况会失效
java基础
1、jdk8的新特性有哪些?
Lambda表达式、stream流、接口的增强(默认方法和静态方法)、新的日期API(LocalDate)、Optional中避免NullPointerException检查、引入重复注解、新增base64加解密API、新增方法引用格式、hashmap添加红黑树、支持并行(parallel)数组、对并发类(Concurrency)的扩展。
2、stream流 应用场景
3、集合
list set区别(有序、唯一、实现类、复杂度、遍历)
hashmap linkedhashmap区别
hashmap底层实现(红黑树的特性)
arraylist底层实现 初始容量 扩容倍数
4、for循环,break,return,continue区别
5、创建多线程的四种方法
1、继承Jave.lang包中的Thread类,重写Thread类中的run()方法,在run方法中编写实现多线程代码
2、实现Jave.lang.Runnable接口,在run方法中编写实现多线程代码
3、实现Java.util.concurrent.Callable接口,重写Call()方法并通过使用Future接口获取call()方法返回的结果
4、利用线程池创建多线程
6、接口和抽象类区别
接口和抽象类都是用来定义对象的公共行为的,但二者有以下 7 点不同:
1、定义的关键字不同。interface、abstract
2、子类继承或实现关键字不同。implements、extends
3、类型扩展不同:抽象类是单继承,而接口是多继承。
4、方法访问控制符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public 控制符。
5、属性方法控制符:抽象类无限制,而接口有限制,接口默认的是 public 控制符。
6、方法实现不同:抽象类中的普通方法必须有实现,抽象方法必须没有实现;而接口中普通方法不能有实现,但在 JDK 8 中的 static 和 defualt 方法必须有实现。
7、静态代码块的使用不同:抽象类可以有静态代码块,而接口不能有。
linux
Linux给文件赋权命令 chmod