• 关于 系统命令初步 的搜索结果

回答

如果Linux系统的ECS实例CPU持续保持高使用率,则会对系统稳定性和业务运行造成影响。可以按如下步骤进行处理。 定位问题。找到影响CPU使用率过高的具体进程。 分析处理。查看影响CPU使用率过高的进程是否正常,并分类进行处理。 对于正常进程:您需要对程序进行优化或者升级服务器配置。 对于异常进程:您可以手动对进程进行查杀,也可以使用第三方安全工具去查杀。 CPU负载的查询分析 在Linux系统中,查看进程的常用命令如下所示。本文主要介绍vmstat和top。 vmstat top ps -aux ps -ef 使用vmstat命令查看 通过vmstat命令,从系统维度查看CPU资源的使用情况。命令格式类似如下,表示结果一秒刷新一次。 vmstat -n 1 示例如下。 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 2684984 310452 2364304 0 0 5 17 19 35 4 2 94 0 0 0 0 0 2687504 310452 2362268 0 0 0 252 1942 4326 5 2 93 0 0 0 0 0 2687356 310460 2362252 0 0 0 68 1891 4449 3 2 95 0 0 0 0 0 2687252 310460 2362256 0 0 0 0 1906 4616 4 1 95 0 0 注:返回结果中的主要数据列说明如下。 r:表示系统中CPU等待处理的线程。一个CPU每次只能处理一个线程,所以该数值越大,通常表示系统运行越慢。 us:用户模式消耗的CPU时间百分比。该值较高时,说明用户进程消耗的CPU时间比较多。如果该值长期超过50%,则需要对程序算法或代码等进行优化。 sy:内核模式消耗的CPU时间百分比。 wa:IO等待消耗的CPU时间百分比。该值较高时,说明IO等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。 id:处于空闲状态的CPU时间百分比。如果该值持续为0,同时sy是us的两倍,则通常说明系统面临CPU资源短缺。 使用top命令查看 登录Linux实例,关于如何登录Linux实例,请参考使用管理终端连接Linux实例。 执行如下命令,从进程纬度来查看CPU、内存等资源的使用情况。命令格式类似如下。 top 系统显示类似如下。 top - 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05 Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st KiB Mem: 1016656 total, 946628 used, 70028 free, 169536 buffers KiB Swap: 0 total, 0 used, 0 free. 448644 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 41412 3824 2308 S 0.0 0.4 0:19.01 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd 针对负载问题,您只需关注回显的第一行和第三行信息,详细说明如下。 top命令的第一行显示的内容17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05,依次为系统当前时间、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载,这与直接执行uptime命令查询结果一致。 top命令的第三行会显示当前CPU资源的总体使用情况,下方会显示各个进程的资源占用情况。 通过 P 键,可以对CPU使用率进行倒序排列,进而定位系统中占用CPU较高的进程。 提示:通过 M 键,您可以对系统内存使用情况进行排序。如果有多核CPU,数字键1可以显示每核CPU的负载状况。 执行如下命令,可以查看每个进程ID对应的程序文件。 ll /proc/PID/exe 操作案例 案例一:使用top命令终止CPU消耗较大的进程 通过top命令查看系统的负载问题,并定位耗用较多CPU资源的进程,在运行界面快速终止相应的异常进程。 想要终止某个进程,先键入小写字母 k。 输入想要终止的进程PID,默认为输出结果的第一个PID。如下图所示,假如想要终止PID为23的进程,输入23后回车。 操作成功后,界面会出现类似Send pid 23 signal [15/sigterm]的提示信息让用户进行确认。按回车确认即可。 案例二:CPU使用率较低但负载较高 问题描述 当前Linux系统没有业务程序运行。通过top命令观察,发现CPU很空闲,但是load average却非常高,如下图所示。 处理办法 load average是对CPU负载进行评估的,其值越高说明其任务队列越长,处于等待执行的任务越多。出现此种情况时,可能是由于僵死进程导致的。可以通过ps -axjf命令查看是否存在 D+ 状态进程,该状态是指不可中断的睡眠状态。处于该状态的进程无法终止,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。 案例三:kswapd0进程占用CPU较高 操作系统使用分页机制来管理物理内存。操作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以操作系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中。由于内存持续不足,这个换页动作持续进行。kswapd0是虚拟内存管理中负责换页的进程,当服务器内存不足的时候kswapd0会执行换页操作,这个换页操作是十分消耗主机CPU资源的。如果通过top命令发现该进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。 问题描述 kswapd0进程占用了系统大量CPU资源。 处理办法 执行如下命令,查看kswapd0进程。 top 系统显示类似如下,发现kswapd0进程持续处于非睡眠状态,且运行时间较长并持续占用较高CPU资源,则通常是由于系统在持续的进行换页操作所致。 通过free 、ps等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。 针对系统当前内存不足的问题,您可以重启一些服务,释放内存。 提示:从长远的角度来看,您需要对内存大小进行升级。

1934890530796658 2020-03-26 00:48:16 0 浏览量 回答数 0

回答

CPU 跑满或跑高的问题定位 若云服务器 ECS 的 CPU 持续跑高,会对系统的稳定性和业务运行造成影响。Linux 系统下,查看进程的常用命令如下: ps -auxps -eftop Linux 系统中,通常使用 top 命令来查看系统的负载问题,并定位耗用较多 CPU 资源的进程。 操作步骤 通过控制台管理终端连接到 ECS 实例,参见使用远程连接功能连接 ECS 实例。 说明:资源负载异常时,通常无法通过 SSH 进行远程连接,建议您通过控制台管理终端进行连接。 通过 top 命令查看系统当前的运行情况。 top - 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05 Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st KiB Mem: 1016656 total, 946628 used, 70028 free, 169536 buffers KiB Swap: 0 total, 0 used, 0 free. 448644 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 41412 3824 2308 S 0.0 0.4 0:19.01 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd 针对负载问题,您只需关注回显的第一行和第三行信息,详细说明如下。 top 命令的第一行显示的内容 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05 依次为 系统当前时间 、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载,这与直接执行 uptime 命令查询结果一致。 top 命令的第三行会显示当前 CPU 资源的总体使用情况,下方会显示各个进程的资源占用情况。 通过字母键 P,可以对 CPU 使用率进行倒序排列,进而定位系统中占用 CPU 较高的进程。 说明:通过字母键 M, 您可以对系统内存使用情况进行排序。如果有多核 CPU,数字键 1 可以显示每核 CPU 的负载状况。 通过 ll /proc/PID/exe 可以查看每个进程 ID 对应的程序文件。 CPU 跑满或跑高的分析处理 CPU 的跑满或跑高,在确认具体的进程结果后,针对异常的进程,您需要通过 top 命令将其终止;而对于 kswapd0 进程导致的内存不足等问题,您需要对系统进行规格的升级或程序的优化。 使用 top 直接终止 CPU 消耗较大的进程 您可以直接在 top 运行界面快速终止相应的异常进程。操作步骤如下: 若您想要终止某个进程,只需按下小写的 k 键。 输入想要终止的进程 PID (top 输出结果的第一列)。例如,若您想要终止 PID 为 86 的进程,输入 86 后按回车即可。 操作成功后,界面会出现类似 Send pid 86 signal [15/sigterm] 的提示信息。按回车确认即可。 kswapd0 进程占用导致 CPU 较高 操作系统都用分页机制来管理物理内存,系统会把一部分硬盘空间虚拟成内存使用。由于内存的速度要比磁盘快得多,所以系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中。 kswapd0 是虚拟内存管理中负责换页的进程,当服务器内存不足的时候 kswapd0 会执行换页操作,这个换页操作是十分消耗主机 CPU 资源的。操作步骤如下: 通过 top 命令查看 kswapd0 进程。 检查该进程是否持续处于非睡眠状态,且运行时间较长。若是,可以初步判定系统在持续地进行换页操作,kswapd0 进程占用了系统大量 CPU 资源。 您可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。 针对系统当前内存不足的问题,您可以重启 Apache,释放内存。 说明:从长远的角度来看,您需要对内存进行升级。 带宽跑满或跑高的分析处理 对于正常进程导致的带宽跑满或跑高的问题,需要对服务器的带宽进行升级。对于异常进程,有可能是由于恶意程序问题,或者是部分 IP 恶意访问导致,也可能是服务遭到了 CC 攻击。 通常情况下,您可以使用 iftop 工具或 nethogs 查看流量的占用情况,进而定位到具体的进程。 使用 iftop 工具排查 在服务器内部安装 iftop 流量监控工具。 yum install iftop -y 服务器外网带宽被占满时,如果通过远程无法登陆,可通过阿里云终端管理进入到服务器内部,运行下面命令查看流量占用情况: iftop -i eth1 -P 注意:-P 参数将会显示请求端口。执行 iftop -i eth0 -P 命令,可以查看通过服务器哪个端口建立的连接,以及内网流量。举例如下: 在上图中,您可以查看到流量高耗的是服务器上 53139 端口和 115.205.150.235 地址建立的连接。 执行 netstat 命令反查 53139 端口对应的进程。 netstat -tunlp |grep 53139 经反查,服务器上 vsftpd 服务产生大量流量,您可以通过停止服务或使用 iptables 服务来对指定地址进行处理,如屏蔽 IP 地址或限速,以保证服务器带宽能够正常使用。 使用 nethogs 进行排查 在服务器内部安装 nethogs 流量监控工具。 yum install nethogs -y 通过 nethogs 工具来查看网卡上进程级的流量信息,若未安装可以通过 yum、apt-get 等方式安装。举例如下: 若 eth1 网卡跑满,执行命令 nethogs eth1。 查看每个进程的网络带宽情况以及进程对应的 PID。 确定导致带宽跑满或跑高的具体进程。 若进程确定是恶意程序,可以通过执行 kill -TERM <PID> 来终止程序。 说明: 如果是 Web 服务程序,您可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量。日志分析可以使用 logwatch 或 awstats 等工具进行。 使用 Web 应用防火墙防御 CC 攻击 若您的服务遭受了 CC 攻击,请在 Web 应用防火墙控制台尽快开启 CC 安全防护。 登录 Web应用防火墙 控制台。 在 CC 安全防护中,启动状态按钮,并在模式中选择 正常。

小川游鱼 2019-12-02 00:15:14 0 浏览量 回答数 0

回答

