浅谈SSRF

SSRF浅谈 服务器端请求伪造,攻击目标是外网无法访问的内部系统。 例: <?php echo file_get_contents($_GET['url']); ?> url=localhost/url.php?url=http://www.baidu.com 成功进行对百度的访问 SSRF危害 SSRF漏洞的验证 dnslog平台:requestbin ctf题目: 如果远端访问IP与本地地址不一样,拒绝访问;一样输出flag http://x.x.x.x/?url=flag.php 一些绕过 例:5.http://x.x.x.x/url.php?url=www.baidu.com@127.0.0.1(实际访问127.0.0.1)

Pycharm中配置不了conda解释器

我安装的是pytorch的CPU版本,在Pycharm中配置conda环境时,每次添加完都不显示,搜遍了很多方法都没用。最后成功解决,这里将一些方法进行总结,方便大家解决问题。 我的情况和解决 问题情况以及显示 1.在Pycharm的日志环境idea.log(C:\Users\Deadl\AppData\Local\JetBrains\PyCharmCE2023.1\log)中,有这样一条信息 2.在重启几次pycharm之后,它显示执行权限不够(这也是我之前一直没有的) CondaError: Unable to create prefix directory ‘E:\Anaconda3\envs…’.Check that you have sufficient permissions. 解决方法 利用管理员权限进入Pycharm,他自动识别出未添加的环境,成功配置上conda 整体解决思路 1.确定Anaconda环境变量配置正确 如果安装Anaconda时勾选了添加path,一般是配好的 确定pytorch安装成功 打开Anaconda Prompt,进入创建好的pytorch环境 activete PyTorch(创建的pytorch环境名称,我的是PyTorch) 检查是否安装成功 python import torch print(torch.__version__) 方法一:更改系统解释器 适用于日志同样报错的情况 更新成功后去添加conda解释器 方法二: Pycharm无法正确找到conda环境 参考这位大佬的回答和解决,链接 link

springboot 发送邮件实战(完整代码)

springboot 发送邮件实战 前言:在我们实际项目中,有一些需求涉及到使用邮箱发送邮件的功能。Spring 框架提供了使用JavaMailSender接口发送电子邮件的抽象,Spring Boot 为其提供了自动配置以及启动模块。所以我们使用实现邮件发送功能还是相对来比较简单,spring官网邮件发送功能:https://docs.spring.io/spring-boot/docs/current/reference/html/io.html#io.email 一、准备工作 发送邮箱要开启邮件服务(以163邮箱为例) 进入对应的发送邮箱的设置 开启IMAP或者POP3任意一个服务都可以 至此,准备工作已经结束。 二、进入项目代码环节 2.1 项目引入邮箱的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 2.2 邮件的基本配置 # 属性名称:属性类型 属性说明 # mail.smtp.user:String SMTP 的默认用户名。 # mail.smtp.host:String 要连接的 SMTP 服务器。 # mail.smtp.port:int 要连接的 SMTP 服务器端口,如果 connect() 方法没有明确指定一个。默认为 25。 # mail.smtp.connectiontimeout:int 以毫秒为单位的套接字连接超时值。这个超时是由 java.net.Socket 实现的。默认为无限超时。 # mail.smtp.timeout:int 以毫秒为单位的套接字读取超时值。这个超时是由 java.net.Socket 实现的。默认为无限超时。 # mail.smtp.writetimeout:int 以毫秒为单位的套接字写入超时值。此超时是通过对每个连接使用 java.util.concurrent.ScheduledExecutorService 来实现的, 该服务会在超时到期时安排线程关闭套接字。因此,使用此超时的开销是每个连接一个线程。默认为无限超时。 # mail.smtp.from:String 用于 SMTP MAIL 命令的电子邮箱地址。这将设置信封返回地址。默认为 msg.getFrom() 或 InternetAddress.getLocalAddress()。 注意:mail.smtp.user 以前用于此目的。 # mail.smtp.localhost:String SMTP HELO 或 EHLO 命令中使用的本地主机名。默认为InetAddress.

clickhouse(一)两分片两副本集群搭建

最近工作中遇到了clickhouse副本存储的问题,所以准备搭建一套clickhouse集群研究下,这里将搭建的过程和遇到的坑记录下,便于以后使用。下面是集群的大致分布以及具体的搭建流程。 1、准备两台虚拟机,分别安装clickhouse的服务端和客户端 准备的虚拟机是centos7。这里的安装过程是纯粹拷贝的官网命令,首先 验证虚拟机是否支持clickhouse的安装: grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported" 其次,安装clickhouse需要的依赖: sudo yum install yum-utils sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64 最后,一条语句安装clickhouse的服务端和客户端: sudo yum install clickhouse-server clickhouse-client 官网还有更多安装方式(参考地址:https://clickhouse.tech/docs/en/getting-started/install/),特别是如果最后一条安装客户端服务端命令失败时,可以直接下载对应的rpm包,常见的下载client、server、common三个包,因为正常yum命令安装也是安装这三个包,官网点击位置如下: 下载的样例如下: 下载完后,rpm安装命令如下: rpm -ivh clickhouse-common-static-21.7.2.7-2.x86_64.rpm clickhouse-client-21.7.2.7-2.noarch.rpm clickhouse-server-21.7.2.7-2.noarch.rpm 安装时,可能会需要输入默认用户的密码,一般是为空直接回车,如果设置了也没事,可以在安装完成后进入/etc/clickhouse-server/users.d/目录下,删除里面的文件即可。 2、启动和验证 这里仅是用于启动和验证刚才安装的服务是否可用,集群的验证在集群搭起来后进行。完成后,使用官网命令启动服务: clickhouse-server --config-file=/etc/clickhouse-server/config.xml 这个命令会把clickhouse-server进程的信息持续打印在当前窗口,如果报用户权限问题,如下: Effective user of the process (root) does not match the owner of the data (clickhouse). Run under 'sudo -u clickhouse'

TSN协议解读系列 | (3) Qci:说书唱戏劝人方

你是谁?你从哪里来?你到哪里去?这是柳国旅问的最多的三个问题。他总在想,上辈子的自己一定是一个哲学家,不然也不会和这三个问题的关系如此密切。他站的笔挺,耳边是蝉鸣,眼前是蓝天,身侧的街道喧喧嚷嚷,似乎…似乎传来了一声“小兔崽子”。 我是一个保安,保卫一方平安 “柳国旅是吗?我看看,应聘的门卫岗对吗?柳梦空老爷子介绍来的,你们啥关系呀?哦哦,那给你和老爷子安排在一个片区了。记得今天去办个健康证,明天来保安大队Qci中队报道。看你小子的名字就知道是干这块的料,加油好好干。” 带着一身装备,一本手册,一套被褥,年纪轻轻的柳国旅也算是踏入了儿时憧憬的殿堂,802.1大学,嗯…保安学院。他们班共有三人,除他外一个是他爹,柳梦空,一个是同姓不同家的前辈,柳纪良。同手册划分的那样,国旅管查证,梦空老爷子管大门,纪良管人流量,分工明确,保卫着校园的安全。 “倒霉孩子,生气老子,体贴袄子” 是是是,我知道没有什么比学生的事更重要了,国旅他也是太负责了才拦下的那几个学生。 是是是,我知道他们都带了学生卡,主要是手册里没写那个学院的学生可以过门禁,国旅才拦着他们不让进。 哎是是是,哪个学院都是我们的学生,主任你也知道,国旅他脑子一根筋,手册里面漏了这学院,他就认这个死理,我们过会儿把漏的补上。 (怒气值加载中) 柳国旅,你给我过来,你个“小兔崽子”成天给我惹事。不在名单是吧,不带学生卡是吧,优先级不对是吧,目的MAC不对是吧,你事怎么这么多呢,过来,我打不断你的狗腿。 爹别打,别打,这是上头要求的,你看这名单里也没说是802.1大学的就给过,都是细到每个学院的,这就是没写那几个同学的学院啊。 你个小兔崽子,哎哟,气死我了。 别气别气,生气对身体不好,快10点了,爹你别忘了关门,我先去前面轮岗去了,大门钥匙给你放桌上了。 (体贴感转变中) 纪良你咋来了,不在后面统计人数吗。 晚上啦,您都把所有门都关上了,我还统计个啥子哦。我看国旅他刚刚跑出门了,是不是又惹您生气了。莫气莫气,国旅他就是这样,但他实际还是特别尊重您的。 尊尊尊,尊个屁,一瓶速效救心丸都不够一天吃。还是纪良你好啊,都姓柳,那小子就是学不来一点你的稳重。 别这么说,TSN校委会那帮人可是欣赏国旅的紧,国旅看着是不正经了点,干活可是负责的很,这两年我们学校的成果可不少,老有人偷偷摸摸想进学校找那些教授,也不知道想做点啥子,学校里能够那么清净可多亏了国旅。 倒确实是负责,就是太轴了点,本来Qbv老师都帮我调好了,早上把门控系统和他们的状态机对接上,设些个开关时间,然后晚上把所有门都给关上就行,多清净。娘希匹的,自从这小兔崽子来了之后,一天十几二十来个投诉电话啊,都让老子管,老子管个锤锤。 哎哎,老爷子别气别气。 小鳄鱼爱洗澡,柳纪良爱计量 国旅,你怎么又给老爷子惹事了,我看老爷子这次是真的恼了,你也别不当回事,赶紧给赔个不是吧。 我哪惹事了,那通知就是没让那几个同学过嘛。哎,是我错了是我错了,明天我起早点,给他做点早饭带过去。对了纪良哥,你平时除了统计统计学生数量还要做点啥子。我看你上次给一片学生给揪出来了,那是咋回事,都给我讲讲呗。 我干的活啊,其实也挺简单的。国旅你平常站岗的时候肯定也发现了,我们学校的作息活动都是很规律的。所以呢,一段时间内大门过多少人基本都是可以确定的,即使有差别也不会很大。只要那本校流量和访客的流量在规定的时间内不超过一定的值呢,我就认为没有问题。上次那事也是这个道理,那个学院平时根本不会有那么多人进进出出,突然来了一大批,那我直接就给他们这学院的人全揪出来了,上头现在还在调查呢。 哦哦,没听明白。 行了行了,睡觉吧你。对了,以后再有拿不准的人想进来就去问柳诗别(流识别)吧,我打听了一下,手册里你那部分的内容很多都是她编的,明天我带你去见见她。 好哦,晚安纪良哥。 -END- 往期回顾 TSN协议解读系列 | (1) 帧抢占:br老先生的旅途 TSN协议解读系列 | (2) Qbv:车间里的求知路

如何获取api 接口数据

