Sql server 连接 Oracle数据库

当需要在sql server数据库中查询第三方Oracle数据库的数据时,可以通过以下方法进行查询 前提预警:本机必须装有Oracle客户端 检查是否安装Oracle客户端,并检查TNS信息是否配置完成 1.1、 在cmd中执行 sqlplus ,没有报错并出现Oracle版本号,则表示Oracle已安装 1.2、配置TNS信息(最上面的10.0.0.130可随意定义,eg:test、orcl、qerghasd…) 130 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.130)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) 配置ODBC数据信息 2.1、打开ODBC数据源窗口(在开始菜单中搜索或查找可找到)后找到 驱动程序(英文:driver)按图中数字顺序操作 2.2、选择用户DSN后点击右边的添加,按图中顺序操作(如果在步骤三后提示报错,应该检查Oracle是否按照成功,TNS_ADMIN和Oracle_Home环境变量是否配置正确) 2.3、配置连接信息,按图中提示进行配置打开sql server数据库进行Oracle数据库连接配置 3.1、连接SQL server数据库后找到连接服务器,新建连接服务 【如果打开下图链接服务器发现没有OraOLEDB.Oracle访问接口,则点击此处跳转至这位老哥所写的教程进行手工注册相关注册表信息】 3.2、常规页中按照如图配置信息(产品名称无特定要求,数据源为TNS信息中最前面“=”号前的名称) 3.3、选择安全性页进行如图配置,之后点确定(如果点确定会报错的话,根据提示进行问题排查,大概率是Oracle安装不完全,环境变量配置不正确的问题) 见证奇迹 select * from openquery(SQL_ORACLE,'select sysdate from dual') 【在引号中写需要查询的Oracle数据语句,引号中的语句为Oracle格式的sql语句】 【SQL_ORACLE为步骤3.2中配置的链接服务器名称】

Java之文件操作与IO

目录 一.认识文件 1.1文件是什么? 1.2文件的组织 1.3文件路径 1.4文件的分类 二.文件操作 2.1File概述 三.文件内容操作--IO 3.1JavaIO的认识 3.2Reader和Writer ⭐Reader类 ⭐Writer类 3.2FileInputStream和FileOutputStream ⭐FileInputStream类 ⭐FileOutputStream类 四.总结 🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 🎥 本文由 tq02 原创,首发于 CSDN🙉 🎄 本章讲解内容:文件和IO的讲解 🎥多线程学习专栏:多线程学习专栏 🎥其他学习专栏: C语言 JavaSE MySQL基础 在学习文件操作前,我们需要了解文件的基本信息,才能懂得如何操作文件,使用文件。 一.认识文件 1.1文件是什么? 问:文件,是图片、文档、视频、压缩包又或者是那种文件夹呢? 答:某种意义上,都是文件。 文件:拥有数据内容,以及一些元信息,例如:文件名、文件类型和文件大小等数据 如果你拥有一台电脑,就会经常与文件打交道,例如:ppt、word等。而对于计算机,这些文件都是不一样的,主要区别是后缀名不一样。文件一般存放在硬盘当中。 1.2文件的组织 在计算机上面拥有很多文件,因此我们不得不对文件进行管理、组织。但是如何组织呢?目前通过层序级结构进行组织,类似我们在数据结构里学的树形结构,也就是电脑上的文件夹或者目录的概念。 1.3文件路径 文件路径分2种,一种绝对路径,一种相对路径 绝对路径:指文件在硬盘上真正存在的路径。它从根目录开始,一直到目标文件所在的目录,包括所有的父级目录。 例如,1.txt文件的绝对路径是“C:\Users\15063\Desktop\1.txt”,那么该文件在C盘下Users文件夹中15063文件中Desktop文件夹中。 相对路径:相对于当前文件所在目录的路径。它描述了从当前目录到目标文件的位置。相对路径可以是简短的,只需指示当前目录和目标文件之间的相对位置即可。 例如:1.txt文件在C:\Users\15063\1.txt,2.txt在C:\Users\15064\Desktop\2.txt 因此对于2.txt文件而言,上一级目录是15064目录,再上一级目录是Users目录,而15063目录也在Users目录下的文件夹,在该文件夹中有1.txt文件。 ./:当前目录 ../:上级目录 /下级目录 额外补充:在windows上,/ 和 \ 没有区别,都可以使用, 例如:1.txt文件位置:C:\Users\15063\Desktop\1.txt,也可以是C:/Users/15063/Desktop/1.txt 但是在linux当中,必须使用 / 1.4文件的分类 文件根据保存数据的不同,一般分为2种类型,文本文件和二进制文件, 文本文件 二进制文件 存储的是字符(utf8字符集) 存储二进制数据 问:如何判断文件是字符还是二进制? 答:使用记事本打开,如果看的懂,就是文本文件,看不懂就是二进制文件。 二.文件操作 文件操作是指在计算机中对文件进行读取、写入、修改等各种操作的过程。文件操作可以包括创建和删除文件,打开和关闭文件,读取和写入文件内容等 2.1File概述 本章使用Java的方式进行文件操作。Java 中通过 java.

