关于解决Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0报错问题

最近突然想到报错问题在pom文件中添加依赖:出现报错问题 这里有两种解决办法: 解决办法一、 办法一比较简单粗暴,直接吧这个代码块换成 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>6.2.0.jre8</version> <scope>test</scope> </dependency> 解决办法二、 手动下载jar包 https://mvnrepository.com/artifact/com.microsoft.sqlserver/sqljdbc4/4.0 然后打开cmd命令窗口(快捷键:win+r)进入jar包所在目录,并执行命令, 解释一下:mvn install:install-file -Dfile=“jar包的绝对路径” -Dpackaging=“文件打包方式” -DgroupId=groupid名 -DartifactId=artifactId名 -Dversion=jar版本 mvn install:install-file -Dfile=sqljdbc4-4.0.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar 然后进入Maven仓库,查看sqljdbc4是否安装成功 重新编译之前的Maven项目,刷新就可以编译通过了。 总结: sqljdbc4和mssql-jdbc是两个不同的JDBC驱动程序,用于连接Java应用程序与Microsoft SQL Server数据库进行交互。下面是它们之间的一些区别: 版本和名称:sqljdbc4是旧版的Microsoft JDBC驱动程序,而mssql-jdbc是新版的Microsoft JDBC驱动程序。 支持的Java版本:sqljdbc4驱动程序适用于Java 6及更高版本,而mssql-jdbc驱动程序适用于Java 8及更高版本。 功能和性能:由于mssql-jdbc是较新的驱动程序,它通常提供更多的功能和性能优化,包括更好的连接管理、查询执行性能和数据类型支持。此外,mssql-jdbc还支持最新的SQL Server功能,如Always Encrypted、Columnstore索引等。 开发和维护:sqljdbc4驱动程序目前已经进入维护模式,不再接收新功能的更新,只提供错误修复和安全修复。而mssql-jdbc驱动程序是Microsoft官方推荐的最新驱动程序,会持续进行开发和更新。 综上所述,如果你使用的是较新的Java版本,并且希望获得更好的性能和功能支持,建议使用mssql-jdbc驱动程序。如果你的应用程序已经在使用sqljdbc4驱动程序,并且没有特定的要求,那么你可以继续使用它,但请注意它已经进入维护模式。无论选择哪个驱动程序,都应该根据自己的需求和环境进行评估和测试。

公网远程访问macOS本地web服务器

# 公网访问macOS本地web服务器【内网穿透】 文章目录 1. 启动Apache服务器2. 公网访问本地web服务2.1 本地安装配置cpolar2.2 创建隧道2.3 测试访问公网地址3. 配置固定二级子域名3.1 保留一个二级子域名3.2 配置二级子域名4. 测试访问公网固定二级子域名 以macOS自带的Apache为例,在本地启用apache服务器,并通过cpolar内网穿透将其暴露至公网,实现在公网环境下访问本地web服务。 1. 启动Apache服务器 在macOS上打开终端,执行命令启动Apache服务器,提示Passwod,输入密码 sudo apachectl start ## Apache常用命令: ## 启动apache: sudo apachectl start ## 重启apache: sudo apachectl restart ## 关闭apache: sudo apachectl stop 浏览器访问localhost(默认80端口),页面正常看到It Works!,表示服务器启动成功,局域网内可正常访问! 2. 公网访问本地web服务 目前web服务只能在局域网内访问,接下来我们使用cpolar内网穿透将本地web服务映射到公网,实现公网用户也可以访问到本地web服务,无需公网IP,也无需设置路由器。 2.1 本地安装配置cpolar 在官网下载下载适用于macOS平台的zip压缩包,解压后得到cpolar,然后通过命令行带参数运行即可。 通过Homebrew包管理器安装 brew tap probezy/core && brew install cpolar token认证 登录cpolar官网后台,点击左侧的验证,查看自己的认证token,之后将token贴在命令行里 cpolar authtoken xxxxxxx 安装服务 sudo cpolar service install 启动服务 sudo cpolar service start 登录cpolar web UI管理界面 在浏览器上访问本地9200端口【http://127.

Python断言(assert)

Python实用教程_spiritx的博客-CSDN博客 断言定义 Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。 断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。 语法格式如下: assert expression 等价于: if not expression: raise AssertionError assert 后面也可以紧跟参数: assert expression [, arguments] 等价于: if not expression: raise AssertionError(arguments) >>> assert True # 条件为 true 正常执行 >>> assert False # 条件为 false 触发异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError >>> assert 1==1 # 条件为 true 正常执行 >>> assert 1==2 # 条件为 false 触发异常 Traceback (most recent call last): File "

随机生成密码(Python)

随机密码生成是一种常见的加密技术,可以帮助用户在创建账户时生成强大的密码,从而保护账户的安全性。 随机生成密码。编写程序,在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。 方法一: import random n=8 #每个密码8位 k=10 #10个密码 #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] l=list(range(0,10)) """[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] """ for x in range(65,91): l.append(chr(x)) """ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] "