HTTP 1xx-信息提示 这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。 100-继续。 101-切换协议。 2xx-成功 这类状态代码表明服务器成功地接受了客户端请求。 200-确定。客户端请求已成功。 201-已创建。 202-已接受。 203-非权威性信息。 204-无内容。 205-重置内容。 206-部分内容。 3xx-重定向 客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。 301-对象已永久移走,即永久重定向。 302-对象已临时移动。 304-未修改。 307-临时重定向。 4xx-客户端错误 发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。 401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示: 401.1-登录失败。 401.2-服务器配置导致登录失败。 401.3-由于ACL对资源的限制而未获得授权。 401.4-筛选器授权失败。 401.5-ISAPI/CGI应用程序授权失败。 401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。 403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因: 403.1-执行访问被禁止。 403.2-读访问被禁止。 403.3-写访问被禁止。 403.4-要求SSL。 403.5-要求SSL128。 403.6-IP地址被拒绝。 403.7-要求客户端证书。 403.8-站点访问被拒绝。 403.9-用户数过多。 403.10-配置无效。 403.11-密码更改。 403.12-拒绝访问映射表。 403.13-客户端证书被吊销。 403.14-拒绝目录列表。 403.15-超出客户端访问许可。 403.16-客户端证书不受信任或无效。 403.17-客户端证书已过期或尚未生效。 403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。 403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。 403.20-Passport登录失败。这个错误代码为IIS6.0所专用。 404-未找到。 404.0-(无)–没有找到文件或目录。 404.1-无法在所请求的端口上访问Web站点。 404.2-Web服务扩展锁定策略阻止本请求。 404.3-MIME映射策略阻止本请求。 405-用来访问本页面的HTTP谓词不被允许(方法不被允许) 406-客户端浏览器不接受所请求页面的MIME类型。 407-要求进行代理身份验证。 412-前提条件失败。 413–请求实体太大。 414-请求URI太长。 415–不支持的媒体类型。 416–所请求的范围无法满足。 417–执行失败。 423–锁定的错误。 5xx-服务器错误 服务器由于遇到错误而不能完成该请求。 500-内部服务器错误。 500.12-应用程序正忙于在Web服务器上重新启动。 500.13-Web服务器太忙。 500.15-不允许直接请求Global.asa。 500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。 500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。 500.100-内部ASP错误。 501-页眉值指定了未实现的配置。 502-Web服务器用作网关或代理服务器时收到了无效响应。 502.1-CGI应用程序超时。 502.2-CGI应用程序出错。application. 503-服务不可用。这个错误代码为IIS6.0所专用。 504-网关超时。 505-HTTP版本不受支持。 FTP 1xx-肯定的初步答复 这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 110重新启动标记答复。 120服务已就绪,在nnn分钟后开始。 125数据连接已打开,正在开始传输。 150文件状态正常,准备打开数据连接。 2xx-肯定的完成答复 一项操作已经成功完成。客户端可以执行新命令。200命令确定。 202未执行命令,站点上的命令过多。 211系统状态,或系统帮助答复。 212目录状态。 213文件状态。 214帮助消息。 215NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。 220服务就绪,可以执行新用户的请求。 221服务关闭控制连接。如果适当,请注销。 225数据连接打开,没有进行中的传输。 226关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。 227进入被动模式(h1,h2,h3,h4,p1,p2)。 230用户已登录,继续进行。 250请求的文件操作正确,已完成。 257已创建“PATHNAME”。 3xx-肯定的中间答复 该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。331用户名正确,需要密码。 332需要登录帐户。 350请求的文件操作正在等待进一步的信息。 4xx-瞬态否定的完成答复 该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。 425无法打开数据连接。 426Connectionclosed;transferaborted. 450未执行请求的文件操作。文件不可用(例如,文件繁忙)。 451请求的操作异常终止:正在处理本地错误。 452未执行请求的操作。系统存储空间不够。 5xx-永久性否定的完成答复 该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。 501在参数中有语法错误。 502未执行命令。 503错误的命令序列。 504未执行该参数的命令。 530未登录。 532存储文件需要帐户。 550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 551请求的操作异常终止:未知的页面类型。 552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。 553未执行请求的操作。不允许的文件名。 常见的FTP状态代码及其原因 150-FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器准备在端口20上打开新连接,发送一些数据。 226-命令在端口20上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。 230-客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。 331-客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。 426-命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。 530-该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS的配置可能拒绝匿名访问。 550-命令未被执行,因为指定的文件不可用。例如,要GET的文件并不存在,或试图将文件PUT到您没有写入权限的目录。

元芳啊 2019-12-02 00:44:14 0 浏览量 回答数 0

试用中心

为您提供0门槛上云实践机会,企业用户最高免费12个月

回答

一、故障现象描述 NAS操作系统内核为Linux,自带的存储有16块硬盘,总共分两组,每组做了RAID5,Linux操作系统无法正常启动,在服务启动到cups那里就停止了,按键ctrl+c强制断开也没有响应,查看硬盘状态,都是正常的,没有报警或者警告现象。 二、问题判断思路 通过上面这些现象,首先判断NAS硬件应该没问题,NAS存储盘也应该正常,现在Linux无法启动,应该是Linux系统本身存在问题,因此,首先从Linux系统入手进行排查。 三、问题处理过程 1、第一次处理过程 NAS系统本身就是一个Linux内核装载了一个文件系统管理软件,管理软件可以对系统磁盘、系统服务、文件系统等进行管理和操作,正常情况下,基于Linux内核的NAS系统应该启动到init3或者init5模式下,由于NAS仅用了Linux一个内核模块和几个简单服务,所以判断NAS下的Linux系统肯定是启动到init 3模式下,那么现在无法启动到多用户字符界面下,何不让Linux直接进入单用户(init 1)模式下呢,因为单用户模式下仅仅启用系统所必须的几个服务,而cpus服务是应用程序级别的,肯定不会在“init 1”模式下启动,这样就避开了cups无法启动的问题,所以,下面的工作就是要进入Linux的单用户模式下。 很多的Linux发行版本都可以在启动的引导界面通过相关的设置进入单用户模式下,通过查看NAS的启动过程,基本判断这个Linux系统与RHEL/Centos发行版极为类似,因此,就通过RHEL/Centos进入单用户模式的方法试一试。 RHEL/Centos进入单用户模式很简单,就是在系统启动到引导欢迎界面下,按键e,然后编辑正确的内核引导选项,在最后面加上“single”选项,最后直接按键“b“即可进入单用户了。 接下来,重新启动NAS,然后硬件自检,接着开始启动Linux,一直在等待这个NAS的启动欢迎界面,但是欢迎界面一直没出来,就直接进入内核镜像,加载内核阶段了,没有内核引导界面,如何进入单用户啊,经过简单思考,还是决定在硬件检测完毕后直接按键盘”e“键,奇迹出现了,还真的可以,NAS进入到了内核引导界面,通过简单观察,发行第二个正是要引导的内核选项,于是移动键盘上下键,选择这个内核,然后在按键”e“,进入内核引导编辑界面了,在这行的最后面,输入“single”,然后按回车键,返回上个界面,接着按键“b”开始进行单用户引导,经过一分钟的时间,系统如愿以偿的进入了单用户下的shell命令行。 进入单用户模式后,能做的事情就很多了,首先要做的就是将cups服务在多用户模式下自启动关闭,执行命令如下: chkconfig --levle 35 cups off 执行成功后,重启系统进入多用户模式下,看看系统是否能正常启动。 2、第二次处理过程 将cups服务开机自启动关闭后,重启NAS,发现问题依旧,NAS还是启动到cups服务那里停止了,难道上面的命令没有执行成功吗?明明已经禁止了cups服务启动了,怎么还是启动了呢?于是,继续重启NAS,再次进入单用户模式下,看看问题究竟出在哪里了。 进入单用户后,再次执行chkconfig 命令,依旧可以成功,难道是cups服务有问题,先看看配置文件,执行如下命令: vi /etc/cups/cupsd.conf 在这里发现了一个问题,vi打开cupsd.conf时,提示“write file in swap”,文件明明真实存在,怎么说在虚拟内存中呢,经过思考,只有一种可能,NAS设备的Linux系统分区应该没有正确挂载,导致在进入单用户的时候,所有文件都存储在了虚拟内存中,要验证非常简单,执行“df”命令查看即可,如下图所示: 从这里可以看出,Linux的系统分区并未挂载,通过“fdisk -l”检查下磁盘分区状态,输出如下图所示: 通过输出可知,NAS的系统盘是/dev/sda,仅划分了/dev/sda1和/dev/sda2两个系统分区,而数据磁盘是经过做RAID5完成的,在系统上的设备标识分别是/dev/sdb1和/dev/sdc1,由于单用户默认没有挂载任何NAS磁盘,这里尝试手动挂载NAS的系统盘,执行如下命令: [root@NASserver ~]#mount /dev/sda2 /mnt [root@NASserver ~]#mount /dev/sda1 /opt 这里的/mnt、/opt是随意挂载的目录,也可以挂载到其他空目录下,挂载完成,分别进入这连个目录看看内容有什么,如下图所示: 通过这两个内容的查看,初步判断,/dev/sda2分区应该是Linux的根分区,而/dev/sda1应该是/boot分区。现在分区已经挂载上去了,再次执行df命令看看挂载情况,如下图所示: 到这里为止,发现问题了。/dev/sda2磁盘分区已经没有可用的磁盘空间了,而这个分区刚好是NAS系统的根分区,根分区没有空间了,那么系统启动肯定就出问题了。 下面再把思路转到前面介绍的案例中,由于系统cups服务在启动的时候会写启动日志到根分区,而根分区因为没有空间了,所以也就无法写日志了,由此导致的结果就是cups服务无法启动,这就解释了此案例中NAS系统每次启动到cups服务就停止的原因。 四解决问题 由于NAS系统只有根分区和/boot分区,所以系统产生的相关日志都会存储在根分区中,现在根分区满了,首先可以清理的就是/var目录下的系统相关日志文件,通常可以清理的目录有/var/log,执行如下命令查看/var/log日志目录占据磁盘空间大小: [root@NASserver ~]# du -sh /var/log 50.1G /var/log 通过命令输出发现/var/log目录占据了根分区仅70%的空间,清理这个目录下的日志文件即可释放大部分根分区空间,清理完毕,重启NAS系统,发现系统cups服务能正常启动了,NAS服务也启动正常了。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:02:01 0 浏览量 回答数 0

回答

