C++进阶-2-STL初识
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include<algorithm> 5 using namespace std; 6 7 // STL初识 8 9 // 示例1 10 // 容器:vector算法 11 // 算法:for_each 12 // 迭代器:vector<int>::iterator 13 14 void myPrint(int val) { 15 cout << val << endl; 16 } 17 18 // vector容器存放内置数据类型 19 void test01() { 20 21 // 创建vector容器,数组 22 vector<int> v; 23 24 // 向容器插入数据(尾插) 25 v.push_back(10); 26 v.push_back(20); 27 v.push_back(30); 28 v.
前言 linux系统可以创建多个用户进程,进程之间有多种通信方式,可以使用system-V的IPC对象进行通信;从本文开始,首先介绍system-V IPC之一的共享内存。
一、了解system-V IPC (一)什么是SYSTEM-V IPC? linux系统的内核可以创建一些对象(共享内存、消息队列、信号量),这些对象拥有它们自己的标识符(ID),并且每一个对象都是通过一个唯一的key来绑定(识别)它;多个进程可以这些对象来通信,这些内核中的对象被人们称为system-V IPC。
上面讲的这些IPC对象它是存在于内核中,和进程是相互独立的;进程想使用这些IPC对象,那它怎么知道现在用的是哪一个对象呢?所以需要提供一个唯一的值来识别(绑定)这些IPC对象。那么在linux系统里面怎么获取一个唯一的值呢?我们都知道,对于linux系统来说,一切都是文件,文件是唯一的,那么它的inode节点也是唯一的,所以可以利用它来创建一个唯一的值,也就是上面提到的key。
linux提供了一个api函数ftok,它可以帮我们创建一个唯一的key,来绑定一个IPC对象。(创建key的原理这里简述一下:就是通过文件的inode号和一个用户指定的工程id(proj_id)来制作key,具体怎么生成这里不详细展述)
那么多个进程使用这个相同的key,就可以获取到同一个IPC对象的ID,从而使用同一个IPC对象来进行通信。
下面展示一下linux系统中的IPC对象的有关信息(使用命令ipcs)
注意:输入ipcs -m只显示共享内存;输入ipcs -q只显示消息队列;输入ipcs -s只显示信号量
上述的IPC 对象在内核内部使用链表维护,不同的对象使用 IPC 标识符来标识,如消息队列标识符 msqid、共享内存标识符 shmid,信号量标识符 semid。对于用户来说,内核提供了简洁的接口,不同的进程通过指定的key 就可以访问具体的对象。
(二)system-V IPC的特点 1.独立于进程2.没有文件名和文件描述符3.IPC对象具有key和ID
二、使用共享内存实现进程间通信(示例) 1.设计意图 实现两个进程通信,一个进程往共享内存写数据,另一个从共享内存读取数据
2.设计思路 1、首先有两个程序:p1.c、p2.c;
2、这两个程序先后运行之后系统会创建两个进程(下面统称为p1、p2);
3、p1创建一块共享内存、创建两个信号量
4、p2获取这块共享内存、打开信号量
5、p1从键盘获取字符串,然后往共享内存写入数据
6、p2从共享内存读取数据,并打印出数据
7、通信过程使用posix有名信号量实现同步(即p1写完数据p2才能读取数据)
3.代码实现 程序p1.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <error.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/ipc.h> #include <sys/shm.
reduce 函数: 在 Python3 中,reduce 函数被放到 functools 模块里,在 Python2 中还是在全局命名空间。 reduce 函数的第一个参数是一个函数,第二个参数是序列类型的对象,将函数按照从左到右的顺序作用在序列上 计算1-100的和 from functools import reducedef test(): lists = [] # for 循环往列表中加入 1-100 的数据 for i in range(1,101): lists.append(i) return reduce(lambda x,y: x+y , lists)
前言 随着python越来越火爆并在2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,且置于Java、C和JavaScript之上,越来越多的人了解python.
但是,很多人都会疑惑:
它凭什么这么火爆呢?学了它能干什么?它真的有这么厉害吗?
在这些问题中,我把一些问的比较多的,大家比较关心的问题在文章里简单的阐述一下,希望能给大家带来帮助。
一、Python目前的就业领域有哪些 ?工作前景如何? Python 目前的就业领域主要有这么几个: 1、 web开发 对于一些网站的开发,诸如后台管理系统,或者一些微服务,写一些接口,都可以使用 Python 实现。
Python有很多优秀的Web开发框架,如Flask、Django、Bootstar等,可以帮助你快速搭建一个网站。当需要一个新功能时,用Python只需添加几行代码即可,这受到了很多初创型公司的一致欢迎。
例如:知乎、豆瓣、小米这样的大厂,最早的网站都是用Python搭建的,国外则更多,如YouTube 、Quora、Reddit、Instagram、Netflix等代表地球顶级流量的大站,都构建在Python之上。
平均薪资:15~30K
2、 数据采集(爬虫) 这个可能是你们比较关心的,爬虫相关问题后面还会多说一些,网络上有大量的数据,可是数据量太多太杂,如何获取到想要的数据,就需要数据采集了。也是小伙伴们入坑Python的第一驱动力。
靠人力一星期才能完成的工作,你泡着咖啡、跑10分钟爬虫即可,又装X又实用,学会Python爬虫后,即使不做程序员的工作也能加分不少。而 Python 是最适合做爬虫的语言,你懂的。
平均薪资:10~30K
友情提示:注意法律风险
3、 数据分析 主要是对数据进行分析、预判,从而做出选择或者对过去的复盘, Python 拥有非常成熟的数据分析库,有些人会有疑问,爬虫不也得数据分析么?咋就分开来说?其实爬虫只是数据分析的一种手段,数据来源不一定是通过爬虫获得,其它的数据也可以做分析。
这个时代,数据和黄金一样宝贵,现在最火的公司如:今日头条、抖音、快手等,产品都建立在对用户的分析之上,更不用说淘宝、京东、拼多多这些 “定制化推荐” 的老手。
可以说,所有的商业公司都需要这样一个角色,Python数据分析师也成了目前最火的职业之一。
Python是目前数据分析业务中,最常用的语言。学会Python后,基本可以满足数据分析经理的招聘需求。
平均薪资:20~30K
4、 人工智能/机器学习 人工智能是目前最火的方向之一,薪资待遇非常高(土豪的代名词)。从招聘网站上可以看到,80K、100K 的职位也有很多,流下了没有技术的泪水,当然这些职位的要求也相对较高。
需要掌握一定的算法,对识别技术,自动化技术,深度学习,自然语言处理等方面都得有一定的研究
Python是人工智能时代的头牌语言,不管是机器学习(Machine Learning)还是深度学习(Deep Learning),最常用的工具和框架都需要用Python调用,如Numpy、scipy、pandas、matplotlib、PyTorch、TensorFlow等,因此Python是人工智能工程师的必备技能之一。
薪资:20~50K
5、自动化运维工程师 运维工程师经常要监控上百台机器的运行,或同时部署的情况。使用Python可以自动化批量管理服务器,起到1个人顶10个人的效果。
自动化运维也是Python的主要应用方向之一,它在系统管理、文档管理方面都有很强大的功能。
平均薪资:15~25K
技能要求:Python、shell、Linux、数据库、openpyxl库等
6、自动化测试工程师 测试的工作是枯燥和重复的,在过去,每次产品更新,都要重复测试一遍,效率低而且容易出错。
Python提供了很多自动化测试的框架,如Selenium、Pytest等,避免了大量的重复工作,Python自动化测试也变得越来越流行。
平均薪资:10~20K
技能要求:Python、自动化测试框架、Linux等
7、Python游戏开发 Python游戏开发的招聘集中在游戏服务器领域,主要负责网络游戏的服务器功能开发、性能优化等工作。
平均薪资:15~25K
技能要求:Python、Python Web框架、Linux、数据库、Nginx等
进入MySql官网---》下载社区版(MySQL Community (GPL) Downloads)
安装完成后一直点击next,直到出现下图,点击next
8.密码验证方式(Authentication Method)这一步很重要
第一个是强密码校验,mysql推荐使用最新的数据库和相关客户端,MySQL8换了加密插件,所以如果选第一种方式,很可能你的navicat等客户端连不上mysql8。
所以这里一定要选第二个(下图红框的地方)
选第一个是安装MySql自带的可视化工具,免费的;如果不需要可以不勾选
linux系统由于其开放性、多用户、多任务和多线程、设备独立性、丰富的网络功能等优点受到大家的欢迎,越来越多的人想要去了解甚至学习Linux,而Linux功能通常是通过繁多的各类命令来实现的,所以学习Linux命令是基础,掌握好各种命令才能玩转Linux,但是Linux命令太多了,全部记住的话确实不容易也没必要,因为有些命令用的比较少,等用到的时候再记忆就可以。但一些常用到的命令是要必须掌握的。下面我就介绍一下Linux常见命令及分类。
Linux命令分类的话可分为文件管理类,文档编辑类,系统管理类,磁盘管理类,文件传输类,网络通讯类,设备管理类,备份压缩类及其他命令等。
其中文件管理类命令常见的有pwd:显示当前所在的位置,cd:切换目录,mkdir:创建目录,touch:创建空文件或改变文件的时间戳属性,ls:显示目录下的内容及相关属性信息,cp:复制文件或目录,mv:移动或重命名文件,rm:删除文件或目录,rmdir:删除空目录,ln:硬链接与软链接,readlink:查看符号链接文件的内容,find:查找目录下的文件,xargs:将标准输入转换成命令行参数,rename:重命名文件,dirname:显示文件或目录路径,chattr:改变文件的扩展属性,lsattr:查看文件扩展属性,file:显示文件的类型,md5sum:计算和校验文件的MD5值,chown:改变文件或目录的用户和用户组,chmod:改变文件或目录权限,chgrp:更改文件用户组 ,umask:显示或设置权限掩码。
文档编辑类常见命令有cat:合并文件或查看文件内容,tac:反向显示文件内容,more:分页显示文件内容,less:分页显示文件内容,head:显示文件内容头部,tail:显示文件内容尾部,tailf:跟踪日志文件,cut:从文本中提
取一段文字并输出,split:分割文件,paste:合并文件,join:按两个文件的相同字段合并,uniq:去除重复行,wc:统计文件的行数、单词数或字节数,iconv:转换文件的编码格式,diff:比较两个文件的不同,vimdiff:可视化比较工具,rev:反向输出文件内容,tr:替换或删除字符,vi/vim:纯文本编辑器。
系统管理类常见命令有lsof:查看进程打开的文件,uptime:显示系统的运行时间及负载,free:查看系统内存信息,iftop:动态显示网络接口流量信息,vmstat:虚拟内存统计,mpstat:CPU信息统计,iostat:I/O信息统计,iotop:动态显示磁盘I/O统计信息,chkconfig:管理开机服务,ntsysv:管理开机服务,setup:系统管理工具,ethtool:查询网卡参数,mii-tool:管理网络接口的状态,rpm:RPM包管理器,yum:自动化RPM包管理工具。
磁盘管理类常见命令有fdisk:磁盘分区工具,partprobe:更新内核的硬盘分区表信息,tune2fs:调整ext2/ext3/ext4文件系统参数,parted:磁盘分区工具,mkfs:创建Linux文件系统,dumpe2fs:导出ext2/ext3/ext4文件系统信息,resize2fs:调整ext2/ext3/ext4文件系统大小,fsck:检查并修复Linux文件系统,mount:挂载文件系统,umount:卸载文件系统,df:报告文件系统磁盘空间的使用情况,mkswap:创建交换分区,swapon:激活交换分区,swapoff:关闭交换分区,sync:刷新文件系统缓冲区。 文件传输类常见命令有tftp:上传及下载文件,curl:文件传输工具,fsck:检查并修复Linux文件系统,ftpwho:显示ftp会话信息,iprm:删除打印队列中的打印任务,rmt命令:远端磁带传输协议模块,gpm:提供文字模式下的滑鼠事件处理,ftp:文件传输协议客户端,rsync:远程数据同步工具,symlinks:维护符号连接的工具程序,uuto:将文件传送到远端的UUCP主机,lftp命令:优秀的命令行FTP客户端,ncftp:传输文件,uupick:处理传送进来的文件,tftp:上传及下载文件,lpr:将文件放入打印队列等待打印,lpq:查看打印队列状态lprm:删除打印队列中的打印任务,fsck:检查并修复Linux文件系统,cur:文件传输工具,ftpshut:指定时间关闭FTP服务器,ftpwho:显示ftp会话信息。
网络通讯类常见命令有ifconfig:配置或显示网络接口信息,ifup:激活网络接口,ifdown:禁用网络接口,service network restart
(/etc/init.d/network restart) 激活整个网络,所有网卡,route:显示或管理路由表,arp:管理系统的arp缓存,ip:网络配置工具,netstat:查看网络状态,ss:查看网络状态,traceroute:追踪数据传输路由状况,arping:发送arp请求,telnet:远程登录主机,nc:多功能网络工具,sh:安全地远程登录主机,wget:命令行下载工具,mailq:显示邮件传输队列,mail:发送和接收邮件,nslookup:域名查询工具,dig:域名查询工具,host:域名查询工具,nmap:网络探测工具和安全/端口扫描器,tcpdump:监听网络流量。设备管理类常见命令有add_drv:添加一个新的设备驱动程序到系统中,wodim:将数据写入光盘,cdrwtool:在CD-R CD-RW和DVD-R设备上执行操作,nproc:显示当前进程可用的CPU数目,chcpu:配置CPU,lsscsi:列出SCSI设备及属性,cpuspeed:用户空间的CPU频率调节,pccardctl: PCMCIA卡控制工具,lspcmcia:显示扩展的PCMCIA调试信息,mev:报告鼠标事件。
备份压缩类常见命令有tar:打包备份,gzip:压缩或解压文件,zip:打包和压缩文件,unzip:解压zip文件,scp:远程文件复制,rsync:文件同步工具。其他一些常见命令有hash:显示与清除命令运行时查询的哈希表,wait:等待指令,bc:浮点运算,history:显示与操纵历史命令,rmmod: 删除模块。
命令分类整理后就比较容易记忆,但最好不要死记硬背,而是多操作应用,用的多了自然而然地也就记住了。如果是初接触命令,大家可以看下《Linux就该这么学》,里有新手必须掌握的命令介绍,大家可以参考下。
背景:公司使用数据库已经有一年多的时间,但是在今年年初执行一条insert语句的时间竟然提示记录超长,顿时有点手足无措,后联系达梦运维人员以及网上搜索资料确认,这是因为数据库页大小太小导致的。 解决方案:既然原因是页大小太小,那我们就修改一下参数就好了呗;现实是残酷的,原本以为只是修改一下参数,大不了重启一下数据库就能搞定的问题,但得到的结果是并不行!!!该参数值在数据库初始化完成后,是无法进行更改的,只能重新初始化数据库进行更改。 这就意味着需要重新初始化一个数据库,初始化的数据库将页大小调大,然后把老数据库的数据完整的迁移过来 于是,我们秉着对用户、系统负责的态度,找了一个闲暇的周末,拉着我们可爱的达梦实施同事,搞了两天终于完美切换。
通过这件事,总结三点给大家 1、数据迁移也是一个重要工程,这里就涉及到全量备份、增量备份以及备份数据的恢复问题(后期再详细分享) 2、如下图:数据库初始化的页大小设置页面,页大小可以为 4KB、 8KB、 16KB 或者 32KB;建议设置32(同时注意下方字符集也是在数据库初始化完成后,是无法进行更改的,只能重新初始化数据库进行更改。) 3、人无远虑必有近忧。装数据库也好,做事也好,适当想的长远一些。
4.1 Vim文本编辑器
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境
命令 作用 dd 删除(剪切)光标所在整行 5dd 删除(剪切)从光标处开始的5行 yy 复制光标所在整行 5yy 复制从光标处开始的5行 n 显示搜索命令定位到的下一个字符串 N 显示搜索命令定位到的上一个字符串 u 撤销上一步的操作 p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 命令 作用 :w 保存 :q 退出 :q! 强制退出(放弃对文档的修改内容) :wq! 强制保存退出 :set nu 显示行号 :set nonu 不显示行号 :命令 执行该命令 :整数 跳转到该行 :s/one/two 将当前光标所在行的第一个one替换成two :s/one/two/g 将当前光标所在行的所有one替换成two :%s/one/two/g 将全文中的所有one替换成two ?
一、 背景 客户现场的CDH6.x版本的集群执行一个大分区表时hiveserver2发生了内存溢出。下面针对该问题进行了复现并深入了解了hiveserver2内存加载使用原理;提出了解决此类问题的方案,具体内容如下。
二、HiveServer2内存溢出 2.1查看表文件个数 desc formatted yanyu.tmp
表文件数量为6522102
2.2 查看表文件信息 hadoop fs -ls warehouse/yanyu.db/tmp
分区为string 类型的time字段,分了2001个区。
2.3 查看某个分区下的文件个数为10000个 hadoop fs -ls warehouse/yanyu.db/tmp/time=45
2.4 执行select count(*) 是否内存溢出 可以看到Jvm内存使用明显增大,Hiveserver2内存溢出,进程挂掉了;查看HiveServer2状态标红。
详细日志如下
三、合并小文件以解决HiveServer2内存溢出 3.1小文件合并 将每个分区里的若干个小文件合并成一个文件,最终文件个数为分区数。
合并流程如下:
3.1.1 创建表结构一致的临时表 查看原始表信息
desc formatted yanyu.tmp
然后创建一个数据结构与原表完全一样的临时表用来存储数据。
create table yanyu.tmp_bak like yanyu.tmp;
估计是更新的时候出的幺蛾子,屏幕分辨率只剩800x600了,网上搜了搜,是这么搞定的:
sudo vi /etc/default/grub 在 #GRUB_GFXMODE=800x600 下方增加一行
GRUB_GFXMODE=1920x1080 然后
sudo update-grub 然后重启,就好了。grub我不了解,好像是启动引导有关的。
参考来源: https://blog.csdn.net/weixin_43958086/article/details/108842997