c++ 筛选裁决文书 1985-2021的数据 分析算法的差异

c++ cpp 并行计算筛选过滤 裁决文书网1985-2021 的300g数据

数据
在这里插入图片描述
数据解压以后大概300g,最开始是使用python代码进行计算,但是python实在太慢了,加上多进程也不行,
于是 使用c++ 进行 计算
c++这块最开始使用的是 i7-9700h 用的是单线程,使用三个程序程序同步计算,大概需要2-3个小时的样子。

改成c++多线程,电脑换成i9-12900h 20核心的,就快得多了。
最多也就是30分钟

解压的时候,是使用python调用zip,多进程进行解压,python解压代码如下:
python代码写的也能看出来,最开始其实就是用单线程,但是也是很慢,不过我用的多进程的时候,也是慢,原因是 磁盘io到达最大,这里教训我以后要尽量找个磁盘io大的程序


import traceback
import os
import shutil
import sysdef get_all_file(path):# import osreturn_list=[]for root,dirs,files in os.walk(path,topdown=True):for file_one in files:use_path=root+'/'+file_onereturn_list.append(use_path.replace('/','\\'))return return_list# w文件区域。
main_path=os.getcwd()  # exe文件存放的路径。import os
import zipfile# 定义zip文件所在的目录
zip_dir = './3669万专利申请全量数据1985-2022年'
zip_dir = './zhongguo_caijue_ziliaoku/main_zip'# 遍历目录下的所有文件# for file_name in get_all_file(zip_dir):
#     if file_name.endswith('.zip'):
#         # 构建zip文件的完整路径
#         # zip_path = os.path.join(zip_dir, file_name)#         zip_path= file_name#         # 创建一个与zip文件同名的文件夹来存放解压后的文件
#         output_dir = os.path.splitext(zip_path)[0]
#         os.makedirs(output_dir, exist_ok=True)#         # 打开zip文件
#         with zipfile.ZipFile(zip_path, 'r') as zip_ref:
#             # 解压zip文件到指定的输出目录
#             zip_ref.extractall(output_dir)#         print(f'Successfully extracted {file_name} to {output_dir}')def get_zip_fuc(file_name,mi):if file_name.endswith('.zip'):# 构建zip文件的完整路径# zip_path = os.path.join(zip_dir, file_name)zip_path= file_name# 创建一个与zip文件同名的文件夹来存放解压后的文件output_dir = os.path.splitext(zip_path)[0]os.makedirs(output_dir, exist_ok=True)# 打开zip文件with zipfile.ZipFile(zip_path, 'r') as zip_ref:# 解压zip文件到指定的输出目录zip_ref.extractall(output_dir)print(f'Successfully extracted {mi} {file_name} to {output_dir}')import multiprocessingif __name__ == '__main__':pool = multiprocessing.Pool(processes=20)# main_len = len(node_n2_list_list)for mi,file_name in enumerate(get_all_file(zip_dir)):pool.apply_async(get_zip_fuc, args=(file_name,mi))pool.close()pool.join()

在这里插入图片描述

在这里插入图片描述

回到c++计算这里,对于 多文件,单个文件也很大的程序,我采取的做法是比较简单的,也就是一个线程负责一个文件的计算筛选,通过线程锁来提取对应的程序。