MacOS重装系统和制作安装U盘

MacBook Pro A1707 系统丢失,重装系统。 第一次尝试: 按照正常步骤,对电脑进行重启,按住组合键“Command+R”,macOS恢复将提供最新安装的macOS的当前版本。系统安装macOS Sierra。 安装至最后出现报错信息“An error occurred while perparing the installation. Try running this application again”准备安装时发生错误。请再次运行此应用程序。 原因大概率是以下几种:时间问题、网络问题、磁盘问题、输入法未切换到中文。 时间问题:可以在安装界面左上角 实用工具 打开终端,查看和修改时间。 打开终端输入date,查看时间; 修改时间可以通过ntp时间同步:ntpdate time.apple.com 或者sntp -sS time.apple.com ; 也可以手动修改时间:date 102605112023.09 意思是10月26号,05:11,2023年,9秒; 磁盘问题: 选择磁盘工具,在磁盘工具界面找到显示所有设备,不同版本的位置会有差异。 从下到上将不需要的磁盘抹掉erase,如果有多余的磁盘可以选择MAC OS Extended(Journaled)格式,安装系统的磁盘选择APFS格式,推荐命名为"Macintosh HD",系统会自动创建容器和宗卷,宗卷名即为"Macintosh HD";然后从下到上修复(First Aid)宗卷到最上面的磁盘; 如果遇到无法修复的磁盘,可以跳过。 重置PRAM和NVRAM: 上面存储了各种设置和首选项,重启时按住option+Command+P+R四个键知道看到第二个apple标志或者听到第二个启动声音,即重置完成。 第二次尝试: 对电脑进行重启,按住组合键“option+Command+R”,macOS恢复将提供与Mac兼容的最新版macOS。系统安装macOS Monterey。 安装至最后报错:PK Download Error error 8. 安装时,使用快捷键查看安装日志(也可以从左上角点击查看安装日志), 原因是卷宗不是APFS格式,以及NO IAL update found. 若重做磁盘后仍无法安装,大概率是网络问题,如熄屏。 第三次尝试: 这次直接制作了一个启动U盘,因为一直熄屏,而且找不到设置不熄屏的方法(命令caffeinate -s不能用),但是这需要另外一台MacOS系统的电脑。 我使用了Mojave 制作启动盘,首先将Mojave镜像文件放到Applications中;然后将U盘接入电脑格式化为MacOS Extended(Journaled)格式,命名为“MyVloume”;然后打开终端执行命令“sudo /Applications/Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume” sudo /Applications/Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume U盘制作完成后,接入MacBook Pro,重启,按“option”键,选择从启动盘启动;

Android Studio安装SDK时报错:SDK emulator directory is missing

问题描述: 安装Android Studio时,一般情况下,Android Studio会自动配置环境变量。 但是在安装过程中首先会遇到Andriod SDK unavailable然后报了No Android SDK found 异常,最后出现SDK emulator directory is missing的错误。 如下图所示: 点击Next现象如下: 点击Next现象如下: 问题说明: 根据提示明显缺少Android SDK,可单独下载SDK,然后配置路径;也可按照如下配置下代理,自动更新SDK来解决。 解决方法: 在错误界面,击右下角 finish 退出当前安装 SDK 的界面。页面会自动跳转到android studio的正常页面点击创建新项目,会提示没有安装SDK,点击Open SDK Manager可以看到跳转到如下页面,点击Appearance & Behavior如图选择System Settings当中的HTTP Proxy,选择Auto-detect proxy settings,输入配置路径:socks5h://127.0.0.1:1080 点击确定然后重启Android Studio,进入如下安装即可:

C++ 实现定时器的两种方法(线程定时和时间轮算法修改版)

定时器要求在固定的时间异步执行一个操作,比如boost库中的boost::asio::deadline_timer,以及MFC中的定时器。也可以利用c++11的thread, mutex, condition_variable 来实现一个定时器。 1、使用C++11中的thread, mutex, condition_variable来实现一个定时器。 注:此算法会每一个任务创建一个线程,不推荐。推荐用最下面第2种时间轮算法 #include <iostream> #include <chrono> #include <thread> #include <mutex> #include <condition_variable> class Timer { public: Timer() :_expired(true), _try_to_expire(false) {} Timer(const Timer& t) { _expired = t._expired.load(); _try_to_expire = t._try_to_expire.load(); } ~Timer() { Expire(); } void StartTimer(int interval, std::function<void()> task) { if (_expired == false) { return; } _expired = false; std::thread([this, interval, task]() { while (!_try_to_expire) { std::this_thread::sleep_for(std::chrono::milliseconds(interval)); task(); } { std::lock_guard<std::mutex> locker(_mutex); _expired = true; _expired_cond.

11.初始JavaScript[初步了解何为js]

