Other

最基本的windows相关的DOS命令

作为程序员要求掌握的最基本的windows相关的DOS命令 1、DOS命令在哪里编写? Win+R-->输入cmd-->回车 2、常见的DOS命令 1)exit退出当前DOS命令窗口 2)cls 清屏 3)DOS窗口中的内容怎么复制 在DOS窗口任意位置点击鼠标右键,然后选择标记, 接下来选中要复制的内容,在DOS窗口的任意位置点击鼠标右键,此时被复制的内容已经到剪贴板了。 在需要粘贴的位置粘贴。 4)cd命令 *cd命令表示:change directory【改变目录】 cd命令怎么用? cd 目录的路径 【但是路径包括绝对路径和相对路径】 绝对路径:表示该路径从某个磁盘的盘符下作为出发点的路径 相对路径:表示该路径从当前所在的路径下作为出发点的路径 例:cd Desktop ,那么其中Desktop就是一个相对路径,从当前所在的c:\users\administrator这个路径作为出发点,开始找Desktop目录 5)cd..回到上级目录 6)cd\直接回到根目录 7)怎么切换盘符 c:回车 d:回车 e:回车 8)del命令:删除文件或目录,例如:del.class,删除当前目录下所有的.class文件

抢分制C++

抢分制比赛题目 题目统计全部提交 时间限制:C/C++ 1000MS,其他语言 2000MS内存限制:C/C++ 256MB,其他语言 512MB描述 xiaoliu在玩一个抢分制的游戏,这个游戏规则如下:先给1个含n个正整数的数组a,每次xiaoliu可以选择删除一个数a[i],将数组中的等于a[i]+1和a[i]-1的元素都删除并且xiaoliu获得a[i]分。xiaoliu想问你他能得的最高分是多少。  输入描述 第一行一个整数n(0<n<=100000);第二行n个数ai(0<ai<=10000)。  输出描述 一个整数代表xiaoliu能获得的最高分。  用例输入 1 3 3 4 2 用例输出 1 6 用例输入 2 5 1 2 2 2 3 用例输出 2 6 提示 同一个数可以多次出现多次删除。   题目: 其a[i]的范围只有1e4,所以可以直接从1枚举到1e4每一次取删除这个数或者不删这个数的最大得分情况,如果删了这个数那么他的得分就是当前数-2+当前数*它的数量的情况得到不删就是当前数-1,两种取最大值。 然后我们就可以遍历数组知道:dp[i]=max(dp[i-1],dp[i-2]+i*bb[i]); 就是动态规划的思想:AC: #include<bits/stdc++.h> using namespace std; const int N=1e4+10; int main(){ int n; cin>>n; int aa[n]; for(int i=0;i<n;i++)cin>>aa[i]; sort(aa,aa+n); int temp=1,index=0,bb[N]={0},dp[N]={0}; for(int i=0;i<n;i++) if(aa[i]!=aa[i+1]){ bb[aa[i]]=temp; temp=1; } else temp++; int ans=0; for(int i=1;i<=10000;i++){ dp[i]=max(dp[i-1],dp[i-2]+i*bb[i]); ans=max(dp[i],ans); } cout<<ans<<endl; return 0; }  

python基础5

字典 什么是字典 能存储大量关系型数据的一个容器数据类型 用{}包裹的 以键值对的方式存储数据的 基本结构 dic = { 'key':value, 'key1':value } 字典要求 键必须是可哈希的【即不可变的数据类型】(int str 【很少 boolean tuple】) 值可以是任意类型 用逗号分割键值对 字典和列表的区别 相同点:都是能储存大量数据的容器数据类型,【在3.6X以上的版本字典可以说是有序的(插入序)】 不同点: 列表通过索引取值,速度相对字典较慢 字典通过key取值,速度较快 列表的数据毫无关联性,字典是关系型数控类型 字典的优缺: 优:查询速度快,数据关系明确 缺:占用空间,明显的以空间换时间 字典的常见的创建方法 方法一 dic = dict((('key',value),('key1',value))) 方法二