// by guangdu  wx:wo15985300747 
// 有需要用c++加速计算的可以联系我,我可以给你封装为各种各样语言的实现
// 大数据处理的也可以一起聊聊
// 复杂网络也是一样哦#include "pool_number.cpp"
#include <thread>
#include <iostream>
#include <chrono>
#include <vector>
using namespace std;int cpu_number(){// SYSTEM_INFO sysInfo;// GetSystemInfo(&sysInfo);// unsigned int numCores1 = sysInfo.dwNumberOfProcessors;// return numCores1;unsigned int numCores = std::thread::hardware_concurrency();return numCores;
}# include <iostream>
#include <windows.h>
#include <string>
#include <basci/basci.h> //using namespace std;#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>using namespace std;#include <iostream>
#include <fstream>
#include <vector>
#include <string>using namespace std;vector<vector<string>> read_csv(string filename)
{vector<vector<string>> data;ifstream file(filename);if (!file.is_open()) {cerr << "Failed to open file: " << filename << endl;return data;}enum State { UnquotedField, QuotedField, QuotedQuote };State state = UnquotedField;vector<string> row;string field;char c;while (file.get(c)) {switch (state) {case UnquotedField:switch (c) {case ',': // end of fieldrow.push_back(field);field.clear();break;case '"': // start of quoted fieldstate = QuotedField;break;case '\n': // end of rowrow.push_back(field);data.push_back(row);row.clear();field.clear();break;default:field.push_back(c);break;}break;case QuotedField:switch (c) {case '"': // end of quoted fieldstate = QuotedQuote;break;default:field.push_back(c);break;}break;case QuotedQuote:switch (c) {case ',': // comma inside quotesrow.push_back(field + "\"");field.clear();state = UnquotedField;break;case '"': // escaped quotefield.push_back('"');state = QuotedField;break;case '\n': // end of rowrow.push_back(field);data.push_back(row);row.clear();field.clear();state = UnquotedField;break;default: // end of quoterow.push_back(field);field.clear();state = UnquotedField;break;}break;}}if (!field.empty()) {row.push_back(field);}if (!row.empty()) {data.push_back(row);}file.close();// 减少复制的损耗return std::move(data);
}#include <iostream>
#include <fstream>using namespace std;int getFileSize(string filePath) {ifstream file(filePath, ios::binary | ios::ate);int size = file.tellg();file.close();return size/(1024*1024);
}#include <chrono>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <sstream>
#include <string>std::string getCurrentTimeStr() {// 获取当前时间auto now = std::chrono::system_clock::now();std::time_t time = std::chrono::system_clock::to_time_t(now);// 将时间格式化为字符串std::stringstream ss;ss << std::put_time(std::localtime(&time), "%Y_%m_%d_%H_%M_%S");return ss.str();
}// bool write_in(string xx, vector<string> dd_list) {
//     for (const auto& str : dd_list) {
//         if (xx.find(str) != string::npos) {
//             return true;
//         }
//     }
//     return false;
// }bool write_in(string xx, const vector<string>& dd_list) {for (const string& str : dd_list) {if (xx.find(str) != string::npos) {return true;}}return false;
}// #include <iostream>
// #include <vector>
// #include <string>// std::ostream& operator<<(std::ostream& os, const std::vector<std::string>& vec) {
//     os << "[";
//     int i=0;
//     for (auto it = vec.begin(); it != vec.end(); ++it) {
//         // if (it != vec.begin()) {
//         //     os << ", ";
//         // }
//         os <<"   "<<i<<" "<< *it<<endl;
//         i=i+1;
//     }
//     os << "]";
//     return os;
// }// void write_csv_file(string file_name,vector<vector<string>> main_list){
// }/*
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
void write_csv_file(string file_name, vector<vector<string>> main_list) {ofstream file(file_name);if (file.is_open()) {for (vector<string> row : main_list) {for (int i = 0; i < row.size(); i++) {string cell = row[i];if (cell.find_first_of(",\"\n") != string::npos) {file << "\"";for (char c : cell) {if (c == '\"') {file << "\"\"";} else {file << c;}}file << "\"";} else {file << cell;}if (i < row.size() - 1) {file << ",";}}file << "\n";}file.close();} else {cerr << "Unable to open file: " << file_name << endl;}
}
*/#include <fstream>
#include <iostream>
#include <vector>
using namespace std;void write_csv_file(string file_name, vector<vector<string>>* main_list) {ofstream file(file_name);if (file.is_open()) {for (vector<string>& row : *main_list) {for (int i = 0; i < row.size(); i++) {string& cell = row[i];if (cell.find_first_of(",\"\n") != string::npos) {file << "\"";for (char c : cell) {if (c == '\"') {file << "\"\"";} else {file << c;}}file << "\"";} else {file << cell;}if (i < row.size() - 1) {file << ",";}}file << "\n";}file.close();} else {cerr << "Unable to open file: " << file_name << endl;}
}#include <iostream>
#include <chrono>
#include <ctime>
#include <cstdlib>using namespace std;#include <iostream>
#include <thread>
#include <mutex>std::mutex mtx;  // 定义一个互斥锁int now_sum_id_number;vector<vector<string >> re_vector_2d_list_fuc(int fi,int main_i,int main_len,long long csv_i,string read_file,string new_path,int main_number,vector<string> str_list ){std::unique_lock<std::mutex> lock(mtx, std::defer_lock);  // 定义一个未加锁的unique_lock// 读取一个csv文件,获得其中的内容enum State { UnquotedField, QuotedField, QuotedQuote };vector<string> row;string field;char c;State state;auto start_time = std::chrono::high_resolution_clock::now();std::chrono::time_point<std::chrono::high_resolution_clock> end_time;vector<vector<string >> data_list;// int main_len =  main_list.len();// for (node *p = main_list.head->next; p != main_list.head; p = p->next) {cout<<endl<<endl;cout<< main_i<<"/"<<main_len<<"  "<<fi<<"  "<<getFileSize(read_file)<<"  "<<gbktoutf8(read_file)<<endl;main_i = main_i+1;ifstream file(read_file, std::ios::in);if (!file.is_open()) {cerr << "Failed to open file: " << read_file << endl;}state = UnquotedField;while (file.get(c)) {switch (state) {case UnquotedField:switch (c) {case ',': // end of fieldrow.push_back(field);field.clear();break;case '"': // start of quoted fieldstate = QuotedField;break;case '\n': // end of rowrow.push_back(field);// data.push_back(row);// fi=fi+1;// if(fi%100000==0){//     end_time = std::chrono::high_resolution_clock::now();//     // cout<<"fi  "<<fi<<"  "<<std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count()<<"   "<<row.size()<<endl;//     // cout<<"fi  "<<fi<<"  "<<(std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count())/ 1e6 <<"   "<<row.size()<<endl;//     cout<<"       sum_row_number "<<main_number<<"  "<<fi/10000<<"   time[s] "<<(std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count())/ 1e6 <<"   row_size "<<row.size()<<"    "<<row[10] <<endl;//     // cout<<"file fix  "<<fi/10000<<"  "<<std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count()<<"   "<<row.size()<<"  "<<gbktoutf8 (p->str )<<"    "<<row[10] <<endl;//     // cout<<row<<endl;//     // cout<<"    "<<row[10]<<endl;// }if(write_in(gbktoutf8(row[10]),str_list)){;//执行写入data_list.push_back(row);main_number= main_number+1;if(main_number%10000==0){end_time = std::chrono::high_resolution_clock::now();// cout<<"清空与整理a "<<main_number<<endl;cout<<"       sum_row_number "<<main_number<<"  "<<fi/10000<<"   time[s] "<<(std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count())/ 1e6 <<"   row_size "<<row.size()<<"    "<<row[10] <<endl;lock.lock();  // 手动开启线程锁now_sum_id_number = now_sum_id_number+1;lock.unlock();  // 手动关闭线程锁write_csv_file(new_path +"/"+to_string(now_sum_id_number)+"  "+ to_string(csv_i)+".csv",data_list);data_list.clear();csv_i=csv_i+1;}}row.clear();field.clear();break;default:field.push_back(c);break;}break;case QuotedField:switch (c) {case '"': // end of quoted fieldstate = QuotedQuote;break;default:field.push_back(c);break;}break;case QuotedQuote:switch (c) {case ',': // comma inside quotesrow.push_back(field + "\"");field.clear();state = UnquotedField;break;case '"': // escaped quotefield.push_back('"');state = QuotedField;break;case '\n': // end of rowrow.push_back(field);// data.push_back(row);// fi=fi+1;// if(fi%10000==0){//     end_time = std::chrono::high_resolution_clock::now();//     // cout<<"file fix  "<<fi/10000<<"  "<<std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count()<<"   "<<row.size()<<"  "<<gbktoutf8 (p->str )<<"    "<<row[10] <<endl;//     cout<<"       sum_row_number "<<main_number<<"  "<<fi/10000<<"   time[s] "<<(std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count())/ 1e6 <<"   row_size "<<row.size()<<"    "<<row[10] <<endl;//     // cout<<row<<endl;//     // cout<<"    "<<row[10]<<endl;// }if(write_in(gbktoutf8(row[10]),str_list)){;//执行写入data_list.push_back(row);main_number= main_number+1;if(main_number%10000==0){end_time = std::chrono::high_resolution_clock::now();// cout<<"清空与整理a "<<main_number<<endl;cout<<"       sum_row_number "<<main_number<<"  "<<fi/10000<<"   time[s] "<<(std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count())/ 1e6 <<"   row_size "<<row.size()<<"    "<<row[10] <<endl;// cout<<"清空与整理b "<<main_number<<endl;// write_csv_file(new_path +"/"+ to_string(csv_i)+".csv",data_list);lock.lock();  // 手动开启线程锁now_sum_id_number = now_sum_id_number+1;lock.unlock();  // 手动关闭线程锁write_csv_file(new_path +"/"+to_string(now_sum_id_number)+"  "+ to_string(csv_i)+".csv",data_list);data_list.clear();csv_i=csv_i+1;}}row.clear();field.clear();state = UnquotedField;break;default: // end of quoterow.push_back(field);field.clear();state = UnquotedField;break;}break;}}if (!field.empty()) {row.push_back(field);}if (!row.empty()) {fi=fi+1;// if(fi%10000==0){//     cout<<"fi  "<<fi<<endl;// }// data.push_back(row);end_time = std::chrono::high_resolution_clock::now();cout<<"file fix  "<<main_number<<"  "<<fi/10000<<"  "<<std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count()<<"   "<<row.size()<<"  "<<gbktoutf8 (read_file)<<"    "<<row[10] <<endl;// cout<<"                  "<<row[10]<<endl;if(write_in(gbktoutf8(row[10]),str_list)){;//执行写入data_list.push_back(row);main_number= main_number+1;if(main_number%10000==0){// cout<<"清空与整理c "<<main_number<<endl;// write_csv_file(new_path +"/"+ to_string(csv_i)+".csv",data_list);lock.lock();  // 手动开启线程锁now_sum_id_number = now_sum_id_number+1;lock.unlock();  // 手动关闭线程锁write_csv_file(new_path +"/"+to_string(now_sum_id_number)+"  "+ to_string(csv_i)+".csv",data_list);data_list.clear();csv_i=csv_i+1;}}}end_time = std::chrono::high_resolution_clock::now();cout<<"       sum_row_number "<<main_number<<"  "<<fi/10000<<"   time[s] "<<(std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count())/ 1e6 <<"   row_size "<<row.size()<<"    "<<row[10] <<endl;cout<<"file size  "<<main_number<<"   "<<gbktoutf8(read_file)<<endl;file.close();// }cout<<"main_len "<<data_list.size()<<endl;// write_csv_file(new_path +"/"+ to_string(csv_i+1)+".csv",data_list);lock.lock();  // 手动开启线程锁now_sum_id_number = now_sum_id_number+1;lock.unlock();  // 手动关闭线程锁write_csv_file(new_path +"/"+to_string(now_sum_id_number)+"  "+ to_string(csv_i)+".csv",data_list);return std::move(data_list);}int main() {// string date_str = "2021-06-29-01"; // 给定的日期字符串// // 将日期字符串转换为时间点// tm date_tm = {};// strptime(date_str.c_str(), "%Y-%m-%d-%H", &date_tm);// time_t date_time = mktime(&date_tm);// auto date_point = chrono::system_clock::from_time_t(date_time);// // 获取当前时间点// auto now_point = chrono::system_clock::now();// // 判断当前时间是否超过给定时间点// if (now_point > date_point) {//     cout << "Current time has exceeded the given date." << endl;//     exit(0); // 退出程序// }//记录程序开始的时间是多久auto start = std::chrono::high_resolution_clock::now();now_sum_id_number=0; // 标记具体的线程中的进度// 传递一个文件路径,传递一个二维数组,写入一下。// int csv_i=0;int csv_i=26;// 十万行写入一次,传入一次,少计算数量多次system("chcp 65001");u_init();cout<<"exe path: "<<main_path<<endl;vector<vector<string>> data;string read_path = main_path+utf8togbk("/读取文件");ulist main_list =get_all_file(read_path);cout<<main_list.len()<<endl;int main_i =0;int fi=0;string write_path = main_path    +utf8togbk("/写入文件");make_file(write_path);string   new_path = write_path +utf8togbk("/")+ getCurrentTimeStr();make_file(new_path  );// 开始读取数据了,等于0 的不要,写一个函数,传递一个值,和一个数组,返回其中的内容。vector<string> str_list;// str_list.push_back(utf8togbk("买卖合同纠纷"));// str_list.push_back("买卖合同纠纷");vector<vector<string>> csv_list= read_csv(utf8togbk("查询词.csv"));copy_file(utf8togbk("查询词.csv").c_str(),new_path.c_str());// cout<<<<endl;cout<<"---------------------------------------------------------------------------------------------------------"<<endl;int main_number=0;int cxi=0;string cxd="";for(auto & dc:csv_list){cxd = gbktoutf8(dc[0]);if(cxd!= ""){cout<<"查询关键词序列  在其中  "<<cxi<<" :"<<cxd<<endl;str_list.push_back(cxd);}else{cout<<"查询关键词序列 不在其中 "<<cxi<<" :"<<cxd<<endl;// str_list.push_back(cxd);}cxi=cxi+1;}cout<<"---------------------------------------------------------------------------------------------------------"<<endl;int main_len = main_list.len();//-------------------------------------------------------------------// auto start = std::chrono::high_resolution_clock::now();cout<<"cpu_number "<<cpu_number()<<endl;int pool_size = cpu_number();int task_num = 23;ThreadPool threadpool(pool_size);vector<future<vector<vector<string>>>> resVec;string read_file;for (node *p = main_list.head->next; p != main_list.head; p = p->next){read_file = p->str;resVec.emplace_back(// 分为前后两个部分,参数要对的上。threadpool.AddTask([fi,main_i,main_len,csv_i,read_file,new_path,main_number,str_list] { return re_vector_2d_list_fuc(fi,main_i,main_len,csv_i,read_file,new_path,main_number,str_list); }));} int write_file_number = 0;vector<vector<vector<string>>> remain_list;/*打印每个任务的返回值*/for (auto&& result: resVec) {remain_list.push_back(result.get());// cout <<"data: "<< result.get() << " \n";}for(auto dd:remain_list){// cout<<dd<<endl;}// 获取结束时间点auto end = std::chrono::high_resolution_clock::now();// 计算代码执行时间(以毫秒为单位)auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();// 输出执行时间std::cout << "run time:" << duration << " ms" << std::endl;cout << endl;system("pause");return 0;
}