文章目录 1.初识 JavaScript1.1JavaScript 是什么1.2发展历史1.3JavaScript 和 HTML 和 CSS 之间的关系1.4JavaScript 运行过程1.5JavaScript 的组成 2.前置知识2.1第一个程序2.2JavaScript 的书写形式2.2.1行内式2.2.2内嵌式2.2.3外部式 2.3注释2.4输入输出2.4.1输入: prompt2.4.2输出: alert2.4.3输出: console.log 3.强弱类型语言3.1强类型语言3.2弱类型语言3.3强类型语言和弱类型语言比较 3.强弱类型语言3.1强类型语言3.2弱类型语言3.3强类型语言和弱类型语言比较 大家好,我是晓星航。今天为大家带来的是 JavaScript的简单介绍 相关的讲解!😀 1.初识 JavaScript 1.1JavaScript 是什么 JavaScript (简称 JS) 是世界上最流行的编程语言之一是一个脚本语言, 通过解释器运行主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. JavaScript 最初只是为了完成简单的表单验证(验证数据合法性), 结果后来不小心就火了. 当前 JavaScript 已经成为了一个通用的编程语言 JavaScript 的能做的事情: 网页开发(更复杂的特效和用户交互)网页游戏开发服务器开发(node.js)桌面程序开发(Electron, VSCode 就是这么来的)手机 app 开发 1.2发展历史 JavaScript 之父 布兰登 * 艾奇 (Brendan Eich) 曾经的布兰登 发明 JavaScript 之后的布兰登(我变秃了,也变牛逼了) 1995 年, 用 10 天时间完成 JS 的设计 (由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript 写出来的程序混乱不堪) 最初在网景公司, 命名为 LiveScript,

什么是跨域? 出现原因及解决方法

目录 一、什么是跨域二、为什么有跨域问题?三、解决跨域问题的方案1.Jsonp2.nginx3.CORS3.1 什么是cors3.2 原理 四、GateWay网关中实现跨域步骤 一、什么是跨域 跨域:浏览器对于javascript的同源策略的限制 。 同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。 设想这样一种情况:A 网站是一家银行,用户登录以后,A 网站在用户的机器上设置了一个 Cookie,包含了一些隐私信息(比如存款总额)。用户离开 A 网站以后,又去访问 B 网站,如果没有同源限制,B 网站可以读取 A 网站的 Cookie,那么隐私信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。 以下情况都属于跨域: 跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 www.jd.com:8080 与 www.jd.com:8081 二级域名不同 item.jd.com 与 miaosha.jd.com 如果域名和端口都相同,但是请求路径不同,不属于跨域,如: www.jd.com/item www.jd.com/goods http和https也属于跨域 常见的问题 二、为什么有跨域问题? 跨域不一定都会有跨域问题。 因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是与当前页域名相同的路径,这能有效的阻止跨站攻击。 因此:跨域问题 是针对ajax的一种限制。 但是这却给我们的开发带来了不便,而且在实际生产环境中,肯定会有很多台服务器之间交互,地址和端口都可能不同,怎么办? 三、解决跨域问题的方案 1.Jsonp Jsonp 最早的解决方案,利用script标签可以跨域的原理实现。 https://www.w3cschool.cn/json/json-jsonp.html 限制: 需要服务的支持只能发起GET请求 原理: Jsonp其实就是一个跨域解决方案。Js跨域请求数据是不可以的,但是js跨域请求js脚本是可以的。可以把数据封装成一个js语句,做一个方法的调用。跨域请求js脚本可以得到此脚本。得到js脚本之后会立即执行。可以把数据做为参数传递到方法中。就可以获得数据。从而解决跨域问题。 2.nginx nginx反向代理 思路是:利用nginx把跨域反向代理为不跨域,支持各种请求方式 缺点:需要在nginx进行额外配置,语义不清晰 前端server的域名为:fe.server.com 后端服务的域名为:dev.server.com 现在我在fe.server.com对dev.server.com发起请求一定会出现跨域。 现在我们只需要启动一个nginx服务器,将server_name设置为fe.server.com,然后设置相应的location以拦截前端需要跨域的请求,最后将请求代理回dev.server.com。如下面的配置: server { listen 80; server_name fe.

WebClient, HttpClient, OkHttp: 三个Java HTTP客户端的比较