1.可以尝试通过“管理终端”登录操作:https://help.aliyun.com/document_detail/25433.html 2.使用ping看网站连接情况: 关于ping 这是我在百度上查到的: 一、什么是PING[编辑本段]是DOS命令,一般用于检测网络通与不通 ,也叫时延,其值越大,速度越慢PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。 它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。Ping 是Windows系列自带的一个可执行命令。利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障。应用格式:Ping IP地址。该命令还可以加许多参数使用,具体是键入Ping按回车即可看到详细说明。ping指的是端对端连通,通常用来作为可用性的检查, 但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。 严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。 二、PING测试,通常的情况下你如果不用作服务器或者进行网络测试,可以放心的选中它,保护你的电脑 1.Ping本机IP例如本机IP地址为:172.168.200.2。则执行命令Ping 172.168.200.2。如果网卡安装配置没有问题,则应有类似下列显示:Replay from 172.168.200.2 bytes=32 time<10msPing statistics for 172.168.200.2Packets Sent=4 Received=4 Lost=0 0% lossApproximate round trip times in milli-secondsMinimum=0ms Maxiumu=1ms Average=0ms如果在MS-DOS方式下执行此命令显示内容为:Request timed out,则表明网卡安装或配置有问题。将网线断开再次执行此命令,如果显示正常,则说明本机使用的IP地址可能与另一台正在使用的机器IP地址重复了。如果仍然不正常,则表明本机网卡安装或配置有问题,需继续检查相关网络配置。 2.Ping网关IP假定网关IP为:172.168.6.1,则执行命令Ping 172.168.6.1。在MS-DOS方式下执行此命令,如果显示类似以下信息:Reply from 172.168.6.1 bytes=32 time=9ms TTL=255Ping statistics for 172.168.6.1 Packets Sent=4 Received=4 Lost=0 Approximate round trip times in milli-secondsMinimum=1ms Maximum=9ms Average=5ms则表明局域网中的网关路由器正在正常运行。反之,则说明网关有问题。 3.Ping远程IP这一命令可以检测本机能否正常访问Internet。比如本地电信运营商的IP地址为:202.102.48.141。在MS-DOS方式下执行命令:Ping 202.102.48.141,如果屏幕显示:Reply from 202.102.48.141 bytes=32 time=33ms TTL=252Reply from 202.102.48.141 bytes=32 time=21ms TTL=252Reply from 202.102.48.141 bytes=32 time=5ms TTL=252Reply from 202.102.48.141 bytes=32 time=6ms TTL=252Ping statistics for 202.102.48.141 Packets Sent=4 Received=4 Lost=0 0% lossApproximate round trip times in milli-secondsMinimum=5ms Maximum=33ms Average=16ms则表明运行正常,能够正常接入互联网。反之,则表明主机文件(windows/host)存在问题。 3.如还有疑问,请联系客服 到阿里云会员中心提交工单,让售后帮你检查看看。 或点击右侧的浮标:联系我们 提交工单的地址:https://workorder.console.aliyun.com/#/ticket/createIndex 更多阿里云帮助文档 https://help.aliyun.com 希望对您有帮助!

阿里朵 2019-12-02 02:19:08 0 浏览量 回答数 0

回答

域名不能正确解析可以更换其它的dns服务器,在百度搜索“公用dns”,选一个就行了 IIS状态代码的含义 概要 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码。该状态代码记录在IIS日志中,同时也可能在Web浏览器或FTP客户端显示。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。 更多信息 日志文件的位置 在默认状态下,IIS把它的日志文件放在%WINDIR\System32\Logfiles文件夹中。每个万维网(WWW)站点和FTP站点在该目录下都有一个单独的目录。在默认状态下,每天都会在这些目录下创建日志文件,并用日期给日志文件命名(例如,exYYMMDD.log)。 HTTP 1xx-信息提示 这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。 100-继续。 101-切换协议。 2xx-成功 这类状态代码表明服务器成功地接受了客户端请求。 200-确定。客户端请求已成功。 201-已创建。 202-已接受。 203-非权威性信息。 204-无内容。 205-重置内容。 206-部分内容。 3xx-重定向 客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。 301-对象已永久移走,即永久重定向。 302-对象已临时移动。 304-未修改。 307-临时重定向。 4xx-客户端错误 发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。 401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示: 401.1-登录失败。 401.2-服务器配置导致登录失败。 401.3-由于ACL对资源的限制而未获得授权。 401.4-筛选器授权失败。 401.5-ISAPI/CGI应用程序授权失败。 401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。 403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因: 403.1-执行访问被禁止。 403.2-读访问被禁止。 403.3-写访问被禁止。 403.4-要求SSL。 403.5-要求SSL128。 403.6-IP地址被拒绝。 403.7-要求客户端证书。 403.8-站点访问被拒绝。 403.9-用户数过多。 403.10-配置无效。 403.11-密码更改。 403.12-拒绝访问映射表。 403.13-客户端证书被吊销。 403.14-拒绝目录列表。 403.15-超出客户端访问许可。 403.16-客户端证书不受信任或无效。 403.17-客户端证书已过期或尚未生效。 403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。 403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。 403.20-Passport登录失败。这个错误代码为IIS6.0所专用。 404-未找到。 404.0-(无)–没有找到文件或目录。 404.1-无法在所请求的端口上访问Web站点。 404.2-Web服务扩展锁定策略阻止本请求。 404.3-MIME映射策略阻止本请求。 405-用来访问本页面的HTTP谓词不被允许(方法不被允许) 406-客户端浏览器不接受所请求页面的MIME类型。 407-要求进行代理身份验证。 412-前提条件失败。 413–请求实体太大。 414-请求URI太长。 415–不支持的媒体类型。 416–所请求的范围无法满足。 417–执行失败。 423–锁定的错误。 5xx-服务器错误 服务器由于遇到错误而不能完成该请求。 500-内部服务器错误。 500.12-应用程序正忙于在Web服务器上重新启动。 500.13-Web服务器太忙。 500.15-不允许直接请求Global.asa。 500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。 500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。 500.100-内部ASP错误。 501-页眉值指定了未实现的配置。 502-Web服务器用作网关或代理服务器时收到了无效响应。 502.1-CGI应用程序超时。 502.2-CGI应用程序出错。application. 503-服务不可用。这个错误代码为IIS6.0所专用。 504-网关超时。 505-HTTP版本不受支持。 FTP 1xx-肯定的初步答复 这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 110重新启动标记答复。 120服务已就绪,在nnn分钟后开始。 125数据连接已打开,正在开始传输。 150文件状态正常,准备打开数据连接。 2xx-肯定的完成答复 一项操作已经成功完成。客户端可以执行新命令。200命令确定。 202未执行命令,站点上的命令过多。 211系统状态,或系统帮助答复。 212目录状态。 213文件状态。 214帮助消息。 215NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。 220服务就绪,可以执行新用户的请求。 221服务关闭控制连接。如果适当,请注销。 225数据连接打开,没有进行中的传输。 226关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。 227进入被动模式(h1,h2,h3,h4,p1,p2)。 230用户已登录,继续进行。 250请求的文件操作正确,已完成。 257已创建“PATHNAME”。 3xx-肯定的中间答复 该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。331用户名正确,需要密码。 332需要登录帐户。 350请求的文件操作正在等待进一步的信息。 4xx-瞬态否定的完成答复 该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。 425无法打开数据连接。 426Connectionclosed;transferaborted. 450未执行请求的文件操作。文件不可用(例如,文件繁忙)。 451请求的操作异常终止:正在处理本地错误。 452未执行请求的操作。系统存储空间不够。 5xx-永久性否定的完成答复 该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。 501在参数中有语法错误。 502未执行命令。 503错误的命令序列。 504未执行该参数的命令。 530未登录。 532存储文件需要帐户。 550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 551请求的操作异常终止:未知的页面类型。 552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。 553未执行请求的操作。不允许的文件名。 常见的FTP状态代码及其原因 150-FTP使用两个端口:21用于发送命令,20用于发送数据。状态代码150表示服务器准备在端口20上打开新连接,发送一些数据。 226-命令在端口20上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。 230-客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。 331-客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。 426-命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。 530-该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS的配置可能拒绝匿名访问。 550-命令未被执行,因为指定的文件不可用。例如,要GET的文件并不存在,或试图将文件PUT到您没有写入权限的目录。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:01:30 0 浏览量 回答数 0

问题

JDK 环境变量配置诡异问题?报错

爱吃鱼的程序员 2020-06-07 17:30:13 0 浏览量 回答数 1

问题

JDK 环境变量配置诡异问题 :报错

kun坤 2020-06-14 15:44:41 0 浏览量 回答数 1

问题

JDK 环境变量配置诡异问题:配置报错 

kun坤 2020-06-02 15:01:53 0 浏览量 回答数 1

问题

JDK 环境变量配置诡异问题-jdk报错

montos 2020-05-31 23:32:36 0 浏览量 回答数 1

问题

JDK 环境变量配置诡异问题 - java报错

montos 2020-06-03 21:55:08 3 浏览量 回答数 1

回答