c++ 运行效果,用27g大小的部分计算的,非常快 60s不到
在这里插入图片描述

pass 还有一个线程池文件,有需要call,我发你吧。

分析c++的 main.cpp 文件,逻辑是
获取指定文件夹下的所有文件,然后开启线程池计算,不断计算就可以了。

//转载请勿去除我的联系方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot的心灵治愈交流平台设计与实现

基于Spring Boot的心灵治愈交流平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看首页…

C++类成员函数重载

成员函数重载是指在同一个类里&#xff0c;有两个以上的函数具有相同的函数名。每种实现对应着一个函数体&#xff0c;但是形参的个数或者类型不同。 例如:减法函数重载 创建一个类&#xff0c;在类中定义3个名为subtract的重载成员函数&#xff0c;分别实现两…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片&#xff0c;那是资料获取的入口&#xff01; 点击链接加入群聊【2024五一数学建模】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&khoTDlhAS5N_Ffp-vucfG5WjeeJFxsWbz&authKey7oCSHS25VqSLauZ2PpiewRQ9D9PklaCxVS5X6i%2BAkDrey992f0t15…

能综合验证的RISCV内核开源项目调研选择

1. 评估的背景目的 考虑维度&#xff1a; 资源需求&#xff0c;开放程度&#xff0c;学习难度&#xff0c;工具链资源。 最好是国产FPGA支持&#xff0c;或者开源EDA工具链支持。 目标还是寻求一款在FPGA上低成本跑起来并能够支持一定的程序开发&#xff0c;最好实现一款…