在Java世界中,有许多用于发送HTTP请求的库。在本文中,我们将重点介绍并比较三种流行的HTTP客户端:WebClient,HttpClient和OkHttp。我们将通过讲解它们的基本概念,使用方法和示例,以及它们的优缺点,帮助你选择最适合你的HTTP客户端。 1. WebClient WebClient是Spring 5中引入的非阻塞,反应式的Web客户端。它是在Project Reactor和Netty基础上构建的,非常适合用于创建高性能的微服务。 1.1 基本使用 首先,我们需要在项目中添加spring-webflux依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> 然后,我们可以创建一个WebClient实例,并使用它发送GET请求: WebClient webClient = WebClient.create("http://localhost:8080"); Mono<String> result = webClient.get() .uri("/api/v1/users") .retrieve() .bodyToMono(String.class); result.subscribe(System.out::println); 在这个例子中,我们首先创建了一个WebClient实例,然后使用它发送了一个GET请求。retrieve()方法将触发实际的HTTP请求,并返回一个ResponseSpec对象,我们可以使用这个对象来处理HTTP响应。bodyToMono方法将响应体转换为一个Mono对象。 1.2 优点和缺点 WebClient的主要优点是它的非阻塞和反应式的特性,这使得它在处理大量并发请求时能够保持高性能。此外,由于它是Spring的一部分,所以它与Spring框架的集成非常好。 然而,WebClient的主要缺点是它的学习曲线比较陡峭,特别是对于那些不熟悉反应式编程的开发者来说。 2. HttpClient HttpClient是Java 11中引入的一个新的HTTP客户端,用于替代老旧的HttpURLConnection。它支持HTTP/1.1和HTTP/2,以及同步和异步编程模型。 2.1 基本使用 要使用HttpClient,我们首先需要创建一个HttpClient实例: HttpClient client = HttpClient.newHttpClient(); 然后,我们可以创建一个HttpRequest,并使用HttpClient发送它: HttpRequest request = HttpRequest.newBuilder() .uri(new URI("http://localhost:8080/api/v1/users")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); 在这个例子中,我们首先创建了一个HttpClient实例,然后创建了一个HttpRequest。我们使用HttpClient的send方法发送请求,并使用BodyHandlers.ofString()处理响应体。 2.2 优点和缺点 HttpClient的主要优点是它是Java标准库的一部分,因此无需添加任何额外的依赖。此外,它支持HTTP/2和异步编程模型。 然而,HttpClient的主要缺点是它的API设计比较复杂,使用起来可能不如其他HTTP客户端那么直观。此外,由于它是Java 11中引入的,所以对于那些仍在使用Java 8的项目来说,它可能并不适用。 3. OkHttp OkHttp是一个高效的HTTP客户端,它的API设计简洁直观,易于使用。它支持HTTP/2,可以自动处理连接池和重试,还可以通过插件来添加新的功能。 3.1 基本使用 要使用OkHttp,我们首先需要在项目中添加okhttp依赖:

vue实现后端数据遍历输出&vue循环从前端获取值到集合里