配置你的 csh/tcsh 选择 csh/tcsh 和许多刚从 Linux 转到 BSD 的人不同,我并没有装完 BSD 就顺手安装 bash,因为之前除了打命令,我没有用到额外的功能,bash 也好,csh 也罢,在我眼里都是当做 shell 来用。但是渐渐地,我发现 csh 真的挺好用,它小巧、简单、开放,不需要额外依赖。可能有人要拿脚本能力来作对比,比如bash脚本支持函数,csh不支持等。对我来说,其实我从未像模像样地写过一个脚本,我的工作是 C++ 程序员。从我的角度来看,论脚本能力,其实bash、csh、zsh都比不上Python,论兼容性,bash、csh、zsh都比不上sh,论强大,bash、csh、zsh都比不上C/C++,甚至asm。再看易学程度,bash、csh、zsh可能还是要输给Python。综上,脚本能力忽略不计。:-x好了,说了这么多大不敬的话,我们开始切入正题。8-) 配置文件 全局配置文件 /etc/csh.cshrc个人配置文件 ~/.cshrc或~/.tcshrc为了方便,建议修改全局性的配置文件,这样每个账号都可以享受便利。按键绑定 通常,我们不设置按键绑定也能很好地工作,但是对于远程登录,可能需要一些额外的配置。比如,为了避免putty登录后,Home、End、Delete等变成~,你需要如下配置: bindkey '\e[1~' beginning-of-line # Home bindkey '\e[3~' delete-char # Delete bindkey '\e[4~' end-of-line # End bindkey "^W" backward-delete-word # Delete bindkey -k up history-search-backward # PageUp bindkey -k down history-search-forward # PageDown 提示符 设置一个漂亮使用的的提示符可以让工作变得更愉快高效。 以下是一个合理的配置方案: if ( $?prompt ) then #如果$prompt变量尚未设置,则做如下设置 if ( "$uid" == "0" ) then #判断用户的uid set prompt = "%U%n%u@%m [%l] %B%~%b # " #对于root,我们显示“#”号 else set prompt = "%U%n%u@%m [%l] %B%~%b % " #对于普通用户,显示“%”号。 endif endif Konsole中的效果如下: prompt2_img 一种彩色的配置方案如下: set cr = "%{\e[31m%}" #开始红色 set cg = "%{\e[32m%}" #开始绿色 set c0 = "%{\e[0m%}" #恢复为默认色彩 # Set some variables for interactive shells if ( $?prompt ) then if ( "$uid" == "0" ) then set prompt = "%B%U%n%u@%m.$cr%l$c0%b %c2 %B%#%b " else set prompt = "%B%U%n%u@%m.$cg%l$c0%b %c2 %B%%%b " endif endif Konsole中的效果如下: prompt3.png 颜色代码: 1 for brighter colors 4 for underlined text 5 for flashing text 30 for black foreground 31 for red foreground 32 for green foreground 33 for yellow (or brown) foreground 34 for blue foreground 35 for purple foreground 36 for cyan foreground 37 for white (or gray) foreground 40 for black background 41 for red background 42 for green background 43 for yellow (or brown) background 44 for blue background 45 for purple background 46 for cyan background 47 for white (or gray) background 查看更多参数,及其作用: man tcsh #查看man手册 /%/ #搜索到“%/”开始的地方 环境变量等 你在抱怨 FreeBSD下的 ls 没有显示颜色, grep 出来的东西没有高亮吗? 那么你需要如下的配置: 让 ls 鲜艳些 setenv LSCOLORS ExGxFxdxCxegedabagExExsetenv CLICOLOR yes 让 grep 匹配到的字符高亮 setenv GREP_OPTIONS --color=auto对于在KDE下使用fcitx的人,需要如下三行设置,其实就是fcitx安装完后所提示的内容,如果你够细心的话。setenv XMODIFIERS @im=fcitxsetenv QT_IM_MODULE ximsetenv GTK_IM_MODULE xim嗯, ls 有颜色了,但是等等,为何 tab 不能补全?你需要如下配置:set autolist若要在补全时也将历史记录(即命令history的输出)纳入参考范围,可以添加如下配置:set autoexpand而对与命令history本身,则提供了以下两项配置:set history = 100set savehist = 10第一项设置了历史记录暂存条数,默认为100;第二项设置了退出当前Shell时会将多少条最新的暂存条数写入~/.history,其取值显然不能大于set history。需要说明的是,在savehist的设置中,还可以使用类似set savehist = (10 merge)的写法;这里merge表示保存时合并历史记录中的相同命令,合并后的序列号、时间则与其中最新者相同。如果命令输错了,让csh/tcsh 为你纠正:set correct = cmd为了在命令行启动某个游戏,或者kde程序,例如dolphin、kcalc,你需要加两个路径到$path中去:/usr/games /usr/local/kde4/bin/ set path = (/sbin /bin /usr/sbin /usr/local/bin /usr/games /usr/local/sbin /usr/bin $HOME/bin /usr/local/kde4/bin/) 黑魔法防御术 重定向防御 重定向很强大,我们有时候会运行诸如“date » b.txt”,“ls -l > files.txt”等命令。然而如果一不小心,把“»”输成“>”会造成什么后果呢?为此,tcsh提供了noclobber这个选项:set noclobber有了它,悲剧就不会发生。如果“>”的目标文件已存在,tcsh会拒绝重定向。覆盖防御 是否遇到过“mv a b”,从而把有用的b文件覆盖掉了?为此,我们要让mv和cp的行为更谨慎:alias mv 'mv -i'alias cp 'cp -i'如果目标文件已存在,mv和cp会拒绝操作,除非使用参数“-f”。误删防御 rm这个命令自从诞生起,就一直是个危险的操作。我们可以让rm更温和:alias rm 'rm -i'这样rm之前,会要求再次确认。一切皆alias 前面,我们在黑魔法防御术中已经初步见识了alias。alias不仅可以避免危险操作,还可以简化命令,自创命令。除非极短,否则良好的alias命名,应当以某个统一的单词或字母开头,例如下面即将展示的reload/edit系列、update系列、show系列等。先展示最基本的alias,并逐条解释。alias .. 'cd ..' #两点即可回到上级目录alias - 'cd -' #一杠返回上次的目录alias q 'exit' #退出登录alias rm 'rm -i' #误删防御alias del 'rm -r' #删除整个目录alias mv 'mv -i' #覆盖防御alias cp 'cp -i' #覆盖防御alias ls 'ls -I' #root状态下,默认不显示隐藏文件(.*)。BSD的ls很特殊,root默认显示所有文件。alias la 'ls -a' #显示所有文件alias ll 'ls -h -l' #显示文件权限和大小(以合理的单位)alias lr 'ls -R' #递归显示目录alias dh 'df -h -a -T' #以合适的单位显示所有磁盘的剩余空间,以及文件系统类型(如ufs、devfs、procfs)。alias ds 'du -sh' #以合适的单位显示查看每个文件/文件夹的大小find/wc系列。快速查找当前目录下的所有c/cxx/python源码文件。结合wc可以统计行数。alias find-c 'find . -name ".h" -o -name ".c"'alias find-x 'find . -name ".h" -o -name ".hpp" -o -name ".cpp" -o -name ".cxx"'alias find-py 'find . -name ".py"'alias wc-c 'find . -name ".h" -o -name ".c" | xargs wc | sort -k 4'alias wc-x 'find . -name ".h" -o -name ".hpp" -o -name ".cpp" -o -name ".cxx" | xargs wc | sort -k 4'alias wc-py 'find . -name ".py" | xargs wc | sort -k 4'reload/edit系列。实现快速修改,载入配置文件。alias reload-rc.conf 'sh /etc/rc'alias reload-cshrc 'unalias * && source /etc/csh.cshrc'alias edit-xorg.conf 'vim /etc/xorg.conf'alias edit-csh.cshrc 'vim /etc/csh.cshrc'alias edit-make.conf 'vim /etc/make.conf'alias edit-kern.conf 'vim /etc/kernconf/thinkpad'alias edit-rc.conf 'vim /etc/rc.conf'alias edit-vimrc 'vim /usr/local/share/vim/vimrc'set系列。快速设置locale。 alias setlocale-zhcn 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8'alias setlocale-c 'setenv LC_ALL C'startx专用。保持命令行下为英文locale(避免date等命令出现乱码),而让x环境为中文,适合手动startx而不是kdm的人。 alias sx 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8 && startx && setenv LC_ALL C'make系列。快速编译kernel/world。 alias make-world 'cd /usr/src && make buildworld && cd -'alias make-kernel 'cd /usr/src && make kernel KERNCONF=thinkpad && cd -'alias make-installworld 'cd /usr/src && make installworld && make delete-old && cd -'show系列。查看状态或某些信息。 alias show-ifstat 'systat -ifstat' #查看网络接口的数据流量alias show-geom 'gstat' #查看I/O状态alias show-thermal 'sysctl dev.acpi_ibm.0.thermal' #查看ThinkPad笔记本的各部分温度alias show-cpufreq 'sysctl dev.cpu.0.freq' #查看当前cpu频率alias show-cpulevels 'sysctl dev.cpu.0.freq_levels' #查看可用的cpu频率alias show-battery 'sysctl hw.acpi.battery.life && sysctl hw.acpi.battery.time' #查看电力alias show-smartctl 'smartctl -a /dev/ad4' #需要安装smartmontools,查看磁盘smart参数alias show-alldep 'make all-depends-list' #需要在ports的安装目录下执行,显示所有依赖alias show-dep 'portmaster --show-work ./ | sort' #同上,且需要安装portmaster,只显示尚未安装的依赖alias show-ver 'pkg_version -v' #查看是否有软件可更新update系列。顾名思义,更新嘛。alias update-locatedb '/usr/libexec/locate.updatedb' #更新locate数据库alias update-kernsrc 'csup -L 2 /etc/supfiles/stable-supfile' #同步kernel treealias update-ports 'portsnap fetch update' #同步ports treealias update-apps 'portmaster -a --force-config' #需要安装portmaster,更新所有软件,提示配置选项杂项,均需要安装第三方软件才能用。 alias lt 'tree -N -C' #需要安装tree。树状显示目录,-N可以保证中文显示,-C使用彩色alias l3 'tree -N -C -L 3' #目录最多递归三级alias l4 'tree -N -C -L 4' #四级alias l5 'tree -N -C -L 5' #五级alias l6 'tree -N -C -L 6' #六级alias v 'vim' #不用说,我懒alias m 'mocp' #控制台下的cs架构播放器alias getdir 'wget -c -r -np -k' #递归下载目录alias ssh-home 'ssh raphael.vicp.cc -l root' #用root账号登录,结合key可以免输密码alias ftp-home 'ftp ftp://syh:syh@raphael.vicp.cc' #BSD自带的ftp,免输账号密码。主机已被电信和工信部和谐,勿再试alias lft-phome 'lftp raphael.vicp.cc -u syh,syh' #lftp的免输账号密码。alias scons 'scons -Q -j 4' #构建工具,默认4个线程进行alias valgrind-checkmem 'valgrind --tool=memcheck --leak-check=full' #检查内存泄漏

小旋风柴进 2019-12-02 02:35:10 0 浏览量 回答数 0

问题

云服务器 ECS Linux 系统 CPU 占用率较高问题如何排查

boxti 2019-12-01 22:02:38 1978 浏览量 回答数 0

