2024年网络安全最全JAVA面试八股文之框架相关(1),我在华为做网络安全外包的真实经历

写在最后

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源私我

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 使用数据库标记:可以在数据库中标记任务的执行状态,每个节点在执行任务前先查询数据库,判断任务是否已经被其他节点执行,如果是则不执行任务。
  • 使用消息队列:可以将定时任务的执行逻辑放入消息队列中,每个节点监听消息队列,当有任务需要执行时,只有一个节点会消费消息并执行任务。

mybatisplus实现批量插入?

  • 自带saveBatch批量插入方法。(其实是伪批量,其底层实现仍然是一条条数据进行插入的)
  • Mybatis-plus还有一个InsertBatchSomeColumn批量插入插件;

首先我们需要实现一个自定义的 SQL 注入器,注入 InsertBatchSomeColumn 插件:

/\*\*
 \* SQL注入器
 \*/
@Component
public class SpiceSqlInjector extends DefaultSqlInjector {

    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        // 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        // 注入InsertBatchSomeColumn
        // 在!t.isLogicDelete()表示不要逻辑删除字段,!"update\_time".equals(t.getColumn())表示不要字段名为 update\_time 的字段
        methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete() && !"update\_time".equals(t.getColumn())));
        return methodList;
    }
}

public interface SpiceBaseMapper<T> extends BaseMapper<T> {

    /\*\*
 \* 批量插入
 \* {@link com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn}
 \*
 \* @param entityList 要插入的数据
 \* @return 成功插入的数据条数
 \*/
    int insertBatchSomeColumn(List<T> entityList);
}


springboot排除依赖?

  • 启动类注解设置需要排除的自动装配类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

  • 在配置文件中指定需要排除的类
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
# 或者这样
spring.autoconfigure.exclude[0] = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

  • 单独使用@EnableAutoConfiguration注解
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)

控制配置类的优先级?

  • 使用@order注解;
  • 使用Ordered 接口;

BeanFactory 和 ApplicationContext 的区别?

  • BeanFactory 是最基础的接口,是 Spring IoC 容器的底层实现。它提供了最基本的 IoC 功能,即管理和获取 Bean 对象。BeanFactory 使用延迟加载策略,只有在获取 Bean 的时候才会实例化对象。
  • ApplicationContext 是 BeanFactory 的一个高级实现,它提供了更多的功能和扩展性。ApplicationContext 在 BeanFactory 的基础上添加了更多的企业级特性,例如国际化支持、事件发布机制、AOP(面向切面编程)等。ApplicationContext 在容器初始化时就会实例化所有的单例 Bean,提供更快的访问速度。

Spring的注入方式有哪些?

1,构造器注入;
2,Setter方法注入;
3,字段注入;
4,接口注入;

mybatis如何实现分页?

底层通过拦截器实现,拦截底层通过责任链+动态代理+反射机制实现
当MyBatis执行查询操作时,拦截器会拦截该操作,并根据传入的参数计算出分页相关的信息,然后修改SQL语句,添加分页相关的限制条件,最后执行修改后的SQL语句,返回分页结果。

Controller和Restcontroller的区别是什么?

主要的区别在于返回值的处理方式,@Controller返回的是视图,而@RestController返回的是对象,并将其转化为JSON格式。

SpringBoot的优点有哪些?

1,简化配置;
2,快速开发;
3,微服务支持;
4,自动化配置;
5,强大的社区服务;
6,生态系统;

SpringBoot自动装配?

Springboot自动装配的原理是通过条件注解@Conditional和SpringBootStarter来实现。在项目启动时Springboot会根据条件注解判断是否需要自动装配某些组件,并将这些组件自动注册到spring容器中,从而实现自动装配。

@Bean和@Component和@Configuration的区别?

  • @Bean注解用于在配置类中声明Bean对象;
  • @Component用于标记一个类为Spring管理;
  • @Configuration用于标记一个类为配置类;

什么是RestFul风格?

Restful是一种新软件架构风格,通过资源路径可以判断访问的资源,请求方式可以判断进行的操作,GET表示查询,POST表示添加,PUT表示修改,DELETE表示删除。