在Vue中,你可以使用v-for指令来遍历后端返回的数据,并将其输出到页面上。下面是一个简单的示例代码: ```html <template> <div> <ul> <li v-for="item in items" :key="item.id"> {{ item.name }} </li> </ul> </div> </template> <script> export default { data() { return { items: [] // 后端返回的数据存储在这个数组中 }; }, mounted() { // 在mounted钩子函数中,可以调用后端接口获取数据 // 假设后端接口返回的数据是一个数组,每个元素包含id和name两个字段 // 可以使用axios库发送HTTP请求,示例代码如下: axios.get('/api/items') .then(response => { this.items = response.data; // 将后端返回的数据赋值给items数组 }) .catch(error => { console.error(error); }); } }; </script> ``` 在上面的代码中,v-for指令用于遍历items数组,生成相应的li元素。每个li元素中显示item.name字段的值。 请注意,上述代码中使用了axios库来发送HTTP请求。在使用之前,需要先安装axios库,并在代码中引入。可以使用以下命令安装axios: 然后,在需要使用axios的地方,使用以下代码进行引入: 以上就是一个简单的在Vue中实现后端数据遍历输出的示例。你可以根据实际情况进行修改和扩展。 在Vue中,可以使用v-for指令来循环遍历前端获取的值,并将其添加到集合中。下面是一个简单的示例代码: ```html <template> <div> <ul> <li v-for="item in items"

mac文件夹无法写入 mac只能读取不能写入怎么解

mac用户在使用外接硬盘或U盘时,有时会遇到一个问题:mac文件夹无法写入(只能读取不能写入),这种情况很让人头疼,因为无法对文件进行修改、删除或复制等操作。那么,mac文件夹无法写入的原因是什么?mac只能读取不能写入的问题又该如何解决呢? 一、mac文件夹无法写入 mac文件夹无法写入的原因主要有两个:一是文件系统不兼容,二是权限设置不正确。 1、文件系统不兼容 文件系统是指操作系统用来管理磁盘上的文件和目录的方式。不同的操作系统可能使用不同的文件系统,例如Windows常用的NTFS和FAT32,macOS常用的APFS和HFS+等。如果外接硬盘或U盘使用的文件系统与macOS不兼容,那么mac就无法对其进行写入操作,只能进行读取操作。例如,macOS可以读取NTFS格式的磁盘,但不能写入NTFS格式的磁盘。 图1:Apple文件系统 这是因为macOS默认不支持写入NTFS格式的磁盘。苹果公司认为NTFS是一种过时和不安全的文件系统,并且与其自己开发的APFS和HFS+有很大的差异。因此,苹果公司没有花费时间和精力去开发和维护对NTFS格式的磁盘的写入支持。 图2:Windows兼容格式 2、权限设置不正确 权限设置是指操作系统用来控制用户对文件和目录的访问权限的方式。不同的用户可能拥有不同的权限,例如读取、写入、执行等。如果外接硬盘或U盘上的文件或目录的权限设置不正确,那么mac就无法对其进行写入操作,只能进行读取操作。例如,如果一个文件或目录的所有者是root用户,而普通用户没有写入权限,那么普通用户就无法对其进行写入操作。 图3:共享与权限 二、mac只能读取不能写入怎么解决 针对上面介绍的两种可能导致mac文件夹无法写入的情况,有很多解决办法。下面我就为大家介绍两种mac只能读取不能写入的解决办法。 一种方法是格式化磁盘,将其转换为与macOS兼容的文件系统,例如APFS或HFS+等。格式化磁盘是指将磁盘上的所有数据删除,并重新分配磁盘空间和设置文件系统的过程。如果外接硬盘或U盘使用的文件系统与macOS不兼容,那么我们可以通过格式化磁盘来将其转换为与macOS兼容的文件系统,例如APFS或HFS+等。这样,mac就可以对其进行正常的读写操作了。但是,格式化磁盘会导致磁盘上的所有数据丢失,所以在格式化之前,请务必备份好重要的数据。 图4:格式化磁盘 另一种方法是使用第三方软件来实现对NTFS格式的磁盘的读写操作。这里我推荐一款优秀的软件:Tuxera NTFS for mac。Tuxera NTFS for mac是一款mac系统NTFS磁盘读写软件。它可以让macOS系统的电脑顺利实现对NTFS分区的读/写功能。 Tuxera NTFS For Mac 2023下载地址:https://souurl.cn/GaQ2qJ Tuxera NTFS for Mac 2022下载地址:https://souurl.cn/fIerPb 图5:Tuxera NTFS for Mac 它具有以下特点: 1、高效稳定:Tuxera NTFS for mac采用了先进的缓存技术,可以提高数据传输速度和保护、数据安全。它还支持最新版本的macOS和APFS,可以与苹果官方驱动完美兼容。 2、简单易用:Tuxera NTFS for mac安装后即可自动运行,无需额外配置或设置。它还提供了一个图形界面的偏好设置面板,可以让用户方便地管理和格式化NTFS磁盘。 图6:Tuxera NTFS for mac界面 3、功能强大:Tuxera NTFS for mac支持所有的NTFS功能,包括压缩、加密等。 4、价格合理:Tuxera NTFS for mac只需一次性付费,就可以享受终身的更新和技术支持。它还提供了15天的免费试用,可以让用户充分体验其优势。 图7:Tuxera NTFS for Mac 使用Tuxera NTFS for mac的方法很简单,可以按照以下步骤操作: 1、下载并安装Tuxera NTFS for mac。

统计文本词频的几种方法(Python)

目录 1. 单句的词频统计 2. 文章的词频统计 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 词频统计是自然语言处理的基本任务,针对一段句子、一篇文章或一组文章,统计文章中每个单词出现的次数,在此基础上发现文章的主题词、热词。 1. 单句的词频统计 思路:首先定义一个空字典my_dict,然后遍历文章(或句子),针对每个单词判断是否在字典my_dict的key中,不存在就将该单词当作my_dict的key,并设置对应的value值为1;若已存在,则将对应的value值+1。 #统计单句中每个单词出现的次数 news = "Xi, also general secretary of the Communist Party of China (CPC) Central Committee and chairman of the Central Military Commission, made the remarks while attending a voluntary tree-planting activity in the Chinese capital's southern district of Daxing." def couWord(news_list): ##定义计数函数 输入:句子的单词列表 输出:单词-次数 的字典 my_dict = {} #空字典 来保存单词出现的次数 for v in news_list: if my_dict.get(v): my_dict[v] += 1 else: my_dict[v] = 1 return my_dict print(couWord(news.

MySQL中的substr()函数

截取函数substr()方法以及参数详解 1、substr(str, position) 从position截取到字符串末尾 str可以是字符串、函数、SQL查询语句 position代表起始位置,索引位置从1开始 select substr(now(), 6); select substr('2023-10-25', 6); select substr((select fieldName from tableName where condition), 1); ​ 2、substr(str from position) 从position截取到字符串末尾 和1的操作类似,和上面1的操作对比可以发现只是把括号中的逗号换成from关键字 select substr(now() from 6); select substr('2023-10-25' from 6); select substr((select fieldName from tableName where condition) from 1); 3、substr(str, position, length) 从position截取长度为length的字符串 str可以是字符串、函数、SQL查询语句 position代表起始位置 length代表截取的字符串长度 select substr(now(), 1, 4); select substr('2024-01-01', 1, 4); select substr((select fieldName from tableName where condition), 1, 4); 4、substr(str from position for length) 从position截取长度为length的字符串

文心一言API调用(python)

创建一个百度账号,登录百度智能云,最好先实名认证一下,因为后面开通服务会需要实名认证 一、点击左上角产品服务,搜索千帆 二、点击搜索结果百度智能云千帆大模型平台进入如下界面 三、然后点击开通付费进入如下界面 四、开通所有服务,包括预制服务和大模型训练服务 五、返回千帆大模型界面点击应用接入,创建一个应用 创建应用该应用会生成API key和Secret Key,这两个参数就是用来连接文心一言的API需要的参数 六、使用API访问文心一言,下面以python为例 #让ai介绍一下自己 import requests import json API_KEY = "你自己的api key" SECRET_KEY = "你自己的secret key" def main(): url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token() payload = json.dumps({ "messages": [ { "role": "user", "content": "介绍一下自己" }, ] }) headers = { 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) result = json.loads(response.text) print(result['result']) def get_access_token(): """ 使用 AK,SK 生成鉴权签名(Access Token) :return: access_token,或是None(如果错误) """ url = "

基于GJK算法空域冲突检测与消解的matlab实现

目录 1. GJK算法 2. 基于GJK算法的水平冲突检测模型 2.1 建立空间直角坐标系及还原空域本身形状 2.2 构建闵可夫斯基支撑点 2.3 迭代寻找支撑点,构建三角形 2.4 检查该三角形是否包含原点 2.5 求解空域形状间最小距离 2.6 判断是否存在水平冲突 3. GJK算法的matlab实现 3.1 主函数部分 3.2 获取初始方向 3.3 根据给定的方向和多边形,获取单纯形新顶点 3.4 过原点检测函数 3.5 根据两个支撑点求取方向 3.6 判断三角形是否包含原点 3.7 求取原点到边的距离 3.8 判断前后迭代形成的新的支撑点是否重复 1. GJK算法 GJK算法是由Gilbert,Johnson,Keerthi 三位学者发明的,用来计算两个凸边形之间的碰撞检测,以及最近距离。 假设有空域形状水平投影构成的多边形A和空域形状水平投影多边形B,空域需求投影之间的水平距离距离d可以表示为: 同时引入闵可夫斯基(Minkowski)差集概念。 用多边形A的所有点减去多边形B中所有的点得到的一个点集合,可以用下式表示,示意图如下图所示: 闵可夫斯基差集示意图 闵可夫斯基差集的意义在于可以获取两个多边形顶点间的坐标分布关系:若多边形A 与多边形B相交,那么差集中点会分布在原点四周,也就是说差集会包含原点。差集构成的多边形的形状与两个多边形之间的距离没有直接关系。两个多边形距离越大,则差集的中心位置离原点越远;反之,离原点越近。如果相交,则差集多边形会包含原点。 因此,GJK算法的结论是:如果两个空域形状存在重叠,那么这两个多边形构成的闵可夫斯基差集,必然会包含原点。判定两个形状的相交问题进一步的简化为,是否能够在多边形A、B的闵可夫斯基差中找到三个点以构成包含原点的三角形,这个三角形被称作是单行体。 2. 基于GJK算法的水平冲突检测模型 2.1 建立空间直角坐标系及还原空域本身形状 以用空需求水平范围1000×1000(km)为基础,建立直角坐标系。选定原点以后,取水平向右方向为x轴正方向,横坐标系范围由0至+1000;取竖直向上方向为y轴正方向,纵坐标系范围由0至+1000。由于申请位置集合一般用包含所申请空域的最小外接多边形的顶点表示,因此对于圆形空域和跑道型空域应根据其最小外接多边形还原其本身形状。 2.2 构建闵可夫斯基支撑点 根据多边形的特性,可以将方向映射到多边形上的点,而这个将方向向量映射到形状上的最远的点称为支撑点。选择两个空域需求多边形的中心连接起来的构成的向量,求取其支撑点;接着以该方向的反方向作为第二个多边形B上的方向,求取多边形形B上的支撑点。这两个点相减,就是闵可夫斯基差边界上的支撑点。 2.3 迭代寻找支撑点,构建三角形 以该支撑点为向量起点,找到指向原点的向量作为新的方向,并找到第二个支撑点。 我们现在可以做一个理智的判断,看看我们是否越过了原点。我们可以过原点,做垂直于方向D的一条线(二维情形),如果这条线可以把第一个加入单纯形的点和第二个加入单纯形的点分开到A和B两边,那么说明其可以跨越原点。如果不能分到A和B两边,说明其单纯形不可能包含原点,可以直接判断两个多边形不相交(提前终止条件)。 两个支撑点连成一条直线,垂直于该直线的向量,则为新的方向d并求出新的支撑点。 同样的我们做是否过原点判断。 2.4 检查该三角形是否包含原点 根据三个支撑点连接构建三角形。若三角形内包含原点,则说明两个空域需求多边形相交,说明这两空域需求存在水平冲突; 如果三角形没有包含原点,则更新方向,添加新的支撑点。 选择其距离最接近原点的三角形边的垂直向量并保留这条边上的两个点,删除剩余的一个点,并将该垂直向量作为新的方向再次寻找第三个支撑点,做下一次迭代并判断新的三角形是否包含原点。 如果迭代后新的三角形和原来的三角形是同一个,则说明不存在包含原点的三角形,此时退出迭代循环。 2.5 求解空域形状间最小距离 如果最后三角形不包含原点,此时可以求取空域两个形状间的最小距离。利用点到直线之间的距离公式,可求出原点到最接近原点的边的距离,该距离为两个空域需求多边形之间的最小距离,即两个空域需求水平间隔。

springboot整合eureka、config搭建注册中心和配置中心

这篇文章详细介绍怎么通过eureka和config分别搭建一个注册中心和配置中心的服务。 目录 一 、springboot整合eureka搭建注册中心 二、springboot整合config搭建配置中心 三、从配置中心拉取配置 一 、springboot整合eureka搭建注册中心 1、在IntelliJ IDEA中创建一个springboot项目,并命名为eureka 2、修改pom.xml,添加eureka-server的依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> <lombok.version>1.18.22</lombok.version> <eureka.version>1.4.4.RELEASE</eureka.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>${eureka.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 3、修改配置文件 server: port: 8761 eureka: instance: hostname: localhost # eureka所在的服务器名 client: fetch-registry: false register-with-eureka: false # eureka提供服务的地址 service-url: defaultZone: http://${eureka.

记录Flutter框架开发的安卓App的抓包以及Frida安装和hook使用教程

前言 在我们进行安卓逆向的时候,往往会碰到发现是安卓app的flutter框架开发的,那么怎么判断app是Flutter开发的呢,app的apk包中包含libflutter.so即是,如下图。 为何我们普通方式抓不到HTTPS包呢: 1.它不走系统代理 2.它不支持设置代理 3.它不信任系统证书 然后它证书校验写死在so文件里,所以导致JustTrustMe,SSLUnpinning等模块完全失效,目前面临的问题:需要证书校验和不走代理,解决这个问题有以下步骤: 一.针对证书校验问题,就是用frida去hook libflutter.so中的函数 二.针对不走代理我们可以使用基于VPN模式的Postern+charles 转发抓包 三.Frida安装使用配置 一、如何用frida去hook libflutter.so中的函数? 1.可以先用360压缩在本地电脑,把apk文件解压到本地,并找到使用IDA打开app中的libflutter.so文件,打开后先转为字符串,后ctrl+F搜索ssl_client,应该只有一个,如下图 双击进去 找一下这个堆栈,点击红圈函数,按x追踪 点击第一个进去 应该会看到这样的标志 那就是找对了 然后F5进去查看伪代码,发现这个函数地址是sub_5DC3CC,然后改为0X5dc3cc,后续frida hook时候会用到。这时候成功hook到libflutter.so中的函数 2.这个时候,我们使用别人写好的脚本https://github.com/G123N1NJ4/c2hack/blob/master/Mobile/flutter-ssl-bypass.md 把这段代码复制下来,把代码中的地址修改为刚才获得的地址0X5dc3cc,将代码保存为ssl.js。 3.然后打开app,frida –UF –l ssl.js (-UF 就是当前打开的app) 然后打开postern工具转发一下,在charles就能抓到包了。 4.抓包成功! 二、Postern+charles 转发抓包 1.主要看下面这个大佬的文章 https://blog.csdn.net/yuyue_999/article/details/126575819 三、Frida安装使用配置 1.2.frida安装 pip install frida== 16.10 pip install frida-tools== 12.13 pip install objection== 1.8.4 1.3.frida-server下载 下载frida-sever,官方下载地址:https://github.com/frida/frida/releases frida-server下载需要注意的有两点: 1.安装的frida版本:需要下载与安装的frida版本对应的frida-server,否则会出错。 2.手机设备的架构:查看手机架构,adb shell cat /proc/cpuinfo ,可以看到我是64位的,所以选择的是android-arm64 下载命令:frida-server-16.10-android-arm64.xz 下载完毕之后,解压后通过adb push到设备的临时目录下 adb push frida-server-16.10-android-arm64 /data/local/tmp/ 3.配置完成后启动frida服务并连接 adb shell进入手机命令行

Java 命名规范(非常全),收藏了!

简介 在本文中,将从大到小,从外到内,总结Java编程中的命名规范。文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方法命名,变量命名,常类命名,抽象类命名,异常类命名以及扩展类命名等。我将按照项目工程目录结构,从包,类(接口,抽象类,异常类),方法,变量和常量的顺序展开介绍。 1. 包命名规范 包(Package)的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包命使用小写英文字母进行命名,并使用“.”进行分割,每个被分割的单元只能包含一个名词。一般地,包命名常采用顶级域名作为前缀,例如com,net,org,edu,gov,cn,io等,随后紧跟公司/组织/个人名称以及功能模块名称。下面是一些包命名示例: package org.springframework.boot.autoconfigure.cloud package org.springframework.boot.util package org.hibernate.action package org.hibernate.cfg package com.alibaba.druid package com.alibaba.druid.filter package com.alibaba.nacos.client.config package com.ramostear.blog.web 下面是Oracle Java的一些常见包命名例子: package java.beans package java.io package java.lang package java.net package java.util package javax.annotation 2. 类命名规范 类(Class)通常采用名词进行命名,且首字母大写,如果一个类名包含两个以上名词,建议使用驼峰命名(Camel-Case)法书写类名,每个名词首字母也应该大写。一般地,类名的书写尽量使其保持简单和描述的完整性,因此在书写类名时不建议使用缩写(一些约定俗成的命名除外,例如Internationalization and Localization缩写成i18n,Uniform Resource Identifier缩写成URI,Data Access Object缩写成DAO,JSON Web Token缩写成JWT,HyperText Markup Language缩写成HTML等等)。下列是一些常见的类命名示例: public class UserDTO{ //TODO... } class EmployeeService{ //TODO... } class StudentDAO{ //TODO... } class OrderItemEntity{ //TODO... } public class UserServiceImpl{ //TODO... } public class OrderItemController{ //TODO.

原创:旗舰游戏显卡(980Ti,1080Ti,TiTan V,2080Ti,3090,4090),AI画图stable diffusion)和大模型(chatglm2-6b)推理性能横评

前言: 自从去年10月份以ChatGPT和stable diffusion的发布引发了一波生成式AI浪潮,但很多人特别是某些领导整天在会议上说人工智能带来的各种风险和不足,其实自己几乎没用过ChatGPT和stable diffusion,对生成式AI(AIGC)只有偏见!缺少实践对新生事物的理解和抓住机会是有害的,由于这一波AI浪潮带着复杂难懂的各种专业术语和昂贵的平台,给习惯了点击购买云主机的IT从业者和个人开发者带来了不小的门槛,加之最近美国实体名单居然把游戏显卡RTX4090都加入禁止出售给中国的实体清单,我觉得有必要在”廉价”游戏显卡上把大模型对话和stable diffusion画小姐姐的生成式AI在自己的PC机上跑起来!这样才能谈后面的体验和带来的机会。 原文首次发表于:https://zhuanlan.zhihu.com/p/663179436 以下评测数据都是自己花钱、花时间原创测试得到,希望给所有开发者实践大模型和AI画图予参考,有帮助和喜欢的朋友请收藏、关注和点赞,让人人都能够参与的AI才是真正的AI 测试环境说明: 测试平台硬件为:Intel Xeon Platinum 8360Y,256G内存(当然你用i3 cpu+16G内存也没有问题) 操作系统:开始用Linux Ubuntu 22.0.4,由于对比windows发现性能差异很小后面也有部分测试用了windows 10, 软件组件:这部分是重点,对性能有明显差异,所以特别强调 驱动安装的是537.42(980Ti 特别点用的只有低版本536.40) CUDA: 12.2 python: 3.10.11 Pytorch: 2.0.1+cu121 transformers :在大模型对话(chatglm2-6b)用的是4.34.0;Stable difusion画小姐姐用的是4.30.0 大模型选用的是智谱AI与清华KEG实验室发布的中英双语对话模型chatglm2-6b,有60亿个参数,控制得当在980Ti的6Gb显存也勉强可以跑起来。参考:https://github.com/THUDM/ChatGLM2-6B 大模型加载webui用的官方text-generation-webui snapshot-2023-10-15最新版,参考:https://github.com/oobabooga/text-generation-webui stable diffusion webui加载器用的官方v1.6版本,没用xformers,启动参数除了端口全部都默认,参考:https://github.com/AUTOMATIC1111/stable-diffusion-webui 模型用的:chilloutmix_Ni.safetensors 测试分为两部分,第一部分为stable diffusion的测试,用SD生成10张512*512 的图片,提示词prompt如下: masterpiece, best quality, realistic, 1girl,solo,25 years old,blue vest, blue skirt,white shirt,short sleeves,standing,<lora:officelady:0.7>office-lady Negative prompt: EasyNegative,glasses Steps: 20, Size: 512x512, Seed: 1194320243, Model: chilloutmix_NiPrunedFp32Fix, Version: v1.4.0, Sampler: Euler a, CFG scale: 7, Model hash: fc2511737a, "