1.如何比较两个给定日期?
1.1)通过String的compareTo方法
String d1="2022-5-16 12:00:00";
String d2="2022-5-16 13:00:00";
int b=d1.compareTo(d2)
System.out.println(b)//-1
1.2)通过Date的compareTo方法
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2022-5-16 15:16:30");
Date date2 = format.parse("2022-5-16 15:15:30");
int j = date.compareTo(date2);//-1
System.out.println(j);
1.3)通过Java8中的isAfter(),isEqual()和compareTo()来比较LocalDate,LocalTime和LocalDateTime
LocalDateTime t = LocalDateTime.now();
LocalDateTime tt=LocalDateTime.now();
int k = t.compareTo(tt);
System.out.println(k) //0
System.out.println(t.isBefore(tt)); //false
System.out.println(t.isAfter(tt)); //false
System.out.println(t.isEqual(tt)); //true
1.4)通过Date的after、before方法
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date t1 = sdf.parse("2022-5-16 14:41:30");
Date t2=sdf.parse("2022-5-16 14:50:00");
System.out.println(t1.before(t2)); //false
System.out.println(t1.after(t2)); //true
2.什么是变量可见性?
什么是可见性?
变量可见性就是在某个线程修改了共享变量的值后,另一个线程能够获取该变量修改后的值。
导致的原因:
这是由于共享变量的值是放在主内存中的,线程在使用该变量时会先将该变量复制进工作内存中,此时该变量的值发生改变,无法获取到该变量的最新值导致的。
可以通过volatile和synchronized实现变量的可见性。
volatile:
volatile可以实现轻量级锁,性能优于锁但不具备原子性,也就是说该变量在其他线程中操作不具备原子性,适用于读多写少。
volatile禁止缓存(volatile变量的访问控制符会加个ACC_VOLATILE)
对volatile相关的指令不做重排序
3.为什么要使用雪花算法?
什么是雪花算法?
雪花算法就是利用64位long类型的数据存储id,最高位通过0(+)、1(-)便是正负
雪花算法解决了分布式中的id重复问题,
使用该算法的缺点:
该算法依赖于时间,倘若服务期发生时钟回拨会导致id重复问题
4.什么是内存泄漏,什么是内存溢出,这两个有什么区别?
内存泄漏:程序中已经动态分派好了堆内存,由于某种原因导致内存无法释放,从而造成内存浪费,导致程序运行速度变慢,诱发内存溢出导致系统故障。
内存溢出:系统当前无法分配出运行程序所需的内存空间,这时系统会抛出内存溢出异常。
5.SpringBoot如何解决跨域?
5.1)返回新的CorsFilter。
5.2)重写WebMvcConfigurer
5.3)使用注解@CrossOrigin
5.4)手动设置响应头HttpServletResponse
5.5)自定义web filter
SpringBoot解决跨域问题的六种方式_程世玉的博客-CSDN博客_springboot跨域问题怎么解决
6.如何响应一个cookie?
给客户端响应cookie_violet_evgr的博客-CSDN博客_响应cookie
7.如何部署一个项目?
部署一个项目的步骤_CC鹿的博客-CSDN博客_如何部署一个项目
8.having和where的区别
8.1)where是直接用表的字段对数据集进行筛选,不能使用别名。
8.2)如果有关联表时,where先筛选后关联,用小的数据关联更高效,having先关联再筛选,比较慢。
8.3)where可以使用表中字段作为筛选条件,不能使用函数作为筛选条件;Having可以使用函数作为筛选条件,必须和group by配合使用。
9.什么是索引?
索引是一个可以提高数据查询速度的数据结构。
10.什么是B+树?
B+树是一种数据结构,通常用于操作系统的文件系统中和数据库中使用,能够保持数据稳定有序。
B+树是B树的一种变体,属于平衡多路查找树
11.什么是唯一索引?
唯一索引指得是当前表的中列的键值没有重复的数据,确保了数据的唯一性。
12.什么是SQL注入?
前端与后端进行数据交互时,没有进行严格的判断导致传入的数据拼接到了SQL语句之后造成程序瘫痪、数据库数据丢失等问题。
13.过滤器和拦截器的区别?
13.1)实现原理不同:
过滤器基于回调函数实现。
拦截器基于Java反射机制实现。
13.2)使用范围不同:
过滤器:是基于Servlet规范,需实现Filter接口,依赖于Tomcat容器。
拦截器:是String的组件,由String容器管理。
13.3)触发机制不同:
过滤器:在请求进入Servlet前后处理。
拦截器:对请求在Hanlder前后处理。
13.4)控制执行顺序的方式不同:
过滤器:通过注解Order实现,值越小优先级越高。
拦截器:通过order方法实现
14.如何自定义Feign的拦截器?
14.1)实现feign.RequestInterceptor接口。
14.2)重写方法apply(RequestTemplate template)
14.3)设置header属性:template.header(name,value)
14.4)设置param属性:template.query(name,value)
15.dubbo与Feign的区别?
dubbo是基于容器运行的,容器就是String,基于高性能的rpc实现服务的输入输出功能。
dubbo支持多种传输协议(Rmi、redis、http、dubbo),可以根据实际业务场景选择,默认使用netty基于TCP配合Hession实现高性能的RPC。
Feign是基于Rest的http完成请求的,http具有更大的报头,占用更大的带宽,但是比dubbo灵活。
16.dubbo的传输机制是什么?
抽象mina和netty为统一接口,以Message为中心
dubbo底层使用netty这样的NIO框架,基于tcp协议传输,配合Hession序列化完成rpc通信。
17.什么是注册中心?
是服务实现服务化管理的核心组件,提供了服务治理的功能,实现了服务的自动注册与发现,是微服务中不可或缺的一部分,减少了维护人员频繁且大量的修改配置信息。
18.为什么使用网关?
进行统一的鉴权,如果在为服务中不使用网关,每个服务都需要进行鉴权,增加了系统的复杂性同时也影响了用户的体验。
网关鉴权可以有效的保护微服务,只暴露自己的地址,其他服务可以通过内网的防火墙保护。
易于监控,将监控数据推送到外部系统进行分析。
统一接入:请求路由、灰度发布、请求过滤、版本控制、监控服务的性能。
流量监控:可以限流防止系统崩溃、流量错峰、服务降级。
安全防护:服务保护及鉴权,意味着只有授权的系统才能访问;可以设置黑白名单,内外网隔离。
19.如何配置Nginx集群?
19.1)安装pcre(是基于c语言编写的正则表达式函数库)
19.2)安装openssl、zlib、gcc 依赖
19.3)安装Nginx:
修改Nginx配置(配置监控端口、配置服务器集群、配置URL匹配路径)修改完重启。
19.4)安装keepalived保证高可用(修改配置文件、编写脚本,并将该文件放到/usr/local/src/中)
详情请看:8、nginx配置高可用集群 - 知乎
20.如何创建定时器?
20.1)基于Scheduled注解
20.2)基于Timer.schedule创建任务
20.3)基于线程(可以与thread、线程池、ScheduleTask配合使用)
20.4)quartz配置定时器:基于Spring的quartz框架
详情连接:【JAVA定时器】四种常见定时器的原理和简单实现_Echo-YeZi的博客-CSDN博客_java 定时器