Centos7 安装php

今天学习php的安装 ,记录一下学习过程; 先安装好了mysql,才能跟php进行配套使用; 1.安装php的环境; yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml 2.安装php,以及安装mysql数据库的驱动 yum install php php-fpm php-mysql -y 3.php跟apche结合工作 编辑apche的配置文件 vim /etc/httpd/conf/httpd.conf 4.进行配置文件的修改 输入/DocumentRoot查找 /DocumentRoot /var/www/html 插入: TypesConfig /etc/mime.types AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps DirectoryIndex index.php index.html 5.编写一个php脚本来测试是否成功 vim /var/www/html/index.php i 插入 <?php Phpinfo(); ?>esc,shift :wq保存退出stemctl restart httpd 重启apche服务查看php内容到这里就成功了。  

实验5 文件应用编程

with open('D:/实验五数据/data3.txt','r+', encoding='UTF-8') as f: Z=[] Y=[] x=[] for i in f: x.append(i.strip('\n')) newx=x[1:11] for i in newx: y=float(i) Y.append(y) if y-int(y) >= 0.5: y=int(y)+1 else: y=int(y) Z.append(y) print(f'原始数据\n{Y}') print(f'四舍五入后的数据\n{Z}') with open('data3_processed.txt','w',encoding='utf-8') as f: write1=['原始数据']+Y write2=['四舍五入后的数据']+Z for i in range (len(Y)): f.write(f'{write1[i]}\t{write2[i]}\n') with open('D:/实验5数据文件/data4.txt', 'r', encoding = 'utf-8') as f: Y=[] l=[] t=[] e=[] data=f.readlines() for i in data: i=i.split() Y.append(i) Y.remove(Y[0]) newlist1=sorted(Y,key=(lambda x : x[2])) for i in range (0,8): l.

C++迭代器失效的几种情况

1. 对于序列型容器:vector, deque 删除当前元素:从当前位置到之后全部位置迭代器失效;(可以用 it=res.erase(it); 来实现迭代器的更新追踪) 添加一个元素:当添加元素后,导致了容器扩容的操作,则全部迭代器失效;(可以用 it=res.push(it);) 插入一个元素:当添加的元素在首尾位置以外,所有迭代器均失效;(在首位添加元素会导致迭代器失效,但是指针和引用不会失效;)(在首位或者尾位删除元素会导致被删除元素的迭代器失效;) 2. 对于关联型容器:map, set 删除当前的元素,仅仅会使当前的迭代器失效,删除一个结点不会对其他结点造成影响。(map是关联容器,以红黑树或者平衡二叉树组织数据,虽然删除了一个元素,整棵树也会调整,以符合红黑树或者二叉树的规范,但是单个结点在内存中的地址没有变化,变化的是各个结点之间的指向关系) 3. 对于链表型容器:list 删除运算使指向删除位置的迭代器失效,不会使其他迭代器失效。

vue3.0 + net6 webapi+ mysql

全栈开发:  开发环境和技术栈操作系统:windows 开发工具:vscode、Visual Studio 、sql server ​ 前端:Vue3、TypeScript、SCSS、Element Plus、Router、axios、Vuex ​ 后端:.NET6、Automapper、Autofac、Sql sugar、JWT、Log4Net 前端开发--后端提供数据--数据库管理数据--业务流程实现  01.nodejs 安装通过node --version看版本号表示安装好了 http://nodejs.cn/download/ 02.脚手架工具安装Vue-CLI安装命令,通过vue --version看版本号表示安装好了 npm install -g @vue/cli 03.通过命令创建项目 vue create xin-ui 04.安装TypeScript https://www.tslang.cn/docs/home.html 安装命令 vue add typescript 05.安装SCSS安装命令 npm install sass-loader node-sass --save 06.安装Element Plus安装命令,https://element-plus.gitee.io/zh-CN npm install element-plus --save 项目中导入 import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' const app = createApp(App) app.use(ElementPlus)07.文件名已2个单词组成为好 08.路由的配置和使用 页面和url地址的跳转适配安装命令 npm install vue-router@next --save项目中导入 import router from '.

