常见八股文04
63.索引的优缺点
优点
1.提高了查询性能
2.支持唯一性约束,避免插入重复数据
3.支持唯一性约束:在多表连接时,索引能够减少连接所需的时间和资源
缺点
1.占用额外存储空间:特别是在大型数据表中,索引可能会占用大量的空间
2.维护成本高:索引需要定期维护,包括创建、更新和删除索引等操作。这些操作可能会增加数据库的负担和维护成本
3.不适用于所有查询:查询的数据量较小或查询条件不满足索引的优化条件时,可能会因为索引的存在而变得更慢。
64.redis理解
1.首先,Redis是一个开源的高性能键值对数据库,里面提供了多种语言的API。
2.其次,redis有四大特性,高性能、数据结构丰富(Spring、List、Set、Hash)、持久化(快照和追加文件)、主从复制(实现数据备份和读写分离)。
3.最后应用场景 缓存、会话存储、消息队列、排行榜等等。
65.接口优化
1.批量操作 处理大量操作,采用操作可以提升性能
2.异步处理 将耗时和无必须的逻辑放到异步任务中执行,降低接口的响应时间
3.使用缓冲 将频繁访问或者说访问不频繁的场景,将数据还存起来,减少对数据库的依赖
4.并行执行 当多个独立的任务之间没有依赖关系,可以优先考虑并行执行
5.优化索引 合理地创建索引可以显著提高数据查询的效率,加速接口的响应。
6.SQL优化 合理地设计索引、优化查询条件、避免全表扫描等方式,可以显著提高SQL查询的效率。
66.JVM内存有几个区,作用分别是什么?
方法区:储存已经被虚拟机加载的类信息、常量、静态变量、编译后的代码
虚拟机栈:用于存储方法执行时的局部变量、操作数栈、动态链接、方法出口等信息
本地方法栈:用于储存本地方法的执行信息,但是它的线程的私有的
堆:用于动态分配内存 存放对象实例和数组
程序计数器:用于存储当前线程正在执行的字节码指令的地址
67.heap(堆) 和stack(栈) 的区别
从数据结构上,堆的数据结构是二叉树,栈的数据结构是线性数据结构
从存储方式上,堆通常位于二级缓存,其空间是程序员手动分配和释放,常使用关键字来分配堆内存;栈通常位于一级缓存,其空间由操作系统自动分配和释放,内存按照后进先出的原则进行管理
从应用场景上,堆主要用于存储动态分配内存 存放对象实例和数组;栈主要用于存储方法执行时的局部变量、操作数栈、动态链接、方法出口等信息
从空间上,堆区空间大,栈去空间有限
从访问速度上,堆区比栈区慢
68.MySQL不直接存储图片、音频、视频等大容量内容
1.性能问题
查询速度下降:大文件会增加数据库的I/O操作,导致查询速度变慢。
备份和恢复困难:包含大量大文件的数据库备份和恢复时间会显著增加。
2.存储成本高
数据库大小增加:大文件会迅速增加数据库的大小,导致存储成本上升。
扩展性差:随着数据量的增长,数据库的扩展变得更加复杂和昂贵。
3.管理复杂
备份和恢复:大文件的存在使得数据库的备份和恢复更加复杂和耗时。
迁移困难:数据库迁移时,大文件会显著增加迁移的时间和复杂度。
4.数据一致性问题
事务管理:大文件的插入和更新操作可能会导致事务管理变得更加复杂,容易出现数据不一致的问题。
69.数据库字段约束条件
NOT NULL:字段不能包含空值。
UNIQUE:字段中的每个值都必须是唯一的。
PRIMARY KEY:字段的值必须是唯一的,并且不能为空,通常用于标识表中的每一行。
DEFAULT:为字段指定一个默认值,如果在插入数据时未提供该字段的值,则使用默认值。
自动递增(AUTO_INCREMENT)
70.数据库设计规范
**1.**表存储引擎必须使用InnoD,表的字符集默认使用utf8
**2.**禁止在数据库中存储大文件
3.库名,表名,列名必须见名知义和小写,采用下划线分隔
4.表必须有主键
5.必须把字段定义为NOT NULL并设默认值
6.单张表索引数量建议控制在5个以内
71.SQL 的select 语句完整的执行顺序
from、where、group by、聚合函数、having、select字段、order by。
72.乐观锁和悲观锁区别
从实现机制上,乐观锁是通过版本号机制实现,读取数据时,先获取版本号,数据更新时,检查版本号和之前读取的数据是否一样;悲观锁是通过加锁实现的,一旦线程获得锁,其他想获取锁的线程也会被阻塞,知道锁被释放。
从使用场景上,乐观锁适用于读多写少的场景,冲突发生的概率低;悲观锁适用于高并发,竞争激烈的场景,冲突发生的概率高
从性能上,乐观锁在开发冲突少场景下,性能好,但是冲突多场景下,性能低;悲观锁会导致系统吞吐量降低,容易产生死锁,性能也会收到影响
从代码实现和维护上,乐观锁开发人员手动维护,不加锁,避免死锁问题;悲观锁都是系统和框架提供的。
73.遇到异常,怎么解决
(1)首先,我会立即查看异常信息,包括异常信息。错误代码等等。
(2)其次,查看日志文件,分析日志前后的异常信息和使用调试工具(IDE工具)。
(3)接着,开始对调试和修复的代码进行测试,确保异常成功解决。
(4)最后,总结异常和预防异常,避免下次出现。
74.git常见命令
git命令
git init 初始化一个新的Git仓库。
git clone <仓库URL> 克隆一个远程仓库到本地。
git add <文件> 添加指定文件到暂存区。
git commit -m "提交说明" 提交暂存区文件到本地仓库。
git status 查看当前分支的状态。
git log 查看提交历史记录。
git checkout <分支名> 切换到指定分支。
git branch <新分支名> 创建新的分支。
git merge <指定分支名> 合并指定分支到当前分支。
git push <远程仓库名> <本地分支名> 推送本地分支到远程仓库。
75.redis持久化方式
RDB持久化(默认支持,无需配置)
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
AOF持久化
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
无持久化
我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了。
76.redis集群搭建方式
主从复制
1.配置主节点,通常不需要额外配置。
2.配置从节点,在从节点的配置文件中指定主节点的IP和端口。
3.如果主节点设置了密码,从节点还需要配置masterauth以进行身份验证。
哨兵模式
1.配置主从节点,与主从复制模式相同。
2.配置哨兵节点,创建sentinel.conf文件,并添加监控的主节点信息)。
3.如果主节点设置了密码,还需要在哨兵配置中添加sentinel auth-pass配置项。
4.启动哨兵服务。
77.redis应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)
聊天室的在线好友列表
任务队列。(秒杀、抢购、12306等等)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒)
分布式集群架构中的session分离
78.int和integer区别
相同点:二者都可以存整数类型
不同点:
从拆箱和装箱方面:所谓拆箱就是Inreger类型自动转换成int类型,装箱就是int类型自动转换Integer类型.
从方法方面:拆箱调用Invalue方法,装箱调用valueOf方法。
从默认值方面:Integer的默认值是null,int的默认值是0。
79.TreeSet和HashSet区别
相同点:都是Set接口的实现类
不同点:
从底层数据结构方面:HashSet是基于哈希表实现的TreeSet是基于红黑树实现的
从元素顺序方面:HashSet中元素没有按顺序排列,TreeSet中元素是按顺序排列的
从空元素方面:HashSet可以存null元素,TreeSet不可以存储null元素
80.Java序列化及实现
Java序列化是将对象写入文件
首先先实现序列化的类实现接口,不实现粗类就无法实例化
其次固定串行化的版本号,要靠对象流ObjectOutputStream
81. Object中有哪些方法
Clone、toString、equal、hashCode、getclass、notify、notifyAll等等还有一些我们不常用的方法
82.线程池及使用
线程池,事先将多个线程对象放到一个容器中,使用时不用new线程而是直接从容器中去拿线程。
83.final作用
Final是最后的意思
Final可以修饰变量、方法、类。
修饰变量,变量变常量;
修饰方法,方法不能被重写;
修饰类,类变最终类,不能被继承。
84.Spring类的常用方法
equals、indexOf、charAt、replace、getBytes、length。
85.抽象类和抽象方法区别
抽象类不一定有抽象方法,但是抽象方法一定有抽象类。
86.普通类和抽象类区别?
二者都可以有构造方法、成员变量
抽象类里可以有抽象方法,普通类里面不可以有抽象方法。
抽象类不能被实例化(不能通过new调用构造方法来创建对象),普通类可以直接实例化
87.抽象类能使用 final 修饰吗?
不能。因为大部分的抽象类都是通过多态进行实例化,使用多态时,必会用到继承,加了final之后不能被继承。
88.接口和抽象类
接口里面不能有实体方法,不能有变量,必须都得是常量;在jdk8以后可以有实体方法,但是必须得有修饰符,比如说,static、default
抽象类可以抽象方法、具体方法。
89.IO流类型
按流向分类:输入流和输出流
常见的输入流有FileInputStream、DataInputStream等。
常见的输出流有:FileOutputStream、DataOutputStream等。
按功能分类:字节流、字符流、缓冲流、转换流。
字节流。常见的字节流有InputStream和OutputStream等。
字符流。常见的字符流有Reader和Writer。
缓冲流。BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
转换流。InputStreamReader、OutputStreamWriter
90.BIO、NIO、AIO 区别?
BIO:会产生阻塞,以字节和字符为单位。
NIO:以块为单位,Channel(通道)、Buffer(缓冲区)、Selector(选择器)。
AIO:核心在于其异步非阻塞的特性,应用于文件I/O等其他领域。
91.Files常用方法
exists()、createFile()、createDirectory()、 copy()、move()、 delete()、read()、 write() 赋值移动删除读写
92.Collection 和 Collections 区别?
Collection 是所有单根集合的父类。他提供了集合对象的接口方法,继承的接口有List与Set。
Collections是集合工具类,其中提供一些静态方法,对集合中元素进行排序和搜索等操作。
93.HashSet 实现原理
基于HashMap实现的。所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存。 HashMap 的 key 的不允许重复,hashmap也不允许重复。
94.创建线程的几种方式
继承Thread类、重写Runnable接口、Callable接口、通过线程池启动多线池。
95. runnable 和 callable 区别?
相同点:二者都是接口
不同点
从返回值角度:Runnable 接口run方法无返回值;Callable接口call方法有返回值,支持泛型
从异常角度:Runnable接口run方法只能抛出运行时异常,且无法捕获处理;Callable 接口call方法允许抛出异常,可以获取异常信息。
96.sleep() 和 wait() 区别?
相同点:二者都可以造成线程堵塞
不同点:sleep可以设置时间,时间已过,线程从阻塞状态变成就绪状态;wait遇到notify唤醒,又变成就绪状态。
97.notify()和 notifyAll()区别?
不同点:notify():唤醒一个线程,notifyAll():唤醒所有线程,但是二者用的是同一个锁对象监视.
98.相同点:都是获取线程的。
不同点:notify():唤醒一个线程,notifyAll():唤醒所有线程,但是二者用的是同一个锁对象监视.
99.线程中 run()和 start()区别?
Run()方法是执行线程任务;start()方法是启动线程。
100.线程池中 submit()和 execute()方法区别?
相同点:二者都是提交线程任务的
不同点:
从参数上:execute可以接收runnable;submit可以接Runnable也可以接受Callable
从返回值: ececute不能获取线程结果,因为它返回的是void;submit可以获取线程结果
101.怎么保证线程安全
- 使用synchronized关键字:防止线程同步。
- 使用原子类:避免数据共享。
- 使用线程池类:线程完成后,线程池类会帮你进行线程回收。
- 使用Volatile关键字:保证了多线程的可见性
- 使用ThreadLocal类:可以在多线程中为每个线程创建一个独立的实例,避免多线程对同一资源的争夺,从而保证了数据安全性。
102.防止死锁
- 按照相同的顺序获取和释放锁;
- 使用非阻塞算法;
- 设定超时时间;
- 使用死锁检测和恢复机制;
- 减少并发;
- 使用死锁检测工具。
103.synchronized 和 volatile 区别
相同点:二者都是关键字,都可以保证线程安全
不同点:
1)volatile比synchronized更轻量级。
2)volatile没有synchronized使用的广泛。
3)volatile不需要加锁,比synchronized更轻量级,不会阻塞线程。
4)从内存可见性角度看,volatile读相当于加锁,volatile写相当于解锁。
5)synchronized既能保证可见性,又能保证原子性,而volatile只能保证可见性,无法保证原子性。
6)volatile本身不保证获取和设置操作的原子性,仅仅保持修改的可见性。但是java的内存模型保证声明为volatile的long和double变量的get和set操作是原子的。
104.synchronized 和 Lock 区别?
相同点:都可以保证线程安全
不同点:
从锁对象:synchronized的锁对象是所有对象,lock锁对象就是本身
从存在形式上:synchronized是关键字,lock是类
从释放角度:synchronized正常释放锁;lock释放锁要放在finally里面
105.synchronized 和 ReentrantLock 区别是?
ReentrantLock是lock的实现类,这个实现类没有synchronized使用广泛,
Synchronized是一个代码块
在释放锁的时候一定得放在finally里面,要不然会造成线程堵塞
106.throw 和 throws 区别
throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
throw 是具体向外抛出异常的动作,)throws 主要是声明这个方法会抛出某种类型的异常
107.工场设计模式
工厂设计模式是一种创建型设计模式,它通过定义一个创建对象的接口,让子类决定实例化哪个类
优点
封装性:将对象创建过程封装到工厂类中
解耦性:降低了客户端代码和具体产品类之间的耦合性,增加了系统的灵活性
缺点
增加类的数量:随着类的增加,需要引入新的工厂类,增加系统的复杂性
客户端复杂性:客户端需要具体的工厂类,增加了客户端的复杂度。
108.b-tree和b+tree区别
数据存储位置:B 树的非叶子节点和叶子节点都存储数据,B+树的非叶子节点只存储索引,叶子节点存储数据和索引。
查询性能:B+树的查询性能更稳定,因为查询总是在叶子节点中完成,而 B 树的查询性能可能受到数据分布的影响。
范围查询:B+树的范围查询效率更高,因为叶子节点形成了有序链表,可以方便地进行范围查询,而 B 树的范围查询需要遍历多个节点。
磁盘 I/O:B+树的磁盘 I/O 次数更少,因为非叶子节点不存储数据,叶子节点的存储更加紧凑,减少了磁盘 I/O 的次数。
数据插入和删除:B+树的插入和删除操作相对简单,因为只涉及到叶子节点,不需要更新非叶子节点,而 B 树的插入和删除操作可能需要调整树的结构,增加了磁盘 I/O 的次数。
109.http常见状态码
200 OK //客户端请求成功
301 Moved Permanently(永久移除),请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置
302 found 重定向链接
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的 URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
110.Cookie 和Session 的区别
(1)存储数据量:session 能够存储任意的java 对象,cookie 只能存储 String 类型的对象。
(2)使用场景:无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。
(3)生命周期:Cookie可以设置过期时间,持久化存储在客户端。如果不设置过期时间,Cookie 会在浏览器关闭时失效。可以手动删除。Session通常在用户关闭浏览器或会话超时时失效。服务器可以设置会话的超时时间。会话数据在服务器端存储,不会随浏览器关闭而丢失。
111.jsp 和Servlet 有什么区别?
创建方式:Servlet 是由 Java 程序代码构成,用于流程控制和事务处理;JSP 由 HTML 代码和 JSP 标签构成,可以方便地编写动态网页。
编译方式:JSP 修改后可以立即看到结果,不需要编译;Servlet 需要编译。
转换方式:JSP 是动态网页开发技术,运行在服务器端的脚本语言;Servlet 是 web 服务器端编程技术,运行时转换为 Java 程序来执行。
侧重面:JSP 侧重于视图,Servlet 主要用于控制逻辑。
112.Servlet生命周期
(1)加载
(2)初始化
(3)处理请求
(4)销毁
113.过滤器作用
(1)请求日志记录:记录每个请求的详细信息,如请求时间、请求URL、请求参数等。
(2)权限检查:在请求到达目标资源之前,检查用户是否有权限访问该资源。
(3)字符编码转换:确保请求和响应的字符编码一致,避免乱码问题。
(4)修改请求头:修改请求或响应的头信息,如添加或删除某些头字段。
(5)安全防护:对请求进行安全检查,如防止SQL注入等。
(6)资源访问控制:限制对某些资源的访问,如文件下载、图片等。
114.拦截器作用
(1)日志记录:记录每个请求的详细信息,如请求时间、请求URL、请求参数等。
(2)权限检查:在请求到达目标资源之前,检查用户是否有权限访问该资源。
(3)数据预处理:在请求到达控制器之前对请求数据进行预处理,如数据校验、格式转换等。
(4)性能监管:监控请求的处理时间,用于性能分析和优化。
(5)事务管理:在请求处理前后管理事务,确保事务的一致性和完整性。
(6)响应处理:在响应返回客户端之前对响应数据进行处理,如数据格式化、压缩等。
115.过滤器和拦截器区别
作用机制:拦截器基于Java的反射机制,而过滤器基于函数回调。
依赖关系:拦截器不依赖Servlet容器,过滤器依赖于Servlet容器。
请求范围:拦截器只能对action请求起作用,过滤器可以对几乎所有的请求起作用。
访问能力:拦截器可以访问action上下文、值栈里的对象,过滤器不能访问。
调用频率:在action的生命周期中,拦截器可以多次被调用,过滤器在容器初始化时只被调用一次。
116。拦截器和过滤器执行顺序
过滤前– 拦截前 – Action处理 – 拦截后 – 过滤后。
过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。
117.重定向和转发区别
行为特性:重定向会改变URL地址,请求转发不会。
访问范围:重定向可以用URL绝对路径访问其他web服务器的资源,请求转发只能在一个web应用程序内进行资源转发。
效率性能:重定向效率低,相当于再一次请求;请求转发跳转仅发生在服务器端,效率较高。
118.Request对象主要方法
setAttribute(String name,Object):设置名字为name的request 的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
getCharacterEncoding() :返回请求中的字符编码方式
getContentLength() :返回请求的 Body的长度
getHeader(String name) :获得HTTP协议定义的文件头信息
getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例
getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例
getInputStream() :返回请求的输入流,用于获得请求中的数据
getMethod() :获得客户端向服务器端传送数据的方法
getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字
119.Tomcat
Tomcat是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器。
120.MVC
基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计。
Model:处理业务逻辑的模块。
View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。
Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。
121.MVC执行流程
- 用户通过视图界面与应用程序进行交互。
- 视图接收用户输入后,将请求发送给控制器。
- 控制器接收请求后,调用相应的模型来处理业务逻辑。
- 模型处理完业务逻辑后,将结果返回给控制器。
- 控制器根据处理结果更新视图,将新的数据或状态展示给用户。
121.MVC优点
- 低耦合:模型、视图和控制器之间的耦合度较低,使得代码更易于维护和扩展。
- 高重用性:模型可以被多个视图共享,视图也可以被多个控制器使用,提高了代码的重用性。
- 生命周期成本低:MVC 模式使开发和维护用户接口的技术含量降低。
- 部署快:MVC 模式使得软件开发时间得到相当大的缩减,它使后台程序员集中精力于业务逻辑,界面(前端)程序员集中精力于表现形式上。
- 可维护性高:分离视图层和业务逻辑层使得 WEB 应用更易于维护和修改。
122.Http组成
请求行(Request Line)
请求头部(Request Headers)
请求体(Request Body)
- 请求行(Request Line):
-
- 请求行是HTTP请求的第一行,包含了请求方法、请求目标和协议版本三个主要部分。
- 请求方法:指示客户端希望服务器执行的动作,如GET、POST、PUT、DELETE等。
- 请求目标:表示客户端希望访问的资源的URL路径。
- 协议版本:指定所使用的HTTP协议版本,例如HTTP/1.1或HTTP/2。
- 请求头部(Request Headers):
-
- 请求头部包含了一系列键值对,用于提供关于请求的附加信息。
- 这些信息可能包括浏览器类型、所请求的资源类型、客户端可接受的响应内容类型、客户端可接受的内容编码、客户端首选的语言种类等。
- 常见的请求头字段有Accept、Accept-Encoding、Accept-Language、Host、User-Agent、Connection、Cookie等。
- 请求体(Request Body):
-
- 请求体是可选的部分,包含了与请求相关的实际数据。
- 请求体通常用于POST、PUT等请求方法中,用于传递表单数据、JSON数据或上传的文件等。
- 在GET请求中,通常没有请求体。
123.Spring依赖注入方式
Setter方法注入
构造方法注入
字段注入
注解注入
124.Spring Bean的生命周期
1. 调用构造器或者通过工厂的方式创建Bean对象
2. 给Bean对象的属性进行赋值
3. 调用初始化方法,进行初始化
4. 使用Bean对象
5. 关闭IOC容器,销毁Bean对象
125.Mybatis 结果集的映射方式有几种
自动映射:通过resultType来指定要映射的类型
自定义映射:通过resultMap来完成具体的映射规则,指定结果集中的那个列映射的到对象的哪个属性
126.MyBatis的单个参数、多个参数如何传递及如何取值
MyBatis传递单个参数。
普通类型:取值的时候在#{}中可以任意指定
对象类型:取值的时候在#{}中使用对象的属性名
MyBatis传递多个参数。
MyBatis会对多个参数进行封装Map里,取值的时候在#{}可以使用0,1,2....或者param1,param2...
127.Mybatis动态SQL,列出常用的6个标签及作用
动态SQL是MyBatis的强大特性之一 基于功能强大的OGNL表达式。动态SQL主要是来解决查询条件不确定的情况,在程序运行期间,根据提交的条件动态的完成查询。
常用注解
<if>条件判断
<where> 判断是否有内容
<trim>在SQL语句前后增加或者去掉指定字符
<set>用于修改操作时出现逗号的问题
<choose> <when> <otherwise>根据一个条件或者多个条件来选择性执行不同的SQL片段。
<foreach>:迭代操作
128.Spring 中bean的作用域
Singleton 单例的
Prototype 原型的
Request
Session
129.REST中四种请求方式
GET 查询操作
POST 添加操作
DELETE 删除操作
PUT 修改操作
130.Spring理解
Spring是分层的轻量级开源框架。
Spring的两大核心 IOC 和AOP
IOC是控制反转,以前我们想获取对象,直接new就可以;现在获取对象,直接和Spring要,目的是为了解耦
AOP是面向切面编程,我们将一个个对象某些相似的方面横向抽成一个切面,对切面进行一些权限控制。事务管理,记录日志等操作。
AOP底层为动态代理,接口采用JDK动态代理,类采用CGLIB动态代理
相关文章:
常见八股文04
63.索引的优缺点 优点 1.提高了查询性能 2.支持唯一性约束,避免插入重复数据 3.支持唯一性约束:在多表连接时,索引能够减少连接所需的时间和资源 缺点 1.占用额外存储空间:特别是在大型数据表中,索引可能会占用大量的空间 …...
php各个版本的特性以及绕过方式
一.php各个版本的特性 二.绕过正则匹配的常见方式 1.绕过空格 a.空变量$ l$s b.环境变量IFS(默认情况下IFS为空格、制表符和换行符) l${IFS}s c.重定向符(<,>) cat < file.txt //把file.txt的内容给cat命令&…...
允许某段网络访问Linux服务器上的MariaDB
在Linux服务器上安装了MariaDB,默认情况下,只允许本机访问。在某些特殊的情况下,要允许外部访问。具体操作流程如下: 1 修改服务器配置 vi /etc/my.cnf.d/server.cnf取消下面的注释,以便允许外来的主机访问。 bind-…...
【C语言】信号
【C语言】信号 信号1. 信号状态2. 信号处理方式3. 信号注册相关函数4. 信号集相关函数 信号 1. 信号状态 信号有三种状态:产生、未决和递达 信号产生方式: 按键产生,ctrlc 产生 中断信号SIGINT,ctrl \ 产生退出信号 SIGQUIT并…...
2023年下半年软考信息安全工程师案例分析及答案解析
试题一(16分) 回答问题1至问题6,将解答填入答题纸对应的解答栏内。 问题1(4分) 已知DES算法S盒如下,请补全S盒空缺的数据(1)、(2)、(3)、(4)。 【参考答案】3、13、15、0 问题2(2分) 已知S盒的输入为110011,请计算经过S盒变换之后的二进制输出。 【参考…...
攻防世界easyphp
<?php highlight_file(__FILE__); $key1 0; $key2 0;$a $_GET[a]; $b $_GET[b];if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){if(isset($b) && 8b184b substr(md5($b),-6,6)){$key1 1;}else{die("Emmm...再想想&quo…...
【WRF教程第3.6期】预处理系统 WPS 详解:以4.5版本为例
预处理系统 WPS 详解:以4.5版本为例 Geogrid/Metgrid 插值选项详解1. 插值方法的工作机制2. 插值方法的详细说明2.1 四点双线性插值(four_pt)2.2 十六点重叠抛物线插值(sixteen_pt)2.3 简单四点平均插值(av…...
图解HTTP-HTTP协议
HTTP HTTP是一种不保存状态,即无状态的协议。HTTP协议自身不对请求和响应之间的通信进行保存。为了保存状态因此后面也有一些技术产生比如Cookies技术。 HTTP是通过URI定位网上的资源,理论上将URI可以访问互联网上的任意资源。 如果不是访问特定的资源…...
Linux基本命令
Linux基本命令 一条Linux命令由:命令本身 [可选项] [参数] ls 展示 ls命令的选项: -a 选项,可以展示出隐藏的内容 以 . 开头的文件或文件夹默认被隐藏,需要-a才能显示出来 **-l **选项,以列表的形式展示内容,并展示更多细节-h 选项&…...
【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
一、RAGFlow简介 RAGFlow是一个基于对文档深入理解的开源RAG(Retrieval-augmented Generation,检索增强生成)引擎。 主要作用: 让用户创建自有知识库,根据设定的参数对知识库中的文件进行切块处理,用户向大…...
.ejs 后缀文件 - 嵌入式JavaScript模板
嵌入式JavaScript模板(Embedded JavaScript templates)文件是以.ejs 后缀。它是一种模板引擎,它允许你在你的HTML文件中直接嵌入JavaScript代码。EJS模板可以包含HTML代码、JavaScript表达式、控制结构(如if语句和循环)…...
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装学生成绩分析和弱项辅助系统软件来发挥其高效地信息处理的作…...
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
文章目录 一、as类型转化和is类型检查1、as 关键字使用场景:语法:示例:特点: 2、is 关键字使用场景:语法:示例:特点: 3、总结 二、向上转型和向下转型1、向上转型示例: 2…...
“魔法糖果盒的秘密:用朴素贝叶斯算法猜糖果颜色”
想象一下,你有一个神奇的糖果盒,这个糖果盒里有两种糖果:红色的和蓝色的。你闭上眼睛,从盒子里拿出一个糖果,然后尝一尝,你想知道这个糖果是红色的还是蓝色的。朴素贝叶斯算法就像是一个魔法规则࿰…...
使用“NodeMCU”、“红外模块”实现空调控制
项目思路 空调遥控器之所以能够实现对空调的控制,是因为它能够向空调发射出特定的红外信号。从理论上来说,任何能够发射出这种相同红外信号的红外发射器,都可以充当空调遥控器(这也正是手机能够控制多种不同品牌空调的原因所在&a…...
了解cuda的统一内存
1. CUDA 6中的统一内存 在CUDA 6中,从Kepler GPU架构(计算能力3.0或更高)开始,在64位Windows 7、8和Linux操作系统(内核2.6.18)上开始支持统一内存. 从CUDA 6开始,NVIDIA推出了CUDA平台历史上…...
MySQL索引
2.1 索引概述 2.1.1 介绍 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就…...
会话控制(cookie、session 和 token)
1. 介绍 所谓会话控制就是 对会话进行控制HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户,而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题。 常见的会话控制…...
stm32 rtc 详解
目录 L151 RTC 唤醒代码 方式一 通过 RTC Alarm Interrupt:(基本和F1系列一样): L151 RTC 唤醒代码 方式二 通过 RTC WakeUp Interrupt F103VE RTC 闹钟唤醒代码 (103RC 没有闹钟中断): RTC(real time…...
D 咖智能饮品机器人:开启商业新篇
在科技迅猛发展的当下,智能机器人正逐步渗透到各个商业领域,D 咖智能饮品机器人便是其中的佼佼者,它的出现为饮品行业带来全新的发展契机,有望开启商业新篇。 从大环境来看,消费者对于饮品的需求日益多元化和个性化。他…...
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
以下代码来自Let’s Go further节选。具体说明均为作者本人理解。 编辑邮件模版 主要包含三个template: subject:主题plainBody: 纯文本正文htmlBody:超文本语言正文 {{define "subject"}}Welcome to Greenlight!{{end}} {{def…...
重拾设计模式--模板方法模式
文章目录 一、模板方法模式概述二、模板方法模式UML图三、优点1代码复用性高2可维护性好3扩展性强 四、缺点五、使用场景六、C 代码示例1七、 C 代码示例2 一、模板方法模式概述 定义:定义一个操作中的算法骨架,而降一些步骤延迟到子类中。模板方法使得…...
二、windows环境下vscode使用wsl教程
本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode,按快捷键CtrlShiftX打开插件市场,搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…...
我们的电视Our tv 3.6.0安卓+TV 一款全新电视直播软件-内置稳定直播源
应用简介 我们的电视(ourtv)是一款完全无广告的电视直播软件,清晰度可选择高清,超清,蓝光等播放。安装即可使用,再也不用费劲去找各种不稳定的直播源了。 “我们的电视”播放线路(直播源&…...
批处理理解
初识批处理 如何批处理: 命名:.bat 方法:创建一个记事本文件,然后将其扩展改为.bat 批处理作用:自上而下成批处理每一条DOS命令,直到执行到最后一条。运行环境:当然是我们cmd了 回归我学过的…...
高效准确的PDF解析工具,赋能企业非结构化数据治理
目录 准确性高:还原复杂版面元素 使用便捷:灵活适配场景 贴心服务:快速响应机制 在数据为王的时代浪潮中,企业数据治理已成为组织优化运营、提高竞争力的关键。随着数字化进程的加速,企业所积累的数据量呈爆炸式增长…...
Go框架比较:goframe、beego、iris和gin
由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件&…...
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
在分布式系统中,etcd 是一个高可用的键值存储,用于存储和共享配置信息、服务发现、协调等。向 etcd 写入数据可以通过多种方式进行,常见的方式是使用 etcd 提供的 HTTP API 或者通过客户端库来进行操作。 目录 一、使用EtcdCtl工具来写入数据…...
2025年春节档的《哪吒2》,光线传媒动画梦的关键一战
没想到《哪吒之魔童闹海》会以这种形式重回大众视野。 距离2025年春节还有不到两个月,春节档电影大战已经打响,原本市场还在猜测2024年频频“胎动”的《哪吒之魔童闹海》(以下简称《哪吒2》)会不会参与这场“神仙打架”ÿ…...
windows C#-实例构造函数
声明一个实例构造函数,以指定在使用 new 表达式创建某个类型的新实例时所执行的代码。 要初始化静态类或非静态类中的静态变量,可以定义静态构造函数。 如以下示例所示,可以在一种类型中声明多个实例构造函数: class Coords {pu…...
FPGA-PS端编程1:
目标 在小梅哥的zynq 7015上,完成以下目标: 读取 S1 按键的电平, 当 S1 按键为按下状态时,驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别), 当 S1 释放后,停止…...
【JavaEE进阶】第一个Spring Boot程序
目录 🌴安装插件 🎄Spring Boot介绍 🌳Spring Boot项目创建 🚩创建Spring Boot项目 🏀jar 包下载不下来问题 🚩启动项目 🌲目录介绍 🚩src文件 🚩target文件 &…...
RunCam WiFiLink连接手机图传测试
RunCam WiFiLink中文手册从这里下载 一、摄像头端 1.连接天线(易忘) 2.打开摄像头前面的盖子(易忘) 3.接上直流电源,红线为正,黑线为负 4.直流电源设置电压为14v,电流为3.15A, 通…...
使用Chat-LangChain模块创建一个与用户交流的机器人
当然!要使用Chat-LangChain模块创建一个与用户交流的机器人,你需要安装并配置一些Python库。以下是一个基本的步骤指南和示例代码,帮助你快速上手。 安装依赖库 首先,你需要安装langchain库,它是一个高级框架&#x…...
地级市2011-2020数字经济 博士研究生自用数据
赵涛评价指标数据,具体指标见图片 参考文献: [1]赵涛,张智,梁上坤.数字经济、创业活跃度与高质量发展——来自中国城市的经验证据[J].管理世界,2020,36(10):65-76. 每百人移动电话数,是模仿赵涛的,指人均再➗100 数据来源,中国城…...
呼叫中心部门如何使用开源大模型智能呼叫中心,对接已有系统实现降本增效
呼叫中心部门如何使用开源大模型智能呼叫中心,对接已有系统实现降本增效 作者:开源大模型智能呼叫中心FreeIPCC 随着人工智能技术的快速发展,特别是大规模语言模型(LLM)的应用,企业可以通过将开源大模型与…...
Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
效果预览 第一步: 告诉chatgpt: 将latex格式中的英文翻译为中文(符号和公式不要动),给出latex格式第二步: Latex 转换为 Word(使用GrindEQ ) 视频 https://www.bilibili.com/video/BV1f242…...
多态中虚函数调用问题
在多态中,一般通过虚函数表会调用子类重写的虚函数,然而,有一种情况调用的还是父类的虚函数,就是在父类的构造函数中调用的是父类的虚函数,无论子类是否重写。 #include <iostream> #include <list> #inc…...
【NLP 18、新词发现和TF·IDF】
目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息,并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…...
windows服务器Oracle TNS 远程监听器中毒
修复Oracle TNS 监听器远程中毒漏洞 1.1 修改监听文件 如何快速找到listener.ora ? cmd输入 tnsping localhost 修改配置文件,路径以自己的实际路径为准,我都在D盘 listener.ora内容如下: #listener.ora Network Configuration F…...
GitLab的安装和使用
1.GitLab 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能…...
常用的JVM启动参数有哪些?
大家好,我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助; 常用的JVM启动参数有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM启动参数用于配置Java虚拟机(JVM)的运行时行为…...
MobaXterm 连接不上VMware 的Ubuntu 虚拟机
想在window11的笔记本上通过VMWare安装Ubuntu操作系统,但是在两个桌面见来回切换,十分的麻烦,于是通过远程服务访问客户端软件MateXterm来访问虚拟机的Linux系统,但是从CSDN上搜到的教程都没有成功,于是,尝…...
异步BUCK二极管损耗计算
异步BUCK工作原理 Q闭合时(Ton),输入电压Vin为电感L和输出电容Cout充电,同时为负载供电;Q断开时(Toff),电感L为负载供电,电流通过续流二极管D回流到电感L; 之…...
【WPF】把DockPanel的内容生成图像
要在WPF中将一个 DockPanel 的内容生成为图像并保存,可以按照与之前类似的步骤进行,但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF(Windows Presentation Foundation)中的 DockPanel 是一种布局控件&…...
STM32定时器对象捕获功能测量市电频率
在很多嵌入式系统中,精确地测量外部信号的频率是一个常见需求,尤其是对于需要同步外部电源(如市电)的应用。市电频率(50Hz或60Hz)是电力系统中一个至关重要的参数。在许多场景下,特别是UPS&…...
[react]5、React脚手架
1、前端脚手架 1、Vue的脚手架:vue-cli 2、Angular的脚手架:angular-cli 3、React的脚手架:create-react-app 目前这些脚手架都是使用node编写的,并且都是基于webpack的,需要在电脑上安装node环境 脚手架的作用是帮助我…...
uni-app开发个人中心页面
目录 一:功能实现 二:功能实现 一:功能实现 个人中心主要展示用户的个人信息,订单信息以及其他模块信息包含收藏,我的地址,我的钱包等。页面分为三个部分,底部显示用户信息和个人设置等。中间部分显示订单信息可以点击查看订单列表,底部显示其他模块信息。 二:功…...
Ubuntu 20.04 卸载和安装 MySQL8.0
卸载 首先,检查一下系统安装的软件包有哪些,使用dpkg -l | grep mysql命令: 为了将MySQL卸载干净,这些文件都需要被删除。 在Ubuntu20.04系统下,卸载干净MySQL8.0以确保下一次安装不会出错,可以按照以下…...
【深度学习-论文】通俗易懂的理解多标签识别
文章目录 1. 文章主要内容2. 通俗易懂的理解多标签分类到底是如何实现的通俗易懂的多标签分类实现介绍实现步骤为什么这么做?小结论文题目:Rada r emitter multi-la bel recognition based on residual network 基于残差网络的雷达发射机多标签识别1. 文章主要内容 《基于残…...