当前位置:网站首页>大厂面试总结大全
大厂面试总结大全
2022-07-02 13:21:00 【[email protected]】
1、springIOC的流程以及bean的生命周期以及注入bean的几种方式
1、首先,通过BeanDefinitionReader 读取指定的配置文件生成bean的定义信息,然后到完整的bean定义信息(BeanDefinition对象),注意这里只是存储bean的定义信息,还没有实例化bean对象;就像工厂里面一样,原材料已经准备好了,但是还没有进行生产,原材料就是beanDefinition,生产就是实例化。
2、在 BeanDefinition 和 完整BeanDefinition 中间通过一个后置增强器,可以对bean的定义信息进行统一修改,只需要实现 BeanFactoryPostProcessor 接口即可,这个后置增强器是可以有多个的,你只要在不同的类实现多个 BeanFactoryPostProcessor 接口就会执行多次。
3、得到完整BeanDefinition之后就可以进行创建对象了,这整个过程被称为 bean 的生命周期,也就是从实例化到销毁的过程;
4、初始化又要经历三步:实例化,属性赋值,初始化。
2、Spring如何解决循环依赖问题
说白了就是利用了三级缓存来实现的。
循环依赖
3、hashSet的实现原理
HashSet是基于HashMap实现的,是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素(但最多只能有一个值为null)。HashSet中不允许由重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个固定对象private static final PRESENT = new Object();
HashSet中add()方法调用的是底层HashMap中的put()方法,而如果是在HashMap中调用put()方法,首先会判断key是否存在,如果key存在则修改value的值,如果key不存在则插入这个key-value键值对。而在HashSet中,因为value值没有用,也就不存在修改value值的说法,因此往HashSet中添加元素,首先判断元素(也就是key是否存在),如果不存在则插入,如果存在则不插入,这样HashSet中就不存在重复元素。
而判断key是否存在就要重写元素的类的equals()方法和hashCode()方法,当向HashSet中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,此哈希值决定了此对象在HashSet中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对象所在类的equals()方法比较两个对象是否相同,相同则不能被添加。
4、http请求到controller方法之间的过程
拿到地址进行域名解析,找到服务器,然后servlet收到请求,找映射器,再找适配器,然后找到handler执行对应的controller。
参考链接
5、mysql加索引的方式
1.添加primary key(主键索引)
alter table 表名 add primary key(列名);
2.添加unique(唯一索引)
alter table 表名 add unique(列名);
3.添加index(普通索引)
alter table 表名 add index 索引名(index_name) (列名);
4.添加fulltext(全文索引)
alter table 表名 add fulltext (列名);
5.添加多列索引
alter table 表名 add index 索引名(index_name) (列名1,列名2…);
6、线程池的使用流程以及参数以及状态
工作流程:
1、线程在有任务的时候会创建核心的线程数corePoolSize
2、当线程满了(有任务但是线程被使用完)不会立即扩容,而是放到阻塞队列中,当阻塞队列满了之后才会继续创建线程。
3、如果队列满了,线程数达到最大线程数则会执行拒绝策略。
4、当线程数大于核心线程数事,超过KeepAliveTime(闲置时间),线程会被回收,最终会保持corePoolSize个线程。
这 7 个参数分别是:
corePoolSize:核心线程数。
maximumPoolSize:最大线程数。
keepAliveTime:空闲线程存活时间。
TimeUnit:时间单位。
BlockingQueue:线程池任务队列。
ThreadFactory:创建线程的工厂。
RejectedExecutionHandler:拒绝策略。
线程有 6 种状态:
NEW:初始化状态、
RUNNABLE:可运行/运行状态、
BLOCKED:阻塞状态、
WAITING:无时限等待状态、
TIMED_WAITING:有时限等待状态
TERMINATED:终止状态。
线程池的状态有以下 5 种:
RUNNING:运行状态,线程池创建好之后就会进入此状态,如果不手动调用关闭方法,那么线程池在整个程序运行期间都是此状态。
SHUTDOWN:关闭状态,不再接受新任务提交,但是会将已保存在任务队列中的任务处理完。
STOP:停止状态,不再接受新任务提交,并且会中断当前正在执行的任务、放弃任务队列中已有的任务。
TIDYING:整理状态,所有的任务都执行完毕后(也包括任务队列中的任务执行完),当前线程池中的活动线程数降为 0
时的状态。到此状态之后,会调用线程池的 terminated() 方法。 TERMINATED:销毁状态,当执行完线程池的
terminated() 方法之后就会变为此状态。
7、mybatisPlus实现分页操作流程
1、.写个Mybatis-plus配置类,就可以直接使用
2、使用Page对象来对数据进行封装
8、MyBatis如何获取新插入数据主键
9、quartz和springTask定时任务的区别
1、相同点: 两者均能实现定时调度任务
2、Quartz
① 默认多线程异步执行
② 单个任务时,在上一个调度未完成时,下一个调度时间到时,会另起一个线程开始新的调度。业务繁忙时,一个任务会有多个调度,可能导致数据处理异常。
③ 多个任务时,任务之间没有直接影响,多任务执行的快慢取决于CPU的性能
④ 触发方式 : (1)SimpleTrigger (2)CronTrigger
⑥ 能被集群实例化,支持分布式部署
⑦使用JobStoreCMT(JDBCJobStore的子类),Quartz 能参与JTA事务;Quartz 能管理JTA事务(开始和提交)在执行任务之间,这样,任务做的事就可以发生在JTA事务里。
3、Task:
① 默认单线程同步执行
② 单个任务时,当前次的调度完成后,再执行下一次任务调度
③ 多个任务时,一个任务执行完成后才会执行下一个任务。若需要任务能够并发执行,需手动设置线程
④ 触发方式:
与Quartz的CronTrigger的表达式类似
可以使用注解标注定时任务
10、sql的三范式
第一范式(1NF)
(必须有主键,列不可分)
数据库表中的任何字段都是单一属性的,不可再分
第二范式(2NF)
数据库表中非关键字段对任一候选关键字段的 都 不存在部分函数依赖
(当一个表是复合主键时,非主键的字段不依赖于部分主键(即必须依赖于全部的主键字段))
第三范式(3NF)
关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖
Likes:即所有的非主键属性都依赖于主键属性,不能依赖于非主键属性,如果依赖则应该拆分表,是被依赖的非主键属性作为此表的外键,新表的主键。
11、fegin负载均衡的策略
- com.netflix.loadbalancer.RandomRule #配置规则 随机,几个提供者间随机访问
- com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询,轮流访问
- com.netflix.loadbalancer.RetryRule #配置规则 重试,在一段时间内通过RoundRobinRule选择服务实例,一段时间内没有选择出服务则线程终止
-com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重,根据平均响应时间来计算权重 - com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
12、mybatis的核心组件
1)SqlSessionFactoryBuilder (构造器):它会根据配置或者代码来生成SqlSessionFactory,才用的时分步构建的Builder模式。(建造者模式)
2)SqlSessionFactory(工厂接口):依靠它来生成SqlSession,使用的是(工厂模式)。
3)SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用Mybatis提供的SQL Mapper接口编程技术,它能提高代码的可读性和可维护性。
4)SQL Mapper(映射器):Mybatis新设计存在的组件,他有一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
13、mybatis的拦截器以及springMvc的拦截器
Springmvc中拦截器与过滤器的区别:
1.过滤器是servlet中的对象,拦截器是框架中的对象
2.过滤器实现Filter接口对象,拦截器是实现HandleInterceptor
3.过滤器是用来设置request,response参数、属性,侧重对数据的过滤;拦截器是用来验证请求的,能截断请求。
4.过滤器是在拦截器之前执行的
5.过滤器是tomcat服务器创建的对象,拦截器是springmvc容器创建的对象
6.过滤器是一个执行时间点;拦截器是三个执行时间点
7.过滤器可以处理jsp、js、html等;拦截器是侧重拦截Controller的对象,如果你的请求不能被DispatcherServlet接收,这个请求不会执行拦截器的内容
8.拦截器拦截普通类方法执行,过滤器过滤servlet请求响应
14、Redis缓存穿透和雪崩
15、网络7层模型
1、物理层
建立、维护、断开物理连接(网卡、网线、光纤、集线器、中继器调制解调器等)
2、数据链路层
局域网,MAC地址标识物理设备位置有唯一性(相当于电脑的身份证,每个PC有且只有一个MAC地址)
3、网络层
在不同网络时,路径的选择,IP地址(相当于电脑所在地方的住址,随着地区变化也有变化)
4、传输层
TCP/UDP等协议及协议端口号的传输,效验
TCP通常是访问网站等特点是安全、稳定。
UDP是QQ这一类的特点是速度快。
5、会话层 (session,cookie)
建立会话,连接关系,建立连接到断开,会话层的控制
6、表示层
人类语言与计算机语言(二进制)的转换、翻译。
7、应用层 (http是应用层, telnet是应用层,webSocket是应用层,socket也是应用层且基于http协议)
用户所使用的的操作界面比如访问百度网站
版权声明
本文为[[email protected]微胖子]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zouyang920/article/details/125489196
边栏推荐
- LeetCode 5. 最长回文子串
- Maui learning road (III) -- in depth discussion of winui3
- 2022 the latest and most detailed will successfully set the background image in vscade and solve unsupported problems at the same time
- Route service grid traffic through two-level gateway design
- PCL 点云镜像变换
- Analyzing more than 7million R & D needs, it is found that these eight programming languages are the most needed in the industry!
- Rock PI Development Notes (II): start with rock PI 4B plus (based on Ruixing micro rk3399) board and make system operation
- Source code look me
- Take you ten days to easily complete the go micro service series (I)
- 原神2.6服务端下载以及搭建安装教程
猜你喜欢
通过两级网关设计来路由服务网格流量
Storage, reading and writing of blood relationship data of Nepal Graph & Data Warehouse
Summary of monthly report | list of major events of moonbeam in June
Today in history: Alipay launched barcode payment; The father of time-sharing system was born; The first TV advertisement in the world
Where can I open computer administrator permissions
忆当年高考|成为程序员的你,后悔了吗?
unity Hub 登录框变得很窄 无法登录
外企高管、连续创业者、瑜伽和滑雪高手,持续迭代重构的程序人生
Analyzing more than 7million R & D needs, it is found that these eight programming languages are the most needed in the industry!
Practice of traffic recording and playback in vivo
随机推荐
Aike AI frontier promotion (2.15)
Write your own CPU Chapter 11 - learning notes
Everyone Xinfu builds: a one-stop intelligent business credit service platform
Win11应用商店无法加载页面怎么办?Win11商店无法加载页面
Memory alignment of structure
Aujourd'hui dans l'histoire: Alipay lance le paiement par code à barres; La naissance du père du système de partage du temps; La première publicité télévisée au monde...
请问怎么在oracle视图中使用stustr函数
Yyds dry inventory uses thread safe two-way linked list to realize simple LRU cache simulation
Yyds dry goods inventory has not revealed the artifact? Valentine's Day is coming. Please send her a special gift~
[fluent] dart data type boolean type (boolean type definition | logical operation)
sim2real环境配置教程
Mathematical analysis_ Notes_ Chapter 5: univariate differential calculus
OSPF - detailed explanation of NSSA area and full NSSA area (including configuration command), LSA type 7 lsa-7
Seal Library - installation and introduction
触发器:Mysql实现一张表添加或删除一条数据,另一张表同时添加
Which software is good for machine vision?
Understand the key technology of AGV -- the difference between laser slam and visual slam
潘多拉 IOT 开发板学习(RT-Thread)—— 实验2 RGB LED 实验(学习笔记)
Sim2real environment configuration tutorial
JS learning notes - data types