Spring中那些模块?

核心容器:核心容器提供spring框架的基本功能;
spring上下文:是一个配置文件,向spring框架提供上下文信息;
springAOP:可以很容易地使 Spring 框架管理的任何对象支持 AOP;
springDAO:jdbc DAO异常方面;
springORM:提供orm对象关系工具;
SpringWeb:为基于web应用提供上下文;
SpringMVC:构建web应用的实现;

spring中有那些设计模式

1,单例模式,spring容器中的bean都是单例的;
2,工厂模式:spring中的BeanFactory和ApplicationContext都是使用工厂模式来创建;
3,依赖注入:灵活的管理Bean之间的关系;
4,观察者模式:spring的事件机制基于观察者模式;
5,代理模式:SpringAOP;
6,模板方法模式、适配器模式,策略模式,迭代器模式,组合模式,装饰器模式,责任链模式;

RequestMapping有那些参数?

1,value:用来指定映射路径;
2,method:用来指定请求的http方法;
3,params:用来指定请求的参数条件;
4,headers:指定请求头的条件;
5,consums:用来指定请求的content-type的条件;
6,produces:用来指定响应的content-type的条件;

@Autowired和@Resource的区别?

  • @Autowired是Spring框架提供的注解,按照类型自动装配通,常结合@qualifier注解一起使用解决歧义性问题;
  • @Resource是javaEE标准的注解,按照名称自动装配;

@service、@Controller、@Component,@Repository的区别?

  • @Component是通用的组件注解,表示该类是一个Spring的Bean,交由Spring容器管理;
  • @service和@Component作用一样,主要用来标识服务层;
  • @Controller和@Component作用一样,主要用来标识控制层;
  • Repository和@Component作用一样,主要用来标识数据访问层;

spring单例bean是线程安全的嘛?

spring中的单例bean是线程不安全的,当有很多请求访问同一个服务时,容器会为每一个请求分配一个线程,这时多线程并发执行请求对应的业务逻辑时,需要考虑线程安全问题。(比如对成员变量的修改)

但是,我们在项目中依赖注入用到的service类或者mapper类是不可改变的,是线程安全。

要想变成线程安全可以使用@Scope修改singletonprototype

什么是aop?

aop是将与业务无关的那些系统服务分离开来,系统服务做一个增强,业务逻辑只关注业务,降低耦合

AOP的底层实现?

常见的AOP底层实现原理包括基于JDK动态代理和基于CGLIB的动态代理。
JDK动态代理是通过反射机制实现的,它可以在运行时动态创建接口的代理对象。
而CGLIB动态代理则是通过继承目标类来实现代理,它可以代理非接口类型的类。

项目中有没有使用?

在项目中事务管理,记录操作日志(aop+自定义注解),缓存,安全性控制,都用到。

spring中的事务如何实现?

在spring中有两种事务,一种是编程式事务,通过用代码进行事务控制,对业务有侵入性

一种式声明式事务,通过加@Transactional注解进行事务控制,其本质就是通过aop的环绕通知,对方法前后进行拦截,在方法前开启事务,在执行完目标方法之后,根据情况进行提交事务或者回滚事务。

spring事务的隔离级别?

四种:
1.读未提交
2.读已提交
3.重复读(默认)
4.序列化

事务的传播机制?

有7种:
1.如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务;(默认)
2.如果当前存在事务,则加入该事务,没有则以非事务方式执行;
3.如果当前存在事务,则加入该事务,没有则抛出异常;
4.创建一个新的事务,暂停当前事务;
5.以非事务方式执行,暂停当前事务;
6.以非事务方式执行,如果当前存在事务抛出异常;
7.如果当前存在事务,则在当前事务嵌套事务中执行;

运行时异常事务会回滚

spring事务失效的场景有哪些?

1.异常捕获处理,自己处理了异常没有抛出,解决方法,手动抛出。

2.检查异常,解决方法,@Transactional上配置rollbackFor属性为Exception。

  • 检查型异常(Checked Exception)

所谓检查(Checked)是指编译器要检查这类异常,检查的目的一方面是因为该类异常的发生难以避免,另一方面就是让开发者去解决掉这类异常,所以称为必须处理(try …catch)的异常。如果不处理这类异常,集成开发环境中的编译器一般会给出错误提示。