回答

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种, 直接上云会扫清硬件采购、 技术等各种障碍,以阿里云为例: image 这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 比如鉴黄、鉴恐等。 而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? 您有并发处理大量视频的需求。 您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF。后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,自己搭建成本更低。 各种格式的音频转换或者各种采样率自定义、音频降噪等功能 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到 OSS 上。 如果您的视频处理系统有上述需求,或者您期望实现一个 弹性、高可用、低成本、免运维、灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。 Serverless 自定义音视频处理 在介绍具体方案之前, 先介绍两款产品: 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。 至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。 Simple 视频处理系统 假设您是对视频进行单纯的处理, 架构方案图如下: image 如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。 OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。 Simple 视频处理系统示例工程地址 强大的监控系统: 您可以直接基于示例工程部署您的 Simple 音视频处理系统服务, 但是当您想要处理超大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数会执行失败,原因是函数计算的执行环境有最大执行时间为 10 分钟的限制,如果最大的 10 分钟不能满足您的需求, 您可以选择: 对视频进行分片 -> 转码 -> 合成处理, 详情参考:fc-fnf-video-processing, 下文会详细介绍; 联系函数计算团队(钉钉群号: 11721331) 或者提工单: 适当放宽执行时长限制; 申请使用更高的函数内存 12G(8vCPU) 为了突破函数计算执行环境的限制(或者说加快大视频的转码速度), 进行各种复杂的组合操作, 此时引入函数工作流 FnF 去编排函数实现一个功能强大的视频处理工作流系统是一个很好的方案。 视频处理工作流系统 image 如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,会同时进行 1 种或者多种格式的转码(由您触发的函数环境变量DST_FORMATS 参数控制)。 所以您可以实现如下需求: 一个视频文件可以同时被转码成各种格式以及其他各种自定义处理,比如增加水印处理或者在 after-process 更新信息到数据库等。 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件, 同时每次文件转码成多种格式也是并行。 结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码, 对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。 所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息 视频处理工作流系统示例工程地址 示例效果: gif 函数计算 + 函数工作流 Serverless 方案 VS 传统方案 卓越的工程效率 自建服务 函数计算 + 函数工作流 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 并行&分布式视频处理 需要很强的开发能力和完善的监控系统来保证稳定性 通过 FnF 资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台 学习上手成本 除了编程语言开发能力和熟悉 FFmpeg 以外,可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码和熟悉 FFmpeg 使用即可 项目上线周期 在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约 30 人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等 预计 3 人天, 开发调试(2人天)+ 压测观察(1 人天) 弹性伸缩免运维,性能优异 自建服务 函数计算 + 函数工作流 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维,视频处理工作流系统 (FnF + FC) 压测;性能优异, 详情见下面的转码性能表 监控报警查询 ECS 或者容器级别的 metrics 提供更细粒度的 FnF 流程执行以及函数执行情况, 同时可以查询每次函数执行的 latency 和日志等, 更加完善的报警监控机制 函数计算 + 函数工作流 Serverless 方案转码性能表 实验视频为是 89s 的 mov 文件 4K 视频: 4K.mov,云服务进行 mov -> mp4 普通转码需要消耗的时间为 188s, 将这个参考时间记为 T 视频切片时间 FC转码耗时 性能加速百分比 45s 160s 117.5% 25s 100s 188% 15s 70s 268.6% 10s 45s 417.8% 5s 35s 537.1% 性能加速百分比 = T / FC转码耗时 从上表可以看出,设置的视频切片时间越短, 视频转码时间越短, 函数计算可以自动瞬时调度出更多的计算资源来一起完成这个视频的转码, 转码性能优异。 更低的成本 具有明显波峰波谷的视频处理场景(比如只有部分时间段有视频处理请求,其他时间很少甚至没有视频处理请求),选择按需付费,只需为实际使用的计算资源付费。 没有明显波峰波谷的视频处理场景,可以使用预付费(包年包月),成本仍然具有竞争力。 函数计算成本优化最佳实践文档。 假设有一个基于 ECS 搭建的视频转码服务,由于是 CPU 密集型计算, 因此在这里将平均 CPU 利用率作为核心参考指标对评估成本,以一个月为周期,10 台 C5 ECS 的总计算力为例, 总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元 函数计算按量付费占整个计算量的占比 <= 10%,费用约为 3×864×10% = 259.2 元,(3G 规格的函数满负载跑满一个月费用为:0.00011108×3×30×24×3600 = 863.8,详情查看计费) ITEM 平均CPU利用率 计算费用 总计 函数计算组合付费 >=80% 998(246.27×3+259.2) <= 998 按峰值预留ECS <=30% 2190(10*219) >=2190 在这个模型预估里面,可以看出 FC 方案具有很强的成本竞争力,在实际场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%, 理由如下: 可能只有部分时间段有视频转码请求 为了用户体验,视频转码速度有一定的要求,可能一个视频转码就需要 10 台 ECS 并行处理来转码, 因此只能预备很多 ECS 因此,在实际场景中, FC 在视频处理上的成本竞争力远强于上述模型。 即使和云厂商视频转码服务单价 PK, 该方案仍有很强的成本竞争力 我们这边选用点播视频中最常用的两个格式(mp4、flv)之间进行相互转换,经实验验证, 函数内存设置为3G,基于该方案从 mp4 转码为 flv 的费用概览表: 实验视频为是 89s 的 mp4 和 flv 格式的文件视频, 测试视频地址: 480P.mp4 720P.mp4 1080P.mp4 4K.mp4 480P.flv 720P.flv 1080P.flv 4K.flv 测试命令: ffmpeg -i test.flv test.mp4 和 ffmpeg -i test.flv test.mp4 mp4 转 flv: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 889 kb/s 24 11.2s 0.003732288 0.032 88.3% 高清 1280720 1963 kb/s 24 20.5s 0.00683142 0.065 89.5% 超清 19201080 3689 kb/s 24 40s 0.0133296 0.126 89.4% 4K 38402160 11185 kb/s 24 142s 0.04732008 0.556 91.5% flv 转 mp4: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 712 kb/s 24 34.5s 0.01149678 0.032 64.1% 高清 1280720 1806 kb/s 24 100.3s 0.033424 0.065 48.6% 超清 19201080 3911 kb/s 24 226.4s 0.0754455 0.126 40.1% 4K 38402160 15109 kb/s 24 912s 0.30391488 0.556 45.3% 成本下降百分比 = (某云视频处理费用 - FC 转码费用)/ 云视频处理费用 某云视频处理,计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是 2 min,即使采用 1.5 min 计算, 成本下降百分比基本在10%以内浮动 从上表可以看出, 基于函数计算 + 函数工作流的方案在计算资源成本上对于计算复杂度较高的 flv 转 mp4 还是计算复杂度较低的 mp4 转 flv, 都具有很强的成本竞争力。 根据实际经验, 往往成本下降比上表列出来的更加明显, 理由如下: 测试视频的码率较高, 实际上很多场景绝大部分都是标清或者流畅视频的转码场景, 码率也比测试视频低,这个时候计算量变小, FC 执行时间短, 费用会降低, 但是通用的云转码服务计费是不变的. 很多视频分辨率在通用的云转码服务是计费是有很大损失的, 比如转码的视频是 856480 或者 1368768, 都会进入云转码服务的下一档计费单价, 比如856480 进入 1280720 高清转码计费档,1368768 进入 19201080 超清转码计费档, 单价基本是跨越式上升, 但是实际真正的计算量增加可能还不到30%, 而函数计算则是真正能做到按计算量付费. 操作部署 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 详情见各自示例工程的 README Simple 视频处理系统示例工程地址 视频处理工作流系统示例工程地址 总结 基于函数计算 FC 和函数工作流 FnF 的弹性高可用视频处理系统天然继承了这两个产品的优点: 无需采购和管理服务器等基础设施,只需专注视频处理业务逻辑的开发,大幅缩短项目交付时间和人力成本 提供日志查询、性能监控、报警等功能快速排查故障 以事件驱动的方式触发响应用户请求 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异 成本极具竞争力 相比于通用的转码处理服务: 超强自定义,对用户透明, 基于 FFmpeg 或者其他音视频处理工具命令快速开发相应的音视频处理逻辑 原有基于 FFmpeg 自建的音视频处理服务可以一键迁移 弹性更强, 可以保证有充足的计算资源为转码服务,比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完 各种格式的音频转换或者各种采样率自定义、音频降噪等功能, 比如专业音频处理工具 aacgain 和 mp3gain 可以和 serverless 工作流完成更加复杂、自定义的任务编排,比如视频转码完成后,记录转码详情到数据库,同时自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力 更多的方式的事件驱动, 比如可以选择 OSS 自动触发(丰富的触发规则), 也可以根据业务选择 MNS 消息(支持 tag 过滤)触发 在大部分场景下具有很强的成本竞争力相比于其他自建服务: 毫秒级弹性伸缩,弹性能力超强,支持大规模资源调用,可弹性支持几万核.小时的计算力,比如 1 万节课半个小时完成转码 只需要专注业务逻辑代码即可,原生自带事件驱动模式,简化开发编程模型,同时可以达到消息(即音视频任务)处理的优先级,可大大提高开发运维效率 函数计算采用 3AZ 部署, 安全性高,计算资源也是多 AZ 获取, 能保证每个用户需要的算力峰值 开箱即用的监控系统, 如上面 gif 动图所示,可以多维度监控函数的执行情况,根据监控快速定位问题,同时给用户提供分析能力, 比如视频的格式分布, size 分布等 在大部分场景下具有很强的成本竞争力, 因为在函数计算是真正的按量付费(计费粒度在百毫秒), 可以理解为 CPU 的利用率为 100% 最后一一回答一下之前列出的问题: Q1: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? A: 如工程示例所示,在虚拟机/容器平台上基于 FFmpeg 的服务可以轻松切换到函数计算, FFmpeg 相关命令可以直接移值到函数计算,改造成本较低, 同时天然继承了函数计算弹性高可用性特性。 Q2:您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF 等。 自己搭建成本更低。 A: 函数计算天生就是解决这些自定义问题, 你的代码你做主, 代码中快速执行几个 FFmpeg 的命令即可完成需求。典型示例: fc-oss-ffmpeg Q3: 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案),after-process 中可以做一些自定义的操作, 您还可以基于此流程再做一些额外处理等, 比如: 再增加后续流程 最开始增加 pre-process Q4: 您有并发同时处理大量视频的需求。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), 当有多个文件同时上传到 OSS, 函数计算会自动伸缩, 并行处理多个文件。详情可以参考 视频处理工作流系统 (FnF + FC) 压测 Q5:您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。A: 详情可以参考视频处理工作流系统 (FnF + FC) 压测, 可以通过控制分片的大小, 可以使得每个大视频都有足够多的计算资源参与转码计算, 大大提高转码速度。 Q6: 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF,后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), FnF 只负责编排调用函数, 因此只需要更新相应的处理函数即可,同时函数有 version 和 alias 功能, 更好地控制灰度上线, 函数计算版本管理 Q7: 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将他们再迁移到 OSS 上。 A: 函数计算可以挂载 NAS, 直接对 NAS 中的文件进行处理