人工智能 | Embedding

Embedding是什么 Embedding是一种将离散的符或对象映射到连续向量空间技术。在自然语言处理领域中&#xff0c;Embedding常用于将单词或句子为向量形式&#xff0c;以便计算机可以更好地理解和处理文本数据。 通过使用Embedding&#xff0c;我们可以将每个单词或句子表示为一…

eclipse开启服务后,网页无法打开,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

kubectl_入门_service详解

Service 我们知道 Pod 的生命周期是有限的。可以用 ReplicaSet 和Deployment 来动态的创建和销毁 Pod&#xff0c;每个 Pod 都有自己的 IP 地址&#xff0c;但是如果 Pod 重建了的话那么他的 IP 很有可能也就变化了。 这就会带来一个问题&#xff1a;比如我们有一些后端的 Po…

jupyter notebook切换conda虚拟环境

首先&#xff0c;切换到某个虚拟环境&#xff0c;本人切换到了d2l环境&#xff1a; (d2l) C:\Users\10129>pip install ipykernel然后&#xff0c;如代码所示安装ipykernel包 最后&#xff0c;按下述代码执行&#xff1a; (d2l) C:\Users\10129>python -m ipykernel i…

mac电脑关于ios端的appium真机自动化测试环境搭建

一、app store 下载xcode,需要登录apple id 再开始下载 二、安装homebrew 1、终端输入命令&#xff1a; curl -fsSL <https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh>如果不能直接安装&#xff0c;而是出现了很多内容&#xff0c;那么这个时候不要着急&…