【算法系列篇】分治-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 我相信看到这里很多人都学过八大排序了吧,其中快速排序是一种非常高效的排序方式,那么今天我们将会使用快速排序的算法来解决实际生活中的某些问题。 什么是分冶 分治算法是一种算法设计策略,它将大问题分解成更小的子问题,并通过解决子问题来解决原始问题。分治算法的基本思想是将问题分解成若干个规模较小但结构与原问题相似的子问题,然后递归地解决这些子问题,最后再将子问题的解合并得到原问题的解。 一般而言,分治算法可以分为三个步骤: 分解(Divide):将原问题划分成若干个规模较小且相互独立的子问题,通常通过递归方式实现。 解决(Conquer):递归地解决子问题。如果子问题的规模足够小,无需继续分解,直接求解并返回结果。 合并(Merge):将子问题的解合并成原问题的解。这一步骤通常涉及对子问题解的操作,以得到原问题的解。 分治算法的典型应用包括排序算法(如快速排序和归并排序)、查找算法(如二分查找)、图算法(如最大子数组和、最短路径问题)等。 分治算法的优点在于它能够高效地解决某些复杂问题,尤其适用于可以被划分为多个子问题的情况。通过将问题分解为更小的子问题,分治算法可以减少问题的规模,简化问题的解决过程。 然而,需要注意的是,并非所有问题都适合采用分治算法。在使用分治算法时,需要保证子问题相对独立且可以有效地解决。此外,分治算法在涉及大量递归调用时可能会带来额外的开销,因此在设计算法时需要注意递归深度与性能之间的平衡。 我们今天使用的快速排序的算法则是很好的利用了分冶将大事化小的思想来解决问题的,将整个数组分为若干小区间来进行排序,最终得到我们想要的结果。 1.颜色分类 https://leetcode.cn/problems/sort-colors/ 1.1 题目要求 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这个问题。 示例 1: 输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2] 示例 2: 输入:nums = [2,0,1] 输出:[0,1,2] 提示: n == nums.length1 <= n <= 300nums[i] 为 0、1 或 2 进阶:

中文大语言模型 Llama-2 7B(或13B) 本地化部署 (国内云服务器、GPU单卡16GB、中文模型、WEB页面TextUI、简单入门)