常见的检查性异常:输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)等

例如:一个读取文件的方法代码逻辑没有错误,但程序运行时可能会因为文件找不到而抛出FileNotFoundException,如果不处理这些异常,程序将来肯定会出错。所以编译器会提示你要去捕获并处理这种可能发生的异常,不处理就不能通过编译。

  • 非检查型异常(Unchecked Exception)

所谓非检查(Unchecked)是指编译器不会检查这类异常,不检查的则开发者在代码的编辑编译阶段就不是必须处理,这类异常一般可以避免,因此无需处理(try …catch)。如果不处理这类异常,集成开发环境中的编译器也不会给出错误提示。

常见的运行时异常:空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等;

例如:你的程序逻辑本身有问题,比如数组越界、访问null对象,这种错误你自己是可以避免的。编译器不会强制你检查这种异常。

3.非public修饰的方法导致,解决方法,加上public。

spring的bean的生命周期?

在这里插入图片描述

一简:

1.实例化,在这个阶段通过调用构造函数或者工厂方法来实例化对象。

2.属性注入,将配置文件或者注解设置的值注入到bean对象中。

3.初始化,Spring会调用Bean的初始化方法(如果有定义的话)。可以使用@PostConstruct注解或实现InitializingBean接口来定义初始化方法。

4。销毁,当应用程序或者容器关闭时,spring会调用销毁方法。

二详:

首先会通过一个非常重要的类,叫做BeanDefinition获取bean的定义信息,这里面就封装了bean的所有信息,比如,类的全路径,是否是延迟加载,是否是单例等等这些信息。

在创建bean的时候,第一步是调用构造函数实例化bean。

第二步是bean的依赖注入,比如一些set方法注入,像平时开发用的@Autowire都是这一步完成。

第三步是处理Aware接口,如果某一个bean实现了Aware接口就会重写方法执行。

第四步是bean的后置处理器BeanPostProcessor,这个是前置处理器。

第五步是初始化方法,比如实现了接口InitializingBean或者自定义了方法init-method标签或@PostContruct。

第六步是执行了bean的后置处理器BeanPostProcessor,主要是对bean进行增强,有可能在这里产生代理对象。

最后一步是销毁bean。

什么是spring的循环依赖?

循环依赖是指两个或者两个以上的bean相互持有对方,最终形成闭环。

spring框架根据3级缓存已经解决大部分的循环依赖。
在这里插入图片描述
在这里插入图片描述

二级缓存可以解决一般对象的循环依赖,如果是代理对象的话就需要3级缓存。

在这里插入图片描述

3级缓存的对象工厂会生成一个代理对象或者普通对象来注入。
在这里插入图片描述

如果是构造方法注入则需要手动解决,spring的3级缓存只能解决初始化阶段的循环依赖,
在这里插入图片描述