国产服务器操作系统部署NTP服务 _ 统信UOS _ 麒麟 _ 中科方德

原文链接&#xff1a;国产服务器操作系统部署NTP服务 | 统信UOS | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;在保持服务器时间的精确同步方面&#xff0c;时间同步服务器&#xff08;NTP服务器&#xff09;扮演着至关重要的角色&#xff0c;它能确保系统操作的时…

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架&#xff0c;用于学习时间序列数据的表示&#xff0c;可以在任意语义层次上进行。与现有方法不同&#xff0c;TS2Vec通过对增强的上下文视图进行层次化…

【热门话题】Stylus 入门与实践详解

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stylus 入门与实践详解引言一、Stylus 简介1.1 什么是 Stylus&#xff1f;1.2 S…

【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623 #include "reg52.h" sbit LCD1602_RS P3^5;//RS端数据命令选择(H/L) sbit LCD1602_RW P3^6;//RW端读写选择(H/L) sbit LCD1602_EN P3^7;//EN端使能信号上升沿25ns void PanDuan1602(/*LCD1602忙判断*/) { LCD1602…

基于Vue Router和element-ui的LayOut

一、展示 二、代码 app.vue <template><div id"app"><el-container style"border: 1px solid #eee; height: 100vh"><el-aside v-bind:width"asideWidth" style"background-color: rgb(48, 65, 86);"><…