本文目的是让大家先熟悉模型的部署,简单入门;所以只需要很小的算力,单台服务器 单GPU显卡(显存不低于12GB),操作系统需要安装 Ubuntu 18.04。 1 服务器&操作系统 1.1服务器的准备 准备一台服务器 单张英伟达GPU显卡(显存不低于12GB),操作系统需要安装 Ubuntu 18.04 (具体安装过程忽略)。 重装系统前注意备份现有存储上的相关重要数据。 GPU显卡驱动先不安装; 后续介绍驱动和CUDA的安装步骤。 如果手上没有相应的服务器硬件设备、可以购买带GPU的云服务器, 以下可供选择参考。 上云精选_云服务器秒杀_开发者上云推荐-腾讯云腾讯云推出云产品限时特惠抢购活动:2C2G云服务器9元/月起;还有短信、CDN、COS等热门云产品限时特惠...https://cloud.tencent.com/act/pro/seckill_season?from=20210 地域选择国内适合的城市; 预装镜像为 Ubuntu 18.04 购买后一般云厂商会自动安装显卡的驱动和CUDA , 因为目前大部分的项目对 cuda 11.7 和 11.8 版本兼容的比较好,后续我们要指定安装特定的版本; 所以如果云主机已经预装了GPU驱动,我们需要卸载。 如果不了解卸载的指令,可以在控制台 点击“重装系统”; 然后 注意 不要勾选后台自动安装 GPU 驱动; 这样重置后就是一台干净的 Ubuntu18.04的系统,且没有安装GPU的驱动。 1.2系统工具和环境 安装一些基础的相关软件工具 sudo apt update sudo apt install -y vim git wget curl net-tools language-pack-zh-hans language-pack-en 中文环境 echo ' LANG="en_US.utf8"; export LANG LANGUAGE="en_US.utf8"; export LANGUAGE LC_ALL="en_US.utf8"; export LC_ALL LC_CTYPE="en_US.utf8"; export LC_CTYPE SUPPORTED=en_US.

动态规划:路径和子数组问题(C++)

