Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期
初始Spring
- 一、Spring核心概念
- 1.1IoC(Inversion of Contral):控制反转
- 1.2IoC代码实现
- 1.2DI代码实现
- 二、bean的相关操作
- 2.1bean的配置
- 2.1.1bean的基础配置
- 2.1.2bean的别名配置
- 2.1.3bean的作用范围配置
- 2.2bean的实例化 - - 构造方法
- 2.3bean的实例化 - - 实例工厂与FactoryBean
- 2.4bean的生命周期
- 总结
一、Spring核心概念
1.1IoC(Inversion of Contral):控制反转
- 代码书写现状
-
- 耦合度偏高
- 解决方案
-
- 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
- IoC(Inversion of Contral):控制反转
-
- 对象的创建控制权由程序转移到外部,这种思想称为控制反转
- Spring技术对IoC思想进行了实现
-
- Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的“外部”
-
- IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
- DI(Dependency Injection)依赖注入
-
- 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
1.2IoC代码实现
- 1.导入Spring坐标
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.21.RELEASE</version>
</dependency>
- 2.定义Spring管理类
package com.practice.dao;/*** @Author YJ* @Date 2023/7/25 11:26* Description:*/
public interface BookDao {void save();
}
package com.practice.service;/*** @Author YJ* @Date 2023/7/25 11:28* Description:*/
public interface BookService {void save();
}
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl;
import com.practice.service.BookService;/*** @Author YJ* @Date 2023/7/25 11:28* Description:*/
public class BookServiceImpl implements BookService {private BookDao bookDao = new BookDaoImpl();public void save() {bookDao.save();}
}
- 3.创建Spring配置文件
applicationContext.xml
,配置对应类作为Spring管理的bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.practice.service.impl.BookServiceImpl"/>
</beans>
- 4.初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean/*BookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();*/BookService bookService = (BookService) act.getBean("bookService");bookService.save();}
}
1.2DI代码实现
- 1.删除业务层中使用
new
的方式创建的dao对象 - 2.提供对应的
setter
方法 - 3.配置
service
与dao的关系 -
property
标签表示配置当前bean的属性
-
name
属性表示配置哪一个具体的属性
-
ref
属性表示参照哪一个bean
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.service.BookService;public class BookServiceImpl implements BookService {//删除业务层中使用new的方式创建的dao对象private BookDao bookDao;public void save() {bookDao.save();}//提供对应的set方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.practice.service.impl.BookServiceImpl"><!--配置service与dao的关系--><!--property标签表示配置当前bean的属性--><!--name属性表示配置哪一个具体的属性--><!--ref属性表示参照哪一个bean--><property name="bookDao" ref="bookDao"/></bean>
</beans>
二、bean的相关操作
2.1bean的配置
2.1.1bean的基础配置
- 1.功能: 定义Spring核心容器管理的对象
- 2.格式:
<beans><bean/><bean></bean>
</beans>
- 3.属性:
-
- 3.1id: bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一
-
- 3.2class: bean的类型,即配置的bean的全路径类名
2.1.2bean的别名配置
- 别名配置就是在bean标签中添加一个name属性,这个name属性就是bean的别名,可以有多个别名中间用逗号、空格或分号隔开即可
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl"/><!--name起别名--><bean id="bookService" name="service" class="com.practice.service.impl.BookServiceImpl"><!--配置service与dao的关系--><!--property标签表示配置当前bean的属性--><!--name属性表示配置哪一个具体的属性--><!--ref属性表示参照哪一个bean--><property name="bookDao" ref="bookDao"/></bean>
</beans>
package com.practice;import com.practice.dao.BookDao;
import com.practice.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 11:33* Description:*/
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean/*BookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();*/BookService bookService = (BookService) act.getBean("service");//用到别名servicebookService.save();}
}
- 若是bean的名称跟配置的不一致会出现
NoSuchBeanDefinitionException
异常,表示该bean未定义
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean/*BookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();*/BookService bookService = (BookService) act.getBean("service1");//用到错误别名service1bookService.save();}
}
2.1.3bean的作用范围配置
- Spring默认配置的bean是一个单列的,即只有一个bean对象,如下所示:
public class AppForScope {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao1 = (BookDao) act.getBean("bookDao");BookDao bookDao2 = (BookDao) act.getBean("bookDao");System.out.println(bookDao1);System.out.println(bookDao2);}
}
- 我们可以通过配置bean的文件控制是否产生一个对象还是多个对象
- 通过
scope
属性定义bean的作用范围,可选范围如下: -
singleton
:单例(默认)
-
prototype
:非单例
- 适合交给容器进行管理的bean
-
- 表现层对象
-
- 业务层对象
-
- 数据层对象
-
- 工具对象
- 不适合交给容器进行管理的bean
-
- 封装实体的域对象
2.2bean的实例化 - - 构造方法
- bean本质上就是对象,创建bean使用构造方法完成
public class BookDaoImpl implements BookDao {private BookDaoImpl() {System.out.println("book dao constructor running...");}public void save() {System.out.println("bookDao save~");}
}
public class App {public static void main(String[] args) {//获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl" scope="prototype"/><!--name起别名--><bean id="bookService" name="service" class="com.practice.service.impl.BookServiceImpl" ><!--配置service与dao的关系--><!--property标签表示配置当前bean的属性--><!--name属性表示配置哪一个具体的属性--><!--ref属性表示参照哪一个bean--><property name="bookDao" ref="bookDao"/></bean>
</beans>
- 表明bean在创建时调用的无参构造方法
- 无参构造方法如果不存在,会抛出
BeanCreationException
异常
2.3bean的实例化 - - 实例工厂与FactoryBean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1.导入spring的坐标spring-context,对应的版本号是5.2.21.RELEASE--><!--2.配置bean--><!--方式三:使用实例化工厂实例化bean--><bean id="userFactory" class="com.practice.factory.UserDaoFactory"/><bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>
</beans>
public interface UserDao {public void save();
}
public class UserDaoImpl implements UserDao {public void save() {System.out.println("UserDao save...");}
}
public class UserDaoFactory {public UserDao getUserDao(){return new UserDaoImpl();}
}
package com.practice;import com.practice.dao.UserDao;
import com.practice.factory.UserDaoFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 19:09* Description:*/
public class AppForInstanceUser {public static void main(String[] args) {/*//创建实例工厂对象UserDaoFactory userDaoFactory = new UserDaoFactory();UserDao userDao = userDaoFactory.getUserDao();userDao.save();*///获取IoC容器ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanUserDao userDao = (UserDao) act.getBean("userDao");userDao.save();}
}
- 使用FactoryBean实例化bean
package com.practice.factory;import com.practice.dao.UserDao;
import com.practice.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;/*** @Author YJ* @Date 2023/7/25 19:21* Description:使用FactoryBean实例化bean*/
public class UserDaoFactoryBean implements FactoryBean<UserDao> {public UserDao getObject() throws Exception {//代替原始实例工厂中创建对象的方法return new UserDaoImpl();}public Class<?> getObjectType() {return UserDao.class;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--方式三:使用实例化工厂实例化bean--><bean id="userFactory" class="com.practice.factory.UserDaoFactory"/><bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/><!--方式四:使用FactoryBean实例化bean--><bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/></beans>
- 使用这种方式创建出的bean是单例的
- 可在
UserDaoFactoryBean
中实现方法isSingleton
并返回false
即可
public boolean isSingleton() {return false;}
2.4bean的生命周期
- 生命周期:从创建到消亡的完整过程
- bean生命周期:bean从创建到消毁的整体过程
- bean生命周期控制:在bean创建后到销毁前做一些事情
package com.practice.dao.impl;import com.practice.dao.BookDao;/*** @Author YJ* @Date 2023/7/25 11:24* Description:*/
public class BookDaoImpl1 implements BookDao {public void save() {System.out.println("bookDao save~");}//表示bean初始化public void init() {System.out.println("init...");}//表示bean销毁前对应操作public void destroy() {System.out.println("destroy...");}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--方式三:使用实例化工厂实例化bean--><!--<bean id="userFactory" class="com.practice.factory.UserDaoFactory"/>--><!--<bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>--><!--方式四:使用FactoryBean实例化bean--><!--<bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>--><!--配置bean的生命周期--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl1" init-method="init" destroy-method="destroy"/>
</beans>
package com.practice;import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 19:40* Description:*/
public class AppForLifeCycle {public static void main(String[] args) {//获取IoC容器ClassPathXmlApplicationContextact = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();//关闭容器,才能看到destory方法的执行结果//1.暴力关闭act.close();//2.关闭钩子act.registerShutdownHook();}
}
package com.practice.service.impl;import com.practice.dao.BookDao;
import com.practice.dao.impl.BookDaoImpl1;
import com.practice.service.BookService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;/*** @Author YJ* @Date 2023/7/25 11:28* Description:*/
public class BookServiceImpl1 implements BookService, InitializingBean, DisposableBean {private BookDao bookDao;public void save() {System.out.println("bookService save...");bookDao.save();}public void afterPropertiesSet() throws Exception {System.out.println("service init...");}public void destroy() throws Exception {System.out.println("service destroy...");}public void setBookDao(BookDaoImpl1 bookDao) {this.bookDao=bookDao;}
}
package com.practice;import com.practice.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Author YJ* @Date 2023/7/25 19:40* Description:*/
public class AppForLifeCycle {public static void main(String[] args) {//获取IoC容器ClassPathXmlApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");//获取beanBookDao bookDao = (BookDao) act.getBean("bookDao");bookDao.save();//act.close();act.registerShutdownHook();}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--方式三:使用实例化工厂实例化bean--><!--<bean id="userFactory" class="com.practice.factory.UserDaoFactory"/>--><!--<bean id="userDao1" factory-bean="userFactory" factory-method="getUserDao"/>--><!--方式四:使用FactoryBean实例化bean--><!--<bean id="userDao" class="com.practice.factory.UserDaoFactoryBean"/>--><!--配置bean的生命周期--><bean id="bookDao" class="com.practice.dao.impl.BookDaoImpl1" init-method="init" destroy-method="destroy"/><bean id="bookService" class="com.practice.service.impl.BookServiceImpl1"><property name="bookDao" ref="bookDao"/></bean>
</beans>
总结
关于Spring的初步认识我们就学到这里了,关于bean的操作我们有了基本的认识,欢迎各位小伙伴点赞+关注!!!
相关文章:

Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期
初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral):控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与…...

git冲突“accept theirs”和“accept yours”
Accept Yours 就是直接选取本地的代码,覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的res…...
Vision Transformer (ViT)
生成式模型与判别式模型 生成式模型,又称概率模型,是指通过学习数据的分布来建立模型P(y|x),然后利用该模型来生成新的数据。生成式模型的典型代表是朴素贝叶斯模型,该模型通过学习数据的分布来建立概率模型,然后利用该模型来生成新的数据。判别式模型,又称非概率模型,…...
OpenGL Metal Shader 编程:解决图片拉伸变形问题
前面发了一些关于 Shader 编程的文章,有读者反馈太碎片化了,希望这里能整理出来一个系列,方便系统的学习一下 Shader 编程。 由于主流的 Shader 编程网站,如 ShaderToy, gl-transitions 都是基于 GLSL 开发 Shader ,加…...
[SQL挖掘机] - 字符串函数 - concat
介绍: concat函数用于连接字符串的函数。它接受多个字符串作为参数,并将它们按顺序连接起来形成一个新的字符串。 用法: 以下是concat函数的语法: concat(string1, string2, ...)其中,string1, string2, …是要连接的字符串参数。你可以传…...
Rust之所有权
1、所有权的概念: 程序需要管理自己在运行时使用的计算机内部空间。Rust语言采用包含特定规则的所有权系统来管理内存,这套规则允许编译器在编译的过程中执行检查工作,而不会产生任何的运行时开销。 (1)、所有权规则: Rust中的…...
RabbitMQ帮助类的封装
RabbitMQ帮助类的封装 基本部分 public class RabbitMQInvoker {#region Identy private static IConnection _CurrentConnection null;private readonly string _HostName null;private readonly string _UserName null;private readonly string _Password null;#endreg…...

mac 移动硬盘未正常退出,再次链接无法读取(显示)
(1)首先插入自己的硬盘,然后找到mac的磁盘工具 (2)打开磁盘工具,发现自己的磁盘分区在卸载状态;点击无法成功装载。 (3)打开终端,输入 diskutil list查看自…...

短视频账号矩阵系统源码开发部署路径
一、短视频批量剪辑的开发逻辑算法 1.视频剪辑之开发算法 自己研发视频剪辑是指通过对视频素材进行剪切、调整、合并等操作,利用后台计算机算法,进行抽帧抽组抽序进行排列以达到对视频内容进行修改和优化的目的。自己研发的视频剪辑工具可以通过后台码…...

前端 | ( 十一)CSS3简介及基本语法(上) | 尚硅谷前端html+css零基础教程2023最新
学习来源:尚硅谷前端htmlcss零基础教程,2023最新前端开发html5css3视频 系列笔记: 【HTML4】(一)前端简介【HTML4】(二)各种各样的常用标签【HTML4】(三)表单及HTML4收尾…...

Kafka入门到起飞系列 - 副本机制,什么是副本因子呢?
我们一直在讲一个主题会有多个分区,这多个分区可以分布在一台服务器上,也可以分布在多台服务器上,还可以增加分区(Kafka目前只支持分区),这是Kafka提供的一种横向扩展的手段 比如我们创建了一个主题&#x…...

2023年基准Kubernetes报告:6个K8s可靠性失误
云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面,但大多数组织预计今年的云使用和支出将与计划的相同(45%),或高于计划的(45%)…...
程序员面试系列,k8s常见面试题
原文链接 一、什么是 Kubernetes?解释其主要功能和用途。 Kubernetes(通常简称为K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,并于2014年捐赠给了云原生计算基金会&a…...
docker版jxTMS使用指南:站点的调整
本文讲解4.4版jxTMS中的站点的调整,整个系列的文章请查看:[docker版jxTMS使用指南:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请…...
element ui input 深层循环v-model绑定默认数据删除不了的情况
例子: 在项目开发中遇到的,简单记录一下 <el-input style"width: 180px"v-model"item.dataForm"input"handleChangeDataForm($event)"type"number"placeholder"请输入1-2的数值"size"smal…...
GBDT的参数空间与超参数优化
目录 1. 默认参数下的GBDT与其它算法的对比 2. 基于TPE对GBDT进行优化 step1:建立benchmark step2:定义参数init需要的算法 step3:定义目标函数、参数空间、优化函数、验证函数 step4:训练贝叶斯优化器 step5:修…...
多线程练习——抽奖箱
题目: 分析以下需求,并用代码实现: 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,900,2,80,300,700};创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随…...

RK3399平台开发系列讲解(内核调试篇)Valgrind 内存调试与性能分析
🚀返回专栏总目录 文章目录 一、为什么要学会Valgrind二、什么是内存泄露三、Valgrind的移植四、Valgrind相关参数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使…...

Windows 11的最新人工智能应用Windows Copilot面世!
Windows Copilot是Windows 11预览版中的一项AI辅助功能。 Windows 11还包括设置应用程序的更改,更广泛的支持压缩文件格式。 上个月,微软宣布将继续其将ChatGPT应用于所有产品的冒险之旅,推出了名为Copilot的新Windows 11功能。几个月前&…...

Mac 预览(Preview)丢失PDF标注恢复
感谢https://blog.csdn.net/yaoyao_chen/article/details/127462497的推荐! 辛苦用预览在pdf上做的阅读标记,关闭后打开全丢失了,推荐尝试下网站导入文件进行恢复: 直接使用该网页应用PDF Annotation Recovery 或者访问该项目&a…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...