前端高频算法

分析算法排序&#xff1a; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度: 运行完一个程序所需内存的大小。 执行效率、内存消耗、稳定性 三方面入手。 1. 排序 1.1 冒泡排序 冒泡的过程只涉及相邻数据的交换操作&#xff0c;所以它的空间复杂度为 O(1)。 为了保证…

政安晨:【Keras机器学习示例演绎】(二十八)—— 使用 卷积神经网络与循环神经网络 架构进行视频分类

目录 数据收集 设置 定义超参数 数据准备 序列模型 推论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正…

分享自己一篇在亚马逊云科技AWS官网发的Blog技术文章

小李哥在亚马逊AWS官网&#xff0c;作为第一作者发了自己的第一篇AWS Blog文章&#xff0c;也是自己今年在AWS官网的第11篇文章。文章主要内容是描述为出海的金融企业&#xff0c;搭建满足PCI-DSS合规、FIPS 140-2 Level 3安全标准的传输中数据加密云端方案&#xff0c;主要用于…

更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 再谈端口号 端口号的返回…

jsp驾校管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 驾校管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用serlvetdaobean mvc 模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为&#xff1a; 能提交独立proof给StarkWare的Ethereum Verifier&#xff0c;的首个开源的STARK prover。 开源代码见&#xff1a; https://github.com/andrewmilson/sandstorm&#xff08;Rust&#xff09; L2Beat 提供了以太坊上Starknet的合约架构图&…