要获取API接口数据,通常需要以下步骤: 了解API接口:首先,你需要了解API接口的文档或规范。这些文档通常提供了关于如何调用API的详细信息,包括请求的URL、请求方法(GET、POST等)、参数和响应格式等。选择编程语言:根据你的需求和熟悉程度,选择一种编程语言来调用API。常见的编程语言包括Python、JavaScript、Java等。导入必要的库:在所选编程语言中,导入用于处理HTTP请求和JSON等数据的库。例如,在Python中,你可以使用requests库来发送HTTP请求,使用json库来处理JSON数据。发送HTTP请求:根据API文档中提供的请求示例,使用所选编程语言和相关库发送HTTP请求。你需要指定请求的URL、方法、参数和任何其他必要的头部或身份验证信息。解析响应数据:一旦你收到API的响应,你需要使用所选编程语言的相应库解析响应数据。通常,API响应会以JSON格式返回,因此你需要将响应数据解析为JSON对象。处理响应数据:根据你的需求,对解析后的响应数据进行处理。你可以将其保存到文件或数据库中,或者在应用程序中使用这些数据。 需要注意的是,不同的API可能会有不同的要求和限制。因此,在使用API之前,请仔细阅读API文档并遵守相关的使用条款和条件。 数据示例 Result Object: --------------------------------------- { "item": { "num_iid": "715314067434", "title": "品哥弟新秋冬装半高领网纱长袖T恤女蚕丝打底衫修身洋气加绒上衣", "desc_short": "", "price": 128, "total_price": "", "suggestive_price": "", "orginal_price": 620, "nick": "kaixi20100529", "num": 1613, "detail_url": "https://item.taobao.com/item.htm?id=715314067434", "pic_url": "//gd2.alicdn.com/imgextra/i4/1934891911/O1CN01JWMKb21PzHlEblABn_!!1934891911.jpg", "brand": "品哥弟新", "brandId": "", "rootCatId": "", "cid": 50000671, "desc": "<div >\n <div >\n <img src=\"http://img.alicdn.com/imgextra/i4/1934891911/O1CN01HEYcli1PzHlEwoawQ_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i3/1934891911/O1CN01X2Ejr01PzHlHL5v8w_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i1/1934891911/O1CN01QjFS3M1PzHlEwmRud_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i1/1934891911/O1CN01TFIVWJ1PzHl7s8bkC_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i2/1934891911/O1CN01YEwRsi1PzHlEwovke_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i2/1934891911/O1CN01pxjv9s1PzHlI7cYIL_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i3/1934891911/O1CN0136Qv7g1PzHluK7e75_!!1934891911.jpg\" />\n <img src=\"http://img.alicdn.com/imgextra/i3/1934891911/O1CN01HWYSwc1PzHluK76px_!!1934891911.jpg\" />\n <img src=\"

【MYSQL基础】一文总结MYSQL必须掌握的常用命令

文章目录 基础命令MYSQL注释方式连接数据库退出数据库连接查询MYSQL版本查看所有数据库使用数据库查看所选择数据库的所有表查看表的具体信息创建数据库查看创建数据库的语句修改用户密码数据表管理创建数据表查看创建数据表的语句查看表的结构修改表名删除表 数据表字段管理给指定表增加字段修改指定表的字段删除指定表的字段 给表添加外键创建表的时候增加外键给已有表添加外键外键使用建议 数据插入语句 INSERT数据插入一次性插入多条数据案例 数据更新语句 UPDATE没有指定匹配条件的话,会所有表的所有记录根据条件来修改记录一次性修改多个字段的值稍微高级一点的使用 where条件判空and和or的使用 数据删除 DELETE数据表清空 TRUNCATE数据查询语言Data Query LANGUAGE(DQL) SELECT查询一个表中的所有数据查询指定字段的数据给字段取别名给表取别名字符串拼接查询结果数据去重查询时增加计算模糊查询连接查询七种连接方式自连接 分页排序子查询查询常用函数分组过滤SELECT语法完整结构 数据加密 基础命令 MYSQL注释方式 -- 单行注释 /* 多行注释 哈哈哈哈哈 哈哈哈哈 */ 连接数据库 mysql -u root -p12345678 退出数据库连接 使用exit;命令可以退出连接 查询MYSQL版本 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.27 | +-----------+ 1 row in set (0.00 sec) 查看所有数据库 show databases; 使用数据库 如果想要操作数据库,需要使用use 数据库名;来选择要操作的数据库 查看所选择数据库的所有表 show tables; 查看表的具体信息 使用describe 表名;可以查看表中的字段信息 mysql> describe user; +--------------+---------------+------+-----+-------------------+-----------------------------------------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------+------+-----+-------------------+-----------------------------------------------+ | id | bigint | NO | PRI | NULL | auto_increment | | userName | varchar(256) | YES | | NULL | | | userAccount | varchar(256) | NO | UNI | NULL | | | userAvatar | varchar(1024) | YES | | NULL | | | gender | tinyint | YES | | NULL | | | userRole | varchar(256) | NO | | user | | | userPassword | varchar(512) | NO | | NULL | | | accessKey | varchar(512) | YES | | NULL | | | secretKey | varchar(512) | YES | | NULL | | | createTime | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updateTime | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | | isDelete | tinyint | NO | | 0 | | +--------------+---------------+------+-----+-------------------+-----------------------------------------------+ 12 rows in set (0.

微服务那些事

1、您对微服务有何了解? 微服务,又称微服务 架构,是一种架构风格,它将应用程序构建为以业务领域为 模型的小型自治服务集合 。 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。 他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。这些细 胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。这里,每个细胞 独立于另一个细胞,但它也与其他细胞相关。这意味着对一个细胞的损害不会损 害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。 图 1:微服务的 蜂窝表示 – 微服务访谈问题 请参考上图。这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似, 每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在 蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。 此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响 或影响最小。 2、微服务架构有哪些优势? 图 2:微服务的 优点 – 微服务访谈问题 独立开发 – 所有微服务都可以根据各自的功能轻松开发 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同 服务 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起 3、微服务有哪些特点? 图 3:微服务的 特点 – 微服务访谈问题 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展 组件化 – 微服务被视为可以轻松更换和升级的独立组件 业务能力 – 微服务非常简单,专注于单一功能 自治 – 开发人员和团队可以彼此独立工作,从而提高速度 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他 们负责的产品 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准 化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃 4、设计微服务的最佳实践是什么? 以下是设计微服务的最佳实践: 图 4:设计微服务的最佳实践 – 微服务访谈问题 5、微服务架构如何运作? 微服务架构具有以下组件: 图 5:微服务 架构 – 微服务面试问题 客户端 – 来自不同设备的不同用户发送请求。 身份提供商 – 验证用户或客户身份并颁发安全令牌。 API 网关 – 处理客户端请求。 静态内容 – 容纳系统的所有内容。 管理 – 在节点上平衡服务并识别故障。 服务发现 – 查找微服务之间通信路径的指南。 内容交付网络 – 代理服务器及其数据中心的分布式网络。 远程服务 – 启用驻留在 IT 设备网络上的远程访问信息。 6、微服务架构的优缺点是什么? 7、单片,SOA 和微服务架构有什么区别? 图 6: 单片 SOA 和微服务之间的比较 – 微服务访谈问题 单片架构 类似于大容器,其中应用程序的所有软件组件组装在一起并紧密 封装。 一个 面向服务的架构 是一种相互通信服务的集合。通信可以涉及简单的数 据传递,也可以涉及两个或多个协调某些活动的服务。 微服务架构 是一种架构风格,它将应用程序构建为以业务域为模型的小型 自治服务集合。 8、在使用微服务架构时,您面临哪些挑战? 开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。 自动化组件 :难以自动化,因为有许多较小的组件。因此,对于每个组件, 我们必须遵循 Build,Deploy 和 Monitor 的各个阶段。 易感性 :将大量组件维护在一起变得难以部署,维护,监控和识别问题。 它需要在所有组件周围具有很好的感知能力。 配置管理 :有时在各种环境中维护组件的配置变得困难。 调试 :很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试 问题至关重要。 9、SOA 和微服务架构之间的主要区别是什么? SOA 和微服务之间的主要区别如下: 10、微服务有什么特点? 您可以列出微服务的特征,如下所示: 图 7:微服务的特征 – 微服务访谈问题 11、什么是领域驱动设计? 图 8: DDD 原理 – 微服务面试问题 12、为什么需要域驱动设计(DDD)? 图 9:我们需要 DDD 的因素 – 微服务面试问题 13、什么是无所不在的语言? 如果您必须定义 泛在语言(UL) ,那么它是特定域的开发人员和用户使用的通用 语言,通过该语言可以轻松解释域。 无处不在的语言必须非常清晰,以便它将所有团队成员放在同一页面上,并以机 器可以理解的方式进行翻译。 14、什么是凝聚力? 模块内部元素所属的程度被认为是 凝聚力 。 15、什么是耦合? 组件之间依赖关系强度的度量被认为是 耦合 。一个好的设计总是被认为具有 高内 聚力 和 低耦合性 。 16、什么是 REST / RESTful 以及它的用途是什么? Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计 算机系统通过 Internet 进行通信的架构风格。这使得微服务更容易理解和实现。 微服务可以使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合 的微服务总是更容易。 17、你对 Spring Boot 有什么了解? 事实上,随着新功能的增加,弹簧变得越来越复杂。如果必须启动新的 spring 项 目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring 配置。所以一切都必须从头开始。 Spring Boot 是解决这个问题的方法。使用 spring boot 可以避免所有样板代码 和配置。因此,基本上认为自己就好像你正在烘烤蛋糕一样,春天就像制作蛋糕 所需的成分一样,弹簧靴就是你手中的完整蛋糕。 图 10: Spring Boot 的因素 – 微服务面试问题 18、什么是 Spring 引导的执行器? Spring Boot 执行程序提供了 restful Web 服务,以访问生产环境中运行应用程序 的当前状态。在执行器的帮助下,您可以检查各种指标并监控您的应用程序。 19、什么是 Spring Cloud? 根据 Spring Cloud 的官方网站,Spring Cloud 为开发人员提供了快速构建分布 式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由, 领导选举,分布式会话,集群状态)。 20、Spring Cloud 解决了哪些问题? 在使用 Spring Boot 开发分布式微服务时,我们面临的问题很少由 Spring Cloud 解决。 与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安 全问题。 处理服务发现的能力 – 服务发现允许集群中的进程和服务找到彼此并进 行通信。 解决冗余问题 – 冗余问题经常发生在分布式系统中。 负载平衡 – 改进跨多个计算资源(例如计算机集群,网络链接,中央处 理单元)的工作负载分布。 减少性能问题 – 减少因各种操作开销导致的性能问题。 21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处? 在测试目标只关注 Spring MVC 组件的情况下, WebMvcTest 注释用于单元测试 Spring MVC 应用程序。在上面显示的快照中,我们只想启动 ToTestController。 执行此单元测试时,不会启动所有其他控制器和映射。 22。你能否给出关于休息和微服务的要点? 虽然您可以通过多种方式实现微服务,但 REST over HTTP 是实现微服务的一种 方式。REST 还可用于其他应用程序,如 Web 应用程序,API 设计和 MVC 应用程 序,以提供业务数据。 微服务是一种体系结构,其中系统的所有组件都被放入单独的组件中,这些组件 可以单独构建,部署和扩展。微服务的某些原则和最佳实践有助于构建弹性应用 程序。 简而言之,您可以说 REST 是构建微服务的媒介。 23、什么是不同类型的微服务测试? 在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试 分为不同的级别。 在 底层 ,我们有 面向技术的测试, 如单元测试和性能测试。这些是完全自 动化的。 在 中间层面 ,我们进行了诸如压力测试和可用性测试之类的 探索 性测试。 在 顶层, 我们的 验收测试 数量很少。这些验收测试有助于利益相关者理 解和验证软件功能。 24、您对 Distributed Transaction 有何了解? 分布式事务 是指单个事件导致两个或多个不能以原子方式提交的单独数据源的突 变的任何情况。在微服务的世界中,它变得更加复杂,因为每个服务都是一个工 作单元,并且大多数时候多个服务必须协同工作才能使业务成功。 25、什么是 Idempotence 以及它在哪里使用? 幂等 性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像 它只做了一次。 用法 :在远程服务或数据源中 使用 Idempotence,这样当它多次接收指令时,它 只处理指令一次。 26、什么是有界上下文? 有界上下文是域驱动设计的核心模式。DDD 战略设计部门的重点是处理大型模型 和团队。DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理 大型模型。 27、什么是双因素身份验证? 双因素身份验证为帐户登录过程启用第二级身份验证。 图 11: 双因素认证的表示 – 微服务访谈问题 因此,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。 28、双因素身份验证的凭据类型有哪些? 这三种凭证是: 图 12: 双因素认证的证书类型 – 微服务面试问题 29、什么是客户证书? 客户端系统用于向远程服务器发出经过身份验证的请求的一种数字证书称为 客户 端证书 。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身 份提供了强有力的保证。 30、PACT 在微服务架构中的用途是什么? PACT 是一个开源工具,允许测试服务提供者和消费者之间的交互,与合同隔离, 从而提高微服务集成的可靠性。 微服务中的用法 用于在微服务中实现消费者驱动的合同。 测试微服务的消费者和提供者之间的消费者驱动的合同。 查看即将到来的批次 31、什么是 OAuth? OAuth 代表开放授权协议。这允许通过在 HTTP 服务上启用客户端应用程序(例 如第三方提供商 Facebook,GitHub 等)来访问资源所有者的资源。因此,您可 以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。 32、康威定律是什么? “任何 设计 系统 的组 织( 广泛 定义 )都 将产 生一 种设 计, 其结 构是 组织 通信 结构 的副 本。” – Mel Conway 图 13: Conway 定律的表示 – 微服务访谈问题 该法律基本上试图传达这样一个事实:为了使软件模块起作用,整个团队应该进 行良好的沟通。因此,系统的结构反映了产生它的组织的社会边界。 33、合同测试你懂什么? 根据 Martin Flower 的说法, 合同测试 是在外部服务边界进行的测试,用于验证 其是否符合消费服务预期的合同。 此外,合同测试不会深入测试服务的行为。更确切地说,它测试该服务调用的输 入&输出包含所需的属性和所述响应延迟,吞吐量是允许的限度内。 34、什么是端到端微服务测试? 端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体 协同工作并满足所有要求。 通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。 图 14: 测试层次 – 微服务面试问题 35、Container 在微服务中的用途是什么? 容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法 。 您可以将 微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务, 而无需任何额外的工作。 图 15: 容器的表示及其在微服务中的使用方式 – 微服务访谈问题 36、什么是微服务架构中的 DRY? DRY 代表 不要重复自己 。它基本上促进了重用代码的概念。这导致开发和共享库, 这反过来导致紧密耦合。 37、什么是消费者驱动的合同(CDC)? 这基本上是用于开发微服务的模式,以便它们可以被外部系统使用。当我们处理 微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者。 通常,提供程序在 XML 文档中指定接口。但在消费者驱动的合同中,每个服务消 费者都传达了提供商期望的接口。 38、Web,RESTful API 在微服务中的作用是什么? 微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。因 此,要实现这一点,每个微服务必须具有接口。这使得 Web API 成为微服务的一 个非常重要的推动者。RESTful API 基于 Web 的开放网络原则,为构建微服务架 构的各个组件之间的接口提供了最合理的模型。 39、您对微服务架构中的语义监控有何了解? 语义监控,也称为 综合监控, 将自动化测试与监控应用程序相结合,以检测业 务失败因素。 40、我们如何进行跨功能测试? 跨功能测试是对非功能性需求的验证,即那些无法像普通功能那样实现的需求。 41、我们如何在测试中消除非决定论? 非确定性测试 (NDT)基本上是不可靠的测试。所以,有时可能会发生它们通过, 显然有时它们也可能会失败。当它们失败时,它们会重新运行通过。 从测试中删除非确定性的一些方法如下: 1、 隔离 2、 异步 3、 远程服务 4、 隔离 5、 时间 6、 资源泄漏 42、Mock 或 Stub 有什么区别? 存根 一个有助于运行测试的虚拟对象。 在某些可以硬编码的条件下提供固定行为。 永远不会测试存根的任何其他行为。 例如,对于空堆栈,您可以创建一个只为 empty()方法返回 true 的存根。因此, 这并不关心堆栈中是否存在元素。 嘲笑 一个虚拟对象,其中最初设置了某些属性。 此对象的行为取决于 set 属性。 也可以测试对象的行为。 例如,对于 Customer 对象,您可以通过设置名称和年龄来模拟它。您可以将 age 设置为 12,然后测试 isAdult()方法,该方法将在年龄大于 18 时返回 true。因 此,您的 Mock Customer 对象适用于指定的条件。 43、您对 Mike Cohn 的测试金字塔了解多少? Mike Cohn 提供了一个名为 Test Pyramid 的模型 。 这描述了软件开发所需的自 动化测试类型。 图 16: Mike Cohn 的测试金字塔 – 微服务面试问题 根据金字塔,第一层的测试数量应该最高。在服务层,测试次数应小于单元测试 级别,但应大于端到端级别。 44、Docker 的目的是什么? Docker 提供了一个可用于托管任何应用程序的容器环境。在此,软件应用程序和 支持它的依赖项紧密打包在一起。 因此,这个打包的产品被称为 Container ,因为它是由 Docker 完成的,所以它 被称为 Docker 容器! 45、什么是金丝雀释放? Canary Releasing 是一种降低在生产中引入新软件版本的风险的技术。这是通过 将变更缓慢地推广到一小部分用户,然后将其发布到整个基础架构,即将其提供 给每个人来完成的。 46、什么是持续集成(CI)? 持续集成(CI) 是每次团队成员提交版本控制更改时自动构建和测试代码的过程。 这鼓励开发人员通过在每个小任务完成后将更改合并到共享版本控制存储库来共 享代码和单元测试。 47、什么是持续监测? 持续监控 深入监控覆盖范围,从浏览器内前端性能指标,到应用程序性能,再到 主机虚拟化基础架构指标。 48、架构师在微服务架构中的角色是什么? 微服务架构中的架构师扮演以下角色: 决定整个软件系统的布局。 帮助确定组件的分区。因此,他们确保组件相互粘合,但不紧密耦合。 与开发人员共同编写代码,了解日常生活中面临的挑战。 为开发微服务的团队提供某些工具和技术的建议。 提供技术治理,以便技术开发团队遵循微服务原则。 49、我们可以用微服务创建状态机吗? 我们知道拥有自己的数据库的每个微服务都是一个可独立部署的程序单元,这反 过来又让我们可以创建一个状态机。因此,我们可以为特定的微服务指定不同的 状态和事件。 例如,我们可以定义 Order 微服务。订单可以具有不同的状态。Order 状态的转 换可以是 Order 微服务中的独立事件。 50、什么是微服务中的反应性扩展? Reactive Extensions 也称为 Rx。这是一种设计方法,我们通过调用多个服务来 收集结果,然后编译组合响应。这些调用可以是同步或异步,阻塞或非阻塞。Rx 是分布式系统中非常流行的工具,与传统流程相反。 翻译来源: https://www.

MySQL那些事

1、MySQL 中有哪几种锁? 1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最 高,并发度最低。 2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最 低,并发度也最高。 3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表 锁和行锁之间,并发度一般。 2、MySQL 中有哪些不同的表格? 共有 5 种类型的表格: 1、MyISAM 2、Heap 3、Merge 4、INNODB 5、ISAM 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作是对整个表加锁; 存储表的总行数; 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件; 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引 基本一致,但是辅索引不用保证唯一性。 InnoDb: 支持 ACID 的事务,支持事务的四种隔离级别; 支持行级锁及外键约束:因此可以支持写并发; 不存储总行数: 一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制, 一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受 操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制; 主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存 储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅 索引;最好使用自增主键,防止插入数据时,为维持 B+树结构,文件的大调整。 4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? SQL 标准定义的四个隔离级别为: 1、read uncommited :读到未提交数据 2、read committed:脏读,不可重复读 3、repeatable read:可重读 4、serializable :串行事物 5、CHAR 和 VARCHAR 的区别? 1、CHAR 和 VARCHAR 类型在存储和检索方面有所不同 2、CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR 值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。 6、主键和候选键有什么区别? 表格的每一行都由主键唯一标识,一个表只有一个主键。 主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键 引用。 7、myisamchk 是用来做什么的? 它用来压缩 MyISAM 表,这减少了磁盘或内存使用。 MyISAM Static 和 MyISAM Dynamic 有什么区别? 在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT, BLOB 等字段,以适应不同长度的数据类型。 MyISAM Static 在受损情况下更容易恢复。 8、如果一个表有一列定义为 TIMESTAMP,将发生什么? 每当行被更改时,时间戳字段将获取当前时间戳。 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况? 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。 怎样才能找出最后一次插入时分配了哪个自动增量? LAST_INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指 定表名称。 9、你怎么看到为表格定义的所有索引? 索引是通过以下方式为表格定义的: SHOW INDEX FROM <tablename>; 10、LIKE 声明中的%和_是什么意思? %对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。 如何在 Unix 和 MySQL 时间戳之间进行转换? UNIX_TIMESTAMP 是从 MySQL 时间戳转换为 Unix 时间戳的命令 FROM_UNIXTIME 是从 Unix 时间戳转换为 MySQL 时间戳的命令 11、列对比运算符是什么? 在 SELECT 语句的列比较中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND, OR 或 LIKE 运算符。 12、BLOB 和 TEXT 有什么区别? BLOB 是一个二进制对象,可以容纳可变数量的数据。TEXT 是一个不区分大小写 的 BLOB。 BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小 写,对 TEXT 值不区分大小写。 13、MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么? 以下是 MySQL_fetch_array 和 MySQL_fetch_object 的区别: MySQL_fetch_array() – 将结果行作为关联数组或来自数据库的常规数组返回。 MySQL_fetch_object – 从数据库返回结果行作为对象。 14、MyISAM 表格将在哪里存储,并且还提供其存储格式? 每个 MyISAM 表格以三种格式存储在磁盘上: ·“.

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法!!!

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法 cuda10.0以及cudnn7.4现在以及安装完成,就差torch的安装了,现在torch我要装的是1.2.0版本的,安装包以及下载好了,安装包都是在这个网站里下载的(点此进入),但是conda install torch-1.2.0-cp36-cp36m-win_amd64.whl安装命令执行之后一直报错,信息如下:Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve.后边还有很多就不展示了。 Solving environment: unsuccessful initial attempt using frozen solve. Retrying with flexible solve. 经查是因为有依赖不完整导致conda不执行安装(后来发现可能是没有numpy的原因,不要问为什么没有numpy,因为这是创建的新的环境,conda好像自己安装的库好像不包括numpy),查了很多信息都没有找到解决办法,然后我突发奇想试试能不能用pip install指令安装,结果通过这种方式真的成功了!!!太激动了,因为pip安装的时候它会把缺失的依赖自动下载,而conda不会这么做!!! 如下是解决方法 pip安装 pip install torch-1.2.0-cp36-cp36m-win_amd64.whl 最后进入python中执行以下代码就可以查看cuda和cudnn版本号了,输出正常就是成功了!如下图。倒腾好久好久的,终于成功将cuda、cudnn、torch全部安装成功了!!!鸡冻啊! 有不懂的可以在评论区留言~

C语言作业(部分)

3.题干: 编写程序,要求程序运行时,从键盘输入一个三位正整数,将它反向输出。(提示:若输入的不是正整数,输出error!若输 入三位正整数的个位数为0,十位数不为0,则输出十位数和百位数;若输入三位正整数的个位数和十位数均为0,则输出百 位数。) #include<stdio.h> int main() { int n,x,m; scanf("%d",&n); x=n; if(n>0) { if(n%10!=0) { n/=10; if(n%10!=0) { while(x>0) { m=x%10; x/=10; printf("%d",m); } } }else{ n/=10; if(n%10!=0) { x/=10; while(x>0) { m=x%10; x/=10; printf("%d",m); } }else{ x/=10; x/=10; m=x; printf("%d",m); } } }else{ printf("error!"); } return 0; } 4.题干: 编写程序,根据利润计算奖金。要求程序运行时,从键盘输入利润,计算并输出奖金(结果保留两位小数)。已知,利润低 于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可 提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100 万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发 放奖金总数? 输入输出格式请严格按如下示例要求,格式不正确不得分。 示例:(说明:表示空格键 表示回车键) 输入数据为:120000 输出结果为:11500.00 #include<stdio.h> int main() { int n;//利润 double prize; scanf("

kafka知识点整理

Kafka 是什么 Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目 Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性 Kafka 核心组件 Producer:消息生产者,产生的消息将会被发送到某个topic Consumer:消息消费者,消费的消息内容来自某个topic Topic:消息根据topic进行归类,topic其本质是一个目录,即将同一主题消息归类到同一个目录 Broker:每一个kafka实例(或者说每台kafka服务器节点)就是一个broker,一个broker可以有多个topic Zookeeper:zookeeper集群不属于kafka内的组件,但kafka依赖zookeeper集群保存meta信息,所以在此做声明其重要性。 Kafka 整体架构以及解析 Kafka数据处理步骤 1、Producer产生消息,发送到Broker中2、Leader状态的Broker接收消息,写入到相应topic中3、Leader状态的Broker接收完毕以后,传给Follow状态的Broker作为副本备份4、Consumer消费Broker中的消息 Kafka名词解释和工作方式 Producer 消息生产者,就是向kafka broker发消息的客户端。 Consumer 消息消费者,向kafka broker取消息的客户端 Topic 可以理解为一个队列。 Consumer Group (CG) 这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。 Broker 一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。 Partition 为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。 Consumer与topic关系 kafka只支持Topic 每个group中可以有多个consumer,每个consumer属于一个consumer group;通常情况下,一个group中会包含多个consumer,这样不仅可以提高topic中消息的并发消费能力,而且还能提高"故障容错"性,如果group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管。 对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer;那么一个group中所有的consumer将会交错的消费整个Topic,每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻); 一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息。 kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。 kafka只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。 Kafka消息的分发 Producer客户端负责消息的分发 kafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含"集群中存活的servers列表"、"partitions leader列表"等信息; 当producer获取到metadata信息之后, producer将会和Topic下所有partition leader保持socket连接; 消息由producer直接通过socket发送到broker,中间不会经过任何"路由层"。事实上,消息被路由到哪个partition上由producer客户端决定,比如可以采用"random""key-hash""轮询"等。 如果一个topic中有多个partitions,那么在producer端实现"消息均衡分发"是必要的。 在producer端的配置文件中,开发者可以指定partition路由的方式。 Producer消息发送的应答机制 设置发送数据是否需要服务端的反馈,有三个值0,1,-1 0: producer不会等待broker发送ack 1: 当leader接收到消息之后发送ack -1: 当所有的follower都同步消息成功后发送ack request.required.acks=0 Consumer的负载均衡 当一个group中,有consumer加入或者离开时,会触发partitions均衡.均衡的最终目的,是提升topic的并发消费能力,步骤如下: 1、假如topic1,具有如下partitions: P0,P1,P2,P3 2、加入group A 中,有如下consumer: C0,C1

KKFileView 4.3 Centos7.9安装部署

安装介质版本 文件预览:KKFile V4.3.0 官网 OFFICE插件:libreoffice7.6 操作系统:CentOS Linux release 7.9.2009 (Core) 字体包:字体 安装Office插件 下载好Office插件后,开始安装: 解压压缩文件: tar -zxvf LibreOffice_7.6.2_Linux_x86-64_rpm.tar.gz 进入RPM文件目录: cd LibreOffice_7.6.2.1_Linux_x86-64_rpm/RPM 执行安装指令: rpm -ivh *.rpm 或者 yum localinstall *.rpm 安装字体 大部分Linux系统上并没有预装中文字体或字体不全,需要把常用字体拷贝到Linux服务器上,具体操作如下: 下载如下字体包 http://kkfileview.keking.cn/fonts.zip 文件解压完整拷贝到Linux下的 /usr/share/fonts目录。 然后依次执行mkfontscale 、mkfontdir 、fc-cache使字体生效。 cd /usr/share/fonts mkfontscale mkfontdir fc-cache 安装KKFILEVIEW 俩种方式,一是氪金,99米加入星球获取。 另外一种是,现在源代码,本地编译。 https://gitee.com/kekingcn/file-online-preview 1. 从码云仓库拉取代码 # git clone https://gitee.com/kekingcn/file-online-preview.git 2. 使用maven编译打包 # cd file-online-preview mvn clean package -DskipTests 3. 使用docker构建镜像 # docker build -t keking/kkfileview:v4.0.0 . 不管是哪种方式,将得到的gz压缩包上传到服务器安装目录。

Java附件和base64相互转换

1 文件转base64 声明:我用的是Hutool的Base64下的api package cn.hutool.core.codec; 首先找一张图片 很简单,直接使用Base64的encode方法就可以拿到文件的base64码: File file = new File("D:\\Tools\\Images\\北极熊.jpg"); String encode = Base64.encode(file); 通过断点,可以看到附件的base64就是一串很长的字符串。 2 base64转文件 拿到附件的base64之后,就可以通过该方法进行转换为附件 /** * @description base64转附件 * @date 17:17 2023/11/7 * @param base64 附件的base64码 * @param filePath 存储路径 * @return java.io.File **/ public static File base64ToFile(String base64, String filePath) { File file = new File(filePath); byte[] buffer; try { BASE64Decoder base64Decoder = new BASE64Decoder(); buffer = base64Decoder.decodeBuffer(base64); FileOutputStream out = new FileOutputStream(filePath); out.

HTML使用canvas绘制海报(网络图片)

生成前: 生成后: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>媒体参会嘉宾邀请函生成链接</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vant@2.10/lib/index.css" /> <style> #app { width: 100vw; position: relative; } * { margin: 0; padding: 0; } [v-cloak] { display: none; } .bg { width: 100vw; height: 100vh; min-height: 100vh; position: relative; overflow: hidden; } #scream { width: 100%; height: 100%; } .closeImg { width: 34px; height: 34px; } .pop { position: absolute; top: 0; left: 0; height: 100%; width: 100%; background: rgba(0, 0, 0, 0.

Chrome 插件开发 V3版本 跨域处理

插件构成 chrome 插件通常由以下几部分组成: manifest.json:相当于插件的 meta 信息,包含插件的名称、版本号、图标、脚本文件名称等,这个文件是每个插件都必须提供的,其他几部分都是可选的。 background script:可以调用全部的 chrome 插件 API,实现跨域请求、网页截屏、弹出 chrome 通知消息等功能。相当于在一个隐藏的浏览器页面内默默运行。 功能页面:包括点击插件图标弹出的页面(简称 popup)、插件的配置页面(简称 options)。 content script:早期也被称为 injected script,是插件注入到页面的脚本,但是不会体现在页面 DOM 结构里。content script 可以操作 DOM,但是它和页面其他的脚本是隔离的,访问不到其他脚本定义的变量、函数等,相当于运行在单独的沙盒里。content script 可以调用有限的 chrome 插件 API,网络请求收到同源策略限制。 插件的架构可以参考官方文档。 重点说明以下几点: browser action 和 page action:这俩我们可以理解为插件的按钮。browser action 会固定在 chrome 的工具栏。而 page action 可以设置特定的网页才显示图标,在地址栏的右端,如下图: 大部分插件点击之后会显示 UI,也就是上文描述的插件功能页面部分,一般称为 popup 页面,如下图: popup 无法通过程序打开,只能由用户点击打开。点击 popup 之外的区域会导致 popup 收起。 page action 和 browser action 分别由 manifest.json 的 page_action 和 browser_action 字段配置。 由于 content script 受到同源策略的限制,所以一般网络请求都交给 background script 处理。

java 通过指定url地址下载文件到本地工具类(包含https的数字签名请求)

java 通过指定url地址下载文件到本地工具类(包含https的数字签名请求) XFileUtils public class XFileUtils { /** * 从网络Url中下载文件 * @param urlStr url的路径 * @throws IOException */ public static String downLoadByUrl(String urlStr,String savePath, String fileName) { if (StrUtil.isBlank(fileName)) { fileName = getFileName(urlStr); } InputStream inputStream = null; FileOutputStream fos = null; try { URL url = new URL(urlStr); // 防止https被证书校验报错,信任所有证书 if(urlStr.contains("https")){ SslUtils.ignoreSsl(); } HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置超时间为10秒 conn.setConnectTimeout(10 * 1000); //得到输入流 inputStream = conn.getInputStream(); //获取自己数组 byte[] getData = readInputStream(inputStream); //文件保存位置 File saveDir = new File(savePath); if (!

Java中5种List的去重方法及它们的效率对比,你用对了吗?

01、使用两个for循环实现List去重(有序) /**使用两个for循环实现List去重(有序) * * @param list * */ public static List removeDuplicationBy2For(List<Integer> list) { for (int i=0;i<list.size();i++) { for (int j=i+1;j<list.size();j++) { if(list.get(i).equals(list.get(j))){ list.remove(j); } } } return list; } 02、使用List集合contains方法循环遍历(有序) /**使用List集合contains方法循环遍历(有序) * * @param list * */ public static List removeDuplicationByContains(List<Integer> list) { List<Integer> newList =new ArrayList<>(); for (int i=0;i<list.size();i++) { boolean isContains =newList.contains(list.get(i)); if(!isContains){ newList.add(list.get(i)); } } list.clear(); list.addAll(newList); return list; } 03、使用HashSet实现List去重(无序) /**使用HashSet实现List去重(无序) * * @param list * */ public static List removeDuplicationByHashSet(List<Integer> list) { HashSet set = new HashSet(list); //把List集合所有元素清空 list.

微信小程序开发-微信支付退款功能以及退款回调方法【WxPayRefundV3版本 附有完整代码】

之前有写过详细的微信支付功能:微信支付 我们使用weixin-java-pay的jar包等,配置上的流程同微信支付,可以看上面的文章。 退款使用的WxPayService类的refundV3方法。使用该方法需要在微信支付配置的基础上加上:apiclient_key.pem 证书文件、 apiclient_cert.pem证书文件、apiV3 秘钥值的配置 一、退款功能 1、下载API证书,并放到程序的指定位置 按照指引下载后解压内容如下,放到程序的resource下面 放置的程序路径如下: 2、在yml配置文件中定义 wechat: appid: secret: # 商户 mchId: # 秘钥 mchKey: apiV3Key: # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头) keyPath: classpath:apiclient_cert.p12 privateKeyPath: classpath:apiclient_key.pem privateCertPath: classpath:apiclient_cert.pem #JSAPI--公众号支付 NATIVE--原生扫码支付 APP--app支付 tradeType: JSAPI notifyUrl: #支付回调方法地址 refundNotifyUrl: #退款回调方法地址 3、在原有的WxProperties和WxConfig中对WxPayService配置的内容中进行新增内容。 WxProperties: WxConfig:【这里的setNotifyUrl的地址是支付回调的地址】 4、调用退款方法定义以及调用 /** * 微信支付退款 * @param orderNo * @param amount * @return */ public Result<WxPayRefundV3Result> rebackPay(String orderNo,Integer amount){ Result<WxPayRefundV3Result> res = new Result<WxPayRefundV3Result>(); //微信支付-申请退款请求参数 WxPayRefundV3Request request = new WxPayRefundV3Request(); WxPayRefundV3Request.

jeecgboot vue3使用JAreaSelect地区选择组件时返回省市区的编码,如何获取到选择地区的文字

JAreaSelect文档地址:添加链接描述 当我们的BasicForm表单组件中使用选择省市区的JAreaSelect组件时,获取到的返回值是地区的编码,如“530304”这样子,但我在小程序中展示数据的时候需要明确的地址,如“云南省昆明市五华区”,我们可以在前端原有的工具类中添加转换方法来实现。 1、看组件代码 首先用一个JSON文件来存储所有的省市区数据,然后用3个下拉款选择省市区,数据转换是在一个areaDataUtil.js文件中来实现的。 JSON文件:86是所有的省,然后是各个市以及县区 省市区选择组件: 工具类areaDataUtil.js 2、在我的程序中,表单提交时获取到了值,通过地区的code值转换为文字值 getTextByCode方法直接加在了areaDataUtil.js方法中: function getTextByCode(code) { //6位的编码 let proCode = code.substr(0,2).concat("0000"); let protext = provinceObject[proCode]; let shiCode = code.substr(0,4).concat("00"); let shiData = REGION_DATA[proCode]; let shitext = shiData[shiCode] let quCode = code; let quData = REGION_DATA[shiCode]; let qutext = quData[quCode] return protext+shitext+qutext; // 省份汉字 } 其实记录主要的不是为了这个方法,这方法也很简单,而是想要记住省市区数据的JSON数据和工具类,以后在我需要用到这些数据的时候可以看到自己的这个文章然后找到这个数据来直接使用哈哈哈哈哈。

WPS关联EndNote X9

EndNote X9-王进 WPS加载项没有EndNote? 原因: 1.EndNote是64位的,安装时自动在C:\Program Files\Common Files\ResearchSoft\Cwyw\19生成了供office加载的dll。但是并没有在C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19创建文件。 2.WPS是32位的,要关联endnote需要在C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19下去找,根据1的陈述铁定找不到,所以wps不会显示endnote加载项。 解决办法: 1.手动创建C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19文件夹,需要注意的是19对应的是X9,如果是20对应的就是endnote20,这是版本号 2.在endnote安装路径(我的是D:\Softsware\endnotex9)下找到D:\endnotex9\Product-Support\CWYW 下的Cwyw_x86.dat ,并且将它的后缀名改为.rar ,然后解压缩到当前文件夹下。最后把解压文件夹下的所有文件复制到C:\Program Files (x86)\Common Files\ResearchSoft\Cwyw\19文件夹下。 注意:如果打开WPS看不到endnote,需要以管理员身份运行WPS

STM32的M4内核在keil上面float访问就hard_fault原因

使用 Keil MDK(Microcontroller Development Kit)开发时,出现硬件故障(hard fault)通常是由于访问浮点数(float)数据类型时,浮点单元配置不正确或浮点单元启用导致的。以下是一些可能导致硬件故障的原因以及解决方法: 浮点单元未启用:STM32F4 系列微控制器具有浮点单元(FPU),但默认情况下可能未启用浮点运算支持。如果你的应用程序中使用了浮点数,确保在 Keil 中启用了浮点单元支持。 在 Keil 中,选择 "Options for Target"。在 "C/C++" 选项卡下,选择 "Floating Point Hardware"。选择 "Single Precision" 或 "Double Precision",具体取决于你的应用程序需要的精度。 硬件浮点单元配置不正确:在 STM32F4 中,硬件浮点单元的配置需要匹配你的应用程序。确保你的项目配置正确,包括浮点单元的精度和其他设置。 中断优先级不正确:如果你的应用程序中有使用浮点数的中断处理程序,确保这些中断的优先级设置正确。优先级不正确可能导致硬件故障。 浮点数操作不正确:确保你的代码正确处理浮点数。浮点数计算可能会引入舍入误差和其他问题,因此在浮点数操作中要特别小心。如果可能的话,使用整数操作代替浮点操作。 栈和堆设置不正确:确保你的栈和堆大小设置足够大,以容纳浮点数操作可能使用的临时数据。如果栈或堆溢出,也可能导致硬件故障。 浮点数的数据对齐:浮点单元要求浮点数数据在内存中按要求对齐。在编写代码时,确保访问浮点数的内存位置是正确对齐的,否则可能会导致硬件故障。 如果你的硬件故障问题仍然存在,你可以使用 Keil 的调试工具来进一步分析问题。通过查看硬件故障发生时的堆栈跟踪和寄存器状态,你可以更容易地确定问题的根本原因。 注:上述内容来着ai 个人说明:尤其最后一种,在开发中有时会使用内存1字节对齐的方式,造成float没能做到4字节对齐,从而在访问时出现hard_fault的情况出现。也是实际使用中这次发现的情形

学霸笔记-UVM源码-uvm_component 浅析(一)

农行上研面试(技术面+综合素质面) 985硕士0offer 农行总培训生面经 农行面经我来啦 浙商银行24秋招 秋招决赛圈速腾聚创长光集智 美团数据开发,组内急缺,流程很快 题解 | #牛牛学除法# 知识点:基本运算符#include <iostream>using namespace std;int main() { int a, b, 题解 | #牛牛学取余# 知识点:基本运算符#include <iostream>using namespace std;int main() { int a, b, 题解 | #实现3-8译码器①# `timescale 1ns/1nsmodule decoder_38( input E1_n , input 从产业链看 | 中国芯片的春天 最近看到了这么一个话题“中国科技什么时候可以超越美国?”科技领域的范围太大太宽泛了,这里举些例子,希望可以见微知著。2018年,制裁事件之后,科技日报发布了一份 海康威视是否会超发offer 已经签了海康的两方,三方签晚了offer是否会没了,有没有懂得大佬 比亚迪深圳 社招 嵌入式软件工程师 放葱花了吗?我不吃牛肉! 我是常熟理工学院最窝囊的学生,来个大佬教教我算法好不好,球球了。 题解 | #浮点数的个位数字# 知识点:基本运算符#include <iostream>using namespace std;int main() { float a; 题解 | #牛牛买电影票# 知识点:运算#include <iostream>using namespace std;int main() { int n = 0; 题解 | #判断成绩等级#

AutoDL配置环境过程记录(更新中)

AutoDL 配置CUDA 一、编辑文件+刷新,使得能使用conda,以进行后续的环境配置 进入终端 vim ~/.bashrc 然后按英文模式的 i 进入编辑,按键盘下键到最后输入 source root/miniconda3/etc/profile.d/conda.sh 然后先按键盘 Esc 键,使用命令 :wq 保存退出 输入以下命令刷新 bash 二、配置环境 进入环境: conda activate base 创建新环境: 这里的环境名称py38可以自由设置 conda create -n py38 python=3.8 进入新环境: py38换成自己设置的环境名称 conda activate py38 三、安装所需包 1. Tensorflow conda install tensorboard==2.11.0 tensorboard-data-server==0.6.1 tensorflow==2.11.0 tensorflow-estimator==2.11.0 2. Pytorch 查询安装命令 → Pytorch 一个例子: conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia 【报错】 Solving environment: failed with initial frozen solve. Retrying with flexible solve.

Java Web JWT 使用教程

Java Web JWT 使用教程 一、什么是 JWT二、JWT 验证流程三、JWT 结构1. Header2. Payload3. Signature 四、使用 JWT1. 引入依赖2. 生成 token3. 根据令牌和签名解析数据4. 常见异常信息5. 封装工具类 五、整合 Spring Boot1. 拦截器2. 写配置类,就是对哪些请求进行拦截3. 业务处理类 一、什么是 JWT 官网地址:https://jwt.io/introduction/ 通俗解释:JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。 二、JWT 验证流程 1、前端通过Web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输(https协议),从而避免敏感信息被嗅探。 2、后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载),将其与头部分别进行Base64编码拼接后签名,形成一个JWT(Token)。形成的JWT就是一个形同11. zzz. xxx的字符串。token = head . payload . singurater 3、后端将JWT字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage上,退出登录时前端删除保存的JWT即可。 4、前端在每次请求时将JWT放入HTTP Header中的Authorization位。(解决XSS和XSRF问题) 5、后端检查是否存在,如存在验证JWT的有效性。例如,检查签名是否正确;检查Token是否过期;检查Token的接收方是否是自己(可选) 6、验证通过后后端使用JWT中包含的用户信息进行其他逻辑操作,返回相应结果。 三、JWT 结构 token string ====> header.payload.singnature 令牌组成: 1.标头(Header) 2.有效载荷(Payload) 3.签名(Signature) 因此,JWT通常如下所示:xxxxx.yyyyy.zzzzz Header.Payload.Signature 1. Header 标头通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。它会使用 Base64 编码组成 JWT 结构的第一部分。

Flink-CDC 基础应用

文章目录 一、CDC 简介1. 什么是CDC2. CDC的种类3. Flink-CDC 二、Flink CDC 案例实操1. DataStream 方式的应用1.1 导入依赖1.2 编写代码1.3 案例测试 2. FlinkSQL 方式的应用3. 自定义反序列化器 一、CDC 简介 1. 什么是CDC CDC 是 Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库 的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录 下来,写入到消息中间件中以供其他服务进行订阅及消费。 2. CDC的种类 CDC 主要分为基于查询和基于 Binlog 两种方式: 3. Flink-CDC Flink 社区开发了 flink-cdc-connectors 组件(基于Debezium写的),这是一个可以直接从 MySQL、PostgreSQL等数据库直接读取全量数据和增量变更数据的 source 组件。 目前也已开源,开源地址:https://github.com/ververica/flink-cdc-connectors 项目中为什么不适用Canal?FlinkCDC的好处在哪? 如果使用Canal,那么他的数据流程可能是:MySQL —> Canal —> Kafka —>Flink; 而使用FlinkCDC的话可以是:MySQL —>FlinkCDC —>Flink; 省去了消息中间件,流程更加高效了(分层需要的话,会在FlinkCDC之后加上Kafka) 二、Flink CDC 案例实操 1. DataStream 方式的应用 1.1 导入依赖 <properties> <flink-version>1.13.0</flink-version> </properties> <dependencies> <dependency> <groupId>org.

仓库管理系统设计

目录 摘要 Abstract 第一章 概述 1.1仓库管理系统研究背景及意义 1.1.1开发伊犁州移动分公司仓库设备管理系统的目的 1.1.2开发伊犁州移动分公司仓库设备管理系统的技术性意义 1.1.3系统开发具有的优越性 1.2 VB语言的基本特点及VB应用程序的基本特点 1.2.1可视化设计 1.2.2事件驱动编辑 1.2.3实现菜单选项 1.2.4实现工具栏 1.3 Access2000数据库 1.4 VB6和Access的连接 1.4.1 ODBC连接数据库 1.4.2 ADO连接数据库 第二章 系统分析 2.1系统的可行性分析 2.2要求分析 2.3详细资料的收集 第三章 系统设计 3.1系统总体设计 3.1.1系统目标设计 3.1.3系统功能需求分析 3.1.4系统功能模块设计 3.2数据库设计 3.2.1数据库需求分析 3.2.2数据库概念结构设计 3.2.3数据库逻辑结构设计 第四章 系统实现 4.1登陆窗体 4.2系统主窗体设计 4.2.1创建工程项目-伊犁州移动分公司仓库设备管理系统 4.2.2创建主窗体工具栏 4.2.3创建主窗体菜单 4.2.4创建主窗体工具栏 4.2.5设置主窗体状态栏 4.3系统模块 4.3.1基础资料模块 4.3.2仓库管理模块 4.3.3仓库查询模块 4.3.4数据操作模块 4.4系统设置 4.4.1密码修改 4.4.2用户管理 4.5仓库管理系统通用模块代码设置 第五章 系统测试 5.1测试项目 5.1.1用户登录模块测试 5.1.2基础资料模块测试 5.1.3仓库管理模块测试 5.1.4仓库查询模块测试 5.1.5系统设置模块测试 5.2测试结论 结论 致谢语 参考文献 摘要 本文采用面向对象的程序设计方法来分析、设计和实现软件系统,使系统更加稳定、易理解和易修改,因而提高软件开发的效率,降低软件的成本。

HIve安装配置(超详细)

文章目录 Hive安装配置一、Hive安装地址二、Hive安装部署1. 把 `apache-hive-3.1.2-bin.tar.gz`上传到Linux的/export/software目录下2. 解压`apache-hive-3.1.2-bin.tar.gz`到/export/servers/目录下面3. 修改`apache-hive-3.1.2-bin.tar.gz`的名称为hive4. 修改/etc/profile,添加环境变量5. 初始化元数据库(默认是derby数据库) 三、MySQL安装1. 安装MySQL1)上传MySQL安装包以及MySQL驱动jar包2)解压MySQL安装包3)卸载系统自带的mariadb4)安装MySQL依赖5)安装mysql-client6)安装mysql-server7)启动MySQL8)查看MySQL密码 2. 配置MySQL1)用刚刚查到的密码进入MySQL2)设置复杂密码3)更改MySQL密码策略4)设置简单好记的密码5)进入MySQL库6)查询user表7)修改user表,把Host表内容修改为%8)刷新9)退出 四、配置Hive元数据存储到MySQL1. 配置元数据到MySQL1)新建Hive元数据库2)将MySQL的JDBC驱动拷贝到Hive的lib目录下。3)在$HIVE_HOME/conf目录下新建hive-site.xml文件4)初始化Hive元数据库(修改为采用MySQL存储元数据) 2. 验证元数据是否配置成功1)启动hadoop集群和MySQL服务2)启动Hive3)使用Hive 3. 查看MySQL中的元数据1)登录MySQL2)查看元数据库metastore 五、Hive服务部署1. hiveserver2服务1)用户说明2)`hiveserver2`部署3)测试4)配置DataGrip连接 2. metastore服务1)metastore运行模式2)metastore部署3)测试 3. 编写Hive服务启动脚本1)前台启动的方式导致需要打开多个窗口,可以使用如下方式后台方式启动2)为了方便使用,可以直接编写脚本来管理服务的启动和关闭3)添加执行权限4)启动Hive后台服务 六、其他配置1. 解决hive打印大量INFO日志1)进入到hive安装路径下的conf目录下2)新建`log4j.properties`文件3)重新执行启动hive的命令 2.Hive卸载1)卸载MySQL说明2)卸载Hive 3. 修改Hive运⾏⽇志的存放位置1)创建hivelog4j2.properties2)在 `hive-log4j2.properties` ⽂件中修改 log 存放位置3)⽤hive-script.sh restart重启服务后,查看`$HIVE_HOME/hive/logs`⽬录 4. 打印当前库和表头5. Hive的JVM堆内存设置1)新建hive-env.sh2)修改 hive-env.sh其中的参数 6. 关闭Hadoop虚拟内存检查7.出现这个问题 Hive安装配置 一、Hive安装地址 1)Hive官网地址 http://hive.apache.org/ 2)文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted 3)下载地址 http://archive.apache.org/dist/hive/ 4)github地址 https://github.com/apache/hive 二、Hive安装部署 1. 把 apache-hive-3.1.2-bin.tar.gz上传到Linux的/export/software目录下 2. 解压apache-hive-3.1.2-bin.tar.gz到/export/servers/目录下面 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C ../servers/ 3. 修改apache-hive-3.1.2-bin.tar.gz的名称为hive 4. 修改/etc/profile,添加环境变量 vi /etc/profile (1)添加内容 #HIVE_HOME export HIVE_HOME=/export/servers/hive export PATH=$PATH:$HIVE_HOME/bin (2)source一下

