前端技术
HTML
CSS
Javascript
前端框架和UI库
VUE
ReactJS
AngularJS
JQuery
NodeJS
JSON
Element-UI
Bootstrap
Material UI
服务端和客户端
Java
Python
PHP
Golang
Scala
Kotlin
Groovy
Ruby
Lua
.net
c#
c++
后端WEB和工程框架
SpringBoot
SpringCloud
Struts2
MyBatis
Hibernate
Tornado
Beego
Go-Spring
Go Gin
Go Iris
Dubbo
HessianRPC
Maven
Gradle
数据库
MySQL
Oracle
Mongo
中间件与web容器
Redis
MemCache
Etcd
Cassandra
Kafka
RabbitMQ
RocketMQ
ActiveMQ
Nacos
Consul
Tomcat
Nginx
Netty
大数据技术
Hive
Impala
ClickHouse
DorisDB
Greenplum
PostgreSQL
HBase
Kylin
Hadoop
Apache Pig
ZooKeeper
SeaTunnel
Sqoop
Datax
Flink
Spark
Mahout
数据搜索与日志
ElasticSearch
Apache Lucene
Apache Solr
Kibana
Logstash
数据可视化与OLAP
Apache Atlas
Superset
Saiku
Tesseract
系统与容器
Linux
Shell
Docker
Kubernetes
[使用Option进行空值检查的最佳实践 ]的搜索结果
这里是文章列表。热门标签的颜色随机变换,标签颜色没有特殊含义。
点击某个标签可搜索标签相关的文章。
点击某个标签可搜索标签相关的文章。
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 在Bootstrap框架中查阅图灵计算机大词典: thumbnail adj. 极小的, 极短的; n. 大拇指的指甲, 极小之物; n. 拇指甲(草图);adj.简略的,缩略的(拇指甲大小的,小型的); n. 极小的图片, 小的代表大的更多细节的图片 (计算机用语); thumbnail 在Bootstrap框架中真实含义: n.【计】缩略图。 thumbnail在美工用来具体表现布局方式表达: 大致相当亦为效果图及缩略图,很小(大约为3×4英寸),缩略了细节比较粗糙,是最基本的东西。 直线或水波纹表示正文的位置,方框表示图形的位置。然后,中选的小样再进一步发展。 以下举个案例: a元素超链接thumbnail呈缩略图构成 <div class="col-xs-6 col-md-3"> </div>: <div class="container"> <div class="row"> <div class="col-xs-6 col-md-3"> <a href="" class="thumbnail"> <img src="../image/HAIAN.jpg" alt="180x100%" style="height: 180px;width: 100%;display: block;"> </a> </div> <div class="col-xs-6 col-md-3"> <a href="" class="thumbnail"> <img src="../image/HAIAN.jpg" alt="180x100%" style="height: 180px;width: 100%;display: block;"> </a> </div> <div class="col-xs-6 col-md-3"> <a href="" class="thumbnail"> <img src="../image/HAIAN.jpg" alt="180x100%" style="height: 180px;width: 100%;display: block;"> </a> </div> <div class="col-xs-6 col-md-3"> <a href="" class="thumbnail"> <img src="../image/HAIAN.jpg" alt="180x100%" style="height: 180px;width: 100%;display: block;"> </a> </div> </div> </div> 本篇文章为转载内容。原文链接:https://blog.csdn.net/sinat_34719507/article/details/53576257。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-06-08 11:31:22
299
转载
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 AILAB专项训练 问题描述 编制程序完成下述任务:接受两个数,一个为用 户一年期定期存款金额,一个为按照百分比格式表示的利率;程序计算一年期满后本金与利息总额。说明:(1)存款金额以人民币元为单位,可能精确到分; (2)输入利率时不需要输入百分号,例如一年期定期存款年利率为2.52%,用户输入2.52即可;(3)按照国家法律,存款利息所得需缴纳20% 的所得税,计算结果时所得税部分应扣除。 输入格式 输入一行,包含两个实数,分别表示本金和年利率。 输出格式 输出一行,包含一个实数,保留到小数点后两位,表示一年后的本金与利息和。 样例输入 10000 2.52 样例输出 10201.60 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double a = sc.nextDouble();double b = sc.nextDouble();double res = a + a b / 100.0 0.8;System.out.printf("%.2f", res);} } 本篇文章为转载内容。原文链接:https://blog.csdn.net/Abdulaziz_Dev/article/details/123456172。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-03-11 18:55:39
90
转载
Docker
...cker 中,容器是使用 Dockerfile 定义的,Dockerfile 可以认为是 Docker 容器的构建蓝图,其中描述了容器镜像的组成。以下是一个 Dockerfile 的样例: 使用 official Node.js 镜像作为父镜像 FROM node:10 设置容器启动时要运行的命令 CMD ["node", "index.js"] 将本地文件夹挂载到容器内的 /app 目录中 WORKDIR /app COPY . /app 在容器中运行 npm install 安装应用所需的依赖 RUN npm install Docker 通过镜像来封装应用程序及其所有依赖项,从而使部署变得更加简单,因为只需部署一个镜像即可。例如,如果我们需要部署一个 Node.js 应用程序,只需从 Docker Hub 中下载 Node.js 镜像,并将应用程序和 package.json 文件一起封装成一个镜像。 总之,在使用 Docker 部署应用程序时,我们只需要定义应用程序的镜像,然后将镜像部署到任何支持 Docker 的服务器上即可。这使得应用程序的部署和运行变得非常简单、可靠和可重复。
2023-01-30 11:42:25
445
数据库专家
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 /一个火柴人游戏,亲自验证,可运行/ /在编译时添加如下命令:-std=c++11,否则会编译错误/ include <cstdio> include <cstdlib> include <Windows.h> include <thread> include <conio.h> using namespace std; const unsigned char CTRL_KEY = 0XE0; const unsigned char LEFT = 0X4B; const unsigned char RIGHT = 0X4D; const unsigned char DOWN = 0X50; const unsigned char UP = 0X48; int men2[2] = {0,0}; int women2[2]={10,10}; int Game(); void gotoxy( int x, int y ) //光标移动到(x,y)位置 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } int clean( int mm, int nn ) { gotoxy ( mm, nn ); printf ( " " ); gotoxy ( mm,nn+1); printf ( " " ); gotoxy ( mm,nn+2); printf (" "); } int men( int x, int y ) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN); gotoxy( x, y ); printf(" O"); gotoxy( x, y+1 ); printf("<H>"); gotoxy( x, y+2 ); printf("I I"); } int women( int i, int j ) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); gotoxy( i+1,j ); printf(" O"); gotoxy( i+1,j+1 ); printf("<H>"); gotoxy( i,j+2 ); printf("/I I\\"); } int m=10, n=10; int x=0;int y=0; int TorF() { if ( x == m && y == n ) return 1; else return 0; } int womenmove() { int turn; int YNbreak=0; while( YNbreak == 0 ) { YNbreaak = TorF(); turn=rand()%3; clean( m, n ); if( m < x ) m++; else m--; if( m == x ) { if( n < y ) n++; else n--; } if ( m < 0 ) m = 0; if ( m >= 75 ) m = 75; if ( n < 0 ) n = 0; if ( n >= 22 ) n = 22; women( m,n ); women2[0]=m; women2[1]=n; Sleep(100); } system ( "cls" ); gotoxy ( 28, 10 ); printf ( "You died!!!\n" ); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); system ( "pause" ); exit(0); return 0; } int menmove() { system( "cls" ); while (1) { switch( getch()) { case UP:y--;break; case DOWN:y++;break; case LEFT:x--;break; case RIGHT:x++;break; } system( "cls" ); if ( x < 0 ) x = 0; if ( x > 77 ) x = 77; if ( y < 0 ) y = 0; if ( y > 22 ) y = 22; men( x, y ); men2[0] = x; men2[1] = y; } } int Game() { women( 10, 10 ); men( 0, 0 ); int t = 0; thread qq( womenmove ); menmove(); qq.join(); return 0; } int main() { system( "mode con cols=80 lines=25" ); printf ( "游戏开始后,随机按下一个键,唤醒你的蓝色小人.如果你被红色的老女人碰到了,那么你就死了\n" ); printf ( "方向键操控小人\n" ); system ( "pause" ); system ( "cls" ); Game(); return 0; } 留赞再走 本篇文章为转载内容。原文链接:https://blog.csdn.net/LDXX31/article/details/130271069。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-07-20 23:02:16
133
转载
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 有汇源上下界最大流 有源汇上下界最大流最小流理解 题目 理解 include<bits/stdc++.h>using namespace std;const int N=610,M=3e4,INF=0x3f3f3f3f;int n,m,S,T;int s,t;int d[N];int q[N],cur[N],h[N],ne[M],e[M],f[M],idx,A[N];void add(int a,int b,int c,int d){e[idx]=b,ne[idx]=h[a],f[idx]=d-c,h[a]=idx++;e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++;}bool bfs(){memset(d,-1,sizeof(d));int hh=0,tt=0;q[hh]=S,cur[S]=h[S],d[S]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];~i;i=ne[i]){int ver=e[i];if(d[ver]==-1&&f[i]){d[ver]=d[t]+1;cur[ver]=h[ver];if(ver==T) return true;q[++tt]=ver;} }}return false;}int find(int u,int limit){if(u==T) return limit;int flow=0;for(int i=cur[u];~i&&flow<limit;i=ne[i]){cur[u]=i;int ver=e[i];if(d[ver]==d[u]+1&&f[i]){int t=find(ver,min(f[i],limit-flow));if(!t) d[ver]=-1;f[i]-=t,f[i^1]+=t,flow+=t;} }return flow;}int dinic(){int r=0;int flow;while(bfs()) while(flow=find(S,INF)) r+=flow;return r;}int main(){scanf("%d%d%d%d",&n,&m,&s,&t);S=0,T=n+1;memset(h,-1,sizeof(h));int tot=0;for(int i=1;i<=m;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);add(a,b,c,d);A[a]-=c,A[b]+=c;}for(int i=1;i<=n;i++){if(A[i]>0) add(S,i,0,A[i]),tot+=A[i];else if(A[i]<0) add(i,T,0,-A[i]);}add(t,s,0,INF);if(dinic()<tot){puts("No Solution");}else{int res=f[idx-1];S=s,T=t;f[idx-1]=f[idx-2]=0;printf("%d\n",res+dinic());}return 0;} 有汇源上下界最小流 题目 include<bits/stdc++.h>using namespace std;const int N=1e6+10,M=5e6+10,INF=0x3f3f3f3f;int n,m,S,T;int s,t;int d[N];int q[N],cur[N],h[N],ne[M],e[M],f[M],idx,A[N];void add(int a,int b,int c,int d){e[idx]=b,ne[idx]=h[a],f[idx]=d-c,h[a]=idx++;e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++;}bool bfs(){memset(d,-1,sizeof(d));int hh=0,tt=0;q[hh]=S,cur[S]=h[S],d[S]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];~i;i=ne[i]){int ver=e[i];if(d[ver]==-1&&f[i]){d[ver]=d[t]+1;cur[ver]=h[ver];if(ver==T) return true;q[++tt]=ver;} }}return false;}int find(int u,int limit){if(u==T) return limit;int flow=0;for(int i=cur[u];~i&&flow<limit;i=ne[i]){cur[u]=i;int ver=e[i];if(d[ver]==d[u]+1&&f[i]){int t=find(ver,min(f[i],limit-flow));if(!t) d[ver]=-1;f[i]-=t,f[i^1]+=t,flow+=t;} }return flow;}int dinic(){int r=0;int flow;while(bfs()) while(flow=find(S,INF)) r+=flow;return r;}int main(){scanf("%d%d%d%d",&n,&m,&s,&t);S=0,T=n+1;memset(h,-1,sizeof(h));int tot=0;for(int i=1;i<=m;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);add(a,b,c,d);A[a]-=c,A[b]+=c;}for(int i=1;i<=n;i++){if(A[i]>0) add(S,i,0,A[i]),tot+=A[i];else if(A[i]<0) add(i,T,0,-A[i]);}add(t,s,0,INF);if(dinic()<tot){puts("No Solution");}else{int res=f[idx-1];S=t,T=s;f[idx-1]=f[idx-2]=0;printf("%d\n",res-dinic());}return 0;} 本篇文章为转载内容。原文链接:https://blog.csdn.net/qq_52093121/article/details/126279694。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-02-17 10:00:53
97
转载
JSON
...格式,它以文字为基础进行人机沟通。而csv是指CSV格式格式的一种简易的文件格式,它将数据看作表格的形式进行存储。 采用Python编程语言完成json格式转csv文件的方式非常简易。我们可以采用Python中的pandas库,pandas是一种数据加工库,该库可以简化数据清理和分析的方式,支持多种文件格式的读取和转换,包括json和csv。下面是一个采用pandas库将json格式转csv文件的示例代码: import pandas as pd def json_to_csv(input_file, output_file): data = pd.read_json(input_file) data.to_csv(output_file, index=False) input_file = 'input.json' output_file = 'output.csv' json_to_csv(input_file, output_file) 总体来说,上述代码需要传递两个参数,分别是input_file和output_file,分别表示输入的json文件路径和输出的csv文件路径。最初,我们调用pandas库的read_json()函数读取json文件。读取完成之后,我们调用to_csv()函数将转换后的数据保存到指定的csv文件路径。 在这个过程中,我们采用了index=False参数。在转换过程中,有时候需要保留DataFrame对象的索引值,并将其添加为一列。在这个示例代码中,我们采用index=False参数,表示在输出的csv文件中不会保留索引值的相关信息。 总的来说,我们可以发现,采用Python中的pandas库,将json格式变换为csv文件是一项非常简易而且常用的工作。无论是在数据加工还是数据分析的过程中,这种格式变换都可能变为一项非常普通的技能。
2024-01-01 14:07:21
433
代码侠
Maven
一、引言 当你在进行大型Java项目时,你可能会发现一些重复性的任务需要频繁地手动执行,如构建报告,编译代码等。这个时候,Maven这个强大的构建工具就派上用场了。用Maven这个工具,你就能把那些枯燥乏味的重复性任务打包成一个你自己定制的目标或者任务,然后在命令行里轻轻一点,就能直接让它运行起来啦!这样不仅可以节省你的工作时间,还可以使你的工作流程更加高效。 二、什么是Maven任务和目标? 在Maven中,任务(Task)是Maven生命周期的一部分,而目标(Goal)是Maven生命周期中的一个步骤。简而言之,任务就像是你手头上的一系列小目标,而这些目标呢,就像是在用Maven构建东西的时候,你需要逐个完成的那些小步骤。 三、如何在Maven项目中添加自定义的任务或目标? 要在Maven项目中添加自定义的任务或目标,你需要做两件事: 第一步:创建一个新的Maven插件。你完全可以到源码库溜达一圈,找个现成的Maven插件下载下来,然后按照你的需求对它进行“魔改”,让它更贴合你的工作场景。或者,你也可以创建一个全新的Maven插件。 第二步:在你的项目的pom.xml文件中添加对新插件的依赖。 下面,我们将通过一个具体的例子来演示如何创建一个简单的Maven插件并将其添加到我们的Maven项目中。 四、实例 首先,我们需要创建一个新的Maven插件。以下是一个简单的插件的例子: java package com.example.myplugin; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; @Mojo(name = "sayHello", defaultPhase = LifecyclePhase.INITIALIZE) public class HelloWorldMojo extends AbstractMojo { @Parameter(property = "name", defaultValue = "World") private String name; public void execute() throws MojoExecutionException { getLog().info("Hello, " + name); } } 在这个例子中,我们创建了一个名为“sayHello”的Maven插件,它会在Maven构建的初始化阶段打印出一条信息。 接下来,我们需要在我们的Maven项目中添加对这个新插件的依赖。在项目的pom.xml文件中,添加以下代码: xml com.example myplugin 1.0-SNAPSHOT 这将会把我们的新插件添加到我们的项目中。 最后,我们可以通过在命令行中运行mvn sayHello -Dname=YourName来调用我们的新插件。这将会打印出"Hello, YourName"的信息。 五、总结 通过上面的示例,你应该已经了解了如何在Maven项目中添加自定义的任务或目标。自己动手创建个Maven插件,就能让你的工作活脱脱地实现自动化,这样一来,手动操作的时间嗖嗖地就省下来啦!另外,Maven真正牛的地方就是它的超强可扩展性,这意味着你完全可以按照自己的需求,随心所欲地打造出五花八门的Maven插件,就像DIY一样自由灵活。
2023-04-26 12:59:41
159
柳暗花明又一村-t
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 Description 由于某些原因菲莉丝拿到了贤者之石,所以好像变得很厉害了 好像变得很厉害的菲莉丝想要炼成幻想乡,其中有一个原料是稗田一族对幻想乡历史的记录。现在菲莉丝拿到了一个被某只魔粘性精神体加密过的的卷轴。 密文通过原文和一个正整数key加密形成,而key和密文又有一定关联。 现给出密文,求key值 已知密文s和key值关系如下 已知密文s是一串正整数s1,s2,s3……sn,A为s中所有元素的和,B为s中所有元素的积,key为B mod A 数据范围 si,A在(0,1e17]范围内 0<n<=100000 Input 第一行T表示数据组数 接下来每组第一行一个n,代表s的长度 接下来n行,每行一个正整数si Output 每组一行,key值 Sample Input 2412346567899 Sample Output 432 解法:按照题意来,你会发现居然能过 1 include<bits/stdc++.h> 2 using namespace std; 3 int t; 4 unsigned long long Mod(unsigned long long x,unsigned long long a,unsigned long long mod){ 5 unsigned long long ans=0; 6 ans%=mod; 7 while(a){ 8 if(a&1){ 9 ans=(ans+x)%mod;10 }11 ans%=mod;12 a>>=1;13 x=(x<<1)%mod;14 }15 return ans;16 }17 unsigned long long a[123456];18 int main(){19 scanf("%d",&t);20 while(t--){21 unsigned long long sum=0;22 int n;23 scanf("%d",&n);24 for(int i=1;i<=n;i++){25 scanf("%llud",&a[i]);26 sum+=a[i];27 }28 unsigned long long ans=1;29 for(int i=1;i<=n;i++){30 ans=Mod(ans,a[i],sum);31 ans%=sum;32 }33 cout<<ans<<endl;34 }35 return 0;36 } 转载于:https://www.cnblogs.com/yinghualuowu/p/7358788.html 本篇文章为转载内容。原文链接:https://blog.csdn.net/anvqxl0105/article/details/101282561。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2024-01-04 21:21:17
359
转载
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 \(\color{0066ff}{ 题目描述 }\) 给定一个字符串,多次询问某一字串的f值 f(s)代表s的不同字串数量 \(\color{0066ff}{输入格式}\) 第一行T,代表数据组数\(T\leq 5\) 每组数据第一行一个字符串\(1\leq len \leq 2000\) 然后一个数字m(\(1\leq m \leq 10000\)),表示有m个询问 接下来m行,每行两个整数l,r,表示询问[l,r]的字串的答案 \(\color{0066ff}{输出格式}\) 对于每个询问,输出一行表示答案 \(\color{0066ff}{输入样例}\) 2bbaba53 42 22 52 41 4baaba53 33 41 43 55 5 \(\color{0066ff}{输出样例}\) 3175813851 \(\color{0066ff}{数据范围与提示}\) 本题不卡hash, 但是正解不是hash \(\color{0066ff}{ 题解 }\) 考虑没有询问的时候,对于查询不同字串个数,见一个SAM就没事了 本题询问有10000个,考虑优化 因为长度是2000的,\(O(n^2)\)显然可以 所以我们开一个二维数组暴力预处理出所有的ans, 然后\(O(1)\)查询 \(O(nq) \to O(n^2 + q)\) include<bits/stdc++.h>using namespace std;define LL long longLL in() {char ch; int x = 0, f = 1;while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));return x f;}const int maxn = 5555;struct SAM {protected:struct node {node ch[26], fa;int len, siz;node(int len = 0, int siz = 0): fa(NULL), len(len), siz(siz) {memset(ch, 0, sizeof ch);} };node root, tail, lst;node pool[maxn];public:node extend(int c) {node o = new(tail++) node(lst->len + 1, 1), v = lst;for(; v && !v->ch[c]; v = v->fa) v->ch[c] = o;if(!v) o->fa = root;else if(v->len + 1 == v->ch[c]->len) o->fa = v->ch[c];else {node n = new(tail++) node(v->len + 1), d = v->ch[c];std::copy(d->ch, d->ch + 26, n->ch);n->fa = d->fa, d->fa = o->fa = n;for(; v && v->ch[c] == d; v = v->fa) v->ch[c] = n;}return lst = o;}void clr() {tail = pool;root = lst = new(tail++) node();}SAM() { clr(); } }sam;LL ans[2050][2050];char s[maxn];int main() {for(int T = in(); T --> 0;) {scanf("%s", s + 1);int len = strlen(s + 1);for(int i = 1; i <= len; i++) {for(int j = i; j <= len; j++) {auto o = sam.extend(s[j] - 'a');ans[i][j] = ans[i][j - 1] + o->len - o->fa->len;}sam.clr();}for(int m = in(); m --> 0;) {int l = in(), r = in();printf("%lld\n", ans[l][r]);} }return 0;} 转载于:https://www.cnblogs.com/olinr/p/10253544.html 本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_30872499/article/details/96073657。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-12-12 08:51:04
129
转载
HTML
...t;这是一个演示如何使用HTML h1标签的例子。在这个网页中,我们用<h1>标签来呈现主要的、最高级别的标题。</p>1415 <!-- 更多内容... -->16 17</body>18</html> 2. 写好img标签的alt属性 正确写好alt标签有下面几点好处: 当图片无法加载的时候,alt的文本就会显示在页面上,让用户知道这张图片是介绍了什么内容。 可以让搜索引擎理解这站图片的内容,从而可以有可能把这个图片索引到图片库中,在搜索图片的时候就有可能带出来。 如果图片是页面的第一个元素,更要写好alt属性,这有利于搜索引擎理解本页面的页面内容。 图片做logo,logo是锚元素,即<a href='xxx'><img src='xxx' alt='公司logo'></a>这样的时候,图片的alt就相当于锚文本的文字(所以别草草几句就搞定了),锚文本的作用十分关键! <!DOCTYPE html>2<html lang="en">3<head>4 <meta charset="UTF-8">5 <title>图片及alt属性示例</title>6</head>7<body>89 <!-- 使用img标签插入一张图片,并设置alt属性 -->10 <p>下面是一张描述美丽风景的图片:</p>11 <img src="beautiful-scenery.jpg" alt="美丽的山川湖泊景色,天空湛蓝,湖面如镜,周围环绕着翠绿的森林。">1213 <!-- 如果图片因为某种原因无法加载时,浏览器将显示alt文本 -->14 <!-- 对于视力障碍用户使用屏幕阅读器时,也会读出该alt文本 -->1516</body>17</html> 3. 特定的锚元素加nofollow 如果你的页面上有一些外链,或者不需要被跟踪的内链,请对他们加上这个属性。 <!DOCTYPE html>2<html lang="en">3<head>4 <meta charset="UTF-8">5 <title>nofollow属性示例</title>6</head>7<body>89 <!-- 正常的超链接 -->10 <p>访问我们的<a href="https://www.example.com" target="_blank">主页</a></p>1112 <!-- 使用nofollow属性的超链接 -->13 <p>外部链接示例:这是一个带有nofollow属性的<a href="https://www.external-site.com" rel="nofollow" target="_blank">外部网站链接</a>,搜索引擎不会通过这个链接来传递我们网页的权重。</p>1415</body>16</html> 这会让搜索引擎知道这个链接不是受站长推荐的,可能会继续爬取或不继续爬取,但不会传递权重。 尤其对于新站,每天爬虫来访的频次和深度其实都比较有限,所以正确的时候nofollow(无论在外链或内链上),可以一定程度上把爬虫引入正确的爬行轨迹。 但是,爬虫的爬取,也是有它自己的想法,不能说加上nofollow就一定有作用。 4. 所有el-link一律用a代替 比如使用了element-ui或其它的前端库,其锚元素并不是<a>而是比如<el-link>这样的元素。请优先使用<a>。 尽管在页面审查元素的时候可以看到<el-link>已经被正确的解析为了<a>,但是在右键-查看网页源代码的时候,依旧是<el-link>。 尽管现在的搜索引擎爬虫可以很好的解析动态页面,但不排除对于新站或权重低的站点,仍然就是拿到源代码做解析(节省计算资源嘛)。 所以,为了安全起见,还是优先使用<a>作为锚元素,确保内链的建设能够得到正确的爬取! 5. 移动端文字适配 也许你没有单独做一个移动站,只做了一个pc站。但当你手机上访问站点的时候,发现站点的文字发生了异常的突变,指定fong-size不生效。 这时候你可能就要使用:-webkit-text-size-adjust: none 试试吧,你会发现药到病除! 6. html的title中元素的顺序很重要 举几个例子: 第一页: 分类名称-网站名称 第二页: 分类名称-第二页-网站名称 文章页面: 文章标题-网站名称 如果要使用符号,尽量使用中划线或下划线,不要使用其它特殊符号。 7. 加入新的meta标签 content-language、author,尤其是content-language,在必应bing的站长后台做网站体检的时候还会提示站长(尽管不是一个很严重的问题)。 <!DOCTYPE html>2<html lang="zh-CN">3<head>4 <meta charset="UTF-8">5 <!-- 设置网页内容的语言 -->6 <meta http-equiv="Content-Language" content="zh-CN">7 8 <!-- 指定网页作者 -->9 <meta name="author" content="张三">10 11 <title>示例网页 - HTML Meta 标签使用</title>12 13 <!-- 其他元信息,如网页描述 -->14 <meta name="description" content="这是一个关于HTML Meta标签content-language和author属性使用的示例网页。">15 16</head>17<body>18 <!-- 网页正文内容 -->19 ...20</body>21</html> 8. 减少html中的注释 一方面,有利于减少响应文本的体积,降低服务器带宽。 另一方面,有利于搜索引擎的爬虫理解页面内容,试想,如果一个页面50%的注释,那么搜索引擎理解起来也会有难度。 9. 不要使用table布局或其它复杂布局 搜索引擎爬虫对页面内容的理解不像人类的肉眼,它是需要基于代码的。 如果代码结构比较复杂,它会比较反感这样的代码,甚至会跑路。所以,简单整洁的代码是招引爬虫来的很重要的因素。 所以,不要使用比较复杂布局代码,能写到css文件里的就用css文件搞定。 10. 不要使用隐藏文字 无论是什么样的初心,使用了隐藏文字,都会被搜索引擎认为是作弊。 比如:文字颜色和背景色颜色一样、文字使用absolute绝对定位定位到可视便捷以外、文字用z-index定位到最下层... 尽管用户看不到,但搜索引擎的爬虫阅读源码会看到,尽管不一定能够正确识别这些文字是隐藏文字,但一旦识别出来,就会被判断为作弊站点。 另外,当用户点击某按钮后出来的文字,属于正常的交互,不属于隐藏文字。
2024-01-26 18:58:53
504
admin-tim
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 这是本人原创的Listbox美化效果 https://blog.csdn.net/mosangbike/article/details/84340615 以下是转发文章: WinForm-ListBox控件美化 (2009-08-25 22:52:05) 转载▼ 标签: listbox 控件美化 分类: C 如果要对ListBox控件进行自定义绘制(美化),那么首先必须将ListBox的DrawMode属性设置为OwnerDrawVariable或OwnerDrawFixed。ListBox有个ItemHeight属性,在DrawMode设置为Normal时,这个属性是不可设置的,并且其值是根据当前字体进行计算获得的。只有当DrawMode设置为OwnerDrawVariable或OwnerDrawFixed时,设置ItemHeight才生效。 属性 说明 Normal 组件的所有元素都由操作系统绘制,并且元素大小都相等。 OwnerDrawFixed 组件的所有元素都是手动绘制的,并且元素大小都相等。 OwnerDrawVariable 组件的所有元素都由手动绘制,元素大小可能不相等。 表01:枚举DrawMode中的成员及其说明 设置完DrawMode属性之后,通过ListBox的DrawItem事件可以绘制自己想要的个性化控件。先看一下自己绘制的ListBox控件的效果图: (这是选中“英语”的效果) 从图中可以看出,针对不同的行绘制了不同的背景色,选中项的背景色设置为蓝色,并且还绘制了一个边框。确实比系统绘制的ListBox好看多了。下面我们来看看代码,也就是DrawItem事件处理方法。 代码 private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { int index = e.Index;//获取当前要进行绘制的行的序号,从0开始。 Graphics g = e.Graphics;//获取Graphics对象。 Rectangle bound = e.Bounds;//获取当前要绘制的行的一个矩形范围。 string text = listBox1.Items[index].ToString();//获取当前要绘制的行的显示文本。 if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) {//如果当前行为选中行。 //绘制选中时要显示的蓝色边框。 g.DrawRectangle(Pens.Blue, bound.Left, bound.Top, bound.Width - 1, bound.Height - 1); Rectangle rect = new Rectangle(bound.Left 2, bound.Top 2, bound.Width - 4, bound.Height - 4); //绘制选中时要显示的蓝色背景。 g.FillRectangle(Brushes.Blue, rect); //绘制显示文本。 TextRenderer.DrawText(g, text, this.Font, rect, Color.White, TextFormatFlags.VerticalCenter | TextFormatFlags.Left); } else { //GetBrush为自定义方法,根据当前的行号来选择Brush进行绘制。 using (Brush brush = GetBrush(e.Index)) { g.FillRectangle(brush, bound);//绘制背景色。 } TextRenderer.DrawText(g, text, this.Font, bound, Color.White, TextFormatFlags.VerticalCenter | TextFormatFlags.Left); } } OwnerDrawVariable 设置DrawMode属性为OwnerDrawVariable后,可以任意改变每一行的ItemHeight和ItemWidth。通过ListBox的MeasureItem事件,可以使每一行具有不同的大小。 (奇偶行的行高不同) private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) { //偶数行的ItemHeight为20 if (e.Index % 2 == 0) e.ItemHeight = 20; //奇数行的ItemHeight为40 else e.ItemHeight = 40; } 总结 这里最重要的是DrawItem事件和MeasureItem事件,以及MeasureItemEventArgs事件数据类和DrawItemEventArgs事件数据类。在System.Windows.Forms命名空间中,具有DrawItem事件的控件有ComboBox、ListBox、ListView、MenuItem、StatusBar、TabControl,具有MeasureItem事件的控件有ComboBox、ListBox、MenuItem。所以,这些控件可以采用和ListBox相同的方法进行自定义绘制。 本篇文章为转载内容。原文链接:https://blog.csdn.net/mosangbike/article/details/54341295。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-10-22 22:21:02
667
转载
Javascript
...这个例子中,我们试图使用setTimeout来控制函数的执行频率。但是,问题出在timerId的重置上。当我们调用clearTimeout(timerId)时,其实并没有把定时器ID给抹掉,而是让它歇菜,不再运行了。因此,下次调用时,timerId仍然是存在的,这会导致我们的节流逻辑失效。 5. 正确的节流函数实现 现在,我们来看一下正确的节流函数实现,确保定时器ID能够正确地管理和重置: javascript function throttleCorrect(fn, delay) { let timerId; let lastTime = 0; return function (...args) { const now = Date.now(); if (now - lastTime >= delay) { if (timerId) { clearTimeout(timerId); // 确保清除旧的定时器 } fn.apply(this, args); lastTime = now; timerId = setTimeout(() => { timerId = null; // 清除定时器ID }, delay); } }; } 在这个版本中,我们引入了timerId来管理定时器。每次调用节流函数时,我们先看看是不是得把之前的定时器清掉,接着干正事执行那个实际的函数,最后再设个新的定时器等着。这样可以确保定时器ID始终处于正确的状态,不会出现意外情况。 6. 总结与反思 通过这次探究,我深刻体会到细节的重要性。有时候,一个小的细节可能会导致整个程序的逻辑出错。通过不断尝试和调试,我们最终找到了解决问题的方法。希望这篇文章能帮助到同样遇到这个问题的朋友们。编程之路充满挑战,但也充满了乐趣,让我们一起加油吧! --- 希望这篇文章对你有所帮助,如果有任何问题或建议,请随时留言交流!
2025-02-20 16:01:21
10
月影清风_
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 JeeWx捷微V3.3版本发布——微信管家平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.3版本紧跟微信小程序更新,在原有多触点版本基础上,引入了更多的新亮点,支持微信公众号、微信企业号、支付宝服务窗等多触点开发,采用微服务框架实现,可插拔可集成,轻量级开发,对小程序的接入和应用进行了探索和封装。JEEWX将继续引领未来多触点模式的应用,并将拥抱小程序,是开发互联网运营推广项目的首选(微信、企业号、支付窗、微博、小程序等等)。 一、升级日志 升级spring版本4.x,解决jdk8支持问题。 用户重置密码样式问题; 升级jeewx-api 升级小程序接口; 精简maven pom的引用删掉不需要的依赖; 增加 H+页面首页风格。 升级封装的第三方平台接口 升级上传其他媒体素材接口,兼容缩略图 增加获取接口分析数据接口 增加评论相关接口 升级minidao 版本号 二、平台功能介绍 【微信公众号】 1. 微信账号管理 2. 微信菜单管理 3. 关注欢迎语 4. 关键字管理 5. 自定义菜单 6. 小程序链接 7. 文本素材管理 8. 图文素材管理 9. 微信永久素材 10. 支持多公众号 11. 微信大转盘 12. 微信刮刮乐 13. 微网站 14. 翻译 15. 天气 16. author2.0链接 17. 微信第三方平台(全网发布) 18. 长链接转短连接 19. 系统用户管理 20. 系统用户角色 21. 系统菜单管理 【微信企业号】 1. 微信企业号管理 2. 微信应用管理 3. 素材管理:文本素材 4. 素材管理:图文素材 5. 菜单管理 6. 通讯录管理 7. 用户管理 8. 用户消息管理 9. 用户消息快捷回复 10. 关键字管理 11. 关注回复管理 12. 企业号群发功能 13. 企业号群发日志 【支付宝服务窗】 1. 支付窗账号管理 2. 关键字管理 3. 素材管理:文本素材 4. 素材管理:图文素材 5. 关注回复 6. 菜单管理 7. 用户管理 8. 用户消息 9. 用户消息快捷回复 10. 支付窗群发 11. 支付窗群发记录 三、下载地址 源码下载: http://git.oschina.net/jeecg/jeewx 官方网站: www.jeewx.com QQ技术群: 287090836 体验公众号: 四、系统演示 本篇文章为转载内容。原文链接:https://blog.csdn.net/zhangdaiscott/article/details/90769252。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-08-22 14:35:00
296
转载
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 传送门:https://codeforces.com/problemset/problem/792/C 题意:给你一个字符串,要求让你删除最少个数的元素,使得最终答案是没有前导0并且是3的倍数。 题解:模拟:既然是3的倍数,那么第一步肯定是将每个都模上3,讨论长度为1的特殊情况,然后,我们讨论数字模上 3后的和sum 如果sum为0 直接输出, 如果sum为1,我们就要删去一个mod3为1的数或者两个mod3为2的数 如果sum为2,我们就要删去一个mod3为2的数或者两个mod3为1的数 代码如下: include<bits/stdc++.h>using namespace std;char s[100010];int a[3];int t,flag,n,p;int main(){scanf("%s",s+1);n=strlen(s+1);for(int i=1;i<=n;i++){t=(t+s[i])%3;a[s[i]%3]++;}//相加和为0直接输出if(!t){puts(s+1);return 0;}for(p=2;s[p]=='0';p++);p-=2;if(a[t]&&n>1&&(p<=1||a[t]>1||s[1]%3!=t)) a[t]--;else if(a[3-t]>1&&n>2) a[3-t]-=2;else if(a[t]&&n>1) a[t]--;else {puts("-1");return 0;}/t==1,那么我们可以删去一个模3等于1的数字位,或者删去两个模3等于2的数字位(这个很容易漏)。//t==2,可以删去一个模3等于2的数字位,或者删去两个模3等于1的数字位。/for(int i=1;i<=n;i++){if(s[i]=='0'&&!flag) continue;if(a[s[i]%3]) {putchar(s[i]);a[s[i]%3]--;flag=1;} }if(!flag) puts("0");} View Code 动态规划: 设定dp[i][3]=x表示: 1.dp[i][0]:[0~i]中剩余的数字每个位子相加模3为0的删除最少元素的个数。 2.dp[i][1]:[0~i]中剩余的数字每个位子相加模3为1的删除最少元素的个数。 3.dp[i][2]:[0~i]中剩余的数字每个位子相加模3为2的删除最少元素的个数。 dp[i][j]=min(dp[i][j],dp[i-1][((j-a[i]%3)%3+3)%3)]; 代码如下: include<bits/stdc++.h>using namespace std;const int mod = 3;const int maxn = 1e5+5;const int INF = 0x3f3f3f3f;int dp[maxn][3];int pre[maxn][3];char str[maxn];char ans[maxn];int main(){while(cin>>str){int n=strlen(str);if(n==1){if((str[0]-'0')%3==0) printf("%c\n",str[0]);else printf("-1\n");continue;}memset(pre,-1,sizeof(pre));memset(dp,INF,sizeof(dp));dp[0][0]=1;dp[0][(str[0]-'0')%3]=0;for(int i=1;i<n;i++){for(int j=0;j<3;j++){if(dp[i-1][j]+1<dp[i][j]){dp[i][j]=dp[i-1][j]+1;pre[i][j]=j;}if((str[i]-'0')%3==0){if(str[i]=='0'){if(dp[i-1][j]!=i&&dp[i-1][j]<dp[i][j]){dp[i][j]=dp[i-1][j];pre[i][j]=j;} }else{if(dp[i-1][j]<dp[i][j]){dp[i][j]=dp[i-1][j];pre[i][j]=j;} }}if((str[i]-'0')%3==1&&dp[i-1][((j-1)%mod+mod)%mod]<dp[i][j]){dp[i][j]=dp[i-1][((j-1)%mod+mod)%mod];pre[i][j]=((j-1)%mod+mod)%mod;}if((str[i]-'0')%3==2&&dp[i-1][((j-2)%mod+mod)%mod]<dp[i][j]){dp[i][j]=dp[i-1][((j-2)%mod+mod)%mod];pre[i][j]=((j-2)%mod+mod)%mod;} }}if(dp[n-1][0]==n){int flag=0;for(int i=0;i<n;i++){if(str[i]=='0') flag=1;} if(flag==1) printf("0\n");else printf("-1\n");continue;}int cnt=0;int now=n-1;int j=0;while(now>=1){int pree=pre[now][j];if(dp[now-1][pree]==dp[now][j]){ans[cnt++]=str[now];}j=pree;now--;if(now==0){if(pree==(str[0]-'0')%3){ans[cnt++]=str[now];} }}for(int i=cnt-1;i>=0;i--){printf("%c",ans[i]);}printf("\n");} } View Code 转载于:https://www.cnblogs.com/buerdepepeqi/p/9526284.html 本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_30797027/article/details/96418066。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-04-14 11:43:53
384
转载
ActiveMQ
...据不一致。这个问题在使用ActiveMQ时尤为突出。虽然ActiveMQ是一个强大的消息队列工具,但有时候也会出些小状况。我们得小心处理这些问题,不然可能会在关键时刻掉链子。废话不多说,让我们直接进入正题吧。 2. ActiveMQ基础概念 首先,我们需要了解ActiveMQ的一些基础知识。ActiveMQ是个开源的消息小帮手,它可以处理各种消息传递方式,比如点对点聊天或者像广播一样的发布/订阅模式。它还支持多种协议,如AMQP、MQTT等。这么说吧,ActiveMQ就像个快递小哥,专门负责把消息从这头送到那头。这些消息就像是礼物盒,可以好几个朋友一起打开,也可以只让一个朋友独享。 java // 创建一个ActiveMQ连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); // 使用连接工厂创建一个连接 Connection connection = connectionFactory.createConnection(); // 启动连接 connection.start(); // 创建一个会话 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建一个队列 Destination destination = session.createQueue("TEST.QUEUE"); // 创建一个生产者 MessageProducer producer = session.createProducer(destination); 3. 故障恢复策略的重要性 那么问题来了,为什么我们要关心故障恢复策略呢?因为一旦消息队列出现问题,我们的业务流程就可能中断,甚至数据丢失。想想看,要是有个大订单没成功发到处理系统,那岂不是要抓狂了?所以说啊,咱们得确保万一出了问题,能赶紧恢复过来,还得保证数据没乱套,一切都在掌控中。 4. 常见的故障场景 在实际使用中,常见的故障场景包括但不限于: - 网络故障:服务器之间的网络连接突然断开。 - 硬件故障:服务器硬件出现故障,如磁盘损坏。 - 软件异常:程序出现bug,导致消息处理失败。 5. 数据丢失的原因及预防措施 5.1 数据丢失的原因 在故障恢复过程中,最常见的问题是数据丢失。这可能是由于以下原因造成的: - 未正确配置持久化机制:ActiveMQ默认是非持久化的,这意味着如果消息队列崩溃,存储在内存中的消息将会丢失。 - 消息确认机制配置错误:如果消息确认机制配置不当,可能会导致消息重复消费或丢失。 java // 创建一个持久化的队列 Destination destination = session.createQueue("PERSISTENT.TEST.QUEUE"); // 创建一个生产者并设置持久化选项 MessageProducer producer = session.createProducer(destination); producer.setDeliveryMode(DeliveryMode.PERSISTENT); 5.2 预防措施 为了防止数据丢失,我们可以采取以下措施: - 启用持久化机制:确保消息在发送之前被持久化到磁盘。 - 正确配置消息确认机制:确保消息在成功处理后才被确认。 java // 使用事务来确保消息的可靠发送 Session session = connection.createSession(true, Session.SESSION_TRANSACTED); // 发送消息 producer.send(message); // 提交事务 session.commit(); 6. 数据不一致的原因及预防措施 6.1 数据不一致的原因 除了数据丢失,数据不一致也是一个严重的问题。这可能是因为: - 消息重复消费:如果消息队列没有正确地处理重复消息,可能会导致数据不一致。 - 消息顺序混乱:消息在传输过程中可能会被打乱,导致处理顺序错误。 java // 使用唯一标识符来避免重复消费 TextMessage message = session.createTextMessage("Hello, World!"); message.setJMSMessageID(UUID.randomUUID().toString()); producer.send(message); 6.2 预防措施 为了避免数据不一致,我们可以: - 使用唯一标识符:为每条消息添加一个唯一的标识符,以便识别重复消息。 - 保证消息顺序:确保消息按照正确的顺序被处理。 java // 使用事务来保证消息顺序 Session session = connection.createSession(true, Session.SESSION_TRANSACTED); // 发送多条消息 for (int i = 0; i < 10; i++) { TextMessage message = session.createTextMessage("Message " + i); producer.send(message); } // 提交事务 session.commit(); 7. 结论 总之,ActiveMQ是一个功能强大的消息队列工具,但在使用过程中需要特别注意故障恢复策略。通过巧妙设置持久化方式和消息确认系统,我们能大幅减少数据丢失的几率。另外,用唯一标识符和事务来确保消息顺序,这样就能很好地避免数据打架的问题了。希望这篇文章能够帮助大家更好地理解和应对ActiveMQ中的这些问题。如果你有任何疑问或建议,欢迎在评论区留言交流! --- 这篇文章力求通过具体的代码示例和实际操作,帮助读者更好地理解和解决ActiveMQ中的故障恢复问题。希望它能对你有所帮助!
2025-02-06 16:32:52
22
青春印记
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 手机都是有震动的效果的,前天飞刀从手机里拆了一个振动器,然后让我下周把这个调一下,昨天来公司小试了一把,就搞定了。下面把过程讲一下吧。 其实android中已经做好了底层的驱动,那便是timed_gpio,就是把定时功能和gpio的功能结合在一起了,振动就是一个小直流电机了,当gpio口是高电平的时候,电机就转动了,当gpio口为低电平的时候,电机就不转了,而time是控制转的时间,也就是gpio口处于高电平的时间。 具体的代码就在/drivers/staging/android/timed_gpio.c 在相关平台的platform.c中加入platform device就可以了。 static struct timed_gpio vibrator = {.name = “vibrator”,.gpio = 61, //对应自己平台的gpio号.max_timeout = 100000,.active_low = 0;};static struct timed_gpio_platform_data timed_gpio_data = {.num_gpios = 1,.gpios = &vibrator,};static struct platform_device my_timed_gpio = {.name = “timed-gpio”,.id = -1,.dev = {.platform_data = &timed_gpio_data,},}; 然后在make menuconfig中选上device下的staging下的android中的相关选项 然后就可以跑一下内核来了,当内核跑起来后,就可以测试了。 因为timed gpio驱动程序为每个设备在/sys/class/timed_output/目录下建立一个子 录,设备子目录的enable文件就是控制设备的时间的。因为在platform中名称为vibrator, 所以,用以下命令可以测试: echo 10000 > /sys/class/timed_output/vibrator/enable 然后可以看下振动器在转了,也可以用示波器或者万用表来验证 接着可以 cat /sys/class/timed_output/vibrator/enable 发现enable的值一直在变小,直到为0的时候停止了转动了。 OK,底层驱动好了,那么android上层就好办多了,因为android上层几乎和平台关系不大,要改的东西很少很少。 至于android硬件抽象层,在hardware/libhardware_legacy/include/hardware_legacy/ vibrator目录下。 include <hardware_legacy/vibrator.h>include "qemu.h"include <stdio.h>include <unistd.h>include <fcntl.h>include <errno.h>define THE_DEVICE "/sys/class/timed_output/vibrator/enable"int vibrator_exists(){int fd;ifdef QEMU_HARDWAREif (qemu_check()) {return 1;}endiffd = open(THE_DEVICE, O_RDWR);if(fd < 0)return 0;close(fd);return 1;}static int sendit(int timeout_ms){int nwr, ret, fd;char value[20];ifdef QEMU_HARDWAREif (qemu_check()) {return qemu_control_command( "vibrator:%d", timeout_ms );}endiffd = open(THE_DEVICE, O_RDWR);if(fd < 0)return errno;nwr = sprintf(value, "%d\n", timeout_ms);ret = write(fd, value, nwr);close(fd);return (ret == nwr) ? 0 : -1;}int vibrator_on(int timeout_ms){/ constant on, up to maximum allowed time /return sendit(timeout_ms);}int vibrator_off(){return sendit(0);} 看到了吧 define THE_DEVICE "/sys/class/timed_output/vibrator/enable" 就是我们要操作的底层驱动的地方,只要这个和驱动配上,那么剩下的事情就木有了,直接搞定了。 其实她也是往这里写数据,android的java层就不关心她了。好了,然后可以在android启动后设置一个闹钟来测试下了,发现可以,至此android的vibrator移植成功。 突然发现了,其实以前觉得很难得东西,很不好理解的东西,在过一段时间后再回过头去看的时候才会恍然大悟。学习是个漫长的过程,是一个知识慢慢积累的过程,一口气是吃不成胖子的。 本篇文章为转载内容。原文链接:https://blog.csdn.net/eastmoon502136/article/details/7909688。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2024-01-17 14:30:45
82
转载
Go-Spring
...ng还引入了新的健康检查机制和熔断器设计模式,有效提升了系统的稳定性和容错能力。 与此同时,Go语言社区也在持续关注并优化语言本身的规范和工具链,例如Go 1.18版本正式引入了泛型,这一重大改变无疑将极大提升Go语言在处理复杂业务逻辑时的灵活性和代码复用率。这对于Go-Spring这类框架来说,意味着未来能够在更大程度上满足不同场景下的定制化需求,为开发者带来更深层次的便利。 总的来说,无论是对初学者而言的基本语法规范教育,还是对资深开发者来说的高级特性和框架优化,Go-Spring都展现出了强大的适应性和前瞻性。在深入了解和熟练掌握Go-Spring的同时,持续跟进Go语言的发展动态和社区趋势,无疑将帮助开发者在微服务架构的设计与实现上取得更大的突破,从容应对日益复杂的业务场景挑战。
2024-03-23 11:30:21
416
秋水共长天一色
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 求多个数最小公倍数的一种变换算法 2011-07-21 10:39:49| 分类: C++|举报|字号 订阅 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数。对于两个数a,b,有[a,b]=ab/(a,b),因此两个数最小公倍数可以用其最大公约数计算。但对于多个数,并没有[a1,a2,..,an]=M/(a1,a2,..,an)成立,M为a1,a2,..,an的乘积。例如:[2,3,4]并不等于24/(2,3,4)。即两个数的最大公约数和最小公倍数之间的关系不能简单扩展为n个数的情况。 本文对多个数最小公倍数和多个数最大公约数之间的关系进行了探讨。将两个数最大公约数和最小公倍数之间的关系扩展到n个数的情况。在此基础上,利用求n个数最大公约数的向量变换算法计算多个数的最小公倍数。 1. 多个数最小公倍数和多个数最大公约数之间的关系 令p为a1,a2,..,an中一个或多个数的素因子,a1,a2,..,an关于p的次数分别为r1,r2,..,rn,在r1,r2,..,rn中最大值为rc1=rc2=..=rcm=rmax,最小值为rd1=rd2=..=rdt=rmin,即r1,r2,..,rn中有m个数所含p的次数为最大值,有t个数所含p的次数为最小值。例如:4,12,16中关于素因子2的次数分别为2,2,4,有1个数所含2的次数为最大值,有2个数所含2的次数为最小值;关于素因子3的次数分别为0,1,0,有1个数所含3的次数为最大值,有2个数所含3的次数为最小值。 对最大公约数有,只包含a1,a2,..,an中含有的素因子,且每个素因子次数为a1,a2,..,an中该素因子的最低次数,最低次数为0表示不包含[1]。 对最小公倍数有,只包含a1,a2,..,an中含有的素因子,且每个素因子次数为a1,a2,..,an中该素因子的最高次数[1]。 定理1:[a1,a2,..,an]=M/(M/a1,M/a2,..,M/an),其中M为a1,a2,..,an的乘积,a1,a2,..,an为正整数。 例如:对于4,6,8,10,有[4,6,8,10]=120,而M=46810=1920,M/(M/a1,M/a2,..,M/an) =1920/(6810,4810,4610,468)=1920/16=120。 证明: M/a1,M/a2,..,M/an中p的次数都大于等于r1+r2+..+rn-rmax,且有p的次数等于r1+r2+..+rn-rmax的。这是因为 (1) M/ai中p的次数为r1+r2+..+rn-ri,因而M/a1,M/a2,..,M/an中p的次数最小为r1+r2+..+rn-rmax。 (2) 对于a1,a2,..,an中p的次数最大的项aj(1项或多项),M/aj中p的次数为r1+r2+..+rn-rmax。 或者对于a1,a2,..,an中p的次数最大的项aj,M/aj中p的次数小于等于M/ak,其中ak为a1,a2,..,an中除aj外其他的n-1个项之一,而M/aj中p的次数为r1+r2+..+rn-rmax。 因此,(M/a1,M/a2,..,M/an)中p的次数为r1+r2+..+rn-rmax,从而M/(M/a1,M/a2,..,M/an)中p的次数为rmax。 上述的p并没有做任何限制。由于a1,a2,..,an中包含的所有素因子在M/(M/a1,M/a2,..,M/an)中都为a1,a2,..,an中的最高次数,故有[a1,a2,..,an]=M/(M/a1,M/a2,..,M/an)成立。 得证。 定理1对于2个数的情况为[a,b]=ab/(ab/a,ab/b)=ab/(b,a)=ab/(a,b),即[a,b]=ab/(a,b)。因此,定理1为2个数最小公倍数公式[a,b]=ab/(a,b)的扩展。利用定理1能够把求多个数的最小公倍数转化为求多个数的最大公约数。 2.多个数最大公约数的算法实现 根据定理1,求多个数最小公倍数可以转化为求多个数的最大公约数。求多个数的最大公约数(a1,a2,..,an)的传统方法是多次求两个数的最大公约数,即 (1) 用辗转相除法[2]计算a1和a2的最大公约数(a1,a2) (2) 用辗转相除法计算(a1,a2)和a3的最大公约数,求得(a1,a2,a3) (3) 用辗转相除法计算(a1,a2,a3)和a4的最大公约数,求得(a1,a2,a3,a4) (4) 依此重复,直到求得(a1,a2,..,an) 上述方法需要n-1次辗转相除运算。 本文将两个数的辗转相除法扩展为n个数的辗转相除法,即用一次n个数的辗转相除法计算n个数的最大公约数,基本方法是采用反复用最小数模其它数的方法进行计算,依据是下面的定理2。 定理2:多个非负整数a1,a2,..,an,若aj>ai,i不等于j,则在a1,a2,..,an中用aj-ai替换aj,其最大公约数不变,即 (a1,a2,..,aj-1,aj,aj+1,..an)=(a1,a2,..,aj-1,aj-ai,aj+1,..an)。 例如:(34,24,56,68)=(34,24,56-34,68)=(34,24,22,68)。 证明: 根据最大公约数的交换律和结合率,有 (a1,a2,..,aj-1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,ai-1,ai+1,..aj-1,aj+1,..an))(i>j情况),或者 (a1,a2,..,aj-1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,aj-1,aj+1,..ai-1,ai+1,..an))(i<j情况)。 而对(a1,a2,..,aj-1,aj-ai,aj+1,..an),有 (a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,ai-1,ai+1,.. aj-1,aj+1,..an))(i>j情况),或者 (a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,aj-1,aj+1,.. ai-1,ai+1,..an))(i<j情况)。 因此只需证明(ai,aj)=( ai, aj-ai)即可。 由于(aj-ai)= aj-ai,因此ai,aj的任意公因子必然也是(aj-ai)的因子,即也是ai,( aj-ai)的公因子。由于aj = (aj-ai)+ai,因此ai,( aj-ai)的任意公因子必然也是aj的因子,即也是ai,aj的公因子。所以,ai,aj的最大公约数和ai,(aj-ai) 的最大公约数必须相等,即(ai,aj)=(ai,aj-ai)成立。 得证。 定理2类似于矩阵的初等变换,即 令一个向量的最大公约数为该向量各个分量的最大公约数。对于向量<a1,a2,..,an>进行变换:在一个分量中减去另一个分量,新向量和原向量的最大公约数相等。 求多个数的最大公约数采用反复用最小数模其它数的方法,即对其他数用最小数多次去减,直到剩下比最小数更小的余数。令n个正整数为a1,a2,..,an,求多个数最大共约数的算法描述为: (1) 找到a1,a2,..,an中的最小非零项aj,若有多个最小非零项则任取一个 (2) aj以外的所有其他非0项ak用ak mod aj代替;若没有除aj以外的其他非0项,则转到(4) (3) 转到(3) (4) a1,a2,..,an的最大公约数为aj 例如:对于5个数34, 56, 78, 24, 85,有 (34, 56, 78, 24, 85)=(10,8,6,24,13)=(4,2,6,0,1)=(0,0,0,0,1)=1, 对于6个数12, 24, 30, 32, 36, 42,有 (12, 24, 30, 32, 36, 42)=(12,0,6,8,0,6)=(0,0,0,2,0,6)=(0,0,0,2,0,0)=2。 3. 多个数最小共倍数的算法实现 求多个数最小共倍数的算法为: (1) 计算m=a1a2..an (2) 把a1,a2,..,an中的所有项ai用m/ai代换 (3) 找到a1,a2,..,an中的最小非零项aj,若有多个最小非零项则任取一个 (4) aj以外的所有其他非0项ak用ak mod aj代替;若没有除aj以外的其他非0项,则转到(6) (5) 转到(3) (6) 最小公倍数为m/aj 上述算法在VC环境下用高级语言进行了编程实现,通过多组求5个随机数最小公倍数的实例,与标准方法进行了比较,验证了其正确性。标准计算方法为:求5个随机数最小公倍数通过求4次两个数的最小公倍数获得,而两个数的最小公倍数通过求两个数的最大公约数获得。 5.结论 计算多个数的最小公倍数是常见的基本运算。n个数的最小公倍数可以表示成另外n个数的最大公约数,因而可以通过求多个数的最大公约数计算。求多个数最大公约数可采用向量转换算法一次性求得。 本篇文章为转载内容。原文链接:https://blog.csdn.net/u012349696/article/details/21233457。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-10-04 16:29:43
39
转载
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 Html5简单描述(优点与缺点) 什么是HTML5 HTML5指的是包括HTML、CSS和JavaScript在内的一套技术组合。它希望能够减少网页浏览器对于需要插件的丰富性网络应用服务(Plug-in-Based Rich Internet Application,RIA),例如:AdobeFlash、Microsoft Silverlight与Oracle JavaFX的需求,并且提供更多能有效加强网络应用的标准集。HTML5是HTML最新版本,2014年10月由万维网联盟(W3C)完成标准制定。目标是替换1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到匹配当代的网络需求 HTML5现状及浏览器支持 大部分主流浏览器已经支持HTML5,但是各个浏览器支持的方式以及语法有所差异性。支持Html5的浏览器包括Firefox(火狐浏览器),IE9 及其更高版本,Chrome(谷歌浏览器),Safari,Opera等现代浏览器。 HTML5优点与缺点 优点 1、网络标准统一、HTML5本身是由W3C推荐出来的。 2、多设备、跨平台 3、即时更新。 4、提高可用性和改进用户的友好体验; 5、有几个新的标签,这将有助于开发人员定义重要的内容; 6、可以给站点带来更多的多媒体元素(视频和音频); 7、可以很好的替代Flash和Silverlight; 8、涉及到网站的抓取和索引的时候,对于SEO很友好; 9、被大量应用于移动应用程序和游戏。 缺点 a)、安全:像之前Firefox4的web socket和透明代理的实现存在严重的安全问题,同时web storage、web socket 这样的功能很容易被黑客利用,来盗取用户的信息和资料。 b)、完善性:许多特性各浏览器的支持程度也不一样。 c)、技术门槛:HTML5简化开发者工作的同时代表了有许多新的属性和API需要开发者学习,像web worker、web socket、web storage 等新特性,后台甚至浏览器原理的知识,机遇的同时也是巨大的挑战 d)、性能:某些平台上的引擎问题导致HTML5性能低下。 e)、浏览器兼容性:最大缺点,IE9以下浏览器几乎全军覆没。 详细了解HTML5概要与新增标签地址(大神果哥):https://www.cnblogs.com/best/p/6096476.html posted @ 2018-08-12 12:45 韦邦杠 阅读(...) 评论(...) 编辑 收藏 本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_42981419/article/details/86162058。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-11-14 16:22:34
272
转载
CSS
...,同时也希望大家能在实践中不断探索和成长! 好了,今天的分享就到这里啦!如果你还有什么疑问或者想法,欢迎在评论区留言交流哦~咱们下次再见!
2025-04-27 15:35:12
46
风轻云淡_
转载文章
...我们,我们将第一时间进行核实并删除相应内容。 昨天看了这部片子,感觉一般,但还是一部可看的片子,不闷。 女杀手失忆之前挺酷的,之后感觉太柔弱了。 三个男主角都不错,不过方中信的形象应该更强悍一些才好,而千叶真一象极了邻居家的老大伯。 《孙子兵法》第六计 虚实计 …… 攻而必取者,攻其所不守也。 守而必固者,守其所必攻也。 故善攻者,敌不知其所守; 善守者,敌不知其所攻。 …… 进而不可御者,冲其虚也; 退而不可追者,速而不可及也。 故我欲战,敌虽高垒深沟,不得不与我战者,攻其所必救也; 我不欲战,虽画地而守之,敌不得与我战者,乖其所之也。 故形人而我无形,则我专而敌分。 …… 附录: 中文名称:第六计 英文名称:Explosive City 资源类型:DVDScr 发行时间:2004年11月04日 电影导演:梁德森 电影演员: 任达华 方中信 千叶真一 白田久子 彭敬慈 萧正楠 地区:香港 语言:普通话 简介: 转自TLF论坛 片名:Explosive City 译名:第六计(又名爆裂都市) 导演:梁德森 主演:任达华 方中信 千叶真一 白田久子 彭敬慈 萧正楠 时间:90分钟 类型:动作 上映日期:2004-11-4 官方网站:http://www.bakuretsu.jp/ 语言:国语 字幕:外挂中/英 剧情: (转自世纪环球在线) 某国际机场,来参加国际会议的邻埠高级官员容大刚正在与众多记者畅谈参会感 想,突然,一个神情冷漠的美貌女子从人群中闪出,只见她拔出手枪,对准容大刚连 开三枪,场内一片大乱。 机场刺杀案引起了警方极大的震惊,派来高级警务人员姚天明(方中信饰)协助 特警队张志诚(任达华饰)警司侦破此案。经过排查,行刺者是某国际恐怖组织的成员, 名叫北条真理(白田久子饰)。材料显示:北条真理生于日本的一个幸福的家庭,三 岁时被某国际恐怖组织首领“奥多桑”(千叶真一饰)看中,把她掳走,通过洗脑、 训练,使她成为恐怖组织的高级杀手。这次行动,她以记者身份潜入机场,射伤了目 标,自己也因此受伤被俘。 就在警方全力破案的同时,某国际恐怖组织的首领“奥多桑”带领部下悄悄潜入 该城,显然,他对上一次行的刺杀行动很不满意,准备亲自上阵了。在他的指挥下, 恐怖分子残忍的杀死了姚天明的太太,并绑架了他的儿子,借此要挟姚天明杀死北条 真理,姚天明在万般无奈中,执行了“奥多桑”的命令,“击毙”、劫持了北条真理, 一步步走进“奥多桑”精心设下的圈套,并因此被警方通缉。 姚天明一边躲避着警方的追捕,一边苦苦寻找“奥多桑”的足迹,寻机解救被绑 架的儿子;幸免于难的北条真理与姚天明从对立变成唇齿相依;在追击中渐渐恢复了 记忆,认出了“奥多桑”安插在警务队伍中的亲信——张志诚警司;令他们百思不得 其解的是,张警司本身就是负责保护容大刚的警卫人员,由他执行刺杀活动,不是更 稳妥吗?为什麼还要派遣北条真理进行明目张胆的刺杀活动?随着事态的发展,无意 中,姚天明在“奥多桑”钟爱的《孙子兵法》一书中发现了更大的秘密——可怕的第 六计…… 转载于:https://www.cnblogs.com/Silence/archive/2004/11/08/61332.html 本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_30240349/article/details/98266532。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-05-10 09:20:27
618
转载
Saiku
...候,你需要对全局数据进行精细化筛选,这时就可以借助过滤器面板,就如同戴上一副透视眼镜,只看你想看的那一部分数据。 3. 深度探究功能 Saiku还提供了丰富的交互式探索功能,例如,你可以在结果展示区直接对数据进行排序、筛选、钻取等操作,系统会立即响应并动态更新视图,这种即时反馈的体验犹如与数据进行一场即兴对话。 另外,Saiku支持用户自定义公式、设置计算成员以及保存个性化视图,这些高级功能仿佛为你配备了一套强大的数据处理装备,助你在浩瀚的数据海洋中挖掘出更有价值的信息。 总结来说,Saiku的界面设计以用户体验为核心,通过清晰明了的功能分区和直观易用的操作方式,让每一位用户都能轻松驾驭复杂的业务数据,享受数据驱动决策带来的乐趣与便利。这可不只是个普通工具,它更像是一个舞台,让你能和数据一起跳起探戈。每当你点击、拖拽或选择时,就像是在未知世界的版图上又踩下了一小步,离它的秘密更近一步,对它的理解也更深一层。
2023-10-04 11:41:45
104
初心未变
站内搜索
用于搜索本网站内部文章,支持栏目切换。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
chattr +i file.txt
- 设置文件为不可修改(只读)。
推荐内容
推荐本栏目内的其它文章,看看还有哪些文章让你感兴趣。
2023-04-28
2023-08-09
2023-06-18
2023-04-14
2023-02-18
2023-04-17
2024-01-11
2023-10-03
2023-09-09
2023-06-13
2023-08-07
2023-03-11
历史内容
快速导航到对应月份的历史文章列表。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"