动态规划:路径和子数组问题 路径问题1.不同路径(中等)2.不同路径II(中等)3.下降路径最⼩和(中等)4.地下城游戏(困难) 子数组问题1.最大子数组和(中等)2.环形子数组的最大和(中等)3.乘积最大子数组(中等)4.乘积为正数的最长子数组(中等)5.等差数列划分(中等)6.最长湍流子数组(中等)7.单词拆分(中等)8.环绕字符串中唯⼀的子字符串(中等) 路径问题 1.不同路径(中等) 链接:不同路径 题目描述 做题步骤 状态表示 尝试定义状态表示为到达[m, n]位置的路径数。 状态转移方程 通过上述分析,可知状态转移方程为: dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。 初始化 填表顺序 保证填当前状态时,所需状态已经计算过,从起点出发,填表顺序为从上往下,每一行从左往右。 返回值 根据状态表示,返回的应该是dp[m][n],即到达终点的路径数。 代码实现 class Solution { public: int uniquePaths(int m, int n) { //dp[i][j]表示到达该位置的路径 vector<vector<int>> dp(m+1, vector<int>(n+1,0)); dp[0][1] = 1; for(int i = 1; i <= m; i++) { for(int j = 1; j <= n;j++) { dp[i][j] = dp[i][j - 1] + dp[i - 1][j]; } } return dp[m][n]; //时间复杂度:O(N) //空间复杂度:O(N^M) } }; //滚动数组优化 // class Solution { // public: // int uniquePaths(int m, int n) // { // vector<int> dp(n + 1); // dp[1] = 1; // for(int i = 1; i <= m; i++) // { // for(int j = 1; j <= n;j++) // { // dp[j] += dp[j-1]; // } // } // return dp[n]; // } // }; 2.

ubuntu系统下多个的python版本,设置默认python和pip

ubuntu系统下多个的python版本,设置默认python和pip 一、设置默认python版本,并随意切换 step1:确定系统中的python版本和位置 Ubuntu本身自带两个版本的python,分别是python2.X(快捷键:python)、python3.X(快捷键:python3)。所以首先确认本机下的python默认版本。 whereis pythonX pythonX -V 或者查询/usr/bin中的所有可用python cd /usr/bin ls |grep python step2:使用update-alternatives 来为整个系统更改Python版本 罗列出所有可用的python替代版本信息: update-alternatives --list python 如果出现以下报错信息: update-alternatives: error: no alternatives for python 则表示Python的替代版本尚未被update-alternatives命令识别。 step3:解决上述错误 需要更新一下替换列表,将python2.X和python3.X放入其中,命令如下: 模板update-alternatives --install python软链接位置(一般都是:/usr/bin/python) python python2.X的软链接位置(/usr/bin/python2.7) 优先级 # update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode # update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2 update-alternatives: using /usr/bin/python3.10 to provide /usr/bin/python (python) in auto mode –install选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先级的选项就会被选中。

stable diffusion实践操作-tagg插件-反推提示词

系列文章目录 本文专门开一节写SD原理相关的内容,在看之前,可以同步关注: stable diffusion实践操作 文章目录 系列文章目录前言一、tagg插件反推词使用1. 安装2. 打开3 发送到文生图4 结果 总结 前言 本章主要讲一个反推提示词的插件tagg. 我们平时通过CLIP和DEEPBORU来反推提示词,但是这两个太慢,并且容易出错 一、tagg插件反推词使用 1. 安装 首先查看是否安装,如果没有安装, 2. 打开 如下图所示,点击tagg,拖入图片,就出现了所有提示词,并且可以根据阈值进行过滤 3 发送到文生图 4 结果 总结 例如:以上就是今天要讲的内容。

python安装matplotlib包报错:ERROR: Could not find a version that satisfies the requirement matplotlib

python安装matplotlib包报错:ERROR: Could not find a version that satisfies the requirement matplotlib (from versions: none)ERROR 以及其他ERROR: Could not find a version that satisfies the requirement xxx包 (from versions: none)的解决方案 遇到的问题 一个项目需要用到matplotlib包,但是发现之前没有安装过,故习惯性按照如下方法尝试安装 file->setting->project:项目名>python interpreter->搜索 matplotlib->install->报错 ERROR: Could not find a version that satisfies the requirement matplotlib (from versions: none)ERROR 结果报错版本不匹配。。下面开始找解决方法 失败的过程 不知道是不是pip的问题?尝试更新pip 打开安装py的可执行文件的位置,然后 python.exe -m pip install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 已经是最新了,看来和pip版本没关系 考虑国内的网络情况,用镜像源发现可以连接到,但是网速只有0.1kb/s,没办法只能再换 pip install 包名 -i -i http://pypi.douban.com/simple/ --trusted-host pypi.

java 获取指定日期的年、月、日、时、分、秒

学习目标: 1、java 中使用 java.util.Date 获取指定日期的年 2、java 中使用 java.util.Date 获取指定日期的月 3、java 中使用 java.util.Date 获取指定日期的日 4、java 中使用 java.util.Date 获取指定日期的时 5、java 中使用 java.util.Date 获取指定日期的分 6、java 中使用 java.util.Date 获取指定日期的秒 学习内容: 内容如下所示: 1. 导入 java 包 import java.util.Date; 2. java 中使用 java.util.Date 获取指定日期的年 Date date=new Date(); String year=String.format("%tY", date); 3. java 中使用 java.util.Date 获取指定日期的月 Date date=new Date(); String mon=String .format("%tm", date); 4. java 中使用 java.util.Date 获取指定日期的日 Date date=new Date(); String day=String .format("%td", date); 5. java 中使用 java.

mac电脑设置虚拟内存

1、进入恢复模式 重启电脑,command+r 一直按着,进入恢复模式 关闭或启动sip: //打开终端输入 csrutil disable //完成后还是建议启用sip csrutil enable 2、查看虚拟内存 sysctl vm.swapusage 3、关闭虚拟内存: //关闭虚拟内存 sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist //清除已经产生但缓存文件,某次重启但时候系统会自动删除 sudo rm /private/var/vm/swapfile* 4、开启虚拟内存: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist 在刚开机时,swap用量为0。打开很多应用后,发现物理内存用量大约10g时发现swap开始使用。然后随着不断关闭应用,得出一个结论,swap的用量是系统动态调整的,内存用量越大,swap用量越大。

数组与链表的区别

1、存储方式不同 数组是连续存储,数组在创建时需要一个整块的空间。 链表是链式存储,链表在内存空间中不一定是连续的。 数组一般创建在栈区,链表一般创建在堆区,在增加节点时需要new或malloc新节点,相较于数组长度不固定,自由度高。 2、访问元素方式不同 数组可以通过下标随机访问,单向链表只能通过头结点从前向后访问链表中的元素。 3、增删效率不同 数组在插入或删除的时候需要移动链表中的其他元素,时间复杂的为O(n)。 链表在进行插入删除时,找到要插入或删除的位置后,增删时间复杂度为O(1)。 所以当线性表进行大量的插入和删除操作时建议使用链表,若主要对线性表进行查找操作,较少进行插入操作是建议使用数组。

快速解决 adb server version doesn‘t match this client

这个问题是由于电脑上安装了多个版本的adb工具,客户端和服务端的版本不一致,无法正常通信导致。最快的解决方法就是将Android SDK中adb复制到系统目录下。 操作步骤如下: 1. 查看adb版本和路径 执行adb version,如下,Instanlled as 显示的路径就是本机的adb文件路径。 2. 覆盖adb 然后在你的电脑上找到对应版本的adb服务端文件(一般在Android SDK目录下的platform-tools文件夹中),执行sudo cp指令将其复制到系统路径中,覆盖掉当前版本的adb服务端文件 。

一口气用Python写了13个小游戏(附源码)

今天给大家分享13个游戏源码,可以自己复现玩玩,研究下里面的编程逻辑,对学习编程(特别是初学者)应该会有很大帮助。 1、吃金币 源码分享: import os import cfg import sys import pygame import random from modules import * '''游戏初始化''' def initGame(): # 初始化pygame, 设置展示窗口 pygame.init() screen = pygame.display.set_mode(cfg.SCREENSIZE) # 加载必要的游戏素材 game_images = {} for key, value in cfg.IMAGE_PATHS.items(): if isinstance(value, list): images = [] for item in value: images.append(pygame.image.load(item)) game_images[key] = images else: game_images[key] = pygame.image.load(value) game_sounds = {} for key, value in cfg.AUDIO_PATHS.items(): if key == 'bgm': continue game_sounds[key] = pygame.

【前端】前端单元测试、覆盖率测试工具Vitest入门指南

前言 单元测试的重要性不言而喻,可以很大程度的减少一些bug的产生。在前端项目中,有很多用于单元测试的工具,如最常见的Jest。但对于由vite构建的前端项目而言,使用vite配套的vitest会更加方便、舒适。官方文档是最好的入门方式,这篇文章记录在入门过程中可能遇到的一些问题,方便想了解的人更快速的上手。本文暂时只介绍单元测试和覆盖率测试的使用方法。 安装与配置 安装方法 npm npm install -D vitestyarn yarn add -D vitest 基础配置 在package.json文件中,添加以下代码: { "scripts": { "test": "vitest" } } 测试Vitest是否能正常工作 按照官方文档的示例,准备两个文件sum.ts和sum.test.ts(可以在项目根目录下创建一个test文件夹,专门用来存放测试文件): // sum.ts export function sum(a, b) { return a + b } // sum.test.ts import { expect, test } from 'vitest' import { sum } from './sum' test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3) }) 然后,在终端中运行指令npm run test(或者yarn test)。 如果没有意外,那么将出现以下结果:

Stable Diffusion ubuntu 部署,问题记录

问题一 在使用图生图时,报错 NansException: A tensor with all NaNs was produced in Unet. This could be either because there's not enough precision to represent the picture, or because your video card does not support half type. Try setting the "Upcast cross attention layer to float32" option in Settings > Stable Diffusion or using the --no-half commandline argument to fix this. Use --disable-nan-check commandline argument to disable this check. 解决方案一(我单独改了这个没生效): 1、web页面修改配置:

【数据结构】树和二叉树的概念及结构(一)

目录 一,树的概念及结构 1,树的定义 2,树结点的分类及关系 3,树的表示 二,二叉树的概念及结构 1,二叉树的定义 2,特殊的二叉树 3,二叉树的性质 4,二叉树的存储结构 1,顺序存储 2,链式储存 一,树的概念及结构 1,树的定义 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 树(Tree)是n(n>=0)个结点的有限集; n=0时称为空树; 在任意一颗非空树中: 1,有且仅有一个特定的称为根(Root)的结点; 2,当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,......,Tm,其中每一个集合本身又是一棵树,并且称为跟的子树(SubTree); 如下图所示: 注意:树形结构中,子树之间不能有交集,否则就不是树形结构 2,树结点的分类及关系 结点的度:一个结点含有的子树的个数称为该结点的度; 如上图:A的为4 叶结点或终端结点:度为0的结点称为叶结点; 如上图:K,G,L,M,N...等结点为叶结点 非终端结点或分支结点:度不为0的结点; 如上图:B,C,E...等结点为分支结点 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:A是B的父节点 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点; 如上图:B是A的孩子结点 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点 树的度:一棵树中,最大的结点的度称为树的度; 如上图:树的度为4 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推 树的高度或深度:树中结点的最大层次; 如上图:树的高度为4 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为堂兄弟结点 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先,C是G,H的祖先 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙,G,H是C的子孙 森林:由m(m>0)棵互不相交的树的集合称为森林 3,树的表示 树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法 typedef int DataType; struct Node { struct Node* _firstChild1; // 第一个孩子结点 struct Node* _pNextBrother; // 指向其下一个兄弟结点 DataType _data; // 结点中的数据域 }; 图解: 二,二叉树的概念及结构 1,二叉树的定义 二叉树(Binary Tree)是n(n>=0) 个结点的有限集合;

排列(Amn)与组合(Cmn)算法详解

不区分个体差异和顺序时用Cmn(m小n大),需要区分个体和顺序时候用Amn。 例1:从10个相同的球里取出5个球,不需要区分先后顺序,也不区分其他个体特征,一把抓过去够5个就行,这就是C510(m=5,n=10)。 例2:有10把凳子,需要安排10个人去坐,问有多少种可能性。这里,就需要体现顺序。那么,坐第一个凳子有10种选择,做第二个凳子的有9种选择,以此类推,坐最后一个凳子的就只剩1种选择,每个选择之间是“和”的关系,即为10x9x8x7x6x5x4x3x2x1=A1010=10!。 下面是排列与组合的一般公式:(!代表阶乘) A510 = 10! ÷ 5! = 6 x 7 x 8 x 9 x 10 int A(int m, int n) { int ret = 1; for (int i = m + 1; i <= n; i++) ret *= i; return ret; } C38 = (8 x 7 x 6) / (3 x 2 x 1) 注意"ret = ret * (n - i + 1) / i;"

Spring 中存取 Bean 的相关注解

目录 一、五大类注解 1、五大类注解存储Bean对象 1.1@Controller(控制器储存) 1.2@Service(服务存储) 1.3@Repository(仓库存储) 1.4@Component(组件存储) 1.5@Configuration(配置存储) 2、五大类注解小结 2.1为什么要这么多类注解 2.2 五大类注解之间的关系 二、方法注解 1.方法注解的存储 1.1 @Bean注解的使用 1.2 @Bean方法的重命名 2.方法注解的获取 2.1 属性注入 2.2 Setter注入 2.3 构造方法注入 三、总结 1.三种注⼊优缺点分析 2.Resource和@Autowired的区别 一、五大类注解 在Spring中,想要将Bean存储到Spring中,一共有两种注解类型可以实现: 一种是类注解,其包括@Controller,@Service,@Repository,@Component,@Configuration; 另一种则是方法注解,其仅有@Bean 1、五大类注解存储Bean对象 1.1@Controller(控制器储存) 使⽤ @Controller 存储 bean 的代码如下所示: package com.java.demo; import org.springframework.stereotype.Controller; @Controller public class User { public void sayHi(){ System.out.println("hi User"); } } 我们再在启动类中,简单读取一下存入的对象 import com.java.demo.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("

【算法系列篇】模拟算法

文章目录 前言1.替换所有问号1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 提莫攻击2.1 题目要求2.2 做题思路2.3 Java代码实现 3. N 字形变换3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 外观数列4.1 题目要求4.2 做题思路4.3 Java代码实现 5. 数青蛙5.1 题目要求5.2 做题思路5.3 Java代码实现 总结 前言 前面我们学习的算法,当读完题目之后可就能就会知道使用哪种算法,这种算法就类似于一种模板,而有一类算法却不能称为特定的模板,这种就叫做模拟算法。模拟算法是指:根据题目提供的信息,将该题目的解决过程模拟出来就能够得到最终的结果,模拟算法比较简单,只要能够根据题目的意思将题目给模拟出来,一般都能够解决这个问题。 模拟算法是一种计算机算法,用于模拟或仿真现实世界中的某个过程、系统或现象。它通过运行一系列的步骤或规则来模拟目标对象的行为,并生成与真实情况相似的结果。 1.替换所有问号 https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/ 1.1 题目要求 给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意:你 不能 修改非 ‘?’ 字符。 题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。 在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。 示例 1: 输入:s = "?zs" 输出:"azs" 解释:该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合题目要求的。 只有 "z" 是无效的修改,因为字符串 "

AIGC专栏2——Stable Diffusion结构解析-以文本生成图像(文生图,txt2img)为例

AIGC专栏2——Stable Diffusion结构解析-以文本生成图像(文生图,txt2img)为例 学习前言源码下载地址网络构建一、什么是Stable Diffusion(SD)二、Stable Diffusion的组成三、生成流程1、文本编码2、采样流程a、生成初始噪声b、对噪声进行N次采样c、单次采样解析I、预测噪声II、施加噪声 d、预测噪声过程中的网络结构解析I、apply_model方法解析II、UNetModel模型解析 3、隐空间解码生成图片 文本到图像预测过程代码 学习前言 用了很久的Stable Diffusion,但从来没有好好解析过它内部的结构,写个博客记录一下,嘿嘿。 源码下载地址 https://github.com/bubbliiiing/stable-diffusion 喜欢的可以点个star噢。 网络构建 一、什么是Stable Diffusion(SD) Stable Diffusion是比较新的一个扩散模型,翻译过来是稳定扩散,虽然名字叫稳定扩散,但实际上换个seed生成的结果就完全不一样,非常不稳定哈。 Stable Diffusion最开始的应用应该是文本生成图像,即文生图,随着技术的发展Stable Diffusion不仅支持image2image图生图的生成,还支持ControlNet等各种控制方法来定制生成的图像。 Stable Diffusion基于扩散模型,所以不免包含不断去噪的过程,如果是图生图的话,还有不断加噪的过程,此时离不开DDPM那张老图,如下: Stable Diffusion相比于DDPM,使用了DDIM采样器,使用了隐空间的扩散,另外使用了非常大的LAION-5B数据集进行预训练。 直接Finetune Stable Diffusion大多数同学应该是无法cover住成本的,不过Stable Diffusion有很多轻量Finetune的方案,比如Lora、Textual Inversion等,但这是后话。 本文主要是解析一下整个SD模型的结构组成,一次扩散,多次扩散的流程。 大模型、AIGC是当前行业的趋势,不会的话容易被淘汰,hh。 二、Stable Diffusion的组成 Stable Diffusion由四大部分组成。 1、Sampler采样器。 2、Variational Autoencoder (VAE) 变分自编码器。 3、UNet 主网络,噪声预测器。 4、CLIPEmbedder文本编码器。 每一部分都很重要,我们首先以文本生成图像为例进行解析。既然是文本生成图像,那么我们的输入也只剩下文本了,这时候没有输入图片。 三、生成流程 生成流程分为三个部分: 1、prompt文本编码。 2、进行若干次采样。 3、进行解码。 with torch.no_grad(): if seed == -1: seed = random.randint(0, 65535) seed_everything(seed) # ----------------------- # # 获得编码后的prompt # ----------------------- # cond = {"