springMVC执行的流程?

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第 10 章 网络安全 产生的原因: (1)电磁辐射与搭线窃听 (2)盗用 (3)偷窃 (4)硬件故障 (5)超负荷 (6)火灾及自然灾害 2. 系统安全 系统安全是指主机操作系统本身的安全,如系统中用户账号和口令设置、文件和目录存取权限设置、系统安全管理设置、服务程序使用管理等。 网络安全("网络"文档)共70张全文共70页,当前为第1页。 第 10 章 网络安全 (1)系统本身安全性不足 (2)未授权的存取 (3)越权使用 (4)保证文件系统的完整性 3. 信息安全 信息安全是指保障信息不会被非法阅读、修改和泄露。主要包括软件安全和数据安全。对信息安全的威胁:信息泄漏和信息破坏。 信息泄漏指由于偶然或人为因素将一些重要信息为别人所获,造成信息泄密。信息破坏则可能由于偶然事故和人为因素故意破坏信息的正确性、完整性和可用性 网络安全("网络"文档)共70张全文共70页,当前为第2页。 第 10 章 网络安全 10.1.2 网络安全的概念 计算机网络安全是指网络系统中用户共享的软、硬件等各种资源的安全,防止各种资源不受到有意和无意的各种破坏,不被非法侵用等。 10.1.3 网络安全面临的主要威胁 计算机网络系统的安全威胁来自多方面,可以分为被动攻击和主动攻击两类。 被动攻击:不修改信息内容,如偷听、监视、非法查询、非法调用信息等; 主动攻击:破坏数据的完整性,删除、冒充合法数据或制造假的数据进行欺骗,甚至干扰整个系统的正常运行。 一般认为,黑客攻击、计算机病毒和拒绝服务攻击三个方面是计算机网络系统受到的主要威胁。 网络安全("网络"文档)共70张全文共70页,当前为第3页。 第 10 章 网络安全 1. 黑客攻击 是指黑客非法进入网络并非法使用网络资源。例如:通过网络监听获取网络用户的账号和密码;非法获取网络传输的数据;通过隐蔽通道进行非法活动;采用匿名用户访问进行攻击;突破防火墙等。 (1)非授权访问 攻击者或非法用户通过避开系统访问控制系统,对网络设备及资源进行非正常使用,获取保密信息。 1)假冒用户 2)假冒主机 IP盗用 IP诈骗 (2)对信息完整性的攻击 网络安全("网络"文档)共70张全文共70页,当前为第4页。 第 10 章 网络安全 攻击者通过改变网络中信息的流向或次序,修改或重发甚至删除某些重要信息,使被攻击者受骗,出对攻击者有意的响应,或恶意增添大量无用的信息,干扰合法用户的正常使用。 2. 计算机病毒 计算机病毒是一种能将自己复制到别的程序中的程序,它会影响计算机的能力,使计算机不能正常工作。计算机病毒侵入网络,对网络资源进行破坏,使网络不能正常工作,甚至造成整个网络的瘫痪。 3. 拒绝服务攻击 通过对网上的服务实体进行连续干扰,或使其忙于执行非服务性操作,短时间内大量消耗内存、CPU或硬盘资源,使系统繁忙以致瘫痪,无法为正常用户提供服务,称为拒绝服务攻击。有时,入侵者会从不同的地点联合发动攻击,造成服务器拒绝正常服务,这样的攻击称为分布式拒绝服务攻击。 网络安全("网络"文档)共70张全文共70页,当前为第5页。 第 10 章 网络安全 10.1.4 网络系统的安全漏洞 互联网实现资源共享的背后,有很多技术上的漏洞。许多提供使用灵活性的应用软件变成了入侵者的工具。一些网络登录服务,如Telnet,在向用户提供了很大的使用自由和权限的同时,也带来很大的安全问题,为此,需要有复杂的认证方式和防火墙以限制其权限和范围。网络文件系统NFS、文件传输协议FTP等简单灵活的应用也因信息安全问题而在使用时受到限制。网络上明文传输的方便性,同时也为窃听提供了方便。 网络系统的安全漏洞大致可以分为3个方面: 1. 网络漏洞 包括网络传输时对协议的信任以及网络传输的漏洞,比如IP欺骗和信息腐蚀(篡改网络上传播的信息)就是利用网络传输时对IP和DNS的信任。 网络安全("网络"文档)共70张全文共70页,当前为第6页。 第 10 章 网络安全 嗅包器(sniff)是长期驻留在网络上的一种程序,利用网络信息明文传送的弱点,可以监视记录各种信息包。由于TCP/IP对所传送的信息不进行数据加密,黑客只要在用户的IP包经过的一条路径上安装嗅包器程序就可以窃取用户的口令。 2. 服务器漏洞 服务进程bug(错误)和配置错误,这些漏洞常被用来获取对系统的访问权,任何对外提供服务的主机都有可能被攻击。 在校园网中存在着许多虚弱的口令,长期使用而不更改,甚至有些系统没有口令,这对网络系统安全产生了严重的威胁。 其他漏洞:访问权限不严格;网络主机之间、甚至超级管理员之间存在着过度的信任;防火墙本身技术的漏洞等。 网络安全("网络"文档)共70张全文共70页,当前为第7页。 第 10 章 网络安全 3. 操作系统漏洞 操作系统可能存在安全漏洞,

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值