知识·集锦

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 定时器

        

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值