面试题

1、微服务化

微服务:微服务是一种软件架构,将大型系统或者复杂的应用分割成多个服务的架构,服务之间互相协调、互相配合,为用户提供最终价值。

微服务化:职责单一(高内聚,低耦合)、自治性(对外以接口的方式进行通信,通信方式是rest风格。)

https://zhuanlan.zhihu.com/p/615777632

https://baijiahao.baidu.com/s?id=1741000150364579636&wfr=spider&for=pc

2、跨域

https://donglin.blog.csdn.net/article/details/129268826?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-129268826-blog-125569792.235%5Ev38%5Epc_relevant_anti_vip&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-129268826-blog-125569792.235%5Ev38%5Epc_relevant_anti_vip&utm_relevant_index=1

跨域的问题:浏览器的一种安全的策略,浏览器对于同源策略的限制。

同源的目的是为了保证用户信息的安全,防止恶意的网站窃取数据。

以下情况都属于跨域:

协议不同、域名不同和端口不同。

跨域问题的解决方案:nginx反向代理。

cors:跨资源共享,请求头信息加一些字段

gateway网关实现一些配置。

4、慢sql如何发现

https://blog.csdn.net/Tian_Cai_Wu_Ge/article/details/132657834

3、负载均衡

https://mikechen.cc/30876.html

负载均衡:负载均衡器作为一个中间层,接收来自客户端的请求,并根据特定的算法和策略将请求分发给后端的多个资源。

负载均衡算法:

1、轮询:将请求按顺序轮流分配到后台服务器上,适用于应用服务器硬件都相同的情况。

2、加权轮询:根据权重不同,分配到后台服务器上,适用于配置高、负载低的机器。

3、随机:随机函数访问

4、最少连接:处理每个服务器正在处理的请求数,把新的请求分发到最少连接的机器上。

5、哈希:根据客户端的ip地址分发

负载均衡的分类:

二层(mac)、三层(ip)、四层(tcp)和七层(http,如nginx)

负载均衡的应用场景:

高业务量访问、同城容灾、横向扩张、消除单点故障

 5、索引

https://zhuanlan.zhihu.com/p/631600606

mysql的B+树的叶子节点除了索引还存了什么?非叶子节点只存储索引信息,叶子节点除了存储索引信息还存储数据值。

6、慢sql

https://zhuanlan.zhihu.com/p/631600606

7、redis雪崩

https://blog.csdn.net/My_wife_QBL/article/details/132915005

8、乐观锁和悲观锁

https://baijiahao.baidu.com/s?id=1766105387080887713&wfr=spider&for=pc

9、java对象的生命周期

一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段

 10、抽象类和接口的区别是什么?

接口和抽象类都是用来定义对象的公共行为的,但二者有以下 7 点不同:

  1. 定义的关键字不同。
  2. 子类继承或实现关键字不同。
  3. 类型扩展不同:抽象类是单继承,而接口是多继承。
  4. 方法访问控制符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public 控制符。
  5. 属性方法控制符:抽象类无限制,而接口有限制,接口默认的是 public 控制符。
  6. 方法实现不同:抽象类中的普通方法必须有实现,抽象方法必须没有实现;而接口中普通方法不能有实现,但在 JDK 8 中的 static 和 defualt 方法必须有实现。
  7. 静态代码块的使用不同:抽象类可以有静态代码块,而接口不能有。

你还知道哪些接口和抽象类的不同?欢迎评论区留言补充。 ​

好了,本期内容到这里就结束了,各位老铁一键三连哦,我们下期再见!

11、基本数据类型和引用数据类型用的是什么数据传递方式?

基本数据类型按值传递,传递的是值的副本,引用数据类型按引用传递,传递的是对象的引用

12、如何保障线上质量:

如何让这些角色保障质量?

1.首先要让每个角色有质量的意识,重视质量,并且参与到质量保障中,也就是测试左移。具体的方法就是,开发自测,产品自测,提测时不合格要被打回,并且发reject邮件,说明原因。三次reject,就需要review,看下问题在哪儿。项目结束后,统计千行bug率,超过2.5的要进行review。线上bugleakage review,故障review。

2.其次要有完善的流程来保证。流程的存在是为了让只要照着这个流程做的人,尽可能的避免一些问题的发生。比如流程有需求评审,code review,自测,code diff,bug记录与跟进,发布站会,发布验收。

3.再者,要提供各种工具,环境,方便人员来进行测试。比如自动化工具,下单工具,测试环境,灰度环境,仿线上环境,堡垒机等等。

4.提高测试人员的能力。包括业务能力,技术能力,沟通能力,管理能力。提高其在流程的各个环节中的能力,发现问题与解决问题的能力。方法有很多,比如业务分享,好的测试方法分享,代码串读分享,项目总结思考,承担项目技术负责人角色,值班等。

5.保证线上服务高可用。容灾,核心功能优先保证。容灾包括:应用容灾(多服务,多机房,异地多活),数据容灾(数据库集群,redis集群,redis双写集群)。核心功能优先保证包括:资源隔离(dubbo线程池独立,数据库连接池独立,mq优先级提高,uri独立,dubbo接口独立),快速恢复(应用保证快速恢复,数据保证快速恢复),降低依赖影响(减少不必要依赖,依赖出问题后熔断降级)。

5.线上问题及时发现与快速降级与处理。完善而合理的监控报警接入发布平台,监控和报警,崩溃监控,故障自动发现与定位,卡顿收集,值班人员,值班群,问题反馈群,运营问题反馈群,故障处理流程等。快速降级包括,限流,熔断等。

12、java垃圾回收
垃圾回收是在程序运行过程中自动回收不再使用的内存空间,以便程序能够更有效的使用内存。垃圾回收算法:标记清除和复制算法。
标记-清除算法是一种最基本的垃圾回收算法。它的基本思想是在垃圾回收过程中,首先标记所有可达对象,然后清除所有未标记的对象。可达对象是指程序中仍然被引用的对象,未标记的对象是指程序中不再被引用的对象。标记-清除算法的优点是可以回收任意大小的内存空间,缺点是会产生内存碎片,导致内存利用率降低。
复制算法是一种更高效的垃圾回收算法。它的基本思想是将内存空间分为两个区域,一部分是正在使用的内存空间,另一部分是空闲的内存空间。在垃圾回收过程中,将正在使用的内存空间中的可达对象复制到空闲的内存空间中,然后清除正在使用的内存空间中的未复制对象。复制算法的优点是可以避免内存碎片,缺点是需要额外的空间来存储复制对象。
13、redis分布式锁
那么何为分布式锁呢?分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰保证一致性。
14、微信朋友圈测试用例
15、

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-11-01 16:01  樱圃  阅读(6)  评论(0编辑  收藏  举报