Qt对Opengl的支持情况

Qt提供了对OpenGL的广泛支持,这对于开发需要复杂图形处理的机器视觉软件尤为重要。以下是Qt对OpenGL支持的一些关键方面: 1. 用户界面开发方法: Qt有两种主要的用户界面开发方式:Qt Quick和Qt Widgets。这两种方式都支持与OpenGL图形API的代码结合,分别基于为这两种类型的用户界面优化的独立图形引擎 2. 硬件加速3D图形: Qt支持与OpenGL实现的集成,使开发者能够在更传统的用户界面旁边显示硬件加速的3D图形。Qt提供的示例展示了在Qt应用程序中利用OpenGL的基本技术。 3. OpenGL支持类的迁移: 在Qt 5中,为了支持OpenGL这一跨平台图形API——它是Qt图形基础的一部分——向Qt Gui添加了一组替代的OpenGL支持类。在Qt 6中,这些类已经迁移到了Qt OpenGL模块。 4. OpenGL核心配置文件支持: Qt现在已经扩展了对OpenGL的支持,提供了对OpenGL核心配置文件的访问。使用核心配置文件时,移除了对传统固定功能管线的所有访问。这意味着在屏幕上绘制任何内容都需要使用glsl着色器和顶点数组或缓冲区。 5. 运行时OpenGL实现选择和加载: Qt支持在运行时选择和加载OpenGL实现。这种模式是默认的,并且可以通过在配置脚本中传递-opengl dynamic来显式请求。这种配置在构建时期没有对OpenGL实现进行硬编码的依赖或假设,因此是最灵活的。 通过这些支持,Qt能够使开发者充分利用OpenGL的强大功能,为机器视觉软件提供高性能的图形处理能力。 下面是个Qt OpenGL着色器程序例子。 创建一个完整的Qt OpenGL着色器程序涉及到几个步骤,包括设置OpenGL环境、编写GLSL着色器代码,以及将这些着色器集成到Qt应用程序中。这里提供了一个简单的例子,展示了如何编写头文件和.cpp文件来实现这一点。 首先是头文件(MyGLWidget.h): #ifndef MYGLWIDGET_H #define MYGLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLShaderProgram> class MyGLWidget : public QOpenGLWidget { Q_OBJECT public: MyGLWidget(QWidget *parent = nullptr); ~MyGLWidget(); protected: void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; private: QOpenGLShaderProgram *m_program; int m_vertexLocation, m_matrixLocation, m_colorLocation; QMatrix4x4 m_projMatrix; }; #endif // MYGLWIDGET_H 接着是.