1934890530796658 2020-03-27 18:21:36 0 浏览量 回答数 0

问题

初识Hadoop:报错

kun坤 2020-06-07 00:57:43 0 浏览量 回答数 1

回答

作为一个所谓的计算机科班出身的人来说,特别难为情的是自己的计算机基础很差,比如计算机网络当年一度差点挂掉,多亏当时的老师手下留情,给我一个刚及格的分数,但也因为这门课,造成我在之后申请奖学金的时候与其擦身而过。 我觉得我可以作为一个反例放在阳光下暴晒。熟悉我的读者可能知道我大学是搞 ACM 出身,当年我所有的精力都放在上面,每天沉迷的是学习各种算法,各种姿势切题,以至于我逃了大多数的课,就算去上课的时候也在搞不相关的东西。 当时一方面是环境使然,另一方面是像计算机网络这种课听起来太枯燥。每次考试靠突击,成绩还不错,也不会挂科,就这么随它去了。虽然听过很多基础很重要的说法,有时候会想想是不是要好好补一下基础的东西,还是因为各种各样的原因搁浅了... 直到考研复试,到面试那一步,除了算法方面,面对各种计算机网络\操作系统\数据库的问题,我感觉有点无力招架,只觉得自己当时的脑子充满浆糊,没有思考,有的只是临时死记硬背的东西。直到结束准备离开的时候,居中的老教授含蓄的建议,我才算真正有了要好好再回头去学的意识。 时间越长好像越明白这些基础知识和原理的重要性,这样说起来简单,但是其中的枯燥就让很多摩拳擦掌的同学折戟沉沙,都说兴趣最重要,怎么提气这个兴趣,最近我在逛 b 站的时候偶然发现了这么一个课程,通过图文并茂生动形象的介绍计算机的基础知识,看了十几集,觉得非常的棒,特地把这个《计算机科学速成课》推荐给大家。 Computer Science 是 Crash Course 下的系列课程之一,这个频道下还有很多其它优秀的课程。 Crash Course 链接 这些其它优秀课程范围很广,包括大历史、统计学、生物学、社会学、哲学、物理等等等等几十个学科系列,英语好的可以直接看英文的,英语不好的同学也不怕,可以去万能的 b 站,直接搜"10分钟速成课" 或者直接搜 b 站阿婆主“白花恋诗·彩”,大佬持续不断的翻译了好多,Orz... 当然上面这些不是本次的重点,不做过多说明,感兴趣的可以多关注一下。回到《计算机科学速成课》,为了表示尊重我把英文版的链接先放在下面: Computer Science 网址 这门《Computer Science》一共 40 集,都是英文的可能对英语不好的同学来说难度太大,但是不要慌,国内一些爱好者早已经把它们翻译成中文,也就是我在开头说的《计算机科学速成课》。这门课在 b 站上收获了 6.1 w+ 收藏,1.3w+ 点赞,1.3w+ 投币,在 GitHub 上同样也有 3.9k+ 的 star,妥妥的超级受欢迎的课! 这门 40 集的课真的包含了超多的基础知识: 1 - 早期的计算 - Early Computing 2 - 电子计算 - Electronic Computing 3 - 布尔逻辑与逻辑电路 - Boolean Logic & Logic Gates 4 - 二进制 - Representing Numbers and Letters with Binary 5 - 算术逻辑单元 - How Computers Calculate - the ALU 6 - 寄存器 & 内存 - Registers and RAM 7 - 中央处理器 - The Central Processing Unit(CPU) 8 - 指令和程序 - Instructions & Programs 9 - 高级 CPU 设计 - Advanced CPU Designs10 - 编程史话 - Early Programming 11 - 编程语言 - The First Programming Languages 12 - 编程原理:语句和函数 - Programming Basics: Statements & Functions 13 - 算法初步 - Intro to Algorithms 14 - 数据结构 - Data Structures 15 - 阿兰·图灵 - Alan Turing 16 - 软件工程 - Software Engineering 17 - 集成电路、摩尔定律 - Integrated Circuits & Moore’s Law 18 - 操作系统 - Operating Systems 19 - 内存 & 储存介质 - Memory & Storage 20 - 文件系统 - Files & File Systems 21 - 压缩 - Compression 22 - 命令行界面 - Keyboards & Command Line Interfaces 23 - 屏幕 & 2D 图形显示 - Screens & 2D Graphics 24 - 冷战和消费主义 - The Cold War and Consumerism 25 - 个人计算机革命 - The Personal Computer Revolution 26 - 图形用户界面 - Graphical User Interfaces 27 - 3D 图形 - 3D Graphics 28 - 计算机网络 - Computer Networks 29 - 互联网 - The Internet 30 - 万维网 - The World Wide Web 31 - 网络安全 - Cybersecurity 32 - 黑客与攻击 - Hackers & Cyber Attacks 33 - 加密 - Cryptography 34 - 机器学习与人工智能 - Machine Learning & Artificial Intelligence 35 - 计算机视觉 - Computer Vision 36 - 自然语言处理 - Natural Language Processing 37 - 机器人 - Robots 38 - 计算机中的心理学 - Psychology of Computing 39 - 教育型科技 - Educational Technology 40 - (完结) 奇点,天网,计算机的未来 - The Singularity, Skynet, and the Future of Computing 可以看到真的是应有尽有,像计算机的早期历史、编程的发展史,到二进制、指令和程序,到算法入门、数据结构,甚至是计算机安全、黑客、加密、机器学习 & 人工智能、计算机视觉、自然语言处理、机器人等等等等都有涉及。再夸奖的话我已经说不出来了,只能 Orzzzzzzzzzzzzzzzzz 了... 到这里你以为完了么?不!这怎么能够!译者们还贴心的在每一集的开头放上了片头总结,让你刚开始就能知道这一集讲了啥,哪个时间点讲了哪些知识点,真的是炒鸡贴心! 如此良心的一门课,如此贴心的翻译团队,真的强烈建议大家一定要好好看,沉下心来,认认真真的每天学一点,你会发现真的很不一样,有时候改变和成长就是这么潜移默化的进行。 当然这么好看的课当然希望大家能够多多转发,在看支持,让更多的朋友能够看到,大家一起学习一起进步! 今天的分享就到这,我要赶紧去看视频啦...

剑曼红尘 2020-04-16 18:15:52 0 浏览量 回答数 0

问题

菜鸟新建网站第二步:正则表达式,让nginx服务器为你绑定多个二级域名

coderandroid 2019-12-01 21:25:21 27793 浏览量 回答数 26

问题

文件上传漏洞防御——图片写马的剔除

elinks 2019-12-01 21:14:38 8751 浏览量 回答数 0

问题

如何给项目选择最合适的编程语言?

chaipanpan 2019-12-01 21:04:01 9813 浏览量 回答数 0

回答

