记录一下 面试被问到的问题!

1. springBoot启动程序,扫描其他包下的组件,应该是使用那个注解呢?

        在springboot 中,如果想让应用程序启动时扫描其他组件下的包,可以使用@ComponentScan 注解

        @CompoentScan注解可以指定额外的包路径,让Spring容器去扫描这些包路径下的的组件(如:@Conpoent  @Service @Repository @Controller等注解的类)

import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.context.annotation.ComponentScan;  
  
@SpringBootApplication  
@ComponentScan(basePackages = {"com.example.otherpackage", "another.package.to.scan"})  
public class MyApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(MyApplication.class, args);  
    }  
  
}
2,ajax和webservice技术原理与应用。

        ajax和webservice是两种在web开发中常用的技术,他们各自具有独特的原理和应用场景!

        ajax是javaScript,CSS,DOM,XMLHttpRequest四种技术的集合体,核心是XMLHttpRequest对象,可以通过他异步去服务器获取数据,在ajax应用中,XmlHttpRequest负责从服务器获取数据到客户端的内存中,然后javaScript根据实际需要对这些资源进行处理,并通过Css和Dom实现页面布局, 最终呈现给流浪器

      webservice 是一种基于wen的服务,他允许不通的应用程序通过网络进行交互,wenservice的工作原理主要依赖于WSDL和SOAP协议,在开发webservice 服务后,会生成一个WSDL文档,客户端发送get请求,获取service上提供的服务,service会把WSDL返回给客户端,客户端通过阅读WSDLE文档,可以了解Service提供那些服务,以及如果调用这些服务,然后客户端发起SOAP请求,包括功能性的请求和可能包含在header里的客户验证信息等,Service收到SOAP请求后,进行相应的处理,

         webservice优点在于其跨语言,跨平台的远程调用能力以及协议的通用性,这使得它成为分布式应用程序集成的理想选择。无论是Java、C#还是其他编程语言,只要遵循Webservice的标准协议,都可以轻松地进行通信和交互。

        

3.后端的数据接口程序员需要了解web安全的一些常见风险,列如:如何预防,如SQL注入,跨域攻击,webshell上传,cookie伪装等等。
sql注入:

           预防:1,使用参数化查询,避免在sql语句种直接拼接用户输入,而是使用参数化查询或编译语句来确保用户输入被正确处理!
                       2,输入验证和清理:对用户输入进行严格的验证和清理,确保只接受预期的格式和类型.!

                       3,最小权限原则,数据库连接应该使用最小权限的账户,以减少潜在风险。\\\

跨域攻击(如CSRF、XSS)

风险

              跨站请求伪造(CSRF):攻击者诱使用户在当前已登录的Web应用程序上执行恶意操作。      

              跨站脚本攻击(XSS):攻击者在Web页面中注入恶意脚本,当其他用户访问该页面时,脚本会在用户的浏览器中执行!

预防:           

       CSRF : 使用CSRF令牌:在每次请求种都随机生成一个令牌,并在服务器端验证该令牌。

                       验证请求的来源:确保请求来自预期的域名或IP地址。

        XSS: 对用户输入进行适当的转义和编码,防止恶意脚本的执行  

                    对内容使用安全策略,来限制页面中允许执行的脚本来源。  

Webshell上传:

风险:攻击者通过上传恶意Webshell文件到服务器,从而能够远程控制服务器并执行任意代码。

预防:文件上传验证:严格验证上传文件的类型,大小和内容,只允许上传安全的文件类型

           目录权限控制:限制web服务服务器对文件上传目录的访问权限,确保只有授权的用户才能访问和修改文件

            使用web应用防火墙,WAF可以检测和拦截恶意文件上传的行为

Cookie伪装

使用安全的Cookie标志,设置Cookie的Secure和HttpOnly标志,确保cookie只能通过https传输,并且无法通过客户端脚本访问。

使用安全的身份验证机制:采用强密码策略,多因素认证方式增强身份验证的安全性。

定期更换会话令牌:定期更换用户的会话令牌,减少被攻击者利用的风险。

4,Redis在业务系统中的使用场景:

        1。缓存:redis作为内存数据库,常被用作缓存层,存储热点数据,减少数据库的访问压力,提高系统的响应速度

        2。计数器,redis的原子操作特性使其非常适合分布式环境下的计数器,如限流,访问量统计等。

        3。排行榜:redis的有序集合 数据结构,使其可以方便的实现排行榜功能,如商品销量排名,用户积分排名等

        4。会话管理,Redis可以存储用户的会话信息,实现分布式会话管理,提高系统的可扩展性。

        5。分布式锁,redis的SETNX命令可以实现分布式锁,保证在分布式环境下对共享资源的互斥访问。

5,MQ(消息队列)在业务系统中的使用场景

        1.异步处理,通过消息队列可以实现业务逻辑的异步处理,提高系统的吞吐量,和相应速度,

        2.解耦  消息队列可以作为不同服务或模块之间的通信桥梁,实现服务间的松耦合,降低系统复杂性。

         3.流量削峰:在高并发场景下,通过消息队列对流量进行削峰填谷,平滑处理请求,避免系统崩溃。

        4.消息通知:实现系统内部的消息通知机制,如订单状态变更通知、用户行为日志收集等。

6。Kafka在业务系统中的使用场景:

  1. 实时数据流处理:Kafka可以处理大量的实时数据流,如日志收集、监控数据聚合等。

  2. 离线数据分析:Kafka可以与大数据处理框架(如Spark、Flink)结合,对海量数据进行离线分析和挖掘。

  3. 跨平台数据传输:Kafka可以作为不同平台或系统之间的数据传输通道,实现数据的实时同步和共享。

如何防止缓存击穿,

        首先缓存击穿是指查询一个不存在的数据,由于缓存中也没有该数据,因此每次请求都会直接落到数据库上,造成数据库压力骤增。为了防止缓存击穿,可以采取以下策略:

       1.缓存空对象或默认值:当查询一个不存在的数据时,将空对象或默认值存入缓存,并设置一个较短的过期时间。这样,后续的请求在缓存有效期内会直接返回空对象或默认值,避免对数据库造成压力。

       2.布隆过滤器:使用布隆过滤器对数据库中的数据进行预判,如果某个值一定不存在于数据库中,则直接返回,避免对数据库进行查询。

        3.加锁:当多个请求同时查询一个不存在的数据时,可以通过加锁机制保证只有一个请求去数据库查询,其他请求等待查询结果并更新缓存

        4.设置缓存预热:在系统启动时或定期预热一些热点数据,避免缓存击穿问题。

       

我亦无他,惟手熟尔!

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值