ORACLE:【1】32位Linux系统图形界面安装Oracle

创建oracle用户与相关用户组及Oracl用户环境变量和安装路径 # 添加组和用户 [root@oracle11g ~]# groupadd oinstall [root@oracle11g ~]# groupadd dba [root@oracle11g ~]# useradd -g oinstall -G dba oracle [root@oracle11g ~]# passwd oracle [root@oracle11g ~]# 设置你的密码 # 查看创建好的oralce用户组 [root@oracle11g ~]# id oracle uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba) [root@oracle11g ~]# # 创建文件夹并修改组和用户所属关系和相关权限(命令格式:chown -R 用户:用户组 文件夹) [root@oracle11g ~]# mkdir -p /opt/oracle [root@oracle11g ~]# chown -R oracle:oinstall /opt/oracle(使得/opt/oracle文件夹输入oracle用户和oinstall组) [root@oracle11g ~]# chmod -R 775 /opt/oracle(修改u01文件夹访问权限)—可选(最好执行下) # 添加/etc/hosts中dns解析信息 192.168.1.102 oracle11g # 配置oracle用户环境变量: [root@oracle11g ~]# su - oracle [oracle@oracle11g ~]$ vi .

docker

docker 生命周期 快速实践,使用docker,来切换不同的发行版本,内核使用的都是宿主机的内核 #利用docker获取不同的发行版本镜像 [root@master ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@master ~]# uname -r 3.10.0-1160.71.1.el7.x86_64 root@master ~]# docker pull centos:7.8.2003 [root@master ~]# docker pull ubuntu #确认当前宿主机发行版本 [root@master ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) #运行centos7.8.2003发行版 运行centos7.8.2093发行版 #运行容器,且进入容器内 # 参数 解释 -i 交互式命令操作 -t 开启一个终端afb6fca791e 是镜像的id bash 进入容器后,执行的命令 [root@master ~]# docker run -it afb6fca791e0 bash #查看容器内的发行版本 [root@c680f55253e4 /]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@master ~]# docker run -it ba6acccedd29 bash root@7d2e5947b269:/# #查看容器的发行版本