前言 这期我想写很久了,但是因为时间的原因一直拖到了现在,我以为一两天就写完了,结果从构思到整理资料,再到写出来用了差不多一周的时间吧。 你们也知道丙丙一直都是创作鬼才来的,所以我肯定不会一本正经的写,我想了好几个切入点,最后决定用一个完整的电商系统作为切入点,带着大家看看,我们需要学些啥,我甚至还收集配套视频和资料,暖男石锤啊,这期是呕心沥血之作,不要白嫖了。 正文 在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们可能会接触的技术栈可能不全,但是够用,最后给个学习路线。 Tip:请多欣赏一会,每个点看一下,看看什么地方是你接触过的,什么技术栈是你不太熟悉的,我觉得还算是比较全的,有什么建议也可以留言给我。 不知道大家都看了一下没,现在我们就要庖丁解牛了,我从上到下依次分析。 前端 你可能会会好奇,你不是讲后端学习路线嘛,为啥还有前端的部分,我只能告诉你,傻瓜,肤浅。 我们可不能闭门造车,谁告诉你后端就不学点前端了? 前端现在很多也了解后端的技术栈的,你想我们去一个网站,最先接触的,最先看到的是啥? 没错就是前端,在大学你要是找不到专门的前端同学,去做系统肯定也要自己顶一下前端的,那我觉得最基本的技术栈得熟悉和了解吧,丙丙现在也是偶尔会开发一下我们的管理系统主要是VUE和React。 在这里我列举了我目前觉得比较简单和我们后端可以了解的技术栈,都是比较基础的。 作为一名后端了解部分前端知识还是很有必要的,在以后开发的时候,公司有前端那能帮助你前后端联调更顺畅,如果没前端你自己也能顶一下简单的页面。 HTML、CSS、JS、Ajax我觉得是必须掌握的点,看着简单其实深究或者去操作的话还是有很多东西的,其他作为扩展有兴趣可以了解,反正入门简单,只是精通很难很难。 在这一层不光有这些还有Http协议和Servlet,request、response、cookie、session这些也会伴随你整个技术生涯,理解他们对后面的你肯定有不少好处。 Tip:我这里最后删除了JSP相关的技术,我个人觉得没必要学了,很多公司除了老项目之外,新项目都不会使用那些技术了。 前端在我看来比后端难,技术迭代比较快,知识好像也没特定的体系,所以面试大厂的前端很多朋友都说难,不是技术多难,而是知识多且复杂,找不到一个完整的体系,相比之下后端明朗很多,我后面就开始讲后端了。 网关层: 互联网发展到现在,涌现了很多互联网公司,技术更新迭代了很多个版本,从早期的单机时代,到现在超大规模的互联网时代,几亿人参与的春运,几千亿成交规模的双十一,无数互联网前辈的造就了现在互联网的辉煌。 微服务,分布式,负载均衡等我们经常提到的这些名词都是这些技术在场景背后支撑。 单机顶不住,我们就多找点服务器,但是怎么将流量均匀的打到这些服务器上呢? 负载均衡,LVS 我们机器都是IP访问的,那怎么通过我们申请的域名去请求到服务器呢? DNS 大家刷的抖音,B站,快手等等视频服务商,是怎么保证同时为全国的用户提供快速的体验? CDN 我们这么多系统和服务,还有这么多中间件的调度怎么去管理调度等等? zk 这么多的服务器,怎么对外统一访问呢,就可能需要知道反向代理的服务器。 Nginx 这一层做了反向负载、服务路由、服务治理、流量管理、安全隔离、服务容错等等都做了,大家公司的内外网隔离也是这一层做的。 我之前还接触过一些比较有意思的项目,所有对外的接口都是加密的,几十个服务会经过网关解密,找到真的路由再去请求。 这一层的知识点其实也不少,你往后面学会发现分布式事务,分布式锁,还有很多中间件都离不开zk这一层,我们继续往下看。 服务层: 这一层有点东西了,算是整个框架的核心,如果你跟我帅丙一样以后都是从事后端开发的话,我们基本上整个技术生涯,大部分时间都在跟这一层的技术栈打交道了,各种琳琅满目的中间件,计算机基础知识,Linux操作,算法数据结构,架构框架,研发工具等等。 我想在看这个文章的各位,计算机基础肯定都是学过的吧,如果大学的时候没好好学,我觉得还是有必要再看看的。 为什么我们网页能保证安全可靠的传输,你可能会了解到HTTP,TCP协议,什么三次握手,四次挥手。 还有进程、线程、协程,什么内存屏障,指令乱序,分支预测,CPU亲和性等等,在之后的编程生涯,如果你能掌握这些东西,会让你在遇到很多问题的时候瞬间get到点,而不是像个无头苍蝇一样乱撞(然而丙丙还做得不够)。 了解这些计算机知识后,你就需要接触编程语言了,大学的C语言基础会让你学什么语言入门都会快点,我选择了面向对象的JAVA,但是也不知道为啥现在还没对象。 JAVA的基础也一样重要,面向对象(包括类、对象、方法、继承、封装、抽象、 多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程你都需要了解。 代码会写了,你就要开始学习一些能帮助你把系统变得更加规范的框架,SSM可以会让你的开发更加便捷,结构层次更加分明。 写代码的时候你会发现你大学用的Eclipse在公司看不到了,你跟大家一样去用了IDEA,第一天这是什么玩意,一周后,真香,但是这玩意收费有点贵,那免费的VSCode真的就是不错的选择了。 代码写的时候你会接触代码的仓库管理工具maven、Gradle,提交代码的时候会去写项目版本管理工具Git。 代码提交之后,发布之后你会发现很多东西需要自己去服务器亲自排查,那Linux的知识点就可以在里面灵活运用了,查看进程,查看文件,各种Vim操作等等。 系统的优化很多地方没优化的空间了,你可能会尝试从算法,或者优化数据结构去优化,你看到了HashMap的源码,想去了解红黑树,然后在算法网上看到了二叉树搜索树和各种常见的算法问题,刷多了,你也能总结出精华所在,什么贪心,分治,动态规划等。 这么多个服务,你发现HTTP请求已经开始有点不满足你的需求了,你想开发更便捷,像访问本地服务一样访问远程服务,所以我们去了解了Dubbo,Spring cloud。 了解Dubbo的过程中,你发现了RPC的精华所在,所以你去接触到了高性能的NIO框架,Netty。 代码写好了,服务也能通信了,但是你发现你的代码链路好长,都耦合在一起了,所以你接触了消息队列,这种异步的处理方式,真香。 他还可以帮你在突发流量的时候用队列做缓冲,但是你发现分布式的情况,事务就不好管理了,你就了解到了分布式事务,什么两段式,三段式,TCC,XA,阿里云的全局事务服务GTS等等。 分布式事务的时候你会想去了解RocketMQ,因为他自带了分布式事务的解决方案,大数据的场景你又看到了Kafka。 我上面提到过zk,像Dubbo、Kafka等中间件都是用它做注册中心的,所以很多技术栈最后都组成了一个知识体系,你先了解了体系中的每一员,你才能把它们联系起来。 服务的交互都从进程内通信变成了远程通信,所以性能必然会受到一些影响。 此外由于很多不确定性的因素,例如网络拥塞、Server 端服务器宕机、挖掘机铲断机房光纤等等,需要许多额外的功能和措施才能保证微服务流畅稳定的工作。 **Spring Cloud **中就有 Hystrix 熔断器、Ribbon客户端负载均衡器、Eureka注册中心等等都是用来解决这些问题的微服务组件。 你感觉学习得差不多了,你发现各大论坛博客出现了一些前沿技术,比如容器化,你可能就会去了解容器化的知识,像**Docker,Kubernetes(K8s)**等。 微服务之所以能够快速发展,很重要的一个原因就是:容器化技术的发展和容器管理系统的成熟。 这一层的东西呢其实远远不止这些的,我不过多赘述,写多了像个劝退师一样,但是大家也不用慌,大部分的技术都是慢慢接触了,工作中慢慢去了解,去深入的。 好啦我们继续沿着图往下看,那再往下是啥呢? 数据层: 数据库可能是整个系统中最值钱的部分了,在我码文字的前一天,刚好发生了微盟程序员删库跑路的操作,删库跑路其实是我们在网上最常用的笑话,没想到还是照进了现实。 这里也提一点点吧,36小时的故障,其实在互联网公司应该是个笑话了吧,权限控制没做好类似rm -rf 、fdisk、drop等等这样的高危命令是可以实时拦截掉的,备份,全量备份,增量备份,延迟备份,异地容灾全部都考虑一下应该也不至于这样,一家上市公司还是有点点不应该。 数据库基本的事务隔离级别,索引,SQL,主被同步,读写分离等都可能是你学的时候要了解到的。 上面我们提到了安全,不要把鸡蛋放一个篮子的道理大家应该都知道,那分库的意义就很明显了,然后你会发现时间久了表的数据大了,就会想到去接触分表,什么TDDL、Sharding-JDBC、DRDS这些插件都会接触到。 你发现流量大的时候,或者热点数据打到数据库还是有点顶不住,压力太大了,那非关系型数据库就进场了,Redis当然是首选,但是MongoDB、memcache也有各自的应用场景。 Redis使用后,真香,真快,但是你会开始担心最开始提到的安全问题,这玩意快是因为在内存中操作,那断点了数据丢了怎么办?你就开始阅读官方文档,了解RDB,AOF这些持久化机制,线上用的时候还会遇到缓存雪崩击穿、穿透等等问题。 单机不满足你就用了,他的集群模式,用了集群可能也担心集群的健康状态,所以就得去了解哨兵,他的主从同步,时间久了Key多了,就得了解内存淘汰机制…… 他的大容量存储有问题,你可能需要去了解Pika…. 其实远远没完,每个的点我都点到为止,但是其实要深究每个点都要学很久,我们接着往下看。 实时/离线/大数据 等你把几种关系型非关系型数据库的知识点,整理清楚后,你会发现数据还是大啊,而且数据的场景越来越多多样化了,那大数据的各种中间件你就得了解了。 你会发现很多场景,不需要实时的数据,比如你查你的支付宝去年的,上个月的账单,这些都是不会变化的数据,没必要实时,那你可能会接触像ODPS这样的中间件去做数据的离线分析。 然后你可能会接触Hadoop系列相关的东西,比如于Hadoop(HDFS)的一个数据仓库工具Hive,是建立在 Hadoop 文件系统之上的分布式面向列的数据库HBase 。 写多的场景,适合做一些简单查询,用他们又有点大材小用,那Cassandra就再合适不过了。 离线的数据分析没办法满足一些实时的常见,类似风控,那Flink你也得略知一二,他的窗口思想还是很有意思。 数据接触完了,计算引擎Spark你是不是也不能放过…… 搜索引擎: 传统关系型数据库和NoSQL非关系型数据都没办法解决一些问题,比如我们在百度,淘宝搜索东西的时候,往往都是几个关键字在一起一起搜索东西的,在数据库除非把几次的结果做交集,不然很难去实现。 那全文检索引擎就诞生了,解决了搜索的问题,你得思考怎么把数据库的东西实时同步到ES中去,那你可能会思考到logstash去定时跑脚本同步,又或者去接触伪装成一台MySQL从服务的Canal,他会去订阅MySQL主服务的binlog,然后自己解析了去操作Es中的数据。 这些都搞定了,那可视化的后台查询又怎么解决呢?Kibana,他他是一个可视化的平台,甚至对Es集群的健康管理都做了可视化,很多公司的日志查询系统都是用它做的。 学习路线 看了这么久你是不是发现,帅丙只是一直在介绍每个层级的技术栈,并没说到具体的一个路线,那是因为我想让大家先有个认知或者说是扫盲吧,我一样用脑图的方式汇总一下吧,如果图片被平台二压了。 资料/学习网站 Tip:本来这一栏有很多我准备的资料的,但是都是外链,或者不合适的分享方式,博客的运营小姐姐提醒了我,所以大家去公众号回复【路线】好了。 絮叨 如果你想去一家不错的公司,但是目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。 如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。 丙丙发现在工作中发现我身边的人真的就是实力越强的越努力,最高级的自律,享受孤独(周末的歪哥)。 总结 我提到的技术栈你想全部了解,我觉得初步了解可能几个月就够了,这里的了解仅限于你知道它,知道他是干嘛的,知道怎么去使用它,并不是说深入了解他的底层原理,了解他的常见问题,熟悉问题的解决方案等等。 你想做到后者,基本上只能靠时间上的日积月累,或者不断的去尝试积累经验,也没什么速成的东西,欲速则不达大家也是知道的。 技术这条路,说实话很枯燥,很辛苦,但是待遇也会高于其他一些基础岗位。 所实话我大学学这个就是为了兴趣,我从小对电子,对计算机都比较热爱,但是现在打磨得,现在就是为了钱吧,是不是很现实?若家境殷实,谁愿颠沛流离。 但是至少丙丙因为做软件,改变了家庭的窘境,自己日子也向小康一步步迈过去。 说做程序员改变了我和我家人的一生可能夸张了,但是我总有一种下班辈子会因为我选择走这条路而改变的错觉。 我是敖丙,一个在互联网苟且偷生的工具人。 创作不易,本期硬核,不想被白嫖,各位的「三连」就是丙丙创作的最大动力,我们下次见! 本文 GitHub https://github.com/JavaFamily 已经收录,有大厂面试完整考点,欢迎Star。 该回答来自:敖丙

剑曼红尘 2020-03-06 11:35:37 0 浏览量 回答数 0

回答

  算法,数据结构是关键,另外还有组合数学,特别是集合与图论,概率论也重要。推荐买一本《算法导论》,那本书行,看起来超爽。。。基本掌握语法还不行啊,语法的超熟练掌握,不然出了错误很难调试的。。。最重要的是超牛皮的头脑啦,分析能力,逻辑推理能力很重要。ACM很好玩啦,祝你成功。。。   acm是3人一组的,以学校为单位报名的,也就是说要得到学校同意,还要有2个一起搞的。其实可能是你不知道你们学校搞acm的地方,建议你好好询问下你们学校管科技创新方面的人。建议你找几个兴趣相同的一起做,互相探讨效果好多了,团队合作也是acm要求的3大能力之一。   数据结构远远不够的,建议你看算法导论,黑书,oj的话个人觉得还是poj好,有水题有好题,而且做的人多,要解题报告什么的也好找。我们就是一些做acm的学生一起搞,也没老师,这样肯定能行的。   基础的话是语言,然后数据结构,然后算法。   ACM有三个方向:算法,数学,实现   要求三种能力:英文,自学,团队协作   简单的说,你要能读懂英文的题意描述,要有一门acm能使用的编程语言,要会数据结构,有一点数学基础,一点编程方面天赋,要有兴趣和毅力(最重要),就具有做ACM的基本条件了。   做acm我推荐c,c++也可以,java在某些情况下好用,但是大多数情况的效率和代码量都不大好,所以建议主用c++,有些题目用java   还有什么问题,可以问我啊。   不好意思,没见过用java描述的acm书籍,大多数是用伪命令,其他有的用的c,c++,老一些的用pascal。java只是用来做高精度的一些题的,个人觉得不用专门看这方面的书,java的基本部分学好就够用了。所以我还是推荐主用c++,在高精度和个别题再用java。你可以找找java描述的算法设计与分析,这个好像有   数据结构:C语言版 清华大学出版社 严蔚敏 《数据结构》   算法:清华大学出版社 王晓东 《算法设计与分析》   麻省理工大学 中译本:机械工业出版社 《算法导论》   基本上这三本书就已经足够了,建议一般水平的人先不要看算法导论,待另外两本书看的差不多的时候,再看算法导论加深理解。   另外还有很多针对性更强的书籍,不过针对性太强,这里就不多介绍了。   以上一些都是些算法方面的书,最好的方式就是做题与看书相结合,很多在线做题的网站,PKU,ZOJ很多,推荐PKU,题目比较多,参与的人比较多。做一段时间的题,然后看书,研究算法,再做题,这样进步比较快。   还有关于ACM竞赛,我有自己的一点话说。   首先说下ACM/ICPC是个团队项目,最后的参赛名额是按照学校为单位的,所以找到志同道合的队友和学校的支持是很重要的。   刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇文章里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助。   一、语言是最重要的基本功   无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关。亚洲赛区的比赛支持的语言包括C/C++与JAVA。笔者首先说说JAVA,众所周知,作为面向对象的王牌语言,JAVA在大型工程的组织与安全性方面有着自己独特的优势,但是对于信息学比赛的具体场合,JAVA则显得不那么合适,它对于输入输出流的操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++慢10倍以上,而竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出了更高的要求,是相当不利的。其实,笔者并不主张大家在这种场合过多地运用面向对象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码,也会降低程序的执行效率。   接着说C和C++。许多现在参加讲座的同学还在上大一,C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力。   而C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。如果有些同学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间的。   C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法;另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。   通过以上的分析,我们可以看出仅就信息学竞赛而言,对语言的掌握并不要求十分全面,但是对于经常用到的部分,必须十分熟练,不允许有半点不清楚的地方,下面我举个真实的例子来说明这个道理——即使是一点很细微的语言障碍,都有可能酿成错误:   在去年清华的赛区上,有一个队在做F题的时候使用了cout和printf的混合输出,由于一个带缓冲一个不带,所以输出一长就混乱了。只是因为当时judge team中负责F题的人眼睛尖,看出答案没错只是顺序不对(答案有一页多,是所有题目中最长的一个输出),又看了看程序发现只是输出问题就给了个Presentation error(格式错)。如果审题的人不是这样而是直接给一个 Wrong Answer,相信这个队是很难查到自己错在什么地方的。   现在我们转入第二个方面的讨论,基础学科知识的积累。   二、以数学为主的基础知识十分重要   虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。今年World Final的总冠军是波兰华沙大学,其成员出自于数学系而非计算机系,这就是一个鲜活的例子。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有一定应用,但是不多。因此,大一的同学也不必为自己还没学数据结构而感到不知从何入手提高,把数学捡起来吧。下面我来谈谈在竞赛中应用的数学的主要分支。   1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,其重中之重又在于图论和组合数学,尤其是图论。   图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。   竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。   2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。   3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。   4、线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。   5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。   6、初等数学与解析几何——这主要就是中学的知识了,用的不多,但是至少比高等数学多,我觉得熟悉一下数学手册上的相关内容,至少要知道在哪儿能查到,还是必要的。   7、高等数学——纯粹运用高等数学来解决的题目我接触的只有一道,但是一些题目的叙述背景往往需要和这部分有一定联系,掌握得牢固一些总归没有坏处。   以上就是竞赛所涉及的数学领域,可以说范围是相当广的。我认识的许多人去搞信息学的竞赛就是为了逼着自己多学一点数学,因为数学是一切一切的基础。   三、数据结构与算法是真正的核心   虽然数学十分十分重要,但是如果让三个只会数学的人参加比赛,我相信多数情况下会比三个只会数据结构与算法的人得到更为悲惨的结局。   先说说数据结构。掌握队列、堆栈和图的基本表达与操作是必需的,至于树,我个人觉得需要建树的问题有但是并不多。(但是树往往是很重要的分析工具)除此之外,排序和查找并不需要对所有方式都能很熟练的掌握,但你必须保证自己对于各种情况都有一个在时间复杂度上满足最低要求的解决方案。说到时间复杂度,就又该说说哈希表了,竞赛时对时间的限制远远多于对空间的限制,这要求大家尽快掌握“以空间换时间”的原则策略,能用哈希表来存储的数据一定不要到时候再去查找,如果实在不能建哈希表,再看看能否建二叉查找树等等——这都是争取时间的策略,掌握这些技巧需要大家对数据结构尤其是算法复杂度有比较全面的理性和感性认识。   接着说说算法。算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。这里要说的是,有些初学者在学习这些搜索基本算法是不太注意剪枝,这是十分不可取的,因为所有搜索的题目给你的测试用例都不会有很大的规模,你往往察觉不出程序运行的时间问题,但是真正的测试数据一定能过滤出那些没有剪枝的算法。实际上参赛选手基本上都会使用常用的搜索算法,题目的区分度往往就是建立在诸如剪枝之类的优化上了。   常用算法中的另一类是以“相似或相同子问题”为核心的,包括递推、递归、贪心法和动态规划。这其中比较难于掌握的就是动态规划,如何抽象出重复的子问题是很多题目的难点所在,笔者建议初学者仔细理解图论中一些以动态规划为基本思想所建立起来的基本算法(比如Floyd-Warshall算法),并且多阅读一些定理的证明,这虽然不能有什么直接的帮助,但是长期坚持就会对思维很有帮助。   四、团队配合   通过以上的介绍大家也可以看出,信息学竞赛对于知识面覆盖的非常广,想凭一己之力全部消化这些东西实在是相当困难的,这就要求我们尽可能地发挥团队协作的精神。同组成员之间的熟练配合和默契的形成需要时间,具体的情况因成员的组成不同而不同,这里我就不再多说了。   五、练习、练习、再练习   知识的积累固然重要,但是信息学终究不是看出来的,而是练出来的,这是多少前人最深的一点体会,只有通过具体题目的分析和实践,才能真正掌握数学的使用和算法的应用,并在不断的练习中增加编程经验和技巧,提高对时间复杂度的感性认识,优化时间的分配,加强团队的配合。总之,在这里光有纸上谈兵是绝对不行的,必须要通过实战来锻炼自己。   大家一定要问,我们去哪里找题做,又如何检验程序是否正确呢。这大可不必担心,现在已经有了很多网上做题的站点,这些站点提供了大量的题库并支持在线判卷,你只需要把程序源码提交上去,马上就可以知道自己的程序是否正确,运行所使用的时间以及消耗的内存等等状况。下面我给大家推荐几个站点,笔者不建议大家在所有这些站点上做题,选择一个就可以了,因为每个站点的题都有一定的难易比例,系统地做一套题库可以使你对各种难度、各种类型的题都有所认识。   1、Ural:   Ural是中国学生对俄罗斯的Ural州立大学的简称 ,那里设立了一个Ural Online Problem Set,并且支持Online Judge。Ural的不少题目算法性和趣闻性都很强,得到了国内广大学生的厚爱。根据“信息学初学者之家”网站的统计,Ural的题目类型大概呈如下的分布:   题型   搜索   动态规划   贪心   构造   图论   计算几何   纯数学问题   数据结构   其它   所占比例   约10%   约15%   约5%   约5%   约10%   约5%   约20%   约5%   约25%   这和实际比赛中的题型分布也是大体相当的。有兴趣的朋友可以去看看。   2、UVA:   UVA代表西班牙Valladolid大学(University de Valladolid)。该大学有一个那里设立了一个PROBLEM SET ARCHIVE with ONLINE JUDGE ,并且支持ONLINE JUDGE,形式和Ural大学的题库类似。不过和Ural不同的是,UVA题目多的多,而且比较杂,而且有些题目的测试数据比较刁钻。这使得刚到那里做题的朋友往往感觉到无所适从,要么难以找到合适的题目,要么Wrong Answer了很多次以后仍然不知道错在那里。 如果说做Ural题目主要是为了训练算法,那么UVA题目可以训练全方位的基本功和一些必要的编程素质。UVA和许多世界知名大学联合办有同步网上比赛,因此那里强人无数,不过你先要使自己具有听懂他们在说什么的素质:)   3、ZOJ:   ZOJ是浙江大学建立的ONLINE JUDGE,是中国大学建立的第一个同类站点,也是最好和人气最高的一个,笔者和许多班里的同学就是在这里练习。ZOJ虽然也定位为一个英文网站,但是这里的中国学生比较多,因此让人觉得很亲切。这里目前有500多道题目,难易分配适中,且涵盖了各大洲的题目类型并配有索引,除此之外,ZOJ的JUDGE系统是几个网站中表现得比较好的一个,很少出现Wrong Answer和Presentation error混淆的情况。这里每月也办有一次网上比赛,只要是注册的用户都可以参加。   说起中国的ONLINE JUDGE,去年才开始参加ACM竞赛的北京大学现在也建立了自己的提交系统;而我们学校也是去年开始参加比赛,现在也有可能推出自己的提交系统,如果能够做成,到时候大家就可以去上面做题了。同类网站的飞速发展标志着有越来越多的同学有兴趣进入信息学的领域探索,这是一件好事,同时也意味着更激烈的竞争。

小旋风柴进 2019-12-02 01:20:20 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播