linux命令三

linux帮助命令 man 获取命令用户手册信息 语法: man + 命令 查看命令的用户手册信息 比如: man rm --help 参数 语法: 命令 + --help 简略查看命令的信息 比如: rm --help help 命令获取帮助 语法: help + 命令 比如:help rm 注意: 此命令只针对bash内置的命令有效 info 命令获取帮助 语法: info + 命令 比如: info rm linux 开关机命令 shutdown重启或者关机 重启 语法: shutdown -r -r --reboot shutdown -r 10 #十分钟后重启 shutdown -r 0 #立刻重启 shutdown -r now # 立刻重启 关机 语法: shutdown -h --halt 停止的含义 shutdown -h 10 #十分钟后关机 shutdown -h 0 #立刻关机 shutdown -h now #立刻关机 linux命令行常用的快捷键 ctrl + c cancel 取消当前操作 ctrl + l 清空屏幕内容 ctrl + d 退出当前用户 ctrl + a 光标移到行首 ctrl + e 光标移到行尾 ctrl + u 删除光标到行首的内容 linux 的环境变量 查看linux环境变量

四种线程间同步的方法及两种进程间同步的方法

  线程间同步之互斥量: 即线程A访问邻接资源时,阻止线程B访问。互斥量(互斥锁)保证两个线程指令的先后顺序执行。具有原子性(一系列操作不可以被中断,不存在部分执行部分未执行的情况)。互斥锁是最简单的线程同步方法,有加锁和解锁两种状态, 两个状态可以保证资源访问的串行。 同时,操作系统直接提供了互斥量的API,开发者可以直接使用API完成资源的加锁、解锁操作。 线程间同步之自旋锁: 自旋锁的原理和互斥锁相同。使用自旋锁的线程会反复检查锁变量是否可用,自旋锁不会让出CPU,而是处于忙等待状态(一直死循环等待CPU释放) 优点:自旋锁避免了进程或者上下文切换的开销,同时操作系统本身很多地方都使用了自旋锁。 但是自旋锁不适合单核CPU。 自旋锁和互斥锁有什么区别呢? 比如线程1调用线程2占有的临界资源(线程2持有自旋锁)那么线程1会一直请求直到临界资源释放,而互斥锁会让线程1休眠,置入请求队列中去。 线程间同步之读写锁 在实际生产中,临界资源往往面临的情况是多读少些,即读时并不改变临界资源的值。 读写锁是一种特殊的自旋锁 允许多个读者同时访问资源以提高读性能 对于写操作则是互斥的,即读-写互斥,写-写互斥,而对于读-读操作,不互斥。读写锁对于多读少写的场景性能提升非常大。 线程间同步之条件变量 条件变量是一种相对复杂的线程同步方法 条件变量允许线程睡眠,直到满足某种条件 当满足条件时,可以向该线程信号,通知唤醒,往往配合互斥锁使用。   使用fork系统调用创建进程。 fork系统调用是用于创建进程的 fork创建的进程初始化状态与父进程一样 系统会为fork的进程分配新的资源 fork函数没有入参,会返回两次,分别返回子进程id和0,返回子进程id的是父进程,返回0的是子进程。 进程间同步之共享内存 在某种程度上,多进程是共同使用物理内存的 由于操作系统的进程管理,进程间的内存空间是独立的。并且进程默认是不能访问进程空间之外的内存空间的。 共享存储允许不相关的进程访问同一片物理内存 共享内存是两个进程之间共享和传递数据最快的方式 共享内存未提供同步机制(避免了并发问题),因此需要借助其他机制管理访问   使用共享内存的四个步骤    unix之域内套接字(socket) 域套接字是一种高级的进程间通信的方法 Unix域套接字可以用于同一机器进程间通信 Unix系统提供的域套接字提供了网络套接字类似的功能 举个例子:    server端创建,绑定,监听套接字,接受并处理消息,而client端创建,连接套接字并发送消息。  套接字提供了单机简单可靠的进程通信同步服务,但是缺点也很明显,只能在单机使用,不能跨机器使用。