spring boot默认单线程如何破解?

spring boot默认是单线程的,当有多个定时需要跑的时候,他会等到上一个定时跑完再跑下一个定时,而下一个定时一直处于等待状态,若定时很多的话,严重会引起雪崩。。。 由上面可以看到我有两个定时,但是用的是一个线程。 方法一:添加@Async注解后发现不再是同一个线程,而是使用多个线程了。 因为这个@Async注解,就相当于new Thread().start(); 所以可以看到现在是两个线程在跑。 方法二:写一个ThreadPoolTaskScheduler注入到容器,则定时任务默认就用的这个定时多线程 @Bean public ThreadPoolTaskScheduler getThreadPoolTaskScheduler(){ // 设置线程数 ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); //最大线程数 scheduler.setPoolSize(50); return scheduler; } 由此可以看出 也是开了两个线程在跑。 方法三:写一个普通的多线程bean,在每个线程上使用@Async注解 //bean的名称,默认是首字母小写的方法名 @Bean("threadPoolTaskExecutor") public ThreadPoolTaskExecutor getThreadPoolTaskExecutor(){ // 设置线程数 ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); //核心线程数 taskExecutor.setCorePoolSize(25); //最大线程数 taskExecutor.setMaxPoolSize(50); //阻塞队列 taskExecutor.setQueueCapacity(100); //初始化线程 taskExecutor.initialize(); return taskExecutor; } 因为@Async异步方法默认使用Spring创建ThreadPoolTaskExecutor。默认核心线程数:8,最大线程数:Integer.MAX_VALUE,队列使用LinkedBlockingQueue,容量是:Integer.MAX_VALUE,空闲线程保留时间:60s,线程池拒绝策略:AbortPolicy。 由此也可看出,使用的也是两个线程! 自定义线程 //线程池最好是自定义,因为性能等信息可以由开发者自己控制,不然默认使用SimpleAsyncTaskExecutor @Bean public Executor getExecutor(){ // 设置线程数 ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); //最大线程数 threadPoolTaskExecutor.setMaxPoolSize(20); //核心线程池大小 threadPoolTaskExecutor.setCorePoolSize(10); //队列容量 threadPoolTaskExecutor.

Esxi安装OpenWrt

最近折腾下软路由主要就是实现局域网内的上网。 1.StarWind V2V Converter下载 先去下载个StarWind V2V Converter,觉得麻烦我在网上有找到一个博主的地址点击这里。 这是官网地址传送门,然后一阵乱输入点击下载 然后 双击之后无脑下一步即可。 2.OpenWrt镜像 直接去官网 我这里的话是走了个野路子,有人有编译好的,我把连接也放在这里集成版。 3.镜像格式转换 基本照着我的图片下一步就好,细心点 4.设置Esxi 第四步操作为非必要操作,仅影响流量上限,一般家用场景不会跑满,所以可以不操作。这步没操作的情况下,5.3就不需要配置pci。这里注意如果你做了网卡直通并配置了pci估计得在实体机插个网线,要不然就访问不了openwrt管理端了,后面设置ip会无效。 4.1添加虚拟交换机 先查看网络-物理网卡有几张,就添加几个虚拟交换机。 0默认就是esxi用的就把安全改成全部接受,别去改别的,要不然登陆不了后台。 4.2添加端口组 点进去可以看到,默认只有名为VM Network和Management Network两个端口,这两个端口都绑定了虚拟交换机vSwitch0。我们需要为剩下的虚拟交换机分别创建各自的端口。 就改标注的这两个,其他别去动。 ### 4.3网卡直通 网卡直通一般是指在虚拟平台下,把某个网卡独立出来指定某一个宿主机系统使用。因为在虚拟机上就算只有一张网卡,但是会随着虚拟机的数量裂变多张虚拟网卡。 通过筛选器选择支持直通,然后找到Gigabit Ethernet字样的都是网卡(注意第一张别去直通),直接左上角切换直通即可,ESXI7.0及以上版本就不用重启了。 这里踩了一个坑,检查下高级设置里的ACScheck,如果是false所以改成true,每次设置完过一会又还原了。 5.创建openWRT虚拟机 这个前面步骤比较简单,我只截图几个关键的。 自定义设置里分4步走: 5.1删除硬盘、CD/DVD两项 5.2内存配置 内存配置:2G,勾选【预留所有客户机内存(全部锁定)】 5.3 添加PCI设备 网口配置:【添加其他设备】-【PCI设备】,把刚刚直通的设备添加即可 5.4硬盘配置 硬盘配置:【添加硬盘】-【现有硬盘】,这个简单创建个目录,把刚刚那两个vmdk丢上去,这里注意上传了两个文件只会显示其中一个不用在意,选中它就好。 5.5最后下一页点击完成就好。 6.启动并修改ip 这个启动需要点时间,等他启动完我没得配置下ip,毕竟每个人的网段不同。配置完成后直接reboot重启(我这边感觉他响应比较慢,实际已经在重启了但是过很久才显示),至此就配置完成。直接访问即可,默认密码password 7.管理端配置 7.1配置lan口 网络 - 接口 - LAN - 修改,将网关、DNS 服务器都指向主路由的地址 停用ipv6,最后点击右下角保存并应用 7.2检查网络

FastGPT | 3分钟构建属于自己的AI智能助手

这是一篇使用指南!!! FastGPT是什么? FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景! fastgpt其实就是使用了chatgpt的api(或者其他的大模型),构建自己的AI知识库 chatgpt是没办法获取到你自己的信息的 如果你想部署属于自己的gpt,或者是公司内部使用的 你可以选择fastgpt 适用人群: chatgpt爱好者 chatgpt深度使用者 想要构建自己的AI知识库 想要给其他人提供gpt服务 公司/组织 私有化 功能介绍 目前我觉得比较好用的3个功能 构建自己的知识库 通过导入文档或已有问答对进行训练,让 AI 模型能根据你的文档以交互式对话方式回答问题。 数据预处理 提供手动输入、直接分段、LLM 自动处理和 CSV 等多种数据导入途径,其中“直接分段”支持通过 PDF、WORD、Markdown 和 CSV 文档内容作为上下文。FastGPT 会自动对文本数据进行预处理、向量化和 QA 分割,节省手动训练时间,提升效能。 高级编排 基于 Flow 模块的工作流编排,可以帮助你设计更加复杂的问答流程。例如查询数据库、查询库存、预约实验室等 不过这个功能比较复杂,需要一定的学习成本 在线使用 🌐 国内版:ai.fastgpt.in 🌍 海外版:fastgpt.run 环境需要 系统:windows or linux docker环境 chatgpt账号,并有api 项目仓库地址 https://github.com/labring/FastGPT 安装指南 安装指引 获取API keys 在sealos上搭建nginx 安装fastgpt 获取API keys 这个很简单 打开网址:https://platform.openai.com/account/api-keys 登录你的gpt账号 (你得会魔法) 创建一个keys即可 搭建nginx 这里是在sealos上搭建的nginx,因为sealos是国外服务器,可以直接代理openai

万能的JSON解析方法,获取指定字段值

直接上代码: import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; private String handleJsonResponse(String response,String field) { if(StringUtils.isBlank(field)){ return response; } JSONObject jsonObject = JSON.parseObject(response); return getFieldValue(jsonObject,field); } public String getFieldValue(JSONObject jsonObject, String fieldName) { for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); if (key.equals(fieldName)) { return value.toString(); } else if (value instanceof JSONObject) { String fieldValue = getFieldValue((JSONObject) value, fieldName); if (fieldValue != null) { return fieldValue; } } else if (value instanceof JSONArray) { JSONArray jsonArray = (JSONArray) value; String fieldValue = getFieldValue(jsonArray, fieldName); if (fieldValue !

万能的XML解析方法,获取指定字段值

上代码: import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public String handleXmlResponse(String response,String field) { if(StringUtils.isBlank(field)){ return response; } SAXReader reader = new SAXReader(); try { Document document = reader.read(new StringReader(response)); Element root = document.getRootElement(); return getFieldValue(root, field); } catch (DocumentException e) { e.printStackTrace(); } return null; } public String getFieldValue(Element element, String fieldName) { for (Iterator<Element> it = element.elementIterator(); it.hasNext();) { Element child = it.next(); if (child.getName().equals(fieldName)) { return child.

easypoi根据传入数据动态导出excel

需求:详情界面有一百个字段,可能只需要导出部分选择的字段 /** * @Description 导出结计算信息 **/ public void exportTaskCloseoutInfo(HttpServletResponse response, String taskId, List<DynamicTablePo> dynamicTablePoList) { if (StringUtils.isEmpty(taskId) || CollectionUtils.isEmpty(dynamicTablePoList)) return; CloseoutVo closeoutVo = new CloseoutVo(); CopyOptions options = CopyOptions.create() .setIgnoreNullValue(true) // 忽略源对象属性为空的情况 .setIgnoreError(true); // 忽略复制过程中出现的错误 OcYunTuTaskCloseoutReach reachInfo = getReachInfo(taskId); BeanUtil.copyProperties(reachInfo, closeoutVo, options); List<CloseoutVo> closeoutVoList = new ArrayList<>(); closeoutVoList.add(closeoutVo); List<ExcelExportEntity> beanList = new ArrayList<ExcelExportEntity>(dynamicTablePoList.size()); for (DynamicTablePo tablePo : dynamicTablePoList) { ExcelExportEntity entity = new ExcelExportEntity(); entity.setName(tablePo.getFiledShowName()); entity.setKey(tablePo.getFiledCode()); entity.setWidth(15);//设置宽度 entity.setHeight(30);//设置高度 entity.setWrap(true);//支持换行 beanList.

CDR2024破解版网盘下载

cdr是CorelDRAW的简称,一款专注排版和矢量图形编辑的平面设计软件。这款软件的设计界面精微细致、简洁易懂。功能尤其强大,图标设计,印刷排版,服装设计等都可以胜任。还有多种模板使得设计相当的轻松,今天简单介绍一下用cdr做服装设计的方法。 CorelDRAW最新版win下载如下: https://wm.makeding.com/iclk/?zoneid=55678 CorelDRAW最新版mac下载如下: https://wm.makeding.com/iclk/?zoneid=55679 1、今天教大家绘制如图所示的简单背心。我们新建一个空白文档并命名为背心 图1:背心设计图 2、建立参考线。从左边的标尺拉出一个参考线,并双击它,会出现添加辅助线的工具框,鼠标移动到刚开始随意拉出来的参考线上,点击右键删除,依次添加30、53、105、158、181mm的垂直参考线,46、64、192、233、250mm的水平参考线。 图2:建立参考线 3、绘制半边衣服图案。单机右上角贴齐辅助线,然后使用钢笔工具绘制出如下图案,绘制时可进行细微调整。然后框住全部CTRL+G群组一下。 图3:绘制衣服 4、绘制完全衣服图案。复制半边图案,然后按住CTRL键,鼠标点中左边中点直接向右拉,就形成了一个镜像的效果,如图所示。 图4:镜像 5、细微调整。选中全部线条,按F12键,调出轮廓笔工具,将折角改成圆弧的。 图5:轮廓调整 6、绘制单个拉链。绘制一个胶囊图形,调整到合适的大小,ctrl+c复制,然后ctrl+d,右上角出现一个同样的形状,将这个形状向原始图形的垂直下方移动一定的距离。 图6:绘制单个拉链 7、将拉链绘制完成。快捷键CTRL+d重复上一步操作,快速复制出一条拉链。 图7:绘制拉链 8、拉链对齐。有时候发现复制的一长条发现并没有对齐,这时选中全部圆角矩形,找到对齐工具,整体向右对齐,拉链便绘制完成。 图8:对齐 CDR2020:www.coreldrawchina.com/cdr2020.html 以上就是用cdr绘制的背心造型,当然也可以做得更复杂一些,比如加个插手口袋,加个领带,甚至做出很多女性喜欢的花边都是完全可以的。

【JavaEE】yapi平台搭建步骤详解

数据库 创建数据卷 docker volume create mongo-data 启动 MongoDB docker run -d \ --name mongo-yapi \ -v mongo-data:/data/db \ -e MONGO_INITDB_ROOT_USERNAME=root \ -e MONGO_INITDB_ROOT_PASSWORD=berry.com \ mongo yapi 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/anoyi/yapi # 执行 docker images 看一下是否有以下这条记录 registry.cn-hangzhou.aliyuncs.com/anoyi/yapi latest 41ae1c6876cf 2 years ago 167MB 配置一个外部的配置文件config.json 存放路径自己根据适合的位置放就可以,或者也可以用讲解的路径直接存放 #创建 /data/yapi文件夹 mkdir -p /data/yapi #在文件夹下创建一个config.json touch /data/yapi/config.json config.json的内容如下 { "port": "3000", "adminAccount": "admin@berry.com", "timeout":120000, "db": { "servername": "mongo", "DATABASE": "yapi", "port": 27017, "user": "root", "

求解线性规划和非线性规划方程的python模板求解

from scipy.optimize import minimize # 定义目标函数 def objective(x): x1, x2= x return -2*x1-6*x2+x1**2-2*x1*x2+2*x2**2 # 定义不等式约束 #这里以大于等于的形式表示,如果是小于等于的方程,两边同时乘以负号 def constraint1(x): x1, x2= x return -x1-x2+2 def constraint2(x): x1, x2 = x return x1-2*x2+2 #猜测初始值 x0=(0,0) # 定义约束条件 cons = ({'type': 'ineq', 'fun': constraint1}, {'type': 'ineq', 'fun': constraint2}) # 定义未知数的边界,使其大于等于0 bounds = ((0, None), (0, None)) # 求解优化问题 result = minimize(objective, x0,constraints=cons, bounds=bounds) # 打印结果 print("最优解: ", result.x) print("最优值: ", result.fun)

『精』Vue 组件如何模块化抽离Props

『精』Vue 组件如何模块化抽离Props 文章目录 『精』Vue 组件如何模块化抽离Props一、为什么要抽离Props二、选项式API方式抽离三、组合式API方式抽离3.1 TypeScript类型方式3.2 文件分离方式3.3 对文件分离方式优化 参考资料💘推荐博文🍗 一、为什么要抽离Props 在前端框架中封装一个组件是非常常见的,对于组件来讲,往往离不开组件之间属性的传递,通过属性能够控制组件的样式内容、处理逻辑类型、数据传递。假如有这么一个用于签名的组件,能够控制画笔的大小、颜色、画布背景颜色宽高、按钮的文案提示等,那么它的属性必定是有十几个选项,假设 800 行代码里可能就得花费 100 行去声明这些属性,这明显是不合适的。 这也是我为什么提议要抽离组件 Props 的原因,实际上这个签名组件也确实存在,源自于我在 Uniapp 插件市场上的一个提交。 抽离Props的好处有这么几点: 降低、隔离组件的复杂度,降低维护成本与提高程序可靠率。引入一个中间的、易于理解的抽象概览。隐藏非核心处理部分的实现细节,提高组件源码的可阅读性。促进代码的重用,包装一定的结构风范。属性的抽离,有助于自动化程序生成对应文档。 那么要怎么做才能抽离出 Props 呢,在 Vue 身上根据选项式 API 和组合式 API 写法的不同,做法也不一样。 一些简单的组件可能只有一两个属性,甚至是没有属性,对于这种情况下,可能不抽离 Props 会显得更方便一些,但一定要注意的是应当把组件以后要做的和其扩展维护性放在一起考虑,往往十几个属性堆叠的组件都是从一两个属性的组件开始的,既然以后会越加越多,那为何不提早抽离处理方便以后再加呢,当然具体怎么做取决于自己。 二、选项式API方式抽离 选项式 API 适用于 Vue2 和 Vue3,需要使用到 Mixins 混合方法。Mixins 不只是能抽离 Props,它能做到更多,我相信大部分对这个功能会比较熟悉,有兴趣的可以参考此文档 Mixins。 import type { PropType } from "vue"; export default { props: { prop1: { type: String, required: true }, prop2: { type: Array as PropType<string[]>, default: ["

Zotero使用指南

Zotero使用指南 Zotero是一个免费、易用、可以拓展的,用来帮助收集、组织、引用和分享研究的文献管理软件,可以用来保存参考文献,生成所需参考文献格式,存储、追踪个人过去研究。 1.下载 下载地址:https://www.zotero.org/ 为了正确使用Zotero,除了Zotero桌面应用程序之外,还需要安装适用于Chrome,Firefox或Safari的连接器(Connector)才行。 2. 导入资源 直接将需要导入的资源拖入zotero中 利用Zotero Connector在下载时直接导入(可以一次性导入多篇,也可以导入博客网站) 利用Zotero的添加条目工具进行添加(如果要一次输入多个标识符,在输入第一个标识符后按 Shift + Enter会进入多行模式,随后输入其余标识符(每行一个),并通过 Enter 换行。输入完成符后,再按 Shift + Enter 即可一次导入所有项目。) 3. 各类工具作用 3.1 添加标签 选中文献,在右边的工具栏中会出现标签栏,点开添加标签。在左下角可以更改标签的颜色。 3.2 文件夹 无限添加文件夹,实现文件夹与标签双管理 3.3 添加笔记 右侧的笔记栏可以添加笔记,以及图片,支持Markdown语法。 4.数据存储与同步 数据存储文件默认保存在C盘,可以在工具 – 首选项 – 高级 – 文件和文件夹下修改保存的位置。 同步分为两个部分,一个是「数据同步」,用于同步论文的名字、摘要等信息的,这个是存储在Zotero中的,可以无限量存储。另一个是「文件同步」,主要用于同步论文的PDF文件,但是自带的云服务器只有300M,需要更大的空间就得付费,或者选择保存到坚果云。 设置坚果云同步空间: 1.进入坚果云,点击 右上角名字->账户信息页面->安全选项 2.点击添加应用,添加名称后点击生成密码生成随机密码 3.回到Zotero中,在工具 – 首选项 – 同步下修改同步空间。文件同步选择WebDAV,然后填入对应的信息; 4.点击验证服务器,验证通过后就设置好坚果云同步空间了。 5. 引文导出 1.选中需要导出的引文文献,右键点击用所选条目创建参考文献表。 2.选择目的参考文献格式,导出。 如果没有找到需要的格式,在编辑-首选项-引用中可以获取更多样式,以及管理引文样式。(个人根据自己情况加入需要的格式) 6. Zotero插件 Zotero插件安装:点击工具 - 附加组件,进入Zotero插件管理页面,将后缀名为.xpi的插件拉入Zotero中即可完成安装(或者在附加组件里面,点击右上角的设置按钮,选择Install Add-on From File也可进行安装)。安装完成后,所有插件均可以在编辑-首选项中进行相对应的设置。 插件地址:https://plugins.zotero-chinese.com/#/ 6.1 jasminum 作用:用于识别中文网站,如知网、百度学术等网页中的数据。 配置:如下图所示。 6.2 zotero-style(建议安装) 作用:对Zotero进行美化(涵盖了Zotero Tag和Zotero Update IFs),能够显示阅读进度,显示”#“标签,显示影响因子和期刊标签,进行评级。

【云原生-K8s】Kubernetes安全组件CIS基准kube-beach安装及使用

基础介绍kube-beach介绍kube-beach 下载百度网盘下载wget下载 kube-beach安装kube-beach使用基础参数配置信息解读示例修复建议修复一个安全漏洞【1.2.18】结果说明 kube-beach跳过漏洞漏洞定义漏洞定义yaml说明漏洞生成为INFO 基础介绍 为了保证集群以及容器应用的安全,Kubernetes 提供了多种安全机制,限制容器的行为,减少容器和集群的攻击面,保证整个系统的安全性。互联网安全中心(CIS,Center for Internet Security),是一个非盈利组织,致力为互联网提供免费的安全防御解决方案官网:https://www.cisecurity.org/k8s安全基准:https://www.cisecurity.org/benchmark/kubernetes kube-beach介绍 Kube-bench是容器安全厂商Aquq推出的工具,以CIS K8s基准作为基础,来检查K8s是否安全部署。主要查找不安全的配置参数、敏感的文件权限、不安全的帐户或公开端口等等。开源地址:https://github.com/aquasecurity/kube-bench二进制包下载地址:https://github.com/aquasecurity/kube-bench/releases大家根据需求下载相应版本 kube-beach 下载 百度网盘下载 链接:https://pan.baidu.com/s/17AGxkwTDUkiDYSSZpPu45A?pwd=vqew 提取码:vqew –来自百度网盘超级会员V7的分享 wget下载 wget https://github.com/aquasecurity/kube-bench/releases/download/v0.6.19/kube-bench_0.6.19_linux_amd64.tar.gz kube-beach安装 解压 tar -zxf kube-bench_0.6.19_linux_amd64.tar.gz 创建默认配置路径 mkdir -p /etc/kube-bench 复制配置文件至默认目录 mv cfg /etc/kube-bench/cfg 设置为系统命令 mv kube-bench /usr/bin/ kube-beach使用 基础参数 使用kube-bench run进行测试,该指令有以下常用参数 –targets 指定要基础测试的目标,默认配置目标包括:master, controlplane, node, etcd, policies –version:指定k8s版本,如果未指定会自动检测 –benchmark:手动指定CIS基准版本,不能与–version一起使用 查看帮助信息 kube-bench --help 配置信息解读 在该目录下 /etc/kube-bench/cfg 该版本默认使用 cis-1.7也支持其他 云厂商的验证基准 【ack-1.0 容器服务 Kubernetes 版 ACK】 示例 检查master组件安全配置 kube-bench run --targets=master 修复建议 修复一个安全漏洞【1.

由于找不到msvcr110.dll无法继续执行此代码怎么解决?5个解决方法分享

MSVCP110.dll是Microsoft Visual C++ 2012运行时库的一部分,它包含了许多用于支持C++应用程序运行的函数。当您在运行某些程序时,可能会遇到“msvcp110.dll丢失”的错误提示。为了解决这个问题,您可以尝试以下5种方法: 方法1. 重新安装Visual C++ 2012运行库 如果您的计算机上安装了Visual C++ 2012开发工具,那么您可能已经安装了相应的运行库。但是,由于某些原因,这些库可能已损坏或丢失。在这种情况下,您可以尝试重新安装Visual C++ 2012运行库。以下是安装步骤: - 访问微软官方网站,下载并安装Visual C++ 2012运行库。 - 安装完成后,重新启动计算机。 方法2. dll修复工具(亲测能解决) 使用dll修复工具非常简单,也是目前能百分百解决问题的方法。以下是操作步骤: -下载msvcr120.dll文件修复工具程序可以利用百度等搜索引擎或许在微软官网下载 或者打开电脑浏览器在浏览器顶部栏目输入:dll修复程序.site【按键盘回车键前往】进入下载修复文件。(亲测有效) - 下载完成解压打开,打开工具后,点击“扫描并修复”,等待扫描完成并修复问题。,dll修复工具还可以帮助您修复 电脑其它未知dll 文件丢失问题,并确保应用程序可以正常运行。只需要耐心等待修复完成,提示修复完成重启电脑即能解决dll丢失问题。 方法3. 从系统文件夹中复制msvcp110.dll文件 如果您的计算机上没有安装Visual C++ 2012运行库,或者您不想重新安装它,您可以尝试从其他计算机上复制msvcp110.dll文件。以下是操作步骤: - 找到一台已安装Visual C++ 2012运行库的计算机。 - 打开Windows资源管理器,Visual C++ 2012运行库中找到msvcp110.dll文件,将其复制到您的计算机上的相同位置。 - 重新启动计算机。 方法4. 创建系统还原点 如果您在尝试上述方法之前遇到了问题,您可以尝试创建一个系统还原点。这将允许您将计算机恢复到出现问题之前的状态。以下是创建系统还原点的步骤: - 单击“开始”按钮,然后输入“系统还原”。 - 在搜索结果中,单击“创建还原点”。 - 按照屏幕上的说明创建一个系统还原点。 - 完成创建后,尝试重新启动计算机。 方法5. 重新安装出现问题的程序 如果上述方法都无法解决问题,您可能需要重新安装导致msvcp110.dll丢失的程序。以下是操作步骤: - 卸载出现问题的程序。 - 访问程序的官方网站,下载并安装最新版本的程序。 - 安装完成后,重新启动计算机。 总之,msvcp110.dll丢失的问题可能是由多种原因引起的。通过尝试上述方法,您应该能够解决这个问题。如何喜欢本文章,记得关注小编哦

SpringBoot浅析

一 、 Spring boot自动装配的原理 从启动类上面的注解@EnableAutoConfiguration追踪 @EnableAutoConfiguration -> @Import -> AutoConfigurationImportSelector -> getCandidateConfigurations方法 -> getSpringFactoriesLoaderFactoryClass()方法 -> return EnableAutoConfiguration.class -> spring.factories -> org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 自动装配的目的就是为了从spring.factories文件中获取到对应的bean并交给spring来管理 23 17 

Oracle 19c之RPM安装

19c的RPM包下载链接, https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html 可以看到,19c开始支持企业版本的RPM,容量是2.5GB, 使用手工方式,通过RPM安装19c数据库,只需要两步操作, 步骤1:安装oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm 步骤2:安装oracle-database-ee-19c-1.0-1.x86_64.rpm 步骤1:安装oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm 如果OEL平台,只需要执行, yum -y install oracle-database-preinstall-19c 如果不是OEL平台,首先要下载对应平台的RPM,我用的是RedHat 7.4,下载链接地址, https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html 搜索preinstall-19c,找到, 第一次执行,未必就可以成功,在我的测试环境,从错误的提示看,少了一些依赖库, [root@localhost software]# rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm warning: oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY error: Failed dependencies: compat-libcap1 is needed by oracle-database-preinstall-19c-1.0-1.el7.x86_64 compat-libstdc++-33 is needed by oracle-database-preinstall-19c-1.0-1.el7.x86_64 glibc-devel is needed by oracle-database-preinstall-19c-1.0-1.el7.x86_64 ... 碰见这种情况,一个是可以从操作系统安装文件的Package中找到些库,另一个就是从网上检索安装库,在我的测试中,大部分少的库,都可以从Package中找到,但是compat-libstdc++-33这个并不在。 根据MOS(2254198.1)的提示,这个包是Oracle Text需要的,如果不用Oracle Text,可以忽略这个包,在RedHat 7的安装包中已经删除了。 如果不能容忍任何的错误,非得装上,可以到这个链接,下载下来安装, http://www.rpmfind.net/linux/rpm2html/search.php?query=compat-libstdc%2B%2B-33(x86-64) 再次安装, [root@localhost software]# rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm warning: oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY Preparing.

chatgpt接口调用

在线接口文档: https://app.apifox.com/invite?token=symrLP7sojF6N31kZqnpZ 接口地址 https://chat.xutongbao.top/api/light/chat/createChatCompletion 请求方式 POST 请求参数 token String, 必须 messages Array, 必须 例子一: 包含上下文 [ { "role": "user", "content": "北京有多少人" }, { "role": "assistant", "content": "根据2021年数据,北京市的人口总数约为 2170 万人。请注意,人口数量可能会随时间变化而有所变动。" }, { "role": "user", "content": "上海呢" } ] 例子二: [ { "role": "user","content": "你好"} ] model String, 可选。 可选值: “gpt-3.5-turbo-16k” 、 “gpt-4”。 默认值为: “gpt-3.5-turbo-16k” params Object, 可选 例子一: 一次提问得到两个答案 { "n": 2 } 其他Open AI官方支持的参数可以通过对象格式传递,官方文档:https://platform.openai.com/docs/api-reference/completions/create 在线文档 Apifox 请求参数示例 { "model": "