SQL连接查询优化[姊妹篇.第五弹]

上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析。  接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨。篇幅过长,请耐心看完。  1.嵌套查询、HASH连接、排序合并连接、笛卡尔连接等怎样玩能达到最优?  2. IN 与 EXISTS 谁快谁慢?  嵌套循环(NESTED LOOPS)  嵌套循环的算法:驱动表返回一行数据,通过连接列传值给被驱动表,驱动表返回多少行,被驱动表就要被扫描多少次。  这里我补充一下驱动表和被驱动表:理解驱动表和被驱动表的本质,需要理解顺序读取和随机读取的差异,内存适合随机读取,硬盘则顺序读取的效率比较好。  驱动表,作为外层循环,若进行一次IO将所有数据读取,则适合顺序读取,一次性批量的把数据读取出来,不考虑缓存情况下。  被驱动表,即里层循环,由于需要不断的拿外层循环传进来的每条记录去匹配,所以如果是适合随机读取的,那么效率就会比较高。如果表上有索引,实际上就意味着这个表是适合随机读取的。   1.嵌套循环可以快速返回两表关联的前几条数据,如果SQL中添加了HINT:FIRST_ROWS,在两表关联的时候,优化器更倾向于嵌套循环。  2.嵌套循环驱动表应该返回少量数据。如果驱动表返回了100万行,那么被驱动表 就会被扫描100万次。这个时候SQL会执行很久,被驱动表会被误认为热点表,被驱动表连接列的索引也会被误认为热点索引。  3.嵌套循环被驱动表必须走索引。如果嵌套循环被驱动表的连接列没包含在索引中,那么被驱动表就只能走全表扫描,而且是反复多次全表扫描。当被驱动表很大的 时候,SQL就执行不出结果。  4.嵌套循环被驱动表的连接列基数应该很高。如果被驱动表连接列的基数很低,那么被驱动表就不应该走索引,这样一来被驱动表就只能进行全表扫描了,但是被驱动表也不能走全表扫描。   5.两表关联返回少量数据才能走嵌套循环。前面提到,嵌套循环被驱动表必须走索引,如果两表关联,返回100万行数据,那么被驱动表走索引就会产生100万次回表。回表一般是单块读,这个时候SQL性能极差,所以两表关联返回少量数据才能走嵌套 循环。   两表关联走不走NL(嵌套循环)是看两个表关联之后返回的数据量多少?还是看驱动表返回的数据量多少?  如果两个表是1∶N关系,驱动表为1,被驱动表为N并且N很大,这时即使驱动表返回数据量很少,也不能走嵌套循环,因为两表关联之后返回的数据量会很多。  所以判断两表关联是否应该走NL应该直接查看两表关联之后返回的数据量,如果 两表关联之后返回的数据量少,可以走NL;返回的数据量多,应该走HASH连接。  SELECT * FROM t1,t2 WHERE t1.id = t2.id; 如果t1有200条数据,t2有200万行数据,t1与t2是1∶N关系,N很低,应该怎么优化SQL?   因为t1与t2是1∶N关系,N很低,我们可以在b的连接列(id)上创建索引,让 t1与t2走嵌套循环(t1 nl t2),这样t2表会被扫描100次,但是每次扫描表的时候走的 是id列的索引(范围扫描)。  如果让t1和t2进行HASH连接,t2表会被全表扫描(因为没有过滤条件),需要查询表中100万行数据,而如果让t1和t2进行嵌套循环,t2表只需要 查询出表中最多几百行数据(100*N)。   一般情况下,一个小表与一个大表关联,我们可以考虑让小表NL大表,大表走连接列索引(如果大表有过滤条件,需要将过滤条件与连接列组合起来创建组合索引),从而避免大表被全表扫描。